diff --git a/.eslintrc.json b/.eslintrc.json index 4f28defcc..eb5b9f339 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -160,7 +160,6 @@ "jsdoc/check-param-names": ["off", {"checkDestructured": false}], // Allow any text in the license tag. Other checks are not relevant. "jsdoc/check-values": ["off"] - } }] } diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f66aaaa60..dc0ea8c44 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -29,9 +29,9 @@ 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 2022 we +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/) +work on a subset of those browsers. You can check [caniuse.com](https://caniuse.com/) for compatibility information. ### The small print diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a4ddb4514..d26d698d7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -35,11 +35,11 @@ ### Test Coverage - + ### Documentation diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 65f8104c4..434334e54 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -22,7 +22,7 @@ updates: - "PR: chore" - "PR: dependencies" - package-ecosystem: "github-actions" # See documentation for possible values - directory: "/" + directory: "/" target-branch: "develop" schedule: interval: "weekly" diff --git a/.github/release-please.yml b/.github/release-please.yml deleted file mode 100644 index f18bc7a70..000000000 --- a/.github/release-please.yml +++ /dev/null @@ -1,7 +0,0 @@ -primaryBranch: develop -releaseType: node -packageName: blockly -manifest: true -manifestConfig: release-please-config.json -manifestFile: .release-please-manifest.json -handleGHRelease: true diff --git a/.github/workflows/appengine_deploy.yml b/.github/workflows/appengine_deploy.yml index 5b8868aa5..6ea1b0daf 100644 --- a/.github/workflows/appengine_deploy.yml +++ b/.github/workflows/appengine_deploy.yml @@ -42,7 +42,7 @@ jobs: path: _deploy/ - name: Deploy to App Engine - uses: google-github-actions/deploy-appengine@v0.8.0 + uses: google-github-actions/deploy-appengine@v0.8.2 # For parameters see: # https://github.com/google-github-actions/deploy-appengine#inputs with: diff --git a/.github/workflows/conventional-label.yml b/.github/workflows/conventional-label.yml new file mode 100644 index 000000000..efba70b92 --- /dev/null +++ b/.github/workflows/conventional-label.yml @@ -0,0 +1,12 @@ +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"}' + ignored_types: '[]' diff --git a/.github/workflows/tag_module_cleanup.yml b/.github/workflows/tag_module_cleanup.yml index a6b68c3fc..d5555d962 100644 --- a/.github/workflows/tag_module_cleanup.yml +++ b/.github/workflows/tag_module_cleanup.yml @@ -5,14 +5,14 @@ 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: +on: pull_request_target: branches: - goog_module jobs: tag-module-cleanup: - + # Add the type: cleanup label runs-on: ubuntu-latest steps: diff --git a/.github/workflows/update_metadata.yml b/.github/workflows/update_metadata.yml index 0b0d7082a..125236983 100644 --- a/.github/workflows/update_metadata.yml +++ b/.github/workflows/update_metadata.yml @@ -13,7 +13,7 @@ jobs: permissions: contents: write # for peter-evans/create-pull-request to create branch pull-requests: write # for peter-evans/create-pull-request to create a PR - runs-on: ubuntu-latest + runs-on: ubuntu-latest steps: - name: Check Out Blockly @@ -36,7 +36,7 @@ jobs: run: source ./tests/scripts/update_metadata.sh - name: Create Pull Request - uses: peter-evans/create-pull-request@18f90432bedd2afd6a825469ffd38aa24712a91d + uses: peter-evans/create-pull-request@b4d51739f96fca8047ad065eccef63442d8e99f7 with: commit-message: Update build artifact sizes in check_metadata.sh delete-branch: true diff --git a/.release-please-manifest.json b/.release-please-manifest.json deleted file mode 100644 index 32ac6588b..000000000 --- a/.release-please-manifest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - ".": "8.0.0" -} diff --git a/api-extractor.json b/api-extractor.json index bee3a9b8a..649528e7e 100644 --- a/api-extractor.json +++ b/api-extractor.json @@ -379,11 +379,6 @@ }, "tsdoc-escape-right-brace": { "logLevel": "none" - }, - - // Needs to be fixed - "tsdoc-missing-deprecation-message": { - "logLevel": "none" } } } diff --git a/blocks/lists.js b/blocks/lists.js index 1216c1710..c83352aa0 100644 --- a/blocks/lists.js +++ b/blocks/lists.js @@ -133,7 +133,7 @@ blocks['lists_create_with'] = { this.itemCount_ = 3; this.updateShape_(); this.setOutput(true, 'Array'); - this.setMutator(new Mutator(['lists_create_with_item'])); + this.setMutator(new Mutator(['lists_create_with_item'], this)); this.setTooltip(Msg['LISTS_CREATE_WITH_TOOLTIP']); }, /** diff --git a/blocks/procedures.js b/blocks/procedures.js index 6078e55a3..d6fd9ddcf 100644 --- a/blocks/procedures.js +++ b/blocks/procedures.js @@ -150,8 +150,7 @@ const PROCEDURE_DEF_COMMON = { this.argumentVarModels_.push(variable); } else { console.log( - 'Failed to create a variable with name ' + varName + - ', ignoring.'); + `Failed to create a variable named "${varName}", ignoring.`); } } } @@ -461,7 +460,7 @@ blocks['procedures_defnoreturn'] = { .appendField(Msg['PROCEDURES_DEFNORETURN_TITLE']) .appendField(nameField, 'NAME') .appendField('', 'PARAMS'); - this.setMutator(new Mutator(['procedures_mutatorarg'])); + this.setMutator(new Mutator(['procedures_mutatorarg'], this)); if ((this.workspace.options.comments || (this.workspace.options.parentWorkspace && this.workspace.options.parentWorkspace.options.comments)) && @@ -507,7 +506,7 @@ blocks['procedures_defreturn'] = { this.appendValueInput('RETURN') .setAlign(Align.RIGHT) .appendField(Msg['PROCEDURES_DEFRETURN_RETURN']); - this.setMutator(new Mutator(['procedures_mutatorarg'])); + this.setMutator(new Mutator(['procedures_mutatorarg'], this)); if ((this.workspace.options.comments || (this.workspace.options.parentWorkspace && this.workspace.options.parentWorkspace.options.comments)) && diff --git a/blocks/text.js b/blocks/text.js index 90a932d3a..88a5b8012 100644 --- a/blocks/text.js +++ b/blocks/text.js @@ -864,7 +864,7 @@ const TEXT_JOIN_EXTENSION = function() { this.itemCount_ = 2; this.updateShape_(); // Configure the mutator UI. - this.setMutator(new Mutator(['text_create_join_item'])); + this.setMutator(new Mutator(['text_create_join_item'], this)); }; // Update the tooltip of 'text_append' block to reference the variable. diff --git a/closure/goog/base_minimal.js b/closure/goog/base_minimal.js index 6f884e841..096976e5a 100644 --- a/closure/goog/base_minimal.js +++ b/closure/goog/base_minimal.js @@ -23,7 +23,7 @@ var goog = goog || {}; /** * Reference to the global object. This is provided as 'root' by the * UMD wrapper, but prefer globalThis if it is defined. - * + * * https://www.ecma-international.org/ecma-262/9.0/index.html#sec-global-object * * @const diff --git a/core/block.ts b/core/block.ts index a99565754..caff93df2 100644 --- a/core/block.ts +++ b/core/block.ts @@ -180,6 +180,11 @@ export class Block implements IASTNodeLocation, IDeletable { protected collapsed_ = false; protected outputShape_: number|null = null; + /** + * Is the current block currently in the process of being disposed? + */ + private disposing = false; + /** * A string representing the comment attached to this block. * @@ -316,7 +321,7 @@ export class Block implements IASTNodeLocation, IDeletable { * @suppress {checkTypes} */ dispose(healStack: boolean) { - if (this.disposed) { + if (this.isDeadOrDying()) { return; } @@ -338,6 +343,7 @@ export class Block implements IASTNodeLocation, IDeletable { this.workspace.removeTypedBlock(this); // Remove from block database. this.workspace.removeBlockById(this.id); + this.disposing = true; // First, dispose of all my children. for (let i = this.childBlocks_.length - 1; i >= 0; i--) { @@ -360,6 +366,16 @@ export class Block implements IASTNodeLocation, IDeletable { } } + /** + * Returns true if the block is either in the process of being disposed, or + * is disposed. + * + * @internal + */ + isDeadOrDying(): boolean { + return this.disposing || this.disposed; + } + /** * Call initModel on all fields on the block. * May be called more than once. @@ -772,7 +788,7 @@ export class Block implements IASTNodeLocation, IDeletable { * @returns True if deletable. */ isDeletable(): boolean { - return this.deletable_ && !this.isShadow_ && !this.disposed && + return this.deletable_ && !this.isShadow_ && !this.isDeadOrDying() && !this.workspace.options.readOnly; } @@ -791,7 +807,7 @@ export class Block implements IASTNodeLocation, IDeletable { * @returns True if movable. */ isMovable(): boolean { - return this.movable_ && !this.isShadow_ && !this.disposed && + return this.movable_ && !this.isShadow_ && !this.isDeadOrDying() && !this.workspace.options.readOnly; } @@ -865,7 +881,8 @@ export class Block implements IASTNodeLocation, IDeletable { * @returns True if editable. */ isEditable(): boolean { - return this.editable_ && !this.disposed && !this.workspace.options.readOnly; + return this.editable_ && !this.isDeadOrDying() && + !this.workspace.options.readOnly; } /** diff --git a/core/block_animations.ts b/core/block_animations.ts index 68b8d7582..47ee63581 100644 --- a/core/block_animations.ts +++ b/core/block_animations.ts @@ -188,7 +188,11 @@ function disconnectUiStep(group: SVGElement, magnitude: number, start: Date) { skew = `skewX(${val})`; disconnectPid = setTimeout(disconnectUiStep, 10, group, magnitude, start); } - group.setAttribute('transform', skew); + (group as AnyDuringMigration).skew_ = skew; + group.setAttribute( + 'transform', + (group as AnyDuringMigration).translate_ + + (group as AnyDuringMigration).skew_); } /** @@ -202,7 +206,9 @@ export function disconnectUiStop() { if (disconnectPid) { clearTimeout(disconnectPid); } - disconnectGroup.setAttribute('transform', ''); + const group = disconnectGroup; + (group as AnyDuringMigration).skew_ = ''; + group.setAttribute('transform', (group as AnyDuringMigration).translate_); disconnectGroup = null; } } diff --git a/core/block_drag_surface.ts b/core/block_drag_surface.ts index 092bbb820..909aa76bf 100644 --- a/core/block_drag_surface.ts +++ b/core/block_drag_surface.ts @@ -31,39 +31,40 @@ import * as svgMath from './utils/svg_math.js'; * @alias Blockly.BlockDragSurfaceSvg */ export class BlockDragSurfaceSvg { - /** The SVG drag surface. Set once by BlockDragSurfaceSvg.createDom. */ - private svg_: SVGElement; + /** + * The root element of the drag surface. + */ + private svg: SVGElement; /** * This is where blocks live while they are being dragged if the drag * surface is enabled. */ - private dragGroup_: SVGElement; + private dragGroup: SVGElement; /** * Cached value for the scale of the drag surface. * Used to set/get the correct translation during and after a drag. */ - private scale_ = 1; + private scale = 1; /** * Cached value for the translation of the drag surface. * This translation is in pixel units, because the scale is applied to the * drag group rather than the top-level SVG. */ - private surfaceXY_: Coordinate = new Coordinate(0, 0); - private readonly childSurfaceXY_: Coordinate; + private surfaceXY = new Coordinate(0, 0); + + /** + * Cached value for the translation of the child drag surface in pixel + * units. Since the child drag surface tracks the translation of the + * workspace this is ultimately the translation of the workspace. + */ + private readonly childSurfaceXY = new Coordinate(0, 0); /** @param container Containing element. */ constructor(private readonly container: Element) { - /** - * Cached value for the translation of the child drag surface in pixel - * units. Since the child drag surface tracks the translation of the - * workspace this is ultimately the translation of the workspace. - */ - this.childSurfaceXY_ = new Coordinate(0, 0); - - this.svg_ = dom.createSvgElement( + this.svg = dom.createSvgElement( Svg.SVG, { 'xmlns': dom.SVG_NS, 'xmlns:html': dom.HTML_NS, @@ -72,10 +73,15 @@ export class BlockDragSurfaceSvg { 'class': 'blocklyBlockDragSurface', }, this.container); - this.dragGroup_ = dom.createSvgElement(Svg.G, {}, this.svg_ as SVGElement); + + this.dragGroup = dom.createSvgElement(Svg.G, {}, this.svg); } - /** Create the drag surface and inject it into the container. */ + /** + * Create the drag surface and inject it into the container. + * + * @deprecated The DOM is automatically created by the constructor. + */ createDom() { // No alternative provided, because now the dom is just automatically // created in the constructor now. @@ -89,13 +95,13 @@ export class BlockDragSurfaceSvg { * @param blocks Block or group of blocks to place on the drag surface. */ setBlocksAndShow(blocks: SVGElement) { - if (this.dragGroup_.childNodes.length) { + if (this.dragGroup.childNodes.length) { throw Error('Already dragging a block.'); } // appendChild removes the blocks from the previous parent - this.dragGroup_.appendChild(blocks); - this.svg_.style.display = 'block'; - this.surfaceXY_ = new Coordinate(0, 0); + this.dragGroup.appendChild(blocks); + this.svg.style.display = 'block'; + this.surfaceXY = new Coordinate(0, 0); } /** @@ -107,13 +113,13 @@ export class BlockDragSurfaceSvg { * @param scale Scale of the group. */ translateAndScaleGroup(x: number, y: number, scale: number) { - this.scale_ = scale; + this.scale = scale; // Make sure the svg exists on a pixel boundary so that it is not fuzzy. const roundX = Math.round(x); const roundY = Math.round(y); - this.childSurfaceXY_.x = roundX; - this.childSurfaceXY_.y = roundY; - this.dragGroup_!.setAttribute( + this.childSurfaceXY.x = roundX; + this.childSurfaceXY.y = roundY; + this.dragGroup.setAttribute( 'transform', 'translate(' + roundX + ',' + roundY + ') scale(' + scale + ')'); } @@ -124,13 +130,11 @@ export class BlockDragSurfaceSvg { * @internal */ translateSurfaceInternal_() { - let x = this.surfaceXY_!.x; - let y = this.surfaceXY_!.y; // Make sure the svg exists on a pixel boundary so that it is not fuzzy. - x = Math.round(x); - y = Math.round(y); - this.svg_.style.display = 'block'; - dom.setCssTransform(this.svg_, 'translate3d(' + x + 'px, ' + y + 'px, 0)'); + const x = Math.round(this.surfaceXY.x); + const y = Math.round(this.surfaceXY.y); + this.svg.style.display = 'block'; + dom.setCssTransform(this.svg, 'translate3d(' + x + 'px, ' + y + 'px, 0)'); } /** @@ -140,9 +144,9 @@ export class BlockDragSurfaceSvg { * @param deltaY Vertical offset in pixel units. */ translateBy(deltaX: number, deltaY: number) { - const x = this.surfaceXY_.x + deltaX; - const y = this.surfaceXY_.y + deltaY; - this.surfaceXY_ = new Coordinate(x, y); + const x = this.surfaceXY.x + deltaX; + const y = this.surfaceXY.y + deltaY; + this.surfaceXY = new Coordinate(x, y); this.translateSurfaceInternal_(); } @@ -156,7 +160,7 @@ export class BlockDragSurfaceSvg { * @param y Y translation for the entire surface. */ translateSurface(x: number, y: number) { - this.surfaceXY_ = new Coordinate(x * this.scale_, y * this.scale_); + this.surfaceXY = new Coordinate(x * this.scale, y * this.scale); this.translateSurfaceInternal_(); } @@ -167,8 +171,8 @@ export class BlockDragSurfaceSvg { * @returns Current translation of the surface. */ getSurfaceTranslation(): Coordinate { - const xy = svgMath.getRelativeXY(this.svg_ as SVGElement); - return new Coordinate(xy.x / this.scale_, xy.y / this.scale_); + const xy = svgMath.getRelativeXY(this.svg); + return new Coordinate(xy.x / this.scale, xy.y / this.scale); } /** @@ -177,8 +181,8 @@ export class BlockDragSurfaceSvg { * * @returns Drag surface group element. */ - getGroup(): SVGElement|null { - return this.dragGroup_; + getGroup(): SVGElement { + return this.dragGroup; } /** @@ -186,8 +190,8 @@ export class BlockDragSurfaceSvg { * * @returns The SVG drag surface. */ - getSvgRoot(): SVGElement|null { - return this.svg_; + getSvgRoot(): SVGElement { + return this.svg; } /** @@ -197,7 +201,7 @@ export class BlockDragSurfaceSvg { * @returns Drag surface block DOM element, or null if no blocks exist. */ getCurrentBlock(): Element|null { - return this.dragGroup_.firstChild as Element; + return this.dragGroup.firstChild as Element; } /** @@ -209,7 +213,7 @@ export class BlockDragSurfaceSvg { */ getWsTranslation(): Coordinate { // Returning a copy so the coordinate can not be changed outside this class. - return this.childSurfaceXY_.clone(); + return this.childSurfaceXY.clone(); } /** @@ -226,16 +230,16 @@ export class BlockDragSurfaceSvg { const currentBlockElement = this.getCurrentBlock(); if (currentBlockElement) { if (opt_newSurface) { - // appendChild removes the node from this.dragGroup_ + // appendChild removes the node from this.dragGroup opt_newSurface.appendChild(currentBlockElement); } else { - this.dragGroup_.removeChild(currentBlockElement); + this.dragGroup.removeChild(currentBlockElement); } } - this.svg_.style.display = 'none'; - if (this.dragGroup_.childNodes.length) { + this.svg.style.display = 'none'; + if (this.dragGroup.childNodes.length) { throw Error('Drag group was not cleared.'); } - this.surfaceXY_ = new Coordinate(0, 0); + this.surfaceXY = new Coordinate(0, 0); } } diff --git a/core/block_svg.ts b/core/block_svg.ts index 1da3bd32b..615e568c4 100644 --- a/core/block_svg.ts +++ b/core/block_svg.ts @@ -241,7 +241,7 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, * * @returns #RRGGBB string. */ - getColourSecondary(): string|null { + getColourSecondary(): string|undefined { return this.style.colourSecondary; } @@ -250,7 +250,7 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, * * @returns #RRGGBB string. */ - getColourTertiary(): string|null { + getColourTertiary(): string|undefined { return this.style.colourTertiary; } @@ -525,7 +525,7 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, /** Snap this block to the nearest grid point. */ snapToGrid() { - if (this.disposed) { + if (this.isDeadOrDying()) { return; // Deleted block. } if (this.workspace.isDragging()) { @@ -778,10 +778,10 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, (group as AnyDuringMigration).translate_ = ''; (group as AnyDuringMigration).skew_ = ''; common.draggingConnections.push(...this.getConnections_(true)); - this.svgGroup_.classList.add('blocklyDragging'); + dom.addClass(this.svgGroup_, 'blocklyDragging'); } else { common.draggingConnections.length = 0; - this.svgGroup_.classList.remove('blocklyDragging'); + dom.removeClass(this.svgGroup_, 'blocklyDragging'); } // Recurse through all blocks attached under this one. for (let i = 0; i < this.childBlocks_.length; i++) { @@ -861,8 +861,7 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, * @suppress {checkTypes} */ override dispose(healStack?: boolean, animate?: boolean) { - if (this.disposed) { - // The block has already been deleted. + if (this.isDeadOrDying()) { return; } Tooltip.dispose(); @@ -981,8 +980,8 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, } /** - * Updates the color of the block (and children) to match the current disabled - * state. + * Updates the colour of the block (and children) to match the current + * disabled state. * * @internal */ @@ -1067,13 +1066,12 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, if (this.workspace.isDragging()) { // Don't change the warning text during a drag. // Wait until the drag finishes. - this.warningTextDb.set( - id, setTimeout(() => { - if (!this.disposed) { // Check block wasn't deleted. - this.warningTextDb.delete(id); - this.setWarningText(text, id); - } - }, 100)); + this.warningTextDb.set(id, setTimeout(() => { + if (!this.isDeadOrDying()) { + this.warningTextDb.delete(id); + this.setWarningText(text, id); + } + }, 100)); return; } if (this.isInFlyout) { @@ -1537,45 +1535,46 @@ export class BlockSvg extends Block implements IASTNodeLocationSvg, } /** - * Bump unconnected blocks out of alignment. Two blocks which aren't actually - * connected should not coincidentally line up on screen. + * Bumps unconnected blocks out of alignment. + * + * Two blocks which aren't actually connected should not coincidentally line + * up on screen, because that creates confusion for end-users. */ override bumpNeighbours() { - if (this.disposed) { - return; // Deleted block. - } - if (this.workspace.isDragging()) { - return; // Don't bump blocks during a drag. - } - const rootBlock = this.getRootBlock(); - if (rootBlock.isInFlyout) { + this.getRootBlock().bumpNeighboursInternal(); + } + + /** + * Bumps unconnected blocks out of alignment. + */ + private bumpNeighboursInternal() { + const root = this.getRootBlock(); + if (this.isDeadOrDying() || this.workspace.isDragging() || + root.isInFlyout) { return; } - // Don't move blocks around in a flyout. - // Loop through every connection on this block. - const myConnections = this.getConnections_(false); - for (let i = 0, connection; connection = myConnections[i]; i++) { - const renderedConn = (connection); - // Spider down from this block bumping all sub-blocks. - if (renderedConn.isConnected() && renderedConn.isSuperior()) { - renderedConn.targetBlock()!.bumpNeighbours(); + + function neighbourIsInStack(neighbour: RenderedConnection) { + return neighbour.getSourceBlock().getRootBlock() === root; + } + + for (const conn of this.getConnections_(false)) { + if (conn.isSuperior()) { + // Recurse down the block stack. + conn.targetBlock()?.bumpNeighboursInternal(); } - const neighbours = connection.neighbours(config.snapRadius); - for (let j = 0, otherConnection; otherConnection = neighbours[j]; j++) { - const renderedOther = otherConnection as RenderedConnection; - // If both connections are connected, that's probably fine. But if - // either one of them is unconnected, then there could be confusion. - if (!renderedConn.isConnected() || !renderedOther.isConnected()) { - // Only bump blocks if they are from different tree structures. - if (renderedOther.getSourceBlock().getRootBlock() !== rootBlock) { - // Always bump the inferior block. - if (renderedConn.isSuperior()) { - renderedOther.bumpAwayFrom(renderedConn); - } else { - renderedConn.bumpAwayFrom(renderedOther); - } - } + for (const neighbour of conn.neighbours(config.snapRadius)) { + // Don't bump away from things that are in our stack. + if (neighbourIsInStack(neighbour)) continue; + // If both connections are connected, that's fine. + if (conn.isConnected() && neighbour.isConnected()) continue; + + // Always bump the inferior connection. + if (conn.isSuperior()) { + neighbour.bumpAwayFrom(conn); + } else { + conn.bumpAwayFrom(neighbour); } } } diff --git a/core/blockly.ts b/core/blockly.ts index 052c606ba..dcb1d8ba9 100644 --- a/core/blockly.ts +++ b/core/blockly.ts @@ -57,7 +57,7 @@ import {Field} from './field.js'; import {FieldAngle} from './field_angle.js'; import {FieldCheckbox} from './field_checkbox.js'; import {FieldColour} from './field_colour.js'; -import {FieldDropdown} from './field_dropdown.js'; +import {FieldDropdown, MenuGenerator, MenuGeneratorFunction, MenuOption} from './field_dropdown.js'; import {FieldImage} from './field_image.js'; import {FieldLabel} from './field_label.js'; import {FieldLabelSerializable} from './field_label_serializable.js'; @@ -71,7 +71,7 @@ import {FlyoutButton} from './flyout_button.js'; import {HorizontalFlyout} from './flyout_horizontal.js'; import {FlyoutMetricsManager} from './flyout_metrics_manager.js'; import {VerticalFlyout} from './flyout_vertical.js'; -import {Generator} from './generator.js'; +import {CodeGenerator} from './generator.js'; import {Gesture} from './gesture.js'; import {Grid} from './grid.js'; import {Icon} from './icon.js'; @@ -104,7 +104,6 @@ import {IRegistrable} from './interfaces/i_registrable.js'; import {IRegistrableField} from './interfaces/i_registrable_field.js'; import {ISelectable} from './interfaces/i_selectable.js'; import {ISelectableToolboxItem} from './interfaces/i_selectable_toolbox_item.js'; -import {ISerializer as SerializerInterface} from './interfaces/i_serializer.js'; import {IStyleable} from './interfaces/i_styleable.js'; import {IToolbox} from './interfaces/i_toolbox.js'; import {IToolboxItem} from './interfaces/i_toolbox_item.js'; @@ -118,7 +117,7 @@ import {MarkerManager} from './marker_manager.js'; import {Menu} from './menu.js'; import {MenuItem} from './menuitem.js'; import {MetricsManager} from './metrics_manager.js'; -import {Msg} from './msg.js'; +import {Msg, setLocale} from './msg.js'; import {Mutator} from './mutator.js'; import {Names} from './names.js'; import {Options} from './options.js'; @@ -134,12 +133,7 @@ import * as thrasos from './renderers/thrasos/thrasos.js'; import * as zelos from './renderers/zelos/zelos.js'; import {Scrollbar} from './scrollbar.js'; import {ScrollbarPair} from './scrollbar_pair.js'; -import * as serializationBlocks from './serialization/blocks.js'; -import * as serializationExceptions from './serialization/exceptions.js'; -import * as serializationPriorities from './serialization/priorities.js'; -import * as serializationRegistry from './serialization/registry.js'; -import * as serializationVariables from './serialization/variables.js'; -import * as serializationWorkspaces from './serialization/workspaces.js'; +import * as serialization from './serialization.js'; import * as ShortcutItems from './shortcut_items.js'; import {ShortcutRegistry} from './shortcut_registry.js'; import {Theme} from './theme.js'; @@ -157,7 +151,6 @@ import {Trashcan} from './trashcan.js'; import * as utils from './utils.js'; import * as colour from './utils/colour.js'; import * as deprecation from './utils/deprecation.js'; -import * as svgMath from './utils/svg_math.js'; import * as toolbox from './utils/toolbox.js'; import {VariableMap} from './variable_map.js'; import {VariableModel} from './variable_model.js'; @@ -345,23 +338,12 @@ export const defineBlocksWithJsonArray = common.defineBlocksWithJsonArray; */ export const setParentContainer = common.setParentContainer; -/** - * Returns the dimensions of the specified SVG image. - * - * @param svg SVG image. - * @returns Contains width and height properties. - * @deprecated Use workspace.setCachedParentSvgSize. (2021 March 5) - * @see Blockly.WorkspaceSvg.setCachedParentSvgSize - * @alias Blockly.svgSize - */ -export const svgSize = svgMath.svgSize; - /** * Size the workspace when the contents change. This also updates * scrollbars accordingly. * * @param workspace The workspace to resize. - * @deprecated Use workspace.resizeContents. (2021 December) + * @deprecated Use **workspace.resizeContents** instead. * @see Blockly.WorkspaceSvg.resizeContents * @alias Blockly.resizeSvgContents */ @@ -377,7 +359,7 @@ export const resizeSvgContents = resizeSvgContentsLocal; * Copy a block or workspace comment onto the local clipboard. * * @param toCopy Block or Workspace Comment to be copied. - * @deprecated Use Blockly.clipboard.copy(). (2021 December) + * @deprecated Use **Blockly.clipboard.copy** instead. * @see Blockly.clipboard.copy * @alias Blockly.copy */ @@ -392,7 +374,7 @@ export function copy(toCopy: ICopyable) { * Paste a block or workspace comment on to the main workspace. * * @returns True if the paste was successful, false otherwise. - * @deprecated Use Blockly.clipboard.paste(). (2021 December) + * @deprecated Use **Blockly.clipboard.paste** instead. * @see Blockly.clipboard.paste * @alias Blockly.paste */ @@ -407,7 +389,7 @@ export function paste(): boolean { * Duplicate this block and its children, or a workspace comment. * * @param toDuplicate Block or Workspace Comment to be copied. - * @deprecated Use Blockly.clipboard.duplicate(). (2021 December) + * @deprecated Use **Blockly.clipboard.duplicate** instead. * @see Blockly.clipboard.duplicate * @alias Blockly.duplicate */ @@ -423,7 +405,7 @@ export function duplicate(toDuplicate: ICopyable) { * * @param str Input string. * @returns True if number, false otherwise. - * @deprecated Use Blockly.utils.string.isNumber(str). (2021 December) + * @deprecated Use **Blockly.utils.string.isNumber** instead. * @see Blockly.utils.string.isNumber * @alias Blockly.isNumber */ @@ -439,7 +421,7 @@ export function isNumber(str: string): boolean { * * @param hue Hue on a colour wheel (0-360). * @returns RGB code, e.g. '#5ba65b'. - * @deprecated Use Blockly.utils.colour.hueToHex(). (2021 December) + * @deprecated Use **Blockly.utils.colour.hueToHex** instead. * @see Blockly.utils.colour.hueToHex * @alias Blockly.hueToHex */ @@ -461,7 +443,7 @@ export function hueToHex(hue: number): string { * @param thisObject The value of 'this' in the function. * @param func Function to call when event is triggered. * @returns Opaque data that can be passed to unbindEvent_. - * @deprecated Use Blockly.browserEvents.bind(). (December 2021) + * @deprecated Use **Blockly.browserEvents.bind** instead. * @see Blockly.browserEvents.bind * @alias Blockly.bindEvent_ */ @@ -480,7 +462,7 @@ export function bindEvent_( * @param bindData Opaque data from bindEvent_. * This list is emptied during the course of calling this function. * @returns The function call. - * @deprecated Use Blockly.browserEvents.unbind(). (December 2021) + * @deprecated Use **Blockly.browserEvents.unbind** instead. * @see browserEvents.unbind * @alias Blockly.unbindEvent_ */ @@ -508,7 +490,7 @@ export function unbindEvent_(bindData: browserEvents.Data): Function { * the default handler. False by default. If opt_noPreventDefault is * provided, opt_noCaptureIdentifier must also be provided. * @returns Opaque data that can be passed to unbindEvent_. - * @deprecated Use Blockly.browserEvents.conditionalBind(). (December 2021) + * @deprecated Use **Blockly.browserEvents.conditionalBind** instead. * @see browserEvents.conditionalBind * @alias Blockly.bindEventWithChecks_ */ @@ -560,6 +542,7 @@ export const VARIABLE_DYNAMIC_CATEGORY_NAME: string = */ export const PROCEDURE_CATEGORY_NAME: string = Procedures.CATEGORY_NAME; + // Context for why we need to monkey-patch in these functions (internal): // https://docs.google.com/document/d/1MbO0LEA-pAyx1ErGLJnyUqTLrcYTo-5zga9qplnxeXo/edit?usp=sharing&resourcekey=0-5h_32-i-dHwHjf_9KYEVKg @@ -584,12 +567,12 @@ WorkspaceCommentSvg.prototype.showContextMenu = return; } const menuOptions = []; - + if (this.isDeletable() && this.isMovable()) { menuOptions.push(ContextMenu.commentDuplicateOption(this)); menuOptions.push(ContextMenu.commentDeleteOption(this)); } - + ContextMenu.show(e, menuOptions, this.RTL); }; @@ -619,6 +602,7 @@ export {Css}; export {Events}; export {Extensions}; export {Procedures}; +export {Procedures as procedures}; export {ShortcutItems}; export {Themes}; export {Tooltip}; @@ -668,7 +652,7 @@ export {Field}; export {FieldAngle}; export {FieldCheckbox}; export {FieldColour}; -export {FieldDropdown}; +export {FieldDropdown, MenuGenerator, MenuGeneratorFunction, MenuOption}; export {FieldImage}; export {FieldLabel}; export {FieldLabelSerializable}; @@ -679,7 +663,8 @@ export {FieldVariable}; export {Flyout}; export {FlyoutButton}; export {FlyoutMetricsManager}; -export {Generator}; +export {CodeGenerator}; +export {CodeGenerator as Generator}; // Deprecated name, October 2022. export {Gesture}; export {Grid}; export {HorizontalFlyout}; @@ -720,7 +705,7 @@ export {Menu}; export {MenuItem}; export {MetricsManager}; export {Mutator}; -export {Msg}; +export {Msg, setLocale}; export {Names}; export {Options}; export {RenderedConnection}; @@ -753,12 +738,4 @@ export {config}; export const connectionTypes = ConnectionType; export {inject}; export {inputTypes}; -export namespace serialization { - export const blocks = serializationBlocks; - export const exceptions = serializationExceptions; - export const priorities = serializationPriorities; - export const registry = serializationRegistry; - export const variables = serializationVariables; - export const workspaces = serializationWorkspaces; - export type ISerializer = SerializerInterface; -} +export {serialization}; diff --git a/core/bubble.ts b/core/bubble.ts index 0652c852a..000ae773e 100644 --- a/core/bubble.ts +++ b/core/bubble.ts @@ -56,67 +56,68 @@ export class Bubble implements IBubble { static ANCHOR_RADIUS = 8; /** Mouse up event data. */ - private static onMouseUpWrapper_: browserEvents.Data|null = null; + private static onMouseUpWrapper: browserEvents.Data|null = null; /** Mouse move event data. */ - private static onMouseMoveWrapper_: browserEvents.Data|null = null; + private static onMouseMoveWrapper: browserEvents.Data|null = null; + workspace_: WorkspaceSvg; content_: SVGElement; shape_: SVGElement; /** Flag to stop incremental rendering during construction. */ - private readonly rendered_: boolean; + private readonly rendered: boolean; /** The SVG group containing all parts of the bubble. */ - private bubbleGroup_: SVGGElement|null = null; + private bubbleGroup: SVGGElement|null = null; /** * The SVG path for the arrow from the bubble to the icon on the block. */ - private bubbleArrow_: SVGPathElement|null = null; + private bubbleArrow: SVGPathElement|null = null; /** The SVG rect for the main body of the bubble. */ - private bubbleBack_: SVGRectElement|null = null; + private bubbleBack: SVGRectElement|null = null; /** The SVG group for the resize hash marks on some bubbles. */ - private resizeGroup_: SVGGElement|null = null; + private resizeGroup: SVGGElement|null = null; /** Absolute coordinate of anchor point, in workspace coordinates. */ - private anchorXY_!: Coordinate; + private anchorXY!: Coordinate; /** * Relative X coordinate of bubble with respect to the anchor's centre, * in workspace units. * In RTL mode the initial value is negated. */ - private relativeLeft_ = 0; + private relativeLeft = 0; /** * Relative Y coordinate of bubble with respect to the anchor's centre, in * workspace units. */ - private relativeTop_ = 0; + private relativeTop = 0; /** Width of bubble, in workspace units. */ - private width_ = 0; + private width = 0; /** Height of bubble, in workspace units. */ - private height_ = 0; + private height = 0; /** Automatically position and reposition the bubble. */ - private autoLayout_ = true; + private autoLayout = true; /** Method to call on resize of bubble. */ - private resizeCallback_: (() => void)|null = null; + private resizeCallback: (() => void)|null = null; /** Method to call on move of bubble. */ - private moveCallback_: (() => void)|null = null; + private moveCallback: (() => void)|null = null; - /** Mouse down on bubbleBack_ event data. */ - private onMouseDownBubbleWrapper_: browserEvents.Data|null = null; + /** Mouse down on bubbleBack event data. */ + private onMouseDownBubbleWrapper: browserEvents.Data|null = null; - /** Mouse down on resizeGroup_ event data. */ - private onMouseDownResizeWrapper_: browserEvents.Data|null = null; + /** Mouse down on resizeGroup event data. */ + private onMouseDownResizeWrapper: browserEvents.Data|null = null; /** * Describes whether this bubble has been disposed of (nodes and event @@ -125,7 +126,7 @@ export class Bubble implements IBubble { * @internal */ disposed = false; - private arrow_radians_: number; + private arrowRadians: number; /** * @param workspace The workspace on which to draw the bubble. @@ -139,7 +140,7 @@ export class Bubble implements IBubble { workspace: WorkspaceSvg, content: SVGElement, shape: SVGElement, anchorXY: Coordinate, bubbleWidth: number|null, bubbleHeight: number|null) { - this.rendered_ = false; + this.rendered = false; this.workspace_ = workspace; this.content_ = content; this.shape_ = shape; @@ -148,11 +149,11 @@ export class Bubble implements IBubble { if (this.workspace_.RTL) { angle = -angle; } - this.arrow_radians_ = math.toRadians(angle); + this.arrowRadians = math.toRadians(angle); const canvas = workspace.getBubbleCanvas(); canvas.appendChild( - this.createDom_(content, !!(bubbleWidth && bubbleHeight))); + this.createDom(content, !!(bubbleWidth && bubbleHeight))); this.setAnchorLocation(anchorXY); if (!bubbleWidth || !bubbleHeight) { @@ -163,9 +164,9 @@ export class Bubble implements IBubble { this.setBubbleSize(bubbleWidth, bubbleHeight); // Render the bubble. - this.positionBubble_(); - this.renderArrow_(); - this.rendered_ = true; + this.positionBubble(); + this.renderArrow(); + this.rendered = true; } /** @@ -175,7 +176,7 @@ export class Bubble implements IBubble { * @param hasResize Add diagonal resize gripper if true. * @returns The bubble's SVG group. */ - private createDom_(content: Element, hasResize: boolean): SVGElement { + private createDom(content: Element, hasResize: boolean): SVGElement { /* Create the bubble. Here's the markup that will be generated: @@ -191,7 +192,7 @@ export class Bubble implements IBubble { [...content goes here...] */ - this.bubbleGroup_ = dom.createSvgElement(Svg.G, {}); + this.bubbleGroup = dom.createSvgElement(Svg.G, {}); let filter: {filter?: string} = { 'filter': 'url(#' + this.workspace_.getRenderer().getConstants().embossFilterId + ')', @@ -201,9 +202,9 @@ export class Bubble implements IBubble { // https://github.com/google/blockly/issues/99 filter = {}; } - const bubbleEmboss = dom.createSvgElement(Svg.G, filter, this.bubbleGroup_); - this.bubbleArrow_ = dom.createSvgElement(Svg.PATH, {}, bubbleEmboss); - this.bubbleBack_ = dom.createSvgElement( + const bubbleEmboss = dom.createSvgElement(Svg.G, filter, this.bubbleGroup); + this.bubbleArrow = dom.createSvgElement(Svg.PATH, {}, bubbleEmboss); + this.bubbleBack = dom.createSvgElement( Svg.RECT, { 'class': 'blocklyDraggable', 'x': 0, @@ -213,17 +214,17 @@ export class Bubble implements IBubble { }, bubbleEmboss); if (hasResize) { - this.resizeGroup_ = dom.createSvgElement( + this.resizeGroup = dom.createSvgElement( Svg.G, { 'class': this.workspace_.RTL ? 'blocklyResizeSW' : 'blocklyResizeSE', }, - this.bubbleGroup_); + this.bubbleGroup); const resizeSize = 2 * Bubble.BORDER_WIDTH; dom.createSvgElement( Svg.POLYGON, {'points': '0,x x,x x,0'.replace(/x/g, resizeSize.toString())}, - this.resizeGroup_); + this.resizeGroup); dom.createSvgElement( Svg.LINE, { 'class': 'blocklyResizeLine', @@ -232,7 +233,7 @@ export class Bubble implements IBubble { 'x2': resizeSize - 1, 'y2': resizeSize / 3, }, - this.resizeGroup_); + this.resizeGroup); dom.createSvgElement( Svg.LINE, { 'class': 'blocklyResizeLine', @@ -241,21 +242,21 @@ export class Bubble implements IBubble { 'x2': resizeSize - 1, 'y2': resizeSize * 2 / 3, }, - this.resizeGroup_); + this.resizeGroup); } else { - this.resizeGroup_ = null; + this.resizeGroup = null; } if (!this.workspace_.options.readOnly) { - this.onMouseDownBubbleWrapper_ = browserEvents.conditionalBind( - this.bubbleBack_, 'mousedown', this, this.bubbleMouseDown_); - if (this.resizeGroup_) { - this.onMouseDownResizeWrapper_ = browserEvents.conditionalBind( - this.resizeGroup_, 'mousedown', this, this.resizeMouseDown_); + this.onMouseDownBubbleWrapper = browserEvents.conditionalBind( + this.bubbleBack, 'mousedown', this, this.bubbleMouseDown); + if (this.resizeGroup) { + this.onMouseDownResizeWrapper = browserEvents.conditionalBind( + this.resizeGroup, 'mousedown', this, this.resizeMouseDown); } } - this.bubbleGroup_.appendChild(content); - return this.bubbleGroup_; + this.bubbleGroup.appendChild(content); + return this.bubbleGroup; } /** @@ -264,7 +265,7 @@ export class Bubble implements IBubble { * @returns The root SVG node of the bubble's group. */ getSvgRoot(): SVGElement { - return this.bubbleGroup_ as SVGElement; + return this.bubbleGroup as SVGElement; } /** @@ -273,7 +274,7 @@ export class Bubble implements IBubble { * @param id ID of block. */ setSvgId(id: string) { - this.bubbleGroup_?.setAttribute('data-block-id', id); + this.bubbleGroup?.setAttribute('data-block-id', id); } /** @@ -281,7 +282,7 @@ export class Bubble implements IBubble { * * @param e Mouse down event. */ - private bubbleMouseDown_(e: Event) { + private bubbleMouseDown(e: Event) { const gesture = this.workspace_.getGesture(e); if (gesture) { gesture.handleBubbleStart(e, this); @@ -321,9 +322,9 @@ export class Bubble implements IBubble { * * @param e Mouse down event. */ - private resizeMouseDown_(e: MouseEvent) { + private resizeMouseDown(e: MouseEvent) { this.promote(); - Bubble.unbindDragEvents_(); + Bubble.unbindDragEvents(); if (browserEvents.isRightButton(e)) { // No right-click. e.stopPropagation(); @@ -333,12 +334,12 @@ export class Bubble implements IBubble { this.workspace_.startDrag( e, new Coordinate( - this.workspace_.RTL ? -this.width_ : this.width_, this.height_)); + this.workspace_.RTL ? -this.width : this.width, this.height)); - Bubble.onMouseUpWrapper_ = browserEvents.conditionalBind( - document, 'mouseup', this, Bubble.bubbleMouseUp_); - Bubble.onMouseMoveWrapper_ = browserEvents.conditionalBind( - document, 'mousemove', this, this.resizeMouseMove_); + Bubble.onMouseUpWrapper = browserEvents.conditionalBind( + document, 'mouseup', this, Bubble.bubbleMouseUp); + Bubble.onMouseMoveWrapper = browserEvents.conditionalBind( + document, 'mousemove', this, this.resizeMouseMove); this.workspace_.hideChaff(); // This event has been handled. No need to bubble up to the document. e.stopPropagation(); @@ -349,13 +350,13 @@ export class Bubble implements IBubble { * * @param e Mouse move event. */ - private resizeMouseMove_(e: MouseEvent) { - this.autoLayout_ = false; + private resizeMouseMove(e: MouseEvent) { + this.autoLayout = false; const newXY = this.workspace_.moveDrag(e); this.setBubbleSize(this.workspace_.RTL ? -newXY.x : newXY.x, newXY.y); if (this.workspace_.RTL) { // RTL requires the bubble to move its left edge. - this.positionBubble_(); + this.positionBubble(); } } @@ -365,7 +366,7 @@ export class Bubble implements IBubble { * @param callback The function to call on resize. */ registerResizeEvent(callback: () => void) { - this.resizeCallback_ = callback; + this.resizeCallback = callback; } /** @@ -374,7 +375,7 @@ export class Bubble implements IBubble { * @param callback The function to call on move. */ registerMoveEvent(callback: () => void) { - this.moveCallback_ = callback; + this.moveCallback = callback; } /** @@ -384,9 +385,9 @@ export class Bubble implements IBubble { * @internal */ promote(): boolean { - const svgGroup = this.bubbleGroup_?.parentNode; - if (svgGroup?.lastChild !== this.bubbleGroup_ && this.bubbleGroup_) { - svgGroup?.appendChild(this.bubbleGroup_); + const svgGroup = this.bubbleGroup?.parentNode; + if (svgGroup?.lastChild !== this.bubbleGroup && this.bubbleGroup) { + svgGroup?.appendChild(this.bubbleGroup); return true; } return false; @@ -399,29 +400,29 @@ export class Bubble implements IBubble { * @param xy Absolute location. */ setAnchorLocation(xy: Coordinate) { - this.anchorXY_ = xy; - if (this.rendered_) { - this.positionBubble_(); + this.anchorXY = xy; + if (this.rendered) { + this.positionBubble(); } } /** Position the bubble so that it does not fall off-screen. */ - private layoutBubble_() { + private layoutBubble() { // Get the metrics in workspace units. const viewMetrics = this.workspace_.getMetricsManager().getViewMetrics(true); - const optimalLeft = this.getOptimalRelativeLeft_(viewMetrics); - const optimalTop = this.getOptimalRelativeTop_(viewMetrics); + const optimalLeft = this.getOptimalRelativeLeft(viewMetrics); + const optimalTop = this.getOptimalRelativeTop(viewMetrics); const bbox = (this.shape_ as SVGGraphicsElement).getBBox(); const topPosition = { x: optimalLeft, - y: -this.height_ - + y: -this.height - this.workspace_.getRenderer().getConstants().MIN_BLOCK_HEIGHT as number, }; - const startPosition = {x: -this.width_ - 30, y: optimalTop}; + const startPosition = {x: -this.width - 30, y: optimalTop}; const endPosition = {x: bbox.width, y: optimalTop}; const bottomPosition = {x: optimalLeft, y: bbox.height}; @@ -430,11 +431,11 @@ export class Bubble implements IBubble { const fartherPosition = bbox.width < bbox.height ? bottomPosition : endPosition; - const topPositionOverlap = this.getOverlap_(topPosition, viewMetrics); - const startPositionOverlap = this.getOverlap_(startPosition, viewMetrics); - const closerPositionOverlap = this.getOverlap_(closerPosition, viewMetrics); + const topPositionOverlap = this.getOverlap(topPosition, viewMetrics); + const startPositionOverlap = this.getOverlap(startPosition, viewMetrics); + const closerPositionOverlap = this.getOverlap(closerPosition, viewMetrics); const fartherPositionOverlap = - this.getOverlap_(fartherPosition, viewMetrics); + this.getOverlap(fartherPosition, viewMetrics); // Set the position to whichever position shows the most of the bubble, // with tiebreaks going in the order: top > start > close > far. @@ -442,25 +443,25 @@ export class Bubble implements IBubble { topPositionOverlap, startPositionOverlap, closerPositionOverlap, fartherPositionOverlap); if (topPositionOverlap === mostOverlap) { - this.relativeLeft_ = topPosition.x; - this.relativeTop_ = topPosition.y; + this.relativeLeft = topPosition.x; + this.relativeTop = topPosition.y; return; } if (startPositionOverlap === mostOverlap) { - this.relativeLeft_ = startPosition.x; - this.relativeTop_ = startPosition.y; + this.relativeLeft = startPosition.x; + this.relativeTop = startPosition.y; return; } if (closerPositionOverlap === mostOverlap) { - this.relativeLeft_ = closerPosition.x; - this.relativeTop_ = closerPosition.y; + this.relativeLeft = closerPosition.x; + this.relativeTop = closerPosition.y; return; } // TODO: I believe relativeLeft_ should actually be called relativeStart_ // and then the math should be fixed to reflect this. (hopefully it'll // make it look simpler) - this.relativeLeft_ = fartherPosition.x; - this.relativeTop_ = fartherPosition.y; + this.relativeLeft = fartherPosition.x; + this.relativeTop = fartherPosition.y; } /** @@ -473,19 +474,19 @@ export class Bubble implements IBubble { * in. * @returns The percentage of the bubble that is visible. */ - private getOverlap_( + private getOverlap( relativeMin: {x: number, y: number}, viewMetrics: ContainerRegion): number { // The position of the top-left corner of the bubble in workspace units. const bubbleMin = { - x: this.workspace_.RTL ? this.anchorXY_.x - relativeMin.x - this.width_ : - relativeMin.x + this.anchorXY_.x, - y: relativeMin.y + this.anchorXY_.y, + x: this.workspace_.RTL ? this.anchorXY.x - relativeMin.x - this.width : + relativeMin.x + this.anchorXY.x, + y: relativeMin.y + this.anchorXY.y, }; // The position of the bottom-right corner of the bubble in workspace units. const bubbleMax = { - x: bubbleMin.x + this.width_, - y: bubbleMin.y + this.height_, + x: bubbleMin.x + this.width, + y: bubbleMin.y + this.height, }; // We could adjust these values to account for the scrollbars, but the @@ -507,8 +508,7 @@ export class Bubble implements IBubble { Math.max(bubbleMin.y, workspaceMin.y); return Math.max( 0, - Math.min( - 1, overlapWidth * overlapHeight / (this.width_ * this.height_))); + Math.min(1, overlapWidth * overlapHeight / (this.width * this.height))); } /** @@ -521,18 +521,18 @@ export class Bubble implements IBubble { * @returns The optimal horizontal position of the top-left corner of the * bubble. */ - private getOptimalRelativeLeft_(viewMetrics: ContainerRegion): number { - let relativeLeft = -this.width_ / 4; + private getOptimalRelativeLeft(viewMetrics: ContainerRegion): number { + let relativeLeft = -this.width / 4; // No amount of sliding left or right will give us a better overlap. - if (this.width_ > viewMetrics.width) { + if (this.width > viewMetrics.width) { return relativeLeft; } if (this.workspace_.RTL) { // Bubble coordinates are flipped in RTL. - const bubbleRight = this.anchorXY_.x - relativeLeft; - const bubbleLeft = bubbleRight - this.width_; + const bubbleRight = this.anchorXY.x - relativeLeft; + const bubbleLeft = bubbleRight - this.width; const workspaceRight = viewMetrics.left + viewMetrics.width; const workspaceLeft = viewMetrics.left + @@ -541,14 +541,14 @@ export class Bubble implements IBubble { if (bubbleLeft < workspaceLeft) { // Slide the bubble right until it is onscreen. - relativeLeft = -(workspaceLeft - this.anchorXY_.x + this.width_); + relativeLeft = -(workspaceLeft - this.anchorXY.x + this.width); } else if (bubbleRight > workspaceRight) { // Slide the bubble left until it is onscreen. - relativeLeft = -(workspaceRight - this.anchorXY_.x); + relativeLeft = -(workspaceRight - this.anchorXY.x); } } else { - const bubbleLeft = relativeLeft + this.anchorXY_.x; - const bubbleRight = bubbleLeft + this.width_; + const bubbleLeft = relativeLeft + this.anchorXY.x; + const bubbleRight = bubbleLeft + this.width; const workspaceLeft = viewMetrics.left; const workspaceRight = viewMetrics.left + viewMetrics.width - @@ -557,10 +557,10 @@ export class Bubble implements IBubble { if (bubbleLeft < workspaceLeft) { // Slide the bubble right until it is onscreen. - relativeLeft = workspaceLeft - this.anchorXY_.x; + relativeLeft = workspaceLeft - this.anchorXY.x; } else if (bubbleRight > workspaceRight) { // Slide the bubble left until it is onscreen. - relativeLeft = workspaceRight - this.anchorXY_.x - this.width_; + relativeLeft = workspaceRight - this.anchorXY.x - this.width; } } @@ -577,42 +577,42 @@ export class Bubble implements IBubble { * @returns The optimal vertical position of the top-left corner of the * bubble. */ - private getOptimalRelativeTop_(viewMetrics: ContainerRegion): number { - let relativeTop = -this.height_ / 4; + private getOptimalRelativeTop(viewMetrics: ContainerRegion): number { + let relativeTop = -this.height / 4; // No amount of sliding up or down will give us a better overlap. - if (this.height_ > viewMetrics.height) { + if (this.height > viewMetrics.height) { return relativeTop; } - const bubbleTop = this.anchorXY_.y + relativeTop; - const bubbleBottom = bubbleTop + this.height_; + const bubbleTop = this.anchorXY.y + relativeTop; + const bubbleBottom = bubbleTop + this.height; const workspaceTop = viewMetrics.top; const workspaceBottom = viewMetrics.top + viewMetrics.height - // Thickness in workspace units. Scrollbar.scrollbarThickness / this.workspace_.scale; - const anchorY = this.anchorXY_.y; + const anchorY = this.anchorXY.y; if (bubbleTop < workspaceTop) { // Slide the bubble down until it is onscreen. relativeTop = workspaceTop - anchorY; } else if (bubbleBottom > workspaceBottom) { // Slide the bubble up until it is onscreen. - relativeTop = workspaceBottom - anchorY - this.height_; + relativeTop = workspaceBottom - anchorY - this.height; } return relativeTop; } /** Move the bubble to a location relative to the anchor's centre. */ - private positionBubble_() { - let left = this.anchorXY_.x; + private positionBubble() { + let left = this.anchorXY.x; if (this.workspace_.RTL) { - left -= this.relativeLeft_ + this.width_; + left -= this.relativeLeft + this.width; } else { - left += this.relativeLeft_; + left += this.relativeLeft; } - const top = this.relativeTop_ + this.anchorXY_.y; + const top = this.relativeTop + this.anchorXY.y; this.moveTo(left, top); } @@ -624,7 +624,7 @@ export class Bubble implements IBubble { * @internal */ moveTo(x: number, y: number) { - this.bubbleGroup_?.setAttribute( + this.bubbleGroup?.setAttribute( 'transform', 'translate(' + x + ',' + y + ')'); } @@ -635,8 +635,8 @@ export class Bubble implements IBubble { * @internal */ setDragging(adding: boolean) { - if (!adding && this.moveCallback_) { - this.moveCallback_(); + if (!adding && this.moveCallback) { + this.moveCallback(); } } @@ -646,7 +646,7 @@ export class Bubble implements IBubble { * @returns The height and width of the bubble. */ getBubbleSize(): Size { - return new Size(this.width_, this.height_); + return new Size(this.width, this.height); } /** @@ -660,46 +660,46 @@ export class Bubble implements IBubble { // Minimum size of a bubble. width = Math.max(width, doubleBorderWidth + 45); height = Math.max(height, doubleBorderWidth + 20); - this.width_ = width; - this.height_ = height; - this.bubbleBack_?.setAttribute('width', width.toString()); - this.bubbleBack_?.setAttribute('height', height.toString()); - if (this.resizeGroup_) { + this.width = width; + this.height = height; + this.bubbleBack?.setAttribute('width', width.toString()); + this.bubbleBack?.setAttribute('height', height.toString()); + if (this.resizeGroup) { if (this.workspace_.RTL) { // Mirror the resize group. const resizeSize = 2 * Bubble.BORDER_WIDTH; - this.resizeGroup_.setAttribute( + this.resizeGroup.setAttribute( 'transform', 'translate(' + resizeSize + ',' + (height - doubleBorderWidth) + ') scale(-1 1)'); } else { - this.resizeGroup_.setAttribute( + this.resizeGroup.setAttribute( 'transform', 'translate(' + (width - doubleBorderWidth) + ',' + (height - doubleBorderWidth) + ')'); } } - if (this.autoLayout_) { - this.layoutBubble_(); + if (this.autoLayout) { + this.layoutBubble(); } - this.positionBubble_(); - this.renderArrow_(); + this.positionBubble(); + this.renderArrow(); // Allow the contents to resize. - if (this.resizeCallback_) { - this.resizeCallback_(); + if (this.resizeCallback) { + this.resizeCallback(); } } /** Draw the arrow between the bubble and the origin. */ - private renderArrow_() { + private renderArrow() { const steps = []; // Find the relative coordinates of the center of the bubble. - const relBubbleX = this.width_ / 2; - const relBubbleY = this.height_ / 2; + const relBubbleX = this.width / 2; + const relBubbleY = this.height / 2; // Find the relative coordinates of the center of the anchor. - let relAnchorX = -this.relativeLeft_; - let relAnchorY = -this.relativeTop_; + let relAnchorX = -this.relativeLeft; + let relAnchorY = -this.relativeTop; if (relBubbleX === relAnchorX && relBubbleY === relAnchorY) { // Null case. Bubble is directly on top of the anchor. // Short circuit this rather than wade through divide by zeros. @@ -742,7 +742,7 @@ export class Bubble implements IBubble { const baseY2 = relBubbleY - thickness * rightRise; // Distortion to curve the arrow. - let swirlAngle = angle + this.arrow_radians_; + let swirlAngle = angle + this.arrowRadians; if (swirlAngle > Math.PI * 2) { swirlAngle -= Math.PI * 2; } @@ -758,7 +758,7 @@ export class Bubble implements IBubble { ',' + (baseY2 + swirlRise) + ' ' + baseX2 + ',' + baseY2); } steps.push('z'); - this.bubbleArrow_?.setAttribute('d', steps.join(' ')); + this.bubbleArrow?.setAttribute('d', steps.join(' ')); } /** @@ -767,20 +767,20 @@ export class Bubble implements IBubble { * @param hexColour Hex code of colour. */ setColour(hexColour: string) { - this.bubbleBack_?.setAttribute('fill', hexColour); - this.bubbleArrow_?.setAttribute('fill', hexColour); + this.bubbleBack?.setAttribute('fill', hexColour); + this.bubbleArrow?.setAttribute('fill', hexColour); } /** Dispose of this bubble. */ dispose() { - if (this.onMouseDownBubbleWrapper_) { - browserEvents.unbind(this.onMouseDownBubbleWrapper_); + if (this.onMouseDownBubbleWrapper) { + browserEvents.unbind(this.onMouseDownBubbleWrapper); } - if (this.onMouseDownResizeWrapper_) { - browserEvents.unbind(this.onMouseDownResizeWrapper_); + if (this.onMouseDownResizeWrapper) { + browserEvents.unbind(this.onMouseDownResizeWrapper); } - Bubble.unbindDragEvents_(); - dom.removeNode(this.bubbleGroup_); + Bubble.unbindDragEvents(); + dom.removeNode(this.bubbleGroup); this.disposed = true; } @@ -800,12 +800,12 @@ export class Bubble implements IBubble { this.moveTo(newLoc.x, newLoc.y); } if (this.workspace_.RTL) { - this.relativeLeft_ = this.anchorXY_.x - newLoc.x - this.width_; + this.relativeLeft = this.anchorXY.x - newLoc.x - this.width; } else { - this.relativeLeft_ = newLoc.x - this.anchorXY_.x; + this.relativeLeft = newLoc.x - this.anchorXY.x; } - this.relativeTop_ = newLoc.y - this.anchorXY_.y; - this.renderArrow_(); + this.relativeTop = newLoc.y - this.anchorXY.y; + this.renderArrow(); } /** @@ -817,9 +817,9 @@ export class Bubble implements IBubble { getRelativeToSurfaceXY(): Coordinate { return new Coordinate( this.workspace_.RTL ? - -this.relativeLeft_ + this.anchorXY_.x - this.width_ : - this.anchorXY_.x + this.relativeLeft_, - this.anchorXY_.y + this.relativeTop_); + -this.relativeLeft + this.anchorXY.x - this.width : + this.anchorXY.x + this.relativeLeft, + this.anchorXY.y + this.relativeTop); } /** @@ -831,18 +831,18 @@ export class Bubble implements IBubble { * @internal */ setAutoLayout(enable: boolean) { - this.autoLayout_ = enable; + this.autoLayout = enable; } /** Stop binding to the global mouseup and mousemove events. */ - private static unbindDragEvents_() { - if (Bubble.onMouseUpWrapper_) { - browserEvents.unbind(Bubble.onMouseUpWrapper_); - Bubble.onMouseUpWrapper_ = null; + private static unbindDragEvents() { + if (Bubble.onMouseUpWrapper) { + browserEvents.unbind(Bubble.onMouseUpWrapper); + Bubble.onMouseUpWrapper = null; } - if (Bubble.onMouseMoveWrapper_) { - browserEvents.unbind(Bubble.onMouseMoveWrapper_); - Bubble.onMouseMoveWrapper_ = null; + if (Bubble.onMouseMoveWrapper) { + browserEvents.unbind(Bubble.onMouseMoveWrapper); + Bubble.onMouseMoveWrapper = null; } } @@ -851,9 +851,9 @@ export class Bubble implements IBubble { * * @param _e Mouse up event. */ - private static bubbleMouseUp_(_e: MouseEvent) { + private static bubbleMouseUp(_e: MouseEvent) { Touch.clearTouchIdentifier(); - Bubble.unbindDragEvents_(); + Bubble.unbindDragEvents(); } /** diff --git a/core/bump_objects.ts b/core/bump_objects.ts index 51467ae25..cd2c754a4 100644 --- a/core/bump_objects.ts +++ b/core/bump_objects.ts @@ -147,16 +147,16 @@ function extractObjectFromEvent( switch (e.type) { case eventUtils.BLOCK_CREATE: case eventUtils.BLOCK_MOVE: - object = workspace.getBlockById((e as BlockCreate | BlockMove).blockId); + object = workspace.getBlockById((e as BlockCreate | BlockMove).blockId!); if (object) { object = object.getRootBlock(); } break; case eventUtils.COMMENT_CREATE: case eventUtils.COMMENT_MOVE: - object = workspace.getCommentById( - (e as CommentCreate | CommentMove).commentId) as - WorkspaceCommentSvg | + object = + workspace.getCommentById((e as CommentCreate | CommentMove).commentId! + ) as WorkspaceCommentSvg | null; break; } diff --git a/core/comment.ts b/core/comment.ts index 7831a2a0d..6cf30555f 100644 --- a/core/comment.ts +++ b/core/comment.ts @@ -142,7 +142,7 @@ export class Comment extends Icon { HTMLTextAreaElement; const textarea = this.textarea_; textarea.className = 'blocklyCommentTextarea'; - textarea.setAttribute('dir', this.block_.RTL ? 'RTL' : 'LTR'); + textarea.setAttribute('dir', this.getBlock().RTL ? 'RTL' : 'LTR'); textarea.value = this.model_.text ?? ''; this.resizeTextarea_(); @@ -167,7 +167,7 @@ export class Comment extends Icon { function(this: Comment, _e: Event) { if (this.cachedText_ !== this.model_.text) { eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CHANGE))( - this.block_, 'comment', null, this.cachedText_, + this.getBlock(), 'comment', null, this.cachedText_, this.model_.text)); } }); @@ -233,7 +233,7 @@ export class Comment extends Icon { return; } eventUtils.fire(new (eventUtils.get(eventUtils.BUBBLE_OPEN))( - this.block_, visible, 'comment')); + this.getBlock(), visible, 'comment')); this.model_.pinned = visible; if (visible) { this.createBubble_(); @@ -244,7 +244,7 @@ export class Comment extends Icon { /** Show the bubble. Handles deciding if it should be editable or not. */ private createBubble_() { - if (!this.block_.isEditable()) { + if (!this.getBlock().isEditable()) { this.createNonEditableBubble_(); } else { this.createEditableBubble_(); @@ -253,12 +253,13 @@ export class Comment extends Icon { /** Show an editable bubble. */ private createEditableBubble_() { + const block = this.getBlock(); this.bubble_ = new Bubble( - this.block_.workspace, this.createEditor_(), - this.block_.pathObject.svgPath, (this.iconXY_ as Coordinate), - this.model_.size.width, this.model_.size.height); + block.workspace, this.createEditor_(), block.pathObject.svgPath, + (this.iconXY_ as Coordinate), this.model_.size.width, + this.model_.size.height); // Expose this comment's block's ID on its top-level SVG group. - this.bubble_.setSvgId(this.block_.id); + this.bubble_.setSvgId(block.id); this.bubble_.registerResizeEvent(this.onBubbleResize_.bind(this)); this.applyColour(); } @@ -272,7 +273,7 @@ export class Comment extends Icon { // TODO (#2917): It would be great if the comment could support line breaks. this.paragraphElement_ = Bubble.textToDom(this.model_.text ?? ''); this.bubble_ = Bubble.createNonEditableBubble( - this.paragraphElement_, (this.block_), this.iconXY_ as Coordinate); + this.paragraphElement_, this.getBlock(), this.iconXY_ as Coordinate); this.applyColour(); } @@ -371,7 +372,7 @@ export class Comment extends Icon { * should not be called directly. Instead call block.setCommentText(null); */ override dispose() { - this.block_.comment = null; + this.getBlock().comment = null; super.dispose(); } } diff --git a/core/connection.ts b/core/connection.ts index 8abf5e89b..e495df85d 100644 --- a/core/connection.ts +++ b/core/connection.ts @@ -571,7 +571,7 @@ export class Connection implements IASTNodeLocationWithBlock { const parentBlock = this.getSourceBlock(); const shadowState = this.getShadowState(); const shadowDom = this.getShadowDom(); - if (parentBlock.disposed || !shadowState && !shadowDom) { + if (parentBlock.isDeadOrDying() || !shadowState && !shadowDom) { return null; } diff --git a/core/contextmenu.ts b/core/contextmenu.ts index 71e4ce8b4..c7737a597 100644 --- a/core/contextmenu.ts +++ b/core/contextmenu.ts @@ -17,6 +17,7 @@ import type {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as clipboard from './clipboard.js'; import {config} from './config.js'; +import * as dom from './utils/dom.js'; import type {ContextMenuOption, LegacyContextMenuOption} from './contextmenu_registry.js'; import * as eventUtils from './events/utils.js'; import {Menu} from './menu.js'; @@ -179,7 +180,7 @@ function createWidget_(menu: Menu) { throw Error('Attempting to create a context menu when widget div is null'); } const menuDom = menu.render(div); - menuDom.classList.add('blocklyContextMenu'); + dom.addClass(menuDom, 'blocklyContextMenu'); // Prevent system context menu when right-clicking a Blockly context menu. browserEvents.conditionalBind( (menuDom as EventTarget), 'contextmenu', null, haltPropagation); diff --git a/core/contextmenu_items.ts b/core/contextmenu_items.ts index 9e31f6caa..db87b2618 100644 --- a/core/contextmenu_items.ts +++ b/core/contextmenu_items.ts @@ -249,7 +249,7 @@ function deleteNext_(deleteList: BlockSvg[], eventGroup: string) { eventUtils.setGroup(eventGroup); const block = deleteList.shift(); if (block) { - if (!block.disposed) { + if (!block.isDeadOrDying()) { block.dispose(false, true); setTimeout(deleteNext_, DELAY, deleteList, eventGroup); } else { diff --git a/core/css.ts b/core/css.ts index 02c4e2a9d..81b2e15a9 100644 --- a/core/css.ts +++ b/core/css.ts @@ -12,8 +12,6 @@ import * as goog from '../closure/goog/goog.js'; goog.declareModuleId('Blockly.Css'); -import * as deprecation from './utils/deprecation.js'; - /** Has CSS already been injected? */ let injected = false; @@ -25,20 +23,11 @@ let injected = false; * @param cssContent Multiline CSS string or an array of single lines of CSS. * @alias Blockly.Css.register */ -export function register(cssContent: string|string[]) { +export function register(cssContent: string) { if (injected) { throw Error('CSS already injected'); } - - if (Array.isArray(cssContent)) { - deprecation.warn( - 'Registering CSS by passing an array of strings', 'September 2021', - 'September 2022', 'css.register passing a multiline string'); - content += '\n' + cssContent.join('\n'); - } else { - // Add new cssContent in the global content. - content += '\n' + cssContent; - } + content += '\n' + cssContent; } /** @@ -171,7 +160,7 @@ let content = ` } .blocklyDropDownContent { - max-height: 300px; // @todo: spec for maximum height. + max-height: 300px; /* @todo: spec for maximum height. */ overflow: auto; overflow-x: hidden; position: relative; diff --git a/core/dropdowndiv.ts b/core/dropdowndiv.ts index b263a0be2..27e1d160d 100644 --- a/core/dropdowndiv.ts +++ b/core/dropdowndiv.ts @@ -15,6 +15,7 @@ goog.declareModuleId('Blockly.dropDownDiv'); import type {BlockSvg} from './block_svg.js'; import * as common from './common.js'; +import * as dom from './utils/dom.js'; import type {Field} from './field.js'; import * as math from './utils/math.js'; import {Rect} from './utils/rect.js'; @@ -138,10 +139,10 @@ export function createDom() { // Handle focusin/out events to add a visual indicator when // a child is focused or blurred. div.addEventListener('focusin', function() { - div.classList.add('blocklyFocused'); + dom.addClass(div, 'blocklyFocused'); }); div.addEventListener('focusout', function() { - div.classList.remove('blocklyFocused'); + dom.removeClass(div, 'blocklyFocused'); }); } @@ -311,10 +312,10 @@ export function show( renderedClassName = mainWorkspace.getRenderer().getClassName(); themeClassName = mainWorkspace.getTheme().getClassName(); if (renderedClassName) { - div.classList.add(renderedClassName); + dom.addClass(div, renderedClassName); } if (themeClassName) { - div.classList.add(themeClassName); + dom.addClass(div, themeClassName); } // When we change `translate` multiple times in close succession, @@ -595,11 +596,11 @@ export function hideWithoutAnimation() { owner = null; if (renderedClassName) { - div.classList.remove(renderedClassName); + dom.removeClass(div, renderedClassName); renderedClassName = ''; } if (themeClassName) { - div.classList.remove(themeClassName); + dom.removeClass(div, themeClassName); themeClassName = ''; } (common.getMainWorkspace() as WorkspaceSvg).markFocused(); diff --git a/core/events/events.ts b/core/events/events.ts index cc0093111..a2bcc8332 100644 --- a/core/events/events.ts +++ b/core/events/events.ts @@ -13,64 +13,90 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events'); -import {Abstract as AbstractEvent} from './events_abstract.js'; -import {BlockBase} from './events_block_base.js'; -import {BlockChange} from './events_block_change.js'; -import {BlockCreate} from './events_block_create.js'; -import {BlockDelete} from './events_block_delete.js'; -import {BlockDrag} from './events_block_drag.js'; -import {BlockMove} from './events_block_move.js'; -import {BubbleOpen} from './events_bubble_open.js'; -import {Click} from './events_click.js'; -import {CommentBase} from './events_comment_base.js'; -import {CommentChange} from './events_comment_change.js'; -import {CommentCreate} from './events_comment_create.js'; +import {Abstract as AbstractEvent, AbstractEventJson} from './events_abstract.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; +import {BlockChange, BlockChangeJson} from './events_block_change.js'; +import {BlockCreate, BlockCreateJson} from './events_block_create.js'; +import {BlockDelete, BlockDeleteJson} from './events_block_delete.js'; +import {BlockDrag, BlockDragJson} from './events_block_drag.js'; +import {BlockMove, BlockMoveJson} from './events_block_move.js'; +import {BubbleOpen, BubbleOpenJson, BubbleType} from './events_bubble_open.js'; +import {Click, ClickJson, ClickTarget} from './events_click.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {CommentChange, CommentChangeJson} from './events_comment_change.js'; +import {CommentCreate, CommentCreateJson} from './events_comment_create.js'; import {CommentDelete} from './events_comment_delete.js'; -import {CommentMove} from './events_comment_move.js'; -import {MarkerMove} from './events_marker_move.js'; -import {Selected} from './events_selected.js'; -import {ThemeChange} from './events_theme_change.js'; -import {ToolboxItemSelect} from './events_toolbox_item_select.js'; -import {TrashcanOpen} from './events_trashcan_open.js'; +import {CommentMove, CommentMoveJson} from './events_comment_move.js'; +import {MarkerMove, MarkerMoveJson} from './events_marker_move.js'; +import {Selected, SelectedJson} from './events_selected.js'; +import {ThemeChange, ThemeChangeJson} from './events_theme_change.js'; +import {ToolboxItemSelect, ToolboxItemSelectJson} from './events_toolbox_item_select.js'; +import {TrashcanOpen, TrashcanOpenJson} from './events_trashcan_open.js'; import {Ui} from './events_ui.js'; import {UiBase} from './events_ui_base.js'; -import {VarBase} from './events_var_base.js'; -import {VarCreate} from './events_var_create.js'; -import {VarDelete} from './events_var_delete.js'; -import {VarRename} from './events_var_rename.js'; -import {ViewportChange} from './events_viewport.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; +import {VarCreate, VarCreateJson} from './events_var_create.js'; +import {VarDelete, VarDeleteJson} from './events_var_delete.js'; +import {VarRename, VarRenameJson} from './events_var_rename.js'; +import {ViewportChange, ViewportChangeJson} from './events_viewport.js'; import * as eventUtils from './utils.js'; -import {FinishedLoading} from './workspace_events.js'; +import {FinishedLoading, FinishedLoadingJson} from './workspace_events.js'; // Events. export const Abstract = AbstractEvent; +export {AbstractEventJson}; export {BubbleOpen}; +export {BubbleOpenJson}; +export {BubbleType}; export {BlockBase}; +export {BlockBaseJson}; export {BlockChange}; +export {BlockChangeJson}; export {BlockCreate}; +export {BlockCreateJson}; export {BlockDelete}; +export {BlockDeleteJson}; export {BlockDrag}; +export {BlockDragJson}; export {BlockMove}; +export {BlockMoveJson}; export {Click}; +export {ClickJson}; +export {ClickTarget}; export {CommentBase}; +export {CommentBaseJson}; export {CommentChange}; +export {CommentChangeJson}; export {CommentCreate}; +export {CommentCreateJson}; export {CommentDelete}; export {CommentMove}; +export {CommentMoveJson}; export {FinishedLoading}; +export {FinishedLoadingJson}; export {MarkerMove}; +export {MarkerMoveJson}; export {Selected}; +export {SelectedJson}; export {ThemeChange}; +export {ThemeChangeJson}; export {ToolboxItemSelect}; +export {ToolboxItemSelectJson}; export {TrashcanOpen}; +export {TrashcanOpenJson}; export {Ui}; export {UiBase}; export {VarBase}; +export {VarBaseJson}; export {VarCreate}; +export {VarCreateJson}; export {VarDelete}; +export {VarDeleteJson}; export {VarRename}; +export {VarRenameJson}; export {ViewportChange}; +export {ViewportChangeJson}; // Event types. export const BLOCK_CHANGE = eventUtils.BLOCK_CHANGE; diff --git a/core/events/events_abstract.ts b/core/events/events_abstract.ts index f7b5731ad..78e4bd8b7 100644 --- a/core/events/events_abstract.ts +++ b/core/events/events_abstract.ts @@ -26,7 +26,7 @@ import * as eventUtils from './utils.js'; */ export abstract class Abstract { /** Whether or not the event is blank (to be populated by fromJson). */ - isBlank: boolean|null = null; + abstract isBlank: boolean; /** The workspace identifier for this event. */ workspaceId?: string = undefined; @@ -37,7 +37,7 @@ export abstract class Abstract { isUiEvent = false; /** Type of this event. */ - type?: string = undefined; + type = ''; /** @alias Blockly.Events.Abstract */ constructor() { @@ -57,12 +57,11 @@ export abstract class Abstract { * * @returns JSON representation. */ - toJson(): AnyDuringMigration { - const json = {'type': this.type}; - if (this.group) { - (json as AnyDuringMigration)['group'] = this.group; - } - return json; + toJson(): AbstractEventJson { + return { + 'type': this.type, + 'group': this.group, + }; } /** @@ -70,9 +69,9 @@ export abstract class Abstract { * * @param json JSON representation. */ - fromJson(json: AnyDuringMigration) { + fromJson(json: AbstractEventJson) { this.isBlank = false; - this.group = json['group']; + this.group = json['group'] || ''; } /** @@ -112,3 +111,8 @@ export abstract class Abstract { return workspace; } } + +export interface AbstractEventJson { + type: string; + group: string; +} diff --git a/core/events/events_block_base.ts b/core/events/events_block_base.ts index 079acd182..c5bbbe0a3 100644 --- a/core/events/events_block_base.ts +++ b/core/events/events_block_base.ts @@ -14,7 +14,7 @@ goog.declareModuleId('Blockly.Events.BlockBase'); import type {Block} from '../block.js'; -import {Abstract as AbstractEvent} from './events_abstract.js'; +import {Abstract as AbstractEvent, AbstractEventJson} from './events_abstract.js'; /** @@ -23,9 +23,8 @@ import {Abstract as AbstractEvent} from './events_abstract.js'; * @alias Blockly.Events.BlockBase */ export class BlockBase extends AbstractEvent { - override isBlank: AnyDuringMigration; - blockId: string; - override workspaceId: string; + override isBlank = true; + blockId?: string; /** * @param opt_block The block this event corresponds to. @@ -33,13 +32,15 @@ export class BlockBase extends AbstractEvent { */ constructor(opt_block?: Block) { super(); - this.isBlank = typeof opt_block === 'undefined'; + this.isBlank = !!opt_block; + + if (!opt_block) return; /** The block ID for the block this event pertains to */ - this.blockId = this.isBlank ? '' : opt_block!.id; + this.blockId = opt_block.id; /** The workspace identifier for this event. */ - this.workspaceId = this.isBlank ? '' : opt_block!.workspace.id; + this.workspaceId = opt_block.workspace.id; } /** @@ -47,8 +48,13 @@ export class BlockBase extends AbstractEvent { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): AbstractEventJson { + const json = super.toJson() as BlockBaseJson; + if (!this.blockId) { + throw new Error( + 'The block ID is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } json['blockId'] = this.blockId; return json; } @@ -58,8 +64,12 @@ export class BlockBase extends AbstractEvent { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockBaseJson) { super.fromJson(json); this.blockId = json['blockId']; } } + +export interface BlockBaseJson extends AbstractEventJson { + blockId: string; +} diff --git a/core/events/events_block_change.ts b/core/events/events_block_change.ts index ddf2762f1..a3cd048a1 100644 --- a/core/events/events_block_change.ts +++ b/core/events/events_block_change.ts @@ -17,7 +17,7 @@ import type {BlockSvg} from '../block_svg.js'; import * as registry from '../registry.js'; import * as Xml from '../xml.js'; -import {BlockBase} from './events_block_base.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; import * as eventUtils from './utils.js'; @@ -27,13 +27,11 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.BlockChange */ export class BlockChange extends BlockBase { - override type: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - element!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - name!: string|null; - oldValue: AnyDuringMigration; - newValue: AnyDuringMigration; + override type = eventUtils.BLOCK_CHANGE; + element?: string; + name?: string; + oldValue: unknown; + newValue: unknown; /** * @param opt_block The changed block. Undefined for a blank event. @@ -44,19 +42,16 @@ export class BlockChange extends BlockBase { */ constructor( opt_block?: Block, opt_element?: string, opt_name?: string|null, - opt_oldValue?: AnyDuringMigration, opt_newValue?: AnyDuringMigration) { + opt_oldValue?: unknown, opt_newValue?: unknown) { super(opt_block); - /** Type of this event. */ - this.type = eventUtils.BLOCK_CHANGE; - if (!opt_block) { return; // Blank event to be populated by fromJson. } - this.element = typeof opt_element === 'undefined' ? '' : opt_element; - this.name = typeof opt_name === 'undefined' ? '' : opt_name; - this.oldValue = typeof opt_oldValue === 'undefined' ? '' : opt_oldValue; - this.newValue = typeof opt_newValue === 'undefined' ? '' : opt_newValue; + this.element = opt_element; + this.name = opt_name || undefined; + this.oldValue = opt_oldValue; + this.newValue = opt_newValue; } /** @@ -64,12 +59,15 @@ export class BlockChange extends BlockBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - json['element'] = this.element; - if (this.name) { - json['name'] = this.name; + override toJson(): BlockChangeJson { + const json = super.toJson() as BlockChangeJson; + if (!this.element) { + throw new Error( + 'The changed element is undefined. Either pass an ' + + 'element to the constructor, or call fromJson'); } + json['element'] = this.element; + json['name'] = this.name; json['oldValue'] = this.oldValue; json['newValue'] = this.newValue; return json; @@ -80,7 +78,7 @@ export class BlockChange extends BlockBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockChangeJson) { super.fromJson(json); this.element = json['element']; this.name = json['name']; @@ -104,10 +102,16 @@ export class BlockChange extends BlockBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.blockId) { + throw new Error( + 'The block ID is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } const block = workspace.getBlockById(this.blockId); if (!block) { - console.warn('Can\'t change non-existent block: ' + this.blockId); - return; + throw new Error( + 'The associated block is undefined. Either pass a ' + + 'block to the constructor, or call fromJson'); } // Assume the block is rendered so that then we can check. const blockSvg = block as BlockSvg; @@ -176,4 +180,11 @@ export class BlockChange extends BlockBase { } } +export interface BlockChangeJson extends BlockBaseJson { + element: string; + name?: string; + newValue: unknown; + oldValue: unknown; +} + registry.register(registry.Type.EVENT, eventUtils.CHANGE, BlockChange); diff --git a/core/events/events_block_create.ts b/core/events/events_block_create.ts index b433560e2..744939a88 100644 --- a/core/events/events_block_create.ts +++ b/core/events/events_block_create.ts @@ -17,7 +17,7 @@ import * as registry from '../registry.js'; import * as blocks from '../serialization/blocks.js'; import * as Xml from '../xml.js'; -import {BlockBase} from './events_block_base.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; import * as eventUtils from './utils.js'; @@ -27,20 +27,15 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.BlockCreate */ export class BlockCreate extends BlockBase { - override type: string; - xml: AnyDuringMigration; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - ids!: string[]; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - json!: blocks.State; + override type = eventUtils.BLOCK_CREATE; + xml?: Element|DocumentFragment; + ids?: string[]; + json?: blocks.State; /** @param opt_block The created block. Undefined for a blank event. */ constructor(opt_block?: Block) { super(opt_block); - /** Type of this event. */ - this.type = eventUtils.BLOCK_CREATE; - if (!opt_block) { return; // Blank event to be populated by fromJson. } @@ -62,8 +57,23 @@ export class BlockCreate extends BlockBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): BlockCreateJson { + const json = super.toJson() as BlockCreateJson; + if (!this.xml) { + throw new Error( + 'The block XML is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } + if (!this.ids) { + throw new Error( + 'The block IDs are undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } + if (!this.json) { + throw new Error( + 'The block JSON is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } json['xml'] = Xml.domToText(this.xml); json['ids'] = this.ids; json['json'] = this.json; @@ -78,7 +88,7 @@ export class BlockCreate extends BlockBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockCreateJson) { super.fromJson(json); this.xml = Xml.textToDom(json['xml']); this.ids = json['ids']; @@ -95,6 +105,16 @@ export class BlockCreate extends BlockBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.json) { + throw new Error( + 'The block JSON is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } + if (!this.ids) { + throw new Error( + 'The block IDs are undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } if (forward) { blocks.append(this.json, workspace); } else { @@ -112,4 +132,11 @@ export class BlockCreate extends BlockBase { } } +export interface BlockCreateJson extends BlockBaseJson { + xml: string; + ids: string[]; + json: object; + recordUndo?: boolean; +} + registry.register(registry.Type.EVENT, eventUtils.CREATE, BlockCreate); diff --git a/core/events/events_block_delete.ts b/core/events/events_block_delete.ts index b7a1f6f07..6a10ae044 100644 --- a/core/events/events_block_delete.ts +++ b/core/events/events_block_delete.ts @@ -17,7 +17,7 @@ import * as registry from '../registry.js'; import * as blocks from '../serialization/blocks.js'; import * as Xml from '../xml.js'; -import {BlockBase} from './events_block_base.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; import * as eventUtils from './utils.js'; @@ -27,22 +27,16 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.BlockDelete */ export class BlockDelete extends BlockBase { - override type: string; - oldXml: AnyDuringMigration; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - ids!: string[]; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - wasShadow!: boolean; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldJson!: blocks.State; + oldXml?: Element|DocumentFragment; + ids?: string[]; + wasShadow?: boolean; + oldJson?: blocks.State; + override type = eventUtils.BLOCK_DELETE; /** @param opt_block The deleted block. Undefined for a blank event. */ constructor(opt_block?: Block) { super(opt_block); - /** Type of this event. */ - this.type = eventUtils.BLOCK_DELETE; - if (!opt_block) { return; // Blank event to be populated by fromJson. } @@ -71,8 +65,28 @@ export class BlockDelete extends BlockBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): BlockDeleteJson { + const json = super.toJson() as BlockDeleteJson; + if (!this.oldXml) { + throw new Error( + 'The old block XML is undefined. Either pass a block ' + + 'to the constructor, or call fromJson'); + } + if (!this.ids) { + throw new Error( + 'The block IDs are undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } + if (this.wasShadow === undefined) { + throw new Error( + 'Whether the block was a shadow is undefined. Either ' + + 'pass a block to the constructor, or call fromJson'); + } + if (!this.oldJson) { + throw new Error( + 'The old block JSON is undefined. Either pass a block ' + + 'to the constructor, or call fromJson'); + } json['oldXml'] = Xml.domToText(this.oldXml); json['ids'] = this.ids; json['wasShadow'] = this.wasShadow; @@ -88,13 +102,13 @@ export class BlockDelete extends BlockBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockDeleteJson) { super.fromJson(json); this.oldXml = Xml.textToDom(json['oldXml']); this.ids = json['ids']; this.wasShadow = json['wasShadow'] || this.oldXml.tagName.toLowerCase() === 'shadow'; - this.oldJson = json['oldJson'] as blocks.State; + this.oldJson = json['oldJson']; if (json['recordUndo'] !== undefined) { this.recordUndo = json['recordUndo']; } @@ -107,6 +121,16 @@ export class BlockDelete extends BlockBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.ids) { + throw new Error( + 'The block IDs are undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } + if (!this.oldJson) { + throw new Error( + 'The old block JSON is undefined. Either pass a block ' + + 'to the constructor, or call fromJson'); + } if (forward) { for (let i = 0; i < this.ids.length; i++) { const id = this.ids[i]; @@ -124,4 +148,12 @@ export class BlockDelete extends BlockBase { } } +export interface BlockDeleteJson extends BlockBaseJson { + oldXml: string; + ids: string[]; + wasShadow: boolean; + oldJson: blocks.State; + recordUndo?: boolean; +} + registry.register(registry.Type.EVENT, eventUtils.DELETE, BlockDelete); diff --git a/core/events/events_block_drag.ts b/core/events/events_block_drag.ts index 41b9a3bf1..f45790274 100644 --- a/core/events/events_block_drag.ts +++ b/core/events/events_block_drag.ts @@ -14,7 +14,7 @@ goog.declareModuleId('Blockly.Events.BlockDrag'); import type {Block} from '../block.js'; import * as registry from '../registry.js'; - +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -25,10 +25,10 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.BlockDrag */ export class BlockDrag extends UiBase { - blockId: AnyDuringMigration; + blockId?: string; isStart?: boolean; blocks?: Block[]; - override type: string; + override type = eventUtils.BLOCK_DRAG; /** * @param opt_block The top block in the stack that is being dragged. @@ -41,16 +41,15 @@ export class BlockDrag extends UiBase { constructor(opt_block?: Block, opt_isStart?: boolean, opt_blocks?: Block[]) { const workspaceId = opt_block ? opt_block.workspace.id : undefined; super(workspaceId); - this.blockId = opt_block ? opt_block.id : null; + if (!opt_block) return; + + this.blockId = opt_block.id; /** Whether this is the start of a block drag. */ this.isStart = opt_isStart; /** The blocks affected by this drag event. */ this.blocks = opt_blocks; - - /** Type of this event. */ - this.type = eventUtils.BLOCK_DRAG; } /** @@ -58,10 +57,22 @@ export class BlockDrag extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): BlockDragJson { + const json = super.toJson() as BlockDragJson; + if (this.isStart === undefined) { + throw new Error( + 'Whether this event is the start of a drag is undefined. ' + + 'Either pass the value to the constructor, or call fromJson'); + } + if (this.blockId === undefined) { + throw new Error( + 'The block ID is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } json['isStart'] = this.isStart; json['blockId'] = this.blockId; + // TODO: I don't think we should actually apply the blocks array to the JSON + // object b/c they have functions and aren't actually serializable. json['blocks'] = this.blocks; return json; } @@ -71,7 +82,7 @@ export class BlockDrag extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockDragJson) { super.fromJson(json); this.isStart = json['isStart']; this.blockId = json['blockId']; @@ -79,4 +90,10 @@ export class BlockDrag extends UiBase { } } +export interface BlockDragJson extends AbstractEventJson { + isStart: boolean; + blockId: string; + blocks?: Block[]; +} + registry.register(registry.Type.EVENT, eventUtils.BLOCK_DRAG, BlockDrag); diff --git a/core/events/events_block_move.ts b/core/events/events_block_move.ts index 995f4c416..6cddb50dd 100644 --- a/core/events/events_block_move.ts +++ b/core/events/events_block_move.ts @@ -17,15 +17,15 @@ import {ConnectionType} from '../connection_type.js'; import * as registry from '../registry.js'; import {Coordinate} from '../utils/coordinate.js'; -import {BlockBase} from './events_block_base.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; import * as eventUtils from './utils.js'; interface BlockLocation { - parentId: string; - inputName: string; - coordinate: Coordinate|null; -} // eslint-disable-line no-unused-vars + parentId?: string; + inputName?: string; + coordinate?: Coordinate; +} /** * Class for a block move event. Created before the move. @@ -33,25 +33,19 @@ interface BlockLocation { * @alias Blockly.Events.BlockMove */ export class BlockMove extends BlockBase { - override type: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldParentId!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldInputName!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldCoordinate!: Coordinate|null; + override type = eventUtils.BLOCK_MOVE; + oldParentId?: string; + oldInputName?: string; + oldCoordinate?: Coordinate; - newParentId: string|null = null; - newInputName: string|null = null; - newCoordinate: Coordinate|null = null; + newParentId?: string; + newInputName?: string; + newCoordinate?: Coordinate; /** @param opt_block The moved block. Undefined for a blank event. */ constructor(opt_block?: Block) { super(opt_block); - /** Type of this event. */ - this.type = eventUtils.BLOCK_MOVE; - if (!opt_block) { return; } @@ -72,17 +66,13 @@ export class BlockMove extends BlockBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - if (this.newParentId) { - json['newParentId'] = this.newParentId; - } - if (this.newInputName) { - json['newInputName'] = this.newInputName; - } + override toJson(): BlockMoveJson { + const json = super.toJson() as BlockMoveJson; + json['newParentId'] = this.newParentId; + json['newInputName'] = this.newInputName; if (this.newCoordinate) { - json['newCoordinate'] = Math.round(this.newCoordinate.x) + ',' + - Math.round(this.newCoordinate.y); + json['newCoordinate'] = `${Math.round(this.newCoordinate.x)}, ` + + `${Math.round(this.newCoordinate.y)}`; } if (!this.recordUndo) { json['recordUndo'] = this.recordUndo; @@ -95,7 +85,7 @@ export class BlockMove extends BlockBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BlockMoveJson) { super.fromJson(json); this.newParentId = json['newParentId']; this.newInputName = json['newInputName']; @@ -124,19 +114,27 @@ export class BlockMove extends BlockBase { */ private currentLocation_(): BlockLocation { const workspace = this.getEventWorkspace_(); + if (!this.blockId) { + throw new Error( + 'The block ID is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } const block = workspace.getBlockById(this.blockId); + if (!block) { + throw new Error( + 'The block associated with the block move event ' + + 'could not be found'); + } const location = {} as BlockLocation; - const parent = block!.getParent(); + const parent = block.getParent(); if (parent) { location.parentId = parent.id; - // AnyDuringMigration because: Argument of type 'Block | null' is not - // assignable to parameter of type 'Block'. - const input = parent.getInputWithBlock(block as AnyDuringMigration); + const input = parent.getInputWithBlock(block); if (input) { location.inputName = input.name; } } else { - location.coordinate = block!.getRelativeToSurfaceXY(); + location.coordinate = block.getRelativeToSurfaceXY(); } return location; } @@ -159,6 +157,11 @@ export class BlockMove extends BlockBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.blockId) { + throw new Error( + 'The block ID is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); + } const block = workspace.getBlockById(this.blockId); if (!block) { console.warn('Can\'t move non-existent block: ' + this.blockId); @@ -206,4 +209,11 @@ export class BlockMove extends BlockBase { } } +export interface BlockMoveJson extends BlockBaseJson { + newParentId?: string; + newInputName?: string; + newCoordinate?: string; + recordUndo?: boolean; +} + registry.register(registry.Type.EVENT, eventUtils.MOVE, BlockMove); diff --git a/core/events/events_bubble_open.ts b/core/events/events_bubble_open.ts index 8e1e7d080..b847f2cd7 100644 --- a/core/events/events_bubble_open.ts +++ b/core/events/events_bubble_open.ts @@ -12,9 +12,9 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.BubbleOpen'); +import type {AbstractEventJson} from './events_abstract.js'; import type {BlockSvg} from '../block_svg.js'; import * as registry from '../registry.js'; - import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -25,10 +25,10 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.BubbleOpen */ export class BubbleOpen extends UiBase { - blockId: string|null; + blockId?: string; isOpen?: boolean; - bubbleType?: string; - override type: string; + bubbleType?: BubbleType; + override type = eventUtils.BUBBLE_OPEN; /** * @param opt_block The associated block. Undefined for a blank event. @@ -38,19 +38,18 @@ export class BubbleOpen extends UiBase { * 'warning'. Undefined for a blank event. */ constructor( - opt_block?: BlockSvg, opt_isOpen?: boolean, opt_bubbleType?: string) { + opt_block?: BlockSvg, opt_isOpen?: boolean, opt_bubbleType?: BubbleType) { const workspaceId = opt_block ? opt_block.workspace.id : undefined; super(workspaceId); - this.blockId = opt_block ? opt_block.id : null; + if (!opt_block) return; + + this.blockId = opt_block.id; /** Whether the bubble is opening (false if closing). */ this.isOpen = opt_isOpen; /** The type of bubble. One of 'mutator', 'comment', or 'warning'. */ this.bubbleType = opt_bubbleType; - - /** Type of this event. */ - this.type = eventUtils.BUBBLE_OPEN; } /** @@ -58,11 +57,21 @@ export class BubbleOpen extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): BubbleOpenJson { + const json = super.toJson() as BubbleOpenJson; + if (this.isOpen === undefined) { + throw new Error( + 'Whether this event is for opening the bubble is undefined. ' + + 'Either pass the value to the constructor, or call fromJson'); + } + if (!this.bubbleType) { + throw new Error( + 'The type of bubble is undefined. Either pass the ' + + 'value to the constructor, or call fromJson'); + } json['isOpen'] = this.isOpen; json['bubbleType'] = this.bubbleType; - json['blockId'] = this.blockId; + json['blockId'] = this.blockId || ''; return json; } @@ -71,7 +80,7 @@ export class BubbleOpen extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: BubbleOpenJson) { super.fromJson(json); this.isOpen = json['isOpen']; this.bubbleType = json['bubbleType']; @@ -79,4 +88,16 @@ export class BubbleOpen extends UiBase { } } +export enum BubbleType { + MUTATOR = 'mutator', + COMMENT = 'comment', + WARNING = 'warning', +} + +export interface BubbleOpenJson extends AbstractEventJson { + isOpen: boolean; + bubbleType: BubbleType; + blockId: string; +} + registry.register(registry.Type.EVENT, eventUtils.BUBBLE_OPEN, BubbleOpen); diff --git a/core/events/events_click.ts b/core/events/events_click.ts index 29262b2c6..c4c782a06 100644 --- a/core/events/events_click.ts +++ b/core/events/events_click.ts @@ -14,6 +14,7 @@ goog.declareModuleId('Blockly.Events.Click'); import type {Block} from '../block.js'; import * as registry from '../registry.js'; +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -25,9 +26,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.Click */ export class Click extends UiBase { - blockId: AnyDuringMigration; - targetType?: string; - override type: string; + blockId?: string; + targetType?: ClickTarget; + override type = eventUtils.CLICK; /** * @param opt_block The affected block. Null for click events that do not have @@ -40,19 +41,17 @@ export class Click extends UiBase { */ constructor( opt_block?: Block|null, opt_workspaceId?: string|null, - opt_targetType?: string) { + opt_targetType?: ClickTarget) { let workspaceId = opt_block ? opt_block.workspace.id : opt_workspaceId; if (workspaceId === null) { workspaceId = undefined; } super(workspaceId); - this.blockId = opt_block ? opt_block.id : null; + + this.blockId = opt_block ? opt_block.id : undefined; /** The type of element targeted by this click event. */ this.targetType = opt_targetType; - - /** Type of this event. */ - this.type = eventUtils.CLICK; } /** @@ -60,12 +59,15 @@ export class Click extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - json['targetType'] = this.targetType; - if (this.blockId) { - json['blockId'] = this.blockId; + override toJson(): ClickJson { + const json = super.toJson() as ClickJson; + if (!this.targetType) { + throw new Error( + 'The click target type is undefined. Either pass a block to ' + + 'the constructor, or call fromJson'); } + json['targetType'] = this.targetType; + json['blockId'] = this.blockId; return json; } @@ -74,11 +76,22 @@ export class Click extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: ClickJson) { super.fromJson(json); this.targetType = json['targetType']; this.blockId = json['blockId']; } } +export enum ClickTarget { + BLOCK = 'block', + WORKSPACE = 'workspace', + ZOOM_CONTROLS = 'zoom_controls', +} + +export interface ClickJson extends AbstractEventJson { + targetType: ClickTarget; + blockId?: string; +} + registry.register(registry.Type.EVENT, eventUtils.CLICK, Click); diff --git a/core/events/events_comment_base.ts b/core/events/events_comment_base.ts index 7d8d39268..6329e3902 100644 --- a/core/events/events_comment_base.ts +++ b/core/events/events_comment_base.ts @@ -16,7 +16,7 @@ import * as utilsXml from '../utils/xml.js'; import type {WorkspaceComment} from '../workspace_comment.js'; import * as Xml from '../xml.js'; -import {Abstract as AbstractEvent} from './events_abstract.js'; +import {Abstract as AbstractEvent, AbstractEventJson} from './events_abstract.js'; import type {CommentCreate} from './events_comment_create.js'; import type {CommentDelete} from './events_comment_delete.js'; import * as eventUtils from './utils.js'; @@ -28,9 +28,8 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.CommentBase */ export class CommentBase extends AbstractEvent { - override isBlank: boolean; - commentId: string; - override workspaceId: string; + override isBlank = true; + commentId?: string; /** * @param opt_comment The comment this event corresponds to. Undefined for a @@ -39,13 +38,15 @@ export class CommentBase extends AbstractEvent { constructor(opt_comment?: WorkspaceComment) { super(); /** Whether or not an event is blank. */ - this.isBlank = typeof opt_comment === 'undefined'; + this.isBlank = !opt_comment; + + if (!opt_comment) return; /** The ID of the comment this event pertains to. */ - this.commentId = this.isBlank ? '' : opt_comment!.id; + this.commentId = opt_comment.id; /** The workspace identifier for this event. */ - this.workspaceId = this.isBlank ? '' : opt_comment!.workspace.id; + this.workspaceId = opt_comment.workspace.id; /** * The event group ID for the group this event belongs to. Groups define @@ -63,11 +64,14 @@ export class CommentBase extends AbstractEvent { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - if (this.commentId) { - json['commentId'] = this.commentId; + override toJson(): CommentBaseJson { + const json = super.toJson() as CommentBaseJson; + if (!this.commentId) { + throw new Error( + 'The comment ID is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); } + json['commentId'] = this.commentId; return json; } @@ -76,7 +80,7 @@ export class CommentBase extends AbstractEvent { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: CommentBaseJson) { super.fromJson(json); this.commentId = json['commentId']; } @@ -92,9 +96,17 @@ export class CommentBase extends AbstractEvent { const workspace = event.getEventWorkspace_(); if (create) { const xmlElement = utilsXml.createElement('xml'); + if (!event.xml) { + throw new Error('Ecountered a comment event without proper xml'); + } xmlElement.appendChild(event.xml); Xml.domToWorkspace(xmlElement, workspace); } else { + if (!event.commentId) { + throw new Error( + 'The comment ID is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); + } const comment = workspace.getCommentById(event.commentId); if (comment) { comment.dispose(); @@ -106,3 +118,7 @@ export class CommentBase extends AbstractEvent { } } } + +export interface CommentBaseJson extends AbstractEventJson { + commentId: string; +} diff --git a/core/events/events_comment_change.ts b/core/events/events_comment_change.ts index ec98eb312..134b23714 100644 --- a/core/events/events_comment_change.ts +++ b/core/events/events_comment_change.ts @@ -15,7 +15,7 @@ goog.declareModuleId('Blockly.Events.CommentChange'); import * as registry from '../registry.js'; import type {WorkspaceComment} from '../workspace_comment.js'; -import {CommentBase} from './events_comment_base.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; import * as eventUtils from './utils.js'; @@ -25,12 +25,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.CommentChange */ export class CommentChange extends CommentBase { - override type: string; - - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldContents_!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - newContents_!: string; + override type = eventUtils.COMMENT_CHANGE; + oldContents_?: string; + newContents_?: string; /** * @param opt_comment The comment that is being changed. Undefined for a @@ -43,9 +40,6 @@ export class CommentChange extends CommentBase { opt_newContents?: string) { super(opt_comment); - /** Type of this event. */ - this.type = eventUtils.COMMENT_CHANGE; - if (!opt_comment) { return; // Blank event to be populated by fromJson. } @@ -61,8 +55,18 @@ export class CommentChange extends CommentBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): CommentChangeJson { + const json = super.toJson() as CommentChangeJson; + if (!this.oldContents_) { + throw new Error( + 'The old contents is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } + if (!this.newContents_) { + throw new Error( + 'The new contents is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } json['oldContents'] = this.oldContents_; json['newContents'] = this.newContents_; return json; @@ -73,7 +77,7 @@ export class CommentChange extends CommentBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: CommentChangeJson) { super.fromJson(json); this.oldContents_ = json['oldContents']; this.newContents_ = json['newContents']; @@ -95,16 +99,35 @@ export class CommentChange extends CommentBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.commentId) { + throw new Error( + 'The comment ID is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); + } const comment = workspace.getCommentById(this.commentId); if (!comment) { console.warn('Can\'t change non-existent comment: ' + this.commentId); return; } const contents = forward ? this.newContents_ : this.oldContents_; - + if (!contents) { + if (forward) { + throw new Error( + 'The new contents is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } + throw new Error( + 'The old contents is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } comment.setContent(contents); } } +export interface CommentChangeJson extends CommentBaseJson { + oldContents: string; + newContents: string; +} + registry.register( registry.Type.EVENT, eventUtils.COMMENT_CHANGE, CommentChange); diff --git a/core/events/events_comment_create.ts b/core/events/events_comment_create.ts index 55f7b0c9c..384d4cca8 100644 --- a/core/events/events_comment_create.ts +++ b/core/events/events_comment_create.ts @@ -16,7 +16,7 @@ import * as registry from '../registry.js'; import type {WorkspaceComment} from '../workspace_comment.js'; import * as Xml from '../xml.js'; -import {CommentBase} from './events_comment_base.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; import * as eventUtils from './utils.js'; @@ -26,9 +26,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.CommentCreate */ export class CommentCreate extends CommentBase { - override type: string; + override type = eventUtils.COMMENT_CREATE; - xml: AnyDuringMigration; + xml?: Element|DocumentFragment; /** * @param opt_comment The created comment. @@ -37,9 +37,6 @@ export class CommentCreate extends CommentBase { constructor(opt_comment?: WorkspaceComment) { super(opt_comment); - /** Type of this event. */ - this.type = eventUtils.COMMENT_CREATE; - if (!opt_comment) { return; } @@ -53,8 +50,13 @@ export class CommentCreate extends CommentBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): CommentCreateJson { + const json = super.toJson() as CommentCreateJson; + if (!this.xml) { + throw new Error( + 'The comment XML is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); + } json['xml'] = Xml.domToText(this.xml); return json; } @@ -64,7 +66,7 @@ export class CommentCreate extends CommentBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: CommentCreateJson) { super.fromJson(json); this.xml = Xml.textToDom(json['xml']); } @@ -79,5 +81,9 @@ export class CommentCreate extends CommentBase { } } +export interface CommentCreateJson extends CommentBaseJson { + xml: string; +} + registry.register( registry.Type.EVENT, eventUtils.COMMENT_CREATE, CommentCreate); diff --git a/core/events/events_comment_delete.ts b/core/events/events_comment_delete.ts index 8f2c79138..a2c6fddf0 100644 --- a/core/events/events_comment_delete.ts +++ b/core/events/events_comment_delete.ts @@ -25,8 +25,8 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.CommentDelete */ export class CommentDelete extends CommentBase { - override type: string; - xml: AnyDuringMigration; + override type = eventUtils.COMMENT_DELETE; + xml?: Element; /** * @param opt_comment The deleted comment. @@ -35,34 +35,12 @@ export class CommentDelete extends CommentBase { constructor(opt_comment?: WorkspaceComment) { super(opt_comment); - /** Type of this event. */ - this.type = eventUtils.COMMENT_DELETE; - if (!opt_comment) { return; // Blank event to be populated by fromJson. } this.xml = opt_comment.toXmlWithXY(); } - // TODO (#1266): "Full" and "minimal" serialization. - /** - * Encode the event as JSON. - * - * @returns JSON representation. - */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - return json; - } - - /** - * Decode the JSON event. - * - * @param json JSON representation. - */ - override fromJson(json: AnyDuringMigration) { - super.fromJson(json); - } /** * Run a creation event. diff --git a/core/events/events_comment_move.ts b/core/events/events_comment_move.ts index 44344daa6..b9cd62e1c 100644 --- a/core/events/events_comment_move.ts +++ b/core/events/events_comment_move.ts @@ -16,7 +16,7 @@ import * as registry from '../registry.js'; import {Coordinate} from '../utils/coordinate.js'; import type {WorkspaceComment} from '../workspace_comment.js'; -import {CommentBase} from './events_comment_base.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; import * as eventUtils from './utils.js'; @@ -26,17 +26,11 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.CommentMove */ export class CommentMove extends CommentBase { - override type: string; - - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - comment_!: WorkspaceComment; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldCoordinate_!: Coordinate; - + override type = eventUtils.COMMENT_MOVE; + comment_?: WorkspaceComment; + oldCoordinate_?: Coordinate; /** The location after the move, in workspace coordinates. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'Coordinate'. - newCoordinate_: Coordinate = null as AnyDuringMigration; + newCoordinate_?: Coordinate; /** * @param opt_comment The comment that is being moved. Undefined for a blank @@ -45,16 +39,12 @@ export class CommentMove extends CommentBase { constructor(opt_comment?: WorkspaceComment) { super(opt_comment); - /** Type of this event. */ - this.type = eventUtils.COMMENT_MOVE; - if (!opt_comment) { return; // Blank event to be populated by fromJson. } /** - * The comment that is being moved. Will be cleared after recording the new - * location. + * The comment that is being moved. */ this.comment_ = opt_comment; @@ -67,15 +57,17 @@ export class CommentMove extends CommentBase { * called once. */ recordNew() { - if (!this.comment_) { + if (this.newCoordinate_) { throw Error( 'Tried to record the new position of a comment on the ' + 'same event twice.'); } + if (!this.comment_) { + throw new Error( + 'The comment is undefined. Pass a comment to ' + + 'the constructor if you want to use the record functionality'); + } this.newCoordinate_ = this.comment_.getXY(); - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'WorkspaceComment'. - this.comment_ = null as AnyDuringMigration; } /** @@ -94,16 +86,22 @@ export class CommentMove extends CommentBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); - if (this.oldCoordinate_) { - json['oldCoordinate'] = Math.round(this.oldCoordinate_.x) + ',' + - Math.round(this.oldCoordinate_.y); + override toJson(): CommentMoveJson { + const json = super.toJson() as CommentMoveJson; + if (!this.oldCoordinate_) { + throw new Error( + 'The old comment position is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); } - if (this.newCoordinate_) { - json['newCoordinate'] = Math.round(this.newCoordinate_.x) + ',' + - Math.round(this.newCoordinate_.y); + if (!this.newCoordinate_) { + throw new Error( + 'The new comment position is undefined. Either call recordNew, or ' + + 'call fromJson'); } + json['oldCoordinate'] = `${Math.round(this.oldCoordinate_.x)}, ` + + `${Math.round(this.oldCoordinate_.y)}`; + json['newCoordinate'] = Math.round(this.newCoordinate_.x) + ',' + + Math.round(this.newCoordinate_.y); return json; } @@ -112,17 +110,12 @@ export class CommentMove extends CommentBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: CommentMoveJson) { super.fromJson(json); - - if (json['oldCoordinate']) { - const xy = json['oldCoordinate'].split(','); - this.oldCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1])); - } - if (json['newCoordinate']) { - const xy = json['newCoordinate'].split(','); - this.newCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1])); - } + let xy = json['oldCoordinate'].split(','); + this.oldCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1])); + xy = json['newCoordinate'].split(','); + this.newCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1])); } /** @@ -141,6 +134,11 @@ export class CommentMove extends CommentBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.commentId) { + throw new Error( + 'The comment ID is undefined. Either pass a comment to ' + + 'the constructor, or call fromJson'); + } const comment = workspace.getCommentById(this.commentId); if (!comment) { console.warn('Can\'t move non-existent comment: ' + this.commentId); @@ -148,10 +146,21 @@ export class CommentMove extends CommentBase { } const target = forward ? this.newCoordinate_ : this.oldCoordinate_; + if (!target) { + throw new Error( + 'Either oldCoordinate_ or newCoordinate_ is undefined. ' + + 'Either pass a comment to the constructor and call recordNew, ' + + 'or call fromJson'); + } // TODO: Check if the comment is being dragged, and give up if so. const current = comment.getXY(); comment.moveBy(target.x - current.x, target.y - current.y); } } +export interface CommentMoveJson extends CommentBaseJson { + oldCoordinate: string; + newCoordinate: string; +} + registry.register(registry.Type.EVENT, eventUtils.COMMENT_MOVE, CommentMove); diff --git a/core/events/events_marker_move.ts b/core/events/events_marker_move.ts index a3d0d21f8..c7f3aa071 100644 --- a/core/events/events_marker_move.ts +++ b/core/events/events_marker_move.ts @@ -16,6 +16,7 @@ import type {Block} from '../block.js'; import {ASTNode} from '../keyboard_nav/ast_node.js'; import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -27,11 +28,11 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.MarkerMove */ export class MarkerMove extends UiBase { - blockId: string|null; - oldNode?: ASTNode|null; + blockId?: string; + oldNode?: ASTNode; newNode?: ASTNode; isCursor?: boolean; - override type: string; + override type = eventUtils.MARKER_MOVE; /** * @param opt_block The affected block. Null if current node is of type @@ -52,20 +53,17 @@ export class MarkerMove extends UiBase { } super(workspaceId); - /** The workspace identifier for this event. */ - this.blockId = opt_block ? opt_block.id : null; + /** The block identifier for this event. */ + this.blockId = opt_block?.id; /** The old node the marker used to be on. */ - this.oldNode = opt_oldNode; + this.oldNode = opt_oldNode || undefined; /** The new node the marker is now on. */ this.newNode = opt_newNode; /** Whether this is a cursor event. */ this.isCursor = isCursor; - - /** Type of this event. */ - this.type = eventUtils.MARKER_MOVE; } /** @@ -73,8 +71,18 @@ export class MarkerMove extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): MarkerMoveJson { + const json = super.toJson() as MarkerMoveJson; + if (this.isCursor === undefined) { + throw new Error( + 'Whether this is a cursor event or not is undefined. Either pass ' + + 'a value to the constructor, or call fromJson'); + } + if (!this.newNode) { + throw new Error( + 'The new node is undefined. Either pass a node to ' + + 'the constructor, or call fromJson'); + } json['isCursor'] = this.isCursor; json['blockId'] = this.blockId; json['oldNode'] = this.oldNode; @@ -87,7 +95,7 @@ export class MarkerMove extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: MarkerMoveJson) { super.fromJson(json); this.isCursor = json['isCursor']; this.blockId = json['blockId']; @@ -96,4 +104,11 @@ export class MarkerMove extends UiBase { } } +export interface MarkerMoveJson extends AbstractEventJson { + isCursor: boolean; + blockId?: string; + oldNode?: ASTNode; + newNode: ASTNode; +} + registry.register(registry.Type.EVENT, eventUtils.MARKER_MOVE, MarkerMove); diff --git a/core/events/events_selected.ts b/core/events/events_selected.ts index 5b1ee99bd..1e596a1ae 100644 --- a/core/events/events_selected.ts +++ b/core/events/events_selected.ts @@ -13,6 +13,7 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.Selected'); import * as registry from '../registry.js'; +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -24,9 +25,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.Selected */ export class Selected extends UiBase { - oldElementId?: string|null; - newElementId?: string|null; - override type: string; + oldElementId?: string; + newElementId?: string; + override type = eventUtils.SELECTED; /** * @param opt_oldElementId The ID of the previously selected element. Null if @@ -41,14 +42,11 @@ export class Selected extends UiBase { opt_workspaceId?: string) { super(opt_workspaceId); - /** The ID of the last selected element. */ - this.oldElementId = opt_oldElementId; + /** The id of the last selected element. */ + this.oldElementId = opt_oldElementId ?? undefined; - /** The ID of the selected element. */ - this.newElementId = opt_newElementId; - - /** Type of this event. */ - this.type = eventUtils.SELECTED; + /** The id of the selected element. */ + this.newElementId = opt_newElementId ?? undefined; } /** @@ -56,8 +54,8 @@ export class Selected extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): SelectedJson { + const json = super.toJson() as SelectedJson; json['oldElementId'] = this.oldElementId; json['newElementId'] = this.newElementId; return json; @@ -68,11 +66,16 @@ export class Selected extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: SelectedJson) { super.fromJson(json); this.oldElementId = json['oldElementId']; this.newElementId = json['newElementId']; } } +export interface SelectedJson extends AbstractEventJson { + oldElementId?: string; + newElementId?: string; +} + registry.register(registry.Type.EVENT, eventUtils.SELECTED, Selected); diff --git a/core/events/events_theme_change.ts b/core/events/events_theme_change.ts index 811b69ab0..7c47bd58e 100644 --- a/core/events/events_theme_change.ts +++ b/core/events/events_theme_change.ts @@ -13,7 +13,7 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.ThemeChange'); import * as registry from '../registry.js'; - +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -25,7 +25,7 @@ import * as eventUtils from './utils.js'; */ export class ThemeChange extends UiBase { themeName?: string; - override type: string; + override type = eventUtils.THEME_CHANGE; /** * @param opt_themeName The theme name. Undefined for a blank event. @@ -37,9 +37,6 @@ export class ThemeChange extends UiBase { /** The theme name. */ this.themeName = opt_themeName; - - /** Type of this event. */ - this.type = eventUtils.THEME_CHANGE; } /** @@ -47,8 +44,13 @@ export class ThemeChange extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): ThemeChangeJson { + const json = super.toJson() as ThemeChangeJson; + if (!this.themeName) { + throw new Error( + 'The theme name is undefined. Either pass a theme name to ' + + 'the constructor, or call fromJson'); + } json['themeName'] = this.themeName; return json; } @@ -58,10 +60,14 @@ export class ThemeChange extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: ThemeChangeJson) { super.fromJson(json); this.themeName = json['themeName']; } } +export interface ThemeChangeJson extends AbstractEventJson { + themeName: string; +} + registry.register(registry.Type.EVENT, eventUtils.THEME_CHANGE, ThemeChange); diff --git a/core/events/events_toolbox_item_select.ts b/core/events/events_toolbox_item_select.ts index 6983d5886..39a13eefc 100644 --- a/core/events/events_toolbox_item_select.ts +++ b/core/events/events_toolbox_item_select.ts @@ -13,7 +13,7 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.ToolboxItemSelect'); import * as registry from '../registry.js'; - +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -24,9 +24,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.ToolboxItemSelect */ export class ToolboxItemSelect extends UiBase { - oldItem?: string|null; - newItem?: string|null; - override type: string; + oldItem?: string; + newItem?: string; + override type = eventUtils.TOOLBOX_ITEM_SELECT; /** * @param opt_oldItem The previously selected toolbox item. @@ -42,13 +42,10 @@ export class ToolboxItemSelect extends UiBase { super(opt_workspaceId); /** The previously selected toolbox item. */ - this.oldItem = opt_oldItem; + this.oldItem = opt_oldItem ?? undefined; /** The newly selected toolbox item. */ - this.newItem = opt_newItem; - - /** Type of this event. */ - this.type = eventUtils.TOOLBOX_ITEM_SELECT; + this.newItem = opt_newItem ?? undefined; } /** @@ -56,8 +53,8 @@ export class ToolboxItemSelect extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): ToolboxItemSelectJson { + const json = super.toJson() as ToolboxItemSelectJson; json['oldItem'] = this.oldItem; json['newItem'] = this.newItem; return json; @@ -68,12 +65,17 @@ export class ToolboxItemSelect extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: ToolboxItemSelectJson) { super.fromJson(json); this.oldItem = json['oldItem']; this.newItem = json['newItem']; } } +export interface ToolboxItemSelectJson extends AbstractEventJson { + oldItem?: string; + newItem?: string; +} + registry.register( registry.Type.EVENT, eventUtils.TOOLBOX_ITEM_SELECT, ToolboxItemSelect); diff --git a/core/events/events_trashcan_open.ts b/core/events/events_trashcan_open.ts index f937072f4..ff1e209af 100644 --- a/core/events/events_trashcan_open.ts +++ b/core/events/events_trashcan_open.ts @@ -13,6 +13,7 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.TrashcanOpen'); import * as registry from '../registry.js'; +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -25,7 +26,7 @@ import * as eventUtils from './utils.js'; */ export class TrashcanOpen extends UiBase { isOpen?: boolean; - override type: string; + override type = eventUtils.TRASHCAN_OPEN; /** * @param opt_isOpen Whether the trashcan flyout is opening (false if @@ -38,9 +39,6 @@ export class TrashcanOpen extends UiBase { /** Whether the trashcan flyout is opening (false if closing). */ this.isOpen = opt_isOpen; - - /** Type of this event. */ - this.type = eventUtils.TRASHCAN_OPEN; } /** @@ -48,8 +46,13 @@ export class TrashcanOpen extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): TrashcanOpenJson { + const json = super.toJson() as TrashcanOpenJson; + if (this.isOpen === undefined) { + throw new Error( + 'Whether this is already open or not is undefined. Either pass ' + + 'a value to the constructor, or call fromJson'); + } json['isOpen'] = this.isOpen; return json; } @@ -59,10 +62,14 @@ export class TrashcanOpen extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: TrashcanOpenJson) { super.fromJson(json); this.isOpen = json['isOpen']; } } +export interface TrashcanOpenJson extends AbstractEventJson { + isOpen: boolean; +} + registry.register(registry.Type.EVENT, eventUtils.TRASHCAN_OPEN, TrashcanOpen); diff --git a/core/events/events_ui.ts b/core/events/events_ui.ts index 38c7e82e2..670d9143d 100644 --- a/core/events/events_ui.ts +++ b/core/events/events_ui.ts @@ -15,7 +15,6 @@ goog.declareModuleId('Blockly.Events.Ui'); import type {Block} from '../block.js'; import * as registry from '../registry.js'; - import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -31,7 +30,7 @@ export class Ui extends UiBase { element: AnyDuringMigration; oldValue: AnyDuringMigration; newValue: AnyDuringMigration; - override type: string; + override type = eventUtils.UI; /** * @param opt_block The affected block. Null for UI events that do not have @@ -50,9 +49,6 @@ export class Ui extends UiBase { this.element = typeof opt_element === 'undefined' ? '' : opt_element; this.oldValue = typeof opt_oldValue === 'undefined' ? '' : opt_oldValue; this.newValue = typeof opt_newValue === 'undefined' ? '' : opt_newValue; - - /** Type of this event. */ - this.type = eventUtils.UI; } /** @@ -61,7 +57,7 @@ export class Ui extends UiBase { * @returns JSON representation. */ override toJson(): AnyDuringMigration { - const json = super.toJson(); + const json = super.toJson() as AnyDuringMigration; json['element'] = this.element; if (this.newValue !== undefined) { json['newValue'] = this.newValue; diff --git a/core/events/events_ui_base.ts b/core/events/events_ui_base.ts index 7ac36a756..5f585f079 100644 --- a/core/events/events_ui_base.ts +++ b/core/events/events_ui_base.ts @@ -26,7 +26,7 @@ import {Abstract as AbstractEvent} from './events_abstract.js'; * @alias Blockly.Events.UiBase */ export class UiBase extends AbstractEvent { - override isBlank: boolean; + override isBlank = true; override workspaceId: string; // UI events do not undo or redo. diff --git a/core/events/events_var_base.ts b/core/events/events_var_base.ts index 6bcf1d381..e16426638 100644 --- a/core/events/events_var_base.ts +++ b/core/events/events_var_base.ts @@ -14,7 +14,7 @@ goog.declareModuleId('Blockly.Events.VarBase'); import type {VariableModel} from '../variable_model.js'; -import {Abstract as AbstractEvent} from './events_abstract.js'; +import {Abstract as AbstractEvent, AbstractEventJson} from './events_abstract.js'; /** @@ -23,9 +23,8 @@ import {Abstract as AbstractEvent} from './events_abstract.js'; * @alias Blockly.Events.VarBase */ export class VarBase extends AbstractEvent { - override isBlank: AnyDuringMigration; - varId: string; - override workspaceId: string; + override isBlank = true; + varId?: string; /** * @param opt_variable The variable this event corresponds to. Undefined for @@ -34,12 +33,13 @@ export class VarBase extends AbstractEvent { constructor(opt_variable?: VariableModel) { super(); this.isBlank = typeof opt_variable === 'undefined'; + if (!opt_variable) return; - /** The variable ID for the variable this event pertains to. */ - this.varId = this.isBlank ? '' : opt_variable!.getId(); + /** The variable id for the variable this event pertains to. */ + this.varId = opt_variable.getId(); /** The workspace identifier for this event. */ - this.workspaceId = this.isBlank ? '' : opt_variable!.workspace.id; + this.workspaceId = opt_variable.workspace.id; } /** @@ -47,8 +47,13 @@ export class VarBase extends AbstractEvent { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): VarBaseJson { + const json = super.toJson() as VarBaseJson; + if (!this.varId) { + throw new Error( + 'The var ID is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } json['varId'] = this.varId; return json; } @@ -58,8 +63,12 @@ export class VarBase extends AbstractEvent { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: VarBaseJson) { super.fromJson(json); this.varId = json['varId']; } } + +export interface VarBaseJson extends AbstractEventJson { + varId: string; +} diff --git a/core/events/events_var_create.ts b/core/events/events_var_create.ts index 6dc0ac069..326d6c301 100644 --- a/core/events/events_var_create.ts +++ b/core/events/events_var_create.ts @@ -15,7 +15,7 @@ goog.declareModuleId('Blockly.Events.VarCreate'); import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; -import {VarBase} from './events_var_base.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; import * as eventUtils from './utils.js'; @@ -25,12 +25,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.VarCreate */ export class VarCreate extends VarBase { - override type: string; - - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - varType!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - varName!: string; + override type = eventUtils.VAR_CREATE; + varType?: string; + varName?: string; /** * @param opt_variable The created variable. Undefined for a blank event. @@ -38,9 +35,6 @@ export class VarCreate extends VarBase { constructor(opt_variable?: VariableModel) { super(opt_variable); - /** Type of this event. */ - this.type = eventUtils.VAR_CREATE; - if (!opt_variable) { return; // Blank event to be populated by fromJson. } @@ -53,8 +47,18 @@ export class VarCreate extends VarBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): VarCreateJson { + const json = super.toJson() as VarCreateJson; + if (!this.varType) { + throw new Error( + 'The var type is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.varName) { + throw new Error( + 'The var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } json['varType'] = this.varType; json['varName'] = this.varName; return json; @@ -65,7 +69,7 @@ export class VarCreate extends VarBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: VarCreateJson) { super.fromJson(json); this.varType = json['varType']; this.varName = json['varName']; @@ -78,6 +82,16 @@ export class VarCreate extends VarBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.varId) { + throw new Error( + 'The var ID is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.varName) { + throw new Error( + 'The var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } if (forward) { workspace.createVariable(this.varName, this.varType, this.varId); } else { @@ -86,4 +100,9 @@ export class VarCreate extends VarBase { } } +export interface VarCreateJson extends VarBaseJson { + varType: string; + varName: string; +} + registry.register(registry.Type.EVENT, eventUtils.VAR_CREATE, VarCreate); diff --git a/core/events/events_var_delete.ts b/core/events/events_var_delete.ts index 3c78e6b35..a8960ddd5 100644 --- a/core/events/events_var_delete.ts +++ b/core/events/events_var_delete.ts @@ -15,7 +15,7 @@ goog.declareModuleId('Blockly.Events.VarDelete'); import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; -import {VarBase} from './events_var_base.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; import * as eventUtils from './utils.js'; @@ -25,12 +25,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.VarDelete */ export class VarDelete extends VarBase { - override type: string; - - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - varType!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - varName!: string; + override type = eventUtils.VAR_DELETE; + varType?: string; + varName?: string; /** * @param opt_variable The deleted variable. Undefined for a blank event. @@ -38,9 +35,6 @@ export class VarDelete extends VarBase { constructor(opt_variable?: VariableModel) { super(opt_variable); - /** Type of this event. */ - this.type = eventUtils.VAR_DELETE; - if (!opt_variable) { return; // Blank event to be populated by fromJson. } @@ -53,8 +47,18 @@ export class VarDelete extends VarBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): VarDeleteJson { + const json = super.toJson() as VarDeleteJson; + if (!this.varType) { + throw new Error( + 'The var type is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.varName) { + throw new Error( + 'The var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } json['varType'] = this.varType; json['varName'] = this.varName; return json; @@ -65,7 +69,7 @@ export class VarDelete extends VarBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: VarDeleteJson) { super.fromJson(json); this.varType = json['varType']; this.varName = json['varName']; @@ -78,6 +82,16 @@ export class VarDelete extends VarBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.varId) { + throw new Error( + 'The var ID is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.varName) { + throw new Error( + 'The var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } if (forward) { workspace.deleteVariableById(this.varId); } else { @@ -86,4 +100,9 @@ export class VarDelete extends VarBase { } } +export interface VarDeleteJson extends VarBaseJson { + varType: string; + varName: string; +} + registry.register(registry.Type.EVENT, eventUtils.VAR_DELETE, VarDelete); diff --git a/core/events/events_var_rename.ts b/core/events/events_var_rename.ts index 0497f45aa..f3bfb489d 100644 --- a/core/events/events_var_rename.ts +++ b/core/events/events_var_rename.ts @@ -15,7 +15,7 @@ goog.declareModuleId('Blockly.Events.VarRename'); import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; -import {VarBase} from './events_var_base.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; import * as eventUtils from './utils.js'; @@ -25,12 +25,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.VarRename */ export class VarRename extends VarBase { - override type: string; - - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - oldName!: string; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - newName!: string; + override type = eventUtils.VAR_RENAME; + oldName?: string; + newName?: string; /** * @param opt_variable The renamed variable. Undefined for a blank event. @@ -39,9 +36,6 @@ export class VarRename extends VarBase { constructor(opt_variable?: VariableModel, newName?: string) { super(opt_variable); - /** Type of this event. */ - this.type = eventUtils.VAR_RENAME; - if (!opt_variable) { return; // Blank event to be populated by fromJson. } @@ -54,8 +48,18 @@ export class VarRename extends VarBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): VarRenameJson { + const json = super.toJson() as VarRenameJson; + if (!this.oldName) { + throw new Error( + 'The old var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.newName) { + throw new Error( + 'The new var name is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } json['oldName'] = this.oldName; json['newName'] = this.newName; return json; @@ -66,7 +70,7 @@ export class VarRename extends VarBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: VarRenameJson) { super.fromJson(json); this.oldName = json['oldName']; this.newName = json['newName']; @@ -79,6 +83,21 @@ export class VarRename extends VarBase { */ override run(forward: boolean) { const workspace = this.getEventWorkspace_(); + if (!this.varId) { + throw new Error( + 'The var ID is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.oldName) { + throw new Error( + 'The old var name is undefined. Either pass a variable to ' + + 'the constructor, or call fromJson'); + } + if (!this.newName) { + throw new Error( + 'The new var name is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } if (forward) { workspace.renameVariableById(this.varId, this.newName); } else { @@ -87,4 +106,9 @@ export class VarRename extends VarBase { } } +export interface VarRenameJson extends VarBaseJson { + oldName: string; + newName: string; +} + registry.register(registry.Type.EVENT, eventUtils.VAR_RENAME, VarRename); diff --git a/core/events/events_viewport.ts b/core/events/events_viewport.ts index 11912b659..a44fc863a 100644 --- a/core/events/events_viewport.ts +++ b/core/events/events_viewport.ts @@ -13,7 +13,7 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Events.ViewportChange'); import * as registry from '../registry.js'; - +import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; import * as eventUtils from './utils.js'; @@ -28,7 +28,7 @@ export class ViewportChange extends UiBase { viewLeft?: number; scale?: number; oldScale?: number; - override type: string; + override type = eventUtils.VIEWPORT_CHANGE; /** * @param opt_top Top-edge of the visible portion of the workspace, relative @@ -63,9 +63,6 @@ export class ViewportChange extends UiBase { /** The old scale of the workspace. */ this.oldScale = opt_oldScale; - - /** Type of this event. */ - this.type = eventUtils.VIEWPORT_CHANGE; } /** @@ -73,8 +70,28 @@ export class ViewportChange extends UiBase { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = super.toJson(); + override toJson(): ViewportChangeJson { + const json = super.toJson() as ViewportChangeJson; + if (this.viewTop === undefined) { + throw new Error( + 'The view top is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } + if (this.viewLeft === undefined) { + throw new Error( + 'The view left is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } + if (this.scale === undefined) { + throw new Error( + 'The scale is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } + if (this.oldScale === undefined) { + throw new Error( + 'The old scale is undefined. Either pass a value to ' + + 'the constructor, or call fromJson'); + } json['viewTop'] = this.viewTop; json['viewLeft'] = this.viewLeft; json['scale'] = this.scale; @@ -87,7 +104,7 @@ export class ViewportChange extends UiBase { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { + override fromJson(json: ViewportChangeJson) { super.fromJson(json); this.viewTop = json['viewTop']; this.viewLeft = json['viewLeft']; @@ -96,5 +113,12 @@ export class ViewportChange extends UiBase { } } +export interface ViewportChangeJson extends AbstractEventJson { + viewTop: number; + viewLeft: number; + scale: number; + oldScale: number; +} + registry.register( registry.Type.EVENT, eventUtils.VIEWPORT_CHANGE, ViewportChange); diff --git a/core/events/utils.ts b/core/events/utils.ts index 782728eee..9938216ce 100644 --- a/core/events/utils.ts +++ b/core/events/utils.ts @@ -536,6 +536,9 @@ export function disableOrphans(event: Abstract) { } const eventWorkspace = common.getWorkspaceById(blockEvent.workspaceId) as WorkspaceSvg; + if (!blockEvent.blockId) { + throw new Error('Encountered a blockEvent without a proper blockId'); + } let block = eventWorkspace.getBlockById(blockEvent.blockId); if (block) { // Changing blocks as part of this event shouldn't be undoable. diff --git a/core/events/workspace_events.ts b/core/events/workspace_events.ts index 2e140a538..95b533d54 100644 --- a/core/events/workspace_events.ts +++ b/core/events/workspace_events.ts @@ -14,8 +14,7 @@ goog.declareModuleId('Blockly.Events.FinishedLoading'); import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; - -import {Abstract as AbstractEvent} from './events_abstract.js'; +import {Abstract as AbstractEvent, AbstractEventJson} from './events_abstract.js'; import * as eventUtils from './utils.js'; @@ -28,13 +27,9 @@ import * as eventUtils from './utils.js'; * @alias Blockly.Events.FinishedLoading */ export class FinishedLoading extends AbstractEvent { - override isBlank: boolean; - override workspaceId: string; - - // Workspace events do not undo or redo. + override isBlank = true; override recordUndo = false; - override type: string; - override group: AnyDuringMigration; + override type = eventUtils.FINISHED_LOADING; /** * @param opt_workspace The workspace that has finished loading. Undefined @@ -43,13 +38,12 @@ export class FinishedLoading extends AbstractEvent { constructor(opt_workspace?: Workspace) { super(); /** Whether or not the event is blank (to be populated by fromJson). */ - this.isBlank = typeof opt_workspace === 'undefined'; + this.isBlank = !!opt_workspace; + + if (!opt_workspace) return; /** The workspace identifier for this event. */ - this.workspaceId = opt_workspace ? opt_workspace.id : ''; - - /** Type of this event. */ - this.type = eventUtils.FINISHED_LOADING; + this.workspaceId = opt_workspace.id; } /** @@ -57,16 +51,14 @@ export class FinishedLoading extends AbstractEvent { * * @returns JSON representation. */ - override toJson(): AnyDuringMigration { - const json = { - 'type': this.type, - }; - if (this.group) { - (json as AnyDuringMigration)['group'] = this.group; - } - if (this.workspaceId) { - (json as AnyDuringMigration)['workspaceId'] = this.workspaceId; + override toJson(): FinishedLoadingJson { + const json = super.toJson() as FinishedLoadingJson; + if (!this.workspaceId) { + throw new Error( + 'The workspace ID is undefined. Either pass a workspace to ' + + 'the constructor, or call fromJson'); } + json['workspaceId'] = this.workspaceId; return json; } @@ -75,12 +67,15 @@ export class FinishedLoading extends AbstractEvent { * * @param json JSON representation. */ - override fromJson(json: AnyDuringMigration) { - this.isBlank = false; + override fromJson(json: FinishedLoadingJson) { + super.fromJson(json); this.workspaceId = json['workspaceId']; - this.group = json['group']; } } +export interface FinishedLoadingJson extends AbstractEventJson { + workspaceId: string; +} + registry.register( registry.Type.EVENT, eventUtils.FINISHED_LOADING, FinishedLoading); diff --git a/core/extensions.ts b/core/extensions.ts index 99ffa809a..c30cb314a 100644 --- a/core/extensions.ts +++ b/core/extensions.ts @@ -98,7 +98,7 @@ export function registerMutator( // Sanity checks passed. register(name, function(this: Block) { if (hasMutatorDialog) { - this.setMutator(new Mutator(this as BlockSvg, opt_blockList || [])); + this.setMutator(new Mutator(opt_blockList || [], this as BlockSvg)); } // Mixin the object. this.mixin(mixinObj); diff --git a/core/field.ts b/core/field.ts index de670e236..dc9010633 100644 --- a/core/field.ts +++ b/core/field.ts @@ -54,9 +54,6 @@ import * as Xml from './xml.js'; export abstract class Field implements IASTNodeLocationSvg, IASTNodeLocationWithBlock, IKeyboardAccessible, IRegistrable { - /** The default value for this field. */ - protected DEFAULT_VALUE: any = null; - /** Non-breaking space. */ static readonly NBSP = '\u00A0'; @@ -75,9 +72,7 @@ export abstract class Field implements IASTNodeLocationSvg, protected value_: AnyDuringMigration; /** Validation function called when user edits an editable field. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'Function'. - protected validator_: Function = null as AnyDuringMigration; + protected validator_: Function|null = null; /** * Used to cache the field's tooltip value if setTooltip is called when the @@ -90,44 +85,31 @@ export abstract class Field implements IASTNodeLocationSvg, * Holds the cursors svg element when the cursor is attached to the field. * This is null if there is no cursor on the field. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGElement'. - private cursorSvg_: SVGElement = null as AnyDuringMigration; + private cursorSvg_: SVGElement|null = null; /** * Holds the markers svg element when the marker is attached to the field. * This is null if there is no marker on the field. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGElement'. - private markerSvg_: SVGElement = null as AnyDuringMigration; + private markerSvg_: SVGElement|null = null; /** The rendered field's SVG group element. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGGElement'. - protected fieldGroup_: SVGGElement = null as AnyDuringMigration; + protected fieldGroup_: SVGGElement|null = null; /** The rendered field's SVG border element. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGRectElement'. - protected borderRect_: SVGRectElement = null as AnyDuringMigration; + protected borderRect_: SVGRectElement|null = null; /** The rendered field's SVG text element. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGTextElement'. - protected textElement_: SVGTextElement = null as AnyDuringMigration; + protected textElement_: SVGTextElement|null = null; /** The rendered field's text content element. */ - // AnyDuringMigration because: Type 'null' is not assignable to type 'Text'. - protected textContent_: Text = null as AnyDuringMigration; + protected textContent_: Text|null = null; /** Mouse down event listener data. */ private mouseDownWrapper_: browserEvents.Data|null = null; /** Constants associated with the source block's renderer. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'ConstantProvider'. - protected constants_: ConstantProvider = null as AnyDuringMigration; + protected constants_: ConstantProvider|null = null; /** * Has this field been disposed of? @@ -140,8 +122,7 @@ export abstract class Field implements IASTNodeLocationSvg, maxDisplayLength = 50; /** Block this field is attached to. Starts as null, then set in init. */ - // AnyDuringMigration because: Type 'null' is not assignable to type 'Block'. - protected sourceBlock_: Block = null as AnyDuringMigration; + protected sourceBlock_: Block|null = null; /** Does this block need to be re-rendered? */ protected isDirty_ = true; @@ -155,9 +136,7 @@ export abstract class Field implements IASTNodeLocationSvg, protected enabled_ = true; /** The element the click handler is bound to. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'Element'. - protected clickTarget_: Element = null as AnyDuringMigration; + protected clickTarget_: Element|null = null; /** * The prefix field. @@ -208,7 +187,9 @@ export abstract class Field implements IASTNodeLocationSvg, * A generic value possessed by the field. * Should generally be non-null, only null when the field is created. */ - this.value_ = (new.target).prototype.DEFAULT_VALUE; + this.value_ = ('DEFAULT_VALUE' in (new.target).prototype) ? + ((new.target).prototype as AnyDuringMigration).DEFAULT_VALUE : + null; /** The size of the area rendered by the field. */ this.size_ = new Size(0, 0); @@ -258,7 +239,8 @@ export abstract class Field implements IASTNodeLocationSvg, * @returns The renderer constant provider. */ getConstants(): ConstantProvider|null { - if (!this.constants_ && this.sourceBlock_ && !this.sourceBlock_.disposed && + if (!this.constants_ && this.sourceBlock_ && + !this.sourceBlock_.isDeadOrDying() && this.sourceBlock_.workspace.rendered) { this.constants_ = (this.sourceBlock_.workspace as WorkspaceSvg) .getRenderer() @@ -271,8 +253,9 @@ export abstract class Field implements IASTNodeLocationSvg, * Get the block this field is attached to. * * @returns The block containing this field. + * @throws An error if the source block is not defined. */ - getSourceBlock(): Block { + getSourceBlock(): Block|null { return this.sourceBlock_; } @@ -361,9 +344,11 @@ export abstract class Field implements IASTNodeLocationSvg, * do custom input handling. */ protected bindEvents_() { - Tooltip.bindMouseEvents(this.getClickTarget_()); + const clickTarget = this.getClickTarget_(); + if (!clickTarget) throw new Error('A click target has not been set.'); + Tooltip.bindMouseEvents(clickTarget); this.mouseDownWrapper_ = browserEvents.conditionalBind( - this.getClickTarget_(), 'mousedown', this, this.onMouseDown_); + clickTarget, 'mousedown', this, this.onMouseDown_); } /** @@ -431,7 +416,7 @@ export abstract class Field implements IASTNodeLocationSvg, * Used to see if `this` has overridden any relevant hooks. * @returns The stringified version of the XML state, or null. */ - protected saveLegacyState(callingClass: AnyDuringMigration): string|null { + protected saveLegacyState(callingClass: FieldProto): string|null { if (callingClass.prototype.saveState === this.saveState && callingClass.prototype.toXml !== this.toXml) { const elem = utilsXml.createElement('field'); @@ -454,7 +439,7 @@ export abstract class Field implements IASTNodeLocationSvg, * @param state The state to apply to the field. * @returns Whether the state was applied or not. */ - loadLegacyState(callingClass: AnyDuringMigration, state: AnyDuringMigration): + loadLegacyState(callingClass: FieldProto, state: AnyDuringMigration): boolean { if (callingClass.prototype.loadState === this.loadState && callingClass.prototype.fromXml !== this.fromXml) { @@ -488,16 +473,17 @@ export abstract class Field implements IASTNodeLocationSvg, /** Add or remove the UI indicating if this field is editable or not. */ updateEditable() { const group = this.fieldGroup_; - if (!this.EDITABLE || !group) { + const block = this.getSourceBlock(); + if (!this.EDITABLE || !group || !block) { return; } - if (this.enabled_ && this.sourceBlock_.isEditable()) { - group.classList.add('blocklyEditableText'); - group.classList.remove('blocklyNonEditableText'); + if (this.enabled_ && block.isEditable()) { + dom.addClass(group, 'blocklyEditableText'); + dom.removeClass(group, 'blocklyNonEditableText'); group.style.cursor = this.CURSOR; } else { - group.classList.add('blocklyNonEditableText'); - group.classList.remove('blocklyEditableText'); + dom.addClass(group, 'blocklyNonEditableText'); + dom.removeClass(group, 'blocklyEditableText'); group.style.cursor = ''; } } @@ -590,7 +576,7 @@ export abstract class Field implements IASTNodeLocationSvg, return; } this.visible_ = visible; - const root = this.getSvgRoot(); + const root = this.fieldGroup_; if (root) { root.style.display = visible ? 'block' : 'none'; } @@ -630,10 +616,49 @@ export abstract class Field implements IASTNodeLocationSvg, * * @returns The group element. */ - getSvgRoot(): SVGGElement { + getSvgRoot(): SVGGElement|null { return this.fieldGroup_; } + /** + * Gets the border rectangle element. + * + * @returns The border rectangle element. + * @throws An error if the border rectangle element is not defined. + */ + protected getBorderRect(): SVGRectElement { + if (!this.borderRect_) { + throw new Error(`The border rectangle is ${this.borderRect_}.`); + } + return this.borderRect_; + } + + /** + * Gets the text element. + * + * @returns The text element. + * @throws An error if the text element is not defined. + */ + protected getTextElement(): SVGTextElement { + if (!this.textElement_) { + throw new Error(`The text element is ${this.textElement_}.`); + } + return this.textElement_; + } + + /** + * Gets the text content. + * + * @returns The text content. + * @throws An error if the text content is not defined. + */ + protected getTextContent(): Text { + if (!this.textContent_) { + throw new Error(`The text content is ${this.textContent_}.`); + } + return this.textContent_; + } + /** * Updates the field to match the colour/style of the block. Should only be * called by BlockSvg.applyColour(). @@ -726,20 +751,19 @@ export abstract class Field implements IASTNodeLocationSvg, const constants = this.getConstants(); const halfHeight = this.size_.height / 2; - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. this.textElement_.setAttribute( 'x', - (this.sourceBlock_.RTL ? this.size_.width - contentWidth - xOffset : - xOffset) as AnyDuringMigration); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. + `${ + this.getSourceBlock()?.RTL ? + this.size_.width - contentWidth - xOffset : + xOffset}`); this.textElement_.setAttribute( 'y', - (constants!.FIELD_TEXT_BASELINE_CENTER ? - halfHeight : - halfHeight - constants!.FIELD_TEXT_HEIGHT / 2 + - constants!.FIELD_TEXT_BASELINE) as AnyDuringMigration); + `${ + constants!.FIELD_TEXT_BASELINE_CENTER ? + halfHeight : + halfHeight - constants!.FIELD_TEXT_HEIGHT / 2 + + constants!.FIELD_TEXT_BASELINE}`); } /** Position a field's border rect after a size change. */ @@ -747,24 +771,12 @@ export abstract class Field implements IASTNodeLocationSvg, if (!this.borderRect_) { return; } - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. + this.borderRect_.setAttribute('width', `${this.size_.width}`); + this.borderRect_.setAttribute('height', `${this.size_.height}`); this.borderRect_.setAttribute( - 'width', this.size_.width as AnyDuringMigration); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. + 'rx', `${this.getConstants()!.FIELD_BORDER_RECT_RADIUS}`); this.borderRect_.setAttribute( - 'height', this.size_.height as AnyDuringMigration); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. - this.borderRect_.setAttribute( - 'rx', - this.getConstants()!.FIELD_BORDER_RECT_RADIUS as AnyDuringMigration); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. - this.borderRect_.setAttribute( - 'ry', - this.getConstants()!.FIELD_BORDER_RECT_RADIUS as AnyDuringMigration); + 'ry', `${this.getConstants()!.FIELD_BORDER_RECT_RADIUS}`); } /** @@ -785,10 +797,13 @@ export abstract class Field implements IASTNodeLocationSvg, } else if (this.visible_ && this.size_.width === 0) { // If the field is not visible the width will be 0 as well, one of the // problems with the old system. - console.warn( - 'Deprecated use of setting size_.width to 0 to rerender a' + - ' field. Set field.isDirty_ to true instead.'); this.render_(); + // Don't issue a warning if the field is actually zero width. + if (this.size_.width !== 0) { + console.warn( + 'Deprecated use of setting size_.width to 0 to rerender a' + + ' field. Set field.isDirty_ to true instead.'); + } } return this.size_; } @@ -805,12 +820,17 @@ export abstract class Field implements IASTNodeLocationSvg, let scaledWidth; let scaledHeight; let xy; + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + if (!this.borderRect_) { // Browsers are inconsistent in what they return for a bounding box. // - Webkit / Blink: fill-box / object bounding box // - Gecko: stroke-box const bBox = (this.sourceBlock_ as BlockSvg).getHeightWidth(); - const scale = (this.sourceBlock_.workspace as WorkspaceSvg).scale; + const scale = (block.workspace as WorkspaceSvg).scale; xy = this.getAbsoluteXY_(); scaledWidth = (bBox.width + 1) * scale; scaledHeight = (bBox.height + 1) * scale; @@ -896,9 +916,7 @@ export abstract class Field implements IASTNodeLocationSvg, */ markDirty() { this.isDirty_ = true; - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'ConstantProvider'. - this.constants_ = null as AnyDuringMigration; + this.constants_ = null; } /** @@ -1050,7 +1068,7 @@ export abstract class Field implements IASTNodeLocationSvg, * @param e Mouse down event. */ protected onMouseDown_(e: Event) { - if (!this.sourceBlock_ || this.sourceBlock_.disposed) { + if (!this.sourceBlock_ || this.sourceBlock_.isDeadOrDying()) { return; } const gesture = (this.sourceBlock_.workspace as WorkspaceSvg).getGesture(e); @@ -1101,7 +1119,7 @@ export abstract class Field implements IASTNodeLocationSvg, * * @returns Element to bind click handler to. */ - protected getClickTarget_(): Element { + protected getClickTarget_(): Element|null { return this.clickTarget_ || this.getSvgRoot(); } @@ -1145,7 +1163,10 @@ export abstract class Field implements IASTNodeLocationSvg, */ getParentInput(): Input { let parentInput = null; - const block = this.sourceBlock_; + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const inputs = block.inputList; for (let idx = 0; idx < block.inputList.length; idx++) { @@ -1158,9 +1179,7 @@ export abstract class Field implements IASTNodeLocationSvg, } } } - // AnyDuringMigration because: Type 'Input | null' is not assignable to - // type 'Input'. - return parentInput as AnyDuringMigration; + return parentInput!; } /** @@ -1199,12 +1218,13 @@ export abstract class Field implements IASTNodeLocationSvg, */ setCursorSvg(cursorSvg: SVGElement) { if (!cursorSvg) { - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGElement'. - this.cursorSvg_ = null as AnyDuringMigration; + this.cursorSvg_ = null; return; } + if (!this.fieldGroup_) { + throw new Error(`The field group is ${this.fieldGroup_}.`); + } this.fieldGroup_.appendChild(cursorSvg); this.cursorSvg_ = cursorSvg; } @@ -1217,19 +1237,24 @@ export abstract class Field implements IASTNodeLocationSvg, */ setMarkerSvg(markerSvg: SVGElement) { if (!markerSvg) { - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'SVGElement'. - this.markerSvg_ = null as AnyDuringMigration; + this.markerSvg_ = null; return; } + if (!this.fieldGroup_) { + throw new Error(`The field group is ${this.fieldGroup_}.`); + } this.fieldGroup_.appendChild(markerSvg); this.markerSvg_ = markerSvg; } /** Redraw any attached marker or cursor svgs if needed. */ protected updateMarkers_() { - const workspace = this.sourceBlock_.workspace as WorkspaceSvg; + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + const workspace = block.workspace as WorkspaceSvg; if (workspace.keyboardAccessibilityMode && this.cursorSvg_) { workspace.getCursor()!.draw(); } @@ -1246,3 +1271,23 @@ export abstract class Field implements IASTNodeLocationSvg, export interface FieldConfig { tooltip?: string; } + +/** + * For use by Field and descendants of Field. Constructors can change + * in descendants, though they should contain all of Field's prototype methods. + */ +export type FieldProto = Pick; + +/** + * Represents an error where the field is trying to access its block or + * information about its block before it has actually been attached to said + * block. + */ +export class UnattachedFieldError extends Error { + /** @internal */ + constructor() { + super( + 'The field has not yet been attached to its input. ' + + 'Call appendField to attach it.'); + } +} diff --git a/core/field_angle.ts b/core/field_angle.ts index 7c0ea8cfb..69a5df239 100644 --- a/core/field_angle.ts +++ b/core/field_angle.ts @@ -16,7 +16,7 @@ import {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as Css from './css.js'; import * as dropDownDiv from './dropdowndiv.js'; -import {Field} from './field.js'; +import {Field, UnattachedFieldError} from './field.js'; import * as fieldRegistry from './field_registry.js'; import {FieldTextInputConfig, FieldTextInput} from './field_textinput.js'; import * as dom from './utils/dom.js'; @@ -70,19 +70,36 @@ export class FieldAngle extends FieldTextInput { * otherwise SVG crops off half the border at the edges. */ static readonly RADIUS: number = FieldAngle.HALF - 1; - private clockwise_: boolean; - private offset_: number; - private wrap_: number; - private round_: number; + + /** + * Whether the angle should increase as the angle picker is moved clockwise + * (true) or counterclockwise (false). + */ + private clockwise_ = FieldAngle.CLOCKWISE; + + /** + * The offset of zero degrees (and all other angles). + */ + private offset_ = FieldAngle.OFFSET; + + /** + * The maximum angle to allow before wrapping. + */ + private wrap_ = FieldAngle.WRAP; + + /** + * The amount to round angles to when using a mouse or keyboard nav input. + */ + private round_ = FieldAngle.ROUND; /** The angle picker's SVG element. */ - private editor_: SVGElement|null = null; + private editor_: SVGSVGElement|null = null; /** The angle picker's gauge path depending on the value. */ - gauge_: SVGElement|null = null; + gauge_: SVGPathElement|null = null; /** The angle picker's line drawn representing the value's angle. */ - line_: SVGElement|null = null; + line_: SVGLineElement|null = null; /** The degree symbol for this field. */ // AnyDuringMigration because: Type 'null' is not assignable to type @@ -122,35 +139,6 @@ export class FieldAngle extends FieldTextInput { opt_config?: FieldAngleConfig) { super(Field.SKIP_SETUP); - /** - * Should the angle increase as the angle picker is moved clockwise (true) - * or counterclockwise (false) - * - * @see FieldAngle.CLOCKWISE - */ - this.clockwise_ = FieldAngle.CLOCKWISE; - - /** - * The offset of zero degrees (and all other angles). - * - * @see FieldAngle.OFFSET - */ - this.offset_ = FieldAngle.OFFSET; - - /** - * The maximum angle to allow before wrapping. - * - * @see FieldAngle.WRAP - */ - this.wrap_ = FieldAngle.WRAP; - - /** - * The amount to round angles to when using a mouse or keyboard nav input. - * - * @see FieldAngle.ROUND - */ - this.round_ = FieldAngle.ROUND; - if (opt_value === Field.SKIP_SETUP) { return; } @@ -202,7 +190,7 @@ export class FieldAngle extends FieldTextInput { // #2380) this.symbol_ = dom.createSvgElement(Svg.TSPAN, {}); this.symbol_.appendChild(document.createTextNode('°')); - this.textElement_.appendChild(this.symbol_); + this.getTextElement().appendChild(this.symbol_); } /** Updates the graph when the field rerenders. */ @@ -223,9 +211,7 @@ export class FieldAngle extends FieldTextInput { super.showEditor_(opt_e, noFocus); this.dropdownCreate_(); - // AnyDuringMigration because: Argument of type 'SVGElement | null' is not - // assignable to parameter of type 'Node'. - dropDownDiv.getContentDiv().appendChild(this.editor_ as AnyDuringMigration); + dropDownDiv.getContentDiv().appendChild(this.editor_!); if (this.sourceBlock_ instanceof BlockSvg) { dropDownDiv.setColour( @@ -426,26 +412,23 @@ export class FieldAngle extends FieldTextInput { */ protected override onHtmlInputKeyDown_(e: Event) { super.onHtmlInputKeyDown_(e); + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + const keyboardEvent = e as KeyboardEvent; let multiplier; - // AnyDuringMigration because: Property 'keyCode' does not exist on type - // 'Event'. - if ((e as AnyDuringMigration).keyCode === KeyCodes.LEFT) { + if (keyboardEvent.keyCode === KeyCodes.LEFT) { // decrement (increment in RTL) - multiplier = this.sourceBlock_.RTL ? 1 : -1; - // AnyDuringMigration because: Property 'keyCode' does not exist on type - // 'Event'. - } else if ((e as AnyDuringMigration).keyCode === KeyCodes.RIGHT) { + multiplier = block.RTL ? 1 : -1; + } else if (keyboardEvent.keyCode === KeyCodes.RIGHT) { // increment (decrement in RTL) - multiplier = this.sourceBlock_.RTL ? -1 : 1; - // AnyDuringMigration because: Property 'keyCode' does not exist on type - // 'Event'. - } else if ((e as AnyDuringMigration).keyCode === KeyCodes.DOWN) { + multiplier = block.RTL ? -1 : 1; + } else if (keyboardEvent.keyCode === KeyCodes.DOWN) { // decrement multiplier = -1; - // AnyDuringMigration because: Property 'keyCode' does not exist on type - // 'Event'. - } else if ((e as AnyDuringMigration).keyCode === KeyCodes.UP) { + } else if (keyboardEvent.keyCode === KeyCodes.UP) { // increment multiplier = 1; } diff --git a/core/field_checkbox.ts b/core/field_checkbox.ts index 9cabb3e58..f8ac67aae 100644 --- a/core/field_checkbox.ts +++ b/core/field_checkbox.ts @@ -15,6 +15,7 @@ goog.declareModuleId('Blockly.FieldCheckbox'); // Unused import preserved for side-effects. Remove if unneeded. import './events/events_block_change.js'; +import * as dom from './utils/dom.js'; import {FieldConfig, Field} from './field.js'; import * as fieldRegistry from './field_registry.js'; import type {Sentinel} from './utils/sentinel.js'; @@ -111,8 +112,9 @@ export class FieldCheckbox extends Field { override initView() { super.initView(); - this.textElement_.classList.add('blocklyCheckbox'); - this.textElement_.style.display = this.value_ ? 'block' : 'none'; + const textElement = this.getTextElement(); + dom.addClass(textElement, 'blocklyCheckbox'); + textElement.style.display = this.value_ ? 'block' : 'none'; } override render_() { diff --git a/core/field_colour.ts b/core/field_colour.ts index 4cf4e19d4..aa1a5b9f0 100644 --- a/core/field_colour.ts +++ b/core/field_colour.ts @@ -18,6 +18,7 @@ import './events/events_block_change.js'; import {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as Css from './css.js'; +import * as dom from './utils/dom.js'; import * as dropDownDiv from './dropdowndiv.js'; import {FieldConfig, Field} from './field.js'; import * as fieldRegistry from './field_registry.js'; @@ -190,7 +191,7 @@ export class FieldColour extends Field { this.getConstants()!.FIELD_COLOUR_DEFAULT_HEIGHT); if (!this.getConstants()!.FIELD_COLOUR_FULL_BLOCK) { this.createBorderRect_(); - this.borderRect_.style['fillOpacity'] = '1'; + this.getBorderRect().style['fillOpacity'] = '1'; } else if (this.sourceBlock_ instanceof BlockSvg) { this.clickTarget_ = this.sourceBlock_.getSvgRoot(); } @@ -438,7 +439,7 @@ export class FieldColour extends Field { (this.picker_ as AnyDuringMigration)!.blur(); const highlighted = this.getHighlighted_(); if (highlighted) { - highlighted.classList.remove('blocklyColourHighlighted'); + dom.removeClass(highlighted, 'blocklyColourHighlighted'); } } @@ -473,10 +474,10 @@ export class FieldColour extends Field { // Unhighlight the current item. const highlighted = this.getHighlighted_(); if (highlighted) { - highlighted.classList.remove('blocklyColourHighlighted'); + dom.removeClass(highlighted, 'blocklyColourHighlighted'); } // Highlight new item. - cell.classList.add('blocklyColourHighlighted'); + dom.addClass(cell, 'blocklyColourHighlighted'); // Set new highlighted index. this.highlightedIndex_ = index; diff --git a/core/field_dropdown.ts b/core/field_dropdown.ts index da36fa569..4615db5ef 100644 --- a/core/field_dropdown.ts +++ b/core/field_dropdown.ts @@ -16,7 +16,7 @@ goog.declareModuleId('Blockly.FieldDropdown'); import type {BlockSvg} from './block_svg.js'; import * as dropDownDiv from './dropdowndiv.js'; -import {FieldConfig, Field} from './field.js'; +import {FieldConfig, Field, UnattachedFieldError} from './field.js'; import * as fieldRegistry from './field_registry.js'; import {Menu} from './menu.js'; import {MenuItem} from './menuitem.js'; @@ -27,8 +27,6 @@ import * as parsing from './utils/parsing.js'; import type {Sentinel} from './utils/sentinel.js'; import * as utilsString from './utils/string.js'; import {Svg} from './utils/svg.js'; -import * as userAgent from './utils/useragent.js'; - /** * Class for an editable dropdown field. @@ -44,7 +42,8 @@ export class FieldDropdown extends Field { * height. */ static MAX_MENU_HEIGHT_VH = 0.45; - static ARROW_CHAR: AnyDuringMigration; + + static ARROW_CHAR = '▾'; /** A reference to the currently selected menu item. */ private selectedMenuItem_: MenuItem|null = null; @@ -71,14 +70,11 @@ export class FieldDropdown extends Field { /** Mouse cursor style when over the hotspot that initiates the editor. */ override CURSOR = 'default'; - // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. - protected menuGenerator_!: AnyDuringMigration[][]| - ((this: FieldDropdown) => AnyDuringMigration[][]); + + protected menuGenerator_?: MenuGenerator; /** A cache of the most recently generated options. */ - // AnyDuringMigration because: Type 'null' is not assignable to type - // 'string[][]'. - private generatedOptions_: string[][] = null as AnyDuringMigration; + private generatedOptions_: MenuOption[]|null = null; /** * The prefix field label, of common words set after options are trimmed. @@ -95,7 +91,7 @@ export class FieldDropdown extends Field { override suffixField: string|null = null; // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. private selectedOption_!: Array; - override clickTarget_: AnyDuringMigration; + override clickTarget_: SVGElement|null = null; /** * @param menuGenerator A non-empty array of options for a dropdown list, or a @@ -114,30 +110,31 @@ export class FieldDropdown extends Field { * @throws {TypeError} If `menuGenerator` options are incorrectly structured. */ constructor( - menuGenerator: AnyDuringMigration[][]|Function|Sentinel, - opt_validator?: Function, opt_config?: FieldConfig) { + menuGenerator: MenuGenerator, + opt_validator?: Function, + opt_config?: FieldConfig, + ); + constructor(menuGenerator: Sentinel); + constructor( + menuGenerator: MenuGenerator|Sentinel, + opt_validator?: Function, + opt_config?: FieldConfig, + ) { super(Field.SKIP_SETUP); // If we pass SKIP_SETUP, don't do *anything* with the menu generator. - if (menuGenerator === Field.SKIP_SETUP) { - return; - } + if (!isMenuGenerator(menuGenerator)) return; if (Array.isArray(menuGenerator)) { validateOptions(menuGenerator); - // Deep copy the option structure so it doesn't change. - menuGenerator = JSON.parse(JSON.stringify(menuGenerator)); + const trimmed = trimOptions(menuGenerator); + this.menuGenerator_ = trimmed.options; + this.prefixField = trimmed.prefix || null; + this.suffixField = trimmed.suffix || null; + } else { + this.menuGenerator_ = menuGenerator; } - /** - * An array of options for a dropdown list, - * or a function which generates these options. - */ - this.menuGenerator_ = menuGenerator as AnyDuringMigration[][] | - ((this: FieldDropdown) => AnyDuringMigration[][]); - - this.trimOptions_(); - /** * The currently selected option. The field is initialized with the * first option selected. @@ -205,7 +202,7 @@ export class FieldDropdown extends Field { } if (this.borderRect_) { - this.borderRect_.classList.add('blocklyDropdownRect'); + dom.addClass(this.borderRect_, 'blocklyDropdownRect'); } } @@ -217,24 +214,19 @@ export class FieldDropdown extends Field { protected shouldAddBorderRect_(): boolean { return !this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW || this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW && - !this.sourceBlock_.isShadow(); + !this.getSourceBlock()?.isShadow(); } /** Create a tspan based arrow. */ protected createTextArrow_() { this.arrow_ = dom.createSvgElement(Svg.TSPAN, {}, this.textElement_); this.arrow_!.appendChild(document.createTextNode( - this.sourceBlock_.RTL ? FieldDropdown.ARROW_CHAR + ' ' : - ' ' + FieldDropdown.ARROW_CHAR)); - if (this.sourceBlock_.RTL) { - // AnyDuringMigration because: Argument of type 'SVGTSpanElement | null' - // is not assignable to parameter of type 'Node'. - this.textElement_.insertBefore( - this.arrow_ as AnyDuringMigration, this.textContent_); + this.getSourceBlock()?.RTL ? FieldDropdown.ARROW_CHAR + ' ' : + ' ' + FieldDropdown.ARROW_CHAR)); + if (this.getSourceBlock()?.RTL) { + this.getTextElement().insertBefore(this.arrow_, this.textContent_); } else { - // AnyDuringMigration because: Argument of type 'SVGTSpanElement | null' - // is not assignable to parameter of type 'Node'. - this.textElement_.appendChild(this.arrow_ as AnyDuringMigration); + this.getTextElement().appendChild(this.arrow_); } } @@ -257,17 +249,14 @@ export class FieldDropdown extends Field { * @param opt_e Optional mouse event that triggered the field to open, or * undefined if triggered programmatically. */ - protected override showEditor_(opt_e?: Event) { + protected override showEditor_(opt_e?: MouseEvent) { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } this.dropdownCreate_(); - // AnyDuringMigration because: Property 'clientX' does not exist on type - // 'Event'. - if (opt_e && typeof (opt_e as AnyDuringMigration).clientX === 'number') { - // AnyDuringMigration because: Property 'clientY' does not exist on type - // 'Event'. AnyDuringMigration because: Property 'clientX' does not exist - // on type 'Event'. - this.menu_!.openingCoords = new Coordinate( - (opt_e as AnyDuringMigration).clientX, - (opt_e as AnyDuringMigration).clientY); + if (opt_e && typeof opt_e.clientX === 'number') { + this.menu_!.openingCoords = new Coordinate(opt_e.clientX, opt_e.clientY); } else { this.menu_!.openingCoords = null; } @@ -276,14 +265,13 @@ export class FieldDropdown extends Field { dropDownDiv.clearContent(); // Element gets created in render. const menuElement = this.menu_!.render(dropDownDiv.getContentDiv()); - menuElement.classList.add('blocklyDropdownMenu'); + dom.addClass(menuElement, 'blocklyDropdownMenu'); if (this.getConstants()!.FIELD_DROPDOWN_COLOURED_DIV) { - const primaryColour = this.sourceBlock_.isShadow() ? - this.sourceBlock_.getParent()!.getColour() : - this.sourceBlock_.getColour(); - const borderColour = this.sourceBlock_.isShadow() ? - (this.sourceBlock_.getParent() as BlockSvg).style.colourTertiary : + const primaryColour = + block.isShadow() ? block.getParent()!.getColour() : block.getColour(); + const borderColour = block.isShadow() ? + (block.getParent() as BlockSvg).style.colourTertiary : (this.sourceBlock_ as BlockSvg).style.colourTertiary; dropDownDiv.setColour(primaryColour, borderColour); } @@ -304,6 +292,10 @@ export class FieldDropdown extends Field { /** Create the dropdown editor. */ private dropdownCreate_() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const menu = new Menu(); menu.setRole(aria.Role.LISTBOX); this.menu_ = menu; @@ -311,18 +303,20 @@ export class FieldDropdown extends Field { const options = this.getOptions(false); this.selectedMenuItem_ = null; for (let i = 0; i < options.length; i++) { - let content = options[i][0]; // Human-readable text or image. - const value = options[i][1]; // Language-neutral value. - if (typeof content === 'object') { - // An image, not text. - const image = new Image(content['width'], content['height']); - image.src = content['src']; - image.alt = content['alt'] || ''; - content = image; - } + const [label, value] = options[i]; + const content = (() => { + if (typeof label === 'object') { + // Convert ImageProperties to an HTMLImageElement. + const image = new Image(label['width'], label['height']); + image.src = label['src']; + image.alt = label['alt'] || ''; + return image; + } + return label; + })(); const menuItem = new MenuItem(content, value); menuItem.setRole(aria.Role.OPTION); - menuItem.setRightToLeft(this.sourceBlock_.RTL); + menuItem.setRightToLeft(block.RTL); menuItem.setCheckable(true); menu.addChild(menuItem); menuItem.setChecked(value === this.value_); @@ -365,57 +359,6 @@ export class FieldDropdown extends Field { this.setValue(menuItem.getValue()); } - /** - * Factor out common words in statically defined options. - * Create prefix and/or suffix labels. - */ - private trimOptions_() { - const options = this.menuGenerator_; - if (!Array.isArray(options)) { - return; - } - let hasImages = false; - - // Localize label text and image alt text. - for (let i = 0; i < options.length; i++) { - const label = options[i][0]; - if (typeof label === 'string') { - options[i][0] = parsing.replaceMessageReferences(label); - } else { - if (label.alt !== null) { - options[i][0].alt = parsing.replaceMessageReferences(label.alt); - } - hasImages = true; - } - } - if (hasImages || options.length < 2) { - return; // Do nothing if too few items or at least one label is an image. - } - const strings = []; - for (let i = 0; i < options.length; i++) { - strings.push(options[i][0]); - } - const shortest = utilsString.shortestStringLength(strings); - const prefixLength = utilsString.commonWordPrefix(strings, shortest); - const suffixLength = utilsString.commonWordSuffix(strings, shortest); - if (!prefixLength && !suffixLength) { - return; - } - if (shortest <= prefixLength + suffixLength) { - // One or more strings will entirely vanish if we proceed. Abort. - return; - } - if (prefixLength) { - this.prefixField = strings[0].substring(0, prefixLength - 1); - } - if (suffixLength) { - this.suffixField = strings[0].substr(1 - suffixLength); - } - - this.menuGenerator_ = - FieldDropdown.applyTrim_(options, prefixLength, suffixLength); - } - /** * @returns True if the option list is generated by a function. * Otherwise false. @@ -433,18 +376,18 @@ export class FieldDropdown extends Field { * (human-readable text or image, language-neutral name). * @throws {TypeError} If generated options are incorrectly structured. */ - getOptions(opt_useCache?: boolean): AnyDuringMigration[][] { - if (this.isOptionListDynamic()) { - if (!this.generatedOptions_ || !opt_useCache) { - // AnyDuringMigration because: Property 'call' does not exist on type - // 'any[][] | ((this: FieldDropdown) => any[][])'. - this.generatedOptions_ = - (this.menuGenerator_ as AnyDuringMigration).call(this); - validateOptions(this.generatedOptions_); - } - return this.generatedOptions_; + getOptions(opt_useCache?: boolean): MenuOption[] { + if (!this.menuGenerator_) { + // A subclass improperly skipped setup without defining the menu + // generator. + throw TypeError('A menu generator was never defined.'); } - return this.menuGenerator_ as string[][]; + if (Array.isArray(this.menuGenerator_)) return this.menuGenerator_; + if (opt_useCache && this.generatedOptions_) return this.generatedOptions_; + + this.generatedOptions_ = this.menuGenerator_(); + validateOptions(this.generatedOptions_); + return this.generatedOptions_; } /** @@ -453,17 +396,11 @@ export class FieldDropdown extends Field { * @param opt_newValue The input value. * @returns A valid language-neutral option, or null if invalid. */ - protected override doClassValidation_(opt_newValue?: AnyDuringMigration): - string|null { - let isValueValid = false; + protected override doClassValidation_(opt_newValue?: MenuOption[1]): string + |null { const options = this.getOptions(true); - for (let i = 0, option; option = options[i]; i++) { - // Options are tuples of human-readable text and language-neutral values. - if (option[1] === opt_newValue) { - isValueValid = true; - break; - } - } + const isValueValid = options.some((option) => option[1] === opt_newValue); + if (!isValueValid) { if (this.sourceBlock_) { console.warn( @@ -482,7 +419,7 @@ export class FieldDropdown extends Field { * @param newValue The value to be saved. The default validator guarantees * that this is one of the valid dropdown options. */ - protected override doValueUpdate_(newValue: AnyDuringMigration) { + protected override doValueUpdate_(newValue: MenuOption[1]) { super.doValueUpdate_(newValue); const options = this.getOptions(true); for (let i = 0, option; option = options[i]; i++) { @@ -520,7 +457,7 @@ export class FieldDropdown extends Field { /** Draws the border with the correct width. */ protected override render_() { // Hide both elements. - this.textContent_.nodeValue = ''; + this.getTextContent().nodeValue = ''; this.imageElement_!.style.display = 'none'; // Show correct element. @@ -540,17 +477,15 @@ export class FieldDropdown extends Field { * @param imageJson Selected option that must be an image. */ private renderSelectedImage_(imageJson: ImageProperties) { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } this.imageElement_!.style.display = ''; this.imageElement_!.setAttributeNS( dom.XLINK_NS, 'xlink:href', imageJson.src); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. - this.imageElement_!.setAttribute( - 'height', imageJson.height as AnyDuringMigration); - // AnyDuringMigration because: Argument of type 'number' is not assignable - // to parameter of type 'string'. - this.imageElement_!.setAttribute( - 'width', imageJson.width as AnyDuringMigration); + this.imageElement_!.setAttribute('height', `${imageJson.height}`); + this.imageElement_!.setAttribute('width', `${imageJson.width}`); const imageHeight = Number(imageJson.height); const imageWidth = Number(imageJson.width); @@ -578,12 +513,12 @@ export class FieldDropdown extends Field { this.size_.height = height; let arrowX = 0; - if (this.sourceBlock_.RTL) { + if (block.RTL) { const imageX = xPadding + arrowWidth; this.imageElement_!.setAttribute('x', imageX.toString()); } else { arrowX = imageWidth + arrowWidth; - this.textElement_.setAttribute('text-anchor', 'end'); + this.getTextElement().setAttribute('text-anchor', 'end'); this.imageElement_!.setAttribute('x', xPadding.toString()); } this.imageElement_!.setAttribute( @@ -595,9 +530,10 @@ export class FieldDropdown extends Field { /** Renders the selected option, which must be text. */ private renderSelectedText_() { // Retrieves the selected option to display through getText_. - this.textContent_.nodeValue = this.getDisplayText_(); - this.textElement_.classList.add('blocklyDropdownText'); - this.textElement_.setAttribute('text-anchor', 'start'); + this.getTextContent().nodeValue = this.getDisplayText_(); + const textElement = this.getTextElement(); + dom.addClass(textElement, 'blocklyDropdownText'); + textElement.setAttribute('text-anchor', 'start'); // Height and width include the border rect. const hasBorder = !!this.borderRect_; @@ -605,7 +541,7 @@ export class FieldDropdown extends Field { hasBorder ? this.getConstants()!.FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0, this.getConstants()!.FIELD_TEXT_HEIGHT); const textWidth = dom.getFastTextWidth( - this.textElement_, this.getConstants()!.FIELD_TEXT_FONTSIZE, + this.getTextElement(), this.getConstants()!.FIELD_TEXT_FONTSIZE, this.getConstants()!.FIELD_TEXT_FONTWEIGHT, this.getConstants()!.FIELD_TEXT_FONTFAMILY); const xPadding = @@ -633,12 +569,16 @@ export class FieldDropdown extends Field { if (!this.svgArrow_) { return 0; } + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const hasBorder = !!this.borderRect_; const xPadding = hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0; const textPadding = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_PADDING; const svgArrowSize = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE; - const arrowX = this.sourceBlock_.RTL ? xPadding : x + textPadding; + const arrowX = block.RTL ? xPadding : x + textPadding; this.svgArrow_.setAttribute( 'transform', 'translate(' + arrowX + ',' + y + ')'); return svgArrowSize + textPadding; @@ -681,30 +621,6 @@ export class FieldDropdown extends Field { // override the static fromJson method. return new this(options.options, undefined, options); } - - /** - * Use the calculated prefix and suffix lengths to trim all of the options in - * the given array. - * - * @param options Array of option tuples: - * (human-readable text or image, language-neutral name). - * @param prefixLength The length of the common prefix. - * @param suffixLength The length of the common suffix - * @returns A new array with all of the option text trimmed. - */ - static applyTrim_( - options: AnyDuringMigration[][], prefixLength: number, - suffixLength: number): AnyDuringMigration[][] { - const newOptions = []; - // Remove the prefix and suffix from the options. - for (let i = 0; i < options.length; i++) { - let text = options[i][0]; - const value = options[i][1]; - text = text.substring(prefixLength, text.length - suffixLength); - newOptions[i] = [text, value]; - } - return newOptions; - } } /** @@ -724,6 +640,18 @@ export interface ImageProperties { */ export type MenuOption = [string | ImageProperties, string]; +/** + * A function that generates an array of menu options for FieldDropdown + * or its descendants. + */ +export type MenuGeneratorFunction = (this: FieldDropdown) => MenuOption[]; + +/** + * Either an array of menu options or a function that generates an array of + * menu options for FieldDropdown or its descendants. + */ +export type MenuGenerator = MenuOption[]|MenuGeneratorFunction; + /** * fromJson config for the dropdown field. */ @@ -740,8 +668,81 @@ const IMAGE_Y_OFFSET = 5; /** The total vertical padding above and below an image. */ const IMAGE_Y_PADDING: number = IMAGE_Y_OFFSET * 2; -/** Android can't (in 2014) display "▾", so use "▼" instead. */ -FieldDropdown.ARROW_CHAR = userAgent.ANDROID ? '▼' : '▾'; +/** + * NOTE: Because Sentinel is an empty class, proving a value is Sentinel does + * not resolve in TS that it isn't a MenuGenerator. + */ +function isMenuGenerator(menuGenerator: MenuGenerator| + Sentinel): menuGenerator is MenuGenerator { + return menuGenerator !== Field.SKIP_SETUP; +} + +/** + * Factor out common words in statically defined options. + * Create prefix and/or suffix labels. + */ +function trimOptions(options: MenuOption[]): + {options: MenuOption[]; prefix?: string; suffix?: string;} { + let hasImages = false; + const trimmedOptions = options.map(([label, value]): MenuOption => { + if (typeof label === 'string') { + return [parsing.replaceMessageReferences(label), value]; + } + + hasImages = true; + // Copy the image properties so they're not influenced by the original. + // NOTE: No need to deep copy since image properties are only 1 level deep. + const imageLabel = label.alt !== null ? + {...label, alt: parsing.replaceMessageReferences(label.alt)} : + {...label}; + return [imageLabel, value]; + }); + + if (hasImages || options.length < 2) return {options: trimmedOptions}; + + const stringOptions = trimmedOptions as [string, string][]; + const stringLabels = stringOptions.map(([label]) => label); + + const shortest = utilsString.shortestStringLength(stringLabels); + const prefixLength = utilsString.commonWordPrefix(stringLabels, shortest); + const suffixLength = utilsString.commonWordSuffix(stringLabels, shortest); + + if ((!prefixLength && !suffixLength) || + (shortest <= prefixLength + suffixLength)) { + // One or more strings will entirely vanish if we proceed. Abort. + return {options: stringOptions}; + } + + const prefix = + prefixLength ? stringLabels[0].substring(0, prefixLength - 1) : undefined; + const suffix = + suffixLength ? stringLabels[0].substr(1 - suffixLength) : undefined; + return { + options: applyTrim(stringOptions, prefixLength, suffixLength), + prefix, + suffix, + }; +} + +/** + * Use the calculated prefix and suffix lengths to trim all of the options in + * the given array. + * + * @param options Array of option tuples: + * (human-readable text or image, language-neutral name). + * @param prefixLength The length of the common prefix. + * @param suffixLength The length of the common suffix + * @returns A new array with all of the option text trimmed. + */ +function applyTrim( + options: [string, string][], prefixLength: number, + suffixLength: number): MenuOption[] { + return options.map( + ([text, value]) => + [text.substring(prefixLength, text.length - suffixLength), + value, + ]); +} /** * Validates the data structure to be processed as an options list. @@ -749,7 +750,7 @@ FieldDropdown.ARROW_CHAR = userAgent.ANDROID ? '▼' : '▾'; * @param options The proposed dropdown options. * @throws {TypeError} If proposed options are incorrectly structured. */ -function validateOptions(options: AnyDuringMigration) { +function validateOptions(options: MenuOption[]) { if (!Array.isArray(options)) { throw TypeError('FieldDropdown options must be an array.'); } diff --git a/core/field_label.ts b/core/field_label.ts index ea7baec15..c35e29157 100644 --- a/core/field_label.ts +++ b/core/field_label.ts @@ -13,6 +13,7 @@ import * as goog from '../closure/goog/goog.js'; goog.declareModuleId('Blockly.FieldLabel'); +import * as dom from './utils/dom.js'; import {FieldConfig, Field} from './field.js'; import * as fieldRegistry from './field_registry.js'; import * as parsing from './utils/parsing.js'; @@ -75,7 +76,7 @@ export class FieldLabel extends Field { override initView() { this.createTextElement_(); if (this.class_) { - this.textElement_.classList.add(this.class_); + dom.addClass(this.getTextElement(), this.class_); } } @@ -101,10 +102,10 @@ export class FieldLabel extends Field { setClass(cssClass: string|null) { if (this.textElement_) { if (this.class_) { - this.textElement_.classList.remove(this.class_); + dom.removeClass(this.textElement_, this.class_); } if (cssClass) { - this.textElement_.classList.add(cssClass); + dom.addClass(this.textElement_, cssClass); } } this.class_ = cssClass; diff --git a/core/field_multilineinput.ts b/core/field_multilineinput.ts index 494c8b542..403f725cc 100644 --- a/core/field_multilineinput.ts +++ b/core/field_multilineinput.ts @@ -13,7 +13,7 @@ import * as goog from '../closure/goog/goog.js'; goog.declareModuleId('Blockly.FieldMultilineInput'); import * as Css from './css.js'; -import {Field} from './field.js'; +import {Field, UnattachedFieldError} from './field.js'; import * as fieldRegistry from './field_registry.js'; import {FieldTextInputConfig, FieldTextInput} from './field_textinput.js'; import * as aria from './utils/aria.js'; @@ -163,6 +163,10 @@ export class FieldMultilineInput extends FieldTextInput { * @returns Currently displayed text. */ protected override getDisplayText_(): string { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } let textLines = this.getText(); if (!textLines) { // Prevent the field from disappearing if empty. @@ -189,8 +193,8 @@ export class FieldMultilineInput extends FieldTextInput { textLines += '\n'; } } - if (this.sourceBlock_.RTL) { - // The SVG is LTR, force value to be RTL by adding an RLM. + if (block.RTL) { + // The SVG is LTR, force value to be RTL. textLines += '\u200F'; } return textLines; @@ -212,6 +216,10 @@ export class FieldMultilineInput extends FieldTextInput { /** Updates the text of the textElement. */ protected override render_() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } // Remove all text group children. let currentChild; while (currentChild = this.textGroup_.firstChild) { @@ -239,16 +247,16 @@ export class FieldMultilineInput extends FieldTextInput { if (this.isBeingEdited_) { const htmlInput = this.htmlInput_ as HTMLElement; if (this.isOverflowedY_) { - htmlInput.classList.add('blocklyHtmlTextAreaInputOverflowedY'); + dom.addClass(htmlInput, 'blocklyHtmlTextAreaInputOverflowedY'); } else { - htmlInput.classList.remove('blocklyHtmlTextAreaInputOverflowedY'); + dom.removeClass(htmlInput, 'blocklyHtmlTextAreaInputOverflowedY'); } } this.updateSize_(); if (this.isBeingEdited_) { - if (this.sourceBlock_.RTL) { + if (block.RTL) { // in RTL, we need to let the browser reflow before resizing // in order to get the correct bounding box of the borderRect // avoiding issue #2777. @@ -258,10 +266,10 @@ export class FieldMultilineInput extends FieldTextInput { } const htmlInput = this.htmlInput_ as HTMLElement; if (!this.isTextValid_) { - htmlInput.classList.add('blocklyInvalidInput'); + dom.addClass(htmlInput, 'blocklyInvalidInput'); aria.setState(htmlInput, aria.State.INVALID, true); } else { - htmlInput.classList.remove('blocklyInvalidInput'); + dom.removeClass(htmlInput, 'blocklyInvalidInput'); aria.setState(htmlInput, aria.State.INVALID, false); } } @@ -270,11 +278,15 @@ export class FieldMultilineInput extends FieldTextInput { /** Updates the size of the field based on the text. */ protected override updateSize_() { const nodes = this.textGroup_.childNodes; + const fontSize = this.getConstants()!.FIELD_TEXT_FONTSIZE; + const fontWeight = this.getConstants()!.FIELD_TEXT_FONTWEIGHT; + const fontFamily = this.getConstants()!.FIELD_TEXT_FONTFAMILY; let totalWidth = 0; let totalHeight = 0; for (let i = 0; i < nodes.length; i++) { const tspan = nodes[i] as SVGTextElement; - const textWidth = dom.getTextWidth(tspan); + const textWidth = + dom.getFastTextWidth(tspan, fontSize, fontWeight, fontFamily); if (textWidth > totalWidth) { totalWidth = textWidth; } @@ -290,9 +302,6 @@ export class FieldMultilineInput extends FieldTextInput { const actualEditorLines = this.value_.split('\n'); const dummyTextElement = dom.createSvgElement( Svg.TEXT, {'class': 'blocklyText blocklyMultilineText'}); - const fontSize = this.getConstants()!.FIELD_TEXT_FONTSIZE; - const fontWeight = this.getConstants()!.FIELD_TEXT_FONTWEIGHT; - const fontFamily = this.getConstants()!.FIELD_TEXT_FONTFAMILY; for (let i = 0; i < actualEditorLines.length; i++) { if (actualEditorLines[i].length > this.maxDisplayLength) { diff --git a/core/field_registry.ts b/core/field_registry.ts index 3645c1fe7..7880bf643 100644 --- a/core/field_registry.ts +++ b/core/field_registry.ts @@ -75,7 +75,7 @@ function fromJsonInternal(options: AnyDuringMigration): Field|null { ' the file is not loaded, the field does not register itself (Issue' + ' #1584), or the registration is not being reached.'); return null; - } else if (typeof (fieldObject as any)['fromJson'] !== 'function') { + } else if (typeof (fieldObject as any).fromJson !== 'function') { throw new TypeError('returned Field was not a IRegistrableField'); } else { return (fieldObject as unknown as IRegistrableField).fromJson(options); diff --git a/core/field_textinput.ts b/core/field_textinput.ts index 8b02f8b9c..ca4e6053c 100644 --- a/core/field_textinput.ts +++ b/core/field_textinput.ts @@ -18,9 +18,10 @@ import './events/events_block_change.js'; import type {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as dialog from './dialog.js'; +import * as dom from './utils/dom.js'; import * as dropDownDiv from './dropdowndiv.js'; import * as eventUtils from './events/utils.js'; -import {FieldConfig, Field} from './field.js'; +import {FieldConfig, Field, UnattachedFieldError} from './field.js'; import * as fieldRegistry from './field_registry.js'; import {Msg} from './msg.js'; import * as aria from './utils/aria.js'; @@ -126,13 +127,17 @@ export class FieldTextInput extends Field { /** @internal */ override initView() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } if (this.getConstants()!.FULL_BLOCK_FIELDS) { // Step one: figure out if this is the only field on this block. // Rendering is quite different in that case. let nFields = 0; let nConnections = 0; // Count the number of fields, excluding text fields - for (let i = 0, input; input = this.sourceBlock_.inputList[i]; i++) { + for (let i = 0, input; input = block.inputList[i]; i++) { for (let j = 0; input.fieldRow[j]; j++) { nFields++; } @@ -143,7 +148,7 @@ export class FieldTextInput extends Field { // The special case is when this is the only non-label field on the block // and it has an output but no inputs. this.fullBlockClickTarget_ = - nFields <= 1 && this.sourceBlock_.outputConnection && !nConnections; + nFields <= 1 && block.outputConnection && !nConnections; } else { this.fullBlockClickTarget_ = false; } @@ -216,15 +221,15 @@ export class FieldTextInput extends Field { * @internal */ override applyColour() { - if (this.sourceBlock_ && this.getConstants()!.FULL_BLOCK_FIELDS) { - if (this.borderRect_) { - this.borderRect_.setAttribute( - 'stroke', (this.sourceBlock_ as BlockSvg).style.colourTertiary); - } else { - (this.sourceBlock_ as BlockSvg) - .pathObject.svgPath.setAttribute( - 'fill', this.getConstants()!.FIELD_BORDER_RECT_COLOUR); - } + if (!this.sourceBlock_ || !this.getConstants()!.FULL_BLOCK_FIELDS) return; + + const source = this.sourceBlock_ as BlockSvg; + + if (this.borderRect_) { + this.borderRect_.setAttribute('stroke', source.style.colourTertiary); + } else { + source.pathObject.svgPath.setAttribute( + 'fill', this.getConstants()!.FIELD_BORDER_RECT_COLOUR); } } @@ -240,10 +245,10 @@ export class FieldTextInput extends Field { this.resizeEditor_(); const htmlInput = this.htmlInput_ as HTMLElement; if (!this.isTextValid_) { - htmlInput.classList.add('blocklyInvalidInput'); + dom.addClass(htmlInput, 'blocklyInvalidInput'); aria.setState(htmlInput, aria.State.INVALID, true); } else { - htmlInput.classList.remove('blocklyInvalidInput'); + dom.removeClass(htmlInput, 'blocklyInvalidInput'); aria.setState(htmlInput, aria.State.INVALID, false); } } @@ -306,7 +311,11 @@ export class FieldTextInput extends Field { * @param quietInput True if editor should be created without focus. */ private showInlineEditor_(quietInput: boolean) { - WidgetDiv.show(this, this.sourceBlock_.RTL, this.widgetDispose_.bind(this)); + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + WidgetDiv.show(this, block.RTL, this.widgetDispose_.bind(this)); this.htmlInput_ = this.widgetCreate_() as HTMLInputElement; this.isBeingEdited_ = true; @@ -324,10 +333,16 @@ export class FieldTextInput extends Field { * @returns The newly created text input editor. */ protected widgetCreate_(): HTMLElement { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } eventUtils.setGroup(true); const div = WidgetDiv.getDiv(); - this.getClickTarget_().classList.add('editing'); + const clickTarget = this.getClickTarget_(); + if (!clickTarget) throw new Error('A click target has not been set.'); + dom.addClass(clickTarget, 'editing'); const htmlInput = (document.createElement('input')); htmlInput.className = 'blocklyHtmlInput'; @@ -347,8 +362,8 @@ export class FieldTextInput extends Field { // Override border radius. borderRadius = (bBox.bottom - bBox.top) / 2 + 'px'; // Pull stroke colour from the existing shadow block - const strokeColour = this.sourceBlock_.getParent() ? - (this.sourceBlock_.getParent() as BlockSvg).style.colourTertiary : + const strokeColour = block.getParent() ? + (block.getParent() as BlockSvg).style.colourTertiary : (this.sourceBlock_ as BlockSvg).style.colourTertiary; htmlInput.style.border = 1 * scale + 'px solid ' + strokeColour; div!.style.borderRadius = borderRadius; @@ -396,7 +411,9 @@ export class FieldTextInput extends Field { style.boxShadow = ''; this.htmlInput_ = null; - this.getClickTarget_().classList.remove('editing'); + const clickTarget = this.getClickTarget_(); + if (!clickTarget) throw new Error('A click target has not been set.'); + dom.removeClass(clickTarget, 'editing'); } /** @@ -504,6 +521,10 @@ export class FieldTextInput extends Field { /** Resize the editor to fit the text. */ protected resizeEditor_() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const div = WidgetDiv.getDiv(); const bBox = this.getScaledBBox(); div!.style.width = bBox.right - bBox.left + 'px'; @@ -511,7 +532,7 @@ export class FieldTextInput extends Field { // In RTL mode block fields and LTR input fields the left edge moves, // whereas the right edge is fixed. Reposition the editor. - const x = this.sourceBlock_.RTL ? bBox.right - div!.offsetWidth : bBox.left; + const x = block.RTL ? bBox.right - div!.offsetWidth : bBox.left; const xy = new Coordinate(x, bBox.top); div!.style.left = xy.x + 'px'; diff --git a/core/field_variable.ts b/core/field_variable.ts index 12382219f..040a2f0ff 100644 --- a/core/field_variable.ts +++ b/core/field_variable.ts @@ -16,8 +16,8 @@ goog.declareModuleId('Blockly.FieldVariable'); import './events/events_block_change.js'; import type {Block} from './block.js'; -import {Field, FieldConfig} from './field.js'; -import {FieldDropdown} from './field_dropdown.js'; +import {Field, FieldConfig, UnattachedFieldError} from './field.js'; +import {FieldDropdown, MenuGenerator, MenuOption} from './field_dropdown.js'; import * as fieldRegistry from './field_registry.js'; import * as internalConstants from './internal_constants.js'; import type {Menu} from './menu.js'; @@ -37,8 +37,7 @@ import * as Xml from './xml.js'; * @alias Blockly.FieldVariable */ export class FieldVariable extends FieldDropdown { - protected override menuGenerator_: AnyDuringMigration[][]| - ((this: FieldDropdown) => AnyDuringMigration[][]); + protected override menuGenerator_: MenuGenerator|undefined; defaultVariableName: string; /** The type of the default variable for this field. */ @@ -89,9 +88,7 @@ export class FieldVariable extends FieldDropdown { * An array of options for a dropdown list, * or a function which generates these options. */ - // AnyDuringMigration because: Type '(this: FieldVariable) => any[][]' is - // not assignable to type 'any[][] | ((this: FieldDropdown) => any[][])'. - this.menuGenerator_ = FieldVariable.dropdownCreate as AnyDuringMigration; + this.menuGenerator_ = FieldVariable.dropdownCreate as MenuGenerator; /** * The initial variable name passed to this field's constructor, or an @@ -135,20 +132,27 @@ export class FieldVariable extends FieldDropdown { * @internal */ override initModel() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } if (this.variable_) { return; // Initialization already happened. } const variable = Variables.getOrCreateVariablePackage( - this.sourceBlock_.workspace, null, this.defaultVariableName, - this.defaultType_); + block.workspace, null, this.defaultVariableName, this.defaultType_); // Don't call setValue because we don't want to cause a rerender. this.doValueUpdate_(variable.getId()); } override shouldAddBorderRect_() { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } return super.shouldAddBorderRect_() && (!this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW || - this.sourceBlock_.type !== 'variables_get'); + block.type !== 'variables_get'); } /** @@ -158,6 +162,10 @@ export class FieldVariable extends FieldDropdown { * field's state. */ override fromXml(fieldElement: Element) { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const id = fieldElement.getAttribute('id'); const variableName = fieldElement.textContent; // 'variabletype' should be lowercase, but until July 2019 it was sometimes @@ -168,8 +176,7 @@ export class FieldVariable extends FieldDropdown { // AnyDuringMigration because: Argument of type 'string | null' is not // assignable to parameter of type 'string | undefined'. const variable = Variables.getOrCreateVariablePackage( - this.sourceBlock_.workspace, id, variableName as AnyDuringMigration, - variableType); + block.workspace, id, variableName as AnyDuringMigration, variableType); // This should never happen :) if (variableType !== null && variableType !== variable.type) { @@ -233,12 +240,16 @@ export class FieldVariable extends FieldDropdown { * @internal */ override loadState(state: AnyDuringMigration) { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } if (this.loadLegacyState(FieldVariable, state)) { return; } // This is necessary so that blocks in the flyout can have custom var names. const variable = Variables.getOrCreateVariablePackage( - this.sourceBlock_.workspace, state['id'] || null, state['name'], + block.workspace, state['id'] || null, state['name'], state['type'] || ''); this.setValue(variable.getId()); } @@ -315,8 +326,12 @@ export class FieldVariable extends FieldDropdown { if (opt_newValue === null) { return null; } + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } const newId = opt_newValue as string; - const variable = Variables.getVariable(this.sourceBlock_.workspace, newId); + const variable = Variables.getVariable(block.workspace, newId); if (!variable) { console.warn( 'Variable id doesn\'t point to a real variable! ' + @@ -342,8 +357,11 @@ export class FieldVariable extends FieldDropdown { * @param newId The value to be saved. */ protected override doValueUpdate_(newId: AnyDuringMigration) { - this.variable_ = - Variables.getVariable(this.sourceBlock_.workspace, newId as string); + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + this.variable_ = Variables.getVariable(block.workspace, newId as string); super.doValueUpdate_(newId); } @@ -377,7 +395,7 @@ export class FieldVariable extends FieldDropdown { let variableTypes = this.variableTypes; if (variableTypes === null) { // If variableTypes is null, return all variable types. - if (this.sourceBlock_ && !this.sourceBlock_.disposed) { + if (this.sourceBlock_ && !this.sourceBlock_.isDeadOrDying()) { return this.sourceBlock_.workspace.getVariableTypes(); } } @@ -456,7 +474,7 @@ export class FieldVariable extends FieldDropdown { protected override onItemSelected_(menu: Menu, menuItem: MenuItem) { const id = menuItem.getValue(); // Handle special cases. - if (this.sourceBlock_ && !this.sourceBlock_.disposed) { + if (this.sourceBlock_ && !this.sourceBlock_.isDeadOrDying()) { if (id === internalConstants.RENAME_VARIABLE_ID) { // Rename variable. Variables.renameVariable( @@ -507,15 +525,15 @@ export class FieldVariable extends FieldDropdown { * * @returns Array of variable names/id tuples. */ - static dropdownCreate(this: FieldVariable): AnyDuringMigration[][] { + static dropdownCreate(this: FieldVariable): MenuOption[] { if (!this.variable_) { throw Error( 'Tried to call dropdownCreate on a variable field with no' + ' variable selected.'); } const name = this.getText(); - let variableModelList: AnyDuringMigration[] = []; - if (this.sourceBlock_ && !this.sourceBlock_.disposed) { + let variableModelList: VariableModel[] = []; + if (this.sourceBlock_ && !this.sourceBlock_.isDeadOrDying()) { const variableTypes = this.getVariableTypes_(); // Get a copy of the list, so that adding rename and new variable options // doesn't modify the workspace's list. @@ -528,7 +546,7 @@ export class FieldVariable extends FieldDropdown { } variableModelList.sort(VariableModel.compareByName); - const options = []; + const options: [string, string][] = []; for (let i = 0; i < variableModelList.length; i++) { // Set the UUID as the internal representation of the variable. options[i] = [variableModelList[i].name, variableModelList[i].getId()]; diff --git a/core/generator.ts b/core/generator.ts index 443af0ff8..e78bd4b41 100644 --- a/core/generator.ts +++ b/core/generator.ts @@ -11,7 +11,7 @@ * @class */ import * as goog from '../closure/goog/goog.js'; -goog.declareModuleId('Blockly.Generator'); +goog.declareModuleId('Blockly.CodeGenerator'); import type {Block} from './block.js'; import * as common from './common.js'; @@ -24,14 +24,14 @@ import type {Workspace} from './workspace.js'; * Class for a code generator that translates the blocks into a language. * * @unrestricted - * @alias Blockly.Generator + * @alias Blockly.CodeGenerator */ -export class Generator { +export class CodeGenerator { name_: string; /** * This is used as a placeholder in functions defined using - * Generator.provideFunction_. It must not be legal code that could + * CodeGenerator.provideFunction_. It must not be legal code that could * legitimately appear in a function definition (or comment), and it must * not confuse the regular expression parser. */ @@ -205,7 +205,7 @@ export class Generator { |[string, number] { if (this.isInitialized === false) { console.warn( - 'Generator init was not called before blockToCode was called.'); + 'CodeGenerator init was not called before blockToCode was called.'); } if (!block) { return ''; @@ -414,7 +414,7 @@ export class Generator { * "listRandom", not "random"). There is no danger of colliding with reserved * words, or user-defined variable or procedure names. * - * The code gets output when Generator.finish() is called. + * The code gets output when CodeGenerator.finish() is called. * * @param desiredName The desired name of the function (e.g. mathIsPrime). * @param code A list of statements or one multi-line code string. Use ' ' @@ -514,25 +514,24 @@ export class Generator { } } -Object.defineProperties(Generator.prototype, { +Object.defineProperties(CodeGenerator.prototype, { /** * A database of variable names. * - * @name Blockly.Generator.prototype.variableDB_ + * @name Blockly.CodeGenerator.prototype.variableDB_ * @deprecated 'variableDB_' was renamed to 'nameDB_' (May 2021). * @suppress {checkTypes} */ variableDB_: ({ /** @returns Name database. */ - get(this: Generator): Names | + get(this: CodeGenerator): Names | undefined { - deprecation.warn( - 'variableDB_', 'May 2021', 'September 2022', 'nameDB_'); + deprecation.warn('variableDB_', 'version 9', 'version 10', 'nameDB_'); return this.nameDB_; }, /** @param nameDb New name database. */ - set(this: Generator, nameDb: Names|undefined) { - deprecation.warn('variableDB_', 'May 2021', 'September2022', 'nameDB_'); + set(this: CodeGenerator, nameDb: Names|undefined) { + deprecation.warn('variableDB_', 'version 9', 'version 10', 'nameDB_'); this.nameDB_ = nameDb; }, }), diff --git a/core/icon.ts b/core/icon.ts index ad726fc6f..b771d706f 100644 --- a/core/icon.ts +++ b/core/icon.ts @@ -20,6 +20,7 @@ import * as dom from './utils/dom.js'; import {Size} from './utils/size.js'; import {Svg} from './utils/svg.js'; import * as svgMath from './utils/svg_math.js'; +import * as deprecation from './utils/deprecation.js'; /** @@ -28,7 +29,7 @@ import * as svgMath from './utils/svg_math.js'; * @alias Blockly.Icon */ export abstract class Icon { - protected block_: BlockSvg; + protected block_: BlockSvg|null; /** The icon SVG group. */ iconGroup_: SVGGElement|null = null; @@ -45,7 +46,12 @@ export abstract class Icon { protected iconXY_: Coordinate|null = null; /** @param block The block associated with this icon. */ - constructor(block: BlockSvg) { + constructor(block: BlockSvg|null) { + if (!block) { + deprecation.warn( + 'Calling the Icon constructor with a null block', 'version 9', + 'version 10', 'a non-null block'); + } this.block_ = block; } @@ -62,12 +68,12 @@ export abstract class Icon { */ this.iconGroup_ = dom.createSvgElement(Svg.G, {'class': 'blocklyIconGroup'}); - if (this.block_.isInFlyout) { - this.iconGroup_.classList.add('blocklyIconGroupReadonly'); + if (this.getBlock().isInFlyout) { + dom.addClass(this.iconGroup_, 'blocklyIconGroupReadonly'); } this.drawIcon_(this.iconGroup_); - this.block_.getSvgRoot().appendChild(this.iconGroup_); + this.getBlock().getSvgRoot().appendChild(this.iconGroup_); browserEvents.conditionalBind( this.iconGroup_, 'mouseup', this, this.iconClick_); this.updateEditable(); @@ -99,19 +105,19 @@ export abstract class Icon { * @param e Mouse click event. */ protected iconClick_(e: MouseEvent) { - if (this.block_.workspace.isDragging()) { + if (this.getBlock().workspace.isDragging()) { // Drag operation is concluding. Don't open the editor. return; } - if (!this.block_.isInFlyout && !browserEvents.isRightButton(e)) { + if (!this.getBlock().isInFlyout && !browserEvents.isRightButton(e)) { this.setVisible(!this.isVisible()); } } /** Change the colour of the associated bubble to match its block. */ applyColour() { - if (this.isVisible()) { - this.bubble_!.setColour(this.block_.style.colourPrimary); + if (this.bubble_ && this.isVisible()) { + this.bubble_.setColour(this.getBlock().style.colourPrimary); } } @@ -122,8 +128,8 @@ export abstract class Icon { */ setIconLocation(xy: Coordinate) { this.iconXY_ = xy; - if (this.isVisible()) { - this.bubble_!.setAnchorLocation(xy); + if (this.bubble_ && this.isVisible()) { + this.bubble_.setAnchorLocation(xy); } } @@ -133,7 +139,7 @@ export abstract class Icon { */ computeIconLocation() { // Find coordinates for the centre of the icon and update the arrow. - const blockXY = this.block_.getRelativeToSurfaceXY(); + const blockXY = this.getBlock().getRelativeToSurfaceXY(); const iconXY = svgMath.getRelativeXY(this.iconGroup_ as SVGElement); const newXY = new Coordinate( blockXY.x + iconXY.x + this.SIZE / 2, @@ -178,5 +184,16 @@ export abstract class Icon { * @param _visible True if the icon should be visible. */ setVisible(_visible: boolean) {} + + /** + * Returns the block this icon is attached to. + */ + protected getBlock(): BlockSvg { + if (!this.block_) { + throw new Error('Block is not set for this icon.'); + } + + return this.block_; + } } // No-op on base class diff --git a/core/inject.ts b/core/inject.ts index 2ec3a4c26..833075665 100644 --- a/core/inject.ts +++ b/core/inject.ts @@ -172,11 +172,11 @@ function createMainWorkspace( const injectionDiv = mainWorkspace.getInjectionDiv(); const rendererClassName = mainWorkspace.getRenderer().getClassName(); if (rendererClassName) { - injectionDiv.classList.add(rendererClassName); + dom.addClass(injectionDiv, rendererClassName); } const themeClassName = mainWorkspace.getTheme().getClassName(); if (themeClassName) { - injectionDiv.classList.add(themeClassName); + dom.addClass(injectionDiv, themeClassName); } if (!wsOptions.hasCategories && wsOptions.languageTree) { diff --git a/core/interfaces/i_ast_node_location_with_block.ts b/core/interfaces/i_ast_node_location_with_block.ts index 72ef94b78..cf54ddc41 100644 --- a/core/interfaces/i_ast_node_location_with_block.ts +++ b/core/interfaces/i_ast_node_location_with_block.ts @@ -28,5 +28,5 @@ export interface IASTNodeLocationWithBlock extends IASTNodeLocation { * * @returns The source block. */ - getSourceBlock(): Block; + getSourceBlock(): Block|null; } diff --git a/core/interfaces/i_parameter_model.ts b/core/interfaces/i_parameter_model.ts new file mode 100644 index 000000000..fe9eda6b0 --- /dev/null +++ b/core/interfaces/i_parameter_model.ts @@ -0,0 +1,45 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * The interface for the data model of a procedure parameter. + * + * @namespace Blockly.IParameterModel + */ + + +/** + * A data model for a procedure. + */ +export interface IParameterModel { + /** + * Sets the name of this parameter to the given name. + */ + setName(name: string): this; + + /** + * Sets the types of this parameter to the given type. + */ + setTypes(types: string[]): this; + + /** + * Returns the name of this parameter. + */ + getName(): string; + + /** + * Return the types of this parameter. + */ + getTypes(): string[]; + + /** + * Returns the unique language-neutral ID for the parameter. + * + * This represents the identify of the variable model which does not change + * over time. + */ + getId(): string; +} diff --git a/core/interfaces/i_procedure_block.ts b/core/interfaces/i_procedure_block.ts new file mode 100644 index 000000000..57318ba85 --- /dev/null +++ b/core/interfaces/i_procedure_block.ts @@ -0,0 +1,19 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import type {Block} from '../block.js'; + + +/** The interface for a block which models a procedure. */ +export interface IProcedureBlock { + doProcedureUpdate(): void; +} + +/** A type guard which checks if the given block is a procedure block. */ +export function isProcedureBlock(block: Block| + IProcedureBlock): block is IProcedureBlock { + return (block as IProcedureBlock).doProcedureUpdate !== undefined; +} diff --git a/core/interfaces/i_procedure_map.ts b/core/interfaces/i_procedure_map.ts new file mode 100644 index 000000000..0eead4025 --- /dev/null +++ b/core/interfaces/i_procedure_map.ts @@ -0,0 +1,20 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {IProcedureModel} from './i_procedure_model.js'; + + +export interface IProcedureMap extends Map { + /** + * Adds the given ProcedureModel to the map of procedure models, so that + * blocks can find it. + */ + add(proc: IProcedureModel): this; + + + /** Returns all of the procedures stored in this map. */ + getProcedures(): IProcedureModel[]; +} diff --git a/core/interfaces/i_procedure_model.ts b/core/interfaces/i_procedure_model.ts new file mode 100644 index 000000000..1950fff76 --- /dev/null +++ b/core/interfaces/i_procedure_model.ts @@ -0,0 +1,70 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * The interface for the data model of a procedure. + * + * @namespace Blockly.IProcedureModel + */ + +import {IParameterModel} from './i_parameter_model.js'; + + +/** + * A data model for a procedure. + */ +export interface IProcedureModel { + /** Sets the human-readable name of the procedure. */ + setName(name: string): this; + + /** + * Inserts a parameter into the list of parameters. + * + * To move a parameter, first delete it, and then re-insert. + */ + insertParameter(parameterModel: IParameterModel, index: number): this; + + /** Removes the parameter at the given index from the parameter list. */ + deleteParameter(index: number): this; + + /** + * Sets the return type(s) of the procedure. + * + * Pass null to represent a procedure that does not return. + */ + setReturnTypes(types: string[]|null): this; + + /** + * Sets whether this procedure is enabled/disabled. If a procedure is disabled + * all procedure caller blocks should be disabled as well. + */ + setEnabled(enabled: boolean): this; + + /** Returns the unique language-neutral ID for the procedure. */ + getId(): string; + + /** Returns the human-readable name of the procedure. */ + getName(): string; + + /** Returns the parameter at the given index in the parameter list. */ + getParameter(index: number): IParameterModel; + + /** Returns an array of all of the parameters in the parameter list. */ + getParameters(): IParameterModel[]; + + /** + * Returns the return type(s) of the procedure. + * + * Null represents a procedure that does not return a value. + */ + getReturnTypes(): string[]|null; + + /** + * Returns whether the procedure is enabled/disabled. If a procedure is + * disabled, all procedure caller blocks should be disabled as well. + */ + getEnabled(): boolean; +} diff --git a/core/keyboard_nav/ast_node.ts b/core/keyboard_nav/ast_node.ts index 1f9f4a10d..27d0a4554 100644 --- a/core/keyboard_nav/ast_node.ts +++ b/core/keyboard_nav/ast_node.ts @@ -176,6 +176,10 @@ export class ASTNode { const location = this.location_ as Field; const input = location.getParentInput(); const block = location.getSourceBlock(); + if (!block) { + throw new Error( + 'The current AST location is not associated with a block'); + } const curIdx = block.inputList.indexOf((input)); let fieldIdx = input.fieldRow.indexOf(location) + 1; for (let i = curIdx; i < block.inputList.length; i++) { @@ -235,6 +239,10 @@ export class ASTNode { const location = this.location_ as Field; const parentInput = location.getParentInput(); const block = location.getSourceBlock(); + if (!block) { + throw new Error( + 'The current AST location is not associated with a block'); + } const curIdx = block.inputList.indexOf((parentInput)); let fieldIdx = parentInput.fieldRow.indexOf(location) - 1; for (let i = curIdx; i >= 0; i--) { @@ -270,12 +278,15 @@ export class ASTNode { // TODO(#6097): Use instanceof checks to exit early for values of // curLocation that don't make sense. if ((curLocation as IASTNodeLocationWithBlock).getSourceBlock) { - curLocation = (curLocation as IASTNodeLocationWithBlock).getSourceBlock(); + const block = (curLocation as IASTNodeLocationWithBlock).getSourceBlock(); + if (block) { + curLocation = block; + } } // TODO(#6097): Use instanceof checks to exit early for values of // curLocation that don't make sense. const curLocationAsBlock = curLocation as Block; - if (!curLocationAsBlock || curLocationAsBlock.disposed) { + if (!curLocationAsBlock || curLocationAsBlock.isDeadOrDying()) { return null; } const curRoot = curLocationAsBlock.getRootBlock(); @@ -531,7 +542,12 @@ export class ASTNode { } case ASTNode.types.FIELD: { const field = this.location_ as Field; - return ASTNode.createBlockNode(field.getSourceBlock()); + const block = field.getSourceBlock(); + if (!block) { + throw new Error( + 'The current AST location is not associated with a block'); + } + return ASTNode.createBlockNode(block); } case ASTNode.types.INPUT: { const connection = this.location_ as Connection; diff --git a/core/main.js b/core/main.js index 10a0d5db0..4d6f85376 100644 --- a/core/main.js +++ b/core/main.js @@ -86,13 +86,13 @@ Object.defineProperties(Blockly, { mainWorkspace: { set: function(x) { deprecation.warn( - 'Blockly.mainWorkspace', 'August 2022', 'September 2022', + 'Blockly.mainWorkspace', 'version 9', 'version 10', 'Blockly.getMainWorkspace'); common.setMainWorkspace(x); }, get: function() { deprecation.warn( - 'Blockly.mainWorkspace', 'August 2022', 'September 2022', + 'Blockly.mainWorkspace', 'version 9', 'version 10', 'Blockly.getMainWorkspace'); return common.getMainWorkspace(); }, @@ -130,14 +130,12 @@ Object.defineProperties(Blockly, { selected: { get: function() { deprecation.warn( - 'Blockly.selected', 'August 2022', 'September 2022', - 'Blockly.getSelected'); + 'Blockly.selected', 'version 9', 'version 10', 'Blockly.getSelected'); return common.getSelected(); }, set: function(newSelection) { deprecation.warn( - 'Blockly.selected', 'August 2022', 'September 2022', - 'Blockly.getSelected'); + 'Blockly.selected', 'version 9', 'version 10', 'Blockly.getSelected'); common.setSelected(newSelection); }, }, diff --git a/core/menu.ts b/core/menu.ts index 88a43b9fc..93edeb1df 100644 --- a/core/menu.ts +++ b/core/menu.ts @@ -16,6 +16,7 @@ import * as browserEvents from './browser_events.js'; import type {MenuItem} from './menuitem.js'; import * as aria from './utils/aria.js'; import {Coordinate} from './utils/coordinate.js'; +import * as dom from './utils/dom.js'; import {KeyCodes} from './utils/keycodes.js'; import type {Size} from './utils/size.js'; import * as style from './utils/style.js'; @@ -32,7 +33,7 @@ export class Menu { * (Nulls are never in the array, but typing the array as nullable prevents * the compiler from objecting to .indexOf(null)) */ - private readonly menuItems_: MenuItem[] = []; + private readonly menuItems: MenuItem[] = []; /** * Coordinates of the mousedown event that caused this menu to open. Used to @@ -45,28 +46,28 @@ export class Menu { * This is the element that we will listen to the real focus events on. * A value of null means no menu item is highlighted. */ - private highlightedItem_: MenuItem|null = null; + private highlightedItem: MenuItem|null = null; /** Mouse over event data. */ - private mouseOverHandler_: browserEvents.Data|null = null; + private mouseOverHandler: browserEvents.Data|null = null; /** Click event data. */ - private clickHandler_: browserEvents.Data|null = null; + private clickHandler: browserEvents.Data|null = null; /** Mouse enter event data. */ - private mouseEnterHandler_: browserEvents.Data|null = null; + private mouseEnterHandler: browserEvents.Data|null = null; /** Mouse leave event data. */ - private mouseLeaveHandler_: browserEvents.Data|null = null; + private mouseLeaveHandler: browserEvents.Data|null = null; /** Key down event data. */ - private onKeyDownHandler_: browserEvents.Data|null = null; + private onKeyDownHandler: browserEvents.Data|null = null; /** The menu's root DOM element. */ - private element_: HTMLDivElement|null = null; + private element: HTMLDivElement|null = null; /** ARIA name for this menu. */ - private roleName_: aria.Role|null = null; + private roleName: aria.Role|null = null; /** Constructs a new Menu instance. */ constructor() {} @@ -78,7 +79,7 @@ export class Menu { * @internal */ addChild(menuItem: MenuItem) { - this.menuItems_.push(menuItem); + this.menuItems.push(menuItem); } /** @@ -92,27 +93,27 @@ export class Menu { // goog-menu is deprecated, use blocklyMenu. May 2020. element.className = 'blocklyMenu goog-menu blocklyNonSelectable'; element.tabIndex = 0; - if (this.roleName_) { - aria.setRole(element, this.roleName_); + if (this.roleName) { + aria.setRole(element, this.roleName); } - this.element_ = element; + this.element = element; // Add menu items. - for (let i = 0, menuItem; menuItem = this.menuItems_[i]; i++) { + for (let i = 0, menuItem; menuItem = this.menuItems[i]; i++) { element.appendChild(menuItem.createDom()); } // Add event handlers. - this.mouseOverHandler_ = browserEvents.conditionalBind( - element, 'mouseover', this, this.handleMouseOver_, true); - this.clickHandler_ = browserEvents.conditionalBind( - element, 'click', this, this.handleClick_, true); - this.mouseEnterHandler_ = browserEvents.conditionalBind( - element, 'mouseenter', this, this.handleMouseEnter_, true); - this.mouseLeaveHandler_ = browserEvents.conditionalBind( - element, 'mouseleave', this, this.handleMouseLeave_, true); - this.onKeyDownHandler_ = browserEvents.conditionalBind( - element, 'keydown', this, this.handleKeyEvent_); + this.mouseOverHandler = browserEvents.conditionalBind( + element, 'mouseover', this, this.handleMouseOver, true); + this.clickHandler = browserEvents.conditionalBind( + element, 'click', this, this.handleClick, true); + this.mouseEnterHandler = browserEvents.conditionalBind( + element, 'mouseenter', this, this.handleMouseEnter, true); + this.mouseLeaveHandler = browserEvents.conditionalBind( + element, 'mouseleave', this, this.handleMouseLeave, true); + this.onKeyDownHandler = browserEvents.conditionalBind( + element, 'keydown', this, this.handleKeyEvent); container.appendChild(element); return element; @@ -125,7 +126,7 @@ export class Menu { * @internal */ getElement(): HTMLDivElement|null { - return this.element_; + return this.element; } /** @@ -137,16 +138,16 @@ export class Menu { const el = this.getElement(); if (el) { el.focus({preventScroll: true}); - el.classList.add('blocklyFocused'); + dom.addClass(el, 'blocklyFocused'); } } /** Blur the menu element. */ - private blur_() { + private blur() { const el = this.getElement(); if (el) { el.blur(); - el.classList.remove('blocklyFocused'); + dom.removeClass(el, 'blocklyFocused'); } } @@ -157,38 +158,38 @@ export class Menu { * @internal */ setRole(roleName: aria.Role) { - this.roleName_ = roleName; + this.roleName = roleName; } /** Dispose of this menu. */ dispose() { // Remove event handlers. - if (this.mouseOverHandler_) { - browserEvents.unbind(this.mouseOverHandler_); - this.mouseOverHandler_ = null; + if (this.mouseOverHandler) { + browserEvents.unbind(this.mouseOverHandler); + this.mouseOverHandler = null; } - if (this.clickHandler_) { - browserEvents.unbind(this.clickHandler_); - this.clickHandler_ = null; + if (this.clickHandler) { + browserEvents.unbind(this.clickHandler); + this.clickHandler = null; } - if (this.mouseEnterHandler_) { - browserEvents.unbind(this.mouseEnterHandler_); - this.mouseEnterHandler_ = null; + if (this.mouseEnterHandler) { + browserEvents.unbind(this.mouseEnterHandler); + this.mouseEnterHandler = null; } - if (this.mouseLeaveHandler_) { - browserEvents.unbind(this.mouseLeaveHandler_); - this.mouseLeaveHandler_ = null; + if (this.mouseLeaveHandler) { + browserEvents.unbind(this.mouseLeaveHandler); + this.mouseLeaveHandler = null; } - if (this.onKeyDownHandler_) { - browserEvents.unbind(this.onKeyDownHandler_); - this.onKeyDownHandler_ = null; + if (this.onKeyDownHandler) { + browserEvents.unbind(this.onKeyDownHandler); + this.onKeyDownHandler = null; } // Remove menu items. - for (let i = 0, menuItem; menuItem = this.menuItems_[i]; i++) { + for (let i = 0, menuItem; menuItem = this.menuItems[i]; i++) { menuItem.dispose(); } - this.element_ = null; + this.element = null; } // Child component management. @@ -200,7 +201,7 @@ export class Menu { * @param elem DOM element whose owner is to be returned. * @returns Menu item for which the DOM element belongs to. */ - private getMenuItem_(elem: Element): MenuItem|null { + private getMenuItem(elem: Element): MenuItem|null { const menuElem = this.getElement(); // Node might be the menu border (resulting in no associated menu item), or // a menu item's div, or some element within the menu item. @@ -210,7 +211,7 @@ export class Menu { while (currentElement && currentElement !== menuElem) { if (currentElement.classList.contains('blocklyMenuItem')) { // Having found a menu item's div, locate that menu item in this menu. - for (let i = 0, menuItem; menuItem = this.menuItems_[i]; i++) { + for (let i = 0, menuItem; menuItem = this.menuItems[i]; i++) { if (menuItem.getElement() === currentElement) { return menuItem; } @@ -230,14 +231,14 @@ export class Menu { * @internal */ setHighlighted(item: MenuItem|null) { - const currentHighlighted = this.highlightedItem_; + const currentHighlighted = this.highlightedItem; if (currentHighlighted) { currentHighlighted.setHighlighted(false); - this.highlightedItem_ = null; + this.highlightedItem = null; } if (item) { item.setHighlighted(true); - this.highlightedItem_ = item; + this.highlightedItem = item; // Bring the highlighted item into view. This has no effect if the menu is // not scrollable. const el = this.getElement() as Element; @@ -254,10 +255,10 @@ export class Menu { * @internal */ highlightNext() { - const index = this.highlightedItem_ ? - this.menuItems_.indexOf(this.highlightedItem_) : + const index = this.highlightedItem ? + this.menuItems.indexOf(this.highlightedItem) : -1; - this.highlightHelper_(index, 1); + this.highlightHelper(index, 1); } /** @@ -267,20 +268,20 @@ export class Menu { * @internal */ highlightPrevious() { - const index = this.highlightedItem_ ? - this.menuItems_.indexOf(this.highlightedItem_) : + const index = this.highlightedItem ? + this.menuItems.indexOf(this.highlightedItem) : -1; - this.highlightHelper_(index < 0 ? this.menuItems_.length : index, -1); + this.highlightHelper(index < 0 ? this.menuItems.length : index, -1); } /** Highlights the first highlightable item. */ - private highlightFirst_() { - this.highlightHelper_(-1, 1); + private highlightFirst() { + this.highlightHelper(-1, 1); } /** Highlights the last highlightable item. */ - private highlightLast_() { - this.highlightHelper_(this.menuItems_.length, -1); + private highlightLast() { + this.highlightHelper(this.menuItems.length, -1); } /** @@ -290,10 +291,10 @@ export class Menu { * @param startIndex Start index. * @param delta Step direction: 1 to go down, -1 to go up. */ - private highlightHelper_(startIndex: number, delta: number) { + private highlightHelper(startIndex: number, delta: number) { let index = startIndex + delta; let menuItem; - while (menuItem = this.menuItems_[index]) { + while (menuItem = this.menuItems[index]) { if (menuItem.isEnabled()) { this.setHighlighted(menuItem); break; @@ -309,12 +310,12 @@ export class Menu { * * @param e Mouse event to handle. */ - private handleMouseOver_(e: Event) { - const menuItem = this.getMenuItem_(e.target as Element); + private handleMouseOver(e: Event) { + const menuItem = this.getMenuItem(e.target as Element); if (menuItem) { if (menuItem.isEnabled()) { - if (this.highlightedItem_ !== menuItem) { + if (this.highlightedItem !== menuItem) { this.setHighlighted(menuItem); } } else { @@ -328,7 +329,7 @@ export class Menu { * * @param e Click event to handle. */ - private handleClick_(e: Event) { + private handleClick(e: Event) { const oldCoords = this.openingCoords; // Clear out the saved opening coords immediately so they're not used twice. this.openingCoords = null; @@ -350,7 +351,7 @@ export class Menu { } } - const menuItem = this.getMenuItem_(e.target as Element); + const menuItem = this.getMenuItem(e.target as Element); if (menuItem) { menuItem.performAction(); } @@ -361,7 +362,7 @@ export class Menu { * * @param _e Mouse event to handle. */ - private handleMouseEnter_(_e: Event) { + private handleMouseEnter(_e: Event) { this.focus(); } @@ -370,9 +371,9 @@ export class Menu { * * @param _e Mouse event to handle. */ - private handleMouseLeave_(_e: Event) { + private handleMouseLeave(_e: Event) { if (this.getElement()) { - this.blur_(); + this.blur(); this.setHighlighted(null); } } @@ -386,27 +387,20 @@ export class Menu { * * @param e Key event to handle. */ - private handleKeyEvent_(e: Event) { - if (!this.menuItems_.length) { + private handleKeyEvent(e: Event) { + if (!this.menuItems.length) { // Empty menu. return; } - // AnyDuringMigration because: Property 'altKey' does not exist on type - // 'Event'. AnyDuringMigration because: Property 'metaKey' does not exist - // on type 'Event'. AnyDuringMigration because: Property 'ctrlKey' does not - // exist on type 'Event'. AnyDuringMigration because: Property 'shiftKey' - // does not exist on type 'Event'. - if ((e as AnyDuringMigration).shiftKey || - (e as AnyDuringMigration).ctrlKey || - (e as AnyDuringMigration).metaKey || (e as AnyDuringMigration).altKey) { + const keyboardEvent = e as KeyboardEvent; + if (keyboardEvent.shiftKey || keyboardEvent.ctrlKey || + keyboardEvent.metaKey || keyboardEvent.altKey) { // Do not handle the key event if any modifier key is pressed. return; } - const highlighted = this.highlightedItem_; - // AnyDuringMigration because: Property 'keyCode' does not exist on type - // 'Event'. - switch ((e as AnyDuringMigration).keyCode) { + const highlighted = this.highlightedItem; + switch (keyboardEvent.keyCode) { case KeyCodes.ENTER: case KeyCodes.SPACE: if (highlighted) { @@ -424,12 +418,12 @@ export class Menu { case KeyCodes.PAGE_UP: case KeyCodes.HOME: - this.highlightFirst_(); + this.highlightFirst(); break; case KeyCodes.PAGE_DOWN: case KeyCodes.END: - this.highlightLast_(); + this.highlightLast(); break; default: @@ -448,10 +442,10 @@ export class Menu { * @internal */ getSize(): Size { - const menuDom = this.getElement(); - const menuSize = style.getSize(menuDom as Element); + const menuDom = this.getElement() as HTMLDivElement; + const menuSize = style.getSize(menuDom); // Recalculate height for the total content, not only box height. - menuSize.height = menuDom!.scrollHeight; + menuSize.height = menuDom.scrollHeight; return menuSize; } } diff --git a/core/menuitem.ts b/core/menuitem.ts index 721c6cfce..ee9b2ad0c 100644 --- a/core/menuitem.ts +++ b/core/menuitem.ts @@ -13,6 +13,7 @@ import * as goog from '../closure/goog/goog.js'; goog.declareModuleId('Blockly.MenuItem'); import * as aria from './utils/aria.js'; +import * as dom from './utils/dom.js'; import * as idGenerator from './utils/idgenerator.js'; @@ -23,28 +24,28 @@ import * as idGenerator from './utils/idgenerator.js'; */ export class MenuItem { /** Is the menu item clickable, as opposed to greyed-out. */ - private enabled_ = true; + private enabled = true; /** The DOM element for the menu item. */ - private element_: HTMLDivElement|null = null; + private element: HTMLDivElement|null = null; /** Whether the menu item is rendered right-to-left. */ - private rightToLeft_ = false; + private rightToLeft = false; /** ARIA name for this menu. */ - private roleName_: aria.Role|null = null; + private roleName: aria.Role|null = null; /** Is this menu item checkable. */ - private checkable_ = false; + private checkable = false; /** Is this menu item currently checked. */ - private checked_ = false; + private checked = false; /** Is this menu item currently highlighted. */ - private highlight_ = false; + private highlight = false; /** Bound function to call when this menu item is clicked. */ - private actionHandler_: Function|null = null; + private actionHandler: Function|null = null; /** * @param content Text caption to display as the content of the item, or a @@ -63,22 +64,22 @@ export class MenuItem { createDom(): Element { const element = (document.createElement('div')); element.id = idGenerator.getNextUniqueId(); - this.element_ = element; + this.element = element; // Set class and style // goog-menuitem* is deprecated, use blocklyMenuItem*. May 2020. element.className = 'blocklyMenuItem goog-menuitem ' + - (this.enabled_ ? '' : - 'blocklyMenuItemDisabled goog-menuitem-disabled ') + - (this.checked_ ? 'blocklyMenuItemSelected goog-option-selected ' : '') + - (this.highlight_ ? 'blocklyMenuItemHighlight goog-menuitem-highlight ' : - '') + - (this.rightToLeft_ ? 'blocklyMenuItemRtl goog-menuitem-rtl ' : ''); + (this.enabled ? '' : + 'blocklyMenuItemDisabled goog-menuitem-disabled ') + + (this.checked ? 'blocklyMenuItemSelected goog-option-selected ' : '') + + (this.highlight ? 'blocklyMenuItemHighlight goog-menuitem-highlight ' : + '') + + (this.rightToLeft ? 'blocklyMenuItemRtl goog-menuitem-rtl ' : ''); const content = (document.createElement('div')); content.className = 'blocklyMenuItemContent goog-menuitem-content'; // Add a checkbox for checkable menu items. - if (this.checkable_) { + if (this.checkable) { const checkbox = (document.createElement('div')); checkbox.className = 'blocklyMenuItemCheckbox goog-menuitem-checkbox'; content.appendChild(checkbox); @@ -92,20 +93,19 @@ export class MenuItem { element.appendChild(content); // Initialize ARIA role and state. - if (this.roleName_) { - aria.setRole(element, this.roleName_); + if (this.roleName) { + aria.setRole(element, this.roleName); } aria.setState( - element, aria.State.SELECTED, - this.checkable_ && this.checked_ || false); - aria.setState(element, aria.State.DISABLED, !this.enabled_); + element, aria.State.SELECTED, this.checkable && this.checked || false); + aria.setState(element, aria.State.DISABLED, !this.enabled); return element; } /** Dispose of this menu item. */ dispose() { - this.element_ = null; + this.element = null; } /** @@ -115,7 +115,7 @@ export class MenuItem { * @internal */ getElement(): Element|null { - return this.element_; + return this.element; } /** @@ -125,7 +125,7 @@ export class MenuItem { * @internal */ getId(): string { - return this.element_!.id; + return this.element!.id; } /** @@ -145,7 +145,7 @@ export class MenuItem { * @internal */ setRightToLeft(rtl: boolean) { - this.rightToLeft_ = rtl; + this.rightToLeft = rtl; } /** @@ -155,7 +155,7 @@ export class MenuItem { * @internal */ setRole(roleName: aria.Role) { - this.roleName_ = roleName; + this.roleName = roleName; } /** @@ -166,7 +166,7 @@ export class MenuItem { * @internal */ setCheckable(checkable: boolean) { - this.checkable_ = checkable; + this.checkable = checkable; } /** @@ -176,7 +176,7 @@ export class MenuItem { * @internal */ setChecked(checked: boolean) { - this.checked_ = checked; + this.checked = checked; } /** @@ -186,7 +186,7 @@ export class MenuItem { * @internal */ setHighlighted(highlight: boolean) { - this.highlight_ = highlight; + this.highlight = highlight; const el = this.getElement(); if (el && this.isEnabled()) { @@ -195,11 +195,11 @@ export class MenuItem { const name = 'blocklyMenuItemHighlight'; const nameDep = 'goog-menuitem-highlight'; if (highlight) { - el.classList.add(name); - el.classList.add(nameDep); + dom.addClass(el, name); + dom.addClass(el, nameDep); } else { - el.classList.remove(name); - el.classList.remove(nameDep); + dom.removeClass(el, name); + dom.removeClass(el, nameDep); } } } @@ -211,7 +211,7 @@ export class MenuItem { * @internal */ isEnabled(): boolean { - return this.enabled_; + return this.enabled; } /** @@ -221,7 +221,7 @@ export class MenuItem { * @internal */ setEnabled(enabled: boolean) { - this.enabled_ = enabled; + this.enabled = enabled; } /** @@ -231,8 +231,8 @@ export class MenuItem { * @internal */ performAction() { - if (this.isEnabled() && this.actionHandler_) { - this.actionHandler_(this); + if (this.isEnabled() && this.actionHandler) { + this.actionHandler(this); } } @@ -245,6 +245,6 @@ export class MenuItem { * @internal */ onAction(fn: (p1: MenuItem) => void, obj: object) { - this.actionHandler_ = fn.bind(obj); + this.actionHandler = fn.bind(obj); } } diff --git a/core/msg.ts b/core/msg.ts index 4d4c440d5..39d05b0c5 100644 --- a/core/msg.ts +++ b/core/msg.ts @@ -15,3 +15,20 @@ goog.declareModuleId('Blockly.Msg'); /** A dictionary of localised messages. */ export const Msg: {[key: string]: string} = Object.create(null); + +/** + * Sets the locale (i.e. the localized messages/block-text/etc) to the given + * locale. + * + * This is not useful/necessary when loading from a script tag, because the + * messages are automatically cluged into the Blockly.Msg object. But we provide + * it in both the script-tag and non-script-tag contexts so that the tscompiler + * can properly create our type definition files. + * + * @param locale An object defining the messages for a given language. + */ +export const setLocale = function(locale: {[key: string]: string}) { + Object.keys(locale).forEach(function(k) { + Msg[k] = locale[k]; + }); +}; diff --git a/core/mutator.ts b/core/mutator.ts index c470e4898..41f918a14 100644 --- a/core/mutator.ts +++ b/core/mutator.ts @@ -32,6 +32,7 @@ import * as dom from './utils/dom.js'; import {Svg} from './utils/svg.js'; import * as toolbox from './utils/toolbox.js'; import * as xml from './utils/xml.js'; +import * as deprecation from './utils/deprecation.js'; import type {WorkspaceSvg} from './workspace_svg.js'; @@ -77,8 +78,14 @@ export class Mutator extends Icon { private updateWorkspacePid_: ReturnType|null = null; /** @param quarkNames List of names of sub-blocks for flyout. */ - constructor(block: BlockSvg, quarkNames: string[]) { - super(block); + constructor(quarkNames: string[], block?: BlockSvg) { + if (!block) { + deprecation.warn( + 'Calling the Mutator constructor without passing the block it is attached to', + 'version 9', 'version 10', + 'the constructor by passing the list of subblocks and the block instance to attach the mutator to'); + } + super(block ?? null); this.quarkNames_ = quarkNames; } @@ -145,7 +152,7 @@ export class Mutator extends Icon { * @param e Mouse click event. */ protected override iconClick_(e: MouseEvent) { - if (this.block_.isEditable()) { + if (this.getBlock().isEditable()) { super.iconClick_(e); } } @@ -175,19 +182,20 @@ export class Mutator extends Icon { } else { quarkXml = null; } + const block = this.getBlock(); const workspaceOptions = new Options(({ // If you want to enable disabling, also remove the // event filter from workspaceChanged_ . 'disable': false, - 'parentWorkspace': this.block_.workspace, - 'media': this.block_.workspace.options.pathToMedia, - 'rtl': this.block_.RTL, + 'parentWorkspace': block.workspace, + 'media': block.workspace.options.pathToMedia, + 'rtl': block.RTL, 'horizontalLayout': false, - 'renderer': this.block_.workspace.options.renderer, - 'rendererOverrides': this.block_.workspace.options.rendererOverrides, + 'renderer': block.workspace.options.renderer, + 'rendererOverrides': block.workspace.options.rendererOverrides, } as BlocklyOptions)); workspaceOptions.toolboxPosition = - this.block_.RTL ? toolbox.Position.RIGHT : toolbox.Position.LEFT; + block.RTL ? toolbox.Position.RIGHT : toolbox.Position.LEFT; const hasFlyout = !!quarkXml; if (hasFlyout) { workspaceOptions.languageTree = toolbox.convertToolboxDefToJson(quarkXml); @@ -227,16 +235,16 @@ export class Mutator extends Icon { /** Add or remove the UI indicating if this icon may be clicked or not. */ override updateEditable() { super.updateEditable(); - if (!this.block_.isInFlyout) { - if (this.block_.isEditable()) { + if (!this.getBlock().isInFlyout) { + if (this.getBlock().isEditable()) { if (this.iconGroup_) { - this.iconGroup_.classList.remove('blocklyIconGroupReadonly'); + dom.removeClass(this.iconGroup_, 'blocklyIconGroupReadonly'); } } else { // Close any mutator bubble. Icon is not clickable. this.setVisible(false); if (this.iconGroup_) { - this.iconGroup_.classList.add('blocklyIconGroupReadonly'); + dom.addClass(this.iconGroup_, 'blocklyIconGroupReadonly'); } } } @@ -255,7 +263,7 @@ export class Mutator extends Icon { height = Math.max(height, flyoutScrollMetrics.height + 20); width += flyout.getWidth(); } - if (this.block_.RTL) { + if (this.getBlock().RTL) { width = -workspaceSize.x; } width += doubleBorderWidth * 3; @@ -275,7 +283,7 @@ export class Mutator extends Icon { this.workspaceWidth_, this.workspaceHeight_); } - if (this.block_.RTL) { + if (this.getBlock().RTL) { // Scroll the workspace to always left-align. const translation = 'translate(' + this.workspaceWidth_ + ',0)'; this.workspace_!.getCanvas().setAttribute('transform', translation); @@ -300,16 +308,16 @@ export class Mutator extends Icon { // No change. return; } + const block = this.getBlock(); eventUtils.fire(new (eventUtils.get(eventUtils.BUBBLE_OPEN))( - this.block_, visible, 'mutator')); + block, visible, 'mutator')); if (visible) { // Create the bubble. this.bubble_ = new Bubble( - (this.block_.workspace as WorkspaceSvg), this.createEditor_(), - this.block_.pathObject.svgPath, (this.iconXY_ as Coordinate), null, - null); + block.workspace, this.createEditor_(), block.pathObject.svgPath, + (this.iconXY_ as Coordinate), null, null); // Expose this mutator's block's ID on its top-level SVG group. - this.bubble_.setSvgId(this.block_.id); + this.bubble_.setSvgId(block.id); this.bubble_.registerMoveEvent(this.onBubbleMove_.bind(this)); const tree = this.workspace_!.options.languageTree; const flyout = this.workspace_!.getFlyout(); @@ -318,7 +326,7 @@ export class Mutator extends Icon { flyout!.show(tree); } - this.rootBlock_ = this.block_!.decompose!(this.workspace_!)!; + this.rootBlock_ = block.decompose!(this.workspace_!)!; const blocks = this.rootBlock_!.getDescendants(false); for (let i = 0, child; child = blocks[i]; i++) { child.render(); @@ -335,20 +343,21 @@ export class Mutator extends Icon { margin = 16; x = margin; } - if (this.block_.RTL) { + if (block.RTL) { x = -x; } this.rootBlock_!.moveBy(x, margin); // Save the initial connections, then listen for further changes. - if (this.block_.saveConnections) { + if (block.saveConnections) { const thisRootBlock = this.rootBlock_; - this.block_.saveConnections(thisRootBlock); + block.saveConnections(thisRootBlock); this.sourceListener_ = () => { - if (this.block_ && this.block_.saveConnections) { - this.block_.saveConnections(thisRootBlock); + const currentBlock = this.getBlock(); + if (currentBlock.saveConnections) { + currentBlock.saveConnections(thisRootBlock); } }; - this.block_.workspace.addChangeListener(this.sourceListener_); + block.workspace.addChangeListener(this.sourceListener_); } this.resizeBubble_(); // When the mutator's workspace changes, update the source block. @@ -367,7 +376,7 @@ export class Mutator extends Icon { this.workspaceWidth_ = 0; this.workspaceHeight_ = 0; if (this.sourceListener_) { - this.block_.workspace.removeChangeListener(this.sourceListener_); + block.workspace.removeChangeListener(this.sourceListener_); this.sourceListener_ = null; } } @@ -438,7 +447,7 @@ export class Mutator extends Icon { if (!existingGroup) { eventUtils.setGroup(true); } - const block = this.block_ as BlockSvg; + const block = this.getBlock(); const oldExtraState = BlockChange.getExtraBlockState_(block); // Switch off rendering while the source block is rebuilt. @@ -482,7 +491,7 @@ export class Mutator extends Icon { /** Dispose of this mutator. */ override dispose() { - this.block_.mutator = null; + this.getBlock().mutator = null; super.dispose(); } diff --git a/core/procedures.ts b/core/procedures.ts index e472fcd8a..e31d77d31 100644 --- a/core/procedures.ts +++ b/core/procedures.ts @@ -22,9 +22,12 @@ import * as common from './common.js'; import type {Abstract} from './events/events_abstract.js'; import type {BubbleOpen} from './events/events_bubble_open.js'; import * as eventUtils from './events/utils.js'; -import type {Field} from './field.js'; +import {Field, UnattachedFieldError} from './field.js'; import {Msg} from './msg.js'; import {Names} from './names.js'; +import {ObservableProcedureMap} from './procedures/observable_procedure_map.js'; +import {ObservableProcedureModel} from './procedures/observable_procedure_model.js'; +import {ObservableParameterModel} from './procedures/observable_parameter_model.js'; import * as utilsXml from './utils/xml.js'; import * as Variables from './variables.js'; import type {Workspace} from './workspace.js'; @@ -180,14 +183,19 @@ export function isNameUsed( * @alias Blockly.Procedures.rename */ export function rename(this: Field, name: string): string { + const block = this.getSourceBlock(); + if (!block) { + throw new UnattachedFieldError(); + } + // Strip leading and trailing whitespace. Beyond this, all names are legal. name = name.trim(); - const legalName = findLegalName(name, (this.getSourceBlock())); + const legalName = findLegalName(name, block); const oldName = this.getValue(); if (oldName !== name && oldName !== legalName) { // Rename any callers. - const blocks = this.getSourceBlock().workspace.getAllBlocks(false); + const blocks = block.workspace.getAllBlocks(false); for (let i = 0; i < blocks.length; i++) { // Assume it is a procedure so we can check. const procedureBlock = blocks[i] as unknown as ProcedureBlock; @@ -445,3 +453,9 @@ export function getDefinition(name: string, workspace: Workspace): Block|null { } return null; } + +export { + ObservableProcedureMap, + ObservableProcedureModel, + ObservableParameterModel, +}; diff --git a/core/procedures/observable_parameter_model.ts b/core/procedures/observable_parameter_model.ts new file mode 100644 index 000000000..535c6aea1 --- /dev/null +++ b/core/procedures/observable_parameter_model.ts @@ -0,0 +1,79 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {genUid} from '../utils/idgenerator.js'; +import type {IParameterModel} from '../interfaces/i_parameter_model.js'; +import {triggerProceduresUpdate} from './update_procedures.js'; +import type {VariableModel} from '../variable_model.js'; +import type {Workspace} from '../workspace.js'; + + +export class ObservableParameterModel implements IParameterModel { + private id: string; + private variable: VariableModel; + + constructor( + private readonly workspace: Workspace, name: string, id?: string) { + this.id = id ?? genUid(); + this.variable = + this.workspace.getVariable(name) ?? workspace.createVariable(name); + } + + /** + * Sets the name of this parameter to the given name. + */ + setName(name: string): this { + // TODO(#6516): Fire events. + if (name == this.variable.name) return this; + this.variable = + this.workspace.getVariable(name) ?? this.workspace.createVariable(name); + triggerProceduresUpdate(this.workspace); + return this; + } + + /** + * Unimplemented. The built-in ParameterModel does not support typing. + * If you want your procedure blocks to have typed parameters, you need to + * implement your own ParameterModel. + * + * @throws Throws for the ObservableParameterModel specifically because this + * method is unimplemented. + */ + setTypes(_types: string[]): this { + throw new Error( + 'The built-in ParameterModel does not support typing. You need to ' + + 'implement your own custom ParameterModel.'); + } + + /** + * Returns the name of this parameter. + */ + getName(): string { + return this.variable.name; + } + + /** + * Returns the types of this parameter. + */ + getTypes(): string[] { + return []; + } + + /** + * Returns the unique language-neutral ID for the parameter. + * + * This represents the identify of the variable model which does not change + * over time. + */ + getId(): string { + return this.id; + } + + /** Returns the variable model associated with the parameter model. */ + getVariableModel(): VariableModel { + return this.variable; + } +} diff --git a/core/procedures/observable_procedure_map.ts b/core/procedures/observable_procedure_map.ts new file mode 100644 index 000000000..a9ad169c5 --- /dev/null +++ b/core/procedures/observable_procedure_map.ts @@ -0,0 +1,64 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import type {IProcedureModel} from '../interfaces/i_procedure_model.js'; +import {triggerProceduresUpdate} from './update_procedures.js'; +import type {Workspace} from '../workspace.js'; +import {IProcedureMap} from '../interfaces/i_procedure_map.js'; + + +export class ObservableProcedureMap extends + Map implements IProcedureMap { + constructor(private readonly workspace: Workspace) { + super(); + } + + /** + * Adds the given procedure model to the procedure map. + */ + override set(id: string, proc: IProcedureModel): this { + // TODO(#6516): Fire events. + super.set(id, proc); + return this; + } + + /** + * Deletes the ProcedureModel with the given ID from the procedure map (if it + * exists). + */ + override delete(id: string): boolean { + // TODO(#6516): Fire events. + const existed = super.delete(id); + triggerProceduresUpdate(this.workspace); + return existed; + } + + /** + * Removes all ProcedureModels from the procedure map. + */ + override clear() { + // TODO(#6516): Fire events. + super.clear(); + triggerProceduresUpdate(this.workspace); + } + + /** + * Adds the given ProcedureModel to the map of procedure models, so that + * blocks can find it. + */ + add(proc: IProcedureModel): this { + // TODO(#6516): Fire events. + // TODO(#6526): See if this method is actually useful. + return this.set(proc.getId(), proc); + } + + /** + * Returns all of the procedures stored in this map. + */ + getProcedures(): IProcedureModel[] { + return [...this.values()]; + } +} diff --git a/core/procedures/observable_procedure_model.ts b/core/procedures/observable_procedure_model.ts new file mode 100644 index 000000000..be8d05fe5 --- /dev/null +++ b/core/procedures/observable_procedure_model.ts @@ -0,0 +1,123 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {genUid} from '../utils/idgenerator.js'; +import type {IParameterModel} from '../interfaces/i_parameter_model.js'; +import type {IProcedureModel} from '../interfaces/i_procedure_model.js'; +import {triggerProceduresUpdate} from './update_procedures.js'; +import type {Workspace} from '../workspace.js'; + + +export class ObservableProcedureModel implements IProcedureModel { + private id: string; + private name: string; + private parameters: IParameterModel[] = []; + private returnTypes: string[]|null = null; + private enabled = true; + + constructor( + private readonly workspace: Workspace, name: string, id?: string) { + this.id = id ?? genUid(); + this.name = name; + } + + /** Sets the human-readable name of the procedure. */ + setName(name: string): this { + // TODO(#6516): Fire events. + this.name = name; + triggerProceduresUpdate(this.workspace); + return this; + } + + /** + * Inserts a parameter into the list of parameters. + * + * To move a parameter, first delete it, and then re-insert. + */ + insertParameter(parameterModel: IParameterModel, index: number): this { + // TODO(#6516): Fire events. + this.parameters.splice(index, 0, parameterModel); + triggerProceduresUpdate(this.workspace); + return this; + } + + /** Removes the parameter at the given index from the parameter list. */ + deleteParameter(index: number): this { + // TODO(#6516): Fire events. + this.parameters.splice(index, 1); + triggerProceduresUpdate(this.workspace); + return this; + } + + /** + * Sets whether the procedure has a return value (empty array) or no return + * value (null). + * + * The built-in procedure model does not support procedures that have actual + * return types (i.e. non-empty arrays, e.g. ['number']). If you want your + * procedure block to have return types, you need to implement your own + * procedure model. + */ + setReturnTypes(types: string[]|null): this { + if (types && types.length) { + throw new Error( + 'The built-in ProcedureModel does not support typing. You need to ' + + 'implement your own custom ProcedureModel.'); + } + this.returnTypes = types; + // TODO(#6516): Fire events. + triggerProceduresUpdate(this.workspace); + return this; + } + + /** + * Sets whether this procedure is enabled/disabled. If a procedure is disabled + * all procedure caller blocks should be disabled as well. + */ + setEnabled(enabled: boolean): this { + // TODO(#6516): Fire events. + this.enabled = enabled; + triggerProceduresUpdate(this.workspace); + return this; + } + + /** Returns the unique language-neutral ID for the procedure. */ + getId(): string { + return this.id; + } + + /** Returns the human-readable name of the procedure. */ + getName(): string { + return this.name; + } + + /** Returns the parameter at the given index in the parameter list. */ + getParameter(index: number): IParameterModel { + return this.parameters[index]; + } + + /** Returns an array of all of the parameters in the parameter list. */ + getParameters(): IParameterModel[] { + return [...this.parameters]; + } + + /** + * Returns the return type of the procedure. + * + * Null represents a procedure that does not return a value. + */ + getReturnTypes(): string[]|null { + return this.returnTypes; + } + + /** + * Returns whether the procedure is enabled/disabled. If a procedure is + * disabled, all procedure caller blocks should be disabled as well. + */ + getEnabled(): boolean { + return this.enabled; + } +} diff --git a/core/procedures/update_procedures.ts b/core/procedures/update_procedures.ts new file mode 100644 index 000000000..53d06caa5 --- /dev/null +++ b/core/procedures/update_procedures.ts @@ -0,0 +1,22 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {isProcedureBlock} from '../interfaces/i_procedure_block.js'; +import {Workspace} from '../workspace.js'; + + +/** + * Calls the `doProcedureUpdate` method on all blocks which implement it. + * + * @internal + */ +export function triggerProceduresUpdate(workspace: Workspace) { + for (const block of workspace.getAllBlocks(false)) { + if (isProcedureBlock(block)) { + block.doProcedureUpdate(); + } + } +} diff --git a/core/rendered_connection.ts b/core/rendered_connection.ts index 933f18bb3..82af1b1b1 100644 --- a/core/rendered_connection.ts +++ b/core/rendered_connection.ts @@ -280,6 +280,10 @@ export class RenderedConnection extends Connection { /** Add highlighting around this connection. */ highlight() { + if (this.highlightPath) { + // This connection is already highlighted + return; + } let steps; const sourceBlockSvg = (this.sourceBlock_); const renderConstants = @@ -495,7 +499,7 @@ export class RenderedConnection extends Connection { * @returns List of connections. * @internal */ - override neighbours(maxLimit: number): Connection[] { + override neighbours(maxLimit: number): RenderedConnection[] { return this.dbOpposite_.getNeighbours(this, maxLimit); } diff --git a/core/renderers/common/block_rendering.ts b/core/renderers/common/block_rendering.ts index 22337e3ca..3700bfa91 100644 --- a/core/renderers/common/block_rendering.ts +++ b/core/renderers/common/block_rendering.ts @@ -48,23 +48,6 @@ import {MarkerSvg} from './marker_svg.js'; import {PathObject} from './path_object.js'; import {Renderer} from './renderer.js'; - -/** - * Returns whether the debugger is turned on. - * - * @returns Whether the debugger is turned on. - * @alias Blockly.blockRendering.isDebuggerEnabled - * @deprecated - * @internal - */ -export function isDebuggerEnabled(): boolean { - deprecation.warn( - 'Blockly.blockRendering.isDebuggerEnabled()', 'September 2021', - 'September 2022', - 'the debug renderer in @blockly/dev-tools (See https://www.npmjs.com/package/@blockly/dev-tools.)'); - return debug.isDebuggerEnabled(); -} - /** * Registers a new renderer. * @@ -86,26 +69,12 @@ export function unregister(name: string) { registry.unregister(registry.Type.RENDERER, name); } -/** - * Turn on the blocks debugger. - * - * @alias Blockly.blockRendering.startDebugger - * @deprecated - * @internal - */ -export function startDebugger() { - deprecation.warn( - 'Blockly.blockRendering.startDebugger()', 'September 2021', - 'September 2022', - 'the debug renderer in @blockly/dev-tools (See https://www.npmjs.com/package/@blockly/dev-tools.)'); - debug.startDebugger(); -} - /** * Turn off the blocks debugger. * * @alias Blockly.blockRendering.stopDebugger - * @deprecated + * @deprecated Use the debug renderer in **\@blockly/dev-tools** (See {@link + * https://www.npmjs.com/package/@blockly/dev-tools}.) * @internal */ export function stopDebugger() { diff --git a/core/renderers/common/constants.ts b/core/renderers/common/constants.ts index 1954839f1..82854abb4 100644 --- a/core/renderers/common/constants.ts +++ b/core/renderers/common/constants.ts @@ -563,7 +563,7 @@ export class ConstantProvider { this.setComponentConstants_(theme); this.ADD_START_HATS = - theme.startHats !== null ? theme.startHats : this.ADD_START_HATS; + theme.startHats !== undefined ? theme.startHats : this.ADD_START_HATS; } /** @@ -658,12 +658,7 @@ export class ConstantProvider { * @param blockStyle A full or partial block style object. * @returns A full block style object, with all required properties populated. */ - protected validatedBlockStyle_(blockStyle: { - colourPrimary: string, - colourSecondary?: string, - colourTertiary?: string, - hat?: string - }): BlockStyle { + protected validatedBlockStyle_(blockStyle: Partial): BlockStyle { // Make a new object with all of the same properties. const valid = {} as BlockStyle; if (blockStyle) { diff --git a/core/renderers/common/debug.ts b/core/renderers/common/debug.ts index a0c2f98ab..d54a2866e 100644 --- a/core/renderers/common/debug.ts +++ b/core/renderers/common/debug.ts @@ -38,8 +38,7 @@ export function isDebuggerEnabled(): boolean { */ export function startDebugger() { deprecation.warn( - 'Blockly.blockRendering.debug.startDebugger()', 'February 2022', - 'September 2022', + 'Blockly.blockRendering.debug.startDebugger()', 'version 8', 'version 10', 'the debug renderer in @blockly/dev-tools (See https://www.npmjs.com/package/@blockly/dev-tools.)'); useDebugger = true; } @@ -54,8 +53,7 @@ export function startDebugger() { */ export function stopDebugger() { deprecation.warn( - 'Blockly.blockRendering.debug.stopDebugger()', 'February 2022', - 'September 2022', + 'Blockly.blockRendering.debug.stopDebugger()', 'version 8', 'version 10', 'the debug renderer in @blockly/dev-tools (See https://www.npmjs.com/package/@blockly/dev-tools.)'); useDebugger = false; } diff --git a/core/renderers/common/drawer.ts b/core/renderers/common/drawer.ts index 68653ae17..8751252da 100644 --- a/core/renderers/common/drawer.ts +++ b/core/renderers/common/drawer.ts @@ -295,7 +295,7 @@ export class Drawer { */ protected layoutField_(fieldInfo: Icon|Field) { const svgGroup = Types.isField(fieldInfo) ? - (fieldInfo as Field).field.getSvgRoot() : + (fieldInfo as Field).field.getSvgRoot()! : (fieldInfo as Icon).icon.iconGroup_!; // Never null in rendered case. const yPos = fieldInfo.centerline - fieldInfo.height / 2; diff --git a/core/renderers/common/marker_svg.ts b/core/renderers/common/marker_svg.ts index f83abd828..67e4fdb8a 100644 --- a/core/renderers/common/marker_svg.ts +++ b/core/renderers/common/marker_svg.ts @@ -181,7 +181,8 @@ export class MarkerSvg { // Ensures the marker will be visible immediately after the move. const animate = this.currentMarkerSvg!.childNodes[0]; if (animate !== undefined) { - animate instanceof SVGAnimationElement && animate.beginElement(); + (animate as SVGAnimationElement).beginElement && + (animate as SVGAnimationElement).beginElement(); } } diff --git a/core/renderers/common/path_object.ts b/core/renderers/common/path_object.ts index 252b27e8e..c28a629e4 100644 --- a/core/renderers/common/path_object.ts +++ b/core/renderers/common/path_object.ts @@ -166,9 +166,9 @@ export class PathObject implements IPathObject { return; } if (add) { - this.svgRoot.classList.add(className); + dom.addClass(this.svgRoot, className); } else { - this.svgRoot.classList.remove(className); + dom.removeClass(this.svgRoot, className); } } diff --git a/core/renderers/geras/path_object.ts b/core/renderers/geras/path_object.ts index 7d24c1e21..07d2fcbc5 100644 --- a/core/renderers/geras/path_object.ts +++ b/core/renderers/geras/path_object.ts @@ -90,6 +90,11 @@ export class PathObject extends BasePathObject { override applyColour(block: BlockSvg) { this.svgPathLight.style.display = ''; this.svgPathDark.style.display = ''; + if (!this.style.colourTertiary) { + throw new Error( + 'The renderer did not properly initialize the tertiary colour of ' + + 'the block style'); + } this.svgPathLight.setAttribute('stroke', this.style.colourTertiary); this.svgPathDark.setAttribute('fill', this.colourDark); @@ -118,6 +123,11 @@ export class PathObject extends BasePathObject { override updateShadow_(shadow: boolean) { if (shadow) { this.svgPathLight.style.display = 'none'; + if (!this.style.colourSecondary) { + throw new Error( + 'The renderer did not properly initialize the secondary colour ' + + 'of the block style block style'); + } this.svgPathDark.setAttribute('fill', this.style.colourSecondary); this.svgPath.setAttribute('stroke', 'none'); this.svgPath.setAttribute('fill', this.style.colourSecondary); diff --git a/core/serialization.ts b/core/serialization.ts new file mode 100644 index 000000000..1b9739df0 --- /dev/null +++ b/core/serialization.ts @@ -0,0 +1,31 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Serialization methods. + */ +import * as goog from '../closure/goog/goog.js'; +goog.declareModuleId('Blockly.serialization'); + +import * as blocks from './serialization/blocks.js'; +import * as exceptions from './serialization/exceptions.js'; +import * as priorities from './serialization/priorities.js'; +import * as procedures from './serialization/procedures.js'; +import * as registry from './serialization/registry.js'; +import * as variables from './serialization/variables.js'; +import * as workspaces from './serialization/workspaces.js'; +import {ISerializer} from './interfaces/i_serializer.js'; + +export { + blocks, + exceptions, + priorities, + procedures, + registry, + variables, + workspaces, + ISerializer, +}; diff --git a/core/serialization/priorities.ts b/core/serialization/priorities.ts index b8c8f2613..b49c7222d 100644 --- a/core/serialization/priorities.ts +++ b/core/serialization/priorities.ts @@ -21,6 +21,12 @@ goog.declareModuleId('Blockly.serialization.priorities'); * @alias Blockly.serialization.priorities.VARIABLES */ export const VARIABLES = 100; + +/** + * The priority for deserializing variable data. + */ +export const PROCEDURES = 75; + /** * The priority for deserializing blocks. * diff --git a/core/serialization/procedures.ts b/core/serialization/procedures.ts new file mode 100644 index 000000000..606104fb4 --- /dev/null +++ b/core/serialization/procedures.ts @@ -0,0 +1,152 @@ +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {IParameterModel} from '../interfaces/i_parameter_model.js'; +import {IProcedureModel} from '../interfaces/i_procedure_model.js'; +import type {ISerializer} from '../interfaces/i_serializer.js'; +import {ObservableProcedureModel} from '../procedures/observable_procedure_model.js'; +import {ObservableParameterModel} from '../procedures/observable_parameter_model.js'; +import * as priorities from './priorities.js'; +import * as serializationRegistry from './registry.js'; +import type {Workspace} from '../workspace.js'; + + +/** + * Representation of a procedure data model. + */ +export interface State { + id: string, name: string, returnTypes: string[]|null, + parameters?: ParameterState[], +} + +/** + * Representation of a parameter data model. + */ +export interface ParameterState { + id: string, name: string, types?: string[], +} + +/** + * A newable signature for an IProcedureModel. + * + * Refer to + * https://www.typescriptlang.org/docs/handbook/2/generics.html#using-class-types-in-generics + * for what is going on with this. + */ +type ProcedureModelConstructor = + new (workspace: Workspace, name: string, id: string) => ProcedureModel; + +/** + * A newable signature for an IParameterModel. + * + * Refer to + * https://www.typescriptlang.org/docs/handbook/2/generics.html#using-class-types-in-generics + * for what is going on with this. + */ +type ParameterModelConstructor = + new (workspace: Workspace, name: string, id: string) => ParameterModel; + + +/** Serializes the given IProcedureModel to JSON. */ +function saveProcedure(proc: IProcedureModel): State { + const state: State = { + id: proc.getId(), + name: proc.getName(), + returnTypes: proc.getReturnTypes(), + }; + if (!proc.getParameters().length) return state; + state.parameters = proc.getParameters().map((param) => saveParameter(param)); + return state; +} + +/** Serializes the given IParameterModel to JSON. */ +function saveParameter(param: IParameterModel): ParameterState { + const state: ParameterState = { + id: param.getId(), + name: param.getName(), + }; + if (!param.getTypes().length) return state; + state.types = param.getTypes(); + return state; +} + +/** Deserializes the given procedure model State from JSON. */ +function +loadProcedure( + procedureModelClass: ProcedureModelConstructor, + parameterModelClass: ParameterModelConstructor, + state: State, workspace: Workspace): ProcedureModel { + const proc = new procedureModelClass(workspace, state.name, state.id) + .setReturnTypes(state.returnTypes); + if (!state.parameters) return proc; + for (const [index, param] of state.parameters.entries()) { + proc.insertParameter( + loadParameter(parameterModelClass, param, workspace), index); + } + return proc; +} + +/** Deserializes the given ParameterState from JSON. */ +function loadParameter( + parameterModelClass: ParameterModelConstructor, + state: ParameterState, workspace: Workspace): ParameterModel { + return new parameterModelClass(workspace, state.name, state.id) + .setTypes(state.types || []); +} + +/** Serializer for saving and loading procedure state. */ +export class ProcedureSerializer implements ISerializer { + public priority = priorities.PROCEDURES; + + /** + * Constructs the procedure serializer. + * + * Example usage: + * new ProcedureSerializer(MyProcedureModelClass, MyParameterModelClass) + * + * @param procedureModelClass The class (implementing IProcedureModel) that + * you want this serializer to deserialize. + * @param parameterModelClass The class (implementing IParameterModel) that + * you want this serializer to deserialize. + */ + constructor( + private readonly procedureModelClass: + ProcedureModelConstructor, + private readonly parameterModelClass: + ParameterModelConstructor) {} + + /** Serializes the procedure models of the given workspace. */ + save(workspace: Workspace): State[]|null { + return workspace.getProcedureMap().getProcedures().map( + (proc) => saveProcedure(proc)); + } + + /** + * Deserializes the procedures models defined by the given state into the + * workspace. + */ + load(state: State[], workspace: Workspace) { + const map = workspace.getProcedureMap(); + for (const procState of state) { + map.add(loadProcedure( + this.procedureModelClass, this.parameterModelClass, procState, + workspace)); + } + } + + /** Disposes of any procedure models that exist on the workspace. */ + clear(workspace: Workspace) { + workspace.getProcedureMap().clear(); + } +} + +serializationRegistry.register( + 'procedures', + new ProcedureSerializer( + ObservableProcedureModel, ObservableParameterModel)); diff --git a/core/shortcut_items.ts b/core/shortcut_items.ts index 707a252f6..cf35096e9 100644 --- a/core/shortcut_items.ts +++ b/core/shortcut_items.ts @@ -34,7 +34,7 @@ export enum names { CUT = 'cut', PASTE = 'paste', UNDO = 'undo', - REDO = 'redo' + REDO = 'redo', } /** diff --git a/core/shortcut_registry.ts b/core/shortcut_registry.ts index 7bb7f035e..aba367887 100644 --- a/core/shortcut_registry.ts +++ b/core/shortcut_registry.ts @@ -56,8 +56,7 @@ export class ShortcutRegistry { register(shortcut: KeyboardShortcut, opt_allowOverrides?: boolean) { const registeredShortcut = this.shortcuts.get(shortcut.name); if (registeredShortcut && !opt_allowOverrides) { - throw new Error( - 'Shortcut with name "' + shortcut.name + '" already exists.'); + throw new Error(`Shortcut named "${shortcut.name}" already exists.`); } this.shortcuts.set(shortcut.name, shortcut); @@ -81,8 +80,7 @@ export class ShortcutRegistry { const shortcut = this.shortcuts.get(shortcutName); if (!shortcut) { - console.warn( - 'Keyboard shortcut with name "' + shortcutName + '" not found.'); + console.warn(`Keyboard shortcut named "${shortcutName}" not found.`); return false; } @@ -110,9 +108,8 @@ export class ShortcutRegistry { keyCode = String(keyCode); const shortcutNames = this.keyMap.get(keyCode); if (shortcutNames && !opt_allowCollision) { - throw new Error( - 'Shortcut with name "' + shortcutName + '" collides with shortcuts ' + - shortcutNames.toString()); + throw new Error(`Shortcut named "${ + shortcutName}" collides with shortcuts "${shortcutNames}"`); } else if (shortcutNames && opt_allowCollision) { shortcutNames.unshift(shortcutName); } else { @@ -138,9 +135,8 @@ export class ShortcutRegistry { if (!shortcutNames) { if (!opt_quiet) { - console.warn( - 'No keyboard shortcut with name "' + shortcutName + - '" registered with key code "' + keyCode + '"'); + console.warn(`No keyboard shortcut named "${ + shortcutName}" registered with key code "${keyCode}"`); } return false; } @@ -154,9 +150,8 @@ export class ShortcutRegistry { return true; } if (!opt_quiet) { - console.warn( - 'No keyboard shortcut with name "' + shortcutName + - '" registered with key code "' + keyCode + '"'); + console.warn(`No keyboard shortcut named "${ + shortcutName}" registered with key code "${keyCode}"`); } return false; } diff --git a/core/theme.ts b/core/theme.ts index 2c544ef7b..c34600233 100644 --- a/core/theme.ts +++ b/core/theme.ts @@ -17,11 +17,11 @@ import * as object from './utils/object.js'; export interface ITheme { - blockStyles: {[key: string]: BlockStyle}; - categoryStyles: {[key: string]: CategoryStyle}; - componentStyles: ComponentStyle; - fontStyle: FontStyle; - startHats: boolean|null; + blockStyles?: {[key: string]: Partial}; + categoryStyles?: {[key: string]: CategoryStyle}; + componentStyles?: ComponentStyle; + fontStyle?: FontStyle; + startHats?: boolean; base?: string|Theme; name: string; } @@ -47,7 +47,7 @@ export class Theme implements ITheme { * * @internal */ - startHats: boolean|null = null; + startHats?: boolean = false; /** * @param name Theme name. @@ -58,7 +58,8 @@ export class Theme implements ITheme { * @param opt_componentStyles A map of Blockly component names to style value. */ constructor( - public name: string, opt_blockStyles?: {[key: string]: BlockStyle}, + public name: string, + opt_blockStyles?: {[key: string]: Partial}, opt_categoryStyles?: {[key: string]: CategoryStyle}, opt_componentStyles?: ComponentStyle) { /** The block styles map. */ @@ -189,7 +190,7 @@ export namespace Theme { colourPrimary: string; colourSecondary: string; colourTertiary: string; - hat?: string; + hat: string; } export interface CategoryStyle { @@ -197,28 +198,28 @@ export namespace Theme { } export interface ComponentStyle { - workspaceBackgroundColour: string|null; - toolboxBackgroundColour: string|null; - toolboxForegroundColour: string|null; - flyoutBackgroundColour: string|null; - flyoutForegroundColour: string|null; - flyoutOpacity: number|null; - scrollbarColour: string|null; - scrollbarOpacity: number|null; - insertionMarkerColour: string|null; - insertionMarkerOpacity: number|null; - markerColour: string|null; - cursorColour: string|null; - selectedGlowColour: string|null; - selectedGlowOpacity: number|null; - replacementGlowColour: string|null; - replacementGlowOpacity: number|null; + workspaceBackgroundColour?: string; + toolboxBackgroundColour?: string; + toolboxForegroundColour?: string; + flyoutBackgroundColour?: string; + flyoutForegroundColour?: string; + flyoutOpacity?: number; + scrollbarColour?: string; + scrollbarOpacity?: number; + insertionMarkerColour?: string; + insertionMarkerOpacity?: number; + markerColour?: string; + cursorColour?: string; + selectedGlowColour?: string; + selectedGlowOpacity?: number; + replacementGlowColour?: string; + replacementGlowOpacity?: number; } export interface FontStyle { - family: string|null; - weight: string|null; - size: number|null; + family?: string; + weight?: string; + size?: number; } } diff --git a/core/theme_manager.ts b/core/theme_manager.ts index 1a7bdd3f0..33fa9f483 100644 --- a/core/theme_manager.ts +++ b/core/theme_manager.ts @@ -15,6 +15,7 @@ goog.declareModuleId('Blockly.ThemeManager'); import type {Theme} from './theme.js'; import * as arrayUtils from './utils/array.js'; +import * as dom from './utils/dom.js'; import type {Workspace} from './workspace.js'; import type {WorkspaceSvg} from './workspace_svg.js'; @@ -62,12 +63,12 @@ export class ThemeManager { if (prevTheme) { const oldClassName = prevTheme.getClassName(); if (oldClassName) { - injectionDiv.classList.remove(oldClassName); + dom.removeClass(injectionDiv, oldClassName); } } const newClassName = this.theme.getClassName(); if (newClassName) { - injectionDiv.classList.add(newClassName); + dom.addClass(injectionDiv, newClassName); } } diff --git a/core/toolbox/category.ts b/core/toolbox/category.ts index dfb40e2c8..9a2c125f6 100644 --- a/core/toolbox/category.ts +++ b/core/toolbox/category.ts @@ -219,7 +219,7 @@ export class ToolboxCategory extends ToolboxItem implements const container = document.createElement('div'); const className = this.cssConfig_['container']; if (className) { - container.classList.add(className); + dom.addClass(container, className); } return container; } @@ -234,7 +234,7 @@ export class ToolboxCategory extends ToolboxItem implements const rowDiv = document.createElement('div'); const className = this.cssConfig_['row']; if (className) { - rowDiv.classList.add(className); + dom.addClass(rowDiv, className); } const nestedPadding = `${ToolboxCategory.nestedPadding * this.getLevel()}px`; @@ -253,7 +253,7 @@ export class ToolboxCategory extends ToolboxItem implements const contentsContainer = document.createElement('div'); const className = this.cssConfig_['rowcontentcontainer']; if (className) { - contentsContainer.classList.add(className); + dom.addClass(contentsContainer, className); } return contentsContainer; } @@ -268,7 +268,7 @@ export class ToolboxCategory extends ToolboxItem implements if (!this.parentToolbox_.isHorizontal()) { const className = this.cssConfig_['icon']; if (className) { - toolboxIcon.classList.add(className); + dom.addClass(toolboxIcon, className); } } @@ -289,7 +289,7 @@ export class ToolboxCategory extends ToolboxItem implements toolboxLabel.textContent = name; const className = this.cssConfig_['label']; if (className) { - toolboxLabel.classList.add(className); + dom.addClass(toolboxLabel, className); } return toolboxLabel; } @@ -420,7 +420,7 @@ export class ToolboxCategory extends ToolboxItem implements } const className = this.cssConfig_['openicon']; if (className) { - iconDiv.classList.add(className); + dom.addClass(iconDiv, className); } } @@ -439,7 +439,7 @@ export class ToolboxCategory extends ToolboxItem implements } const className = this.cssConfig_['closedicon']; if (className) { - iconDiv.classList.add(className); + dom.addClass(iconDiv, className); } } @@ -527,12 +527,12 @@ export class ToolboxCategory extends ToolboxItem implements this.parseColour_(ToolboxCategory.defaultBackgroundColour); this.rowDiv_.style.backgroundColor = this.colour_ || defaultColour; if (className) { - this.rowDiv_.classList.add(className); + dom.addClass(this.rowDiv_, className); } } else { this.rowDiv_.style.backgroundColor = ''; if (className) { - this.rowDiv_.classList.remove(className); + dom.removeClass(this.rowDiv_, className); } } aria.setState(this.htmlDiv_ as Element, aria.State.SELECTED, isSelected); diff --git a/core/toolbox/collapsible_category.ts b/core/toolbox/collapsible_category.ts index 8f7f036bc..1c6ff27fd 100644 --- a/core/toolbox/collapsible_category.ts +++ b/core/toolbox/collapsible_category.ts @@ -17,6 +17,7 @@ import type {IToolbox} from '../interfaces/i_toolbox.js'; import type {IToolboxItem} from '../interfaces/i_toolbox_item.js'; import * as registry from '../registry.js'; import * as aria from '../utils/aria.js'; +import * as dom from '../utils/dom.js'; import * as toolbox from '../utils/toolbox.js'; import {ToolboxCategory} from './category.js'; @@ -142,7 +143,7 @@ export class CollapsibleToolboxCategory extends ToolboxCategory implements if (!this.parentToolbox_.isHorizontal()) { const className = (this.cssConfig_ as AnyDuringMigration)['icon']; if (className) { - toolboxIcon.classList.add(className); + dom.addClass(toolboxIcon, className); } toolboxIcon.style.visibility = 'visible'; } @@ -162,7 +163,7 @@ export class CollapsibleToolboxCategory extends ToolboxCategory implements const contentsContainer = document.createElement('div'); const className = (this.cssConfig_ as AnyDuringMigration)['contents']; if (className) { - contentsContainer.classList.add(className); + dom.addClass(contentsContainer, className); } for (let i = 0; i < subcategories.length; i++) { diff --git a/core/toolbox/separator.ts b/core/toolbox/separator.ts index 5ac71a84e..26fac7e32 100644 --- a/core/toolbox/separator.ts +++ b/core/toolbox/separator.ts @@ -61,7 +61,7 @@ export class ToolboxSeparator extends ToolboxItem { const container = document.createElement('div'); const className = this.cssConfig_['container']; if (className) { - container.classList.add(className); + dom.addClass(container, className); } this.htmlDiv_ = container; return container; diff --git a/core/toolbox/toolbox.ts b/core/toolbox/toolbox.ts index 80d49517b..3c9e3c23b 100644 --- a/core/toolbox/toolbox.ts +++ b/core/toolbox/toolbox.ts @@ -198,8 +198,8 @@ export class Toolbox extends DeleteArea implements IAutoHideable, protected createContainer_(): HTMLDivElement { const toolboxContainer = (document.createElement('div')); toolboxContainer.setAttribute('layout', this.isHorizontal() ? 'h' : 'v'); - toolboxContainer.classList.add('blocklyToolboxDiv'); - toolboxContainer.classList.add('blocklyNonSelectable'); + dom.addClass(toolboxContainer, 'blocklyToolboxDiv'); + dom.addClass(toolboxContainer, 'blocklyNonSelectable'); toolboxContainer.setAttribute('dir', this.RTL ? 'RTL' : 'LTR'); return toolboxContainer; } @@ -211,7 +211,7 @@ export class Toolbox extends DeleteArea implements IAutoHideable, */ protected createContentsContainer_(): HTMLDivElement { const contentsContainer = (document.createElement('div')); - contentsContainer.classList.add('blocklyToolboxContents'); + dom.addClass(contentsContainer, 'blocklyToolboxContents'); if (this.isHorizontal()) { contentsContainer.style.flexDirection = 'row'; } @@ -453,8 +453,8 @@ export class Toolbox extends DeleteArea implements IAutoHideable, * @internal */ addStyle(style: string) { - if (style) { - this.HtmlDiv?.classList.add(style); + if (style && this.HtmlDiv) { + dom.addClass(this.HtmlDiv, style); } } @@ -465,8 +465,8 @@ export class Toolbox extends DeleteArea implements IAutoHideable, * @internal */ removeStyle(style: string) { - if (style) { - this.HtmlDiv?.classList.remove(style); + if (style && this.HtmlDiv) { + dom.removeClass(this.HtmlDiv, style); } } diff --git a/core/tooltip.ts b/core/tooltip.ts index 9cece2c06..498490ee2 100644 --- a/core/tooltip.ts +++ b/core/tooltip.ts @@ -247,7 +247,7 @@ export function bindMouseEvents(element: Element) { * @param element SVG element onto which tooltip is bound. * @alias Blockly.Tooltip.unbindMouseEvents */ -export function unbindMouseEvents(element: Element) { +export function unbindMouseEvents(element: Element|null) { if (!element) { return; } diff --git a/core/touch.ts b/core/touch.ts index 093a8f7ab..2b621bac6 100644 --- a/core/touch.ts +++ b/core/touch.ts @@ -158,20 +158,20 @@ export function shouldHandleEvent(e: Event|PseudoEvent): boolean { * Get the touch identifier from the given event. If it was a mouse event, the * identifier is the string 'mouse'. * - * @param e Mouse event or touch event. - * @returns The touch identifier from the first changed touch, if defined. - * Otherwise 'mouse'. + * @param e Pointer event, mouse event, or touch event. + * @returns The pointerId, or touch identifier from the first changed touch, if + * defined. Otherwise 'mouse'. * @alias Blockly.Touch.getTouchIdentifierFromEvent */ export function getTouchIdentifierFromEvent(e: Event|PseudoEvent): string { - if (e instanceof MouseEvent) { - return 'mouse'; - } - if (e instanceof PointerEvent) { return String(e.pointerId); } + if (e instanceof MouseEvent) { + return 'mouse'; + } + /** * TODO(#6097): Fix types. This is a catch-all for everything but mouse * and pointer events. diff --git a/core/trashcan.ts b/core/trashcan.ts index 742065393..18bd2e370 100644 --- a/core/trashcan.ts +++ b/core/trashcan.ts @@ -552,6 +552,9 @@ export class Trashcan extends DeleteArea implements IAutoHideable, } const deleteEvent = event as BlockDelete; if (event.type === eventUtils.BLOCK_DELETE && !deleteEvent.wasShadow) { + if (!deleteEvent.oldJson) { + throw new Error('Encountered a delete event without proper oldJson'); + } const cleanedJson = JSON.stringify(this.cleanBlockJson_(deleteEvent.oldJson)); if (this.contents_.indexOf(cleanedJson) !== -1) { diff --git a/core/utils.ts b/core/utils.ts index 8a0fd767a..3891d0b21 100644 --- a/core/utils.ts +++ b/core/utils.ts @@ -68,42 +68,13 @@ export { xml, }; -/** - * Halts the propagation of the event without doing anything else. - * - * @param e An event. - * @deprecated - * @alias Blockly.utils.noEvent - */ -export function noEvent(e: Event) { - deprecation.warn('Blockly.utils.noEvent', 'September 2021', 'September 2022'); - // This event has been handled. No need to bubble up to the document. - e.preventDefault(); - e.stopPropagation(); -} - -/** - * Returns true if this event is targeting a text input widget? - * - * @param e An event. - * @returns True if text input. - * @deprecated Use Blockly.browserEvents.isTargetInput instead. - * @alias Blockly.utils.isTargetInput - */ -export function isTargetInput(e: Event): boolean { - deprecation.warn( - 'Blockly.utils.isTargetInput', 'September 2021', 'September 2022', - 'Blockly.browserEvents.isTargetInput'); - return browserEvents.isTargetInput(e); -} - /** * Return the coordinates of the top-left corner of this element relative to * its parent. Only for SVG elements and children (e.g. rect, g, path). * * @param element SVG element to find the coordinates of. * @returns Object with .x and .y properties. - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.getRelativeXY** instead. * @alias Blockly.utils.getRelativeXY */ export function getRelativeXY(element: Element): Coordinate { @@ -120,7 +91,7 @@ export function getRelativeXY(element: Element): Coordinate { * @param element SVG element to find the coordinates of. If this is not a child * of the div Blockly was injected into, the behaviour is undefined. * @returns Object with .x and .y properties. - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.getInjectionDivXY** instead. * @alias Blockly.utils.getInjectionDivXY_ */ function getInjectionDivXY(element: Element): Coordinate { @@ -131,55 +102,6 @@ function getInjectionDivXY(element: Element): Coordinate { } export const getInjectionDivXY_ = getInjectionDivXY; -/** - * Returns true this event is a right-click. - * - * @param e Mouse event. - * @returns True if right-click. - * @deprecated Use Blockly.browserEvents.isRightButton instead. - * @alias Blockly.utils.isRightButton - */ -export function isRightButton(e: Event): boolean { - deprecation.warn( - 'Blockly.utils.isRightButton', 'September 2021', 'September 2022', - 'Blockly.browserEvents.isRightButton'); - return browserEvents.isRightButton(e as MouseEvent); -} - -/** - * Returns the converted coordinates of the given mouse event. - * The origin (0,0) is the top-left corner of the Blockly SVG. - * - * @param e Mouse event. - * @param svg SVG element. - * @param matrix Inverted screen CTM to use. - * @returns Object with .x and .y properties. - * @deprecated Use Blockly.browserEvents.mouseToSvg instead; - * @alias Blockly.utils.mouseToSvg - */ -export function mouseToSvg( - e: Event, svg: SVGSVGElement, matrix: SVGMatrix|null): SVGPoint { - deprecation.warn( - 'Blockly.utils.mouseToSvg', 'September 2021', 'September 2022', - 'Blockly.browserEvents.mouseToSvg'); - return browserEvents.mouseToSvg(e as MouseEvent, svg, matrix); -} - -/** - * Returns the scroll delta of a mouse event in pixel units. - * - * @param e Mouse event. - * @returns Scroll delta object with .x and .y properties. - * @deprecated Use Blockly.browserEvents.getScrollDeltaPixels instead. - * @alias Blockly.utils.getScrollDeltaPixels - */ -export function getScrollDeltaPixels(e: WheelEvent): {x: number, y: number} { - deprecation.warn( - 'Blockly.utils.getScrollDeltaPixels', 'September 2021', 'September 2022', - 'Blockly.browserEvents.getScrollDeltaPixels'); - return browserEvents.getScrollDeltaPixels(e); -} - /** * Parse a string with any number of interpolation tokens (%1, %2, ...). * It will also replace string table references (e.g., %{bky_my_msg} and @@ -190,7 +112,7 @@ export function getScrollDeltaPixels(e: WheelEvent): {x: number, y: number} { * @param message Text which might contain string table references and * interpolation tokens. * @returns Array of strings and numbers. - * @deprecated + * @deprecated Use **Blockly.utils.parsing.tokenizeInterpolation** instead. * @alias Blockly.utils.tokenizeInterpolation */ export function tokenizeInterpolation(message: string): Array { @@ -208,7 +130,7 @@ export function tokenizeInterpolation(message: string): Array { * @param message Message, which may be a string that contains string table * references. * @returns String with message references replaced. - * @deprecated + * @deprecated Use **Blockly.utils.parsing.replaceMessageReferences** instead. * @alias Blockly.utils.replaceMessageReferences */ export function replaceMessageReferences(message: string|any): string { @@ -225,7 +147,7 @@ export function replaceMessageReferences(message: string|any): string { * @param message Text which might contain string table references. * @returns True if all message references have matching values. * Otherwise, false. - * @deprecated + * @deprecated Use **Blockly.utils.parsing.checkMessageReferences** instead. * @alias Blockly.utils.checkMessageReferences */ export function checkMessageReferences(message: string): boolean { @@ -235,26 +157,12 @@ export function checkMessageReferences(message: string): boolean { return parsing.checkMessageReferences(message); } -/** - * Generate a unique ID. - * - * @returns A globally unique ID string. - * @deprecated Use Blockly.utils.idGenerator.genUid instead. - * @alias Blockly.utils.genUid - */ -export function genUid(): string { - deprecation.warn( - 'Blockly.utils.genUid', 'September 2021', 'September 2022', - 'Blockly.utils.idGenerator.genUid'); - return idGenerator.genUid(); -} - /** * Check if 3D transforms are supported by adding an element * and attempting to set the property. * * @returns True if 3D transforms are supported. - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.is3dSupported** instead. * @alias Blockly.utils.is3dSupported */ export function is3dSupported(): boolean { @@ -271,7 +179,7 @@ export function is3dSupported(): boolean { * @returns An object containing window width, height, and scroll position in * window coordinates. * @alias Blockly.utils.getViewportBBox - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.getViewportBBox** instead. * @internal */ export function getViewportBBox(): Rect { @@ -288,12 +196,13 @@ export function getViewportBBox(): Rect { * @param value Value to remove. * @returns True if an element was removed. * @alias Blockly.utils.arrayRemove - * @deprecated + * @deprecated Use **Blockly.array.removeElem** instead. * @internal */ export function arrayRemove(arr: Array, value: T): boolean { deprecation.warn( - 'Blockly.utils.arrayRemove', 'December 2021', 'December 2022'); + 'Blockly.utils.arrayRemove', 'December 2021', 'December 2022', + 'Blockly.array.removeElem'); return arrayUtils.removeElem(arr, value); } @@ -302,7 +211,7 @@ export function arrayRemove(arr: Array, value: T): boolean { * Copied from Closure's goog.dom.getDocumentScroll. * * @returns Object with values 'x' and 'y'. - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.getDocumentScroll** instead. * @alias Blockly.utils.getDocumentScroll */ export function getDocumentScroll(): Coordinate { @@ -320,7 +229,7 @@ export function getDocumentScroll(): Coordinate { * @param opt_stripFollowing Optionally ignore all following statements (blocks * that are not inside a value or statement input of the block). * @returns Map of types to type counts for descendants of the bock. - * @deprecated + * @deprecated Use **Blockly.common.getBlockTypeCounts** instead. * @alias Blockly.utils.getBlockTypeCounts */ export function getBlockTypeCounts( @@ -337,7 +246,7 @@ export function getBlockTypeCounts( * @param ws The workspace to find the coordinates on. * @param screenCoordinates The screen coordinates to be converted to workspace * coordinates - * @deprecated + * @deprecated Use **Blockly.utils.svgMath.screenToWsCoordinates** instead. * @returns The workspace coordinates. */ export function screenToWsCoordinates( @@ -357,7 +266,7 @@ export function screenToWsCoordinates( * @returns An object containing the colour as a #RRGGBB string, and the hue if * the input was an HSV hue value. * @throws {Error} If the colour cannot be parsed. - * @deprecated + * @deprecated Use **Blockly.utils.parsing.parseBlockColour** instead. * @alias Blockly.utils.parseBlockColour */ export function parseBlockColour(colour: number| @@ -373,7 +282,7 @@ export function parseBlockColour(colour: number| * * @param fn Function to run. * @throws Error Will throw if no global document can be found (e.g., Node.js). - * @deprecated + * @deprecated No longer provided by Blockly. * @alias Blockly.utils.runAfterPageLoad */ export function runAfterPageLoad(fn: () => void) { diff --git a/core/utils/coordinate.ts b/core/utils/coordinate.ts index 5d2411a14..80ef56e00 100644 --- a/core/utils/coordinate.ts +++ b/core/utils/coordinate.ts @@ -69,7 +69,7 @@ export class Coordinate { * @param b A Coordinate. * @returns True iff the coordinates are equal, or if both are null. */ - static equals(a: Coordinate|null, b: Coordinate|null): boolean { + static equals(a?: Coordinate|null, b?: Coordinate|null): boolean { if (a === b) { return true; } diff --git a/core/utils/dom.ts b/core/utils/dom.ts index 8a49a3f05..c8e799fe2 100644 --- a/core/utils/dom.ts +++ b/core/utils/dom.ts @@ -85,46 +85,49 @@ export function createSvgElement( /** * Add a CSS class to a element. * + * Handles multiple space-separated classes for legacy reasons. + * * @param element DOM element to add class to. * @param className Name of class to add. * @returns True if class was added, false if already present. * @alias Blockly.utils.dom.addClass */ export function addClass(element: Element, className: string): boolean { - if (element.classList.contains(className)) { + const classNames = className.split(' '); + if (classNames.every((name) => element.classList.contains(name))) { return false; } - element.classList.add(className); + element.classList.add(...classNames); return true; } /** - * Removes multiple calsses from an element. + * Removes multiple classes from an element. * * @param element DOM element to remove classes from. * @param classNames A string of one or multiple class names for an element. * @alias Blockly.utils.dom.removeClasses */ export function removeClasses(element: Element, classNames: string) { - const classList = classNames.split(' '); - for (let i = 0; i < classList.length; i++) { - element.classList.remove(classList[i]); - } + element.classList.remove(...classNames.split(' ')); } /** * Remove a CSS class from a element. * + * Handles multiple space-separated classes for legacy reasons. + * * @param element DOM element to remove class from. * @param className Name of class to remove. * @returns True if class was removed, false if never present. * @alias Blockly.utils.dom.removeClass */ export function removeClass(element: Element, className: string): boolean { - if (!element.classList.contains(className)) { + const classNames = className.split(' '); + if (classNames.every((name) => !element.classList.contains(name))) { return false; } - element.classList.remove(className); + element.classList.remove(...classNames); return true; } diff --git a/core/utils/object.ts b/core/utils/object.ts index e094ec612..708c69905 100644 --- a/core/utils/object.ts +++ b/core/utils/object.ts @@ -21,11 +21,11 @@ import * as deprecation from './deprecation.js'; * @param childCtor Child class. * @param parentCtor Parent class. * @suppress {strictMissingProperties} superClass_ is not defined on Function. + * @deprecated No longer provided by Blockly. * @alias Blockly.utils.object.inherits */ export function inherits(childCtor: Function, parentCtor: Function) { - deprecation.warn( - 'Blockly.utils.object.inherits', 'version 9.0.0', 'version 10.0.0'); + deprecation.warn('Blockly.utils.object.inherits', 'version 9', 'version 10'); // Set a .superClass_ property so that methods can call parent methods // without hard-coding the parent class name. // Could be replaced by ES6's super(). @@ -49,6 +49,7 @@ export function inherits(childCtor: Function, parentCtor: Function) { * * @param target Target. * @param source Source. + * @deprecated Use the built-in **Object.assign** instead. * @alias Blockly.utils.object.mixin */ export function mixin(target: AnyDuringMigration, source: AnyDuringMigration) { @@ -85,11 +86,12 @@ export function deepMerge( * * @param obj Object containing values. * @returns Array of values. + * @deprecated Use the built-in **Object.values** instead. * @alias Blockly.utils.object.values */ export function values(obj: AnyDuringMigration): AnyDuringMigration[] { deprecation.warn( - 'Blockly.utils.object.values', 'version 9.0.0', 'version 10.0.0', + 'Blockly.utils.object.values', 'version 9', 'version 10', 'Object.values'); return Object.values(obj); } diff --git a/core/utils/parsing.ts b/core/utils/parsing.ts index 36452f0d7..3a2fdd611 100644 --- a/core/utils/parsing.ts +++ b/core/utils/parsing.ts @@ -29,8 +29,7 @@ function tokenizeInterpolationInternal( message: string, parseInterpolationTokens: boolean): (string|number)[] { const tokens = []; const chars = message.split(''); - chars.push( // End marker. - ''); + chars.push(''); // End marker. // Parse the message with a finite state machine. // 0 - Base case. // 1 - % found. diff --git a/core/utils/string.ts b/core/utils/string.ts index c95def9ae..35856f354 100644 --- a/core/utils/string.ts +++ b/core/utils/string.ts @@ -25,7 +25,7 @@ import * as deprecation from './deprecation.js'; * @param prefix A string to look for at the start of `str`. * @returns True if `str` begins with `prefix`. * @alias Blockly.utils.string.startsWith - * @deprecated April 2022. Use built-in string.startsWith. + * @deprecated Use built-in **string.startsWith** instead. */ export function startsWith(str: string, prefix: string): boolean { deprecation.warn( diff --git a/core/utils/style.ts b/core/utils/style.ts index 6ec94bd58..dbe6f9020 100644 --- a/core/utils/style.ts +++ b/core/utils/style.ts @@ -103,12 +103,12 @@ export function getComputedStyle(element: Element, property: string): string { * @param element Element to get style of. * @param style Property to get (camel-case). * @returns Style value. + * @deprecated No longer provided by Blockly. * @alias Blockly.utils.style.getCascadedStyle */ export function getCascadedStyle(element: Element, style: string): string { deprecation.warn( - 'Blockly.utils.style.getCascadedStyle', 'version 9.0.0', - 'version 10.0.0'); + 'Blockly.utils.style.getCascadedStyle', 'version 9', 'version 10'); // AnyDuringMigration because: Property 'currentStyle' does not exist on type // 'Element'. AnyDuringMigration because: Property 'currentStyle' does not // exist on type 'Element'. diff --git a/core/utils/svg_math.ts b/core/utils/svg_math.ts index 4f16332d7..60820c915 100644 --- a/core/utils/svg_math.ts +++ b/core/utils/svg_math.ts @@ -17,7 +17,6 @@ import type {WorkspaceSvg} from '../workspace_svg.js'; import {Coordinate} from './coordinate.js'; import * as deprecation from './deprecation.js'; import {Rect} from './rect.js'; -import {Size} from './size.js'; import * as style from './style.js'; @@ -114,12 +113,13 @@ export function getInjectionDivXY(element: Element): Coordinate { * and attempting to set the property. * * @returns True if 3D transforms are supported. + * @deprecated No longer provided by Blockly. * @alias Blockly.utils.svgMath.is3dSupported */ export function is3dSupported(): boolean { // All browsers support translate3d in 2022. deprecation.warn( - 'Blockly.utils.svgMath.is3dSupported', 'version 9.0.0', 'version 10.0.0'); + 'Blockly.utils.svgMath.is3dSupported', 'version 9', 'version 10'); return true; } @@ -191,28 +191,6 @@ export function screenToWsCoordinates( return finalOffsetMainWs; } -/** - * Returns the dimensions of the specified SVG image. - * - * @param svg SVG image. - * @returns Contains width and height properties. - * @deprecated Use workspace.getCachedParentSvgSize. (2021 March 5) - * @alias Blockly.utils.svgMath.svgSize - */ -export function svgSize(svg: SVGElement): Size { - // When removing this function, remove svg.cachedWidth_ and svg.cachedHeight_ - // from setCachedParentSvgSize. - // The deprecated name is `Blockly.svgSize` because this function used to be - // declared in Blockly.js. - deprecation.warn( - 'Blockly.svgSize', 'March 2021', 'March 2022', - 'workspace.getCachedParentSvgSize'); - svg = svg as AnyDuringMigration; - return new Size( - Number(svg.getAttribute('data-cached-width')), - Number(svg.getAttribute('data-cached-height'))); -} - export const TEST_ONLY = { XY_REGEX, XY_STYLE_REGEX, diff --git a/core/warning.ts b/core/warning.ts index d02eba5b8..7e207cf4e 100644 --- a/core/warning.ts +++ b/core/warning.ts @@ -89,7 +89,7 @@ export class Warning extends Icon { return; } eventUtils.fire(new (eventUtils.get(eventUtils.BUBBLE_OPEN))( - this.block_, visible, 'warning')); + this.getBlock(), visible, 'warning')); if (visible) { this.createBubble_(); } else { @@ -101,7 +101,7 @@ export class Warning extends Icon { private createBubble_() { this.paragraphElement_ = Bubble.textToDom(this.getText()); this.bubble_ = Bubble.createNonEditableBubble( - this.paragraphElement_, this.block_, this.iconXY_ as Coordinate); + this.paragraphElement_, this.getBlock(), this.iconXY_ as Coordinate); this.applyColour(); } @@ -151,7 +151,7 @@ export class Warning extends Icon { /** Dispose of this warning. */ override dispose() { - this.block_.warning = null; + this.getBlock().warning = null; super.dispose(); } } diff --git a/core/widgetdiv.ts b/core/widgetdiv.ts index 2b21487ad..1ca04092f 100644 --- a/core/widgetdiv.ts +++ b/core/widgetdiv.ts @@ -15,6 +15,7 @@ import * as goog from '../closure/goog/goog.js'; goog.declareModuleId('Blockly.WidgetDiv'); import * as common from './common.js'; +import * as dom from './utils/dom.js'; import type {Rect} from './utils/rect.js'; import type {Size} from './utils/size.js'; import type {WorkspaceSvg} from './workspace_svg.js'; @@ -93,10 +94,10 @@ export function show(newOwner: unknown, rtl: boolean, newDispose: () => void) { rendererClassName = mainWorkspace.getRenderer().getClassName(); themeClassName = mainWorkspace.getTheme().getClassName(); if (rendererClassName) { - div.classList.add(rendererClassName); + dom.addClass(div, rendererClassName); } if (themeClassName) { - div.classList.add(themeClassName); + dom.addClass(div, themeClassName); } } @@ -121,11 +122,11 @@ export function hide() { div.textContent = ''; if (rendererClassName) { - div.classList.remove(rendererClassName); + dom.removeClass(div, rendererClassName); rendererClassName = ''; } if (themeClassName) { - div.classList.remove(themeClassName); + dom.removeClass(div, themeClassName); themeClassName = ''; } (common.getMainWorkspace() as WorkspaceSvg).markFocused(); diff --git a/core/workspace.ts b/core/workspace.ts index 2560b8744..0602fa834 100644 --- a/core/workspace.ts +++ b/core/workspace.ts @@ -32,6 +32,8 @@ import type * as toolbox from './utils/toolbox.js'; import {VariableMap} from './variable_map.js'; import type {VariableModel} from './variable_model.js'; import type {WorkspaceComment} from './workspace_comment.js'; +import {IProcedureMap} from './interfaces/i_procedure_map.js'; +import {ObservableProcedureMap} from './procedures.js'; /** @@ -101,15 +103,16 @@ export class Workspace implements IASTNodeLocation { connectionDBList: ConnectionDB[] = []; connectionChecker: IConnectionChecker; - private readonly topBlocks_: Block[] = []; - private readonly topComments_: WorkspaceComment[] = []; + private readonly topBlocks: Block[] = []; + private readonly topComments: WorkspaceComment[] = []; private readonly commentDB = new Map(); - private readonly listeners_: Function[] = []; + private readonly listeners: Function[] = []; protected undoStack_: Abstract[] = []; protected redoStack_: Abstract[] = []; private readonly blockDB = new Map(); private readonly typedBlocksDB = new Map(); - private variableMap_: VariableMap; + private variableMap: VariableMap; + private procedureMap: IProcedureMap = new ObservableProcedureMap(this); /** * Blocks in the flyout can refer to variables that don't exist in the main @@ -119,7 +122,7 @@ export class Workspace implements IASTNodeLocation { * these by tracking "potential" variables in the flyout. These variables * become real when references to them are dragged into the main workspace. */ - private potentialVariableMap_: VariableMap|null = null; + private potentialVariableMap: VariableMap|null = null; /** @param opt_options Dictionary of options. */ constructor(opt_options?: Options) { @@ -142,7 +145,7 @@ export class Workspace implements IASTNodeLocation { * all of the named variables in the workspace, including variables that are * not currently in use. */ - this.variableMap_ = new VariableMap(this); + this.variableMap = new VariableMap(this); } /** @@ -152,7 +155,7 @@ export class Workspace implements IASTNodeLocation { * @suppress {checkTypes} */ dispose() { - this.listeners_.length = 0; + this.listeners.length = 0; this.clear(); // Remove from workspace database. common.unregisterWorkpace(this); @@ -193,7 +196,7 @@ export class Workspace implements IASTNodeLocation { * @param block Block to add. */ addTopBlock(block: Block) { - this.topBlocks_.push(block); + this.topBlocks.push(block); } /** @@ -202,7 +205,7 @@ export class Workspace implements IASTNodeLocation { * @param block Block to remove. */ removeTopBlock(block: Block) { - if (!arrayUtils.removeElem(this.topBlocks_, block)) { + if (!arrayUtils.removeElem(this.topBlocks, block)) { throw Error('Block not present in workspace\'s list of top-most blocks.'); } } @@ -215,8 +218,8 @@ export class Workspace implements IASTNodeLocation { * @returns The top-level block objects. */ getTopBlocks(ordered: boolean): Block[] { - // Copy the topBlocks_ list. - const blocks = (new Array()).concat(this.topBlocks_); + // Copy the topBlocks list. + const blocks = (new Array()).concat(this.topBlocks); if (ordered && blocks.length > 1) { // AnyDuringMigration because: Property 'offset' does not exist on type // '(a: Block | WorkspaceComment, b: Block | WorkspaceComment) => number'. @@ -296,7 +299,7 @@ export class Workspace implements IASTNodeLocation { * @internal */ addTopComment(comment: WorkspaceComment) { - this.topComments_.push(comment); + this.topComments.push(comment); // Note: If the comment database starts to hold block comments, this may // need to move to a separate function. @@ -315,7 +318,7 @@ export class Workspace implements IASTNodeLocation { * @internal */ removeTopComment(comment: WorkspaceComment) { - if (!arrayUtils.removeElem(this.topComments_, comment)) { + if (!arrayUtils.removeElem(this.topComments, comment)) { throw Error( 'Comment not present in workspace\'s list of top-most ' + 'comments.'); @@ -334,8 +337,8 @@ export class Workspace implements IASTNodeLocation { * @internal */ getTopComments(ordered: boolean): WorkspaceComment[] { - // Copy the topComments_ list. - const comments = (new Array()).concat(this.topComments_); + // Copy the topComments list. + const comments = (new Array()).concat(this.topComments); if (ordered && comments.length > 1) { // AnyDuringMigration because: Property 'offset' does not exist on type // '(a: Block | WorkspaceComment, b: Block | WorkspaceComment) => number'. @@ -393,18 +396,18 @@ export class Workspace implements IASTNodeLocation { if (!existingGroup) { eventUtils.setGroup(true); } - while (this.topBlocks_.length) { - this.topBlocks_[0].dispose(false); + while (this.topBlocks.length) { + this.topBlocks[0].dispose(false); } - while (this.topComments_.length) { - this.topComments_[this.topComments_.length - 1].dispose(); + while (this.topComments.length) { + this.topComments[this.topComments.length - 1].dispose(); } if (!existingGroup) { eventUtils.setGroup(false); } - this.variableMap_.clear(); - if (this.potentialVariableMap_) { - this.potentialVariableMap_.clear(); + this.variableMap.clear(); + if (this.potentialVariableMap) { + this.potentialVariableMap.clear(); } } finally { this.isClearing = false; @@ -420,7 +423,7 @@ export class Workspace implements IASTNodeLocation { * @param newName New variable name. */ renameVariableById(id: string, newName: string) { - this.variableMap_.renameVariableById(id, newName); + this.variableMap.renameVariableById(id, newName); } /** @@ -436,7 +439,7 @@ export class Workspace implements IASTNodeLocation { */ createVariable(name: string, opt_type?: string|null, opt_id?: string|null): VariableModel { - return this.variableMap_.createVariable(name, opt_type, opt_id); + return this.variableMap.createVariable(name, opt_type, opt_id); } /** @@ -446,7 +449,7 @@ export class Workspace implements IASTNodeLocation { * @returns Array of block usages. */ getVariableUsesById(id: string): Block[] { - return this.variableMap_.getVariableUsesById(id); + return this.variableMap.getVariableUsesById(id); } /** @@ -456,7 +459,7 @@ export class Workspace implements IASTNodeLocation { * @param id ID of variable to delete. */ deleteVariableById(id: string) { - this.variableMap_.deleteVariableById(id); + this.variableMap.deleteVariableById(id); } /** @@ -470,7 +473,7 @@ export class Workspace implements IASTNodeLocation { */ getVariable(name: string, opt_type?: string): VariableModel|null { // TODO (#1559): Possibly delete this function after resolving #1559. - return this.variableMap_.getVariable(name, opt_type); + return this.variableMap.getVariable(name, opt_type); } /** @@ -480,7 +483,7 @@ export class Workspace implements IASTNodeLocation { * @returns The variable with the given ID. */ getVariableById(id: string): VariableModel|null { - return this.variableMap_.getVariableById(id); + return this.variableMap.getVariableById(id); } /** @@ -492,7 +495,7 @@ export class Workspace implements IASTNodeLocation { * if none are found. */ getVariablesOfType(type: string|null): VariableModel[] { - return this.variableMap_.getVariablesOfType(type); + return this.variableMap.getVariablesOfType(type); } /** @@ -502,7 +505,7 @@ export class Workspace implements IASTNodeLocation { * @internal */ getVariableTypes(): string[] { - return this.variableMap_.getVariableTypes(this); + return this.variableMap.getVariableTypes(this); } /** @@ -511,7 +514,7 @@ export class Workspace implements IASTNodeLocation { * @returns List of variable models. */ getAllVariables(): VariableModel[] { - return this.variableMap_.getAllVariables(); + return this.variableMap.getAllVariables(); } /** @@ -520,7 +523,7 @@ export class Workspace implements IASTNodeLocation { * @returns List of all variable names of all types. */ getAllVariableNames(): string[] { - return this.variableMap_.getAllVariableNames(); + return this.variableMap.getAllVariableNames(); } /* End functions that are just pass-throughs to the variable map. */ /** @@ -697,7 +700,7 @@ export class Workspace implements IASTNodeLocation { * @returns Obsolete return value, ignore. */ addChangeListener(func: Function): Function { - this.listeners_.push(func); + this.listeners.push(func); return func; } @@ -707,7 +710,7 @@ export class Workspace implements IASTNodeLocation { * @param func Function to stop calling. */ removeChangeListener(func: Function) { - arrayUtils.removeElem(this.listeners_, func); + arrayUtils.removeElem(this.listeners, func); } /** @@ -723,8 +726,8 @@ export class Workspace implements IASTNodeLocation { this.undoStack_.shift(); } } - for (let i = 0; i < this.listeners_.length; i++) { - const func = this.listeners_[i]; + for (let i = 0; i < this.listeners.length; i++) { + const func = this.listeners[i]; func(event); } } @@ -798,7 +801,7 @@ export class Workspace implements IASTNodeLocation { * @internal */ getPotentialVariableMap(): VariableMap|null { - return this.potentialVariableMap_; + return this.potentialVariableMap; } /** @@ -807,7 +810,7 @@ export class Workspace implements IASTNodeLocation { * @internal */ createPotentialVariableMap() { - this.potentialVariableMap_ = new VariableMap(this); + this.potentialVariableMap = new VariableMap(this); } /** @@ -816,7 +819,7 @@ export class Workspace implements IASTNodeLocation { * @returns The variable map. */ getVariableMap(): VariableMap { - return this.variableMap_; + return this.variableMap; } /** @@ -826,7 +829,12 @@ export class Workspace implements IASTNodeLocation { * @internal */ setVariableMap(variableMap: VariableMap) { - this.variableMap_ = variableMap; + this.variableMap = variableMap; + } + + /** Returns the map of all procedures on the workpace. */ + getProcedureMap(): IProcedureMap { + return this.procedureMap; } /** diff --git a/core/workspace_comment_svg.ts b/core/workspace_comment_svg.ts index 2c1d4e025..1af608b41 100644 --- a/core/workspace_comment_svg.ts +++ b/core/workspace_comment_svg.ts @@ -263,7 +263,7 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements * @internal */ addSelect() { - this.svgGroup_.classList.add('blocklySelected'); + dom.addClass(this.svgGroup_, 'blocklySelected'); this.setFocus(); } @@ -273,7 +273,7 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements * @internal */ removeSelect() { - this.svgGroup_.classList.add('blocklySelected'); + dom.addClass(this.svgGroup_, 'blocklySelected'); this.blurFocus(); } @@ -283,7 +283,7 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements * @internal */ addFocus() { - this.svgGroup_.classList.add('blocklyFocused'); + dom.addClass(this.svgGroup_, 'blocklyFocused'); } /** @@ -292,7 +292,7 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements * @internal */ removeFocus() { - this.svgGroup_.classList.remove('blocklyFocused'); + dom.removeClass(this.svgGroup_, 'blocklyFocused'); } /** @@ -473,9 +473,9 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements */ updateMovable() { if (this.isMovable()) { - this.svgGroup_.classList.add('blocklyDraggable'); + dom.addClass(this.svgGroup_, 'blocklyDraggable'); } else { - this.svgGroup_.classList.remove('blocklyDraggable'); + dom.removeClass(this.svgGroup_, 'blocklyDraggable'); } } @@ -514,9 +514,9 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements const group = this.getSvgRoot(); (group as AnyDuringMigration).translate_ = ''; (group as AnyDuringMigration).skew_ = ''; - this.svgGroup_.classList.add('blocklyDragging'); + dom.addClass(this.svgGroup_, 'blocklyDragging'); } else { - this.svgGroup_.classList.remove('blocklyDragging'); + dom.removeClass(this.svgGroup_, 'blocklyDragging'); } } @@ -561,9 +561,9 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements */ setDeleteStyle(enable: boolean) { if (enable) { - this.svgGroup_.classList.add('blocklyDraggingDelete'); + dom.addClass(this.svgGroup_, 'blocklyDraggingDelete'); } else { - this.svgGroup_.classList.remove('blocklyDraggingDelete'); + dom.removeClass(this.svgGroup_, 'blocklyDraggingDelete'); } } @@ -853,7 +853,9 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements */ private deleteMouseDown_(e: Event) { // Highlight the delete icon. - this.deleteIconBorder_?.classList.add('blocklyDeleteIconHighlighted'); + if (this.deleteIconBorder_) { + dom.addClass(this.deleteIconBorder_, 'blocklyDeleteIconHighlighted'); + } // This event has been handled. No need to bubble up to the document. e.stopPropagation(); } @@ -865,7 +867,9 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements */ private deleteMouseOut_(_e: Event) { // Restore highlight on the delete icon. - this.deleteIconBorder_?.classList.remove('blocklyDeleteIconHighlighted'); + if (this.deleteIconBorder_) { + dom.removeClass(this.deleteIconBorder_, 'blocklyDeleteIconHighlighted'); + } } /** @@ -1016,8 +1020,13 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements } this.textarea_!.focus(); this.addFocus(); - this.svgRectTarget_?.classList.add('blocklyCommentTargetFocused'); - this.svgHandleTarget_?.classList.add('blocklyCommentHandleTargetFocused'); + if (this.svgRectTarget_) { + dom.addClass(this.svgRectTarget_, 'blocklyCommentTargetFocused'); + } + if (this.svgHandleTarget_) { + dom.addClass( + this.svgHandleTarget_, 'blocklyCommentHandleTargetFocused'); + } }, 0); } @@ -1036,9 +1045,13 @@ export class WorkspaceCommentSvg extends WorkspaceComment implements this.textarea_!.blur(); this.removeFocus(); - this.svgRectTarget_?.classList.remove('blocklyCommentTargetFocused'); - this.svgHandleTarget_?.classList.remove( - 'blocklyCommentHandleTargetFocused'); + if (this.svgRectTarget_) { + dom.removeClass(this.svgRectTarget_, 'blocklyCommentTargetFocused'); + } + if (this.svgHandleTarget_) { + dom.removeClass( + this.svgHandleTarget_, 'blocklyCommentHandleTargetFocused'); + } }, 0); } diff --git a/core/workspace_svg.ts b/core/workspace_svg.ts index 415b7a23e..551b60476 100644 --- a/core/workspace_svg.ts +++ b/core/workspace_svg.ts @@ -58,7 +58,6 @@ import {ThemeManager} from './theme_manager.js'; import * as Tooltip from './tooltip.js'; import {TouchGesture} from './touch_gesture.js'; import type {Trashcan} from './trashcan.js'; -import * as utils from './utils.js'; import * as arrayUtils from './utils/array.js'; import {Coordinate} from './utils/coordinate.js'; import * as dom from './utils/dom.js'; @@ -97,7 +96,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * A wrapper function called when a resize event occurs. * You can pass the result to `eventHandling.unbind`. */ - private resizeHandlerWrapper_: browserEvents.Data|null = null; + private resizeHandlerWrapper: browserEvents.Data|null = null; /** * The render status of an SVG workspace. @@ -116,7 +115,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * Whether this workspace has resizes enabled. * Disable during batch operations for a performance improvement. */ - private resizesEnabled_ = true; + private resizesEnabled = true; /** * Current horizontal scrolling offset in pixel units, relative to the @@ -189,19 +188,19 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { startScrollY = 0; /** Distance from mouse to object being dragged. */ - private dragDeltaXY_: Coordinate|null = null; + private dragDeltaXY: Coordinate|null = null; /** Current scale. */ scale = 1; /** Cached scale value. Used to detect changes in viewport. */ - private oldScale_ = 1; + private oldScale = 1; /** Cached viewport top value. Used to detect changes in viewport. */ - private oldTop_ = 0; + private oldTop = 0; /** Cached viewport left value. Used to detect changes in viewport. */ - private oldLeft_ = 0; + private oldLeft = 0; /** The workspace's trashcan (if any). */ trashcan: Trashcan|null = null; @@ -212,7 +211,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { /** * Fixed flyout providing blocks which may be dragged into this workspace. */ - private flyout_: IFlyout|null = null; + private flyout: IFlyout|null = null; /** * Category-based toolbox providing blocks which may be dragged into this @@ -228,16 +227,16 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { currentGesture_: TouchGesture|null = null; /** This workspace's surface for dragging blocks, if it exists. */ - private readonly blockDragSurface_: BlockDragSurfaceSvg|null = null; + private readonly blockDragSurface: BlockDragSurfaceSvg|null = null; /** This workspace's drag surface, if it exists. */ - private readonly workspaceDragSurface_: WorkspaceDragSurfaceSvg|null = null; + private readonly workspaceDragSurface: WorkspaceDragSurfaceSvg|null = null; /** * Whether to move workspace to the drag surface when it is dragged. * True if it should move, false if it should be translated directly. */ - private readonly useWorkspaceDragSurface_; + private readonly useWorkspaceDragSurface; /** * Whether the drag surface is actively in use. When true, calls to @@ -245,20 +244,20 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * workspace directly. * This is set to true in setupDragSurface and to false in resetDragSurface. */ - private isDragSurfaceActive_ = false; + private isDragSurfaceActive = false; /** * The first parent div with 'injectionDiv' in the name, or null if not set. * Access this with getInjectionDiv. */ - private injectionDiv_: Element|null = null; + private injectionDiv: Element|null = null; /** * Last known position of the page scroll. * This is used to determine whether we have recalculated screen coordinate * stuff since the page scrolled. */ - private lastRecordedPageScroll_: Coordinate|null = null; + private lastRecordedPageScroll: Coordinate|null = null; /** * Developers may define this function to add custom menu options to the @@ -280,25 +279,25 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { targetWorkspace: WorkspaceSvg|null = null; /** Inverted screen CTM, for use in mouseToSvg. */ - private inverseScreenCTM_: SVGMatrix|null = null; + private inverseScreenCTM: SVGMatrix|null = null; /** Inverted screen CTM is dirty, recalculate it. */ - private inverseScreenCTMDirty_ = true; - private metricsManager_: IMetricsManager; + private inverseScreenCTMDirty = true; + private metricsManager: IMetricsManager; /** @internal */ getMetrics: () => Metrics; /** @internal */ setMetrics: (p1: {x?: number, y?: number}) => void; - private readonly componentManager_: ComponentManager; + private readonly componentManager: ComponentManager; /** * List of currently highlighted blocks. Block highlighting is often used * to visually mark blocks currently being executed. */ - private readonly highlightedBlocks_: BlockSvg[] = []; - private audioManager_: WorkspaceAudio; - private grid_: Grid|null; - private markerManager_: MarkerManager; + private readonly highlightedBlocks: BlockSvg[] = []; + private audioManager: WorkspaceAudio; + private grid: Grid|null; + private markerManager: MarkerManager; /** * Map from function names to callbacks, for deciding what to do when a @@ -313,21 +312,21 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { */ private flyoutButtonCallbacks = new Map void>(); protected themeManager_: ThemeManager; - private readonly renderer_: Renderer; + private readonly renderer: Renderer; /** Cached parent SVG. */ - private cachedParentSvg_: SVGElement|null = null; + private cachedParentSvg: SVGElement|null = null; /** True if keyboard accessibility mode is on, false otherwise. */ keyboardAccessibilityMode = false; /** The list of top-level bounded elements on the workspace. */ - private topBoundedElements_: IBoundedElement[] = []; + private topBoundedElements: IBoundedElement[] = []; /** The recorded drag targets. */ - private dragTargetAreas_: Array<{component: IDragTarget, clientRect: Rect}> = + private dragTargetAreas: Array<{component: IDragTarget, clientRect: Rect}> = []; - private readonly cachedParentSvgSize_: Size; + private readonly cachedParentSvgSize: Size; // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. svgGroup_!: SVGElement; // TODO(b/109816955): remove '!', see go/strict-prop-init-fix. @@ -351,43 +350,43 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { const MetricsManagerClass = registry.getClassFromOptions( registry.Type.METRICS_MANAGER, options, true); /** Object in charge of calculating metrics for the workspace. */ - this.metricsManager_ = new MetricsManagerClass!(this); + this.metricsManager = new MetricsManagerClass!(this); /** Method to get all the metrics that have to do with a workspace. */ this.getMetrics = options.getMetrics || - this.metricsManager_.getMetrics.bind(this.metricsManager_); + this.metricsManager.getMetrics.bind(this.metricsManager); /** Translates the workspace. */ this.setMetrics = options.setMetrics || WorkspaceSvg.setTopLevelWorkspaceMetrics_; - this.componentManager_ = new ComponentManager(); + this.componentManager = new ComponentManager(); this.connectionDBList = ConnectionDB.init(this.connectionChecker); if (opt_blockDragSurface) { - this.blockDragSurface_ = opt_blockDragSurface; + this.blockDragSurface = opt_blockDragSurface; } if (opt_wsDragSurface) { - this.workspaceDragSurface_ = opt_wsDragSurface; + this.workspaceDragSurface = opt_wsDragSurface; } - this.useWorkspaceDragSurface_ = !!this.workspaceDragSurface_; + this.useWorkspaceDragSurface = !!this.workspaceDragSurface; /** * Object in charge of loading, storing, and playing audio for a workspace. */ - this.audioManager_ = + this.audioManager = new WorkspaceAudio((options.parentWorkspace as WorkspaceSvg)); /** This workspace's grid object or null. */ - this.grid_ = this.options.gridPattern ? + this.grid = this.options.gridPattern ? new Grid(this.options.gridPattern, options.gridOptions) : null; /** Manager in charge of markers and cursors. */ - this.markerManager_ = new MarkerManager(this); + this.markerManager = new MarkerManager(this); if (Variables && Variables.flyoutCategory) { this.registerToolboxCategoryCallback( @@ -412,7 +411,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.themeManager_.subscribeWorkspace(this); /** The block renderer used for rendering blocks on this workspace. */ - this.renderer_ = blockRendering.init( + this.renderer = blockRendering.init( this.options.renderer || 'geras', this.getTheme(), this.options.rendererOverrides ?? undefined); @@ -420,7 +419,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * The cached size of the parent svg element. * Used to compute svg metrics. */ - this.cachedParentSvgSize_ = new Size(0, 0); + this.cachedParentSvgSize = new Size(0, 0); } /** @@ -429,7 +428,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The marker manager. */ getMarkerManager(): MarkerManager { - return this.markerManager_; + return this.markerManager; } /** @@ -438,7 +437,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The metrics manager. */ getMetricsManager(): IMetricsManager { - return this.metricsManager_; + return this.metricsManager; } /** @@ -448,9 +447,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ setMetricsManager(metricsManager: IMetricsManager) { - this.metricsManager_ = metricsManager; - this.getMetrics = - this.metricsManager_.getMetrics.bind(this.metricsManager_); + this.metricsManager = metricsManager; + this.getMetrics = this.metricsManager.getMetrics.bind(this.metricsManager); } /** @@ -459,7 +457,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The component manager. */ getComponentManager(): ComponentManager { - return this.componentManager_; + return this.componentManager; } /** @@ -470,7 +468,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ setCursorSvg(cursorSvg: SVGElement) { - this.markerManager_.setCursorSvg(cursorSvg); + this.markerManager.setCursorSvg(cursorSvg); } /** @@ -481,7 +479,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ setMarkerSvg(markerSvg: SVGElement) { - this.markerManager_.setMarkerSvg(markerSvg); + this.markerManager.setMarkerSvg(markerSvg); } /** @@ -493,8 +491,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ getMarker(id: string): Marker|null { - if (this.markerManager_) { - return this.markerManager_.getMarker(id); + if (this.markerManager) { + return this.markerManager.getMarker(id); } return null; } @@ -505,8 +503,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The cursor for the workspace. */ getCursor(): Cursor|null { - if (this.markerManager_) { - return this.markerManager_.getCursor(); + if (this.markerManager) { + return this.markerManager.getCursor(); } return null; } @@ -517,7 +515,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The renderer attached to this workspace. */ getRenderer(): Renderer { - return this.renderer_; + return this.renderer; } /** @@ -557,7 +555,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { */ refreshTheme() { if (this.svgGroup_) { - this.renderer_.refreshDom(this.svgGroup_, this.getTheme()); + this.renderer.refreshDom(this.svgGroup_, this.getTheme()); } // Update all blocks in workspace that have a style name. @@ -607,20 +605,20 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { getInverseScreenCTM(): SVGMatrix|null { // Defer getting the screen CTM until we actually need it, this should // avoid forced reflows from any calls to updateInverseScreenCTM. - if (this.inverseScreenCTMDirty_) { + if (this.inverseScreenCTMDirty) { const ctm = this.getParentSvg().getScreenCTM(); if (ctm) { - this.inverseScreenCTM_ = (ctm).inverse(); - this.inverseScreenCTMDirty_ = false; + this.inverseScreenCTM = (ctm).inverse(); + this.inverseScreenCTMDirty = false; } } - return this.inverseScreenCTM_; + return this.inverseScreenCTM; } /** Mark the inverse screen CTM as dirty. */ updateInverseScreenCTM() { - this.inverseScreenCTMDirty_ = true; + this.inverseScreenCTMDirty = true; } /** @@ -672,7 +670,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ getCachedParentSvgSize(): Size { - const size = this.cachedParentSvgSize_; + const size = this.cachedParentSvgSize; return new Size(size.width, size.height); } @@ -701,18 +699,18 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { getInjectionDiv(): Element { // NB: it would be better to pass this in at createDom, but is more likely // to break existing uses of Blockly. - if (!this.injectionDiv_) { + if (!this.injectionDiv) { let element: Element = this.svgGroup_; while (element) { const classes = element.getAttribute('class') || ''; if ((' ' + classes + ' ').indexOf(' injectionDiv ') !== -1) { - this.injectionDiv_ = element; + this.injectionDiv = element; break; } element = element.parentNode as Element; } } - return this.injectionDiv_!; + return this.injectionDiv!; } /** @@ -731,7 +729,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @param handler Data that can be passed to eventHandling.unbind. */ setResizeHandlerWrapper(handler: browserEvents.Data) { - this.resizeHandlerWrapper_ = handler; + this.resizeHandlerWrapper = handler; } /** @@ -761,9 +759,9 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { {'height': '100%', 'width': '100%', 'class': opt_backgroundClass}, this.svgGroup_); - if (opt_backgroundClass === 'blocklyMainBackground' && this.grid_) { + if (opt_backgroundClass === 'blocklyMainBackground' && this.grid) { this.svgBackground_.style.fill = - 'url(#' + this.grid_.getPatternId() + ')'; + 'url(#' + this.grid.getPatternId() + ')'; } else { this.themeManager_.subscribe( this.svgBackground_, 'workspaceBackgroundColour', 'fill'); @@ -792,16 +790,16 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { registry.Type.TOOLBOX, this.options, true); this.toolbox_ = new ToolboxClass!(this); } - if (this.grid_) { - this.grid_.update(this.scale); + if (this.grid) { + this.grid.update(this.scale); } this.recordDragTargets(); const CursorClass = registry.getClassFromOptions(registry.Type.CURSOR, this.options); - CursorClass && this.markerManager_.setCursor(new CursorClass()); + CursorClass && this.markerManager.setCursor(new CursorClass()); - this.renderer_.createDom(this.svgGroup_, this.getTheme()); + this.renderer.createDom(this.svgGroup_, this.getTheme()); return this.svgGroup_; } @@ -824,9 +822,9 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.toolbox_.dispose(); this.toolbox_ = null; } - if (this.flyout_) { - this.flyout_.dispose(); - this.flyout_ = null; + if (this.flyout) { + this.flyout.dispose(); + this.flyout = null; } if (this.trashcan) { this.trashcan.dispose(); @@ -840,18 +838,18 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.zoomControls_.dispose(); } - if (this.audioManager_) { - this.audioManager_.dispose(); + if (this.audioManager) { + this.audioManager.dispose(); } - if (this.grid_) { - this.grid_ = null; + if (this.grid) { + this.grid = null; } - this.renderer_.dispose(); + this.renderer.dispose(); - if (this.markerManager_) { - this.markerManager_.dispose(); + if (this.markerManager) { + this.markerManager.dispose(); } super.dispose(); @@ -878,9 +876,9 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { dom.removeNode(parentSvg.parentNode); } } - if (this.resizeHandlerWrapper_) { - browserEvents.unbind(this.resizeHandlerWrapper_); - this.resizeHandlerWrapper_ = null; + if (this.resizeHandlerWrapper) { + browserEvents.unbind(this.resizeHandlerWrapper); + this.resizeHandlerWrapper = null; } } @@ -939,19 +937,19 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { if (this.horizontalLayout) { const HorizontalFlyout = registry.getClassFromOptions( registry.Type.FLYOUTS_HORIZONTAL_TOOLBOX, this.options, true); - this.flyout_ = new HorizontalFlyout!(workspaceOptions); + this.flyout = new HorizontalFlyout!(workspaceOptions); } else { const VerticalFlyout = registry.getClassFromOptions( registry.Type.FLYOUTS_VERTICAL_TOOLBOX, this.options, true); - this.flyout_ = new VerticalFlyout!(workspaceOptions); + this.flyout = new VerticalFlyout!(workspaceOptions); } - this.flyout_.autoClose = false; - this.flyout_.getWorkspace().setVisible(true); + this.flyout.autoClose = false; + this.flyout.getWorkspace().setVisible(true); // Return the element so that callers can place it in their desired // spot in the DOM. For example, mutator flyouts do not go in the same // place as main workspace flyouts. - return this.flyout_.createDom(tagName); + return this.flyout.createDom(tagName); } /** @@ -964,8 +962,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ getFlyout(opt_own?: boolean): IFlyout|null { - if (this.flyout_ || opt_own) { - return this.flyout_; + if (this.flyout || opt_own) { + return this.flyout; } if (this.toolbox_) { return this.toolbox_.getFlyout(); @@ -1000,7 +998,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ resizeContents() { - if (!this.resizesEnabled_ || !this.rendered) { + if (!this.resizesEnabled || !this.rendered) { return; } if (this.scrollbar) { @@ -1020,11 +1018,11 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { if (this.toolbox_) { this.toolbox_.position(); } - if (this.flyout_) { - this.flyout_.position(); + if (this.flyout) { + this.flyout.position(); } - const positionables = this.componentManager_.getComponents( + const positionables = this.componentManager.getComponents( ComponentManager.Capability.POSITIONABLE, true); const metrics = this.getMetricsManager().getUiMetrics(); const savedPositions = []; @@ -1051,8 +1049,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { updateScreenCalculationsIfScrolled() { /* eslint-disable indent */ const currScroll = svgMath.getDocumentScroll(); - if (!Coordinate.equals(this.lastRecordedPageScroll_, currScroll)) { - this.lastRecordedPageScroll_ = currScroll; + if (!Coordinate.equals(this.lastRecordedPageScroll, currScroll)) { + this.lastRecordedPageScroll = currScroll; this.updateScreenCalculations_(); } } @@ -1078,13 +1076,13 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { setCachedParentSvgSize(width: number|null, height: number|null) { const svg = this.getParentSvg(); if (width != null) { - this.cachedParentSvgSize_.width = width; + this.cachedParentSvgSize.width = width; // This is set to support the public (but deprecated) Blockly.svgSize // method. svg.setAttribute('data-cached-width', width.toString()); } if (height != null) { - this.cachedParentSvgSize_.height = height; + this.cachedParentSvgSize.height = height; // This is set to support the public (but deprecated) Blockly.svgSize // method. svg.setAttribute('data-cached-height', height.toString()); @@ -1108,17 +1106,17 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns SVG element. */ getParentSvg(): SVGSVGElement { - if (!this.cachedParentSvg_) { + if (!this.cachedParentSvg) { let element = this.svgGroup_; while (element) { if (element.tagName === 'svg') { - this.cachedParentSvg_ = element; + this.cachedParentSvg = element; break; } element = element.parentNode as SVGSVGElement; } } - return this.cachedParentSvg_ as SVGSVGElement; + return this.cachedParentSvg as SVGSVGElement; } /** @@ -1134,17 +1132,17 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { const scale = this.scale; const top = -this.scrollY; const left = -this.scrollX; - if (scale === this.oldScale_ && Math.abs(top - this.oldTop_) < 1 && - Math.abs(left - this.oldLeft_) < 1) { + if (scale === this.oldScale && Math.abs(top - this.oldTop) < 1 && + Math.abs(left - this.oldLeft) < 1) { // Ignore sub-pixel changes in top and left. Due to #4192 there are a lot // of negligible changes in viewport top/left. return; } const event = new (eventUtils.get(eventUtils.VIEWPORT_CHANGE))( - top, left, scale, this.id, this.oldScale_); - this.oldScale_ = scale; - this.oldTop_ = top; - this.oldLeft_ = left; + top, left, scale, this.id, this.oldScale); + this.oldScale = scale; + this.oldTop = top; + this.oldLeft = left; eventUtils.fire(event); } @@ -1157,8 +1155,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * the Blockly div. */ translate(x: number, y: number) { - if (this.useWorkspaceDragSurface_ && this.isDragSurfaceActive_) { - this.workspaceDragSurface_?.translateSurface(x, y); + if (this.useWorkspaceDragSurface && this.isDragSurfaceActive) { + this.workspaceDragSurface?.translateSurface(x, y); } else { const translation = 'translate(' + x + ',' + y + ') ' + 'scale(' + this.scale + ')'; @@ -1166,12 +1164,12 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.svgBubbleCanvas_.setAttribute('transform', translation); } // Now update the block drag surface if we're using one. - if (this.blockDragSurface_) { - this.blockDragSurface_.translateAndScaleGroup(x, y, this.scale); + if (this.blockDragSurface) { + this.blockDragSurface.translateAndScaleGroup(x, y, this.scale); } // And update the grid if we're using one. - if (this.grid_) { - this.grid_.moveTo(x, y); + if (this.grid) { + this.grid.moveTo(x, y); } this.maybeFireViewportChangeEvent(); @@ -1186,14 +1184,14 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { */ resetDragSurface() { // Don't do anything if we aren't using a drag surface. - if (!this.useWorkspaceDragSurface_) { + if (!this.useWorkspaceDragSurface) { return; } - this.isDragSurfaceActive_ = false; + this.isDragSurfaceActive = false; - const trans = this.workspaceDragSurface_!.getSurfaceTranslation(); - this.workspaceDragSurface_!.clearAndHide(this.svgGroup_); + const trans = this.workspaceDragSurface!.getSurfaceTranslation(); + this.workspaceDragSurface!.clearAndHide(this.svgGroup_); const translation = 'translate(' + trans.x + ',' + trans.y + ') ' + 'scale(' + this.scale + ')'; this.svgBlockCanvas_.setAttribute('transform', translation); @@ -1209,7 +1207,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { */ setupDragSurface() { // Don't do anything if we aren't using a drag surface. - if (!this.useWorkspaceDragSurface_) { + if (!this.useWorkspaceDragSurface) { return; } @@ -1218,11 +1216,11 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { // iframe) and then moves the mouse back in the workspace. On mobile and // ff, we get the mouseup outside the frame. On chrome and safari desktop we // do not. - if (this.isDragSurfaceActive_) { + if (this.isDragSurfaceActive) { return; } - this.isDragSurfaceActive_ = true; + this.isDragSurfaceActive = true; // Figure out where we want to put the canvas back. The order // in the is important because things are layered. @@ -1230,10 +1228,10 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { const width = parseInt(this.getParentSvg().getAttribute('width') ?? '0'); const height = parseInt(this.getParentSvg().getAttribute('height') ?? '0'); const coord = svgMath.getRelativeXY(this.getCanvas()); - this.workspaceDragSurface_!.setContentsAndShow( + this.workspaceDragSurface!.setContentsAndShow( this.getCanvas(), this.getBubbleCanvas(), previousElement, width, height, this.scale); - this.workspaceDragSurface_!.translateSurface(coord.x, coord.y); + this.workspaceDragSurface!.translateSurface(coord.x, coord.y); } /** @@ -1243,7 +1241,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ getBlockDragSurface(): BlockDragSurfaceSvg|null { - return this.blockDragSurface_; + return this.blockDragSurface; } /** @@ -1318,7 +1316,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { } } - this.markerManager_.updateMarkers(); + this.markerManager.updateMarkers(); } /** @@ -1334,10 +1332,10 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { highlightBlock(id: string|null, opt_state?: boolean) { if (opt_state === undefined) { // Unhighlight all blocks. - for (let i = 0, block; block = this.highlightedBlocks_[i]; i++) { + for (let i = 0, block; block = this.highlightedBlocks[i]; i++) { block.setHighlighted(false); } - this.highlightedBlocks_.length = 0; + this.highlightedBlocks.length = 0; } // Highlight/unhighlight the specified block. const block = id ? this.getBlockById(id) : null; @@ -1345,9 +1343,9 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { const state = opt_state === undefined || opt_state; // Using Set here would be great, but at the cost of IE10 support. if (!state) { - arrayUtils.removeElem(this.highlightedBlocks_, block); - } else if (this.highlightedBlocks_.indexOf(block) === -1) { - this.highlightedBlocks_.push(block); + arrayUtils.removeElem(this.highlightedBlocks, block); + } else if (this.highlightedBlocks.indexOf(block) === -1) { + this.highlightedBlocks.push(block); } block.setHighlighted(state); } @@ -1563,28 +1561,16 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { return newVar; } - /** - * Make a list of all the delete areas for this workspace. - * - * @deprecated Use workspace.recordDragTargets. (2021 June) - */ - recordDeleteAreas() { - utils.deprecation.warn( - 'WorkspaceSvg.prototype.recordDeleteAreas', 'June 2021', 'June 2022', - 'WorkspaceSvg.prototype.recordDragTargets'); - this.recordDragTargets(); - } - /** Make a list of all the delete areas for this workspace. */ recordDragTargets() { - const dragTargets = this.componentManager_.getComponents( + const dragTargets = this.componentManager.getComponents( ComponentManager.Capability.DRAG_TARGET, true); - this.dragTargetAreas_ = []; + this.dragTargetAreas = []; for (let i = 0, targetArea; targetArea = dragTargets[i]; i++) { const rect = targetArea.getClientRect(); if (rect) { - this.dragTargetAreas_.push({ + this.dragTargetAreas.push({ component: targetArea, clientRect: rect, }); @@ -1617,7 +1603,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * over. */ getDragTarget(e: Event): IDragTarget|null { - for (let i = 0, targetArea; targetArea = this.dragTargetAreas_[i]; i++) { + for (let i = 0, targetArea; targetArea = this.dragTargetAreas[i]; i++) { if (targetArea.clientRect.contains( (e as AnyDuringMigration).clientX, (e as AnyDuringMigration).clientY)) { @@ -1652,7 +1638,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { // Fix scale of mouse event. point.x /= this.scale; point.y /= this.scale; - this.dragDeltaXY_ = Coordinate.difference(xy, point); + this.dragDeltaXY = Coordinate.difference(xy, point); } /** @@ -1667,7 +1653,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { // Fix scale of mouse event. point.x /= this.scale; point.y /= this.scale; - return Coordinate.sum((this.dragDeltaXY_!), point); + return Coordinate.sum((this.dragDeltaXY!), point); } /** @@ -1842,7 +1828,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { block.snapToGrid(); cursorY = block.getRelativeToSurfaceXY().y + block.getHeightWidth().height + - this.renderer_.getConstants().MIN_BLOCK_HEIGHT; + this.renderer.getConstants().MIN_BLOCK_HEIGHT; } eventUtils.setGroup(false); this.setResizesEnabled(true); @@ -1895,11 +1881,11 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.options.languageTree = parsedToolboxDef; this.toolbox_.render(parsedToolboxDef); } else { - if (!this.flyout_) { + if (!this.flyout) { throw Error('Existing toolbox has categories. Can\'t change mode.'); } this.options.languageTree = parsedToolboxDef; - this.flyout_.show(parsedToolboxDef); + this.flyout.show(parsedToolboxDef); } } @@ -2010,7 +1996,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { const metrics = this.getMetrics(); let x; let y; - if (this.flyout_) { + if (this.flyout) { // If you want blocks in the center of the view (visible portion of the // workspace) to stay centered when the size of the view decreases (i.e. // when the size of the flyout increases) you need the center of the @@ -2044,19 +2030,19 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { if (!blocksWidth) { return; // Prevents zooming to infinity. } - if (this.flyout_) { + if (this.flyout) { // We have to add the flyout size to both the workspace size and the // block size because the blocks we want to resize include the blocks in // the flyout, and the area we want to fit them includes the portion of // the workspace that is behind the flyout. if (this.horizontalLayout) { - workspaceHeight += this.flyout_.getHeight(); + workspaceHeight += this.flyout.getHeight(); // Convert from pixels to workspace coordinates. - blocksHeight += this.flyout_.getHeight() / this.scale; + blocksHeight += this.flyout.getHeight() / this.scale; } else { - workspaceWidth += this.flyout_.getWidth(); + workspaceWidth += this.flyout.getWidth(); // Convert from pixels to workspace coordinates. - blocksWidth += this.flyout_.getWidth() / this.scale; + blocksWidth += this.flyout.getWidth() / this.scale; } } @@ -2080,8 +2066,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ beginCanvasTransition() { - this.svgBlockCanvas_.classList.add('blocklyCanvasTransitioning'); - this.svgBubbleCanvas_.classList.add('blocklyCanvasTransitioning'); + dom.addClass(this.svgBlockCanvas_, 'blocklyCanvasTransitioning'); + dom.addClass(this.svgBubbleCanvas_, 'blocklyCanvasTransitioning'); } /** @@ -2090,8 +2076,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ endCanvasTransition() { - this.svgBlockCanvas_.classList.remove('blocklyCanvasTransitioning'); - this.svgBubbleCanvas_.classList.remove('blocklyCanvasTransitioning'); + dom.removeClass(this.svgBlockCanvas_, 'blocklyCanvasTransitioning'); + dom.removeClass(this.svgBubbleCanvas_, 'blocklyCanvasTransitioning'); } /** Center the workspace. */ @@ -2193,8 +2179,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { flyout.reflow(); this.recordDragTargets(); } - if (this.grid_) { - this.grid_.update(this.scale); + if (this.grid) { + this.grid.update(this.scale); } // We call scroll instead of scrollbar.resize() so that we can center the @@ -2211,7 +2197,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.scroll(this.scrollX, this.scrollY); if (this.scrollbar) { - if (this.flyout_) { + if (this.flyout) { this.scrollbar.resizeView(metrics); } else { this.scrollbar.resizeContent(metrics); @@ -2357,7 +2343,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @param element Bounded element to add. */ addTopBoundedElement(element: IBoundedElement) { - this.topBoundedElements_.push(element); + this.topBoundedElements.push(element); } /** @@ -2366,7 +2352,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @param element Bounded element to remove. */ removeTopBoundedElement(element: IBoundedElement) { - arrayUtils.removeElem(this.topBoundedElements_, element); + arrayUtils.removeElem(this.topBoundedElements, element); } /** @@ -2375,7 +2361,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The top-level bounded elements. */ getTopBoundedElements(): IBoundedElement[] { - return (new Array()).concat(this.topBoundedElements_); + return (new Array()).concat(this.topBoundedElements); } /** @@ -2387,8 +2373,8 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @param enabled Whether resizes should be enabled. */ setResizesEnabled(enabled: boolean) { - const reenabled = !this.resizesEnabled_ && enabled; - this.resizesEnabled_ = enabled; + const reenabled = !this.resizesEnabled && enabled; + this.resizesEnabled = enabled; if (reenabled) { // Newly enabled. Trigger a resize. this.resizeContents(); @@ -2402,7 +2388,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { override clear() { this.setResizesEnabled(false); super.clear(); - this.topBoundedElements_ = []; + this.topBoundedElements = []; this.setResizesEnabled(true); } @@ -2544,7 +2530,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @returns The audio manager for this workspace. */ getAudioManager(): WorkspaceAudio { - return this.audioManager_; + return this.audioManager; } /** @@ -2554,7 +2540,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { * @internal */ getGrid(): Grid|null { - return this.grid_; + return this.grid; } /** diff --git a/core/zoom_controls.ts b/core/zoom_controls.ts index d73ff47fd..6b4f6f4b2 100644 --- a/core/zoom_controls.ts +++ b/core/zoom_controls.ts @@ -47,19 +47,19 @@ export class ZoomControls implements IPositionable { * A handle to use to unbind the mouse down event handler for zoom reset * button. Opaque data returned from browserEvents.conditionalBind. */ - private onZoomResetWrapper_: browserEvents.Data|null = null; + private onZoomResetWrapper: browserEvents.Data|null = null; /** * A handle to use to unbind the mouse down event handler for zoom in * button. Opaque data returned from browserEvents.conditionalBind. */ - private onZoomInWrapper_: browserEvents.Data|null = null; + private onZoomInWrapper: browserEvents.Data|null = null; /** * A handle to use to unbind the mouse down event handler for zoom out * button. Opaque data returned from browserEvents.conditionalBind. */ - private onZoomOutWrapper_: browserEvents.Data|null = null; + private onZoomOutWrapper: browserEvents.Data|null = null; /** The zoom in svg element. */ private zoomInGroup: SVGGElement|null = null; @@ -71,36 +71,36 @@ export class ZoomControls implements IPositionable { private zoomResetGroup: SVGGElement|null = null; /** Width of the zoom controls. */ - private readonly WIDTH_ = 32; + private readonly WIDTH = 32; /** Height of each zoom control. */ - private readonly HEIGHT_ = 32; + private readonly HEIGHT = 32; /** Small spacing used between the zoom in and out control, in pixels. */ - private readonly SMALL_SPACING_ = 2; + private readonly SMALL_SPACING = 2; /** * Large spacing used between the zoom in and reset control, in pixels. */ - private readonly LARGE_SPACING_ = 11; + private readonly LARGE_SPACING = 11; /** Distance between zoom controls and bottom or top edge of workspace. */ - private readonly MARGIN_VERTICAL_ = 20; + private readonly MARGIN_VERTICAL = 20; /** Distance between zoom controls and right or left edge of workspace. */ - private readonly MARGIN_HORIZONTAL_ = 20; + private readonly MARGIN_HORIZONTAL = 20; /** The SVG group containing the zoom controls. */ private svgGroup: SVGElement|null = null; /** Left coordinate of the zoom controls. */ - private left_ = 0; + private left = 0; /** Top coordinate of the zoom controls. */ - private top_ = 0; + private top = 0; /** Whether this has been initialized. */ - private initialized_ = false; + private initialized = false; /** @param workspace The workspace to sit in. */ constructor(private readonly workspace: WorkspaceSvg) {} @@ -117,12 +117,12 @@ export class ZoomControls implements IPositionable { // instances on a page. Browser behaviour becomes undefined otherwise. // https://neil.fraser.name/news/2015/11/01/ const rnd = String(Math.random()).substring(2); - this.createZoomOutSvg_(rnd); - this.createZoomInSvg_(rnd); + this.createZoomOutSvg(rnd); + this.createZoomInSvg(rnd); if (this.workspace.isMovable()) { // If we zoom to the center and the workspace isn't movable we could // loose blocks at the edges of the workspace. - this.createZoomResetSvg_(rnd); + this.createZoomResetSvg(rnd); } return this.svgGroup; } @@ -134,7 +134,7 @@ export class ZoomControls implements IPositionable { weight: 2, capabilities: [ComponentManager.Capability.POSITIONABLE], }); - this.initialized_ = true; + this.initialized = true; } /** @@ -146,14 +146,14 @@ export class ZoomControls implements IPositionable { if (this.svgGroup) { dom.removeNode(this.svgGroup); } - if (this.onZoomResetWrapper_) { - browserEvents.unbind(this.onZoomResetWrapper_); + if (this.onZoomResetWrapper) { + browserEvents.unbind(this.onZoomResetWrapper); } - if (this.onZoomInWrapper_) { - browserEvents.unbind(this.onZoomInWrapper_); + if (this.onZoomInWrapper) { + browserEvents.unbind(this.onZoomInWrapper); } - if (this.onZoomOutWrapper_) { - browserEvents.unbind(this.onZoomOutWrapper_); + if (this.onZoomOutWrapper) { + browserEvents.unbind(this.onZoomOutWrapper); } } @@ -165,13 +165,13 @@ export class ZoomControls implements IPositionable { * ignored by other UI elements. */ getBoundingRectangle(): Rect|null { - let height = this.SMALL_SPACING_ + 2 * this.HEIGHT_; + let height = this.SMALL_SPACING + 2 * this.HEIGHT; if (this.zoomResetGroup) { - height += this.LARGE_SPACING_ + this.HEIGHT_; + height += this.LARGE_SPACING + this.HEIGHT; } - const bottom = this.top_ + height; - const right = this.left_ + this.WIDTH_; - return new Rect(this.top_, bottom, this.left_, right); + const bottom = this.top + height; + const right = this.left + this.WIDTH; + return new Rect(this.top, bottom, this.left, right); } /** @@ -184,52 +184,52 @@ export class ZoomControls implements IPositionable { */ position(metrics: UiMetrics, savedPositions: Rect[]) { // Not yet initialized. - if (!this.initialized_) { + if (!this.initialized) { return; } const cornerPosition = uiPosition.getCornerOppositeToolbox(this.workspace, metrics); - let height = this.SMALL_SPACING_ + 2 * this.HEIGHT_; + let height = this.SMALL_SPACING + 2 * this.HEIGHT; if (this.zoomResetGroup) { - height += this.LARGE_SPACING_ + this.HEIGHT_; + height += this.LARGE_SPACING + this.HEIGHT; } const startRect = uiPosition.getStartPositionRect( - cornerPosition, new Size(this.WIDTH_, height), this.MARGIN_HORIZONTAL_, - this.MARGIN_VERTICAL_, metrics, this.workspace); + cornerPosition, new Size(this.WIDTH, height), this.MARGIN_HORIZONTAL, + this.MARGIN_VERTICAL, metrics, this.workspace); const verticalPosition = cornerPosition.vertical; const bumpDirection = verticalPosition === uiPosition.verticalPosition.TOP ? uiPosition.bumpDirection.DOWN : uiPosition.bumpDirection.UP; const positionRect = uiPosition.bumpPositionRect( - startRect, this.MARGIN_VERTICAL_, bumpDirection, savedPositions); + startRect, this.MARGIN_VERTICAL, bumpDirection, savedPositions); if (verticalPosition === uiPosition.verticalPosition.TOP) { - const zoomInTranslateY = this.SMALL_SPACING_ + this.HEIGHT_; + const zoomInTranslateY = this.SMALL_SPACING + this.HEIGHT; this.zoomInGroup?.setAttribute( 'transform', 'translate(0, ' + zoomInTranslateY + ')'); if (this.zoomResetGroup) { const zoomResetTranslateY = - zoomInTranslateY + this.LARGE_SPACING_ + this.HEIGHT_; + zoomInTranslateY + this.LARGE_SPACING + this.HEIGHT; this.zoomResetGroup.setAttribute( 'transform', 'translate(0, ' + zoomResetTranslateY + ')'); } } else { const zoomInTranslateY = - this.zoomResetGroup ? this.LARGE_SPACING_ + this.HEIGHT_ : 0; + this.zoomResetGroup ? this.LARGE_SPACING + this.HEIGHT : 0; this.zoomInGroup?.setAttribute( 'transform', 'translate(0, ' + zoomInTranslateY + ')'); const zoomOutTranslateY = - zoomInTranslateY + this.SMALL_SPACING_ + this.HEIGHT_; + zoomInTranslateY + this.SMALL_SPACING + this.HEIGHT; this.zoomOutGroup?.setAttribute( 'transform', 'translate(0, ' + zoomOutTranslateY + ')'); } - this.top_ = positionRect.top; - this.left_ = positionRect.left; + this.top = positionRect.top; + this.left = positionRect.left; this.svgGroup?.setAttribute( - 'transform', 'translate(' + this.left_ + ',' + this.top_ + ')'); + 'transform', 'translate(' + this.left + ',' + this.top + ')'); } /** @@ -239,7 +239,7 @@ export class ZoomControls implements IPositionable { * These IDs must be unique in case there are multiple Blockly instances * on the same page. */ - private createZoomOutSvg_(rnd: string) { + private createZoomOutSvg(rnd: string) { /* This markup will be generated and added to the .svgGroup: @@ -275,8 +275,8 @@ export class ZoomControls implements IPositionable { this.workspace.options.pathToMedia + SPRITE.url); // Attach listener. - this.onZoomOutWrapper_ = browserEvents.conditionalBind( - this.zoomOutGroup, 'mousedown', null, this.zoom_.bind(this, -1)); + this.onZoomOutWrapper = browserEvents.conditionalBind( + this.zoomOutGroup, 'mousedown', null, this.zoom.bind(this, -1)); } /** @@ -286,7 +286,7 @@ export class ZoomControls implements IPositionable { * These IDs must be unique in case there are multiple Blockly instances * on the same page. */ - private createZoomInSvg_(rnd: string) { + private createZoomInSvg(rnd: string) { /* This markup will be generated and added to the .svgGroup: @@ -321,8 +321,8 @@ export class ZoomControls implements IPositionable { this.workspace.options.pathToMedia + SPRITE.url); // Attach listener. - this.onZoomInWrapper_ = browserEvents.conditionalBind( - this.zoomInGroup, 'mousedown', null, this.zoom_.bind(this, 1)); + this.onZoomInWrapper = browserEvents.conditionalBind( + this.zoomInGroup, 'mousedown', null, this.zoom.bind(this, 1)); } /** @@ -333,10 +333,10 @@ export class ZoomControls implements IPositionable { * positive amount values zoom in. * @param e A mouse down event. */ - private zoom_(amount: number, e: Event) { + private zoom(amount: number, e: Event) { this.workspace.markFocused(); this.workspace.zoomCenter(amount); - this.fireZoomEvent_(); + this.fireZoomEvent(); Touch.clearTouchIdentifier(); // Don't block future drags. e.stopPropagation(); // Don't start a workspace scroll. e.preventDefault(); // Stop double-clicking from selecting text. @@ -349,7 +349,7 @@ export class ZoomControls implements IPositionable { * These IDs must be unique in case there are multiple Blockly instances * on the same page. */ - private createZoomResetSvg_(rnd: string) { + private createZoomResetSvg(rnd: string) { /* This markup will be generated and added to the .svgGroup: @@ -379,8 +379,8 @@ export class ZoomControls implements IPositionable { this.workspace.options.pathToMedia + SPRITE.url); // Attach event listeners. - this.onZoomResetWrapper_ = browserEvents.conditionalBind( - this.zoomResetGroup, 'mousedown', null, this.resetZoom_.bind(this)); + this.onZoomResetWrapper = browserEvents.conditionalBind( + this.zoomResetGroup, 'mousedown', null, this.resetZoom.bind(this)); } /** @@ -388,7 +388,7 @@ export class ZoomControls implements IPositionable { * * @param e A mouse down event. */ - private resetZoom_(e: Event) { + private resetZoom(e: Event) { this.workspace.markFocused(); // zoom is passed amount and computes the new scale using the formula: @@ -406,14 +406,14 @@ export class ZoomControls implements IPositionable { this.workspace.scrollCenter(); setTimeout(this.workspace.endCanvasTransition.bind(this.workspace), 500); - this.fireZoomEvent_(); + this.fireZoomEvent(); Touch.clearTouchIdentifier(); // Don't block future drags. e.stopPropagation(); // Don't start a workspace scroll. e.preventDefault(); // Stop double-clicking from selecting text. } /** Fires a zoom control UI event. */ - private fireZoomEvent_() { + private fireZoomEvent() { const uiEvent = new (eventUtils.get(eventUtils.CLICK))( null, this.workspace.id, 'zoom_controls'); eventUtils.fire(uiEvent); diff --git a/demos/blockfactory/analytics.js b/demos/blockfactory/analytics.js index b22070844..6febb8858 100644 --- a/demos/blockfactory/analytics.js +++ b/demos/blockfactory/analytics.js @@ -194,4 +194,3 @@ BlocklyDevTools.Analytics.sendQueued = function() { // stub this.LOG_TO_CONSOLE_ && console.log('Analytics.sendQueued'); }; - diff --git a/demos/blockfactory/block_definition_extractor.js b/demos/blockfactory/block_definition_extractor.js index 59cc50fd8..ef791a224 100644 --- a/demos/blockfactory/block_definition_extractor.js +++ b/demos/blockfactory/block_definition_extractor.js @@ -716,7 +716,7 @@ BlockDefinitionExtractor.colourBlockFromHue_ = function(hue) { var colourBlock = BlockDefinitionExtractor.newDomElement_( 'block', {type: 'colour_hue'}); colourBlock.append(BlockDefinitionExtractor.newDomElement_('mutation', { - colour: Blockly.hueToRgb(hue) + colour: Blockly.utils.colour.hueToHex(hue) })); colourBlock.append(BlockDefinitionExtractor.newDomElement_( 'field', {name: 'HUE'}, hue.toString())); diff --git a/demos/blockfactory/factory.js b/demos/blockfactory/factory.js index 166f5f707..6acdbee82 100644 --- a/demos/blockfactory/factory.js +++ b/demos/blockfactory/factory.js @@ -65,18 +65,25 @@ BlockFactory.updateBlocksFlagDelayed = false; */ BlockFactory.STARTER_BLOCK_XML_TEXT = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '230' + - ''; + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '230' + + '' + + '' + + '' + + ''; /** * Change the language code format. @@ -178,26 +185,38 @@ BlockFactory.updatePreview = function() { return; } - // Backup Blockly.Blocks definitions so we can delete them all - // before instantiating user-defined block. This avoids a collision - // between the main workspace and preview if the user creates a - // 'factory_base' block, for instance. - var originalBlocks = Object.assign(Object.create(null), Blockly.Blocks); - try { - // Delete existing blocks. - for (var key in Blockly.Blocks) { - delete Blockly.Blocks[key]; + // Don't let the user create a block type that already exists, + // because it doesn't work. + var warnExistingBlock = function(blockType) { + if (blockType in Blockly.Blocks) { + var text = `You can't make a block called ${blockType} in this tool because that name already exists.`; + FactoryUtils.getRootBlock(BlockFactory.mainWorkspace).setWarningText(text); + console.error(text); + return true; } + return false; + } + var blockType = 'block_type'; + var blockCreated = false; + try { if (format === 'JSON') { var json = JSON.parse(code); - Blockly.Blocks[json.type || BlockFactory.UNNAMED] = { + blockType = json.type || BlockFactory.UNNAMED; + if (warnExistingBlock(blockType)) { + return; + } + Blockly.Blocks[blockType] = { init: function() { this.jsonInit(json); } }; } else if (format === 'JavaScript') { try { + blockType = FactoryUtils.getBlockTypeFromJsDefinition(code); + if (warnExistingBlock(blockType)) { + return; + } eval(code); } catch (e) { // TODO: Display error in the UI @@ -205,15 +224,7 @@ BlockFactory.updatePreview = function() { return; } } - - // Look for newly-created block(s) (ideally just one). - var createdTypes = Object.getOwnPropertyNames(Blockly.Blocks); - if (createdTypes.length < 1) { - return; - } else if (createdTypes.length > 1) { - console.log('Unexpectedly found more than one block definition'); - } - var blockType = createdTypes[0]; + blockCreated = true; // Create the preview block. var previewBlock = BlockFactory.previewWorkspace.newBlock(blockType); @@ -247,12 +258,12 @@ BlockFactory.updatePreview = function() { BlockFactory.updateBlocksFlag = false BlockFactory.updateBlocksFlagDelayed = false } finally { - // Remove all newly-created block(s). - for (var key in Blockly.Blocks) { - delete Blockly.Blocks[key]; + // Remove the newly-created block. + // We have to check if the block was actually created so that we don't remove + // one of the built-in blocks, like factory_base. + if (blockCreated) { + delete Blockly.Blocks[blockType]; } - // Restore original blocks. - Object.assign(Blockly.Blocks, originalBlocks); } }; @@ -324,4 +335,4 @@ BlockFactory.manualEdit = function() { BlockFactory.updateBlocksFlag = true; BlockFactory.updateBlocksFlagDelayed = true; BlockFactory.updateLanguage(); -} +}; diff --git a/demos/blockfactory/index.html b/demos/blockfactory/index.html index 5eb0c34d5..37c75236d 100644 --- a/demos/blockfactory/index.html +++ b/demos/blockfactory/index.html @@ -31,7 +31,7 @@ - + + diff --git a/demos/code/code.js b/demos/code/code.js index c3b5a6340..b7459a5f4 100644 --- a/demos/code/code.js +++ b/demos/code/code.js @@ -201,7 +201,7 @@ Code.bindClick = function(el, func) { */ Code.importPrettify = function() { var script = document.createElement('script'); - script.setAttribute('src', 'https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js'); + script.setAttribute('src', 'https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js'); document.head.appendChild(script); }; @@ -373,7 +373,7 @@ Code.renderContent = function() { /** * Attempt to generate the code and display it in the UI, pretty printed. - * @param generator {!Blockly.Generator} The generator to use. + * @param generator {!Blockly.CodeGenerator} The generator to use. */ Code.attemptCodeGeneration = function(generator) { var content = document.getElementById('content_' + Code.selected); @@ -388,7 +388,7 @@ Code.attemptCodeGeneration = function(generator) { /** * Check whether all blocks in use have generator functions. - * @param generator {!Blockly.Generator} The generator to use. + * @param generator {!Blockly.CodeGenerator} The generator to use. */ Code.checkAllGeneratorFunctionsDefined = function(generator) { var blocks = Code.workspace.getAllBlocks(false); diff --git a/demos/mobile/android/build.gradle b/demos/mobile/android/build.gradle index 4e8009dbd..e13c05ada 100644 --- a/demos/mobile/android/build.gradle +++ b/demos/mobile/android/build.gradle @@ -1,14 +1,14 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - + repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' - + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/demos/mobile/ios/Blockly WebView/ViewController.swift b/demos/mobile/ios/Blockly WebView/ViewController.swift index f8ad8018e..e9f75dab4 100644 --- a/demos/mobile/ios/Blockly WebView/ViewController.swift +++ b/demos/mobile/ios/Blockly WebView/ViewController.swift @@ -15,9 +15,9 @@ class ViewController: UIViewController, WKUIDelegate { /// The name used to reference this iOS object when executing callbacks from the JS code. /// If this value is changed, it should also be changed in the `CODE_GENERATOR_BRIDGE_JS` file. fileprivate static let HOST_HTML = "Blockly/webview.html" - + @IBOutlet weak var webView: WKWebView! - + /// Additional setup after loading the UI NIB. override func viewDidLoad() { super.viewDidLoad() @@ -25,7 +25,7 @@ class ViewController: UIViewController, WKUIDelegate { // Do any additional setup after loading the view, typically from a nib. loadWebContent() } - + /// Load the root HTML page into the webview. func loadWebContent() { if let htmlUrl = Bundle.main.url(forResource: "webview", withExtension: "html", @@ -41,7 +41,7 @@ class ViewController: UIViewController, WKUIDelegate { runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { - + let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) let title = NSLocalizedString("OK", comment: "OK Button") let ok = UIAlertAction(title: title, style: .default) { (action: UIAlertAction) -> Void in @@ -51,25 +51,25 @@ class ViewController: UIViewController, WKUIDelegate { present(alert, animated: true) completionHandler() } - + /// Handle window.confirm() with a native dialog. func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { - + let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) let closeAndHandle = { (okayed: Bool) in alert.dismiss(animated: true, completion: nil) completionHandler(okayed) } - + let okTitle = NSLocalizedString("OK", comment: "OK button title") let ok = UIAlertAction(title: okTitle, style: .default) { (action: UIAlertAction) -> Void in closeAndHandle(true) } alert.addAction(ok) - + let cancelTitle = NSLocalizedString("Cancel", comment: "Cancel button title") let cancel = UIAlertAction(title: cancelTitle, style: .default) { (action: UIAlertAction) -> Void in @@ -78,34 +78,33 @@ class ViewController: UIViewController, WKUIDelegate { alert.addAction(cancel) present(alert, animated: true) } - + /// Handle window.prompt() with a native dialog. func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) { - + let alert = UIAlertController(title: prompt, message: nil, preferredStyle: .alert) - + alert.addTextField { (textField) in textField.text = defaultText } - + let okTitle = NSLocalizedString("OK", comment: "OK button title") let okAction = UIAlertAction(title: okTitle, style: .default) { (_) in let textInput = alert.textFields![0] as UITextField completionHandler(textInput.text) } alert.addAction(okAction) - + let cancelTitle = NSLocalizedString("Cancel", comment: "Cancel button title") let cancelAction = UIAlertAction(title: cancelTitle, style: .cancel) { (_) in completionHandler(nil) } alert.addAction(cancelAction) - + present(alert, animated: true) } } - diff --git a/generators/dart.js b/generators/dart.js index dacbcd2a5..964d9ae80 100644 --- a/generators/dart.js +++ b/generators/dart.js @@ -15,7 +15,7 @@ goog.module('Blockly.Dart'); const Variables = goog.require('Blockly.Variables'); const stringUtils = goog.require('Blockly.utils.string'); const {Block} = goog.requireType('Blockly.Block'); -const {Generator} = goog.require('Blockly.Generator'); +const {CodeGenerator} = goog.require('Blockly.CodeGenerator'); const {Names, NameType} = goog.require('Blockly.Names'); const {Workspace} = goog.requireType('Blockly.Workspace'); const {inputTypes} = goog.require('Blockly.inputTypes'); @@ -23,9 +23,9 @@ const {inputTypes} = goog.require('Blockly.inputTypes'); /** * Dart code generator. - * @type {!Generator} + * @type {!CodeGenerator} */ -const Dart = new Generator('Dart'); +const Dart = new CodeGenerator('Dart'); /** * List of illegal variable names. @@ -86,7 +86,7 @@ Dart.isInitialized = false; * @param {!Workspace} workspace Workspace to generate code from. */ Dart.init = function(workspace) { - // Call Blockly.Generator's init. + // Call Blockly.CodeGenerator's init. Object.getPrototypeOf(this).init.call(this); if (!this.nameDB_) { @@ -145,7 +145,7 @@ Dart.finish = function(code) { definitions.push(def); } } - // Call Blockly.Generator's finish. + // Call Blockly.CodeGenerator's finish. code = Object.getPrototypeOf(this).finish.call(this, code); this.isInitialized = false; diff --git a/generators/javascript.js b/generators/javascript.js index 75220f760..c3e6aa90e 100644 --- a/generators/javascript.js +++ b/generators/javascript.js @@ -13,10 +13,9 @@ goog.module('Blockly.JavaScript'); const Variables = goog.require('Blockly.Variables'); -const objectUtils = goog.require('Blockly.utils.object'); const stringUtils = goog.require('Blockly.utils.string'); const {Block} = goog.requireType('Blockly.Block'); -const {Generator} = goog.require('Blockly.Generator'); +const {CodeGenerator} = goog.require('Blockly.CodeGenerator'); const {inputTypes} = goog.require('Blockly.inputTypes'); const {Names, NameType} = goog.require('Blockly.Names'); const {Workspace} = goog.requireType('Blockly.Workspace'); @@ -24,9 +23,9 @@ const {Workspace} = goog.requireType('Blockly.Workspace'); /** * JavaScript code generator. - * @type {!Generator} + * @type {!CodeGenerator} */ -const JavaScript = new Generator('JavaScript'); +const JavaScript = new CodeGenerator('JavaScript'); /** * List of illegal variable names. @@ -128,7 +127,7 @@ JavaScript.isInitialized = false; * @param {!Workspace} workspace Workspace to generate code from. */ JavaScript.init = function(workspace) { - // Call Blockly.Generator's init. + // Call Blockly.CodeGenerator's init. Object.getPrototypeOf(this).init.call(this); if (!this.nameDB_) { @@ -169,8 +168,8 @@ JavaScript.init = function(workspace) { */ JavaScript.finish = function(code) { // Convert the definitions dictionary into a list. - const definitions = objectUtils.values(this.definitions_); - // Call Blockly.Generator's finish. + const definitions = Object.values(this.definitions_); + // Call Blockly.CodeGenerator's finish. code = Object.getPrototypeOf(this).finish.call(this, code); this.isInitialized = false; diff --git a/generators/lua.js b/generators/lua.js index bf12f95a2..2409c3355 100644 --- a/generators/lua.js +++ b/generators/lua.js @@ -13,10 +13,9 @@ goog.module('Blockly.Lua'); -const objectUtils = goog.require('Blockly.utils.object'); const stringUtils = goog.require('Blockly.utils.string'); const {Block} = goog.requireType('Blockly.Block'); -const {Generator} = goog.require('Blockly.Generator'); +const {CodeGenerator} = goog.require('Blockly.CodeGenerator'); const {inputTypes} = goog.require('Blockly.inputTypes'); const {Names} = goog.require('Blockly.Names'); const {Workspace} = goog.requireType('Blockly.Workspace'); @@ -24,9 +23,9 @@ const {Workspace} = goog.requireType('Blockly.Workspace'); /** * Lua code generator. - * @type {!Generator} + * @type {!CodeGenerator} */ -const Lua = new Generator('Lua'); +const Lua = new CodeGenerator('Lua'); /** * List of illegal variable names. @@ -93,7 +92,7 @@ Lua.isInitialized = false; * @param {!Workspace} workspace Workspace to generate code from. */ Lua.init = function(workspace) { - // Call Blockly.Generator's init. + // Call Blockly.CodeGenerator's init. Object.getPrototypeOf(this).init.call(this); if (!this.nameDB_) { @@ -115,8 +114,8 @@ Lua.init = function(workspace) { */ Lua.finish = function(code) { // Convert the definitions dictionary into a list. - const definitions = objectUtils.values(this.definitions_); - // Call Blockly.Generator's finish. + const definitions = Object.values(this.definitions_); + // Call Blockly.CodeGenerator's finish. code = Object.getPrototypeOf(this).finish.call(this, code); this.isInitialized = false; diff --git a/generators/php.js b/generators/php.js index 748141491..043a3c6a7 100644 --- a/generators/php.js +++ b/generators/php.js @@ -12,10 +12,9 @@ goog.module('Blockly.PHP'); -const objectUtils = goog.require('Blockly.utils.object'); const stringUtils = goog.require('Blockly.utils.string'); const {Block} = goog.requireType('Blockly.Block'); -const {Generator} = goog.require('Blockly.Generator'); +const {CodeGenerator} = goog.require('Blockly.CodeGenerator'); const {inputTypes} = goog.require('Blockly.inputTypes'); const {Names} = goog.require('Blockly.Names'); const {Workspace} = goog.requireType('Blockly.Workspace'); @@ -23,9 +22,9 @@ const {Workspace} = goog.requireType('Blockly.Workspace'); /** * PHP code generator. - * @type {!Generator} + * @type {!CodeGenerator} */ -const PHP = new Generator('PHP'); +const PHP = new CodeGenerator('PHP'); /** * List of illegal variable names. @@ -131,7 +130,7 @@ PHP.isInitialized = false; * @param {!Workspace} workspace Workspace to generate code from. */ PHP.init = function(workspace) { - // Call Blockly.Generator's init. + // Call Blockly.CodeGenerator's init. Object.getPrototypeOf(this).init.call(this); if (!this.nameDB_) { @@ -154,8 +153,8 @@ PHP.init = function(workspace) { */ PHP.finish = function(code) { // Convert the definitions dictionary into a list. - const definitions = objectUtils.values(this.definitions_); - // Call Blockly.Generator's finish. + const definitions = Object.values(this.definitions_); + // Call Blockly.CodeGenerator's finish. code = Object.getPrototypeOf(this).finish.call(this, code); this.isInitialized = false; diff --git a/generators/python.js b/generators/python.js index dd00ff2cd..09d92d19d 100644 --- a/generators/python.js +++ b/generators/python.js @@ -15,7 +15,7 @@ goog.module('Blockly.Python'); const stringUtils = goog.require('Blockly.utils.string'); const Variables = goog.require('Blockly.Variables'); const {Block} = goog.requireType('Blockly.Block'); -const {Generator} = goog.require('Blockly.Generator'); +const {CodeGenerator} = goog.require('Blockly.CodeGenerator'); const {inputTypes} = goog.require('Blockly.inputTypes'); const {Names, NameType} = goog.require('Blockly.Names'); const {Workspace} = goog.requireType('Blockly.Workspace'); @@ -23,9 +23,9 @@ const {Workspace} = goog.requireType('Blockly.Workspace'); /** * Python code generator. - * @type {!Generator} + * @type {!CodeGenerator} */ -const Python = new Generator('Python'); +const Python = new CodeGenerator('Python'); /** * List of illegal variable names. @@ -137,10 +137,10 @@ Python.isInitialized = false; /** * Initialise the database of variable names. * @param {!Workspace} workspace Workspace to generate code from. - * @this {Generator} + * @this {CodeGenerator} */ Python.init = function(workspace) { - // Call Blockly.Generator's init. + // Call Blockly.CodeGenerator's init. Object.getPrototypeOf(this).init.call(this); /** @@ -196,7 +196,7 @@ Python.finish = function(code) { definitions.push(def); } } - // Call Blockly.Generator's finish. + // Call Blockly.CodeGenerator's finish. code = Object.getPrototypeOf(this).finish.call(this, code); this.isInitialized = false; diff --git a/gulpfile.js b/gulpfile.js index 2dc553a63..26473bd79 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -19,6 +19,7 @@ const licenseTasks = require('./scripts/gulpfiles/license_tasks'); const appengineTasks = require('./scripts/gulpfiles/appengine_tasks'); const releaseTasks = require('./scripts/gulpfiles/release_tasks'); const cleanupTasks = require('./scripts/gulpfiles/cleanup_tasks'); +const testTasks = require('./scripts/gulpfiles/test_tasks'); module.exports = { // Default target if gulp invoked without specifying. @@ -47,6 +48,8 @@ module.exports = { sortRequires: cleanupTasks.sortRequires, checkLicenses: licenseTasks.checkLicenses, clean: gulp.parallel(buildTasks.cleanBuildDir, packageTasks.cleanReleaseDir), + test: testTasks.test, + testGenerators: testTasks.generators, buildAdvancedCompilationTest: buildTasks.buildAdvancedCompilationTest, gitCreateRC: gitTasks.createRC, diff --git a/msg/json/ar.json b/msg/json/ar.json index f61769639..91fc4e01e 100644 --- a/msg/json/ar.json +++ b/msg/json/ar.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ + "Amire80", "Diyariq", "DonAdnan", + "Dr-Taher", "Meno25", "Mido", "Moud hosny", @@ -21,18 +23,18 @@ "ADD_COMMENT": "أضف تعليقًا", "REMOVE_COMMENT": "أزل التعليق", "DUPLICATE_COMMENT": "تعليق مكرر", - "EXTERNAL_INPUTS": "ادخال خارجي", - "INLINE_INPUTS": "ادخال خطي", - "DELETE_BLOCK": "احذف القطعة", - "DELETE_X_BLOCKS": "احذف %1 قطع", - "DELETE_ALL_BLOCKS": "حذف %1 قطعة؟", - "CLEAN_UP": "ترتيب القطع", - "COLLAPSE_BLOCK": "إخفاء القطعة", - "COLLAPSE_ALL": "إخفاء القطع", - "EXPAND_BLOCK": "وسٌّع القطعة", - "EXPAND_ALL": "وسٌّع القطع", - "DISABLE_BLOCK": "عطّل القطعة", - "ENABLE_BLOCK": "أعد تفعيل القطعة", + "EXTERNAL_INPUTS": "مدخلات خارجية", + "INLINE_INPUTS": "مدخلات مضمنة", + "DELETE_BLOCK": "حذف كتلة", + "DELETE_X_BLOCKS": "احذف %1 كتلة", + "DELETE_ALL_BLOCKS": "حذف %1 كتلة؟", + "CLEAN_UP": "تنظيف الكتل", + "COLLAPSE_BLOCK": "انهيار الكتلة", + "COLLAPSE_ALL": "انهيار الكتل", + "EXPAND_BLOCK": "وسٌّع الكتلة", + "EXPAND_ALL": "وسٌّع الكتل", + "DISABLE_BLOCK": "عطّل كتلة", + "ENABLE_BLOCK": "تمكين كتلة", "HELP": "مساعدة", "UNDO": "رجوع", "REDO": "إعادة", @@ -50,17 +52,15 @@ "DELETE_VARIABLE_CONFIRMATION": "حذف%1 1 استخدامات المتغير '%2'؟", "CANNOT_DELETE_VARIABLE_PROCEDURE": "لايمكن حذف متغير \"%1\" بسبب انه جزء من الدالة \"%2\"", "DELETE_VARIABLE": "حذف المتغير %1", - "COLOUR_PICKER_HELPURL": "https://ar.wikipedia.org/wiki/Color", + "COLOUR_PICKER_HELPURL": "https://ar.wikipedia.org/wiki/لون", "COLOUR_PICKER_TOOLTIP": "اختر لون من اللوحة.", "COLOUR_RANDOM_TITLE": "لون عشوائي", "COLOUR_RANDOM_TOOLTIP": "اختر لون بشكل عشوائي.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "لون مع", "COLOUR_RGB_RED": "أحمر", "COLOUR_RGB_GREEN": "أخضر", "COLOUR_RGB_BLUE": "أزرق", "COLOUR_RGB_TOOLTIP": "إنشئ لون بالكمية المحددة من الأحمر, الأخضر والأزرق. بحيث يجب تكون كافة القيم بين 0 و 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "دمج", "COLOUR_BLEND_COLOUR1": "اللون 1", "COLOUR_BLEND_COLOUR2": "اللون 2", @@ -109,7 +109,6 @@ "LOGIC_BOOLEAN_TRUE": "صحيح", "LOGIC_BOOLEAN_FALSE": "خاطئ", "LOGIC_BOOLEAN_TOOLTIP": "يرجع صحيح أو خاطئ.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "فارغ", "LOGIC_NULL_TOOLTIP": "ترجع ملغى.", "LOGIC_TERNARY_HELPURL": ":https://ar.wikipedia.org/wiki/%3F", @@ -119,11 +118,6 @@ "LOGIC_TERNARY_TOOLTIP": "تحقق الشرط في 'الاختبار'. إذا كان الشرط صحيح، يقوم بإرجاع قيمة 'اذا كانت العبارة صحيحة'؛ خلاف ذلك يرجع قيمة 'اذا كانت العبارة خاطئة'.", "MATH_NUMBER_HELPURL": "https://ar.wikipedia.org/wiki/%D8%B9%D8%AF%D8%AF", "MATH_NUMBER_TOOLTIP": "عدد ما.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "جيب", "MATH_TRIG_COS": "جيب تمام", "MATH_TRIG_TAN": "ظل", @@ -163,7 +157,6 @@ "MATH_IS_NEGATIVE": "هو سالب", "MATH_IS_DIVISIBLE_BY": "قابل للقسمة", "MATH_IS_TOOLTIP": "تحقق إذا كان عدد ما زوجيا، فرذيا, أوليا، صحيحا،موجبا أو سالبا، أو إذا كان قابلا للقسمة على عدد معين. يرجع صحيح أو خاطئ.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "غير %1 بـ %2", "MATH_CHANGE_TOOLTIP": "إضف رقم إلى متغير '%1'.", "MATH_ROUND_HELPURL": "https://ar.wikipedia.org/wiki/تقريب_(رياضيات)", @@ -198,7 +191,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://ar.wikipedia.org/wiki/توليد_الأعداد_العشوائية", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "كسر عشوائي", "MATH_RANDOM_FLOAT_TOOLTIP": "يرجع جزء عشوائي بين 0.0 (ضمنياً) و 1.0 (خارجيا).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 من X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "عودة قوس ظل النقطة (س، ص) بالدرجات من -180 إلى 180.", "TEXT_TEXT_HELPURL": "https://ar.wikipedia.org/wiki/سلسلة_(علم_الحاسوب)", @@ -253,7 +245,6 @@ "TEXT_REPLACE_TOOLTIP": "استبدل جميع حالات حدوث بعض النصوص داخل نص آخر.", "TEXT_REVERSE_MESSAGE0": "عكس %1", "TEXT_REVERSE_TOOLTIP": "يعكس ترتيب حروف النص", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "إنشئ قائمة فارغة", "LISTS_CREATE_EMPTY_TOOLTIP": "تقوم بإرجاع قائمة، طولها 0, لا تحتوي على أية سجلات البيانات", "LISTS_CREATE_WITH_TOOLTIP": "أنشىء قائمة من أي عدد من العناصر.", @@ -311,7 +302,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "إلى # من نهاية", "LISTS_GET_SUBLIST_END_LAST": "إلى الأخير", "LISTS_GET_SUBLIST_TOOLTIP": "يقوم بإنشاء نسخة من الجزء المحدد من قائمة ما.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "رتب %1 %2 %3", "LISTS_SORT_TOOLTIP": "فرز نسخة من القائمة.", "LISTS_SORT_ORDER_ASCENDING": "تصاعديا", diff --git a/msg/json/az.json b/msg/json/az.json index 32097cc3b..b9b03f168 100644 --- a/msg/json/az.json +++ b/msg/json/az.json @@ -48,13 +48,11 @@ "COLOUR_PICKER_TOOLTIP": "Palitradan bir rəng seçin.", "COLOUR_RANDOM_TITLE": "təsadüfi rəng", "COLOUR_RANDOM_TOOLTIP": "Təsadüfi bir rəng seçin.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "rənglə", "COLOUR_RGB_RED": "qırmızı", "COLOUR_RGB_GREEN": "yaşıl", "COLOUR_RGB_BLUE": "mavi", "COLOUR_RGB_TOOLTIP": "Qırmızı, yaşıl və mavinin göstərilən miqdarı ilə bir rəng düzəlt. Bütün qiymətlər 0 ilə 100 arasında olmalıdır.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "qarışdır", "COLOUR_BLEND_COLOUR1": "rəng 1", "COLOUR_BLEND_COLOUR2": "rəng 2", @@ -111,11 +109,6 @@ "LOGIC_TERNARY_TOOLTIP": "'Yoxla' əmrindəki şərtə nəzər yetirin. Əgər şərt \"doğru\"-dursa \"əgər doğru\", əks halda isə \"əgər yalan\" cavabını qaytarır.", "MATH_NUMBER_HELPURL": "https://az.wikipedia.org/wiki/Ədəd", "MATH_NUMBER_TOOLTIP": "Ədəd.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tg", @@ -155,10 +148,8 @@ "MATH_IS_NEGATIVE": "mənfidir", "MATH_IS_DIVISIBLE_BY": "bölünür", "MATH_IS_TOOLTIP": "Bir ədədin cüt, tək, sadə, tam, müsbət, mənfi olmasını və ya müəyyən bir ədədə bölünməsini yoxlayır. \"Doğru\" və ya \"yalan\" qiymətini qaytarır.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "dəyiş: %1 buna: %2", "MATH_CHANGE_TOOLTIP": "'%1' dəyişəninin üzərinə bir ədəd artır.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Ədədi aşağı və ya yuxari yuvarlaqşdır.", "MATH_ROUND_OPERATOR_ROUND": "yuvarlaqlaşdır", "MATH_ROUND_OPERATOR_ROUNDUP": "yuxarı yuvarlaqlaşdır", @@ -179,20 +170,15 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Siyahının standart deviasiyasını qaytarır.", "MATH_ONLIST_OPERATOR_RANDOM": "siyahıdan təsadüfi seçilmiş bir element", "MATH_ONLIST_TOOLTIP_RANDOM": "Siyahıdan təsadüfi bir element qaytarır.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 bölməsinin qalığı", "MATH_MODULO_TOOLTIP": "İki ədədin nisbətindən alınan qalığı qaytarır.", "MATH_CONSTRAIN_TITLE": "%1 üçün ən aşağı %2, ən yuxarı %3 olmağı tələb et", "MATH_CONSTRAIN_TOOLTIP": "Bir ədədin verilmiş iki ədəd arasında olmasını tələb edir (sərhədlər də daxil olmaqla).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "%1 ilə %2 arasından təsadüfi tam ədəd", "MATH_RANDOM_INT_TOOLTIP": "Verilmiş iki ədəd arasından (ədədrlər də daxil olmaqla) təsadüfi bir tam ədəd qaytarır.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "təsadüfi kəsr", "MATH_RANDOM_FLOAT_TOOLTIP": "0.0 (daxil olmaqla) və 1.0 (daxil olmamaqla) ədədlərinin arasından təsadüfi bir kəsr ədəd qaytarır.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TOOLTIP": "(X,Y) nöqtələrinin -180 - 180 dərəcədə arktangensini hesabla.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Mətndəki hərf, söz və ya sətir.", "TEXT_JOIN_TITLE_CREATEWITH": "Verilmişlərlə mətn yarat", "TEXT_JOIN_TOOLTIP": "İxtiyari sayda elementlərinin birləşməsi ilə mətn parçası yarat.", @@ -301,7 +287,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "sondan # nömrəliyə", "LISTS_GET_SUBLIST_END_LAST": "Sonuncuya", "LISTS_GET_SUBLIST_TOOLTIP": "Siyahının təyin olunmuş hissəsinin surətini yaradın.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 sortlaşdır", "LISTS_SORT_TOOLTIP": "Siyahının nüsxəsini sortlaşdır.", "LISTS_SORT_ORDER_ASCENDING": "artan üzrə", @@ -331,9 +316,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Nəticəsi olan funksiya yaradır.", "PROCEDURES_ALLOW_STATEMENTS": "operatorlara icazə", "PROCEDURES_DEF_DUPLICATE_WARNING": "Xəbərdarlıq: Bu funksiyanın təkrar olunmuş parametrləri var.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Yaradılmış '%1' funksiyasını çalışdır.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Yaradılmış '%1' funksiyasını çalışdır və nəticəni istifadə et.", "PROCEDURES_MUTATORCONTAINER_TITLE": "girişlər", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Bu funksiyanın giriş parametrləri üçün əlavə et, sil, və ya yenilə.", diff --git a/msg/json/bcc.json b/msg/json/bcc.json index c8794faba..86f3d2dfa 100644 --- a/msg/json/bcc.json +++ b/msg/json/bcc.json @@ -2,10 +2,13 @@ "@metadata": { "authors": [ "Baloch Afghanistan", + "StarrySky", "Sultanselim baloch" ] }, "VARIABLES_DEFAULT_NAME": "مورد", + "UNNAMED_KEY": "بدون نام", + "TODAY": "مرۏچی", "DUPLICATE_BLOCK": "تکراری", "ADD_COMMENT": "افزودن نظر", "REMOVE_COMMENT": "حذف نظر", @@ -273,9 +276,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "تابعی با یک خروجی می‌سازد.", "PROCEDURES_ALLOW_STATEMENTS": "اجازه اظهارات", "PROCEDURES_DEF_DUPLICATE_WARNING": "اخطار: این تابعی پارامتر تکراری دارد.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://fa.wikipedia.org/wiki/%D8%B1%D9%88%DB%8C%D9%87_%28%D8%B9%D9%84%D9%88%D9%85_%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%29", "PROCEDURES_CALLNORETURN_TOOLTIP": "اجرای تابع تعریف‌شده توسط کاربر «%1».", - "PROCEDURES_CALLRETURN_HELPURL": "https://fa.wikipedia.org/wiki/%D8%B1%D9%88%DB%8C%D9%87_%28%D8%B9%D9%84%D9%88%D9%85_%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%29", "PROCEDURES_CALLRETURN_TOOLTIP": "اجرای تابع تعریف‌شده توسط کاربر «%1» و استفاده از خروجی آن.", "PROCEDURES_MUTATORCONTAINER_TITLE": "ورودی‌ها", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "افزودن، حذف یا دوباره مرتب‌کردن ورودی این تابع.", diff --git a/msg/json/be-tarask.json b/msg/json/be-tarask.json index f11f5917c..26db3ce69 100644 --- a/msg/json/be-tarask.json +++ b/msg/json/be-tarask.json @@ -57,7 +57,6 @@ "COLOUR_BLEND_COLOUR2": "колер 2", "COLOUR_BLEND_RATIO": "дзеля", "COLOUR_BLEND_TOOLTIP": "Зьмешвае два колеры ў дадзенай прапорцыі (0.0 — 1.0)", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "паўтарыць %1 раз(ы)", "CONTROLS_REPEAT_INPUT_DO": "выканаць", "CONTROLS_REPEAT_TOOLTIP": "Выконвае апэрацыі некалькі разоў.", @@ -141,10 +140,8 @@ "MATH_IS_NEGATIVE": "адмоўная", "MATH_IS_DIVISIBLE_BY": "дзеліцца на", "MATH_IS_TOOLTIP": "Правярае, ці зьяўляецца лік парным, няпарным, простым, станоўчым, адмоўным, ці ён дзеліцца на пэўны лік без астатку. Вяртае значэньне ісьціна або няпраўда.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "зьмяніць %1 на %2", "MATH_CHANGE_TOOLTIP": "Дадае лічбу да зьменнай '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Акругленьне ліку да большага ці меншага.", "MATH_ROUND_OPERATOR_ROUND": "акругліць", "MATH_ROUND_OPERATOR_ROUNDUP": "акругліць да большага", @@ -165,21 +162,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Вяртае стандартнае адхіленьне сьпісу.", "MATH_ONLIST_OPERATOR_RANDOM": "выпадковы элемэнт сьпісу", "MATH_ONLIST_TOOLTIP_RANDOM": "Вяртае выпадковы элемэнт сьпісу.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "рэшта дзяленьня %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Вяртае рэшту дзяленьня двух лікаў.", "MATH_CONSTRAIN_TITLE": "абмежаваць %1 зьнізу %2 зьверху %3", "MATH_CONSTRAIN_TOOLTIP": "Абмяжоўвае колькасьць ніжняй і верхняй межамі (уключна).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "выпадковая цэлая з %1 для %2", "MATH_RANDOM_INT_TOOLTIP": "Вяртае выпадковы цэлы лік паміж двума зададзенымі абмежаваньнямі ўключна.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "выпадковая дроб", "MATH_RANDOM_FLOAT_TOOLTIP": "Вяртае выпадковую дроб у дыяпазоне ад 0,0 (уключна) да 1,0.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 ад X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Вяртае арктангенс пункту (X, Y) у градусах ад -180 да 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Літара, слова ці радок тэксту.", "TEXT_JOIN_TITLE_CREATEWITH": "стварыць тэкст з", "TEXT_JOIN_TOOLTIP": "Стварае фрагмэнт тэксту аб’яднаньнем любой колькасьці элемэнтаў.", @@ -226,13 +218,10 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Запытаць у карыстальніка лічбу.", "TEXT_PROMPT_TOOLTIP_TEXT": "Запытаць у карыстальніка тэкст.", "TEXT_COUNT_MESSAGE0": "падлічыць %1 сярод %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Падлічвае колькі разоў нейкі тэкст сустракаецца ўнутры нейкага іншага тэксту.", "TEXT_REPLACE_MESSAGE0": "замяніць %1 на %2 у %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Замяняе ўсе выпадкі нейкага тэксту на іншы тэкст.", "TEXT_REVERSE_MESSAGE0": "адваротна %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Мяняе парадак сымбаляў у тэксьце на адваротны.", "LISTS_CREATE_EMPTY_TITLE": "стварыць пусты сьпіс", "LISTS_CREATE_EMPTY_TOOLTIP": "Вяртае сьпіс даўжынёй 0, які ня ўтрымлівае запісаў зьвестак", @@ -290,7 +279,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "па № з канца", "LISTS_GET_SUBLIST_END_LAST": "да апошняга", "LISTS_GET_SUBLIST_TOOLTIP": "Стварае копію пазначанай часткі сьпісу.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сартаваць %1 %2 %3", "LISTS_SORT_TOOLTIP": "Сартаваць копію сьпісу.", "LISTS_SORT_ORDER_ASCENDING": "па павелічэньні", @@ -303,7 +291,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "з падзяляльнікам", "LISTS_SPLIT_TOOLTIP_SPLIT": "Падзяліць тэкст у сьпіс тэкстаў, па падзяляльніках.", "LISTS_SPLIT_TOOLTIP_JOIN": "Аб’ядноўвае сьпіс тэкстаў у адзін тэкст па падзяляльніках.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "адваротна %1", "LISTS_REVERSE_TOOLTIP": "Зьмяняе парадак копіі сьпісу на адваротны.", "VARIABLES_GET_TOOLTIP": "Вяртае значэньне гэтай зьменнай.", @@ -321,9 +308,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Стварае функцыю з вынікам.", "PROCEDURES_ALLOW_STATEMENTS": "дазволіць зацьвярджэньне", "PROCEDURES_DEF_DUPLICATE_WARNING": "Увага: гэтая функцыя мае парамэтры-дублікаты.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Запусьціць функцыю вызначаную карыстальнікам '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Запусьціць функцыю вызначаную карыстальнікам '%1' і выкарыстаць яе вынік.", "PROCEDURES_MUTATORCONTAINER_TITLE": "парамэтры", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Дадаць, выдаліць ці запісаць чаргу ўваходных парамэтраў для гэтай функцыі.", @@ -332,7 +317,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Падсьвяціць вызначэньне функцыі", "PROCEDURES_CREATE_DO": "Стварыць '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Калі значэньне ісьціна, вярнуць другое значэньне.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Папярэджаньне: гэты блёк можа выкарыстоўвацца толькі ў вызначанай функцыі.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Напішыце што-небудзь…", "WORKSPACE_ARIA_LABEL": "Працоўная прастора Blockly", diff --git a/msg/json/be.json b/msg/json/be.json index a4d197de2..42db4ac1d 100644 --- a/msg/json/be.json +++ b/msg/json/be.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "No Sleep till Krupki", "SimondR", "ZlyiLev" ] @@ -276,7 +277,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "па # з канца", "LISTS_GET_SUBLIST_END_LAST": "па апошні", "LISTS_GET_SUBLIST_TOOLTIP": "Стварае копію ўказанай частцы спісу.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сартаваць %1 %2 %3", "LISTS_SORT_TOOLTIP": "Сартаваць копію спісу.", "LISTS_SORT_ORDER_ASCENDING": "па ўзрастанню", @@ -300,21 +300,21 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "выканаць нешта", "PROCEDURES_BEFORE_PARAMS": "з:", "PROCEDURES_CALL_BEFORE_PARAMS": "з:", - "PROCEDURES_DEFNORETURN_TOOLTIP": "Стварыць працэдуру, якая ня вяртае значэнне.", + "PROCEDURES_DEFNORETURN_TOOLTIP": "Стварыць функцыю, якая не вяртае значэнне.", "PROCEDURES_DEFNORETURN_COMMENT": "Апішыце гэтую функцыю...", "PROCEDURES_DEFRETURN_RETURN": "вярнуць", - "PROCEDURES_DEFRETURN_TOOLTIP": "Стварыць працэдуру, якая вяртае значэнне.", + "PROCEDURES_DEFRETURN_TOOLTIP": "Стварыць функцыю, якая вяртае значэнне.", "PROCEDURES_ALLOW_STATEMENTS": "дазволіць аператары", "PROCEDURES_DEF_DUPLICATE_WARNING": "Папярэджанне: гэтая функцыя мае паўтаральныя параметры.", "PROCEDURES_CALLNORETURN_HELPURL": "https://be.wikipedia.org/wiki/Падпраграма", - "PROCEDURES_CALLNORETURN_TOOLTIP": "Выконвае вызначаную карыстальнікам працэдуру '%1'.", + "PROCEDURES_CALLNORETURN_TOOLTIP": "Выконвае вызначаную карыстальнікам функцыю '%1'.", "PROCEDURES_CALLRETURN_HELPURL": "https://be.wikipedia.org/wiki/Падпраграма", - "PROCEDURES_CALLRETURN_TOOLTIP": "Выконвае вызначаную карыстальнікам працэдуру '%1' і вяртае вылічанае значэнне.", + "PROCEDURES_CALLRETURN_TOOLTIP": "Выконвае вызначаную карыстальнікам функцыю '%1' і ўжыць яе значэнне.", "PROCEDURES_MUTATORCONTAINER_TITLE": "параметры", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Дадаць, выдаліць або змяніць парадак уваходных параметраў для гэтай функцыі.", "PROCEDURES_MUTATORARG_TITLE": "імя параметра:", "PROCEDURES_MUTATORARG_TOOLTIP": "Дадаць уваходны параметр ў функцыю.", - "PROCEDURES_HIGHLIGHT_DEF": "Вылучыць вызначэнне працэдуры", + "PROCEDURES_HIGHLIGHT_DEF": "Вылучыць вызначэнне функцыі", "PROCEDURES_CREATE_DO": "Стварыць выклік '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Калі першае значэнне ісцінае, вяртае другое значэнне.", "PROCEDURES_IFRETURN_WARNING": "Папярэджанне: гэты блок можа выкарыстоўвацца толькі ўнутры вызначэння функцыі.", diff --git a/msg/json/bg.json b/msg/json/bg.json index eade47e5f..af46cf206 100644 --- a/msg/json/bg.json +++ b/msg/json/bg.json @@ -88,7 +88,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Добави, премахни или пренареди частите, за да промениш този „ако“ блок.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Добави условие към „ако“ блока.", "CONTROLS_IF_ELSE_TOOLTIP": "Добави окончателно, прихващащо всички останали случаи условие към блок „ако“.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Върни вярно, ако двата параметъра са еднакви.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Върни вярно, ако двата параметъра са различни.", "LOGIC_COMPARE_TOOLTIP_LT": "Върни вярно, ако първият параметър е по-малък от втория.", @@ -118,7 +117,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Върни произведението на двете числа.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Върни частното на двете числа.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Върни първото число, повдигнато на степен на второто число.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "корен квадратен", "MATH_SINGLE_TOOLTIP_ROOT": "Връща корен квадратен от число.", "MATH_SINGLE_OP_ABSOLUTE": "абсолютна", @@ -148,7 +146,6 @@ "MATH_CHANGE_HELPURL": "https://bg.wikipedia.org/wiki/Събиране", "MATH_CHANGE_TITLE": "промени %1 на %2", "MATH_CHANGE_TOOLTIP": "Добави число към променлива „%1“.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Закръгли число нагоре или надолу.", "MATH_ROUND_OPERATOR_ROUND": "закръгли", "MATH_ROUND_OPERATOR_ROUNDUP": "закръгли нагоре", @@ -180,7 +177,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://bg.wikipedia.org/wiki/Генератор_на_случайни_числа", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "случайно дробно число", "MATH_RANDOM_FLOAT_TOOLTIP": "Върни случайно дробно число между 0.0 (включително) и 1.0 (без да го включва)", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 от X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Връща аркустангенс на точка (X, Y) в градуси от -180 до 180.", "TEXT_TEXT_HELPURL": "https://bg.wikipedia.org/wiki/Низ", @@ -230,13 +226,10 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Питай потребителя за число.", "TEXT_PROMPT_TOOLTIP_TEXT": "Питай потребителя за текст.", "TEXT_COUNT_MESSAGE0": "пресмята броя на %1 в %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Преброй колко пъти даден текст се среща в друг текст.", "TEXT_REPLACE_MESSAGE0": "замяна на %1 с %2 в %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Замени всички появи на даден текст в друг текст.", "TEXT_REVERSE_MESSAGE0": "промени реда на обратно %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Промени реда на знаците в текста на обратно.", "LISTS_CREATE_EMPTY_TITLE": "създай празен списък", "LISTS_CREATE_EMPTY_TOOLTIP": "Връща списък с дължина 0, не съдържащ данни", @@ -294,7 +287,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "до № открая", "LISTS_GET_SUBLIST_END_LAST": "до края", "LISTS_GET_SUBLIST_TOOLTIP": "Копира част от списък.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сортиране по %1 %2 %3", "LISTS_SORT_TOOLTIP": "Подреди копие на списъка.", "LISTS_SORT_ORDER_ASCENDING": "възходящо", @@ -307,7 +299,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "с разделител", "LISTS_SPLIT_TOOLTIP_SPLIT": "Разделя текст в списък на текстове, по всеки разделител.", "LISTS_SPLIT_TOOLTIP_JOIN": "Събира списък от текстове в един текст, раделени с разделител.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "промени реда на обратно %1", "LISTS_REVERSE_TOOLTIP": "Промени реда на списъка на обратно.", "VARIABLES_GET_TOOLTIP": "Връща стойността на тази променлива.", @@ -336,7 +327,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Покажи дефиницията на функцията", "PROCEDURES_CREATE_DO": "Създай '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Ако стойността е вярна, върни втората стойност.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Предупреждение: Този блок може да се използва само във функция.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Коментирайте нещо...", "WORKSPACE_ARIA_LABEL": "Работна област на Blockly", diff --git a/msg/json/bn.json b/msg/json/bn.json index 722f2092d..6590d6f3c 100644 --- a/msg/json/bn.json +++ b/msg/json/bn.json @@ -143,7 +143,6 @@ "TEXT_TRIM_OPERATOR_RIGHT": "ডানপাশ থেকে খালি অংশ ছাটাই", "TEXT_PRINT_TITLE": "%1 মুদ্রণ করুন", "TEXT_REVERSE_MESSAGE0": "%1 উল্টান", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "LISTS_CREATE_EMPTY_TITLE": "খালি তালিকা তৈরি করুন", "LISTS_CREATE_EMPTY_TOOLTIP": "পাঠাবে একটি তালিকা, দের্ঘ্য হবে ০, কোন উপাত্ত থাকবে না", "LISTS_CREATE_WITH_TOOLTIP": "যেকোন সংখ্যক পদ নিয়ে একটি তালিকা তৈরি করুন।", diff --git a/msg/json/br.json b/msg/json/br.json index 886c149fc..a152d9fc1 100644 --- a/msg/json/br.json +++ b/msg/json/br.json @@ -58,7 +58,6 @@ "COLOUR_BLEND_COLOUR2": "liv 2", "COLOUR_BLEND_RATIO": "feur", "COLOUR_BLEND_TOOLTIP": "a gemmesk daou liv gant ur feur roet(0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "adober %1 gwech", "CONTROLS_REPEAT_INPUT_DO": "ober", "CONTROLS_REPEAT_TOOLTIP": "Seveniñ urzhioù zo meur a wech", @@ -85,7 +84,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Ouzhpennañ, lemel pe adurzhiañ ar rannoù evit kefluniañ ar bloc'h ma.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Ouzhpennañ un amplegad d'ar bloc'h ma.", "CONTROLS_IF_ELSE_TOOLTIP": "Ouzhpennañ un amplegad dibenn lak-pep-tra d'ar bloc'h ma.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Distreiñ gwir m'eo par an daou voned.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Distreiñ gwir ma n'eo ket par an daou voned.", "LOGIC_COMPARE_TOOLTIP_LT": "Distreiñ gwir m'eo bihanoc'h ar moned kentañ eget an eil.", @@ -132,7 +130,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Distreiñ ark sinuz un niver", "MATH_TRIG_TOOLTIP_ACOS": "Distreiñ ark kosinuz un niver", "MATH_TRIG_TOOLTIP_ATAN": "Distreiñ ark tangent un niver", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Distreiñ unan eus digemmennoù red : π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (anvevenn).", "MATH_IS_EVEN": "zo par", "MATH_IS_ODD": "zo ampar", @@ -142,10 +139,8 @@ "MATH_IS_NEGATIVE": "a zo negativel", "MATH_IS_DIVISIBLE_BY": "a zo rannadus dre", "MATH_IS_TOOLTIP": "Gwiriañ m'eo par, anpar, kentañ, muiel, leiel un niverenn pe ma c'haller rannañ anezhi dre un niver roet zo. Distreiñ gwir pe faos.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "kemmañ %1 gant %2", "MATH_CHANGE_TOOLTIP": "Ouzhpennañ un niver d'an argemmenn '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Rontaat un niver dindan pe a-us", "MATH_ROUND_OPERATOR_ROUND": "Rontaat", "MATH_ROUND_OPERATOR_ROUNDUP": "Rontaat a-us", @@ -166,21 +161,17 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Distreiñ forc'had standart al listenn.", "MATH_ONLIST_OPERATOR_RANDOM": "Elfennn eus al listenn tennet d'ar sord", "MATH_ONLIST_TOOLTIP_RANDOM": "Distreiñ un elfenn zargouezhek el listenn", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "rest eus %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Distreiñ dilerc'h rannadur an div niver", "MATH_CONSTRAIN_TITLE": "destrizhañ %1 etre %2 ha %3", "MATH_CONSTRAIN_TOOLTIP": "Destrizhañ un niver da vezañ etre ar bevennoù spisaet (enlakaet)", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "anterin dargouezhek etre %1 ha %2", "MATH_RANDOM_INT_TOOLTIP": "Distreiñ un anterin dargouezhek etre an div vevenn spisaet, endalc'het.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "Rann dargouezhek", "MATH_RANDOM_FLOAT_TOOLTIP": "Distreiñ ur rann dargouezhek etre 0.0 (enkaelat) hag 1.0 (ezkaelat).", "MATH_ATAN2_HELPURL": "https://fr.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 eus X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Adkas a ra ark tangent ar poent (X, Y) e derezioù etre -180 ha 180", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Ul lizherenn, ur ger pe ul linennad testenn.", "TEXT_JOIN_TITLE_CREATEWITH": "krouiñ un destenn gant", "TEXT_JOIN_TOOLTIP": "Krouit un tamm testenn en ur gevelstrollañ un niver bennak a elfennoù", @@ -227,17 +218,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Goulenn un niver gant an implijer.", "TEXT_PROMPT_TOOLTIP_TEXT": "Goulenn un destenn gant an implijer.", "TEXT_COUNT_MESSAGE0": "niver %1 war %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Kontañ pet gwech e c'hoarvez un destenn bennak en un destenn bennak all.", "TEXT_REPLACE_MESSAGE0": "erlec'hiañ %1 gant %2 e %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Erlec'hiañ holl reveziadennoù un destenn bennak gant un destenn all.", "TEXT_REVERSE_MESSAGE0": "eilpennañ %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Eilpennañ urzh an arouezennoù en destenn.", "LISTS_CREATE_EMPTY_TITLE": "krouiñ ur roll goullo", "LISTS_CREATE_EMPTY_TOOLTIP": "Distreiñ ul listenn, 0 a hirder, n'eus enrolladenn ebet enni", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Krouiñ ur roll gant un niver bennak a elfennoù.", "LISTS_CREATE_WITH_INPUT_WITH": "krouiñ ur roll gant", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "roll", @@ -292,7 +279,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "betek # adalek an dibenn", "LISTS_GET_SUBLIST_END_LAST": "betek ar fin", "LISTS_GET_SUBLIST_TOOLTIP": "Krouiñ un eilad eus lodenn spisaet ul listenn.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_SORT_TITLE": "Rummañ%1,%2,%3", "LISTS_SORT_TOOLTIP": "Rummañ un eilenn eus ar roll", "LISTS_SORT_ORDER_ASCENDING": "war gresk", @@ -300,13 +286,11 @@ "LISTS_SORT_TYPE_NUMERIC": "niverel", "LISTS_SORT_TYPE_TEXT": "Dre urzh al lizherenneg", "LISTS_SORT_TYPE_IGNORECASE": "Dre urzh al lizherenneg, hep derc'hel kont eus an direnneg", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "Krouiñ ul listenn diwar an destenn", "LISTS_SPLIT_TEXT_FROM_LIST": "Krouiñ un destenn diwar al listenn", "LISTS_SPLIT_WITH_DELIMITER": "gant an dispartier", "LISTS_SPLIT_TOOLTIP_SPLIT": "Troc'hañ un destenn en ul listennad testennoù, o troc'hañ e pep dispartier.", "LISTS_SPLIT_TOOLTIP_JOIN": "Bodañ ul listennad testennoù en ul listenn hepken, o tispartiañ anezho gant un dispartier.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "eilpennañ %1", "LISTS_REVERSE_TOOLTIP": "Eilpennañ un eilskrid eus ur roll.", "VARIABLES_GET_TOOLTIP": "Distreiñ talvoud an argemm-mañ.", @@ -324,9 +308,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Kouiñ un arc'hwel gant ur mont er-maez", "PROCEDURES_ALLOW_STATEMENTS": "aotren an disklêriadurioù", "PROCEDURES_DEF_DUPLICATE_WARNING": "Diwallit : an arc'hwel-mañ en deus arventennoù eiladet.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Seveniñ an arc'hwel '%1' termenet gant an implijer.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Seveniñ an arc'hwel '%1' termenet gant an implijer hag implijout e zisoc'h.", "PROCEDURES_MUTATORCONTAINER_TITLE": "Monedoù", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Ouzhpennañ, lemel, pe adkempenn monedoù an arc'hwel-mañ.", diff --git a/msg/json/ca.json b/msg/json/ca.json index 132abc577..e3ed2c52e 100644 --- a/msg/json/ca.json +++ b/msg/json/ca.json @@ -292,7 +292,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "fins # des del final", "LISTS_GET_SUBLIST_END_LAST": "fins l'últim", "LISTS_GET_SUBLIST_TOOLTIP": "Crea una còpia de la part especificada d'una llista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordenar %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordena la còpia d'una llista.", "LISTS_SORT_ORDER_ASCENDING": "ascendent", diff --git a/msg/json/cs.json b/msg/json/cs.json index 6cc5825c8..1855d9752 100644 --- a/msg/json/cs.json +++ b/msg/json/cs.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Amire80", "Chmee2", "Clon", "Dita", @@ -121,10 +122,6 @@ "LOGIC_TERNARY_TOOLTIP": "Zkontroluje podmínku v \"testu\". Když je podmínka pravda, vrátí hodnotu \"pokud pravda\"; v opačném případě vrátí hodnotu \"pokud nepravda\".", "MATH_NUMBER_HELPURL": "https://cs.wikipedia.org/wiki/Číslo", "MATH_NUMBER_TOOLTIP": "Číslo.", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -147,14 +144,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Vrátí desítkový logaritmus čísla.", "MATH_SINGLE_TOOLTIP_EXP": "Vrátí mocninu čísla e.", "MATH_SINGLE_TOOLTIP_POW10": "Vrátí mocninu čísla 10.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Vrátí sinus úhlu ve stupních.", "MATH_TRIG_TOOLTIP_COS": "Vrátí kosinus úhlu ve stupních.", "MATH_TRIG_TOOLTIP_TAN": "Vrátí tangens úhlu ve stupních.", "MATH_TRIG_TOOLTIP_ASIN": "Vrátí arkus sinus čísla.", "MATH_TRIG_TOOLTIP_ACOS": "Vrátí arkus kosinus čísla.", "MATH_TRIG_TOOLTIP_ATAN": "Vrátí arkus tangens čísla.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Vraťte jednu z následujících konstant: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (nekonečno).", "MATH_IS_EVEN": "je sudé", "MATH_IS_ODD": "je liché", @@ -164,10 +159,8 @@ "MATH_IS_NEGATIVE": "je záporné", "MATH_IS_DIVISIBLE_BY": "je dělitelné číslem", "MATH_IS_TOOLTIP": "Kontrola, zda je číslo sudé, liché, prvočíslo, celé, kladné, záporné nebo zda je dělitelné daným číslem. Vrací pravdu nebo nepravdu.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "zaměň %1 za %2", "MATH_CHANGE_TOOLTIP": "Přičti číslo k proměnné '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Zaokrouhlit číslo nahoru nebo dolů.", "MATH_ROUND_OPERATOR_ROUND": "zaokrouhlit", "MATH_ROUND_OPERATOR_ROUNDUP": "zaokrouhlit nahoru", @@ -305,7 +298,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "do # od konce", "LISTS_GET_SUBLIST_END_LAST": "jako poslední", "LISTS_GET_SUBLIST_TOOLTIP": "Vytvoří kopii určené části seznamu.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "seřadit %1 %2 %3", "LISTS_SORT_TOOLTIP": "Seřadit kopii seznamu.", "LISTS_SORT_ORDER_ASCENDING": "vzestupně", @@ -323,14 +315,13 @@ "VARIABLES_SET": "nastavit %1 na %2", "VARIABLES_SET_TOOLTIP": "Nastaví tuto proměnnou, aby se rovnala vstupu.", "VARIABLES_SET_CREATE_GET": "Vytvořit \"získat %1\"", - "PROCEDURES_DEFNORETURN_HELPURL": "https://cs.wikipedia.org/w/index.php?title=Funkce_(programování)", "PROCEDURES_DEFNORETURN_TITLE": "k provedení", "PROCEDURES_DEFNORETURN_PROCEDURE": "proveď něco", "PROCEDURES_BEFORE_PARAMS": "s:", "PROCEDURES_CALL_BEFORE_PARAMS": "s:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Vytvořit funkci bez výstupu.", "PROCEDURES_DEFNORETURN_COMMENT": "Popište tuto funkci...", - "PROCEDURES_DEFRETURN_HELPURL": "https://cs.wikipedia.org/w/index.php?title=Funkce_(programování)", + "PROCEDURES_DEFRETURN_HELPURL": "https://cs.wikipedia.org/wiki/Podprogram", "PROCEDURES_DEFRETURN_RETURN": "navrátit", "PROCEDURES_DEFRETURN_TOOLTIP": "Vytvořit funkci s výstupem.", "PROCEDURES_ALLOW_STATEMENTS": "povolit příkazy", @@ -346,7 +337,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Zvýraznit definici funkce", "PROCEDURES_CREATE_DO": "Vytvořit '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Je-li hodnota pravda, pak vrátí druhou hodnotu.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Varování: Tento blok může být použit pouze uvnitř definici funkce.", "DIALOG_OK": "OK", "DIALOG_CANCEL": "Zrušit" diff --git a/msg/json/da.json b/msg/json/da.json index fa4198c23..2795a69c6 100644 --- a/msg/json/da.json +++ b/msg/json/da.json @@ -6,6 +6,7 @@ "JonNPoulsen", "MGA73", "Mads Haupt", + "Peterleth", "RickiRunge", "Saederup92", "Tjernobyl" @@ -113,6 +114,12 @@ "MATH_NUMBER_HELPURL": "https://da.wikipedia.org/wiki/Tal", "MATH_NUMBER_TOOLTIP": "Et tal.", "MATH_DIVISION_SYMBOL": ":", + "MATH_TRIG_SIN": "sin", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "asin", + "MATH_TRIG_ACOS": "acos", + "MATH_TRIG_ATAN": "atan", "MATH_ARITHMETIC_HELPURL": "https://da.wikipedia.org/wiki/Aritmetik", "MATH_ARITHMETIC_TOOLTIP_ADD": "Returnere summen af de to tal.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Returnere forskellen mellem de to tal.", @@ -146,7 +153,6 @@ "MATH_IS_NEGATIVE": "er negativt", "MATH_IS_DIVISIBLE_BY": "er deleligt med", "MATH_IS_TOOLTIP": "Kontrollere, om et tal er lige, ulige, primtal, helt, positivt, negativt, eller om det er deleligt med bestemt tal. Returnere sandt eller falskt.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "skift %1 med %2", "MATH_CHANGE_TOOLTIP": "Læg et tal til variablen '%1'.", "MATH_ROUND_HELPURL": "https://da.wikipedia.org/wiki/Afrunding", @@ -181,7 +187,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://da.wikipedia.org/wiki/Tilfældighedsgenerator", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "tilfældigt decimaltal (mellem 0 og 1)", "MATH_RANDOM_FLOAT_TOOLTIP": "Returner et tilfældigt decimaltal mellem 0,0 (inklusiv) og 1,0 (eksklusiv).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 af X:%1 Y:%2", "TEXT_TEXT_HELPURL": "https://da.wikipedia.org/wiki/Tekststreng", "TEXT_TEXT_TOOLTIP": "En bogstav, et ord eller en linje med tekst.", @@ -255,6 +260,7 @@ "LISTS_GET_INDEX_GET": "hent", "LISTS_GET_INDEX_GET_REMOVE": "hent og fjern", "LISTS_GET_INDEX_REMOVE": "fjern", + "LISTS_GET_INDEX_FROM_START": "#", "LISTS_GET_INDEX_FROM_END": "# fra slutningen", "LISTS_GET_INDEX_FIRST": "første", "LISTS_GET_INDEX_LAST": "sidste", @@ -291,7 +297,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "til # fra slutningen", "LISTS_GET_SUBLIST_END_LAST": "til sidste", "LISTS_GET_SUBLIST_TOOLTIP": "Opretter en kopi af den angivne del af en liste.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sorter %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sorter en kopi af en liste.", "LISTS_SORT_ORDER_ASCENDING": "stigende", @@ -321,9 +326,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Opretter en funktion der har en returværdi.", "PROCEDURES_ALLOW_STATEMENTS": "tillad erklæringer", "PROCEDURES_DEF_DUPLICATE_WARNING": "Advarsel: Denne funktion har dublerede parametre.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Kør den brugerdefinerede funktion '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Kør den brugerdefinerede funktion '%1' og brug dens returværdi.", "PROCEDURES_MUTATORCONTAINER_TITLE": "parametre", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Tilføje, fjerne eller ændre rækkefølgen af parametre til denne funktion.", @@ -332,9 +335,10 @@ "PROCEDURES_HIGHLIGHT_DEF": "Markér funktionsdefinitionen", "PROCEDURES_CREATE_DO": "Opret '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Hvis en værdi er sand, så returnér en anden værdi.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Advarsel: Denne blok kan kun anvendes inden for en funktionsdefinition.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Sig noget ...", + "WORKSPACE_ARIA_LABEL": "Blockly Workspace", + "COLLAPSED_WARNINGS_WARNING": "Sammenklappede blokke indeholder advarsler.", "DIALOG_OK": "OK", "DIALOG_CANCEL": "Afbryd" } diff --git a/msg/json/de.json b/msg/json/de.json index 73ecf96f3..bc2edc511 100644 --- a/msg/json/de.json +++ b/msg/json/de.json @@ -1,6 +1,8 @@ { "@metadata": { "authors": [ + "Amire80", + "Brettchenweber", "Cvanca", "Dan-yell", "M165437", @@ -39,7 +41,7 @@ "REDO": "Wiederholen", "CHANGE_VALUE_TITLE": "Wert ändern:", "RENAME_VARIABLE": "Variable umbenennen …", - "RENAME_VARIABLE_TITLE": "Alle \"%1\" Variablen umbenennen in:", + "RENAME_VARIABLE_TITLE": "Alle \"%1\"-Variablen umbenennen in:", "NEW_VARIABLE": "Variable erstellen …", "NEW_STRING_VARIABLE": "Zeichenfolgenvariable erstellen …", "NEW_NUMBER_VARIABLE": "Zahlenvariable erstellen …", @@ -55,27 +57,25 @@ "COLOUR_PICKER_TOOLTIP": "Wählt eine Farbe aus der Palette aus.", "COLOUR_RANDOM_TITLE": "zufällige Farbe", "COLOUR_RANDOM_TOOLTIP": "Erzeugt eine Farbe nach dem Zufallsprinzip.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "Farbe aus", "COLOUR_RGB_RED": "rot", "COLOUR_RGB_GREEN": "grün", "COLOUR_RGB_BLUE": "blau", "COLOUR_RGB_TOOLTIP": "Erzeugt eine Farbe mit selbst definierten Rot-, Grün- und Blauwerten. Alle Werte müssen zwischen 0 und 100 liegen.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "mische", "COLOUR_BLEND_COLOUR1": "Farbe 1", "COLOUR_BLEND_COLOUR2": "und Farbe 2", "COLOUR_BLEND_RATIO": "im Verhältnis", "COLOUR_BLEND_TOOLTIP": "Vermischt 2 Farben mit konfigurierbarem Farbverhältnis (0.0 - 1.0).", "CONTROLS_REPEAT_HELPURL": "https://de.wikipedia.org/wiki/For-Schleife", - "CONTROLS_REPEAT_TITLE": "wiederhole %1 mal:", + "CONTROLS_REPEAT_TITLE": "wiederhole %1-mal:", "CONTROLS_REPEAT_INPUT_DO": "mache", "CONTROLS_REPEAT_TOOLTIP": "Eine Anweisung mehrfach ausführen.", "CONTROLS_WHILEUNTIL_HELPURL": "https://de.wikipedia.org/wiki/Schleife_%28Programmierung%29", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "wiederhole solange", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "wiederhole bis", - "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Führt Anweisungen aus solange die Bedingung wahr ist.", - "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Führt Anweisungen aus solange die Bedingung unwahr ist.", + "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Führt Anweisungen aus, solange die Bedingung wahr ist.", + "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Führt Anweisungen aus, solange die Bedingung unwahr ist.", "CONTROLS_FOR_HELPURL": "https://de.wikipedia.org/wiki/For-Schleife", "CONTROLS_FOR_TOOLTIP": "Zählt die Variable \"%1\" von einem Startwert bis zu einem Endwert und führt für jeden Wert eine Anweisung aus.", "CONTROLS_FOR_TITLE": "zähle %1 von %2 bis %3 in Schritten von %4", @@ -89,9 +89,9 @@ "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Diese Anweisung abbrechen und mit dem nächsten Schleifendurchlauf fortfahren.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Warnung: Dieser Baustein kann nur in einer Schleife verwendet werden.", "CONTROLS_IF_TOOLTIP_1": "Führt eine Anweisung aus, falls eine Bedingung wahr ist.", - "CONTROLS_IF_TOOLTIP_2": "Führt die erste Anweisung aus, falls eine Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus.", - "CONTROLS_IF_TOOLTIP_3": "Führt die erste Anweisung aus, falls die erste Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus, falls die zweite Bedingung wahr ist.", - "CONTROLS_IF_TOOLTIP_4": "Führe die erste Anweisung aus, falls die erste Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus, falls die zweite Bedingung wahr ist. Führt die dritte Anweisung aus, falls keine der beiden Bedingungen wahr ist", + "CONTROLS_IF_TOOLTIP_2": "Führt die erste Anweisung aus, falls eine Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus.", + "CONTROLS_IF_TOOLTIP_3": "Führt die erste Anweisung aus, falls die erste Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus, falls die zweite Bedingung wahr ist.", + "CONTROLS_IF_TOOLTIP_4": "Führe die erste Anweisung aus, falls die erste Bedingung wahr ist. Führt ansonsten die zweite Anweisung aus, falls die zweite Bedingung wahr ist. Führt die dritte Anweisung aus, falls keine der beiden Bedingungen wahr ist.", "CONTROLS_IF_MSG_IF": "falls", "CONTROLS_IF_MSG_ELSEIF": "sonst falls", "CONTROLS_IF_MSG_ELSE": "sonst", @@ -110,10 +110,10 @@ "LOGIC_OPERATION_TOOLTIP_OR": "Ist wahr, falls einer der beiden Werte wahr ist.", "LOGIC_OPERATION_OR": "oder", "LOGIC_NEGATE_TITLE": "nicht %1", - "LOGIC_NEGATE_TOOLTIP": "Ist wahr, falls der Eingabewert unwahr ist. Ist unwahr, falls der Eingabewert wahr ist.", + "LOGIC_NEGATE_TOOLTIP": "Ist wahr, falls der Eingabewert unwahr ist. Ist unwahr, falls der Eingabewert wahr ist.", "LOGIC_BOOLEAN_TRUE": "wahr", "LOGIC_BOOLEAN_FALSE": "falsch", - "LOGIC_BOOLEAN_TOOLTIP": "Ist entweder wahr oder falsch", + "LOGIC_BOOLEAN_TOOLTIP": "Ist entweder wahr oder falsch.", "LOGIC_NULL_HELPURL": "https://de.wikipedia.org/wiki/Nullwert", "LOGIC_NULL": "null", "LOGIC_NULL_TOOLTIP": "Ist \"null\".", @@ -121,7 +121,7 @@ "LOGIC_TERNARY_CONDITION": "prüfe", "LOGIC_TERNARY_IF_TRUE": "falls wahr", "LOGIC_TERNARY_IF_FALSE": "falls falsch", - "LOGIC_TERNARY_TOOLTIP": "Überprüft eine Bedingung \"prüfe\". Falls die Bedingung wahr ist, wird der \"falls wahr\" Wert zurückgegeben, andernfalls der \"falls unwahr\" Wert", + "LOGIC_TERNARY_TOOLTIP": "Überprüft eine Bedingung \"prüfe\". Falls die Bedingung wahr ist, wird der \"falls wahr\"-Wert zurückgegeben, andernfalls der \"falls unwahr\"-Wert", "MATH_NUMBER_HELPURL": "https://de.wikipedia.org/wiki/Zahl", "MATH_NUMBER_TOOLTIP": "Eine Zahl.", "MATH_ARITHMETIC_HELPURL": "https://de.wikipedia.org/wiki/Grundrechenart", @@ -156,7 +156,7 @@ "MATH_IS_POSITIVE": "ist positiv", "MATH_IS_NEGATIVE": "ist negativ", "MATH_IS_DIVISIBLE_BY": "ist teilbar durch", - "MATH_IS_TOOLTIP": "Überprüft ob eine Zahl gerade, ungerade, eine Primzahl, ganzzahlig, positiv, negativ oder durch eine zweite Zahl teilbar ist. Gibt wahr oder falsch zurück.", + "MATH_IS_TOOLTIP": "Überprüft, ob eine Zahl gerade, ungerade, eine Primzahl, ganzzahlig, positiv, negativ oder durch eine zweite Zahl teilbar ist. Gibt wahr oder falsch zurück.", "MATH_CHANGE_HELPURL": "https://de.wikipedia.org/wiki/Inkrement_und_Dekrement", "MATH_CHANGE_TITLE": "erhöhe %1 um %2", "MATH_CHANGE_TOOLTIP": "Addiert eine Zahl zu \"%1\".", @@ -177,7 +177,7 @@ "MATH_ONLIST_OPERATOR_MEDIAN": "Median der Liste", "MATH_ONLIST_TOOLTIP_MEDIAN": "Ist der Median aller Zahlen in einer Liste.", "MATH_ONLIST_OPERATOR_MODE": "am häufigsten in der Liste", - "MATH_ONLIST_TOOLTIP_MODE": "Findet die Werte mit dem häufigstem Vorkommen in der Liste.", + "MATH_ONLIST_TOOLTIP_MODE": "Findet die Werte mit dem häufigsten Vorkommen in der Liste.", "MATH_ONLIST_OPERATOR_STD_DEV": "Standardabweichung der Liste", "MATH_ONLIST_TOOLTIP_STD_DEV": "Ist die Standardabweichung aller Werte in der Liste.", "MATH_ONLIST_OPERATOR_RANDOM": "Zufallswert aus der Liste", @@ -198,7 +198,6 @@ "MATH_ATAN2_TOOLTIP": "Gibt den Arkustangens des Punktes (X, Y) in Grad von -180 bis 180 zurück.", "TEXT_TEXT_HELPURL": "https://de.wikipedia.org/wiki/Zeichenkette", "TEXT_TEXT_TOOLTIP": "Ein Buchstabe, Text oder Satz.", - "TEXT_JOIN_HELPURL": "", "TEXT_JOIN_TITLE_CREATEWITH": "erstelle Text aus", "TEXT_JOIN_TOOLTIP": "Erstellt einen Text durch das Verbinden von mehreren Textelementen.", "TEXT_CREATE_JOIN_TITLE_JOIN": "verbinden", @@ -210,12 +209,10 @@ "TEXT_LENGTH_TOOLTIP": "Die Anzahl von Zeichen in einem Text (inkl. Leerzeichen).", "TEXT_ISEMPTY_TITLE": "%1 ist leer", "TEXT_ISEMPTY_TOOLTIP": "Ist wahr, falls der Text keine Zeichen enthält.", - "TEXT_INDEXOF_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - "TEXT_INDEXOF_TOOLTIP": "Findet das erste / letzte Auftreten eines Suchbegriffs in einem Text. Gibt die Position des Begriffs zurück oder %1 falls der Suchbegriff nicht gefunden wurde.", + "TEXT_INDEXOF_TOOLTIP": "Findet das erste / letzte Auftreten eines Suchbegriffs in einem Text. Gibt die Position des Begriffs zurück oder %1 falls der Suchbegriff nicht gefunden wurde.", "TEXT_INDEXOF_TITLE": "im Text %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "suche erstes Auftreten des Begriffs", "TEXT_INDEXOF_OPERATOR_LAST": "suche letztes Auftreten des Begriffs", - "TEXT_CHARAT_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", "TEXT_CHARAT_TITLE": "im Text %1 %2", "TEXT_CHARAT_FROM_START": "nimm", "TEXT_CHARAT_FROM_END": "nimm von hinten", @@ -225,7 +222,6 @@ "TEXT_CHARAT_TAIL": "Buchstaben", "TEXT_CHARAT_TOOLTIP": "Extrahiert einen Buchstaben von einer bestimmten Position.", "TEXT_GET_SUBSTRING_TOOLTIP": "Gibt den angegebenen Textabschnitt zurück.", - "TEXT_GET_SUBSTRING_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "im Text", "TEXT_GET_SUBSTRING_START_FROM_START": "nimm Teil ab", "TEXT_GET_SUBSTRING_START_FROM_END": "nimm Teil ab von hinten", @@ -249,32 +245,25 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Fragt den Benutzer nach einer Zahl.", "TEXT_PROMPT_TOOLTIP_TEXT": "Fragt den Benutzer nach einem Text.", "TEXT_COUNT_MESSAGE0": "zähle %1 in %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Zähle, wie oft ein Text innerhalb eines anderen Textes vorkommt.", "TEXT_REPLACE_MESSAGE0": "ersetze %1 durch %2 in %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Ersetze alle Vorkommen eines Textes innerhalb eines anderen Textes.", "TEXT_REVERSE_MESSAGE0": "kehre %1 um", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Kehre die Reihenfolge der Zeichen im Text um.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "erzeuge eine leere Liste", "LISTS_CREATE_EMPTY_TOOLTIP": "Erzeugt eine leere Liste ohne Inhalt.", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Erzeugt eine Liste aus den angegebenen Elementen.", "LISTS_CREATE_WITH_INPUT_WITH": "erzeuge Liste mit", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "Liste", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Hinzufügen, entfernen und sortieren von Elementen.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Ein Element zur Liste hinzufügen.", - "LISTS_REPEAT_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - "LISTS_REPEAT_TOOLTIP": "Erzeugt eine Liste mit einer variablen Anzahl von Elementen", - "LISTS_REPEAT_TITLE": "erzeuge Liste mit %2 mal dem Element %1​", + "LISTS_REPEAT_TOOLTIP": "Erzeugt eine Liste mit einer variablen Anzahl von Elementen.", + "LISTS_REPEAT_TITLE": "erzeuge Liste mit %2-mal dem Element %1​", "LISTS_LENGTH_TITLE": "Länge von %1", "LISTS_LENGTH_TOOLTIP": "Die Anzahl von Elementen in der Liste.", "LISTS_ISEMPTY_TITLE": "%1 ist leer", "LISTS_ISEMPTY_TOOLTIP": "Ist wahr, falls die Liste leer ist.", "LISTS_INLIST": "in der Liste", - "LISTS_INDEX_OF_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", "LISTS_INDEX_OF_FIRST": "suche erstes Auftreten von", "LISTS_INDEX_OF_LAST": "suche letztes Auftreten von", "LISTS_INDEX_OF_TOOLTIP": "Sucht die Position (Index) eines Elementes in der Liste. Gibt %1 zurück, falls kein Element gefunden wurde.", @@ -301,7 +290,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "Entfernt das erste Element aus der Liste.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "Entfernt das letzte Element aus der Liste.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "Entfernt ein zufälliges Element aus der Liste.", - "LISTS_SET_INDEX_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", "LISTS_SET_INDEX_SET": "setze für", "LISTS_SET_INDEX_INSERT": "füge als", "LISTS_SET_INDEX_INPUT_TO": "ein", @@ -313,7 +301,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Fügt das Element an den Anfang der Liste an.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Fügt das Element ans Ende der Liste an.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Fügt das Element zufällig in die Liste ein.", - "LISTS_GET_SUBLIST_HELPURL": "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", "LISTS_GET_SUBLIST_START_FROM_START": "nimm Teilliste ab", "LISTS_GET_SUBLIST_START_FROM_END": "nimm Teilliste ab von hinten", "LISTS_GET_SUBLIST_START_FIRST": "nimm Teilliste ab erstes", @@ -322,7 +309,6 @@ "LISTS_GET_SUBLIST_END_LAST": "bis letztes", "LISTS_GET_SUBLIST_TAIL": "Element", "LISTS_GET_SUBLIST_TOOLTIP": "Erstellt eine Kopie mit dem angegebenen Abschnitt der Liste.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 sortieren", "LISTS_SORT_TOOLTIP": "Eine Kopie einer Liste sortieren.", "LISTS_SORT_ORDER_ASCENDING": "aufsteigend", @@ -330,32 +316,26 @@ "LISTS_SORT_TYPE_NUMERIC": "numerisch", "LISTS_SORT_TYPE_TEXT": "alphabetisch", "LISTS_SORT_TYPE_IGNORECASE": "alphabetisch, Großschreibung ignorieren", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "Liste aus Text erstellen", "LISTS_SPLIT_TEXT_FROM_LIST": "Text aus Liste erstellen", "LISTS_SPLIT_WITH_DELIMITER": "mit Trennzeichen", "LISTS_SPLIT_TOOLTIP_SPLIT": "Text in eine Liste mit Texten aufteilen, unterbrochen bei jedem Trennzeichen.", "LISTS_SPLIT_TOOLTIP_JOIN": "Liste mit Texten in einen Text vereinen, getrennt durch ein Trennzeichen.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "kehre %1 um", "LISTS_REVERSE_TOOLTIP": "Kehre eine Kopie einer Liste um.", "ORDINAL_NUMBER_SUFFIX": ".", - "VARIABLES_GET_HELPURL": "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", "VARIABLES_GET_TOOLTIP": "Gibt den Wert der Variable zurück.", "VARIABLES_GET_CREATE_SET": "Erzeuge \"Schreibe %1\"", - "VARIABLES_SET_HELPURL": "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", "VARIABLES_SET": "setze %1 auf %2", "VARIABLES_SET_TOOLTIP": "Setzt den Wert einer Variable.", - "VARIABLES_SET_CREATE_GET": "Erzeuge \"Lese %1\"", - "PROCEDURES_DEFNORETURN_HELPURL": "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + "VARIABLES_SET_CREATE_GET": "Erzeuge \"Lies %1\"", "PROCEDURES_DEFNORETURN_TITLE": "um", "PROCEDURES_DEFNORETURN_PROCEDURE": "etwas tun", "PROCEDURES_BEFORE_PARAMS": "mit:", "PROCEDURES_CALL_BEFORE_PARAMS": "mit:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Ein Funktionsblock ohne Rückgabewert.", "PROCEDURES_DEFNORETURN_COMMENT": "Beschreibe diese Funktion …", - "PROCEDURES_DEFRETURN_HELPURL": "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + "PROCEDURES_DEFRETURN_HELPURL": "https://de.wikipedia.org/wiki/Prozedur_(Programmierung)", "PROCEDURES_DEFRETURN_RETURN": "gib zurück", "PROCEDURES_DEFRETURN_TOOLTIP": "Ein Funktionsblock mit Rückgabewert.", "PROCEDURES_ALLOW_STATEMENTS": "Anweisungen erlauben", @@ -371,7 +351,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Markiere Funktionsblock", "PROCEDURES_CREATE_DO": "Erzeuge \"Aufruf %1\"", "PROCEDURES_IFRETURN_TOOLTIP": "Gibt den zweiten Wert zurück und verlässt die Funktion, falls der erste Wert wahr ist.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Warnung: Dieser Block darf nur innerhalb eines Funktionsblocks genutzt werden.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Teile etwas mit…", "WORKSPACE_ARIA_LABEL": "Blockly Arbeitsbereich", diff --git a/msg/json/diq.json b/msg/json/diq.json index f20562ebd..b3b0dcad5 100644 --- a/msg/json/diq.json +++ b/msg/json/diq.json @@ -16,16 +16,16 @@ "ADD_COMMENT": "Tefsir cı ke", "REMOVE_COMMENT": "Tefsiri Wedare", "DUPLICATE_COMMENT": "Mışewreyo zewnc", - "EXTERNAL_INPUTS": "Cıkewtışê xarıciy", + "EXTERNAL_INPUTS": "Cıkewtışê xarıciyi", "INLINE_INPUTS": "Cıkerdışê xomiyani", "DELETE_BLOCK": "Bloki bestere", "DELETE_X_BLOCKS": "%1 blokan bestere", "DELETE_ALL_BLOCKS": "Pêro %1 bloki besteriyê?", "CLEAN_UP": "Blokan pak ke", "COLLAPSE_BLOCK": "Bloki teng ke", - "COLLAPSE_ALL": "Blokan teng ke", + "COLLAPSE_ALL": "Kılitkerdışan teng ke", "EXPAND_BLOCK": "Bloki hera ke", - "EXPAND_ALL": "Blokan hera ke", + "EXPAND_ALL": "Kılitkerdışan hera ke", "DISABLE_BLOCK": "Çengi devre ra vec", "ENABLE_BLOCK": "Bloki feal ke", "HELP": "Peşti", @@ -51,14 +51,13 @@ "COLOUR_RANDOM_TOOLTIP": "Tesadufi yu ren bıweçin", "COLOUR_RGB_TITLE": "komponentên rengan", "COLOUR_RGB_RED": "sur", - "COLOUR_RGB_GREEN": "kıho", + "COLOUR_RGB_GREEN": "kesk", "COLOUR_RGB_BLUE": "kewe", "COLOUR_RGB_TOOLTIP": "Şıma renganê sûr, aşıl u kohoy ra rengê do spesifik vırazê. Gani ê pêro 0 u 100 miyan de bıbê.", "COLOUR_BLEND_TITLE": "tewde", "COLOUR_BLEND_COLOUR1": "reng 1", "COLOUR_BLEND_COLOUR2": "reng 2", "COLOUR_BLEND_RATIO": "nısbet", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 fıni tekrar ke", "CONTROLS_REPEAT_INPUT_DO": "bıke", "CONTROLS_REPEAT_TOOLTIP": "Şıma tayêna reyi akerdışi kerê.", @@ -78,7 +77,6 @@ "CONTROLS_IF_MSG_ELSEIF": "eke nêyo", "CONTROLS_IF_MSG_ELSE": "eke çıniyo", "CONTROLS_IF_ELSEIF_TOOLTIP": "Bloq da if'i rê yu şert dekerê de.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Debiyaye dı erci zey pêyêse ercê \"True\" dane.", "LOGIC_OPERATION_TOOLTIP_AND": "Eger her dı cıkewtışi zi raştê, şıma ageyrê.", "LOGIC_OPERATION_AND": "û", @@ -100,7 +98,6 @@ "MATH_ARITHMETIC_TOOLTIP_MINUS": "Ferqê dı amara tadê", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Reyina dı amara tadê", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Letey iya dı amara tadê", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "karekok", "MATH_SINGLE_TOOLTIP_ROOT": "Karerêçê yew amarer tadê", "MATH_SINGLE_OP_ABSOLUTE": "mutlaq", @@ -117,7 +114,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Arksinusê yew amari açarne.", "MATH_TRIG_TOOLTIP_ACOS": "Arkkosinusê yew amari açarne.", "MATH_TRIG_TOOLTIP_ATAN": "Arktangensê yew amari açarne.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Sabitanê wertağan ra yew açarne: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (bêpeyniye).", "MATH_IS_EVEN": "zewnco", "MATH_IS_ODD": "kıto", @@ -126,9 +122,7 @@ "MATH_IS_POSITIVE": "pozitifo", "MATH_IS_NEGATIVE": "negatifo", "MATH_IS_DIVISIBLE_BY": "Leteyêno", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "%2, keno %1 vurneno", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Yu amorer loğê cêri yana cori ke", "MATH_ROUND_OPERATOR_ROUND": "gılor ke", "MATH_ROUND_OPERATOR_ROUNDUP": "Loğê cori ke", @@ -145,15 +139,11 @@ "MATH_ONLIST_OPERATOR_STD_DEV": "Standart ferqıziya lista", "MATH_ONLIST_OPERATOR_RANDOM": "Raştamaye objeya lista", "MATH_ONLIST_TOOLTIP_RANDOM": "Liste ra yew elemento rastameye açarne.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 ra menden", "MATH_MODULO_TOOLTIP": "Mendeyan ra teqsimkerdışê dı amaran açarne.", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "Raştamaye nimande amor", "MATH_ATAN2_HELPURL": "https://diq.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2, X:%1 Y:%2", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Yu herfa, satır yana çekuya metini", "TEXT_JOIN_TITLE_CREATEWITH": "ya metin vıraz", "TEXT_CREATE_JOIN_TITLE_JOIN": "gıre de", @@ -224,7 +214,6 @@ "LISTS_GET_SUBLIST_END_FROM_START": "#'ya", "LISTS_GET_SUBLIST_END_FROM_END": "Peyni # ra hetana", "LISTS_GET_SUBLIST_END_LAST": "Hetana pey", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 weçine", "LISTS_SORT_TOOLTIP": "Kopyay yew lista rêz kerê", "LISTS_SORT_ORDER_ASCENDING": "zeydıyen", @@ -251,8 +240,6 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Yew fonksiyono çap daye vırazeno", "PROCEDURES_ALLOW_STATEMENTS": "ifade rê mısade bıde", "PROCEDURES_DEF_DUPLICATE_WARNING": "Tembe: Nê fonksiyoni de parametreyê dıleti estê.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_MUTATORCONTAINER_TITLE": "cıkewtışi", "PROCEDURES_MUTATORARG_TITLE": "namey cıkewtışi:", "PROCEDURES_MUTATORARG_TOOLTIP": "Funksiyoni rê yew cıkewtış ilawe ke.", diff --git a/msg/json/dty.json b/msg/json/dty.json index 92518f6a8..735647750 100644 --- a/msg/json/dty.json +++ b/msg/json/dty.json @@ -35,7 +35,6 @@ "VARIABLE_ALREADY_EXISTS": "'%1' नाउँ अरियाऽ भेरिएबल पैली बठेइ छ।", "DELETE_VARIABLE_CONFIRMATION": "'%2' भेरिएबला %1 प्रयोग मेट्ट्या?", "DELETE_VARIABLE": "'%1' भेरिएबल मेट:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "पैलेट बाट एक रंग चुन ।", "COLOUR_RANDOM_TITLE": "जुनसुकै रङ्ग", "COLOUR_RANDOM_TOOLTIP": "रैन्डम्ली एक रंग चयन गर ।", @@ -76,7 +75,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Add, remove, or reorder sections to reconfigure this if block.", "CONTROLS_IF_ELSEIF_TOOLTIP": "यदि ब्लकमा एक शर्त जोडौं ।", "CONTROLS_IF_ELSE_TOOLTIP": "Add a final, catch-all condition to the if block.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "यदी दुवै इनपुट एक अर्काका बराबर छन् भण्या टु रिटर्न गर ।", "LOGIC_COMPARE_TOOLTIP_NEQ": "यदी दुवै इनपुट एक अर्काको बराबर नाइथिन् भणया टु रिटर्न गर ।", "LOGIC_COMPARE_TOOLTIP_LT": "पैल्लो इनपुट दोसरा इनपुट है नानो भया ट्रू फिर्ता अर:।", diff --git a/msg/json/ee.json b/msg/json/ee.json index dbe546167..7d6b20aec 100644 --- a/msg/json/ee.json +++ b/msg/json/ee.json @@ -121,7 +121,6 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Nebu zigbɔzi neni 10-teƒe-10 awɔ xexlẽdzesia.", "MATH_SINGLE_TOOLTIP_EXP": "Nebu e-teƒe-e zigbɔzi xexlẽdzesia.", "MATH_SINGLE_TOOLTIP_POW10": " Nebu ewo-teƒe-ewo zigbɔzi xexlẽdzesia.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Nebu dzogɔe le digri me (menye radiã o).", "MATH_IS_EVEN": "enye eve ƒomevi", "MATH_IS_ODD": "enye etɔ̃ ƒomevi", diff --git a/msg/json/el.json b/msg/json/el.json index dd5705378..5522c9dbb 100644 --- a/msg/json/el.json +++ b/msg/json/el.json @@ -60,44 +60,35 @@ "DELETE_VARIABLE_CONFIRMATION": "Θέλετε να διαγράψετε το %1 που χρησιμοποιείτε από την μεταβλητή '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Δεν μπορώ να διαγράψω την μεταβλητή '%1' διότι είναι μέρος του ορισμού της λειτουργίας '%2'", "DELETE_VARIABLE": "Διαγράψτε την μεταβλητή '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Επιτρέπει επιλογή χρώματος από την παλέτα.", "COLOUR_RANDOM_TITLE": "τυχαίο χρώμα", "COLOUR_RANDOM_TOOLTIP": "Επιλέγει χρώμα τυχαία.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "χρώμα με", "COLOUR_RGB_RED": "κόκκινο", "COLOUR_RGB_GREEN": "πράσινο", "COLOUR_RGB_BLUE": "μπλε", "COLOUR_RGB_TOOLTIP": "Δημιουργήστε ένα χρώμα με την καθορισμένη ποσότητα κόκκινου, πράσινου και μπλε. Όλες οι τιμές πρέπει να είναι μεταξύ 0 και 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "μείγμα", "COLOUR_BLEND_COLOUR1": "χρώμα 1", "COLOUR_BLEND_COLOUR2": "χρώμα 2", "COLOUR_BLEND_RATIO": "αναλογία", "COLOUR_BLEND_TOOLTIP": "Συνδυάζει δύο χρώματα μαζί με μια δεδομένη αναλογία (0.0 - 1,0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "επανάλαβε %1 φορές", "CONTROLS_REPEAT_INPUT_DO": "κάνε", "CONTROLS_REPEAT_TOOLTIP": "Εκτελεί κάποιες εντολές αρκετές φορές.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "επανάλαβε ενώ", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "επανάλαβε μέχρι", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Εφόσον μια τιμή είναι αληθής, τότε εκτελεί κάποιες εντολές.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Εφόσον μια τιμή είναι ψευδής, τότε εκτελεί κάποιες εντολές.", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "Η μεταβλητή «%1» παίρνει τιμές ξεκινώντας από τον αριθμό έναρξης μέχρι τον αριθμό τέλους αυξάνοντας κάθε φορά με το καθορισμένο βήμα και εκτελώντας το καθορισμένο μπλοκ.", "CONTROLS_FOR_TITLE": "μέτρησε με %1 από το %2 έως το %3 ανά %4", - "CONTROLS_FOREACH_HELPURL": "https://github.com/google/blockly/wiki/Loops#for-each", "CONTROLS_FOREACH_TITLE": "για κάθε στοιχείο %1 στη λίστα %2", "CONTROLS_FOREACH_TOOLTIP": "Για κάθε στοιχείο σε μια λίστα, ορίζει τη μεταβλητή «%1» στο στοιχείο και, στη συνέχεια, εκτελεί κάποιες εντολές.", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "φεύγει από το μπλοκ επαναλήψεως", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "συνέχισε με την επόμενη επανάληψη του μπλοκ επαναλήψεως", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Ξεφεύγει (βγαίνει έξω) από την επανάληψη.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Παραλείπει το υπόλοιπο τμήμα αυτού του μπλοκ επαναλήψεως, και συνεχίζει με την επόμενη επανάληψη.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Προειδοποίηση: Αυτό το μπλοκ μπορεί να χρησιμοποιηθεί μόνο μέσα σε μια επανάληψη.", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "Αν μια τιμή είναι αληθής, τότε εκτελεί κάποιες εντολές.", "CONTROLS_IF_TOOLTIP_2": "Αν μια τιμή είναι αληθής, τότε εκτελεί το πρώτο τμήμα εντολών. Διαφορετικά, εκτελεί το δεύτερο τμήμα εντολών.", "CONTROLS_IF_TOOLTIP_3": "Αν η πρώτη τιμή είναι αληθής, τότε εκτελεί το πρώτο τμήμα εντολών. Διαφορετικά, αν η δεύτερη τιμή είναι αληθής, εκτελεί το δεύτερο μπλοκ εντολών.", @@ -108,39 +99,29 @@ "CONTROLS_IF_IF_TOOLTIP": "Προσθέτει, αφαιρεί ή αναδιατάσσει τα τμήματα για να αναδιαμορφώσει αυτό το μπλοκ «εάν».", "CONTROLS_IF_ELSEIF_TOOLTIP": "Πρόσθετει μια κατάσταση/συνθήκη στο μπλοκ «εάν».", "CONTROLS_IF_ELSE_TOOLTIP": "Προσθέτει μια τελική κατάσταση/συνθήκη, που πιάνει όλες τις άλλες περιπτώσεις, στο μπλοκ «εάν».", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Επιστρέφει αληθής αν και οι δύο είσοδοι είναι ίσες μεταξύ τους.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Επιστρέφει αληθής αν και οι δύο είσοδοι δεν είναι ίσες μεταξύ τους.", "LOGIC_COMPARE_TOOLTIP_LT": "Επιστρέφει αληθής αν η πρώτη είσοδος είναι μικρότερη από τη δεύτερη είσοδο.", "LOGIC_COMPARE_TOOLTIP_LTE": "Επιστρέφει αληθής αν η πρώτη είσοδος είναι μικρότερη από ή ίση με τη δεύτερη είσοδο.", "LOGIC_COMPARE_TOOLTIP_GT": "Επιστρέφει αληθής αν η πρώτη είσοδος είναι μεγαλύτερη από τη δεύτερη είσοδο.", "LOGIC_COMPARE_TOOLTIP_GTE": "Επιστρέφει αληθής αν η πρώτη είσοδος είναι μικρότερη ή ίση με τη δεύτερη είσοδο.", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "Επιστρέφει αληθής αν και οι δύο είσοδοι είναι αληθής.", "LOGIC_OPERATION_AND": "και", "LOGIC_OPERATION_TOOLTIP_OR": "Επιστρέφει αληθής αν τουλάχιστον μια από τις εισόδους είναι αληθής.", "LOGIC_OPERATION_OR": "ή", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "όχι %1", "LOGIC_NEGATE_TOOLTIP": "Επιστρέφει αληθής αν η είσοδος είναι ψευδής. Επιστρέφει ψευδής αν η είσοδος είναι αληθής.", - "LOGIC_BOOLEAN_HELPURL": "https://github.com/google/blockly/wiki/Logic#values", "LOGIC_BOOLEAN_TRUE": "αληθής", "LOGIC_BOOLEAN_FALSE": "ψευδής", "LOGIC_BOOLEAN_TOOLTIP": "Επιστρέφει είτε αληθής είτε ψευδής.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "κενό", "LOGIC_NULL_TOOLTIP": "Επιστρέφει κενό.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "έλεγχος", "LOGIC_TERNARY_IF_TRUE": "εάν είναι αληθής", "LOGIC_TERNARY_IF_FALSE": "εάν είναι ψευδής", "LOGIC_TERNARY_TOOLTIP": "Ελέγχει την κατάσταση/συνθήκη στον «έλεγχο». Αν η κατάσταση/συνθήκη είναι αληθής, επιστρέφει την τιμή «εάν αληθής», διαφορετικά επιστρέφει την τιμή «εάν ψευδής».", "MATH_NUMBER_HELPURL": "https://el.wikipedia.org/wiki/%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82", "MATH_NUMBER_TOOLTIP": "Ένας αριθμός.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", "MATH_POWER_SYMBOL": "^ ύψωση σε δύναμη", "MATH_TRIG_SIN": "ημ", "MATH_TRIG_COS": "συν", @@ -171,7 +152,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Επιστρέφει το τόξο ημίτονου ενός αριθμού.", "MATH_TRIG_TOOLTIP_ACOS": "Επιστρέφει το τόξο συνημίτονου ενός αριθμού.", "MATH_TRIG_TOOLTIP_ATAN": "Επιστρέφει το τόξο εφαπτομένης ενός αριθμού.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Επιστρέφει μία από τις κοινές σταθερές: π (3.141...), e (2.718...), φ (1.618...), sqrt(2) (1.414...), sqrt(½) (0.707...), ή ∞ (άπειρο).", "MATH_IS_EVEN": "είναι άρτιος", "MATH_IS_ODD": "είναι περιττός", @@ -184,7 +164,6 @@ "MATH_CHANGE_HELPURL": "https://el.wikipedia.org/wiki/%CE%A0%CF%81%CF%8C%CF%83%CE%B8%CE%B5%CF%83%CE%B7", "MATH_CHANGE_TITLE": "άλλαξε %1 αυξάνοντας κατά %2", "MATH_CHANGE_TOOLTIP": "Προσθέτει έναν αριθμό στη μεταβλητή «%1».", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Στρογγυλοποιεί έναν αριθμό προς τα πάνω ή προς τα κάτω.", "MATH_ROUND_OPERATOR_ROUND": "στρογγυλοποίησε", "MATH_ROUND_OPERATOR_ROUNDUP": "στρογγυλοποίησε προς τα πάνω", @@ -205,44 +184,34 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Επιστρέφει την τυπική απόκλιση της λίστας.", "MATH_ONLIST_OPERATOR_RANDOM": "τυχαίο στοιχείο λίστας", "MATH_ONLIST_TOOLTIP_RANDOM": "Επιστρέφει ένα τυχαίο στοιχείο από τη λίστα.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "υπόλοιπο της %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Επιστρέφει το υπόλοιπο της διαίρεσης των δύο αριθμών.", - "MATH_CONSTRAIN_HELPURL": "https://en.wikipedia.org/wiki/Clamping_(graphics)", "MATH_CONSTRAIN_TITLE": "περιόρισε %1 χαμηλή %2 υψηλή %3", "MATH_CONSTRAIN_TOOLTIP": "Περιορίζει έναν αριθμό μεταξύ των προβλεπόμενων ορίων (χωρίς αποκλεισμούς).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "τυχαίος ακέραιος από το %1 έως το %2", "MATH_RANDOM_INT_TOOLTIP": "Επιστρέφει έναν τυχαίο ακέραιο αριθμό μεταξύ δύο συγκεκριμένων ορίων (εντός - συμπεριλαμβανομένων και των ακραίων τιμών).", "MATH_RANDOM_FLOAT_HELPURL": "https://el.wikipedia.org/wiki/%CE%93%CE%B5%CE%BD%CE%BD%CE%AE%CF%84%CF%81%CE%B9%CE%B1_%CE%A4%CF%85%CF%87%CE%B1%CE%AF%CF%89%CE%BD_%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8E%CE%BD", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "τυχαίο κλάσμα", "MATH_RANDOM_FLOAT_TOOLTIP": "Επιστρέψει ένα τυχαία κλάσμα μεταξύ 0,0 (κλειστό) και 1,0 (ανοικτό).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 από X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Επιστρέφει την διαφορά τόξου των σημείων (X, Y) σε μοίρες από -180 σε 180.", "TEXT_TEXT_HELPURL": "https://el.wikipedia.org/wiki/%CE%A3%CF%85%CE%BC%CE%B2%CE%BF%CE%BB%CE%BF%CF%83%CE%B5%CE%B9%CF%81%CE%AC", "TEXT_TEXT_TOOLTIP": "Ένα γράμμα, μια λέξη ή μια γραμμή κειμένου.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "δημιούργησε κείμενο με", "TEXT_JOIN_TOOLTIP": "Δημιουργεί ένα κομμάτι κειμένου ενώνοντας έναν απεριόριστο αριθμό αντικειμένων.", "TEXT_CREATE_JOIN_TITLE_JOIN": "ένωσε", "TEXT_CREATE_JOIN_TOOLTIP": "Προσθέτει, αφαιρεί ή αναδιατάσσει τους τομείς για να αναδιαμορφώσει αυτό το μπλοκ κειμένου.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "Προσθέτει ένα στοιχείο στο κείμενο.", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "έως %1 ανάθεσε κείμενο %2", "TEXT_APPEND_TOOLTIP": "Αναθέτει κείμενο στη μεταβλητή «%1».", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "το μήκος του %1", "TEXT_LENGTH_TOOLTIP": "Επιστρέφει το πλήθος των γραμμάτων (συμπεριλαμβανομένων και των κενών διαστημάτων) στο παρεχόμενο κείμενο.", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "το %1 είναι κενό", "TEXT_ISEMPTY_TOOLTIP": "Επιστρέφει αληθής αν το παρεχόμενο κείμενο είναι κενό.", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "Επιστρέφει τον δείκτη της πρώτης/τελευταίας εμφάνισης του πρώτου κειμένου στο δεύτερο κείμενο. Επιστρέφει τιμή %1, αν δε βρει το κείμενο.", "TEXT_INDEXOF_TITLE": "στο κείμενο %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "βρες την πρώτη εμφάνιση του κειμένου", "TEXT_INDEXOF_OPERATOR_LAST": "βρες την τελευταία εμφάνιση του κειμένου", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "στο κείμενο %1 %2", "TEXT_CHARAT_FROM_START": "πάρε το γράμμα #", "TEXT_CHARAT_FROM_END": "πάρε το γράμμα # από το τέλος", @@ -251,7 +220,6 @@ "TEXT_CHARAT_RANDOM": "πάρε τυχαίο γράμμα", "TEXT_CHARAT_TOOLTIP": "Επιστρέφει το γράμμα στην καθορισμένη θέση.", "TEXT_GET_SUBSTRING_TOOLTIP": "Επιστρέφει ένα συγκεκριμένο τμήμα του κειμένου.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "στο κείμενο", "TEXT_GET_SUBSTRING_START_FROM_START": "πάρε τη δευτερεύουσα συμβολοσειρά από το # γράμμα", "TEXT_GET_SUBSTRING_START_FROM_END": "πάρε τη δευτερεύουσα συμβολοσειρά από το # γράμμα από το τέλος", @@ -259,17 +227,14 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "μέχρι το # γράμμα", "TEXT_GET_SUBSTRING_END_FROM_END": "μέχρι το # γράμμα από το τέλος", "TEXT_GET_SUBSTRING_END_LAST": "μέχρι το τελευταίο γράμμα", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "Επιστρέφει ένα αντίγραφο του κειμένου σε διαφορετική μορφή γραμμάτων.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "σε ΚΕΦΑΛΑΙΑ", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "σε πεζά", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "σε Λέξεις Με Πρώτα Κεφαλαία", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "Επιστρέφει ένα αντίγραφο του κειμένου με αφαιρεμένα τα κενά από το ένα ή και τα δύο άκρα.", "TEXT_TRIM_OPERATOR_BOTH": "περίκοψε τα κενά και από τις δυο πλευρές του", "TEXT_TRIM_OPERATOR_LEFT": "περίκοψε τα κενά από την αριστερή πλευρά του", "TEXT_TRIM_OPERATOR_RIGHT": "περίκοψε τα κενά από την δεξιά πλευρά του", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "εκτύπωσε %1", "TEXT_PRINT_TOOLTIP": "Εκτυπώνει το καθορισμένο κείμενο, αριθμό ή άλλη τιμή.", "TEXT_PROMPT_TYPE_TEXT": "πρότρεψε με μήνυμα για να δοθεί κείμενο", @@ -282,7 +247,6 @@ "TEXT_REPLACE_TOOLTIP": "Αντικαταστήστε όλα τα ήδη υπάρχοντα στοιχεία μέρους του κειμένου με κάποιο άλλο κείμενο", "TEXT_REVERSE_MESSAGE0": "ανάκληση %1", "TEXT_REVERSE_TOOLTIP": "Αναγραμματισμός των χαρακτήρων του κειμένου", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "δημιούργησε κενή λίστα", "LISTS_CREATE_EMPTY_TOOLTIP": "Επιστρέφει μια λίστα, με μήκος 0, η οποία δεν περιέχει εγγραφές δεδομένων", "LISTS_CREATE_WITH_TOOLTIP": "Δημιουργεί λίστα με οποιονδήποτε αριθμό αντικειμένων.", @@ -290,16 +254,13 @@ "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "λίστα", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Προσθέτει, αφαιρεί ή αναδιατάσσει τα τμήματα για να αναδιαμορφώσει αυτό το μπλοκ λίστας.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Προσθέτει αντικείμενο στη λίστα.", - "LISTS_REPEAT_HELPURL": "Blockly", "LISTS_REPEAT_TOOLTIP": "Δημιουργεί μια λίστα που αποτελείται από την δεδομένη τιμή που επαναλαμβάνεται για συγκεκριμένο αριθμό επαναλήψεων.", "LISTS_REPEAT_TITLE": "δημιούργησε λίστα με το στοιχείο %1 να επαναλαμβάνεται %2 φορές", - "LISTS_LENGTH_HELPURL": "Blockly", "LISTS_LENGTH_TITLE": "το μήκος του %1", "LISTS_LENGTH_TOOLTIP": "Επιστρέφει το μήκος μιας λίστας.", "LISTS_ISEMPTY_TITLE": "το %1 είναι κενό", "LISTS_ISEMPTY_TOOLTIP": "Επιστρέφει αληθής αν η λίστα είναι κενή.", "LISTS_INLIST": "στη λίστα", - "LISTS_INDEX_OF_HELPURL": "Blockly", "LISTS_INDEX_OF_FIRST": "βρες την πρώτη εμφάνιση του στοιχείου", "LISTS_INDEX_OF_LAST": "βρες την τελευταία εμφάνιση του στοιχείου", "LISTS_INDEX_OF_TOOLTIP": "Επιστρέφει τον δείκτη της πρώτης/τελευταίας εμφάνισης του στοιχείου στη λίστα. Επιστρέφει τιμή %1, αν το στοιχείο δεν βρεθεί.", @@ -336,7 +297,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Εισάγει το στοιχείο στην αρχή μιας λίστας.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Αναθέτει το στοιχείο στο τέλος μιας λίστας.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Εισάγει το στοιχείο τυχαία σε μια λίστα.", - "LISTS_GET_SUBLIST_HELPURL": "Blockly", "LISTS_GET_SUBLIST_START_FROM_START": "πάρε υπολίστα από #", "LISTS_GET_SUBLIST_START_FROM_END": "πάρε υπολίστα από # από το τέλος", "LISTS_GET_SUBLIST_START_FIRST": "πάρε υπολίστα από την αρχή", @@ -344,7 +304,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "έως # από το τέλος", "LISTS_GET_SUBLIST_END_LAST": "έως το τελευταίο", "LISTS_GET_SUBLIST_TOOLTIP": "Δημιουργεί ένα αντίγραφο του καθορισμένου τμήματος μιας λίστας.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "επιλογή %1 %2 %3", "LISTS_SORT_TOOLTIP": "Επιλέξετε ένα αντίγραφο της λίστας.", "LISTS_SORT_ORDER_ASCENDING": "Αύξουσα", @@ -364,14 +323,12 @@ "VARIABLES_SET": "ανάθεσε στην %1 το %2", "VARIABLES_SET_TOOLTIP": "Ορίζει αυτή τη μεταβλητή να είναι ίση με την είσοδο.", "VARIABLES_SET_CREATE_GET": "Δημιούργησε «πάρε %1»", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "στο", "PROCEDURES_DEFNORETURN_PROCEDURE": "κάνε κάτι", "PROCEDURES_BEFORE_PARAMS": "με:", "PROCEDURES_CALL_BEFORE_PARAMS": "με:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Δημιουργεί μια συνάρτηση χωρίς έξοδο.", "PROCEDURES_DEFNORETURN_COMMENT": "Περιγράψετε αυτήν την ιδιότητα..", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "επέστρεψε", "PROCEDURES_DEFRETURN_TOOLTIP": "Δημιουργεί μια συνάρτηση με μια έξοδο.", "PROCEDURES_ALLOW_STATEMENTS": "να επιτρέπονται οι δηλώσεις", diff --git a/msg/json/en-gb.json b/msg/json/en-gb.json index ae7d81b13..6bd8eccf9 100644 --- a/msg/json/en-gb.json +++ b/msg/json/en-gb.json @@ -52,7 +52,6 @@ "COLOUR_BLEND_COLOUR2": "colour 2", "COLOUR_BLEND_RATIO": "ratio", "COLOUR_BLEND_TOOLTIP": "Blends two colours together with a given ratio (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "repeat %1 times", "CONTROLS_REPEAT_INPUT_DO": "do", "CONTROLS_REPEAT_TOOLTIP": "Do some statements several times.", @@ -79,7 +78,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Add, remove, or reorder sections to reconfigure this if block.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Add a condition to the if block.", "CONTROLS_IF_ELSE_TOOLTIP": "Add a final, catch-all condition to the if block.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Return true if both inputs equal each other.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Return true if both inputs are not equal to each other.", "LOGIC_COMPARE_TOOLTIP_LT": "Return true if the first input is smaller than the second input.", @@ -101,15 +99,12 @@ "LOGIC_TERNARY_IF_TRUE": "if true", "LOGIC_TERNARY_IF_FALSE": "if false", "LOGIC_TERNARY_TOOLTIP": "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "A number.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Return the sum of the two numbers.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Return the difference of the two numbers.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Return the product of the two numbers.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Return the quotient of the two numbers.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Return the first number raised to the power of the second number.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "square root", "MATH_SINGLE_TOOLTIP_ROOT": "Return the square root of a number.", "MATH_SINGLE_OP_ABSOLUTE": "absolute", @@ -119,14 +114,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Return the base 10 logarithm of a number.", "MATH_SINGLE_TOOLTIP_EXP": "Return e to the power of a number.", "MATH_SINGLE_TOOLTIP_POW10": "Return 10 to the power of a number.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Return the sine of a degree (not radian).", "MATH_TRIG_TOOLTIP_COS": "Return the cosine of a degree (not radian).", "MATH_TRIG_TOOLTIP_TAN": "Return the tangent of a degree (not radian).", "MATH_TRIG_TOOLTIP_ASIN": "Return the arcsine of a number.", "MATH_TRIG_TOOLTIP_ACOS": "Return the arccosine of a number.", "MATH_TRIG_TOOLTIP_ATAN": "Return the arctangent of a number.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).", "MATH_IS_EVEN": "is even", "MATH_IS_ODD": "is odd", @@ -136,10 +129,8 @@ "MATH_IS_NEGATIVE": "is negative", "MATH_IS_DIVISIBLE_BY": "is divisible by", "MATH_IS_TOOLTIP": "Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "change %1 by %2", "MATH_CHANGE_TOOLTIP": "Add a number to variable '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Round a number up or down.", "MATH_ROUND_OPERATOR_ROUND": "round", "MATH_ROUND_OPERATOR_ROUNDUP": "round up", @@ -160,18 +151,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Return the standard deviation of the list.", "MATH_ONLIST_OPERATOR_RANDOM": "random item of list", "MATH_ONLIST_TOOLTIP_RANDOM": "Return a random element from the list.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "remainder of %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Return the remainder from dividing the two numbers.", "MATH_CONSTRAIN_TITLE": "constrain %1 low %2 high %3", "MATH_CONSTRAIN_TOOLTIP": "Constrain a number to be between the specified limits (inclusive).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "random integer from %1 to %2", "MATH_RANDOM_INT_TOOLTIP": "Return a random integer between the two specified limits, inclusive.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "random fraction", "MATH_RANDOM_FLOAT_TOOLTIP": "Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "A letter, word, or line of text.", "TEXT_JOIN_TITLE_CREATEWITH": "create text with", "TEXT_JOIN_TOOLTIP": "Create a piece of text by joining together any number of items.", diff --git a/msg/json/eo.json b/msg/json/eo.json index fa03930c5..d7b76c0ea 100644 --- a/msg/json/eo.json +++ b/msg/json/eo.json @@ -147,7 +147,6 @@ "MATH_CHANGE_HELPURL": "https://eo.wikipedia.org/wiki/Kremento", "MATH_CHANGE_TITLE": "krementi %1 per %2", "MATH_CHANGE_TOOLTIP": "Aldoni nombron al variablo '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Rondigi nombroj, supren aŭ malsupren.", "MATH_ROUND_OPERATOR_ROUND": "rondigi", "MATH_ROUND_OPERATOR_ROUNDUP": "Rondigi supren", @@ -173,7 +172,6 @@ "MATH_MODULO_TOOLTIP": "Liveri la reston de la divido de la du nombroj.", "MATH_CONSTRAIN_TITLE": "limigi %1 inter %2 kaj %3", "MATH_CONSTRAIN_TOOLTIP": "La nombro estos limigita tiel ke ĝi egalas la limojn aŭ troviĝas inter ili.", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "hazarda entjero inter %1 kaj %2", "MATH_RANDOM_INT_TOOLTIP": "Nombro estos hazarde liverita, tiel ke ĝi egalas la limojn aŭ troviĝas inter ili.", "MATH_RANDOM_FLOAT_HELPURL": "https://eo.wikipedia.org/wiki/Hazardo", @@ -290,7 +288,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ĝis elemento de inversa numero", "LISTS_GET_SUBLIST_END_LAST": "ĝis la lasta elemento", "LISTS_GET_SUBLIST_TOOLTIP": "Kreas kopion de la specifita parto de listo.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordigi %1 %2 liston %3", "LISTS_SORT_TOOLTIP": "Ordigas kopion de listo.", "LISTS_SORT_ORDER_ASCENDING": "kreskante", diff --git a/msg/json/es.json b/msg/json/es.json index 88c05ef7e..c45cf4e4c 100644 --- a/msg/json/es.json +++ b/msg/json/es.json @@ -153,7 +153,6 @@ "MATH_IS_NEGATIVE": "es negativo", "MATH_IS_DIVISIBLE_BY": "es divisible por", "MATH_IS_TOOLTIP": "Comprueba si un número es par, impar, primo, entero, positivo, negativo, o si es divisible por un número determinado. Devuelve verdadero o falso.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "añadir %2 a %1", "MATH_CHANGE_TOOLTIP": "Añadir un número a la variable «%1».", "MATH_ROUND_HELPURL": "https://es.wikipedia.org/wiki/Redondeo", @@ -177,7 +176,6 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Devuelve la desviación estándar de la lista.", "MATH_ONLIST_OPERATOR_RANDOM": "elemento aleatorio de la lista", "MATH_ONLIST_TOOLTIP_RANDOM": "Devuelve un elemento aleatorio de la lista.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "resto de %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Devuelve el resto al dividir los dos números.", "MATH_CONSTRAIN_TITLE": "limitar %1 entre %2 y %3", @@ -238,17 +236,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Solicitar al usuario un número.", "TEXT_PROMPT_TOOLTIP_TEXT": "Solicitar al usuario un texto.", "TEXT_COUNT_MESSAGE0": "contar %1 en %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Cuantas veces aparece un texto dentro de otro texto.", "TEXT_REPLACE_MESSAGE0": "reemplazar %1 con %2 en %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Reemplazar todas las veces que un texto dentro de otro texto.", "TEXT_REVERSE_MESSAGE0": "invertir %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Invierte el orden de los caracteres en el texto.", "LISTS_CREATE_EMPTY_TITLE": "crear lista vacía", "LISTS_CREATE_EMPTY_TOOLTIP": "Devuelve una lista, de longitud 0, sin ningún dato", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Crear una lista con cualquier número de elementos.", "LISTS_CREATE_WITH_INPUT_WITH": "crear lista con", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "lista", @@ -303,7 +297,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "hasta # del final", "LISTS_GET_SUBLIST_END_LAST": "hasta el último", "LISTS_GET_SUBLIST_TOOLTIP": "Crea una copia de la parte especificada de una lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "orden %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordenar una copia de una lista.", "LISTS_SORT_ORDER_ASCENDING": "ascendente", @@ -311,13 +304,11 @@ "LISTS_SORT_TYPE_NUMERIC": "numérico", "LISTS_SORT_TYPE_TEXT": "alfabético", "LISTS_SORT_TYPE_IGNORECASE": "alfabético, ignorar mayúscula/minúscula", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "hacer lista a partir de texto", "LISTS_SPLIT_TEXT_FROM_LIST": "hacer texto a partir de lista", "LISTS_SPLIT_WITH_DELIMITER": "con delimitador", "LISTS_SPLIT_TOOLTIP_SPLIT": "Dividir el texto en una lista de textos, separando en cada delimitador.", "LISTS_SPLIT_TOOLTIP_JOIN": "Unir una lista de textos en un solo texto, separado por un delimitador.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "invertir %1", "LISTS_REVERSE_TOOLTIP": "Invertir una copia de una lista.", "VARIABLES_GET_TOOLTIP": "Devuelve el valor de esta variable.", diff --git a/msg/json/et.json b/msg/json/et.json index 596928b03..91af281c5 100644 --- a/msg/json/et.json +++ b/msg/json/et.json @@ -44,7 +44,6 @@ "DELETE_VARIABLE_CONFIRMATION": "Kas kustutada %1 kohas kasutatav muutuja '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Muutujat '%1' ei saa kustutada, sest see on osa funktsiooni '%2' määratlusest", "DELETE_VARIABLE": "Kustuta muutuja '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Valitud värv paletist.", "COLOUR_RANDOM_TITLE": "juhuslik värv", "COLOUR_RANDOM_TOOLTIP": "Juhuslikult valitud värv.", @@ -58,7 +57,6 @@ "COLOUR_BLEND_COLOUR2": "2. värvist", "COLOUR_BLEND_RATIO": "suhtega", "COLOUR_BLEND_TOOLTIP": "Segab kaks värvi määratud suhtega (0.0 - 1.0) kokku.", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 korda", "CONTROLS_REPEAT_INPUT_DO": "käivita", "CONTROLS_REPEAT_TOOLTIP": "Plokis olevate käskude käivitamine määratud arv kordi.", @@ -85,7 +83,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Selle „kui“ ploki muutmine sektsioonide lisamise, eemaldamise ja järjestamisega.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Lisab „kui“ plokile tingimuse.", "CONTROLS_IF_ELSE_TOOLTIP": "Lisab „kui“ plokile lõpliku tingimuseta koodiploki.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Tagastab „tõene“, kui avaldiste väärtused on võrdsed.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Tagastab „tõene“, kui avaldiste väärtused pole võrdsed.", "LOGIC_COMPARE_TOOLTIP_LT": "Tagastab „tõene“, kui esimese avaldise väärtus on väiksem kui teise väärtus.", @@ -132,7 +129,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Tagastab arvu arkussiinuse.", "MATH_TRIG_TOOLTIP_ACOS": "Tagastab arvu arkuskoosiinuse.", "MATH_TRIG_TOOLTIP_ATAN": "Tagastab arvu arkustangensi.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Tagastab ühe konstantidest: π (3,141…), e (2,718…), φ (1.618…), √2) (1,414…), √½ (0,707…), või ∞ (infinity).", "MATH_IS_EVEN": "on paarisarv", "MATH_IS_ODD": "on paaritu arv", @@ -142,10 +138,8 @@ "MATH_IS_NEGATIVE": "on negatiivne arv", "MATH_IS_DIVISIBLE_BY": "jagub arvuga", "MATH_IS_TOOLTIP": "Kontrollib kas arv on paarisarv, paaritu arv, algarv, täisarv, positiivne, negatiivne või jagub kindla arvuga. Tagastab „tõene“ või „väär“.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "muuda %1 %2 võrra", "MATH_CHANGE_TOOLTIP": "Lisab arvu muutujale '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Ümardab arvu üles või alla.", "MATH_ROUND_OPERATOR_ROUND": "ümarda", "MATH_ROUND_OPERATOR_ROUNDUP": "ümarda üles", @@ -166,21 +160,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Tagastab loendi standardhälbe.", "MATH_ONLIST_OPERATOR_RANDOM": "juhuslik element loendist", "MATH_ONLIST_TOOLTIP_RANDOM": "Tagastab juhusliku elemendi loendist.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 jääk", "MATH_MODULO_TOOLTIP": "Tagastab esimese numbri teisega jagamisel tekkiva jäägi.", "MATH_CONSTRAIN_TITLE": "%1 piirang %2 ja %3 vahele", "MATH_CONSTRAIN_TOOLTIP": "Piirab arvu väärtuse toodud piiridesse (piirarvud kaasa arvatud).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "juhuslik täisarv %1 ja %2 vahel", "MATH_RANDOM_INT_TOOLTIP": "Tagastab juhusliku täisarvu toodud piiride vahel (piirarvud kaasa arvatud).", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "juhuslik murdosa", "MATH_RANDOM_FLOAT_TOOLTIP": "Tagastab juhusliku murdosa 0.0 (kaasa arvatud) and 1.0 (välja arvatud) vahel.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2(X:%1, Y:%2)", "MATH_ATAN2_TOOLTIP": "Tagastab punkti (X, Y) arkustangentsit kraadides vahemikus -180 kuni 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Täht, sõna või rida teksti.", "TEXT_JOIN_TITLE_CREATEWITH": "tekita tekst", "TEXT_JOIN_TOOLTIP": "Tekitab teksti ühendades mistahes arvu elemente.", @@ -289,7 +278,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "elemendini # (lõpust)", "LISTS_GET_SUBLIST_END_LAST": "lõpuni", "LISTS_GET_SUBLIST_TOOLTIP": "Tekitab loendi määratud osast koopia.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 sorteeritud %3", "LISTS_SORT_TOOLTIP": "Loendi koopia sorteerimine.", "LISTS_SORT_ORDER_ASCENDING": "kasvavalt", diff --git a/msg/json/eu.json b/msg/json/eu.json index 2a4e5b857..36d8651b6 100644 --- a/msg/json/eu.json +++ b/msg/json/eu.json @@ -141,10 +141,8 @@ "MATH_ONLIST_OPERATOR_STD_DEV": "zerrendako deribazio estandarra", "MATH_ONLIST_OPERATOR_RANDOM": "zerrendako artikulu aleatorioa", "MATH_ONLIST_TOOLTIP_RANDOM": "Itzuli zerrendako elementu aleatorioa.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2(r)en oroigarria", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "zatiki aleatorioa", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Letra bat, hitza edo testuko lerroa.", "TEXT_JOIN_TITLE_CREATEWITH": "Testua sortu hurrengoarekin", "TEXT_CREATE_JOIN_TITLE_JOIN": "elkartu", diff --git a/msg/json/fa.json b/msg/json/fa.json index 75bc96824..101026f3e 100644 --- a/msg/json/fa.json +++ b/msg/json/fa.json @@ -186,7 +186,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://fa.wikipedia.org/wiki/%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF_%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%DB%8C", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "کسر تصادفی", "MATH_RANDOM_FLOAT_TOOLTIP": "بازگرداندن کسری تصادفی بین ۰٫۰ (بسته) تا ۱٫۰ (باز).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "TEXT_TEXT_HELPURL": "https://fa.wikipedia.org/wiki/%D8%B1%D8%B4%D8%AA%D9%87_%28%D8%B9%D9%84%D9%88%D9%85_%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%29", "TEXT_TEXT_TOOLTIP": "یک حرف، کلمه یا خطی از متن.", "TEXT_JOIN_TITLE_CREATEWITH": "ایجاد متن با", @@ -295,7 +294,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "به # از انتها", "LISTS_GET_SUBLIST_END_LAST": "به آخرین", "LISTS_GET_SUBLIST_TOOLTIP": "کپی از قسمت مشخص‌شدهٔ لیست درست می‌کند.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "مرتب‌سازی%1 %2 %3", "LISTS_SORT_TOOLTIP": "یک کپی از لیست را مرتب کنید.", "LISTS_SORT_ORDER_ASCENDING": "صعودی", diff --git a/msg/json/fi.json b/msg/json/fi.json index 936c6930d..6e8dc079e 100644 --- a/msg/json/fi.json +++ b/msg/json/fi.json @@ -57,7 +57,6 @@ "COLOUR_PICKER_TOOLTIP": "Valitse väri paletista.", "COLOUR_RANDOM_TITLE": "satunnainen väri", "COLOUR_RANDOM_TOOLTIP": "Valitse väri sattumanvaraisesti.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "väri, jossa on", "COLOUR_RGB_RED": "punainen", "COLOUR_RGB_GREEN": "vihreä", @@ -68,7 +67,6 @@ "COLOUR_BLEND_COLOUR2": "väri 2", "COLOUR_BLEND_RATIO": "suhde", "COLOUR_BLEND_TOOLTIP": "Sekoittaa kaksi väriä keskenään annetussa suhteessa (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "toista %1 kertaa", "CONTROLS_REPEAT_INPUT_DO": "tee", "CONTROLS_REPEAT_TOOLTIP": "Suorita joukko lausekkeita useampi kertaa.", @@ -119,11 +117,7 @@ "LOGIC_TERNARY_TOOLTIP": "Tarkistaa testin ehdon. Jos ehto on tosi, palauttaa \"jos tosi\" arvon, muuten palauttaa \"jos epätosi\" arvon.", "MATH_NUMBER_HELPURL": "https://fi.wikipedia.org/wiki/Luku", "MATH_NUMBER_TOOLTIP": "Luku.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", "MATH_MULTIPLICATION_SYMBOL": "⋅", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -153,7 +147,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Palauttaa luvun arkussinin.", "MATH_TRIG_TOOLTIP_ACOS": "Palauttaa luvun arkuskosinin.", "MATH_TRIG_TOOLTIP_ATAN": "Palauttaa luvun arkustangentin.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Palauttaa jonkin seuraavista vakioista: π (3.141…), e (2.718…), φ (1.618…), neliöjuuri(2) (1.414…), neliöjuuri(½) (0.707…), or ∞ (ääretön).", "MATH_IS_EVEN": "on parillinen", "MATH_IS_ODD": "on pariton", @@ -187,7 +180,6 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Palauttaa annettujen lukujen keskihajonnan.", "MATH_ONLIST_OPERATOR_RANDOM": "satunnainen valinta luvuista", "MATH_ONLIST_TOOLTIP_RANDOM": "Palauttaa satunnaisesti valitun luvun annetuista luvuista.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 jakojäännös", "MATH_MODULO_TOOLTIP": "Palauttaa jakolaskun jakojäännöksen.", "MATH_CONSTRAIN_TITLE": "rajoita %1 vähintään %2 enintään %3", @@ -198,7 +190,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://fi.wikipedia.org/wiki/Satunnaisluku", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "satunnainen murtoluku", "MATH_RANDOM_FLOAT_TOOLTIP": "Palauttaa satunnaisen luvun oikealta puoliavoimesta välistä [0.0, 1.0).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan(X:%1,Y:%2)", "MATH_ATAN2_TOOLTIP": "Palauta pisteen (X,Y) arkustangentti välillä -180–180.", "TEXT_TEXT_HELPURL": "https://fi.wikipedia.org/wiki/Merkkijono", @@ -310,7 +301,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "päättyen kohtaan (lopusta laskien)", "LISTS_GET_SUBLIST_END_LAST": "viimeinen", "LISTS_GET_SUBLIST_TOOLTIP": "Luo kopio määrätystä kohden listaa.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "lajittele %1 %2 %3", "LISTS_SORT_TOOLTIP": "Lajittele kopio luettelosta.", "LISTS_SORT_ORDER_ASCENDING": "nouseva", @@ -351,7 +341,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Korosta funktion määritelmä", "PROCEDURES_CREATE_DO": "Luo '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Jos arvo on tosi, palauta toinen arvo.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Varoitus: tätä lohkoa voi käyttää vain funktion määrityksessä.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Sano jotakin...", "WORKSPACE_ARIA_LABEL": "Blocklyn työnäkymä", diff --git a/msg/json/fr.json b/msg/json/fr.json index 3b0913f7d..60a422eae 100644 --- a/msg/json/fr.json +++ b/msg/json/fr.json @@ -61,13 +61,11 @@ "COLOUR_PICKER_TOOLTIP": "Choisir une couleur dans la palette.", "COLOUR_RANDOM_TITLE": "couleur aléatoire", "COLOUR_RANDOM_TOOLTIP": "Choisir une couleur au hasard.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "colorier en", "COLOUR_RGB_RED": "rouge", "COLOUR_RGB_GREEN": "vert", "COLOUR_RGB_BLUE": "bleu", "COLOUR_RGB_TOOLTIP": "Créer une couleur avec la quantité spécifiée de rouge, vert et bleu. Les valeurs doivent être comprises entre 0 et 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "mélanger", "COLOUR_BLEND_COLOUR1": "couleur 1", "COLOUR_BLEND_COLOUR2": "couleur 2", @@ -77,20 +75,24 @@ "CONTROLS_REPEAT_TITLE": "répéter %1 fois", "CONTROLS_REPEAT_INPUT_DO": "faire", "CONTROLS_REPEAT_TOOLTIP": "Exécuter des instructions plusieurs fois.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", + "CONTROLS_WHILEUNTIL_HELPURL": "https://fr.wikipedia.org/wiki/Boucle_while", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "répéter tant que", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "répéter jusqu’à ce que", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Tant qu’une valeur est vraie, alors exécuter des instructions.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Tant qu’une valeur est fausse, alors exécuter des instructions.", + "CONTROLS_FOR_HELPURL": "https://fr.wikipedia.org/wiki/Boucle_for", "CONTROLS_FOR_TOOLTIP": "Faire prendre successivement à la variable « %1 » les valeurs entre deux nombres de début et de fin par incrément du pas spécifié et exécuter les instructions spécifiées.", "CONTROLS_FOR_TITLE": "compter avec %1 de %2 à %3 par %4", + "CONTROLS_FOREACH_HELPURL": "https://fr.wikipedia.org/wiki/Structure_de_contrôle#Itérateurs", "CONTROLS_FOREACH_TITLE": "pour chaque élément %1 dans la liste %2", "CONTROLS_FOREACH_TOOLTIP": "Pour chaque élément d’une liste, assigner la valeur de l’élément à la variable « %1 », puis exécuter des instructions.", + "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://fr.wikipedia.org/wiki/Structure_de_contrôle#Commandes_de_sortie_de_boucle", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "quitter la boucle", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "passer à l’itération de boucle suivante", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Sortir de la boucle englobante.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Sauter le reste de cette boucle, et poursuivre avec l’itération suivante.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Attention : ce bloc ne devrait être utilisé que dans une boucle.", + "CONTROLS_IF_HELPURL": "https://fr.wikipedia.org/wiki/Structure_de_contrôle#Alternatives", "CONTROLS_IF_TOOLTIP_1": "Si une valeur est vraie, alors exécuter certaines instructions.", "CONTROLS_IF_TOOLTIP_2": "Si une valeur est vraie, alors exécuter le premier bloc d’instructions. Sinon, exécuter le second bloc d’instructions.", "CONTROLS_IF_TOOLTIP_3": "Si la première valeur est vraie, alors exécuter le premier bloc d’instructions. Sinon, si la seconde valeur est vraie, exécuter le second bloc d’instructions.", @@ -108,16 +110,18 @@ "LOGIC_COMPARE_TOOLTIP_LTE": "Renvoyer vrai si la première entrée est plus petite ou égale à la seconde.", "LOGIC_COMPARE_TOOLTIP_GT": "Renvoyer vrai si la première entrée est plus grande que la seconde.", "LOGIC_COMPARE_TOOLTIP_GTE": "Renvoyer true si la première entrée est supérieure ou égale à la seconde.", + "LOGIC_OPERATION_HELPURL": "https://fr.wikipedia.org/wiki/Connecteur_logique", "LOGIC_OPERATION_TOOLTIP_AND": "Renvoyer vrai si les deux entrées sont vraies.", "LOGIC_OPERATION_AND": "et", "LOGIC_OPERATION_TOOLTIP_OR": "Renvoyer vrai si au moins une des entrées est vraie.", "LOGIC_OPERATION_OR": "ou", + "LOGIC_NEGATE_HELPURL": "https://fr.wikipedia.org/wiki/Négation_logique", "LOGIC_NEGATE_TITLE": "non %1", "LOGIC_NEGATE_TOOLTIP": "Renvoie vrai si l’entrée est fausse. Renvoie faux si l’entrée est vraie.", + "LOGIC_BOOLEAN_HELPURL": "https://fr.wikipedia.org/wiki/Principe_de_bivalence", "LOGIC_BOOLEAN_TRUE": "vrai", "LOGIC_BOOLEAN_FALSE": "faux", "LOGIC_BOOLEAN_TOOLTIP": "Renvoie soit vrai soit faux.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "nul", "LOGIC_NULL_TOOLTIP": "Renvoie nul.", "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F%3A", @@ -127,11 +131,7 @@ "LOGIC_TERNARY_TOOLTIP": "Vérifie la condition indiquée dans « test ». Si elle est vraie, renvoie la valeur « si vrai » ; sinon renvoie la valeur « si faux ».", "MATH_NUMBER_HELPURL": "https://fr.wikipedia.org/wiki/Nombre", "MATH_NUMBER_TOOLTIP": "Un nombre.", - "MATH_ADDITION_SYMBOL": "+", "MATH_SUBTRACTION_SYMBOL": "−", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -152,7 +152,7 @@ "MATH_SINGLE_TOOLTIP_NEG": "Renvoie l’opposé d’un nombre", "MATH_SINGLE_TOOLTIP_LN": "Renvoie le logarithme naturel d’un nombre.", "MATH_SINGLE_TOOLTIP_LOG10": "Renvoie le logarithme décimal d’un nombre.", - "MATH_SINGLE_TOOLTIP_EXP": "Renvoie e à la puissance d’un nombre.", + "MATH_SINGLE_TOOLTIP_EXP": "Renvoie e (la constante d’Euler) élevé à la puissance d’un nombre donné, c’est-à-dire l’exponentielle népérienne ou naturelle de ce nombre.", "MATH_SINGLE_TOOLTIP_POW10": "Renvoie 10 à la puissance d’un nombre.", "MATH_TRIG_HELPURL": "https://fr.wikipedia.org/wiki/Fonction_trigonom%C3%A9trique", "MATH_TRIG_TOOLTIP_SIN": "Renvoie le sinus d’un angle en degrés (pas en radians).", @@ -179,6 +179,7 @@ "MATH_ROUND_OPERATOR_ROUND": "arrondir", "MATH_ROUND_OPERATOR_ROUNDUP": "arrondir par excès (à l’entier supérieur le plus proche)", "MATH_ROUND_OPERATOR_ROUNDDOWN": "arrondir par défaut (à l’entier inférieur le plus proche)", + "MATH_ONLIST_HELPURL": "https://fr.wikipedia.org/wiki/Fonction_d'agrégation", "MATH_ONLIST_OPERATOR_SUM": "somme de la liste", "MATH_ONLIST_TOOLTIP_SUM": "Renvoyer la somme de tous les nombres dans la liste.", "MATH_ONLIST_OPERATOR_MIN": "minimum de la liste", @@ -256,17 +257,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Demander un nombre à l’utilisateur.", "TEXT_PROMPT_TOOLTIP_TEXT": "Demander un texte à l’utilisateur.", "TEXT_COUNT_MESSAGE0": "nombre %1 sur %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Compter combien de fois un texte donné apparaît dans un autre.", "TEXT_REPLACE_MESSAGE0": "remplacer %1 par %2 dans %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Remplacer toutes les occurrences d’un texte par un autre.", "TEXT_REVERSE_MESSAGE0": "renverser %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Renverse l’ordre des caractères dans le texte.", "LISTS_CREATE_EMPTY_TITLE": "créer une liste vide", "LISTS_CREATE_EMPTY_TOOLTIP": "Renvoyer une liste, de longueur 0, ne contenant aucun enregistrement de données", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Créer une liste avec un nombre quelconque d’éléments.", "LISTS_CREATE_WITH_INPUT_WITH": "créer une liste avec", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "liste", @@ -321,9 +318,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "jusqu’au n°", "LISTS_GET_SUBLIST_END_FROM_END": "jusqu’au n° depuis la fin", "LISTS_GET_SUBLIST_END_LAST": "jusqu’à la fin", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "Crée une copie de la partie spécifiée d’une liste.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "trier %1 %2 %3", "LISTS_SORT_TOOLTIP": "Trier une copie d’une liste.", "LISTS_SORT_ORDER_ASCENDING": "croissant", @@ -331,16 +326,13 @@ "LISTS_SORT_TYPE_NUMERIC": "numérique", "LISTS_SORT_TYPE_TEXT": "alphabétique", "LISTS_SORT_TYPE_IGNORECASE": "alphabétique, en ignorant la casse", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "créer une liste depuis le texte", "LISTS_SPLIT_TEXT_FROM_LIST": "créer un texte depuis la liste", "LISTS_SPLIT_WITH_DELIMITER": "avec séparateur", "LISTS_SPLIT_TOOLTIP_SPLIT": "Couper un texte en une liste de textes, en coupant à chaque séparateur.", "LISTS_SPLIT_TOOLTIP_JOIN": "Réunir une liste de textes en un seul, en les joignant par un séparateur.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "inverser %1", "LISTS_REVERSE_TOOLTIP": "Inverser la copie d’une liste.", - "ORDINAL_NUMBER_SUFFIX": "", "VARIABLES_GET_TOOLTIP": "Renvoie la valeur de cette variable.", "VARIABLES_GET_CREATE_SET": "Créer « définir %1 »", "VARIABLES_SET": "définir %1 à %2", @@ -351,7 +343,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "faire quelque chose", "PROCEDURES_BEFORE_PARAMS": "avec :", "PROCEDURES_CALL_BEFORE_PARAMS": "avec :", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Crée une fonction sans sortie.", "PROCEDURES_DEFNORETURN_COMMENT": "Décrivez cette fonction...", "PROCEDURES_DEFRETURN_HELPURL": "https://fr.wikipedia.org/wiki/Sous-programme", @@ -370,7 +361,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Surligner la définition de la fonction", "PROCEDURES_CREATE_DO": "Créer « %1 »", "PROCEDURES_IFRETURN_TOOLTIP": "Si une valeur est vraie, alors renvoyer une seconde valeur.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Attention : ce bloc ne peut être utilisé que dans une définition de fonction.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Expliquez quelque chose...", "WORKSPACE_ARIA_LABEL": "Espace de travail de Blocky", diff --git a/msg/json/gor.json b/msg/json/gor.json index 2128e88b0..84f08d896 100644 --- a/msg/json/gor.json +++ b/msg/json/gor.json @@ -43,7 +43,6 @@ "COLOUR_BLEND_COLOUR2": "laku 2", "COLOUR_BLEND_RATIO": "rasio", "COLOUR_BLEND_TOOLTIP": "Mongulawu dulo laku pe'eenta wolo rasio (0.0-1.0)", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ulangiya %1 kali", "CONTROLS_REPEAT_INPUT_DO": "pohutuwa", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "Ulangiya wonu", @@ -54,7 +53,6 @@ "CONTROLS_IF_MSG_IF": "wonu", "CONTROLS_IF_MSG_ELSEIF": "wonu uweewo", "CONTROLS_IF_MSG_ELSE": "uweewo", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_OPERATION_AND": "wawu", "LOGIC_OPERATION_OR": "meyalo", "LOGIC_NEGATE_TITLE": "diila %1", @@ -64,13 +62,8 @@ "LOGIC_TERNARY_CONDITION": "yimontalo", "LOGIC_TERNARY_IF_TRUE": "wonu banari", "LOGIC_TERNARY_IF_FALSE": "wonu tala", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Noomoro", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "akar pangkat dua", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).", "TEXT_CREATE_JOIN_TITLE_JOIN": "wayito", "TEXT_CREATE_JOIN_TOOLTIP": "Duhengi, yinggila, meyalo susungiya ulangi tuladu blok.", diff --git a/msg/json/ha.json b/msg/json/ha.json index 9f11230c7..7bf61441a 100644 --- a/msg/json/ha.json +++ b/msg/json/ha.json @@ -39,7 +39,6 @@ "DELETE_VARIABLE_CONFIRMATION": "A goge amfanunnukan %1 na siffar '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "An kasa goge siffa '%1' sabo da tana daga sashi na bayanin aikin '%2'", "DELETE_VARIABLE": "A goge siffar '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Zaɓi launi daga faifan launuka.", "COLOUR_RANDOM_TITLE": "launuka da aka hargitsa", "COLOUR_RANDOM_TOOLTIP": "Zaɓi launi daga wanɗanda aka hargitsa.", @@ -53,7 +52,6 @@ "COLOUR_BLEND_COLOUR2": "launi na 2", "COLOUR_BLEND_RATIO": "lissafi", "COLOUR_BLEND_TOOLTIP": "Ana gauraya launuka biyu tare da wani lissafi da aka bayar (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "maimaita sau %1", "CONTROLS_REPEAT_INPUT_DO": "yi", "CONTROLS_REPEAT_TOOLTIP": "Yi wasu bayanai sau da dama.", @@ -80,7 +78,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Daɗa, cire, ko sake tsarin ɓangarori domin sake fasalin wannan idan bulo.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Daɗa sharaɗi zuwa idan bulo.", "CONTROLS_IF_ELSE_TOOLTIP": "Daɗa na ƙarshe, sharaɗin kama-duk zuwa idan bulo.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Koma gaskiya idan duk bayanan sun yi dai dai da juna.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Koma gaskiya idan duk bayanan ba su yi dai dai da juna ba.", "LOGIC_COMPARE_TOOLTIP_LT": "Koma gaskiya idan bayanin farko ya fi na biyu ƙanƙanta.", @@ -102,15 +99,12 @@ "LOGIC_TERNARY_IF_TRUE": "idan gaskiya ne", "LOGIC_TERNARY_IF_FALSE": "idan ƙarya ne", "LOGIC_TERNARY_TOOLTIP": "Duba sharaɗin a cikin 'gwaji'. Idan sharaɗin gaskiya ne, mayar da kimar 'idan gaskiya ne'; idan ba haka ba mayar da kimar 'idan ƙarya ne'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Lambda.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Dawo da jumlar lambobin guda biyu.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Dawo da bambancin lambobin guda biyu.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Dawo da ruɓin lambobin guda biyu.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Dawo da sakamakon lambobin guda biyu bayan an raba su da juna.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Dawo da lambar farko wadda aka ɗaga ta zuwa ƙarfin lamba ta biyu.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "lamba da ta ruɓanya kanta", "MATH_SINGLE_TOOLTIP_ROOT": "Dawo da wata lamba da ta ruɓanya kanta.", "MATH_SINGLE_OP_ABSOLUTE": "cikakkiya", @@ -120,14 +114,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Dawo da tushe 10 na jerin lambobi da aka tara ko aka ɗebe na wata lamba.", "MATH_SINGLE_TOOLTIP_EXP": "Dawo da e zuwa ƙarfin wata lamba.", "MATH_SINGLE_TOOLTIP_POW10": "Dawo da 10 zuwa ƙarfin wata lamba.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Dawo da sine na wani gwargwado (banda layin kusurwar waje).", "MATH_TRIG_TOOLTIP_COS": "Dawo da cosine na wani gwargwado (banda layin kusurwar waje).", "MATH_TRIG_TOOLTIP_TAN": "Dawo da tangent na wani gwargwado (banda layin kusurwar waje).", "MATH_TRIG_TOOLTIP_ASIN": "Dawo da arcsine na wata lamba.", "MATH_TRIG_TOOLTIP_ACOS": "Dawo da arccosine na wata lamba.", "MATH_TRIG_TOOLTIP_ATAN": "Dawo da arctangent na wata lamba.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Dawo da ɗaya daga cikin sanannen zaunannen lissafi: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), ko ∞ (maras iyaka).", "MATH_IS_EVEN": "lamba da za a iya rabawa da biyu", "MATH_IS_ODD": "lamba ce da ba za a iya rabawa da biyu ba", @@ -137,10 +129,8 @@ "MATH_IS_NEGATIVE": "lamba ce da bata kai sufuli ba", "MATH_IS_DIVISIBLE_BY": "lamba ce da za a iya rabawa da", "MATH_IS_TOOLTIP": "Duba idan lamba ce da za a iya rabawa da biyu, lamba wadda ba za a iya rabawa da biyu ba, lamba ce kawai da za a iya rabawa da kanta, lamba ce cikakkiya,lamba ce da tafi sufuli, lamba ce da bata kai sufuli ba, lamba ce da za a iya rabawa da wata lamba. Ta dawo da gaskiya ko ƙarya.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "canza %1 da %2", "MATH_CHANGE_TOOLTIP": "Daɗa wata lamba zuwa siffa '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Cika lamba sama ko ƙasa.", "MATH_ROUND_OPERATOR_ROUND": "cika", "MATH_ROUND_OPERATOR_ROUNDUP": "cika sama", @@ -161,21 +151,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Dawo da matakan bambance-bambance na jeri.", "MATH_ONLIST_OPERATOR_RANDOM": "bazuwar kaya na jeri", "MATH_ONLIST_TOOLTIP_RANDOM": "Dawo da bazuwar kaya daga jerin.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "saura daga raba %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Dawo da saura daga raba lambobin guda biyu.", "MATH_CONSTRAIN_TITLE": "ƙarfi %1 ƙasa %2 sama %3", "MATH_CONSTRAIN_TOOLTIP": "Tsare lamba tsakanin lambobi da aka fayyace masu ƙarama da babbar kima (haɗawa).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "bazuwar cikakkiyar lamba daga %1 zuwa %2", "MATH_RANDOM_INT_TOOLTIP": "Dawo da bazuwar cikakkiyar lamba tsakanin wani gwargwado da aka fayyace, haɗawa.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "ɓangare mai buzuwa", "MATH_RANDOM_FLOAT_TOOLTIP": "Dawo da ɓangare mai bazuwa tsakanin 0.0 (haɗawa) da 1.0 (rabewa).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 na X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Dawo da arctangent na tsinin (X, Y) a gwargwado daga -180 zuwa 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Harafi, kalma, ko layi na rubutu.", "TEXT_JOIN_TITLE_CREATEWITH": "ƙirƙiri rubutu da", "TEXT_JOIN_TOOLTIP": "Ƙirƙiri guntun rubutu ta haɗa kowace lamba ta kayayyaki.", @@ -283,7 +268,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "zuwa # daga ƙarshe", "LISTS_GET_SUBLIST_END_LAST": "zuwa ƙarshe", "LISTS_GET_SUBLIST_TOOLTIP": "Ƙirƙiri kwafi na ɓangaren da aka fayyace daga wani jeri.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ware %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ware kwafi na jeri.", "LISTS_SORT_ORDER_ASCENDING": "hawa", @@ -313,9 +297,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Ya ƙirƙiri wani aiki ba tare da wani sakamako ba.", "PROCEDURES_ALLOW_STATEMENTS": "ƙyale bayanai", "PROCEDURES_DEF_DUPLICATE_WARNING": "Gardaɗi: Wannan aikin yana da ruɓi na gazawa.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Gudanar da aiki '%1' wanda mai amfani ya ayyana.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Gudanar da aiki '%1' kuma a yi amfani da sakamakon sa.", "PROCEDURES_MUTATORCONTAINER_TITLE": "bayani", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Daɗa, cire, ko sake tsarin bayani na wannan aiki.", diff --git a/msg/json/he.json b/msg/json/he.json index 808458e5d..00826635c 100644 --- a/msg/json/he.json +++ b/msg/json/he.json @@ -120,11 +120,6 @@ "LOGIC_TERNARY_TOOLTIP": "בדוק את התנאי ב'מבחן'. אם התנאי נכון, תחזיר את הערך 'אם נכון'; אחרת תחזיר את הערך 'אם שגוי'.", "MATH_NUMBER_HELPURL": "https://he.wikipedia.org/wiki/מספר_ממשי", "MATH_NUMBER_TOOLTIP": "מספר.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -309,7 +304,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ל # מהסוף", "LISTS_GET_SUBLIST_END_LAST": "לאחרון", "LISTS_GET_SUBLIST_TOOLTIP": "יוצרת עותק של חלק מסוים מהרשימה.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "מיון %1 %2 %3", "LISTS_SORT_TOOLTIP": "מיון עותק של הרשימה.", "LISTS_SORT_ORDER_ASCENDING": "סדר עולה", @@ -347,7 +341,7 @@ "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "הוסף, הסר או סדר מחדש קלטים לפונקציה זו", "PROCEDURES_MUTATORARG_TITLE": "שם הקלט:", "PROCEDURES_MUTATORARG_TOOLTIP": "הוסף קלט לפונקציה", - "PROCEDURES_HIGHLIGHT_DEF": "הדגש הגדרה של פונקציה", + "PROCEDURES_HIGHLIGHT_DEF": "להדגיש הגדרה של פונקציה", "PROCEDURES_CREATE_DO": "ליצור '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "אם ערך נכון, אז להחזיר ערך שני.", "PROCEDURES_IFRETURN_WARNING": "אזהרה: קוביה זו עשויה לשמש רק בתוך הגדרה של פונקציה.", diff --git a/msg/json/hi.json b/msg/json/hi.json index d8289c53d..c3a8eeaca 100644 --- a/msg/json/hi.json +++ b/msg/json/hi.json @@ -46,7 +46,6 @@ "DELETE_VARIABLE_CONFIRMATION": "'%2' चर के %1 उपयोग को हटाएँ?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "चर '%1' को नहीं हटा सकता क्योंकि यह फ़ंक्शन '%2' की परिभाषा का हिस्सा है", "DELETE_VARIABLE": "'%1' चर को हटाएँ", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "पैलेट से एक रंग चुनें।", "COLOUR_RANDOM_TITLE": "कोई भी रंग", "COLOUR_RANDOM_TOOLTIP": "कोई भी एक रंग का चयन करें।", @@ -60,7 +59,6 @@ "COLOUR_BLEND_COLOUR2": "रंग 2", "COLOUR_BLEND_RATIO": "अनुपात", "COLOUR_BLEND_TOOLTIP": "दिए गए अनुपात (0.0 - 1.0) के साथ दो रंगों का मिश्रण करता है।", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 बार दोहराएँ", "CONTROLS_REPEAT_INPUT_DO": "करें", "CONTROLS_REPEAT_TOOLTIP": "कुछ विवरण कई बार चलाएँ।", @@ -87,7 +85,6 @@ "CONTROLS_IF_IF_TOOLTIP": "भाग को समनरूप बनाने के लिए जोङें, हटाएं, या पुनः व्यवस्थित करें यदि यह बंद है।", "CONTROLS_IF_ELSEIF_TOOLTIP": "एक शर्त जोड़ें यदि ब्लॉक है।", "CONTROLS_IF_ELSE_TOOLTIP": "यदि ब्लॉक है तो इसके लिए एक अंतिम, कैच-सभी स्थिति जोड़ें।", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "ट्रू रिटर्न करें यदि दोनो इनपुट इक दूसरे के बराबर हों।", "LOGIC_COMPARE_TOOLTIP_NEQ": "ट्रू रिटर्न करें यदि दोनो इनपुट इक दूसरे के बराबर नहीं हों।", "LOGIC_COMPARE_TOOLTIP_LT": "ट्रू रिटर्न करें यदि पहला इनपुट दूसरे इनपुट से छोटा हो।", @@ -109,15 +106,12 @@ "LOGIC_TERNARY_IF_TRUE": "यदि सही है", "LOGIC_TERNARY_IF_FALSE": "यदि गलत है", "LOGIC_TERNARY_TOOLTIP": "'परीक्षण' में हालत की जांच करें। यदि स्थिति सही है, तो 'सच' मान लौटाता है; अन्यथा वापस लौटता 'अगर झूठा'मान देता है।", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "एक संख्या।", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "दो संख्याओं का योग रिटर्न करें।", "MATH_ARITHMETIC_TOOLTIP_MINUS": "दो संख्याओं का अंतर रिटर्न करें।", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "दो संख्याओं का गुणन रिटर्न करें।", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "दो संख्याओं का भागफल रिटर्न करें।", "MATH_ARITHMETIC_TOOLTIP_POWER": "दूसरे नंबर की शक्ति को उठाए गए पहले नंबर पर लौटें", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "वर्गमूल", "MATH_SINGLE_TOOLTIP_ROOT": "संख्या का वर्गमूल रिटर्न करें।", "MATH_SINGLE_OP_ABSOLUTE": "परम", @@ -127,14 +121,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "संख्या का मूल 10 लघुगणक रिटर्न करें।", "MATH_SINGLE_TOOLTIP_EXP": "किसी संख्या की शक्ति को वापस ई करें।", "MATH_SINGLE_TOOLTIP_POW10": "किसी संख्या की शक्ति पर 10 लौटें।", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "डिग्री का साइन रिटर्न करें (रेडियन नही)", "MATH_TRIG_TOOLTIP_COS": "डिग्री का कोसाइन रिटर्न करें (रेडियन नही)", "MATH_TRIG_TOOLTIP_TAN": "डिग्री का टैन्जन्ट रिटर्न करें (रेडियन नही)", "MATH_TRIG_TOOLTIP_ASIN": "संख्या का आर्कसाइन रिटर्न करें।", "MATH_TRIG_TOOLTIP_ACOS": "संख्या का आर्ककोसाइन रिटर्न करें।", "MATH_TRIG_TOOLTIP_ATAN": "संख्या का आर्कटैन्जन्ट रिटर्न करें।", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "सामान्य स्थिरांक में से एक को वापस लौटें:π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity)।", "MATH_IS_EVEN": "सम है", "MATH_IS_ODD": "विषम है", @@ -144,10 +136,8 @@ "MATH_IS_NEGATIVE": "ऋणात्मक है", "MATH_IS_DIVISIBLE_BY": "इसके द्वारा विभाज्य है", "MATH_IS_TOOLTIP": "जांचें कि क्या कोई संख्या एक सम, विषम, मुख्य, संपूर्ण, सकारात्मक, नकारात्मक है या यदि वह निश्चित संख्या से विभाजित है। वास्तविक या गलत रिटर्न देता है।", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "%1 को %2 से बदलें", "MATH_CHANGE_TOOLTIP": "संख्या को चर '%1' से जोड़ें।", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "संख्या को बड़ा या घटा के पूर्णांक बनाएँ।", "MATH_ROUND_OPERATOR_ROUND": "पूर्णांक बनाएँ", "MATH_ROUND_OPERATOR_ROUNDUP": "बड़ा के पूर्णांक बनाएँ", @@ -168,18 +158,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "सूची का मानक विचलन रिटर्न करें।", "MATH_ONLIST_OPERATOR_RANDOM": "सूची का रैन्डम आइटम", "MATH_ONLIST_TOOLTIP_RANDOM": "सूची से एक रैन्डम आइटम रिटर्न करें।", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 का शेषफल", "MATH_MODULO_TOOLTIP": "दो संख्याओं के भाग का शेषफल रिटर्न करें।", "MATH_CONSTRAIN_TITLE": "%1 कम %2 उच्च %3 बाधित करें", "MATH_CONSTRAIN_TOOLTIP": "एक संख्या को निर्दिष्ट सीमा (सम्मिलित) के बीच बाधित करें।", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "%1 से %2 तक रैन्डम पूर्णांक", "MATH_RANDOM_INT_TOOLTIP": "दो निर्दिष्ट सीमाओं, समावेशी के बीच एक यादृच्छिक पूर्णांक लौटें।", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "रैन्डम अंश", "MATH_RANDOM_FLOAT_TOOLTIP": "0.0 (समावेशी) और 1.0 (विशिष्ट) के बीच एक यादृच्छिक अंश पर लौटें।", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "एक अक्षर, शब्द, या टेक्स्ट की पंक्ति।", "TEXT_JOIN_TITLE_CREATEWITH": "इसके साथ टेक्स्ट बनाएँ", "TEXT_JOIN_TOOLTIP": "किसी भी संख्या के मदों को एक साथ जोड़ कर पाठ का एक टुकड़ा बनाएं।", @@ -230,7 +216,6 @@ "TEXT_REPLACE_MESSAGE0": "%1 को %2 के साथ %3 में बदलें", "TEXT_REPLACE_TOOLTIP": "कुछ अन्य पाठ के अंदर कुछ पाठ की सभी जगहों को बदलें।", "TEXT_REVERSE_MESSAGE0": "%1 को बदल दें", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "पाठ में वर्णों के क्रम को उलट देता है।", "LISTS_CREATE_EMPTY_TITLE": "खाली सूची बनाएँ", "LISTS_CREATE_EMPTY_TOOLTIP": "0 लंबाई की, कोई भी डेटा ना रखने वाली एक सूची लौटती है", @@ -288,7 +273,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "अंतिम से # को", "LISTS_GET_SUBLIST_END_LAST": "अंत से", "LISTS_GET_SUBLIST_TOOLTIP": "सूची के बताए गये भाग की कॉपी बनता है।", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "LISTS_SORT_TITLE": "%1 %2 %3 को छांटे", "LISTS_SORT_TOOLTIP": "एक सूची की एक प्रति को छांटे।", "LISTS_SORT_ORDER_ASCENDING": "बढ़ते क्रम", @@ -318,9 +302,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "आउटपुट वाला एक फ़ंक्शन बनाता है।", "PROCEDURES_ALLOW_STATEMENTS": "बयानों की अनुमति दें", "PROCEDURES_DEF_DUPLICATE_WARNING": "सावधान: इस फ़ंक्शन मे डुप्लिकेट पैरामीटर हैं।", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "यूज़र द्वारा वर्णन किया गया फ़ंक्शन '%1' चलाएँ।", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "यूज़र द्वारा वर्णन किया गया फ़ंक्शन '%1' चलाएँ और उसका आउटपुट इस्तेमाल करें।", "PROCEDURES_MUTATORCONTAINER_TITLE": "इनपुट", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "इस फ़ंक्शन में इनपुट जोड़ें, निकालें, या पुन: क्रमित करें।", diff --git a/msg/json/hr.json b/msg/json/hr.json index 52e0fa38d..a82644d74 100644 --- a/msg/json/hr.json +++ b/msg/json/hr.json @@ -82,11 +82,10 @@ "CONTROLS_IF_TOOLTIP_4": "Ako je prva vrijednost istina, tada izvrši prvi blok naredbi. Inače, ako je druga vrijednost istina izvrši drugi blok naredbi. Ako niti jedna vrijednost nije istina, izvrši zadnji blok naredbi.", "CONTROLS_IF_MSG_IF": "ako", "CONTROLS_IF_MSG_ELSEIF": "inače ako", - "CONTROLS_IF_MSG_ELSE": "onda", + "CONTROLS_IF_MSG_ELSE": "inače", "CONTROLS_IF_IF_TOOLTIP": "Dodaj, ukloni ili promijeni redoslijed kako biste presložili ovaj blok.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Dodaj uvjet bloku.", "CONTROLS_IF_ELSE_TOOLTIP": "Dodaj završni, \"vrijedi za sve\" uvjet bloku.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Vraća istina ako su obje ulazne vrijednosti jednake jedna drugoj.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Vraća istina ako obje ulazne vrijednosti nisu jednake jedna drugoj.", "LOGIC_COMPARE_TOOLTIP_LT": "Vraća istina ako je prva ulazna vrijednost manja od druge.", @@ -126,7 +125,6 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Vraća logaritam po bazi 10 zadanog broja.", "MATH_SINGLE_TOOLTIP_EXP": "Vraća e na potenciju broja.", "MATH_SINGLE_TOOLTIP_POW10": "Vraća 10 na potenciju broja.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Vraća sinus stupnjeva (ne radijana).", "MATH_TRIG_TOOLTIP_COS": "Vraća kosinus stupnjeva (ne radijana).", "MATH_TRIG_TOOLTIP_TAN": "Vraća tangens stupnjeva (ne radijana).", @@ -143,10 +141,8 @@ "MATH_IS_NEGATIVE": "je negativan", "MATH_IS_DIVISIBLE_BY": "je djeljiv s", "MATH_IS_TOOLTIP": "Provjerava je li broj paran, neparan, prim, cijeli, pozitivan, negativan ili je djeljiv određenim brojem. Vraća istina ili laž.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "promijeni %1 za %2", "MATH_CHANGE_TOOLTIP": "Dodaj broj varijabli '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Zaokružuje broj na više ili manje", "MATH_ROUND_OPERATOR_ROUND": "zaokružiti", "MATH_ROUND_OPERATOR_ROUNDUP": "zaokružiti na više", @@ -167,21 +163,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Vraća standardnu devijaciju liste.", "MATH_ONLIST_OPERATOR_RANDOM": "slučajno odabran član liste", "MATH_ONLIST_TOOLTIP_RANDOM": "Vraća slučajan član liste.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "ostatak pri dijeljenju %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Vraća ostatak pri dijeljenju dvaju brojeva.", "MATH_CONSTRAIN_TITLE": "ograniči %1 od %2 do %3", "MATH_CONSTRAIN_TOOLTIP": "Ograničava broj da bude unutar zadanih granica (uključivši rubne vrijednosti)", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "slučajan cijeli broj između %1 i %2", "MATH_RANDOM_INT_TOOLTIP": "Vraća slučajan cijeli broj između dviju zadanih vrijednosti, uključivši i rubne vrijednosti.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "slučajan razlomak", "MATH_RANDOM_FLOAT_TOOLTIP": "Vraća slučajan razlomak vrijednosti između 0.0 (uključivo) i 1.0 (isključivo)", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 od X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Vraća vrijednost arkus tangensa točke (X, Y) u stupnjevima od -180 do 180", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Slovo, riječ ili linija teksta", "TEXT_JOIN_TITLE_CREATEWITH": "stvori tekst od", "TEXT_JOIN_TOOLTIP": "Stvara tekst povezivanjem bilo kojeg broja dijelova", @@ -289,7 +280,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "do # od kraja", "LISTS_GET_SUBLIST_END_LAST": "do zadnjeg", "LISTS_GET_SUBLIST_TOOLTIP": "Stvara kopiju odabranog dijela liste", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "Sortiraj %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sortiraj kopiju liste", "LISTS_SORT_ORDER_ASCENDING": "uzlazno", @@ -319,9 +309,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Stvara funkciju s izlaznom vrijednošću", "PROCEDURES_ALLOW_STATEMENTS": "Dopustite izjave", "PROCEDURES_DEF_DUPLICATE_WARNING": "Upozorenje: Ova funkcija ima varijable istog imena", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Pokrenite korisnički definiranu funkciju '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Pokrenite korisnički definiranu funkciju '%1' i upotrijebite njenu izlaznu vrijednost", "PROCEDURES_MUTATORCONTAINER_TITLE": "Ulazne varijable", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Dodajte, uklonite ili promijenite redoslijed ulaznih varijabli funkcije", diff --git a/msg/json/hrx.json b/msg/json/hrx.json index ef3e93e79..3d700dd59 100644 --- a/msg/json/hrx.json +++ b/msg/json/hrx.json @@ -272,9 +272,7 @@ "PROCEDURES_DEFRETURN_RETURN": "geb zurück", "PROCEDURES_DEFRETURN_TOOLTIP": "En Funktionsblock mit Rückgäbweart.", "PROCEDURES_DEF_DUPLICATE_WARNING": "Warnung: die Funktionsblock hot doppelt Parameter.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://hrx.wikipedia.org/wiki/Prozedur_%28Programmierung%29", "PROCEDURES_CALLNORETURN_TOOLTIP": "Ruf en Funktionsblock ohne Rückgäweart uff.", - "PROCEDURES_CALLRETURN_HELPURL": "https://hrx.wikipedia.org/wiki/Prozedur_%28Programmierung%29", "PROCEDURES_CALLRETURN_TOOLTIP": "Ruf en Funktionsblock mit Rückgäbweart uff.", "PROCEDURES_MUTATORCONTAINER_TITLE": "Parameter", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Variable:", diff --git a/msg/json/hu.json b/msg/json/hu.json index c85fee543..0124e5fe5 100644 --- a/msg/json/hu.json +++ b/msg/json/hu.json @@ -299,7 +299,6 @@ "LISTS_GET_SUBLIST_END_LAST": "és az utolsó", "LISTS_GET_SUBLIST_TAIL": "elem között", "LISTS_GET_SUBLIST_TOOLTIP": "A lista adott részéről másolat.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 rendezés", "LISTS_SORT_TOOLTIP": "Egy lista egy másolatának rendezése.", "LISTS_SORT_ORDER_ASCENDING": "növekvő", @@ -324,7 +323,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "név", "PROCEDURES_BEFORE_PARAMS": "paraméterlistaː", "PROCEDURES_CALL_BEFORE_PARAMS": "paraméterlistaː", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Eljárás (nem ad vissza eredményt).", "PROCEDURES_DEFNORETURN_COMMENT": "Írj erről a funkcióról...", "PROCEDURES_DEFRETURN_RETURN": "eredménye", @@ -342,7 +340,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Függvénydefiníció kiemelése", "PROCEDURES_CREATE_DO": "„%1” létrehozása", "PROCEDURES_IFRETURN_TOOLTIP": "Ha az érték igaz, akkor visszatér a függvény értékével.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Figyelem: Ez a blokk csak függvénydefiníción belül használható.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Mondj valamit...", "WORKSPACE_ARIA_LABEL": "Blockly munkaterület", diff --git a/msg/json/hy.json b/msg/json/hy.json index e71fd0b6f..1094bff29 100644 --- a/msg/json/hy.json +++ b/msg/json/hy.json @@ -114,7 +114,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Վերադարձնում է երկու թվերի արտադրյալը", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Վերադարձնում է քանորդը", "MATH_ARITHMETIC_TOOLTIP_POWER": "Վերադարձնում է առաջին թիվի աստիճանը", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "Քառակուսի արմատ", "MATH_SINGLE_TOOLTIP_ROOT": "Վերադարձնում է թվի քառակուսի աստիճանը", "MATH_SINGLE_OP_ABSOLUTE": "բացարձակ", diff --git a/msg/json/ia.json b/msg/json/ia.json index 98ddab612..0921c912f 100644 --- a/msg/json/ia.json +++ b/msg/json/ia.json @@ -3,7 +3,8 @@ "authors": [ "Fanjiayi", "Karmwiki", - "McDutchie" + "McDutchie", + "Zauzolkov" ] }, "VARIABLES_DEFAULT_NAME": "cosa", @@ -107,6 +108,12 @@ "LOGIC_TERNARY_TOOLTIP": "Verificar le condition in 'test'. Si le condition es ver, retorna le valor de 'si ver'; si non, retorna le valor de 'si false'.", "MATH_NUMBER_HELPURL": "https://ia.wikipedia.org/wiki/Numero", "MATH_NUMBER_TOOLTIP": "Un numero.", + "MATH_TRIG_SIN": "sin", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "asin", + "MATH_TRIG_ACOS": "acos", + "MATH_TRIG_ATAN": "atan", "MATH_ARITHMETIC_HELPURL": "https://ia.wikipedia.org/wiki/Arithmetica", "MATH_ARITHMETIC_TOOLTIP_ADD": "Retornar le summa del duo numeros.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Retornar le differentia del duo numeros.", @@ -121,7 +128,7 @@ "MATH_SINGLE_TOOLTIP_NEG": "Retornar le negation de un numero.", "MATH_SINGLE_TOOLTIP_LN": "Retornar le logarithmo natural de un numero.", "MATH_SINGLE_TOOLTIP_LOG10": "Retornar le logarithmo in base 10 de un numero.", - "MATH_SINGLE_TOOLTIP_EXP": "Retornar e elevate al potentia de un numero.", + "MATH_SINGLE_TOOLTIP_EXP": "Retornar e elevate al potentia de un numero.", "MATH_SINGLE_TOOLTIP_POW10": "Retornar 10 elevate al potentia de un numero.", "MATH_TRIG_TOOLTIP_SIN": "Retornar le sino de un grado (non radiano).", "MATH_TRIG_TOOLTIP_COS": "Retornar le cosino de un grado (non radiano).", @@ -243,6 +250,7 @@ "LISTS_GET_INDEX_GET": "prender", "LISTS_GET_INDEX_GET_REMOVE": "prender e remover", "LISTS_GET_INDEX_REMOVE": "remover", + "LISTS_GET_INDEX_FROM_START": "#", "LISTS_GET_INDEX_FROM_END": "№ ab fin", "LISTS_GET_INDEX_FIRST": "prime", "LISTS_GET_INDEX_LAST": "ultime", diff --git a/msg/json/id.json b/msg/json/id.json index 60cbc3626..23a93ab2d 100644 --- a/msg/json/id.json +++ b/msg/json/id.json @@ -48,23 +48,19 @@ "DELETE_VARIABLE_CONFIRMATION": "Hapus %1 yang digunakan pada variabel '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Tidak bisa menghapus variabel '%1' karena variabel ini bagian dari sebuah definisi dari fungsi '%2'", "DELETE_VARIABLE": "Hapus variabel '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Pilih warna dari daftar warna.", "COLOUR_RANDOM_TITLE": "Warna acak", "COLOUR_RANDOM_TOOLTIP": "Pilih warna secara acak.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "Dengan warna", "COLOUR_RGB_RED": "merah", "COLOUR_RGB_GREEN": "hijau", "COLOUR_RGB_BLUE": "biru", "COLOUR_RGB_TOOLTIP": "Buatlah warna dengan jumlah yang ditentukan dari merah, hijau dan biru. Semua nilai harus antarai 0 sampai 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "campur", "COLOUR_BLEND_COLOUR1": "warna 1", "COLOUR_BLEND_COLOUR2": "warna 2", "COLOUR_BLEND_RATIO": "rasio", "COLOUR_BLEND_TOOLTIP": "Campur dua warna secara bersamaan dengan perbandingan (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ulangi %1 kali", "CONTROLS_REPEAT_INPUT_DO": "kerjakan", "CONTROLS_REPEAT_TOOLTIP": "Lakukan beberapa perintah beberapa kali.", @@ -91,7 +87,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Tambahkan, hapus, atau susun kembali bagian untuk mengkonfigurasi blok IF ini.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Tambahkan prasyarat ke dalam blok IF.", "CONTROLS_IF_ELSE_TOOLTIP": "Terakhir, tambahkan kondisi tangkap-semua kedalam blok IF.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Kembalikan benar jika kedua input sama satu dengan lainnya.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Kembalikan benar jika kedua input tidak sama satu dengan lainnya.", "LOGIC_COMPARE_TOOLTIP_LT": "Kembalikan benar jika input pertama lebih kecil dari input kedua.", @@ -107,21 +102,13 @@ "LOGIC_BOOLEAN_TRUE": "benar", "LOGIC_BOOLEAN_FALSE": "salah", "LOGIC_BOOLEAN_TOOLTIP": "Kembalikan benar atau salah.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "null", "LOGIC_NULL_TOOLTIP": "Kembalikan null.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "jika benar", "LOGIC_TERNARY_IF_FALSE": "jika salah", "LOGIC_TERNARY_TOOLTIP": "Periksa kondisi di 'test'. Jika kondisi benar, kembalikan nilai 'if true'; jika sebaliknya kembalikan nilai 'if false'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Suatu angka.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -134,7 +121,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Kembalikan perkalian dari kedua angka.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Kembalikan hasil bagi dari kedua angka.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Kembalikan angka pertama pangkat angka kedua.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "akar", "MATH_SINGLE_TOOLTIP_ROOT": "Kembalikan akar dari angka.", "MATH_SINGLE_OP_ABSOLUTE": "mutlak", @@ -144,14 +130,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Kembalikan dasar logaritma 10 dari angka.", "MATH_SINGLE_TOOLTIP_EXP": "Kembalikan 10 pangkat angka.", "MATH_SINGLE_TOOLTIP_POW10": "Kembalikan 10 pangkat angka.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Kembalikan sinus dari derajat (bukan radian).", "MATH_TRIG_TOOLTIP_COS": "Kembalikan cosinus dari derajat (bukan radian).", "MATH_TRIG_TOOLTIP_TAN": "Kembalikan tangen dari derajat (bukan radian).", "MATH_TRIG_TOOLTIP_ASIN": "Kembalikan asin dari angka.", "MATH_TRIG_TOOLTIP_ACOS": "Kembalikan acosine dari angka.", "MATH_TRIG_TOOLTIP_ATAN": "Kembalikan atan dari angka.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Kembalikan salah satu konstanta: π (3,141…), e (2,718…), φ (1,618…), akar(2) (1,414…), akar(½) (0.707…), atau ∞ (tak terhingga).", "MATH_IS_EVEN": "adalah bilangan genap", "MATH_IS_ODD": "adalah bilangan ganjil", @@ -161,10 +145,8 @@ "MATH_IS_NEGATIVE": "adalah bilangan negatif", "MATH_IS_DIVISIBLE_BY": "dapat dibagi oleh", "MATH_IS_TOOLTIP": "Periksa apakah angka adalah bilangan genap, bilangan ganjil, bilangan pokok, bilangan bulat, bilangan positif, bilangan negatif, atau apakan bisa dibagi oleh angka tertentu. Kembalikan benar atau salah.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "ubah %1 oleh %2", "MATH_CHANGE_TOOLTIP": "Tambahkan angka kedalam variabel '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Bulatkan suatu bilangan naik atau turun.", "MATH_ROUND_OPERATOR_ROUND": "membulatkan", "MATH_ROUND_OPERATOR_ROUNDUP": "membulatkan keatas", @@ -185,21 +167,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Kembalikan standard deviasi dari list.", "MATH_ONLIST_OPERATOR_RANDOM": "item acak dari list", "MATH_ONLIST_TOOLTIP_RANDOM": "Kembalikan elemen acak dari list.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "sisa dari %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Kembalikan sisa dari pembagian ke dua angka.", "MATH_CONSTRAIN_TITLE": "Batasi %1 rendah %2 tinggi %3", "MATH_CONSTRAIN_TOOLTIP": "Batasi angka antara batas yang ditentukan (inklusif).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "acak bulat dari %1 sampai %2", "MATH_RANDOM_INT_TOOLTIP": "Kembalikan bilangan acak antara dua batas yang ditentukan, inklusif.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "nilai pecahan acak", "MATH_RANDOM_FLOAT_TOOLTIP": "Kembalikan nilai pecahan acak antara 0.0 (inklusif) dan 1.0 (eksklusif).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 of X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Kembalikan arctangen titik (X, Y) dalam derajat dari -180 hingga 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Huruf, kata atau baris teks.", "TEXT_JOIN_TITLE_CREATEWITH": "buat teks dengan", "TEXT_JOIN_TOOLTIP": "Buat teks dengan cara gabungkan sejumlah item.", @@ -251,7 +228,6 @@ "TEXT_REPLACE_TOOLTIP": "Ganti semua kemunculan teks dalam teks lain.", "TEXT_REVERSE_MESSAGE0": "balikkan %1", "TEXT_REVERSE_TOOLTIP": "Balikkan urutan huruf dalam teks.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "buat list kosong", "LISTS_CREATE_EMPTY_TOOLTIP": "Kembalikan list, dengan panjang 0, tidak berisi data", "LISTS_CREATE_WITH_TOOLTIP": "Buat sebuah list dengan sejumlah item.", @@ -309,7 +285,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ke # dari akhir", "LISTS_GET_SUBLIST_END_LAST": "ke yang paling akhir", "LISTS_GET_SUBLIST_TOOLTIP": "Buat salinan bagian tertentu dari list.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "urutkan %1 %2 %3", "LISTS_SORT_TOOLTIP": "Urutkan salinan dari daftar", "LISTS_SORT_ORDER_ASCENDING": "menaik", @@ -329,21 +304,17 @@ "VARIABLES_SET": "tetapkan %1 untuk %2", "VARIABLES_SET_TOOLTIP": "tetapkan variabel ini dengan input yang sama.", "VARIABLES_SET_CREATE_GET": "Buat 'get %1'", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "untuk", "PROCEDURES_DEFNORETURN_PROCEDURE": "buat sesuatu", "PROCEDURES_BEFORE_PARAMS": "dengan:", "PROCEDURES_CALL_BEFORE_PARAMS": "dengan:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Buat sebuah fungsi tanpa output.", "PROCEDURES_DEFNORETURN_COMMENT": "Jelaskan fungsi ini...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "kembali", "PROCEDURES_DEFRETURN_TOOLTIP": "Buat sebuah fungsi dengan satu output.", "PROCEDURES_ALLOW_STATEMENTS": "memungkinkan pernyataan", "PROCEDURES_DEF_DUPLICATE_WARNING": "Peringatan: Fungsi ini memiliki parameter duplikat.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Menjalankan fungsi '%1' yang ditetapkan pengguna.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Menjalankan fungsi '%1' yang ditetapkan pengguna dan menggunakan outputnya.", "PROCEDURES_MUTATORCONTAINER_TITLE": "input", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Menambah, menghapus, atau menyusun ulang masukan untuk fungsi ini.", diff --git a/msg/json/ig.json b/msg/json/ig.json index 93865baec..229acf3ea 100644 --- a/msg/json/ig.json +++ b/msg/json/ig.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "Mapmeld", + "Timzy D'Great", "Ukabia" ] }, "VARIABLES_DEFAULT_NAME": "ihe", + "UNNAMED_KEY": "enweghị aha", "TODAY": "Taa", "DUPLICATE_BLOCK": "Ntụgharị", "ADD_COMMENT": "Tịnye okwu", @@ -40,7 +42,6 @@ "DELETE_VARIABLE_CONFIRMATION": "Kpochapụ %1 ojịjị nke agbanwe '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Agaghị ekpochapụlị agbanwe '%1' maka nsonye ya na nkọwa nke ọrụ ahụ '%2'", "DELETE_VARIABLE": "Kpochapụ agbanwe ‘%1' ahu", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Họrọ agba site na palette.", "COLOUR_RANDOM_TITLE": "agba ọbụla", "COLOUR_RANDOM_TOOLTIP": "Họrọ agba na-nke ọbụla.", @@ -54,7 +55,6 @@ "COLOUR_BLEND_COLOUR2": "agba 2", "COLOUR_BLEND_RATIO": "oke", "COLOUR_BLEND_TOOLTIP": "Na ngwakọta agba abụọ ọnụ na na oke enyere (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "meghachi ụgbọ %1", "CONTROLS_REPEAT_INPUT_DO": "mee", "CONTROLS_REPEAT_TOOLTIP": "Mee ụfọdụ okwu ọtụtụ ugboro.", @@ -81,7 +81,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Tinye, wepu, ma ọ bụ megharia ngalaba iji haziearịa nke a ma ọ bụrụ na ngọngọ.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Tinye ọnọdụ na ngọngọ ma ọ bụrụ.", "CONTROLS_IF_ELSE_TOOLTIP": "Tinye ngwucha, ọnọdụ jide-niile na ngọngọ ma ọ bụrụ.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Weghachi ezịọkwụ ma ọ bụrụ na ntinye hatara onwe ha.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Weghachi ezịọkwụ ma ọ bụrụ na ntinye aghataghị onwe ha.", "LOGIC_COMPARE_TOOLTIP_LT": "Weghachi ezịọkwụ ma ọ bụrụ na ntinye mbu dị obere karia ntinye nke abụọ.", @@ -103,15 +102,18 @@ "LOGIC_TERNARY_IF_TRUE": "ọ bụrụ na eziokwu", "LOGIC_TERNARY_IF_FALSE": "ọ bụrụ ụgha", "LOGIC_TERNARY_TOOLTIP": "Lelee ọnọdụ na 'ule'. Ọ bụrụ na ọnọdụ ahụ bụ eziokwu, weghachitere akara 'ọ bụrụ na eziokwu’; ma ọ bụghị ya weghachitere akara 'ọ bụrụ ụgha'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Ọnụọgụgụ.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", + "MATH_TRIG_SIN": "mmehie", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "asin", + "MATH_TRIG_ACOS": "acos", + "MATH_TRIG_ATAN": "atan", "MATH_ARITHMETIC_TOOLTIP_ADD": "Weghachite ngụkọ ọnụ ọgụgụ abụọ ahụ.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Weghachite nwepụ ọnụ ọgụgụ abụọ ahụ.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Weghachite mụbaa ọnụ ọgụgụ abụọ ahụ.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Weghachite kwenye ọnụ ọgụgụ abụọ ahụ.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Weghachite nọmba mbu nke emeturu ike nke nọmba nke abụọ.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "Isi ngụkọ", "MATH_SINGLE_TOOLTIP_ROOT": "Weghachite Isi ngụkọ nke nọmba.", "MATH_SINGLE_OP_ABSOLUTE": "ozụzụ", @@ -121,14 +123,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Weghachite isi lọgarịdịm 10 nke nọmba.", "MATH_SINGLE_TOOLTIP_EXP": "Weghachite na ike nke nọmba.", "MATH_SINGLE_TOOLTIP_POW10": "Weghachite 10 na ike nke nọmba.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Weghachite saịn nke ogo (ọ bụghị redian).", "MATH_TRIG_TOOLTIP_COS": "Weghachite kosaịn nke ogo (ọ bụghị redian).", "MATH_TRIG_TOOLTIP_TAN": "Weghachite tanjentị nke ogo (ọ bụghị redian).", "MATH_TRIG_TOOLTIP_ASIN": "Weghachite aksaịn nke nọmba.", "MATH_TRIG_TOOLTIP_ACOS": "Weghachite akosaịn nke nọmba.", "MATH_TRIG_TOOLTIP_ATAN": "Weghachite aktanjentị nke nọmba.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Weghachite otu n'ime kọnstant ndị nkịtị: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).", "MATH_IS_EVEN": "bụ ịvụn", "MATH_IS_ODD": "bụ ọd", @@ -138,10 +138,8 @@ "MATH_IS_NEGATIVE": "bụ negetịf", "MATH_IS_DIVISIBLE_BY": "ga ekenwụ", "MATH_IS_TOOLTIP": "Tụlee ma nọmba ọ bụ ịvụn, ọd, praim, zuru ezu, posịtịf, negetịf, ma e nwere nọmba ga ekenwu ya. Weghachitere eziokwu ma ọ bụ ụgha.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "gbanwee %1 site na %2", "MATH_CHANGE_TOOLTIP": "Tinye nọmba na agbanwe '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Gbaago nọmba n'elu ma ọ bụ ala.", "MATH_ROUND_OPERATOR_ROUND": "gbaarịa", "MATH_ROUND_OPERATOR_ROUNDUP": "gbaago elu", @@ -162,21 +160,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Weghachite ntughari usoro nke ndepụta.", "MATH_ONLIST_OPERATOR_RANDOM": "Ihe ọbụla nke ndepụta", "MATH_ONLIST_TOOLTIP_RANDOM": "Weghachite Ihe ọbụla site na ndepụta.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "ihe fọdụrụ nke %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Weghachite ihe fọdụrụ site na nkewa nọmba abụọ.", "MATH_CONSTRAIN_TITLE": "gbochịe %1 ala %2 elu %3", "MATH_CONSTRAIN_TOOLTIP": "Gbochịe ọnụọgụgụ dị n'etiti nọmba dị oke ala na nọmba dị oke elu (gụnyere).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "ọnụọgụgụ ọbụla site na %1 rụọ %2", "MATH_RANDOM_INT_TOOLTIP": "Weghachite ọnụọgụgụ ọbụla dị n'etiti ihe abụọ a kapịrị ọnụ, agụnyere.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "nkewa ọbụla", "MATH_RANDOM_FLOAT_TOOLTIP": "Weghachite ọnụọgụgụ ọbụla dị n'etiti 0.0 (gụnyere) na 1.0 (agụnyeghị).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 nke X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Weghachite aktanjentị nke isi (X, Y) na ogo site na -180 rụọ 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Akwụkwọ ozi, okwu, ma ọ bụ akara ederede.", "TEXT_JOIN_TITLE_CREATEWITH": "mepụta ederede na", "TEXT_JOIN_TOOLTIP": "Mepụta otu ederede site na ijikọta ọnụ ọgụgụ ihe ọ bụla.", @@ -248,6 +241,7 @@ "LISTS_GET_INDEX_GET": "nweta", "LISTS_GET_INDEX_GET_REMOVE": "nweta ma wepu", "LISTS_GET_INDEX_REMOVE": "wepu", + "LISTS_GET_INDEX_FROM_START": "#", "LISTS_GET_INDEX_FROM_END": "# site na njedebe", "LISTS_GET_INDEX_FIRST": "mbu", "LISTS_GET_INDEX_LAST": "ikpeazụ", @@ -284,7 +278,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "rụọ # site na njedebe", "LISTS_GET_SUBLIST_END_LAST": "rụọ na ngwụcha", "LISTS_GET_SUBLIST_TOOLTIP": "Na-emepụta otu akụkụ a kapịrị ọnụ nke ndepụta.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "hazie %1 %2 %3", "LISTS_SORT_TOOLTIP": "Tọọ otu akụkụ ndepụta ahụ.", "LISTS_SORT_ORDER_ASCENDING": "arịgo", @@ -314,9 +307,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Na emepụta ọrụ nwere mmepụta.", "PROCEDURES_ALLOW_STATEMENTS": "kwe ka okwu", "PROCEDURES_DEF_DUPLICATE_WARNING": "Ịdọ aka ná ntị: Ọrụ a nwere ọnụọgụ abụọ.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Gbaa ọrụ a kọwaa onye-ọrụ '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Gbaa ọrụ a kọwaa onye-ọrụ '%1' ma jiri mmepụta ya.", "PROCEDURES_MUTATORCONTAINER_TITLE": "ntinye", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Tinye, wepu, ma ọ bụ tugharịa ntinye na ọrụ a.", diff --git a/msg/json/is.json b/msg/json/is.json index 2e420a69a..1bdf6e1e6 100644 --- a/msg/json/is.json +++ b/msg/json/is.json @@ -3,12 +3,14 @@ "authors": [ "Gaddi00", "Jonbg", + "LoveIceLang", "Sveinki", "Sveinn í Felli", "아라" ] }, "VARIABLES_DEFAULT_NAME": "atriði", + "UNNAMED_KEY": "ónefnt", "TODAY": "Í dag", "DUPLICATE_BLOCK": "Afrita", "ADD_COMMENT": "Skrifa skýringu", @@ -33,46 +35,45 @@ "RENAME_VARIABLE": "Endurnefna breytu...", "RENAME_VARIABLE_TITLE": "Endurnefna allar '%1' breyturnar:", "NEW_VARIABLE": "Búa til breytu...", + "NEW_STRING_VARIABLE": "Búa til strengjabreytu...", + "NEW_NUMBER_VARIABLE": "Búa til tölubreytu...", + "NEW_COLOUR_VARIABLE": "Búðu til litabreytu...", + "NEW_VARIABLE_TYPE_TITLE": "Ný breytutegund:", "NEW_VARIABLE_TITLE": "Heiti nýrrar breytu:", "VARIABLE_ALREADY_EXISTS": "Breyta með heitinu '%1' er þegar til staðar.", + "VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE": "Breyta sem heitir „%1“ er þegar til fyrir aðra tegund: „%2“.", + "DELETE_VARIABLE_CONFIRMATION": "Eyða %1 notar breytuna „%2“?", + "CANNOT_DELETE_VARIABLE_PROCEDURE": "Get ekki eytt breytunni '%1' vegna þess að hún er hluti af skilgreiningu fallsins '%2'", "DELETE_VARIABLE": "Eyða '%1' breytunni", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Velja lit úr litakorti.", "COLOUR_RANDOM_TITLE": "einhver litur", "COLOUR_RANDOM_TOOLTIP": "Velja einhvern lit af handahófi.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "litur", "COLOUR_RGB_RED": "rauður", "COLOUR_RGB_GREEN": "grænt", "COLOUR_RGB_BLUE": "blátt", "COLOUR_RGB_TOOLTIP": "Búa til lit úr tilteknu magni af rauðu, grænu og bláu. Allar tölurnar verða að vera á bilinu 0 til 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "blöndun", "COLOUR_BLEND_COLOUR1": "litur 1", "COLOUR_BLEND_COLOUR2": "litur 2", "COLOUR_BLEND_RATIO": "hlutfall", "COLOUR_BLEND_TOOLTIP": "Blandar tveimur litum í gefnu hlutfalli (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "endurtaka %1 sinnum", "CONTROLS_REPEAT_INPUT_DO": "gera", "CONTROLS_REPEAT_TOOLTIP": "Gera eitthvað aftur og aftur.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "endurtaka á meðan", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "endurtaka þar til", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Endurtaka eitthvað á meðan gildi er satt.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Endurtaka eitthvað á meðan gildi er ósatt.", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "Láta breytuna '%1' taka inn gildi frá fyrstu tölu til síðustu tölu, hlaupandi á tiltekna bilinu og gera tilteknu kubbana.", "CONTROLS_FOR_TITLE": "telja með %1 frá %2 til %3 um %4", "CONTROLS_FOREACH_TITLE": "fyrir hvert %1 í lista %2", "CONTROLS_FOREACH_TOOLTIP": "Fyrir hvert atriði í lista er breyta '%1' stillt á atriðið og skipanir gerðar.", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "fara út úr lykkju", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "fara beint í næstu umferð lykkjunnar", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Fara út úr umlykjandi lykkju.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Sleppa afganginum af lykkjunni og fara beint í næstu umferð hennar.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Aðvörun: Þennan kubb má aðeins nota innan lykkju.", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "Ef gildi er satt skal gera einhverjar skipanir.", "CONTROLS_IF_TOOLTIP_2": "Ef gildi er satt skal gera skipanir í fyrri kubbnum. Annars skal gera skipanir í seinni kubbnum.", "CONTROLS_IF_TOOLTIP_3": "Ef fyrra gildið er satt skal gera skipanir í fyrri kubbnum. Annars, ef seinna gildið er satt, þá skal gera skipanir í seinni kubbnum.", @@ -83,53 +84,39 @@ "CONTROLS_IF_IF_TOOLTIP": "Bæta við, fjarlægja eða umraða til að breyta skipan þessa EF kubbs.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Bæta skilyrði við EF kubbinn.", "CONTROLS_IF_ELSE_TOOLTIP": "Bæta við hluta EF kubbs sem grípur öll tilfelli sem uppfylla ekki hin skilyrðin.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Skila sönnu ef inntökin eru jöfn.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Skila sönnu ef inntökin eru ekki jöfn.", "LOGIC_COMPARE_TOOLTIP_LT": "Skila sönnu ef fyrra inntakið er minna en seinna inntakið.", "LOGIC_COMPARE_TOOLTIP_LTE": "Skila sönnu ef fyrra inntakið er minna en eða jafnt og seinna inntakið.", "LOGIC_COMPARE_TOOLTIP_GT": "Skila sönnu ef fyrra inntakið er stærra en seinna inntakið.", "LOGIC_COMPARE_TOOLTIP_GTE": "Skila sönnu ef fyrra inntakið er stærra en eða jafnt og seinna inntakið.", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "Skila sönnu ef bæði inntökin eru sönn.", "LOGIC_OPERATION_AND": "og", "LOGIC_OPERATION_TOOLTIP_OR": "Skila sönnu ef að minnsta kosti eitt inntak er satt.", "LOGIC_OPERATION_OR": "eða", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "ekki %1", "LOGIC_NEGATE_TOOLTIP": "Skilar sönnu ef inntakið er ósatt. Skilar ósönnu ef inntakið er satt.", - "LOGIC_BOOLEAN_HELPURL": "https://github.com/google/blockly/wiki/Logic#values", "LOGIC_BOOLEAN_TRUE": "satt", "LOGIC_BOOLEAN_FALSE": "ósatt", "LOGIC_BOOLEAN_TOOLTIP": "Skilar annað hvort sönnu eða ósönnu.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "tómagildi", "LOGIC_NULL_TOOLTIP": "Skilar tómagildi.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "prófun", "LOGIC_TERNARY_IF_TRUE": "ef satt", "LOGIC_TERNARY_IF_FALSE": "ef ósatt", "LOGIC_TERNARY_TOOLTIP": "Kanna skilyrðið í 'prófun'. Skilar 'ef satt' gildinu ef skilyrðið er satt, en skilar annars 'ef ósatt' gildinu.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Tala.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", "MATH_TRIG_ASIN": "asin", "MATH_TRIG_ACOS": "acos", "MATH_TRIG_ATAN": "atan", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Skila summu talnanna tveggja.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Skila mismun talnanna.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Skila margfeldi talnanna.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Skila deilingu talnanna.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Skila fyrri tölunni í veldinu seinni talan.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "kvaðratrót", "MATH_SINGLE_TOOLTIP_ROOT": "Skila kvaðratrót tölu.", "MATH_SINGLE_OP_ABSOLUTE": "algildi", @@ -139,14 +126,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Skila tugalógaritma tölu.", "MATH_SINGLE_TOOLTIP_EXP": "Skila e í veldi tölu.", "MATH_SINGLE_TOOLTIP_POW10": "Skila 10 í veldi tölu.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Skila sínusi horns gefnu í gráðum.", "MATH_TRIG_TOOLTIP_COS": "Skila kósínusi horns gefnu í gráðum.", "MATH_TRIG_TOOLTIP_TAN": "Skila tangensi horns gefnu í gráðum.", "MATH_TRIG_TOOLTIP_ASIN": "Skila arkarsínusi tölu.", "MATH_TRIG_TOOLTIP_ACOS": "Skila arkarkósínusi tölu.", "MATH_TRIG_TOOLTIP_ATAN": "Skila arkartangensi tölu.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Skila algengum fasta: π (3.141…), e (2.718…), φ (1.618…), kvrót(2) (1.414…), kvrót(½) (0.707…) eða ∞ (óendanleika).", "MATH_IS_EVEN": "er\\u00A0jöfn tala", "MATH_IS_ODD": "er oddatala", @@ -156,10 +141,8 @@ "MATH_IS_NEGATIVE": "er neikvæð", "MATH_IS_DIVISIBLE_BY": "er\\u00A0deilanleg með", "MATH_IS_TOOLTIP": "Kanna hvort tala sé jöfn tala, oddatala, jákvæð, neikvæð eða deilanleg með tiltekinni tölu. Skilar sönnu eða ósönnu.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "breyta %1 um %2", "MATH_CHANGE_TOOLTIP": "Bæta tölu við breytu '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Námunda tölu upp eða niður.", "MATH_ROUND_OPERATOR_ROUND": "námunda", "MATH_ROUND_OPERATOR_ROUNDUP": "námunda upp", @@ -180,40 +163,31 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Skila staðalfráviki lista.", "MATH_ONLIST_OPERATOR_RANDOM": "eitthvað úr lista", "MATH_ONLIST_TOOLTIP_RANDOM": "Skila einhverju atriði úr listanum.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "afgangur af %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Skila afgangi deilingar með tölunum.", "MATH_CONSTRAIN_TITLE": "þröngva %1 lægst %2 hæst %3", "MATH_CONSTRAIN_TOOLTIP": "Þröngva tölu til að vera innan hinna tilgreindu marka (að báðum meðtöldum).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "slembitala frá %1 til %2", "MATH_RANDOM_INT_TOOLTIP": "Skila heiltölu sem valin er af handahófi og er innan tilgreindra marka, að báðum meðtöldum.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "slembibrot", "MATH_RANDOM_FLOAT_TOOLTIP": "Skila broti sem er valið af handahófi úr tölum á bilinu frá og með 0.0 til (en ekki með) 1.0.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", + "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2 (EN)", "TEXT_TEXT_TOOLTIP": "Stafur, orð eða textalína.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "búa til texta með", "TEXT_JOIN_TOOLTIP": "Búa til texta með því að tengja saman einhvern fjölda atriða.", "TEXT_CREATE_JOIN_TITLE_JOIN": "tengja", "TEXT_CREATE_JOIN_TOOLTIP": "Bæta við, fjarlægja eða umraða hlutum til að breyta skipan þessa textakubbs.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "Bæta atriði við textann.", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "við %1 bæta texta %2", "TEXT_APPEND_TOOLTIP": "Bæta texta við breytuna '%1'.", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "lengd %1", "TEXT_LENGTH_TOOLTIP": "Skilar fjölda stafa (með bilum) í gefna textanum.", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "%1 er tómur", "TEXT_ISEMPTY_TOOLTIP": "Skilar sönnu ef gefni textinn er tómur.", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "Finnur fyrsta/síðasta tilfelli fyrri textans í seinni textanum og skilar sæti hans. Skilar %1 ef textinn finnst ekki.", "TEXT_INDEXOF_TITLE": "í texta %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "finna fyrsta tilfelli texta", "TEXT_INDEXOF_OPERATOR_LAST": "finna síðasta tilfelli texta", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "í texta %1 %2", "TEXT_CHARAT_FROM_START": "sækja staf #", "TEXT_CHARAT_FROM_END": "sækja staf # frá enda", @@ -222,7 +196,6 @@ "TEXT_CHARAT_RANDOM": "sækja einhvern staf", "TEXT_CHARAT_TOOLTIP": "Skila staf á tilteknum stað.", "TEXT_GET_SUBSTRING_TOOLTIP": "Skilar tilteknum hluta textans.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "í texta", "TEXT_GET_SUBSTRING_START_FROM_START": "sækja textabút frá staf #", "TEXT_GET_SUBSTRING_START_FROM_END": "sækja textabút frá staf # frá enda", @@ -230,20 +203,16 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "að staf #", "TEXT_GET_SUBSTRING_END_FROM_END": "að staf # frá enda", "TEXT_GET_SUBSTRING_END_LAST": "að síðasta staf", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "Skila afriti af textanum með annarri stafastöðu.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "í HÁSTAFI", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "í lágstafi", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "í Upphafstafi", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "Skila afriti af textanum þar sem möguleg bil við báða enda hafa verið fjarlægð.", "TEXT_TRIM_OPERATOR_BOTH": "eyða bilum báðum megin við", "TEXT_TRIM_OPERATOR_LEFT": "eyða bilum vinstra megin við", "TEXT_TRIM_OPERATOR_RIGHT": "eyða bilum hægra megin við", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "prenta %1", "TEXT_PRINT_TOOLTIP": "Prenta tiltekinn texta, tölu eða annað gildi.", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "biðja um texta með skilaboðum", "TEXT_PROMPT_TYPE_NUMBER": "biðja um tölu með skilaboðum", "TEXT_PROMPT_TOOLTIP_NUMBER": "Biðja notandann um tölu.", @@ -252,7 +221,6 @@ "TEXT_REPLACE_MESSAGE0": "skipta %1 út með %2 í %3", "TEXT_REVERSE_MESSAGE0": "snúa við %1", "TEXT_REVERSE_TOOLTIP": "Snýr við röð stafanna í textanum.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "búa til tóman lista", "LISTS_CREATE_EMPTY_TOOLTIP": "Skilar lista með lengdina 0 án gagna", "LISTS_CREATE_WITH_TOOLTIP": "Búa til lista með einhverjum fjölda atriða.", @@ -260,16 +228,13 @@ "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "listi", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Bæta við, fjarlægja eða umraða hlutum til að breyta skipan þessa listakubbs.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Bæta atriði við listann.", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "Býr til lista sem inniheldur tiltekna gildið endurtekið tiltekið oft.", "LISTS_REPEAT_TITLE": "búa til lista með atriði %1 endurtekið %2 sinnum", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "lengd %1", "LISTS_LENGTH_TOOLTIP": "Skilar lengd lista.", "LISTS_ISEMPTY_TITLE": "%1 er tómur", "LISTS_ISEMPTY_TOOLTIP": "Skilar sönnu ef listinn er tómur.", "LISTS_INLIST": "í lista", - "LISTS_INDEX_OF_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", "LISTS_INDEX_OF_FIRST": "finna fyrsta tilfelli atriðis", "LISTS_INDEX_OF_LAST": "finna síðasta tilfelli atriðis", "LISTS_INDEX_OF_TOOLTIP": "Finnur hvar atriðið kemur fyrir fyrst/síðast í listanum og skilar sæti þess. Skilar %1 ef atriðið finnst ekki.", @@ -295,7 +260,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "Fjarlægir fyrsta atriðið í lista.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "Fjarlægir síðasta atriðið í lista.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "Fjarlægir eitthvert atriði úr lista.", - "LISTS_SET_INDEX_HELPURL": "https://github.com/google/blockly/wiki/Lists#in-list--set", "LISTS_SET_INDEX_SET": "setja í", "LISTS_SET_INDEX_INSERT": "bæta við", "LISTS_SET_INDEX_INPUT_TO": "sem", @@ -307,7 +271,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Bætir atriðinu fremst í listann.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Bætir atriðinu aftan við listann.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Bætir atriðinu einhversstaðar við listann.", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "sækja undirlista frá #", "LISTS_GET_SUBLIST_START_FROM_END": "sækja undirlista frá # frá enda", "LISTS_GET_SUBLIST_START_FIRST": "sækja undirlista frá fyrsta", @@ -315,7 +278,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "til # frá enda", "LISTS_GET_SUBLIST_END_LAST": "til síðasta", "LISTS_GET_SUBLIST_TOOLTIP": "Býr til afrit af tilteknum hluta lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "raða %1 %2 %3", "LISTS_SORT_TOOLTIP": "Raða afriti lista.", "LISTS_SORT_ORDER_ASCENDING": "hækkandi", @@ -330,28 +292,22 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Sameinar lista af textum í einn texta, með skiltákn á milli.", "LISTS_REVERSE_MESSAGE0": "snúa við %1", "LISTS_REVERSE_TOOLTIP": "Snúa við afriti lista.", - "VARIABLES_GET_HELPURL": "https://github.com/google/blockly/wiki/Variables#get", "VARIABLES_GET_TOOLTIP": "Skilar gildi þessarar breytu.", "VARIABLES_GET_CREATE_SET": "Búa til 'stilla %1'", - "VARIABLES_SET_HELPURL": "https://github.com/google/blockly/wiki/Variables#set", "VARIABLES_SET": "stilla %1 á %2", "VARIABLES_SET_TOOLTIP": "Stillir þessa breytu á innihald inntaksins.", "VARIABLES_SET_CREATE_GET": "Búa til 'sækja %1'", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "til að", "PROCEDURES_DEFNORETURN_PROCEDURE": "gera eitthvað", "PROCEDURES_BEFORE_PARAMS": "með:", "PROCEDURES_CALL_BEFORE_PARAMS": "með:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Býr til fall sem skilar engu.", "PROCEDURES_DEFNORETURN_COMMENT": "Lýstu þessari aðgerð/falli...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "skila", "PROCEDURES_DEFRETURN_TOOLTIP": "Býr til fall sem skilar úttaki.", "PROCEDURES_ALLOW_STATEMENTS": "leyfa setningar", "PROCEDURES_DEF_DUPLICATE_WARNING": "Aðvörun: Þetta fall er með tvítekna stika.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Keyra heimatilbúna fallið '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Keyra heimatilbúna fallið '%1' og nota úttak þess.", "PROCEDURES_MUTATORCONTAINER_TITLE": "inntök", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Bæta við, fjarlægja eða umraða inntökum fyrir þetta fall.", @@ -360,7 +316,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Sýna skilgreiningu falls", "PROCEDURES_CREATE_DO": "Búa til '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Ef gildi er satt, skal skila öðru gildi.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Aðvörun: Þennan kubb má aðeins nota í skilgreiningu falls.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Segðu eitthvað...", "DIALOG_OK": "Í lagi", diff --git a/msg/json/it.json b/msg/json/it.json index 1347a45be..3c066a180 100644 --- a/msg/json/it.json +++ b/msg/json/it.json @@ -236,10 +236,8 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Richiedi un numero all'utente.", "TEXT_PROMPT_TOOLTIP_TEXT": "Richiede del testo da parte dell'utente.", "TEXT_COUNT_MESSAGE0": "conta %1 in %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Contare quante volte una parte di testo si ripete all'interno di qualche altro testo.", "TEXT_REPLACE_MESSAGE0": "sostituisci %1 con %2 in %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "sostituisci tutte le occorrenze di un certo testo con qualche altro testo.", "TEXT_REVERSE_MESSAGE0": "inverti %1", "TEXT_REVERSE_TOOLTIP": "Inverte l'ordine dei caratteri nel testo.", @@ -299,7 +297,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "da # dalla fine", "LISTS_GET_SUBLIST_END_LAST": "dagli ultimi", "LISTS_GET_SUBLIST_TOOLTIP": "Crea una copia della porzione specificata di una lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordinamento %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordina una copia di un elenco.", "LISTS_SORT_ORDER_ASCENDING": "crescente", @@ -340,7 +337,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Evidenzia definizione di funzione", "PROCEDURES_CREATE_DO": "Crea '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Se un valore è vero allora restituisce un secondo valore.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Attenzioneː Questo blocco può essere usato solo all'interno di una definizione di funzione.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Scrivi qualcosa...", "WORKSPACE_ARIA_LABEL": "Area di lavoro di Blockly", diff --git a/msg/json/ja.json b/msg/json/ja.json index eb5737d60..c57368ac8 100644 --- a/msg/json/ja.json +++ b/msg/json/ja.json @@ -61,13 +61,11 @@ "COLOUR_PICKER_TOOLTIP": "パレットから色を選んでください。", "COLOUR_RANDOM_TITLE": "ランダムな色", "COLOUR_RANDOM_TOOLTIP": "ランダムに色を選ぶ。", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "色:", "COLOUR_RGB_RED": "赤", "COLOUR_RGB_GREEN": "緑", "COLOUR_RGB_BLUE": "青", "COLOUR_RGB_TOOLTIP": "赤、緑、および青の指定された量で色を作成します。すべての値は 0 ~ 100 の間でなければなりません。", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "ブレンド", "COLOUR_BLEND_COLOUR1": "色 1", "COLOUR_BLEND_COLOUR2": "色 2", @@ -77,24 +75,19 @@ "CONTROLS_REPEAT_TITLE": "%1 回繰り返す", "CONTROLS_REPEAT_INPUT_DO": "実行", "CONTROLS_REPEAT_TOOLTIP": "いくつかのステートメントを数回実行します。", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "繰り返す:続ける条件", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "繰り返す:終わる条件", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "値がtrueの間、いくつかのステートメントを実行する。", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "値がfalseの間、いくつかのステートメントを実行する。", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "変数 '%1' が開始番号から終了番号まで指定した間隔での値をとって、指定したブロックを実行する。", "CONTROLS_FOR_TITLE": "%1 を %2 から %3 まで %4 ずつカウントする", - "CONTROLS_FOREACH_HELPURL": "https://github.com/google/blockly/wiki/Loops#for-each", "CONTROLS_FOREACH_TITLE": "リスト%2の各項目%1について", "CONTROLS_FOREACH_TOOLTIP": "リストの各項目について、その項目を変数'%1'として、いくつかのステートメントを実行します。", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "ループから抜け出す", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "ループの次の反復処理を続行します", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "入っているループから抜け出します。", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "このループの残りの部分をスキップして、ループの繰り返しを続けます。", "CONTROLS_FLOW_STATEMENTS_WARNING": "注意: このブロックは、ループ内でのみ使用できます。", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "値が true の場合、ステートメントを実行します。", "CONTROLS_IF_TOOLTIP_2": "値が true の場合は、最初のステートメントのブロックを実行します。それ以外の場合は、2番目のステートメントのブロックを実行します。", "CONTROLS_IF_TOOLTIP_3": "最初の値が true の場合は、最初のステートメントのブロックを実行します。それ以外の場合で、2番目の値が true の場合は、2番目のステートメントのブロックを実行します。", @@ -112,19 +105,15 @@ "LOGIC_COMPARE_TOOLTIP_LTE": "最初の入力が 2 番目の入力以下の場合に true を返します。", "LOGIC_COMPARE_TOOLTIP_GT": "最初の入力が 2 番目の入力よりも大きい場合は true を返します。", "LOGIC_COMPARE_TOOLTIP_GTE": "最初の入力が 2 番目の入力以上の場合に true を返します。", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "両方の入力が true のときに true を返します。", "LOGIC_OPERATION_AND": "かつ", "LOGIC_OPERATION_TOOLTIP_OR": "少なくとも 1 つの入力が true のときに true を返します。", "LOGIC_OPERATION_OR": "または", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "%1ではない", "LOGIC_NEGATE_TOOLTIP": "入力が false の場合は、true を返します。入力が true の場合は false を返します。", - "LOGIC_BOOLEAN_HELPURL": "https://github.com/google/blockly/wiki/Logic#values", "LOGIC_BOOLEAN_TRUE": "true", "LOGIC_BOOLEAN_FALSE": "false", "LOGIC_BOOLEAN_TOOLTIP": "true または false を返します。", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "null", "LOGIC_NULL_TOOLTIP": "null を返します。", "LOGIC_TERNARY_HELPURL": "https://ja.wikipedia.org/wiki/%3F:", @@ -134,11 +123,6 @@ "LOGIC_TERNARY_TOOLTIP": "'テスト' の条件をチェックします。条件が true の場合、'true' の値を返します。それ以外の場合 'false' のを返します。", "MATH_NUMBER_HELPURL": "https://ja.wikipedia.org/wiki/数", "MATH_NUMBER_TOOLTIP": "数です。", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -205,7 +189,6 @@ "MATH_MODULO_HELPURL": "https://ja.wikipedia.org/wiki/剰余演算", "MATH_MODULO_TITLE": "%1÷%2の余り", "MATH_MODULO_TOOLTIP": "2つの数値の割り算の余りを返す。", - "MATH_CONSTRAIN_HELPURL": "https://en.wikipedia.org/wiki/Clamping_(graphics)", "MATH_CONSTRAIN_TITLE": "%1 を %2 以上 %3 以下の範囲に制限", "MATH_CONSTRAIN_TOOLTIP": "指定した上限と下限の間に値を制限する(上限と下限の値を含む)。", "MATH_RANDOM_INT_HELPURL": "https://ja.wikipedia.org/wiki/疑似乱数", @@ -219,37 +202,29 @@ "MATH_ATAN2_TOOLTIP": "アークタンジェントを用いて、点 (X, Y) の角度を -180度から 180度で返します。", "TEXT_TEXT_HELPURL": "https://ja.wikipedia.org/wiki/文字列", "TEXT_TEXT_TOOLTIP": "文字、単語、または行のテキスト。", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", - "TEXT_JOIN_TITLE_CREATEWITH": "テキストの作成:", + "TEXT_JOIN_TITLE_CREATEWITH": "テキストを結合して作成:", "TEXT_JOIN_TOOLTIP": "任意の数の項目一部を一緒に接合してテキストを作成。", "TEXT_CREATE_JOIN_TITLE_JOIN": "結合", "TEXT_CREATE_JOIN_TOOLTIP": "セクションを追加、削除、または順序変更して、ブロックを再構成。", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "テキストへ項目を追加。", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "項目 %1 へテキストを追加 %2", "TEXT_APPEND_TOOLTIP": "変数 '%1' にテキストを追加。", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "%1の長さ", "TEXT_LENGTH_TOOLTIP": "与えられたテキストの(スペースを含む)文字数を返す。", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "%1が空", "TEXT_ISEMPTY_TOOLTIP": "与えられたテキストが空の場合は true を返す。", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "二番目のテキストの中で一番目のテキストが最初/最後に出現したインデックスを返す。テキストが見つからない場合は%1を返す。", "TEXT_INDEXOF_TITLE": "テキスト %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "で以下のテキストの最初の出現箇所を検索:", "TEXT_INDEXOF_OPERATOR_LAST": "で以下のテキストの最後の出現箇所を検索:", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "テキスト %1 %2", "TEXT_CHARAT_FROM_START": "の、以下の数字番目の文字:", "TEXT_CHARAT_FROM_END": "の、後ろから以下の数字番目の文字:", "TEXT_CHARAT_FIRST": "最初の文字を得る", "TEXT_CHARAT_LAST": "最後の文字を得る", "TEXT_CHARAT_RANDOM": "ランダムな文字を得る", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "指定された位置に文字を返します。", "TEXT_GET_SUBSTRING_TOOLTIP": "テキストの指定部分を返します。", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "テキスト", "TEXT_GET_SUBSTRING_START_FROM_START": "の部分文字列を取得;開始位置:", "TEXT_GET_SUBSTRING_START_FROM_END": "の部分文字列を取得;開始位置:後ろから", @@ -257,54 +232,40 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "終了位置:", "TEXT_GET_SUBSTRING_END_FROM_END": "終了位置:後ろから", "TEXT_GET_SUBSTRING_END_LAST": "最後の文字", - "TEXT_GET_SUBSTRING_TAIL": "", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "別のケースに、テキストのコピーを返します。", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "大文字に", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "小文字に", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "タイトル ケースに", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "スペースを 1 つまたは両方の端から削除したのち、テキストのコピーを返します。", "TEXT_TRIM_OPERATOR_BOTH": "両端のスペースを取り除く", "TEXT_TRIM_OPERATOR_LEFT": "左端のスペースを取り除く", "TEXT_TRIM_OPERATOR_RIGHT": "右端のスペースを取り除く", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "%1 を表示", "TEXT_PRINT_TOOLTIP": "指定したテキスト、番号または他の値を印刷します。", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "メッセージでテキスト入力を求める", "TEXT_PROMPT_TYPE_NUMBER": "メッセージで番号の入力を求める", "TEXT_PROMPT_TOOLTIP_NUMBER": "ユーザーに数値のインプットを求める。", "TEXT_PROMPT_TOOLTIP_TEXT": "ユーザーにテキスト入力を求める。", "TEXT_COUNT_MESSAGE0": "%2に含まれる%1の数を数える", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "とある文が別の文のなかに使われた回数を数える。", "TEXT_REPLACE_MESSAGE0": "%3に含まれる%1を%2に置換", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "文に含まれるキーワードを置換する。", "TEXT_REVERSE_MESSAGE0": "%1を逆順に", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "文の文字を逆順にする。", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "空のリストを作成", "LISTS_CREATE_EMPTY_TOOLTIP": "長さ0でデータ・レコードを含まない空のリストを返す", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "項目数が不定のリストを作成。", "LISTS_CREATE_WITH_INPUT_WITH": "以下を使ってリストを作成:", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "リスト", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "追加、削除、またはセクションの順序変更をして、このリスト・ブロックを再構成する。", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "リストに項目を追加。", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "与えられた値を指定された回数繰り返してリストを作成。", "LISTS_REPEAT_TITLE": "項目%1を%2回繰り返したリストを作成", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "%1の長さ", "LISTS_LENGTH_TOOLTIP": "リストの長さを返します。", - "LISTS_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#is-empty", "LISTS_ISEMPTY_TITLE": "%1が空", "LISTS_ISEMPTY_TOOLTIP": "リストが空の場合は、true を返します。", "LISTS_INLIST": "リスト", - "LISTS_INDEX_OF_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", "LISTS_INDEX_OF_FIRST": "で以下のアイテムの最初の出現箇所を検索:", "LISTS_INDEX_OF_LAST": "で以下のテキストの最後の出現箇所を検索:", "LISTS_INDEX_OF_TOOLTIP": "リスト項目の最初/最後に出現するインデックス位置を返します。項目が見つからない場合は %1 を返します。", @@ -316,7 +277,6 @@ "LISTS_GET_INDEX_FIRST": "最初", "LISTS_GET_INDEX_LAST": "最後", "LISTS_GET_INDEX_RANDOM": "ランダム", - "LISTS_GET_INDEX_TAIL": "", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 は、最初の項目です。", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 は、最後の項目です。", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "リスト内の指定位置にある項目を返します。", @@ -331,7 +291,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "リスト内の最初の項目を削除します。", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "リスト内の最後の項目を削除します。", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "リスト内にあるアイテムをランダムに削除します。", - "LISTS_SET_INDEX_HELPURL": "https://github.com/google/blockly/wiki/Lists#in-list--set", "LISTS_SET_INDEX_SET": "セット", "LISTS_SET_INDEX_INSERT": "挿入位置:", "LISTS_SET_INDEX_INPUT_TO": "値:", @@ -343,16 +302,13 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "リストの先頭に項目を挿入します。", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "リストの末尾に項目を追加します。", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "リストに項目をランダムに挿入します。", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "# からサブディレクトリのリストを取得します。", "LISTS_GET_SUBLIST_START_FROM_END": "端から #のサブリストを取得します。", "LISTS_GET_SUBLIST_START_FIRST": "最初からサブリストを取得する。", "LISTS_GET_SUBLIST_END_FROM_START": "終了位置:", "LISTS_GET_SUBLIST_END_FROM_END": "終了位置:後ろから", "LISTS_GET_SUBLIST_END_LAST": "最後まで", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "リストの指定された部分のコピーを作成します。", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 ( %2 ) に %3 を並び替える", "LISTS_SORT_TOOLTIP": "リストのコピーを並べ替え", "LISTS_SORT_ORDER_ASCENDING": "昇順", @@ -360,31 +316,24 @@ "LISTS_SORT_TYPE_NUMERIC": "数値順", "LISTS_SORT_TYPE_TEXT": "アルファベット順", "LISTS_SORT_TYPE_IGNORECASE": "アルファベット順(大文字・小文字の区別無し)", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "テキストからリストを作る", "LISTS_SPLIT_TEXT_FROM_LIST": "リストからテキストを作る", "LISTS_SPLIT_WITH_DELIMITER": "区切り記号", "LISTS_SPLIT_TOOLTIP_SPLIT": "テキストを区切り記号で分割したリストにする", "LISTS_SPLIT_TOOLTIP_JOIN": "テキストのリストを区切り記号で区切られた一つのテキストにする", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "%1を逆順に", "LISTS_REVERSE_TOOLTIP": "リストのコピーを逆順にする。", - "VARIABLES_GET_HELPURL": "https://github.com/google/blockly/wiki/Variables#get", "VARIABLES_GET_TOOLTIP": "この変数の値を返します。", "VARIABLES_GET_CREATE_SET": "'セット%1を作成します。", - "VARIABLES_SET_HELPURL": "https://github.com/google/blockly/wiki/Variables#set", "VARIABLES_SET": "%1 に %2 をセット", "VARIABLES_SET_TOOLTIP": "この入力を変数と等しくなるように設定します。", "VARIABLES_SET_CREATE_GET": "'%1 を取得' を作成します。", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_DEFNORETURN_TITLE": "関数", "PROCEDURES_DEFNORETURN_PROCEDURE": "何かする", "PROCEDURES_BEFORE_PARAMS": "引数:", "PROCEDURES_CALL_BEFORE_PARAMS": "引数:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "出力なしの関数を作成します。", "PROCEDURES_DEFNORETURN_COMMENT": "この関数の説明…", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_DEFRETURN_RETURN": "返す", "PROCEDURES_DEFRETURN_TOOLTIP": "一つの出力を持つ関数を作成します。", "PROCEDURES_ALLOW_STATEMENTS": "ステートメントを許可", @@ -400,7 +349,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "関数の内容を強調表示します。", "PROCEDURES_CREATE_DO": "'%1' を作成", "PROCEDURES_IFRETURN_TOOLTIP": "1番目の値が true の場合、2番目の値を返します。", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "警告: このブロックは、関数定義内でのみ使用できます。", "WORKSPACE_COMMENT_DEFAULT_TEXT": "ここへ入力", "WORKSPACE_ARIA_LABEL": "Blocklyワークスペース", diff --git a/msg/json/ka.json b/msg/json/ka.json index 66847e0b2..761db73c9 100644 --- a/msg/json/ka.json +++ b/msg/json/ka.json @@ -2,9 +2,12 @@ "@metadata": { "authors": [ "Otogi", + "StarrySky", "Გიო ოქრო" ] }, + "TODAY": "დღეს", + "DUPLICATE_BLOCK": "დუბლიკატი", "ENABLE_BLOCK": "ბლოკის ჩართვა", "MATH_ONLIST_OPERATOR_SUM": "სიის ჯამი", "DIALOG_OK": "კარგი" diff --git a/msg/json/kab.json b/msg/json/kab.json index 1f9485f58..88a531070 100644 --- a/msg/json/kab.json +++ b/msg/json/kab.json @@ -59,7 +59,6 @@ "COLOUR_BLEND_COLOUR2": "ini 2", "COLOUR_BLEND_RATIO": "afmiḍi", "COLOUR_BLEND_TOOLTIP": "Sexleḍ sin n yiniten d tesmekta (gar 0.0 ar 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "Ales %1 n tikkal", "CONTROLS_REPEAT_INPUT_DO": "eg", "CONTROLS_REPEAT_TOOLTIP": "Selkem ddeqs n tinaḍin ddeqs n tikal.", @@ -86,7 +85,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Rnu, kkes, neq ales asmizzwer n tgezmiyin akken ad talseḍ tawila n yiḥder-a ma.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Rnu tawtilt i yiḥder ma.", "CONTROLS_IF_ELSE_TOOLTIP": "Rnu tawtilt taneggarut i yiḥder ma igebren akk tinaḍin.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Ad yerr idetti ma yella i sin n yinekcam d imegduya.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Ad d-yerr idetti mayella i sin n yinekcam mačči d imegduya.", "LOGIC_COMPARE_TOOLTIP_LT": "Ad d-yerr idetti ma anekcam amezwaru meẓẓiy ɣef wis sin.", @@ -108,15 +106,12 @@ "LOGIC_TERNARY_IF_TRUE": "ma d idetti", "LOGIC_TERNARY_IF_FALSE": "ma d ucciḍ", "LOGIC_TERNARY_TOOLTIP": "Senqed tawtilt deg 'sekyed'. Ma d idetti, ad d-yerr azal 'ma idetti', ma ulac ad d-yerr azam 'ma ucciḍ'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Amḍan.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Ad d-yerr tmerni n sin n yimiḍanen.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Ad d-yerr tmernit n sin n yimiḍanen.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Ad d-yerr tukksa gar sin n yimiḍanen.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Ad d-yerr aful n sin n yimḍanen.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Ad d-yerr amḍan amezwaru uzmir wis sin.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "aẓar uzmir 2", "MATH_SINGLE_TOOLTIP_ROOT": "Ad d-yerr aẓar uzmir sin n umḍan.", "MATH_SINGLE_OP_ABSOLUTE": "azal amagdez", @@ -126,14 +121,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Ad d-yerr alugaritm 10 n umiḍan.", "MATH_SINGLE_TOOLTIP_EXP": "Ad d-yerr e uzmir amiḍan.", "MATH_SINGLE_TOOLTIP_POW10": "Ad d-yerr 10 uzmir amiḍan.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Ad d-yerr asinus n teɣmert s tfesna (mačči aṛadyan).", "MATH_TRIG_TOOLTIP_COS": "Ad d-yerr akusinus n teɣmert s tfesna (mačči aṛadyan).", "MATH_TRIG_TOOLTIP_TAN": "Ad d-yerr taslayt n teɣmert s tfesna (mačči aṛadyan).", "MATH_TRIG_TOOLTIP_ASIN": "Ad d-yerr taganzi n usinus n umḍan.", "MATH_TRIG_TOOLTIP_ACOS": "Ad d-yerr taganzi n ukusinus n umḍan.", "MATH_TRIG_TOOLTIP_ATAN": "Ad d-yerr taganzi n teslayt n umiḍan.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Ad d-yerr yiwet seg tmezgiyin yettwasnen : π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), neɣ ∞ (ifeḍ).", "MATH_IS_EVEN": "d ayugan", "MATH_IS_ODD": "d aryugan", @@ -143,10 +136,8 @@ "MATH_IS_NEGATIVE": "d uzdir", "MATH_IS_DIVISIBLE_BY": "d ubṭay ɣef", "MATH_IS_TOOLTIP": "Senqed ma amḍan d ayugan, d aryugan, d amenzu, d ummid, d ufrar, d uzdir, neɣ d ubṭay ɣef kra n umḍan. Ad d-yerr idetti neɣ ucciḍ.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "snifel %1 s %2", "MATH_CHANGE_TOOLTIP": "Rnu amḍan i umutti '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Saẓ amiḍan d asawen neɣ d akesser.", "MATH_ROUND_OPERATOR_ROUND": "Saẓ", "MATH_ROUND_OPERATOR_ROUNDUP": "Saẓ d asawen", @@ -167,21 +158,17 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Ad d-yerr azza n tebdart.", "MATH_ONLIST_OPERATOR_RANDOM": "aferdis agacuran n tebdart", "MATH_ONLIST_TOOLTIP_RANDOM": "Ad d-yerr aferdis seg tebdart s wudem agacuran.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "tasagert n %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Ad d-yerr tasagert n beṭṭu n sin n yimḍanen.", "MATH_CONSTRAIN_TITLE": "Err tamara i %1 gar %2 akked %3", "MATH_CONSTRAIN_TOOLTIP": "Err tamara n umḍan akken ad yili gar snat n tlisa (ddant).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "ummid agacuran gar %1 akked %2", "MATH_RANDOM_INT_TOOLTIP": "Ad d-yerr ummid agacuran gar snat n tlisa, ddant.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "tirẓi tagacurant", "MATH_RANDOM_FLOAT_TOOLTIP": "Ad d-yerr tirẓi tagacurant gar 0.0 (yedda) akked 1.0 (ur yeddi ara).", "MATH_ATAN2_HELPURL": "https://kab.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 seg X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Ad d-yerr arctangent n waggaz (X, Y) s tfesniwin deg -180 ɣer 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Asekkil, awal neɣ izirig n uḍris.", "TEXT_JOIN_TITLE_CREATEWITH": "rnu aḍris s", "TEXT_JOIN_TOOLTIP": "Ad yernu taceqquft n uḍris s usdukel gar yal amḍan n yiferdisen.", @@ -289,7 +276,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ar # si tagara", "LISTS_GET_SUBLIST_END_LAST": "ar taggara", "LISTS_GET_SUBLIST_TOOLTIP": "Ad yernu anɣel n uḥric yettwamlen n tebdart.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "smizzwer %1 %2 %3", "LISTS_SORT_TOOLTIP": "Smizzwer anɣel n tebdart.", "LISTS_SORT_ORDER_ASCENDING": "igemmen", @@ -319,9 +305,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "ad yernu tawuri s tuffɣa.", "PROCEDURES_ALLOW_STATEMENTS": "Sireg asmizzwer", "PROCEDURES_DEF_DUPLICATE_WARNING": "Ɣur-k: Tawuri-a ɣur-s iɣewwaṛen usligen.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Selkem tawuri '%1' i yesbadu useqdac.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Selkem tawuri '%1' i yesbadu useqdac sakin seqdec agmuḍ-is.", "PROCEDURES_MUTATORCONTAINER_TITLE": "inekcam", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Rnu, kkes neɣ ales asmizzwer n yinekcam i twuri-a.", diff --git a/msg/json/kbd-cyrl.json b/msg/json/kbd-cyrl.json index 8c0f5b702..6692bf3fc 100644 --- a/msg/json/kbd-cyrl.json +++ b/msg/json/kbd-cyrl.json @@ -38,7 +38,6 @@ "CONTROLS_IF_MSG_IF": "щыпкъэу", "CONTROLS_IF_MSG_ELSEIF": "армырамэ щыпкъэу", "CONTROLS_IF_MSG_ELSE": "армырамэ", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_OPERATION_AND": "икIи", "LOGIC_OPERATION_OR": "е", "LOGIC_BOOLEAN_TRUE": "щыпкъэ", @@ -80,8 +79,6 @@ "TEXT_INDEXOF_OPERATOR_LAST": "иужьыу къыщыхэщыр къэгъуэтын", "PROCEDURES_BEFORE_PARAMS": "игъусэр:", "PROCEDURES_CALL_BEFORE_PARAMS": "игъусэр:", - "PROCEDURES_CALLNORETURN_HELPURL": "https://ru.wikipedia.org/wiki/Функция_%28программирование%29", - "PROCEDURES_CALLRETURN_HELPURL": "https://ru.wikipedia.org/wiki/Функция_%28программирование%29", "DIALOG_OK": "ХЪУАЩ", "DIALOG_CANCEL": "ЩӀегъуэжын" } diff --git a/msg/json/km.json b/msg/json/km.json index fc2913460..0d09b1ea2 100644 --- a/msg/json/km.json +++ b/msg/json/km.json @@ -24,7 +24,6 @@ "RENAME_VARIABLE_TITLE": "ប្ដូរ​ឈ្មោះ​អថេរ​ទាំង '%1' ទៅ​ជា៖", "NEW_VARIABLE": "បង្កើតអថេរ...", "NEW_VARIABLE_TITLE": "ឈ្មោះ​អថេរ​ថ្មី៖", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "ជ្រើស​ពណ៌​មួយ​ពី​បន្ទះ​ពណ៌", "DIALOG_OK": "យល់ព្រម" } diff --git a/msg/json/kn.json b/msg/json/kn.json index 04fc7635d..dd1c68b4b 100644 --- a/msg/json/kn.json +++ b/msg/json/kn.json @@ -48,7 +48,6 @@ "DELETE_VARIABLE_CONFIRMATION": "'%2' ಚರಾಂಶದ '%1' ಉಪಯೋಗಗಳನ್ನು ಅಳಿಸುವುದೇ ?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "'%1' ಚರಾಂಶವನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ. ಏಕೆಂದರೆ ಇದು '%2' ಕಾರ್ಯಘಟಕದ ವ್ಯಾಖ್ಯಾನದ ಭಾಗವಾಗಿದೆ", "DELETE_VARIABLE": "'%1' ಚರಾಂಶವನ್ನು ಅಳಿಸು", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "ವರ್ಣಫಲಕದಿಂದ ಬಣ್ಣವನ್ನು ಆರಿಸು.", "COLOUR_RANDOM_TITLE": "ಯಾದೃಚ್ಛಿಕ ಬಣ್ಣ", "COLOUR_RANDOM_TOOLTIP": "ಯಾದೃಚ್ಛಿಕವಾಗಿ ಯಾವುದಾದರೂ ಒಂದು ಬಣ್ಣವನ್ನು ಆರಿಸು.", @@ -62,7 +61,6 @@ "COLOUR_BLEND_COLOUR2": "ಬಣ್ಣ 2", "COLOUR_BLEND_RATIO": "ಅನುಪಾತ", "COLOUR_BLEND_TOOLTIP": "ಕೊಟ್ಟಿರುವ ಅನುಪಾತದಂತೆ(0.0 - 1.0) ಎರಡು ಬಣ್ಣಗಳನ್ನು ಮಿಶ್ರಣ ಮಾಡುತ್ತದೆ.", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 ಬಾರಿ ಪುನರಾವರ್ತಿಸು", "CONTROLS_REPEAT_INPUT_DO": "ಮಾಡು", "CONTROLS_REPEAT_TOOLTIP": "ಕೆಲವು ಹೇಳಿಕೆಗಳನ್ನು ಹಲವಾರು ಬಾರಿ ಮಾಡು.", @@ -89,7 +87,6 @@ "CONTROLS_IF_IF_TOOLTIP": "ಈ 'ಆಗಿದ್ದರೆ' ಬ್ಲಾಕನ್ನು ಮರು ಸಂರಚಿಸಲು ಅದರ ಭಾಗಗಳನ್ನು ಸೇರಿಸು, ತೆಗೆ ಅಥವಾ ಮರುಕ್ರಮಗೊಳಿಸು.", "CONTROLS_IF_ELSEIF_TOOLTIP": "'ಆಗಿದ್ದರೆ' ಬ್ಲಾಕ್ ಗೆ ಒಂದು ಷರತ್ತು ಸೇರಿಸಿ.", "CONTROLS_IF_ELSE_TOOLTIP": "ಅಂತಿಮವಾದ, ಎಲ್ಲವನ್ನೂ-ಹಿಡಿ ಷರತ್ತನ್ನು 'ಆಗಿದ್ದರೆ' ಬ್ಲಾಕ್ ಗೆ ಸೇರಿಸಿ.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "ಎರಡೂ ಒದಗಿಸುವ ಅಂಶಗಳು ಪರಸ್ಪರ ಸಮನಾಗಿದ್ದರೆ, ಸರಿ ಹಿಂತಿರುಗಿಸಿ.", "LOGIC_COMPARE_TOOLTIP_NEQ": "ಎರಡೂ ಒದಗಿಸುವ ಅಂಶಗಳು ಪರಸ್ಪರ ಸಮನಾಗಿರದಿದ್ದರೆ ಸರಿ ಹಿಂತಿರುಗಿಸಿ.", "LOGIC_COMPARE_TOOLTIP_LT": "ಮೊದಲನೇ ಒದಗಿಸುವ ಅಂಶ ಎರಡನೇ ಒದಗಿಸುವ ಅಂಶಕ್ಕಿಂತ ಚಿಕ್ಕದ್ದಾಗಿದ್ದರೆ ಸರಿ ಹಿಂತಿರುಗಿಸಿ.", @@ -111,15 +108,12 @@ "LOGIC_TERNARY_IF_TRUE": "ಸತ್ಯ ಆಗಿದ್ದರೆ", "LOGIC_TERNARY_IF_FALSE": "ಸುಳ್ಳು ಆಗಿದ್ದರೆ", "LOGIC_TERNARY_TOOLTIP": "'ಪರೀಕ್ಷೆ'ಯಲ್ಲಿನ ಷರತ್ತನ್ನು ಪರಿಶೀಲಿಸಿ. ಷರತ್ತು ಸರಿಯಾಗಿದ್ದರೆ, 'ಸತ್ಯವಾಗಿದ್ದರೆ' ಮೌಲ್ಯವನ್ನು; ಇಲ್ಲದಿದ್ದರೆ 'ಸುಳ್ಳಾಗಿದ್ದರೆ' ಮೌಲ್ಯವನ್ನೂ ಹಿಂತಿರುಗಿಸುವುದು.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "ಒಂದು ಸಂಖ್ಯೆ.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "ಎರಡು ಸಂಖ್ಯೆಗಳ ಮೊತ್ತವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "ಎರಡು ಸಂಖ್ಯೆಗಳ ವ್ಯತ್ಯಾಸವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "ಎರಡು ಸಂಖ್ಯೆಗಳ ಗುಣಲಬ್ಧವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "ಎರಡು ಸಂಖ್ಯೆಗಳ ಭಾಗಲಬ್ಧವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_ARITHMETIC_TOOLTIP_POWER": "ಮೊದಲ ಸಂಖ್ಯೆಯ ಘಾತಾಂಶ ಎರಡನೇ ಸಂಖ್ಯೆಯಾದಾಗಿನ ಫಲಿತಾಂಶವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "ವರ್ಗಮೂಲ", "MATH_SINGLE_TOOLTIP_ROOT": "ಸಂಖ್ಯೆಯ ವರ್ಗಮೂಲವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_SINGLE_OP_ABSOLUTE": "ಪರಿಪೂರ್ಣ", @@ -129,14 +123,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "ಒಂದು ಸಂಖ್ಯೆಯ ಆಧಾರ 10 ಲಾಗರಿಥಮನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_SINGLE_TOOLTIP_EXP": "ಒಂದು ಸಂಖ್ಯೆಯ e ಘಾತವಾಗಿದ್ದಾಗಿನ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_SINGLE_TOOLTIP_POW10": "ಒಂದು ಸಂಖ್ಯೆಯ 10ರ ಘಾತವಾಗಿದ್ದಾಗಿನ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "ಕೋನವೊಂದರ ಸೈನ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ(ರೇಡಿಯನ್‌ಗಳಲ್ಲ)", "MATH_TRIG_TOOLTIP_COS": "ಕೋನವೊಂದರ ಕೊಸೈನ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ(ರೇಡಿಯನ್‌ಗಳಲ್ಲ)", "MATH_TRIG_TOOLTIP_TAN": "ಕೋನವೊಂದರ ಟ್ಯಾಂಜೆಂಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ(ರೇಡಿಯನ್‌ಗಳಲ್ಲ)", "MATH_TRIG_TOOLTIP_ASIN": "ಸಂಖ್ಯೆಯೊಂದರ ಆರ್ಕ್ ಸೈನ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_TRIG_TOOLTIP_ACOS": "ಸಂಖ್ಯೆಯೊಂದರ ಆರ್ಕ್ ಕೊಸೈನ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ(ರೇಡಿಯನ್‌ಗಳಲ್ಲ)", "MATH_TRIG_TOOLTIP_ATAN": "ಸಂಖ್ಯೆಯೊಂದರ ಆರ್ಕ್ ಟ್ಯಾಂಜೆಂಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ(ರೇಡಿಯನ್‌ಗಳಲ್ಲ)", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "ಸಾಮಾನ್ಯ ಸ್ಥಿರಾಂಕಗಳಲ್ಲಿ ಒಂದನ್ನು ಹಿಂತಿರುಗಿಸಿ:π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).", "MATH_IS_EVEN": "ಸಮ ಸಂಖ್ಯೆಯೇ?", "MATH_IS_ODD": "ಬೆಸ ಸಂಖ್ಯೆಯೇ?", @@ -146,10 +138,8 @@ "MATH_IS_NEGATIVE": "ಋಣಾತ್ಮಕವೇ?", "MATH_IS_DIVISIBLE_BY": "ಇದರಿಂದ ಭಾಗಿಸಬಹುದೇ?", "MATH_IS_TOOLTIP": "ಒಂದು ಸಂಖ್ಯೆ ಸಮ, ಬೆಸ, ಅವಿಭಾಜ್ಯ, ಪೂರ್ಣ, ಧನಾತ್ಮಕ, ಋಣಾತ್ಮಕವಾಗಿದೆಯೇ ಅಥವಾ ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯಿಂದ ಭಾಗಿಸ ಬಹುದೇ ಎಂದು ಪರಿಶೀಲಿಸಿ. ಸತ್ಯ ಅಥವಾ ಸುಳ್ಳು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "%1 ಅನ್ನು %2 ರಿಂದ ಬದಲಾಯಿಸಿ", "MATH_CHANGE_TOOLTIP": "ಚರಾಂಶ '%1' ಕ್ಕೆ ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ಮೇಲಿನ ಅಥವಾ ಕೆಳಗಿನ ಪೂರ್ಣಾಂಕ ಮಾಡಿ.", "MATH_ROUND_OPERATOR_ROUND": "ಸುತ್ತು", "MATH_ROUND_OPERATOR_ROUNDUP": "ಮೇಲಿನ ಪೂರ್ಣಾಂಕ ಮಾಡಿ.", @@ -170,21 +160,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "ಪಟ್ಟಿಯ ಪ್ರಮಾಣಿತ ವಿಚಲನವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_ONLIST_OPERATOR_RANDOM": "ಪಟ್ಟಿಯ ಯಾದೃಚ್ಛಿತ ಅಂಶ", "MATH_ONLIST_TOOLTIP_RANDOM": "ಪಟ್ಟಿಯ ಯಾದೃಚ್ಛಿತ ಅಂಶವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2 ರ ಶೇಷ", "MATH_MODULO_TOOLTIP": "ಎರಡು ಸಂಖ್ಯೆಗಳ ವಿಭಜನೆಯ ಶೇಷವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", "MATH_CONSTRAIN_TITLE": "%1ಅನ್ನು ಕಡಿಮೆ %2 ಹೆಚ್ಚಿನ %3 ಮೌಲ್ಯಗಳ ನಡುವೆ ನಿರ್ಬಂಧಿಸಿ", "MATH_CONSTRAIN_TOOLTIP": "ನಿಗದಿತ ಮಿತಿಗಳ ನಡುವೆ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ಬಂಧಿಸಿ(ಒಳಗೊ೦ಡ).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "ಯಾದೃಚ್ಛಿತ ಪೂರ್ಣಾಂಕ %1 ರಿಂದ %2 ರವರೆಗೆ", "MATH_RANDOM_INT_TOOLTIP": "ಎರಡು ನಿರ್ದಿಷ್ಟ ಮಿತಿಗಳ ನಡುವೆ ಇರುವ ಯಾದೃಚ್ಛಿತ ಪೂರ್ಣಾಂಕವನ್ನು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "ಯಾದೃಚ್ಛಿತ ಭಿನ್ನರಾಶಿ", "MATH_RANDOM_FLOAT_TOOLTIP": "0.0 (ಒಳಗೊಂಡ) ಮತ್ತು 1.0 (ವಿಶೇಷ) ನಡುವೆ ಯಾದೃಚ್ಛಿತ ಭಿನ್ನರಾಶಿಯನ್ನು ಹಿಂತಿರುಗಿಸಿ.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "X:%1 Y:%2 ಬಿಂದುವಿನ ಆರ್ಕ್ ಟ್ಯಾನ್", "MATH_ATAN2_TOOLTIP": "ಬಿಂದು (X,Y) ನ ಆರ್ಕ್ ಟ್ಯಾಂಜೆಂಟ್ ನ್ನು -180 ರಿಂದ 180 ರವರೆಗಿನ ಡಿಗ್ರಿಗಳಲ್ಲಿ ಹಿಂತಿರುಗಿಸಿ.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "ಒಂದು ಅಕ್ಷರ, ಪದ ಅಥವಾ ಪಠ್ಯದ ಸಾಲು.", "TEXT_JOIN_TITLE_CREATEWITH": "ಇದರೊಂದಿಗೆ ಪಠ್ಯವನ್ನು ರಚಿಸಿ", "TEXT_JOIN_TOOLTIP": "ಹಲವಾರು ಅಂಶಗಳನ್ನು ಒಟ್ಟುಗೂಡಿಸುವ ಮೂಲಕ ಪಠ್ಯದ ತುಣುಕನ್ನು ರಚಿಸಿ.", @@ -292,7 +277,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ಕೊನೆಯಿಂದ # ವರೆಗೆ", "LISTS_GET_SUBLIST_END_LAST": "ಕೊನೆಯವರೆಗೂ", "LISTS_GET_SUBLIST_TOOLTIP": "ಪಟ್ಟಿಯ ನಿರ್ದಿಷ್ಟ ಭಾಗದ ಪ್ರತಿಯನ್ನು ರಚಿಸುತ್ತದೆ.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 ವಿಂಗಡಿಸಿ", "LISTS_SORT_TOOLTIP": "ಪಟ್ಟಿಯ ಪ್ರತಿಯನ್ನು ವಿಂಗಡಿಸಿ.", "LISTS_SORT_ORDER_ASCENDING": "ಆರೋಹಣ", @@ -322,9 +306,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "ಹೊರಾಂಶ ಇರುವ ಕಾರ್ಯ ಘಟಕವನ್ನು ರಚಿಸುತ್ತದೆ.", "PROCEDURES_ALLOW_STATEMENTS": "ಹೇಳಿಕೆಗಳನ್ನು ಅನುಮತಿಸಿ", "PROCEDURES_DEF_DUPLICATE_WARNING": "ಎಚ್ಚರಿಕೆ: ಈ ಕಾರ್ಯಘಟಕವು ನಕಲಿ ನಿಯತಾಂಕಗಳನ್ನು ಹೊಂದಿದೆ.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಕಾರ್ಯಘಟಕ '%1'ಅನ್ನು ಚಲಾಯಿಸಿ.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "ಬಳಕೆದಾರ-ವ್ಯಾಖ್ಯಾನಿತ ಕಾರ್ಯಘಟಕ '%1'ಅನ್ನು ಚಲಾಯಿಸಿ ಮತ್ತು ಅದರ ಹೊರಾಂಶವನ್ನು ಉಪಯೋಗಿಸಿ", "PROCEDURES_MUTATORCONTAINER_TITLE": "ಒಳಾoಶಗಳು", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "ಈ ಕಾರ್ಯಕ್ಕೆ ಒಳಾoಶಗಳನ್ನು ಸೇರಿಸಿ, ತೆಗೆದುಹಾಕಿ ಅಥವಾ ಮರುಕ್ರಮಗೊಳಿಸಿ.", diff --git a/msg/json/ko.json b/msg/json/ko.json index b59cbf03f..9f8415ca2 100644 --- a/msg/json/ko.json +++ b/msg/json/ko.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "Alex00728", + "Amire80", "Codenstory", "Gongsoonyee", "Hym411", @@ -60,13 +61,11 @@ "COLOUR_PICKER_TOOLTIP": "팔레트에서 색을 고릅니다", "COLOUR_RANDOM_TITLE": "무작위 색상", "COLOUR_RANDOM_TOOLTIP": "무작위로 색을 고릅니다.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "색", "COLOUR_RGB_RED": "빨강", "COLOUR_RGB_GREEN": "초록", "COLOUR_RGB_BLUE": "파랑", "COLOUR_RGB_TOOLTIP": "빨강,파랑,초록의 값을 이용하여 색을 만드십시오. 모든 값은 0과 100 사이에 있어야 합니다.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "혼합", "COLOUR_BLEND_COLOUR1": "색 1", "COLOUR_BLEND_COLOUR2": "색 2", @@ -123,7 +122,6 @@ "LOGIC_BOOLEAN_TRUE": "참", "LOGIC_BOOLEAN_FALSE": "거짓", "LOGIC_BOOLEAN_TOOLTIP": "참 혹은 거짓 모두 반환합니다.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "빈 값", "LOGIC_NULL_TOOLTIP": "빈 값을 반환합니다.", "LOGIC_TERNARY_HELPURL": "https://ko.wikipedia.org/wiki/물음표", @@ -133,11 +131,7 @@ "LOGIC_TERNARY_TOOLTIP": "'test'의 조건을 검사합니다. 조건이 참이면 'if true' 값을 반환합니다. 거짓이면 'if false' 값을 반환합니다.", "MATH_NUMBER_HELPURL": "https://ko.wikipedia.org/wiki/수_(수학)", "MATH_NUMBER_TOOLTIP": "수", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", "MATH_MULTIPLICATION_SYMBOL": "x", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -177,7 +171,6 @@ "MATH_IS_NEGATIVE": "가 음(-)수 이면", "MATH_IS_DIVISIBLE_BY": "가 다음 수로 나누어 떨어지면 :", "MATH_IS_TOOLTIP": "어떤 수가 짝 수, 홀 수, 소 수, 정 수, 양 수, 음 수, 나누어 떨어지는 수 인지 검사해 결과값을 돌려줍니다. 참(true) 또는 거짓(false) 값을 돌려줌.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "바꾸기 %1 만큼 %2", "MATH_CHANGE_TOOLTIP": "변수 '%1' 에 저장되어있는 값에, 어떤 수를 더해, 변수에 다시 저장합니다.", "MATH_ROUND_HELPURL": "https://ko.wikipedia.org/wiki/반올림", @@ -185,7 +178,6 @@ "MATH_ROUND_OPERATOR_ROUND": "반올림", "MATH_ROUND_OPERATOR_ROUNDUP": "올림", "MATH_ROUND_OPERATOR_ROUNDDOWN": "버림", - "MATH_ONLIST_HELPURL": "", "MATH_ONLIST_OPERATOR_SUM": "합", "MATH_ONLIST_TOOLTIP_SUM": "리스트에 들어있는 수(값)들을, 모두 합(sum) 한, 총합(sum)을 돌려줍니다.", "MATH_ONLIST_OPERATOR_MIN": "최소값", @@ -202,54 +194,42 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "이 리스트의 표준 편차를 반환합니다.", "MATH_ONLIST_OPERATOR_RANDOM": "목록의 임의 항목", "MATH_ONLIST_TOOLTIP_RANDOM": "목록에서 임의의 아이템을 돌려줍니다.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2의 나머지", "MATH_MODULO_TOOLTIP": "첫 번째 수를 두 번째 수로 나눈, 나머지 값을 돌려줍니다.", "MATH_CONSTRAIN_HELPURL": "https://ko.wikipedia.org/wiki/클램핑_(그래픽)", "MATH_CONSTRAIN_TITLE": "%1의 값을, 최소 %2 최대 %3으로 조정", "MATH_CONSTRAIN_TOOLTIP": "어떤 수를, 특정 범위의 값이 되도록 강제로 조정합니다.", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "랜덤정수(%1<= n <=%2)", "MATH_RANDOM_INT_TOOLTIP": "두 주어진 제한된 범위 사이의 임의 정수값을 돌려줍니다.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "임의 분수", "MATH_RANDOM_FLOAT_TOOLTIP": "0.0 (포함)과 1.0 (배타적) 사이의 임의 분수 값을 돌려줍니다.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "X:%1 Y:%2의 atan2", "MATH_ATAN2_TOOLTIP": "점 (X, Y)의 아크탄젠트를 -180에서 180까지 도 단위로 반환합니다.", "TEXT_TEXT_HELPURL": "https://ko.wikipedia.org/wiki/문자열", "TEXT_TEXT_TOOLTIP": "문자, 단어, 문장.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "텍스트 만들기", "TEXT_JOIN_TOOLTIP": "여러 개의 아이템들을 연결해(묶어), 새로운 문장을 만듭니다.", "TEXT_CREATE_JOIN_TITLE_JOIN": "가입", "TEXT_CREATE_JOIN_TOOLTIP": "섹션을 추가, 제거하거나 순서를 변경하여 이 텍스트 블럭을 재구성합니다.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "텍스트에 항목을 추가합니다.", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "다음 %1 내용 덧붙이기 %2", "TEXT_APPEND_TOOLTIP": "'%1' 변수의 끝에 일부 텍스트를 덧붙입니다.", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "다음 문장의 문자 개수 %1", "TEXT_LENGTH_TOOLTIP": "입력된 문장의, 문자 개수를 돌려줍니다.(공백문자 포함)", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "%1이 비어 있습니다", "TEXT_ISEMPTY_TOOLTIP": "입력된 문장이, 빈 문장(\"\")이면 참(true) 값을 돌려줍니다.", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "두 번째 텍스트에서 첫 번째 텍스트가 처음 또는 마지막으로 발생한 색인 위치를 반환합니다. 텍스트가 없으면 %1을 반환합니다.", "TEXT_INDEXOF_TITLE": "문장 %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "에서 다음 문장이 처음으로 나타난 위치 찾기 :", "TEXT_INDEXOF_OPERATOR_LAST": "에서 다음 문장이 마지막으로 나타난 위치 찾기 :", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "텍스트 %1 %2에서", "TEXT_CHARAT_FROM_START": "에서, 앞에서부터 # 번째 위치의 문자 얻기", "TEXT_CHARAT_FROM_END": "에서, 마지막부터 # 번째 위치의 문자 얻기", "TEXT_CHARAT_FIRST": "에서, 첫 번째 문자 얻기", "TEXT_CHARAT_LAST": "에서, 마지막 문자 얻기", "TEXT_CHARAT_RANDOM": "에서, 랜덤하게 한 문자 얻기", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "특정 번째 위치에서, 문자를 얻어내 돌려줍니다.", "TEXT_GET_SUBSTRING_TOOLTIP": "문장 중 일부를 얻어내 돌려줍니다.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "문장", "TEXT_GET_SUBSTRING_START_FROM_START": "에서, 처음부터 # 번째 문자부터 얻어냄", "TEXT_GET_SUBSTRING_START_FROM_END": "에서, 마지막에서 # 번째부터 얻어냄", @@ -257,54 +237,40 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "# 번째 문자까지", "TEXT_GET_SUBSTRING_END_FROM_END": "끝에서부터 # 번째 문자까지", "TEXT_GET_SUBSTRING_END_LAST": "마지막 문자까지", - "TEXT_GET_SUBSTRING_TAIL": "", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "영문 대소문자 형태를 변경해 돌려줍니다.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "대문자로", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "소문자로", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "첫 문자만 대문자로", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "문장의 왼쪽/오른쪽/양쪽에서 스페이스 문자를 제거해 돌려줍니다.", "TEXT_TRIM_OPERATOR_BOTH": "양쪽의 공백 문자 제거", "TEXT_TRIM_OPERATOR_LEFT": "왼쪽의 공백 문자 제거", "TEXT_TRIM_OPERATOR_RIGHT": "오른쪽의 공백 문자 제거", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "다음 내용 출력 %1", "TEXT_PRINT_TOOLTIP": "원하는 문장, 수, 값 등을 출력합니다.", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "메시지를 활용해 문장 입력", "TEXT_PROMPT_TYPE_NUMBER": "메시지를 활용해 수 입력", "TEXT_PROMPT_TOOLTIP_NUMBER": "수에 대해 사용자의 입력을 받습니다.", "TEXT_PROMPT_TOOLTIP_TEXT": "문장에 대해 사용자의 입력을 받습니다.", "TEXT_COUNT_MESSAGE0": "%2에서 %1 숫자 세기", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "다른 어떤 텍스트에서 어떤 텍스트가 나타난 횟수를 셉니다.", "TEXT_REPLACE_MESSAGE0": "%3에서 %2을(를) %1(으)로 바꾸기", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "다른 텍스트 내에서 일부 텍스트의 모든 발생을 치환합니다.", "TEXT_REVERSE_MESSAGE0": "%1 뒤집기", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "텍스트 안의 문자의 순서를 반전시킵니다.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "빈 리스트 생성", "LISTS_CREATE_EMPTY_TOOLTIP": "데이터 레코드가 없는, 길이가 0인 목록을 반환합니다.", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "원하는 수의 항목들로 목록을 생성합니다.", "LISTS_CREATE_WITH_INPUT_WITH": "리스트 만들기", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "리스트", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "섹션을 추가, 제거하거나 순서를 변경하여 이 리스트 블럭을 재구성합니다.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "아이템을 리스트에 추가합니다.", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "지정된 값을, 지정된 개수 만큼 넣어, 목록을 생성합니다.", "LISTS_REPEAT_TITLE": "%1을 %2번 넣어, 리스트 생성", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "%1의 길이", "LISTS_LENGTH_TOOLTIP": "목록의 길이를 반환합니다.", - "LISTS_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#is-empty", "LISTS_ISEMPTY_TITLE": "%1이 비어 있습니다", "LISTS_ISEMPTY_TOOLTIP": "목록이 비었을 때 참을 반환합니다.", "LISTS_INLIST": "리스트", - "LISTS_INDEX_OF_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", "LISTS_INDEX_OF_FIRST": "처음으로 나타난 위치", "LISTS_INDEX_OF_LAST": "마지막으로 나타난 위치", "LISTS_INDEX_OF_TOOLTIP": "목록에서 항목이 처음 또는 마지막으로 발생한 색인 위치를 반환합니다. 항목이 없으면 %1을 반환합니다.", @@ -316,7 +282,6 @@ "LISTS_GET_INDEX_FIRST": "첫 번째", "LISTS_GET_INDEX_LAST": "마지막", "LISTS_GET_INDEX_RANDOM": "임의로", - "LISTS_GET_INDEX_TAIL": "", "LISTS_INDEX_FROM_START_TOOLTIP": "%1은 첫 번째 항목입니다.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1은(는) 마지막 항목입니다.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "목록에서 특정 위치의 항목을 반환합니다.", @@ -331,7 +296,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "리스트에서 첫 번째 아이템을 삭제합니다.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "리스트에서 마지막 아이템을 찾아 삭제합니다.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "리스트에서 랜덤하게 아이템을 삭제합니다.", - "LISTS_SET_INDEX_HELPURL": "https://github.com/google/blockly/wiki/Lists#in-list--set", "LISTS_SET_INDEX_SET": "에서 설정", "LISTS_SET_INDEX_INSERT": "에서 원하는 위치에 삽입", "LISTS_SET_INDEX_INPUT_TO": "에", @@ -343,16 +307,13 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "항목을 목록의 처음 위치에 삽입합니다.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "리스트의 마지막에 아이템을 추가합니다.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "목록에서 임의 위치에 아이템을 삽입합니다.", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "처음 # 번째 위치부터, 서브 리스트 추출", "LISTS_GET_SUBLIST_START_FROM_END": "마지막부터 # 번째 위치부터, 서브 리스트 추출", "LISTS_GET_SUBLIST_START_FIRST": "첫 번째 위치부터, 서브 리스트 추출", "LISTS_GET_SUBLIST_END_FROM_START": "앞에서부터 # 번째로", "LISTS_GET_SUBLIST_END_FROM_END": "끝에서부터 # 번째로", "LISTS_GET_SUBLIST_END_LAST": "마지막으로", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "목록의 특정 부분에 대한 복사본을 만듭니다.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "정렬 %1 %2 %3", "LISTS_SORT_TOOLTIP": "목록의 사본을 정렬합니다.", "LISTS_SORT_ORDER_ASCENDING": "오름차순", @@ -360,16 +321,13 @@ "LISTS_SORT_TYPE_NUMERIC": "숫자순", "LISTS_SORT_TYPE_TEXT": "알파벳순", "LISTS_SORT_TYPE_IGNORECASE": "알파벳순 (대소문자 구분 안 함)", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "텍스트에서 목록 만들기", "LISTS_SPLIT_TEXT_FROM_LIST": "목록에서 텍스트 만들기", "LISTS_SPLIT_WITH_DELIMITER": "분리와", "LISTS_SPLIT_TOOLTIP_SPLIT": "각 속보, 텍스트의 목록들에서 텍스트를 분할합니다.", "LISTS_SPLIT_TOOLTIP_JOIN": "구분 기호로 구분하여 텍스트 목록을 하나의 텍스트에 병합합니다.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "%1 뒤집기", "LISTS_REVERSE_TOOLTIP": "리스트의 복사본을 뒤집습니다.", - "ORDINAL_NUMBER_SUFFIX": "", "VARIABLES_GET_HELPURL": "https://ko.wikipedia.org/wiki/%EB%B3%80%EC%88%98_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)", "VARIABLES_GET_TOOLTIP": "변수에 저장 되어있는 값을 돌려줍니다.", "VARIABLES_GET_CREATE_SET": "'집합 %1' 생성", @@ -377,15 +335,13 @@ "VARIABLES_SET": "%1를 %2로 설정", "VARIABLES_SET_TOOLTIP": "변수의 값을 입력한 값으로 변경해 줍니다.", "VARIABLES_SET_CREATE_GET": "'%1 값 읽기' 블럭 생성", - "PROCEDURES_DEFNORETURN_HELPURL": "https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98_%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29", "PROCEDURES_DEFNORETURN_TITLE": "함수", "PROCEDURES_DEFNORETURN_PROCEDURE": "함수 이름", "PROCEDURES_BEFORE_PARAMS": "사용:", "PROCEDURES_CALL_BEFORE_PARAMS": "사용:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "실행 후, 결과 값을 돌려주지 않는 함수를 만듭니다.", "PROCEDURES_DEFNORETURN_COMMENT": "이 함수를 설명하세요...", - "PROCEDURES_DEFRETURN_HELPURL": "https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98_%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29", + "PROCEDURES_DEFRETURN_HELPURL": "https://ko.wikipedia.org/wiki/함수_(컴퓨터_과학)", "PROCEDURES_DEFRETURN_RETURN": "다음을 돌려줌", "PROCEDURES_DEFRETURN_TOOLTIP": "실행 후, 결과 값을 돌려주는 함수를 만듭니다.", "PROCEDURES_ALLOW_STATEMENTS": "서술 허가", @@ -401,7 +357,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "함수 정의 찾기", "PROCEDURES_CREATE_DO": "'%1' 생성", "PROCEDURES_IFRETURN_TOOLTIP": "값이 참이라면, 두 번째 값을 반환합니다.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "경고: 이 블럭은, 함수 정의 블럭 안에서만 사용할 수 있습니다.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "말해 보세요...", "WORKSPACE_ARIA_LABEL": "Blockly 워크스페이스", diff --git a/msg/json/ksh.json b/msg/json/ksh.json index 078e004ed..42082671e 100644 --- a/msg/json/ksh.json +++ b/msg/json/ksh.json @@ -36,7 +36,6 @@ "LISTS_ISEMPTY_TOOLTIP": "Jitt „Wohr“ us, wann en dä Leß nix dren es.", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 es de Eezde en de Leß.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 es de Läzde en de Leß.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_ORDER_ASCENDING": "opwääts", "LISTS_SORT_ORDER_DESCENDING": "rökwääts zottehre", "VARIABLES_SET": "säz der Wäät en %1 op %2", diff --git a/msg/json/ky.json b/msg/json/ky.json index af1a8661a..cf2af9899 100644 --- a/msg/json/ky.json +++ b/msg/json/ky.json @@ -30,7 +30,6 @@ "RENAME_VARIABLE_TITLE": "Баардык '%1' өзгөрмөнүнүн атын алмаштыр", "NEW_VARIABLE": "жаңы өзгөрмө", "NEW_VARIABLE_TITLE": "Жаңы өзгөрмөнүн аты", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "палитрадан түс танда", "COLOUR_RANDOM_TITLE": "тушкелди түс", "COLOUR_RANDOM_TOOLTIP": "Түстү тушкелди тандоо.", @@ -44,7 +43,6 @@ "COLOUR_BLEND_COLOUR2": "2-түс", "COLOUR_BLEND_RATIO": "катышы", "COLOUR_BLEND_TOOLTIP": "Эки түстү берилген катыш (0.0 - 1.0) менен аралаштыр.", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 жолу кайтала", "CONTROLS_REPEAT_INPUT_DO": "жаса", "CONTROLS_REPEAT_TOOLTIP": "Билдирүүнү бир канча жолу кайтала", diff --git a/msg/json/lb.json b/msg/json/lb.json index 412dd51bc..5e7a386ff 100644 --- a/msg/json/lb.json +++ b/msg/json/lb.json @@ -58,7 +58,6 @@ "LOGIC_BOOLEAN_FALSE": "falsch", "LOGIC_BOOLEAN_TOOLTIP": "Schéckt entweder richteg oder falsch zréck.", "LOGIC_NULL": "null", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "Test", "LOGIC_TERNARY_IF_TRUE": "wa wouer", "LOGIC_TERNARY_IF_FALSE": "wa falsch", @@ -96,7 +95,6 @@ "TEXT_GET_SUBSTRING_END_LAST": "bis bei de leschte Buschtaf", "TEXT_PRINT_TITLE": "%1 drécken", "TEXT_PROMPT_TOOLTIP_TEXT": "Frot de Benotzer no engem Text.", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_REPLACE_MESSAGE0": "%1 duerch %2 a(n) %3 ersetzen", "TEXT_REPLACE_TOOLTIP": "All Kéiers wou e bestëmmten Text do ass duerch en aneren Text ersetzen.", "TEXT_REVERSE_TOOLTIP": "Dréint d'Reiefolleg vun den Zeechen am Text ëm.", @@ -124,7 +122,6 @@ "LISTS_SORT_TITLE": "%1 %2 %3 zortéieren", "LISTS_SORT_TYPE_NUMERIC": "numeresch", "LISTS_SORT_TYPE_TEXT": "alphabetesch", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "%1 ëmdréinen", "PROCEDURES_DEFNORETURN_PROCEDURE": "eppes maachen", "PROCEDURES_BEFORE_PARAMS": "mat:", diff --git a/msg/json/lki.json b/msg/json/lki.json index 023d034b6..38def6755 100644 --- a/msg/json/lki.json +++ b/msg/json/lki.json @@ -69,7 +69,6 @@ "CONTROLS_IF_IF_TOOLTIP": "افزودن، حذف یا بازمرتب‌سازی قسمت‌ها برای پیکربندی دوبارهٔ این بلوک اگر.", "CONTROLS_IF_ELSEIF_TOOLTIP": "افزودن یک شرط به بلوک اگر.", "CONTROLS_IF_ELSE_TOOLTIP": "اضافه‌کردن نهایی، گرفتن همهٔ شرایط به بلوک اگر.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "بازگشت صحیح اگر هر دو ورودی با یکدیگر برابر باشد.", "LOGIC_COMPARE_TOOLTIP_NEQ": "برگرداندن صحیح اگر هر دو ورودی با یکدیگر برابر نباشند.", "LOGIC_COMPARE_TOOLTIP_LT": "بازگرداندن صحیح اگر ورودی اول کوچکتر از ورودی دوم باشد.", @@ -91,15 +90,12 @@ "LOGIC_TERNARY_IF_TRUE": "اگر درست", "LOGIC_TERNARY_IF_FALSE": "اگر نادرست", "LOGIC_TERNARY_TOOLTIP": "بررسی وضعیت در «آزمایش». اگر وضعیت صحیح باشد، مقدار «اگر صحیح» را بر می‌گرداند در غیر اینصورت مقدار «اگر ناصحیح» را.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "شؤمارە یەک", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "بازگرداندن مقدار جمع دو عدد.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "بازگرداندن تفاوت دو عدد.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "بازگرداندن حاصلضرب دو عدد.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "بازگرداندن باقی‌ماندهٔ دو عدد.", "MATH_ARITHMETIC_TOOLTIP_POWER": "بازگرداندن اولین عددی که از توان عدد دوم حاصل شده باشد.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "ریشهٔ دوم", "MATH_SINGLE_TOOLTIP_ROOT": "ریشهٔ دوم یک عدد را باز می‌گرداند.", "MATH_SINGLE_OP_ABSOLUTE": "مطلق", @@ -109,14 +105,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "بازگرداندن لگاریتم بر پایهٔ ۱۰ یک عدد.", "MATH_SINGLE_TOOLTIP_EXP": "بازگرداندن توان e یک عدد.", "MATH_SINGLE_TOOLTIP_POW10": "بازگرداندن توان ۱۰ یک عدد.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "بازگرداندن سینوس درجه (نه رادیان).", "MATH_TRIG_TOOLTIP_COS": "بازگرداندن کسینوس درجه (نه رادیان).", "MATH_TRIG_TOOLTIP_TAN": "بازگرداندن تانژانت یک درجه (نه رادیان).", "MATH_TRIG_TOOLTIP_ASIN": ".(بازگرداندن آرک‌سینوس درجه (نه رادیان", "MATH_TRIG_TOOLTIP_ACOS": "بازگرداندن آرک‌کسینوس درجه (نه رادیان).", "MATH_TRIG_TOOLTIP_ATAN": "بازگرداندن آرک‌تانژانت درجه (نه رادیان).", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "یکی از مقادیر مشترک را برمی‌گرداند: π (۳٫۱۴۱…)، e (۲٫۷۱۸...)، φ (۱٫۶۱۸)، sqrt(۲) (۱٫۴۱۴)، sqrt(۱/۲) (۰٫۷۰۷...) و یا ∞ (بی‌نهایت).", "MATH_IS_EVEN": "زوج است", "MATH_IS_ODD": "فرد است", @@ -126,10 +120,8 @@ "MATH_IS_NEGATIVE": "منفی است", "MATH_IS_DIVISIBLE_BY": "تقسیم شده بر", "MATH_IS_TOOLTIP": "بررسی می‌کند که آیا یک عدد زوج، فرد، اول، کامل، مثبت، منفی یا بخش‌پذیر عدد خاصی باشد را بررسی می‌کند. درست یا نادرست باز می‌گرداند.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "تغییر %1 با %2", "MATH_CHANGE_TOOLTIP": "افزودن یک عدد به متغیر '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "گردکردن یک عدد به بالا یا پایین.", "MATH_ROUND_OPERATOR_ROUND": "گردکردن", "MATH_ROUND_OPERATOR_ROUNDUP": "گرد به بالا", @@ -150,18 +142,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "انحراف معیار فهرست را بر می‌گرداند.", "MATH_ONLIST_OPERATOR_RANDOM": "مورد تصادفی از فهرست", "MATH_ONLIST_TOOLTIP_RANDOM": "موردی تصادفی از فهرست را بر می‌گرداند.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "باقی‌ماندهٔ %1 + %2", "MATH_MODULO_TOOLTIP": "باقی‌ماندهٔ تقسیم دو عدد را بر می‌گرداند.", "MATH_CONSTRAIN_TITLE": "محدودکردن %1 پایین %2 بالا %3", "MATH_CONSTRAIN_TOOLTIP": "محدودکردن یک عدد بین محدودیت‌های مشخص‌شده (بسته).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "عدد صحیح تصادفی بین %1 تا %2", "MATH_RANDOM_INT_TOOLTIP": "یک عدد تصادفی بین دو مقدار مشخص‌شده به صورت بسته باز می‌گرداند.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "کسر تصادفی", "MATH_RANDOM_FLOAT_TOOLTIP": "بازگرداندن کسری تصادفی بین ۰٫۰ (بسته) تا ۱٫۰ (باز).", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "یک حرف، کلمه یا خطی از متن.", "TEXT_JOIN_TITLE_CREATEWITH": "ایجاد متن با", "TEXT_JOIN_TOOLTIP": "یک تکه‌ای از متن را با چسپاندن همهٔ تعداد از موارد ایجاد می‌کند.", @@ -279,9 +267,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "تابعی با یک خروجی می‌سازد.", "PROCEDURES_ALLOW_STATEMENTS": "اجازه اظهارات", "PROCEDURES_DEF_DUPLICATE_WARNING": "اخطار: این تابعی پارامتر تکراری دارد.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_CALLNORETURN_TOOLTIP": "اجرای تابع تعریف‌شده توسط کاربر «%1».", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_CALLRETURN_TOOLTIP": "اجرای تابع تعریف‌شده توسط کاربر «%1» و استفاده از خروجی آن.", "PROCEDURES_MUTATORCONTAINER_TITLE": "ورودی‌ها", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "افزودن، حذف یا دوباره مرتب‌کردن ورودی این تابع.", diff --git a/msg/json/lo.json b/msg/json/lo.json index ec7aabb9f..fde92a3bb 100644 --- a/msg/json/lo.json +++ b/msg/json/lo.json @@ -42,7 +42,6 @@ "COLOUR_BLEND_COLOUR2": "ສີ 2", "COLOUR_BLEND_RATIO": "ອັດຕາສ່ວນ", "COLOUR_BLEND_TOOLTIP": "ປະສົມສອງສີເຂົ້າກັນດ້ວຍອັດຕາສ່ວນ (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ເຮັດຄືນ %1 ຄັ້ງ", "CONTROLS_REPEAT_INPUT_DO": "ເຮັດ", "CONTROLS_REPEAT_TOOLTIP": "ເຮັດຄຳສັ່ງບາງຄຳສັ່ງຄືນຫຼາຍໆຄັ້ງ.", diff --git a/msg/json/lrc.json b/msg/json/lrc.json index a79386619..c92ee9724 100644 --- a/msg/json/lrc.json +++ b/msg/json/lrc.json @@ -30,7 +30,6 @@ "NEW_VARIABLE": "آلشتگر تازٱ...", "NEW_VARIABLE_TYPE_TITLE": "نوع آلشتگر تازٱ", "NEW_VARIABLE_TITLE": "نوم آلشتگر تازٱ:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "یاٛ رٱنڳ د رٱنڳدو اْنتخاو بٱکؽت", "COLOUR_RANDOM_TITLE": "رٱنڳ بٱختٱکی", "COLOUR_RANDOM_TOOLTIP": "یاٛ ٱنڳ بٱختٱکی اْنتخاو بٱکؽت", @@ -43,7 +42,6 @@ "COLOUR_BLEND_COLOUR2": "رٱنڳ 2", "COLOUR_BLEND_RATIO": "نسڤٱت", "COLOUR_BLEND_TOOLTIP": "هٱر کوم د رٱنڳؽا ناْ ڤا نسڤٱت داٛئٱ بٱ بٱشؽڤن(0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 تکرار کو چٱن بار", "CONTROLS_REPEAT_INPUT_DO": "ٱنجوم باٛ", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "تا تکرار کو", @@ -65,15 +63,10 @@ "LOGIC_TERNARY_CONDITION": "آزماشت کردن", "LOGIC_TERNARY_IF_TRUE": "ٱر دۏرس بی", "LOGIC_TERNARY_IF_FALSE": "ٱر غلٱت بی", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "یاٛ شمارٱ.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "ڤاْ ٱندازٱ دۏ شمارٱ ڤرگٱردن.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "چارسوک ریشٱ", "MATH_SINGLE_OP_ABSOLUTE": "تموم ۉ کمال", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_IS_EVEN": "همیشٱ هؽسش", "MATH_IS_ODD": "تٱنڳؽا ٱ", "MATH_IS_PRIME": "ڤٱ ٱڤلٱ", @@ -81,9 +74,7 @@ "MATH_IS_POSITIVE": "موسبٱتٱ", "MATH_IS_NEGATIVE": "مٱنفی ٱ", "MATH_IS_DIVISIBLE_BY": "یٱ ڤا بٱئر بیٱ", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "آلشت بٱکؽت %1 وا %2", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_OPERATOR_ROUND": "گرد کردن", "MATH_ROUND_OPERATOR_ROUNDUP": "ڤ رۉ گرد کردن", "MATH_ROUND_OPERATOR_ROUNDDOWN": "ڤ هار گرد کردن", @@ -93,10 +84,6 @@ "MATH_ONLIST_OPERATOR_AVERAGE": "مؽنجاگٱ نومگٱ", "MATH_ONLIST_OPERATOR_MEDIAN": "مؽنجا نومگٱ", "MATH_ONLIST_OPERATOR_MODE": "بؽشری د نومگٱ", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_JOIN_TITLE_CREATEWITH": "دۏرس کردن مٱتن ڤا", "TEXT_CREATE_JOIN_TITLE_JOIN": "پاٛڤٱسن", "TEXT_ISEMPTY_TITLE": "%1 هالٛیٱ", @@ -128,8 +115,6 @@ "PROCEDURES_BEFORE_PARAMS": "ڤا:", "PROCEDURES_CALL_BEFORE_PARAMS": "ڤا:", "PROCEDURES_DEFRETURN_RETURN": "ڤرگٱردنیئن", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_MUTATORCONTAINER_TITLE": "دادٱیا", "PROCEDURES_MUTATORARG_TITLE": "نوم دادٱ:", "PROCEDURES_CREATE_DO": "دۏرس کردن%1", diff --git a/msg/json/lt.json b/msg/json/lt.json index d320c4ec4..9818697c1 100644 --- a/msg/json/lt.json +++ b/msg/json/lt.json @@ -55,7 +55,6 @@ "COLOUR_BLEND_COLOUR2": "2 spalva", "COLOUR_BLEND_RATIO": "santykis", "COLOUR_BLEND_TOOLTIP": "Sumaišo dvi spalvas su pateiktu santykiu (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "pakartokite %1 kartus", "CONTROLS_REPEAT_INPUT_DO": "daryti", "CONTROLS_REPEAT_TOOLTIP": "Leidžia atlikti išvardintus veiksmus kelis kartus.", @@ -82,7 +81,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Galite pridėt/pašalinti/pertvarkyti sąlygų \"šakas\".", "CONTROLS_IF_ELSEIF_TOOLTIP": "Pridėti sąlygą „jei“ blokui.", "CONTROLS_IF_ELSE_TOOLTIP": "Pridėti veiksmų vykdymo variantą/\"šaką\", kai netenkinama nė viena sąlyga.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Tenkinama, jei abu reiškiniai lygūs.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Grįžti tiesa, jeigu abi įvestys ne lygios tarpusavyje.", "LOGIC_COMPARE_TOOLTIP_LT": "Grįžti tiesa, jei pirma įvestis mažesnė nei antra įvestis.", @@ -106,13 +104,11 @@ "LOGIC_TERNARY_TOOLTIP": "Jeigu sąlygą tenkinama, grąžina pirmą reikšmę, o jei ne - antrąją.", "MATH_NUMBER_HELPURL": "https://lt.wikipedia.org/wiki/Skaičius", "MATH_NUMBER_TOOLTIP": "Skaičius.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Grąžina dviejų skaičių sumą.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Grąžina dviejų skaičių skirtumą.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Grąžina dviejų skaičių sandaugą.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Grąžina dviejų skaičių dalmenį.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Grąžina pirmą skaičių pakeltą laipsniu pagal antrą skaičių.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "kvadratinė šaknis", "MATH_SINGLE_TOOLTIP_ROOT": "Grįžti kvadratinę šaknį iš skaičiaus.", "MATH_SINGLE_OP_ABSOLUTE": "modulis", @@ -129,7 +125,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Grąžinti skaičiaus arksinusą.", "MATH_TRIG_TOOLTIP_ACOS": "Grąžinti skaičiaus arkkosinusą.", "MATH_TRIG_TOOLTIP_ATAN": "Grąžinti skaičiaus arktangentą.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Grįžti viena iš pagrindinių konstantų: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (begalybė).", "MATH_IS_EVEN": "yra lyginis", "MATH_IS_ODD": "yra nelyginis", @@ -139,7 +134,6 @@ "MATH_IS_NEGATIVE": "yra neigiamas", "MATH_IS_DIVISIBLE_BY": "yra dalus iš", "MATH_IS_TOOLTIP": "Patikrina skaičiaus savybę: (ne)lyginis/pirminis/sveikasis/teigiamas/neigiamas/dalus iš x.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "padidink %1 (emptypage) %2", "MATH_CHANGE_TOOLTIP": "Prideda skaičių prie kintamojo '%1'. Kai skaičius neigiamas - gaunasi atimtis.", "MATH_ROUND_HELPURL": "https://lt.wikipedia.org/wiki/Apvalinimas", @@ -163,18 +157,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Grįžti standartine pakraipa iš sąrašo.", "MATH_ONLIST_OPERATOR_RANDOM": "atsitiktinis elementas iš sąrašo", "MATH_ONLIST_TOOLTIP_RANDOM": "Grąžinti atsitiktinį elementą iš sąrašo.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "dalybos liekana %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Grįžti likučiu nuo dviejų skaičių dalybos.", "MATH_CONSTRAIN_TITLE": "apribok %1 tarp %2 ir %3", "MATH_CONSTRAIN_TOOLTIP": "Apriboti skaičių, kad būtų tarp nustatytų ribų (imtinai).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "atsitiktinis sveikas sk. nuo %1 iki %2", "MATH_RANDOM_INT_TOOLTIP": "Grįžti atsitiktinį sveikąjį skaičių tarp dviejų nustatytų ribų, imtinai.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "atsitiktinė trupmena", "MATH_RANDOM_FLOAT_TOOLTIP": "Atsitiktinė trupmena nuo 0 (imtinai) iki 1 (neimtinai).", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Tekstas (arba žodis, ar raidė)", "TEXT_JOIN_TITLE_CREATEWITH": "sukurti tekstą su", "TEXT_JOIN_TOOLTIP": "Sukurti teksto fragmentą sujungiant bet kokį skaičių fragmentų.", @@ -220,13 +210,10 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Prašyti vartotoją įvesti skaičių.", "TEXT_PROMPT_TOOLTIP_TEXT": "Prašyti vartotoją įvesti tekstą.", "TEXT_COUNT_MESSAGE0": "skaičius %1 iš %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Suskaičiuoti, kiek kartų šis tekstas kartojasi kitame tekste.", "TEXT_REPLACE_MESSAGE0": "pakeisti %1 į %2 šiame %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Pašalinti visas teksto dalis kitame tekste.", "TEXT_REVERSE_MESSAGE0": "atbulai %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REVERSE_TOOLTIP": "Apversti teksto simbolių tvarką.", "LISTS_CREATE_EMPTY_TITLE": "tuščias sąrašas", "LISTS_CREATE_EMPTY_TOOLTIP": "Grąžina sąrašą, ilgio 0, neturintį duomenų", @@ -274,7 +261,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "iki # nuo galo", "LISTS_GET_SUBLIST_END_LAST": "iki galo", "LISTS_GET_SUBLIST_TOOLTIP": "Sukuria nurodytos sąrašo dalies kopiją.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "rūšiuoti %1 %2 %3", "LISTS_SORT_TOOLTIP": "Rūšiuoti sąrašo kopiją.", "LISTS_SORT_ORDER_ASCENDING": "didėjančia tvarka", @@ -296,9 +282,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Sukuria funkciją - komandą, kuri ne tik atlieka veiksmus bet ir pateikia (grąžina/duoda) rezultatą.", "PROCEDURES_ALLOW_STATEMENTS": "leisti vidinius veiksmus", "PROCEDURES_DEF_DUPLICATE_WARNING": "Ši komanda turi du vienodus gaunamų duomenų pavadinimus.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Vykdyti sukurtą komandą \"%1\".", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Įvykdyti komandą \"%1\" ir naudoti jos suskaičiuotą (atiduotą) reikšmę.", "PROCEDURES_MUTATORCONTAINER_TITLE": "gaunami duomenys (parametrai)", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Tvarkyti komandos gaunamus duomenis (parametrus).", diff --git a/msg/json/lv.json b/msg/json/lv.json index 04ae055e6..a0e90dc1d 100644 --- a/msg/json/lv.json +++ b/msg/json/lv.json @@ -86,7 +86,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Pievienot, noņemt vai mainīt sekciju secību šim \"ja\" blokam.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Pievienot nosacījumu \"ja\" blokam.", "CONTROLS_IF_ELSE_TOOLTIP": "Pievienot gala nosacījumu \"ja\" blokam.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Patiess, ja abas puses ir vienādas.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Patiess, ja abas puses nav vienādas.", "LOGIC_COMPARE_TOOLTIP_LT": "Patiess, ja kreisā puse ir mazāka par labo pusi.", @@ -110,13 +109,11 @@ "LOGIC_TERNARY_TOOLTIP": "Pārbaudīt nosacījumu. Ja 'nosacījums' ir patiess, atgriež vērtību 'ja patiess', pretējā gadījumā vērtību 'ja aplams'.", "MATH_NUMBER_HELPURL": "https://lv.wikipedia.org/wiki/Skaitlis", "MATH_NUMBER_TOOLTIP": "Skaitlis.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Atgriež divu skaitļu summu.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Atgriež divu skaitļu starpību.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Atgriež divu skaitļu reizinājumu.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Atgriež divu skaitļu dalījumu.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Atgriež pirmo skaitli kāpinātu pakāpē otrais skaitlis.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "kvadrātsakne", "MATH_SINGLE_TOOLTIP_ROOT": "Atgriež skaitļa kvadrātsakni.", "MATH_SINGLE_OP_ABSOLUTE": "absolūtā vērtība", @@ -126,14 +123,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Atgriež skaitļa logaritmu pie bāzes 10.", "MATH_SINGLE_TOOLTIP_EXP": "Atgriež e pakāpē dotais skaitlis.", "MATH_SINGLE_TOOLTIP_POW10": "Atgriež 10 pakāpē dotais skaitlis.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Sinuss no grādiem (nevis radiāniem).", "MATH_TRIG_TOOLTIP_COS": "Kosinuss no grādiem (nevis radiāniem).", "MATH_TRIG_TOOLTIP_TAN": "Tangenss no grādiem (nevis radiāniem).", "MATH_TRIG_TOOLTIP_ASIN": "Arksinuss (grādos).", "MATH_TRIG_TOOLTIP_ACOS": "Arkkosinuss (grādos).", "MATH_TRIG_TOOLTIP_ATAN": "Arktangenss (grādos).", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Atgriež kādu no matemātikas konstantēm: π (3.141…), e (2.718…), φ (1.618…), √(2) (1.414…), √(½) (0.707…), ∞ (bezgalība).", "MATH_IS_EVEN": "ir pāra", "MATH_IS_ODD": "ir nepāra", @@ -143,10 +138,8 @@ "MATH_IS_NEGATIVE": "ir negatīvs", "MATH_IS_DIVISIBLE_BY": "dalās bez atlikuma ar", "MATH_IS_TOOLTIP": "Pārbauda, vai skaitlis ir pāra, nepāra, vesels, pozitīvs, negatīvs vai dalās ar noteiktu skaitli. Atgriež \"patiess\" vai \"aplams\".", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "izmainīt %1 par %2", "MATH_CHANGE_TOOLTIP": "Pieskaitīt doto skaitli mainīgajam '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Noapaļot skaitli uz augšu vai uz leju.", "MATH_ROUND_OPERATOR_ROUND": "noapaļot", "MATH_ROUND_OPERATOR_ROUNDUP": "apaļot uz augšu", @@ -167,21 +160,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Atgriež dotā saraksta standartnovirzi.", "MATH_ONLIST_OPERATOR_RANDOM": "nejaušs", "MATH_ONLIST_TOOLTIP_RANDOM": "Atgriež nejauši izvēlētu vērtību no dotā saraksta.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "atlikums no %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Atlikums no divu skaitļu dalījuma.", "MATH_CONSTRAIN_TITLE": "ierobežot %1 no %2 līdz %3", "MATH_CONSTRAIN_TOOLTIP": "Ierobežo skaitli no noteiktajās robežās (ieskaitot galapunktus).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "nejaušs vesels skaitlis no %1 līdz %2", "MATH_RANDOM_INT_TOOLTIP": "Atgriež nejaušu veselu skaitli dotajās robežās (iekļaujot galapunktus)", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "nejaušs skaitlis [0..1)", "MATH_RANDOM_FLOAT_TOOLTIP": "Atgriež nejaušu reālo skaitli robežās no 0 (iekļaujot) līdz 1 (neiekļaujot).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "ATAN2 no X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Atgriezt arktangensu punktam (X, Y) grādos no -180 līdz 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Burts, vārds vai jebkāda teksta rinda.", "TEXT_JOIN_TITLE_CREATEWITH": "veidot tekstu no", "TEXT_JOIN_TOOLTIP": "Izveidot tekstu savienojot dotos argumentus.", @@ -289,7 +277,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "līdz pozīcijai no beigām", "LISTS_GET_SUBLIST_END_LAST": "līdz beigām", "LISTS_GET_SUBLIST_TOOLTIP": "Nokopēt daļu no dotā saraksta.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "Sakārtot sarakstu no %3 elementiem %2 secībā %1", "LISTS_SORT_TOOLTIP": "Saraksta sakārtota kopija.", "LISTS_SORT_ORDER_ASCENDING": "augošā", @@ -319,9 +306,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Izveido funkciju, kas atgriež rezultātu.", "PROCEDURES_ALLOW_STATEMENTS": "atļaut apakškomandas", "PROCEDURES_DEF_DUPLICATE_WARNING": "Brīdinājums: funkcijai ir vienādi argumenti.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Izpildīt iepriekš definētu funkcju '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Izpildīt iepriekš definētu funkcju '%1' un izmantot tās rezultātu.", "PROCEDURES_MUTATORCONTAINER_TITLE": "argumenti", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Pievienot, pārkārtot vai dzēst funkcijas argumentus.", diff --git a/msg/json/mk.json b/msg/json/mk.json index aa367f52b..b79d45c50 100644 --- a/msg/json/mk.json +++ b/msg/json/mk.json @@ -170,7 +170,6 @@ "PROCEDURES_DEFNORETURN_COMMENT": "Опишете ја оваа функција...", "PROCEDURES_DEFRETURN_RETURN": "назад", "PROCEDURES_ALLOW_STATEMENTS": "дозволи тврдења", - "PROCEDURES_CALLNORETURN_HELPURL": "https://mk.wikipedia.org/wiki/Потпрограма", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Додај, отстрани или пренареди ги влезните параметри за оваа функција.", "PROCEDURES_CREATE_DO": "Создај го '%1'", "WORKSPACE_ARIA_LABEL": "Работен простор на Blockly", diff --git a/msg/json/mnw.json b/msg/json/mnw.json index cbb4db5f7..62f8c4271 100644 --- a/msg/json/mnw.json +++ b/msg/json/mnw.json @@ -40,7 +40,6 @@ "DELETE_VARIABLE_CONFIRMATION": "ဇိုတ်ပလီု %1 တုဲ ရပ်စပ် '%2' နဒဒှ်မပြံင်လှာဲဟာ?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "မပြံင်လှာဲ '%1' ဂှ် ဇိုတ်ပလီု ဟွံဂွံ၊ ဟိုတ်နူ ဍေဟ်ဂှ် ဆက်စပ်ဒၟံင် ကုဝှင်ရှေန် '%2'", "DELETE_VARIABLE": "ဇိုတ်ပလီု အပြံင်အလှာဲ '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "ရုဲကေတ် အသာ် မွဲ နူကဵု ဖလာတ်", "COLOUR_RANDOM_TITLE": "ဇျောမ်ကေတ် အသာ်", "COLOUR_RANDOM_TOOLTIP": "ရုဲစှ်ကေတ် အသာ် မွဲ ပ္ဍဲ ဇဟောမ်", @@ -54,7 +53,6 @@ "COLOUR_BLEND_COLOUR2": "အသာ် ၂", "COLOUR_BLEND_RATIO": "ဗၞတ်ဗ္ၜတ်", "COLOUR_BLEND_TOOLTIP": "ပနှဴ အသာ် ၜါ နကဵု ဗၞတ်ဗ္ၜတ် (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ထပ်ဂလိုင်ပတိုန် %1 နာဍဳ", "CONTROLS_REPEAT_INPUT_DO": "ပ", "CONTROLS_REPEAT_TOOLTIP": "ကၠောန်ပတိတ် လလောင်တြး မဂၠိုင် ကုအလန်၊၊", @@ -85,10 +83,7 @@ "LOGIC_TERNARY_CONDITION": "စမ်ၜတ်", "LOGIC_TERNARY_IF_TRUE": "ယဝ်ဍာံ", "LOGIC_TERNARY_IF_FALSE": "ယဝ်ဗၠေတ်", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "မဂၞန်မွဲ", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ABSOLUTE": "ဍာံဍာံ", "DIALOG_CANCEL": "တးပဲါ" } diff --git a/msg/json/ms.json b/msg/json/ms.json index 854cbfdf3..539eb129b 100644 --- a/msg/json/ms.json +++ b/msg/json/ms.json @@ -42,7 +42,6 @@ "COLOUR_BLEND_COLOUR2": "warna 2", "COLOUR_BLEND_RATIO": "nisbah", "COLOUR_BLEND_TOOLTIP": "Campurkan dua warna sekali pada nisbah yang ditentukan (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ulang %1 kali", "CONTROLS_REPEAT_INPUT_DO": "lakukan", "CONTROLS_REPEAT_TOOLTIP": "Lakukan perintah berulang kali.", @@ -93,11 +92,6 @@ "LOGIC_TERNARY_TOOLTIP": "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.", "MATH_NUMBER_HELPURL": "https://ms.wikipedia.org/wiki/Nombor", "MATH_NUMBER_TOOLTIP": "Suatu nombor.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -140,7 +134,6 @@ "MATH_CHANGE_HELPURL": "https://id.wikipedia.org/wiki/Perjumlahan", "MATH_CHANGE_TITLE": "perubahan %1 oleh %2", "MATH_CHANGE_TOOLTIP": "Tambah nombor kepada pembolehubah '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Bulat nombor yang naik atau turun.", "MATH_ROUND_OPERATOR_ROUND": "pusingan", "MATH_ROUND_OPERATOR_ROUNDUP": "pusingan ke atas", @@ -166,10 +159,8 @@ "MATH_MODULO_TOOLTIP": "Taip balik baki yang didapat daripada pembahagian dua nombor tersebut.", "MATH_CONSTRAIN_TITLE": "constrain %1 low %2 high %3", "MATH_CONSTRAIN_TOOLTIP": "Constrain a number to be between the specified limits (inclusive).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "integer rawak dari %1ke %2", "MATH_RANDOM_INT_TOOLTIP": "Kembalikan integer rawak diantara dua had yang ditentukan, inklusif.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "pecahan rawak", "MATH_RANDOM_FLOAT_TOOLTIP": "Kembali sebahagian kecil rawak antara 0.0 (inklusif) dan 1.0 (eksklusif).", "TEXT_TEXT_HELPURL": "https://ms.wikipedia.org/wiki/Rentetan", @@ -218,7 +209,6 @@ "TEXT_PROMPT_TOOLTIP_TEXT": "Peringatkan pengguna untuk sebahagian teks.", "LISTS_CREATE_EMPTY_TITLE": "Wujudkan senarai kosong", "LISTS_CREATE_EMPTY_TOOLTIP": "Kembalikan senarai panjang 0, yang tidak mengandungi rekod data", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Wujudkan senarai dengan apa jua nombor item.", "LISTS_CREATE_WITH_INPUT_WITH": "wujudkan senarai dengan", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "senarai", @@ -274,7 +264,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ke # dari akhir", "LISTS_GET_SUBLIST_END_LAST": "ke akhir", "LISTS_GET_SUBLIST_TOOLTIP": "Wujudkan salinan bahagian yang ditentukan dari senarai.", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "buat senarai dgn teks", "LISTS_SPLIT_TEXT_FROM_LIST": "buat teks drpd senarai", "LISTS_SPLIT_WITH_DELIMITER": "dengan delimiter", @@ -295,9 +284,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Mencipta satu fungsi dengan pengeluaran.", "PROCEDURES_ALLOW_STATEMENTS": "bolehkan kenyataan", "PROCEDURES_DEF_DUPLICATE_WARNING": "Amaran: Fungsi ini mempunyai parameter yang berganda.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://ms.wikipedia.org/wiki/Fungsi", "PROCEDURES_CALLNORETURN_TOOLTIP": "Run the user-defined function '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://ms.wikipedia.org/wiki/Fungsi", "PROCEDURES_CALLRETURN_TOOLTIP": "Run the user-defined function '%1' and use its output.", "PROCEDURES_MUTATORCONTAINER_TITLE": "Input-input", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Tambah, alih keluar atau susun semula input pada fungsi ini.", @@ -306,7 +293,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Serlahkan definisi fungsi", "PROCEDURES_CREATE_DO": "Hasilkan '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "If a value is true, then return a second value.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Amaran: Blok ini hanya boleh digunakan dalam fungsi definisi.", "DIALOG_OK": "OK", "DIALOG_CANCEL": "Batalkan" diff --git a/msg/json/nb.json b/msg/json/nb.json index 394e29701..354b0a07e 100644 --- a/msg/json/nb.json +++ b/msg/json/nb.json @@ -43,23 +43,19 @@ "DELETE_VARIABLE_CONFIRMATION": "Slett %1 bruk av variabelen «%2»?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Kan ikke slette variabelen «%1» fordi den er del av definisjonen for funksjonen «%2»", "DELETE_VARIABLE": "Slett variabelen «%1»", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Velg en farge fra paletten.", "COLOUR_RANDOM_TITLE": "tilfeldig farge", "COLOUR_RANDOM_TOOLTIP": "Velg en tilfeldig farge.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "farge med", "COLOUR_RGB_RED": "rød", "COLOUR_RGB_GREEN": "grønn", "COLOUR_RGB_BLUE": "blå", "COLOUR_RGB_TOOLTIP": "Lag en farge med angitt verdi av rød, grønn og blå. Alle verdier må være mellom 0 og 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "blande", "COLOUR_BLEND_COLOUR1": "farge 1", "COLOUR_BLEND_COLOUR2": "farge 2", "COLOUR_BLEND_RATIO": "forhold", "COLOUR_BLEND_TOOLTIP": "Blander to farger sammen med et gitt forhold (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "gjenta %1 ganger", "CONTROLS_REPEAT_INPUT_DO": "gjør", "CONTROLS_REPEAT_TOOLTIP": "Gjenta noen instruksjoner flere ganger.", @@ -86,7 +82,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Legg til, fjern eller flytt seksjoner i denne hvis-blokken.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Legg til en betingelse til hvis blokken.", "CONTROLS_IF_ELSE_TOOLTIP": "Legg til hva som skal skje hvis de andre ikke slår til.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Returnerer sann hvis begge inputene er like hverandre.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Returnerer sant hvis begge argumentene er ulike hverandre.", "LOGIC_COMPARE_TOOLTIP_LT": "Returnerer sant hvis det første argumentet er mindre enn det andre argumentet.", @@ -102,21 +97,14 @@ "LOGIC_BOOLEAN_TRUE": "sann", "LOGIC_BOOLEAN_FALSE": "usann", "LOGIC_BOOLEAN_TOOLTIP": "Returnerer enten sann eller usann.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "null", "LOGIC_NULL_TOOLTIP": "Returnerer null.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "hvis sant", "LOGIC_TERNARY_IF_FALSE": "hvis usant", "LOGIC_TERNARY_TOOLTIP": "Sjekk betingelsen i 'test'. Hvis betingelsen er sann, da returneres 'hvis sant' verdien. Hvis ikke returneres 'hvis usant' verdien.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Et tall.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", "MATH_MULTIPLICATION_SYMBOL": "x", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -129,7 +117,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Returner produktet av to tall.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Returner kvotienten av to tall.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Returner det første tallet opphøyd i den andre tallet.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "kvadratrot", "MATH_SINGLE_TOOLTIP_ROOT": "Returner kvadratroten av et tall.", "MATH_SINGLE_OP_ABSOLUTE": "absoluttverdi", @@ -139,14 +126,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Returner base-10 logaritmen til et tall.", "MATH_SINGLE_TOOLTIP_EXP": "Returner e opphøyd i et tall.", "MATH_SINGLE_TOOLTIP_POW10": "Returner 10 opphøyd i et tall.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Returner sinus av en vinkel (ikke radian).", "MATH_TRIG_TOOLTIP_COS": "Returner cosinus av en vinkel (ikke radian).", "MATH_TRIG_TOOLTIP_TAN": "Returner tangenten av en vinkel (ikke radian).", "MATH_TRIG_TOOLTIP_ASIN": "Returner arcsinus til et tall.", "MATH_TRIG_TOOLTIP_ACOS": "Returner arccosinus til et tall.", "MATH_TRIG_TOOLTIP_ATAN": "Returner arctangens til et tall.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Returner en av felleskonstantene π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), eller ∞ (uendelig).", "MATH_IS_EVEN": "er et partall", "MATH_IS_ODD": "er et oddetall", @@ -156,10 +141,8 @@ "MATH_IS_NEGATIVE": "er negativer negativt", "MATH_IS_DIVISIBLE_BY": "er delelig med", "MATH_IS_TOOLTIP": "Sjekk om et tall er et partall, oddetall, primtall, heltall, positivt, negativt, eller om det er delelig med et annet tall. Returnerer sant eller usant.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "endre %1 ved %2", "MATH_CHANGE_TOOLTIP": "Addere et tall til variabelen '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Avrund et tall ned eller opp.", "MATH_ROUND_OPERATOR_ROUND": "avrunding", "MATH_ROUND_OPERATOR_ROUNDUP": "rund opp", @@ -180,20 +163,15 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Returner listens standardavvik.", "MATH_ONLIST_OPERATOR_RANDOM": "tilfeldig element i listen", "MATH_ONLIST_TOOLTIP_RANDOM": "Returner et tilfeldig element fra listen.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "resten av %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Returner resten fra delingen av to tall.", "MATH_CONSTRAIN_TITLE": "begrense %1 lav %2 høy %3", "MATH_CONSTRAIN_TOOLTIP": "Begrens et tall til å være mellom de angitte grenseverdiene (inklusiv).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "Et tilfeldig heltall mellom %1 og %2", "MATH_RANDOM_INT_TOOLTIP": "Returner et tilfeldig tall mellom de to spesifiserte grensene, inkludert de to.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "tilfeldig flyttall", "MATH_RANDOM_FLOAT_TOOLTIP": "Returner et tilfeldig flyttall mellom 0.0 (inkludert) og 1.0 (ikke inkludert).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 av X:%1 Y:%2", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "En bokstav, ett ord eller en linje med tekst.", "TEXT_JOIN_TITLE_CREATEWITH": "lag tekst med", "TEXT_JOIN_TOOLTIP": "Opprett en tekst ved å sette sammen et antall elementer.", @@ -216,7 +194,6 @@ "TEXT_CHARAT_FIRST": "hent første bokstav", "TEXT_CHARAT_LAST": "hent den siste bokstaven", "TEXT_CHARAT_RANDOM": "hent en tilfeldig bokstav", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "Returnerer bokstaven på angitt plassering.", "TEXT_GET_SUBSTRING_TOOLTIP": "Returnerer den angitte delen av teksten.", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "i tekst", @@ -226,7 +203,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "til bokstav #", "TEXT_GET_SUBSTRING_END_FROM_END": "til bokstav # fra slutten", "TEXT_GET_SUBSTRING_END_LAST": "til siste bokstav", - "TEXT_GET_SUBSTRING_TAIL": "", "TEXT_CHANGECASE_TOOLTIP": "Returnerer en kopi av teksten der store og små bokstaver er byttet om.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "til STORE BOKSTAVER", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "til små bokstaver", @@ -242,15 +218,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Be brukeren om et tall.", "TEXT_PROMPT_TOOLTIP_TEXT": "Spør brukeren om tekst.", "TEXT_COUNT_MESSAGE0": "tell %1 i %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Tell hvor mange ganger noe tekst dukker opp i annen tekst.", "TEXT_REPLACE_MESSAGE0": "erstatt %1 med %2 i %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Erstatter alle forekomster av noe tekst i en annen tekst.", "TEXT_REVERSE_MESSAGE0": "reverser %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Reverserer rekkefølgen på tegnene i teksten.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "opprett en tom liste", "LISTS_CREATE_EMPTY_TOOLTIP": "Returnerer en tom liste, altså med lengde 0", "LISTS_CREATE_WITH_TOOLTIP": "Lag en liste med et vilkårlig antall elementer.", @@ -276,7 +248,6 @@ "LISTS_GET_INDEX_FIRST": "først", "LISTS_GET_INDEX_LAST": "siste", "LISTS_GET_INDEX_RANDOM": "tilfeldig", - "LISTS_GET_INDEX_TAIL": "", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 er det første elementet.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 er det siste elementet.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "Returner elementet på den angitte posisjonen i en liste.", @@ -308,9 +279,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "til #", "LISTS_GET_SUBLIST_END_FROM_END": "til # fra slutten", "LISTS_GET_SUBLIST_END_LAST": "til siste", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "Kopiérer en ønsket del av en liste.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sorter %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sorter en kopi av en liste.", "LISTS_SORT_ORDER_ASCENDING": "stigende", @@ -323,7 +292,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "med avgrenser", "LISTS_SPLIT_TOOLTIP_SPLIT": "Splitt teksten til en liste med tekster, brutt ved hver avgrenser.", "LISTS_SPLIT_TOOLTIP_JOIN": "Føy sammen en liste tekster til én tekst, avskilt av en avgrenser.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "reverser %1", "LISTS_REVERSE_TOOLTIP": "Reverser en kopi av ei liste.", "VARIABLES_GET_TOOLTIP": "Returnerer verdien av denne variabelen.", @@ -331,22 +299,17 @@ "VARIABLES_SET": "sett %1 til %2", "VARIABLES_SET_TOOLTIP": "Setter verdien av denne variablen lik parameteren.", "VARIABLES_SET_CREATE_GET": "Opprett 'hent %1'", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "til", "PROCEDURES_DEFNORETURN_PROCEDURE": "gjør noe", "PROCEDURES_BEFORE_PARAMS": "med:", "PROCEDURES_CALL_BEFORE_PARAMS": "med:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Opprett en funksjon som ikke har noe resultat.", "PROCEDURES_DEFNORETURN_COMMENT": "Beskriv denne funksjonen…", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "returner", "PROCEDURES_DEFRETURN_TOOLTIP": "Oppretter en funksjon som har et resultat.", "PROCEDURES_ALLOW_STATEMENTS": "tillat uttalelser", "PROCEDURES_DEF_DUPLICATE_WARNING": "Advarsel: Denne funksjonen har duplikate parametere.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Kjør den brukerdefinerte funksjonen '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Kjør den brukerdefinerte funksjonen'%1' og bruk resultatet av den.", "PROCEDURES_MUTATORCONTAINER_TITLE": "parametere", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Legg til, fjern eller endre rekkefølgen på input til denne funksjonen.", diff --git a/msg/json/ne.json b/msg/json/ne.json index edfab8ce4..1d502b05d 100644 --- a/msg/json/ne.json +++ b/msg/json/ne.json @@ -1,6 +1,8 @@ { "@metadata": { "authors": [ + "Bada Kaji", + "बडा काजी", "सरोज कुमार ढकाल" ] }, @@ -42,5 +44,5 @@ "MATH_IS_NEGATIVE": "ऋणात्मक संख्या हो", "PROCEDURES_MUTATORCONTAINER_TITLE": "इन्पुटहरू", "DIALOG_OK": "हुन्छ", - "DIALOG_CANCEL": "रद्द गर्ने" + "DIALOG_CANCEL": "रद्द गर्नुहोस्" } diff --git a/msg/json/nl.json b/msg/json/nl.json index c59ed69d8..00c2fd96a 100644 --- a/msg/json/nl.json +++ b/msg/json/nl.json @@ -59,13 +59,11 @@ "COLOUR_PICKER_TOOLTIP": "Kies een kleur in het palet.", "COLOUR_RANDOM_TITLE": "willekeurige kleur", "COLOUR_RANDOM_TOOLTIP": "Kies een willekeurige kleur.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "kleuren met", "COLOUR_RGB_RED": "rood", "COLOUR_RGB_GREEN": "groen", "COLOUR_RGB_BLUE": "blauw", "COLOUR_RGB_TOOLTIP": "Maak een kleur met de opgegeven hoeveelheid rood, groen en blauw. Alle waarden moeten tussen 0 en 100 liggen.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "mengen", "COLOUR_BLEND_COLOUR1": "kleur 1", "COLOUR_BLEND_COLOUR2": "kleur 2", @@ -75,23 +73,19 @@ "CONTROLS_REPEAT_TITLE": "%1 keer herhalen", "CONTROLS_REPEAT_INPUT_DO": "voer uit", "CONTROLS_REPEAT_TOOLTIP": "Voer een aantal opdrachten meerdere keren uit.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "herhalen zolang", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "herhalen totdat", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Terwijl een waarde waar is de volgende opdrachten uitvoeren.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Terwijl een waarde onwaar is de volgende opdrachten uitvoeren.", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "Laat de variabele \"%1\" de waarden aannemen van het beginnummer tot het laatste nummer, tellende met het opgegeven interval, en met uitvoering van de opgegeven blokken.", "CONTROLS_FOR_TITLE": "rekenen met %1 van %2 tot %3 in stappen van %4", "CONTROLS_FOREACH_TITLE": "voor ieder item %1 in lijst %2", "CONTROLS_FOREACH_TOOLTIP": "Voor ieder item in een lijst, stel de variabele \"%1\" in op het item en voer daarna opdrachten uit.", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "uit lus breken", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "doorgaan met de volgende iteratie van de lus", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Uit de bovenliggende lus breken.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "De rest van deze lus overslaan en doorgaan met de volgende herhaling.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Waarschuwing: dit blok mag alleen gebruikt worden in een lus.", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "Als een waarde waar is, voer dan opdrachten uit.", "CONTROLS_IF_TOOLTIP_2": "Als een waarde waar is, voert dan het eerste blok met opdrachten uit. Voer andere het tweede blok met opdrachten uit.", "CONTROLS_IF_TOOLTIP_3": "Als de eerste waarde waar is, voer dan het eerste blok met opdrachten uit. Voer anders, als de tweede waarde waar is, het tweede blok met opdrachten uit.", @@ -109,33 +103,23 @@ "LOGIC_COMPARE_TOOLTIP_LTE": "Geeft \"waar\" terug als de eerste invoer kleiner of gelijk is aan de tweede invoer.", "LOGIC_COMPARE_TOOLTIP_GT": "Geeft \"waar\" terug als de eerste invoer meer is dan de tweede invoer.", "LOGIC_COMPARE_TOOLTIP_GTE": "Geeft \"waar\" terug als de eerste invoer groter is of gelijk aan de tweede invoer.", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "Geeft waar als beide waarden waar zijn.", "LOGIC_OPERATION_AND": "en", "LOGIC_OPERATION_TOOLTIP_OR": "Geeft \"waar\" terug als in ieder geval één van de waarden waar is.", "LOGIC_OPERATION_OR": "of", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "niet %1", "LOGIC_NEGATE_TOOLTIP": "Geeft \"waar\" terug als de invoer \"onwaar\" is. Geeft \"onwaar\" als de invoer \"waar\" is.", - "LOGIC_BOOLEAN_HELPURL": "https://github.com/google/blockly/wiki/Logic#values", "LOGIC_BOOLEAN_TRUE": "waar", "LOGIC_BOOLEAN_FALSE": "onwaar", "LOGIC_BOOLEAN_TOOLTIP": "Geeft \"waar\" of \"onwaar\" terug.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "niets", "LOGIC_NULL_TOOLTIP": "Geeft niets terug.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "als waar", "LOGIC_TERNARY_IF_FALSE": "als onwaar", "LOGIC_TERNARY_TOOLTIP": "Test de voorwaarde in \"test\". Als de voorwaarde \"waar\" is, geef de waarde van \"als waar\" terug; geef anders de waarde van \"als onwaar\" terug.", "MATH_NUMBER_HELPURL": "https://nl.wikipedia.org/wiki/Getal_%28wiskunde%29", "MATH_NUMBER_TOOLTIP": "Een getal.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -175,7 +159,6 @@ "MATH_IS_NEGATIVE": "is negatief", "MATH_IS_DIVISIBLE_BY": "is deelbaar door", "MATH_IS_TOOLTIP": "Test of een getal even, oneven, een priemgetal, geheel, positief of negatief is, of deelbaar is door een bepaald getal. Geeft \"waar\" of \"onwaar\".", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "%1 wijzigen met %2", "MATH_CHANGE_TOOLTIP": "Voegt een getal toe aan variabele \"%1\".", "MATH_ROUND_HELPURL": "https://nl.wikipedia.org/wiki/Afronden", @@ -210,32 +193,25 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://nl.wikipedia.org/wiki/Toevalsgenerator", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "willekeurige fractie", "MATH_RANDOM_FLOAT_TOOLTIP": "Geeft een willekeurige fractie tussen 0.0 (inclusief) en 1.0 (exclusief).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 van X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Geef de boogtangens van punt (X, Y) terug in graden tussen -180 naar 180.", "TEXT_TEXT_HELPURL": "https://nl.wikipedia.org/wiki/String_%28informatica%29", "TEXT_TEXT_TOOLTIP": "Een letter, woord of een regel tekst.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "maak tekst met", "TEXT_JOIN_TOOLTIP": "Maakt een stuk tekst door één of meer items samen te voegen.", "TEXT_CREATE_JOIN_TITLE_JOIN": "samenvoegen", "TEXT_CREATE_JOIN_TOOLTIP": "Toevoegen, verwijderen of volgorde wijzigen van secties om dit tekstblok opnieuw in te stellen.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "Voegt een item aan de tekst toe.", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "voor%1 voeg tekst toe van %2", "TEXT_APPEND_TOOLTIP": "Voeg tekst toe aan de variabele \"%1\".", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "lengte van %1", "TEXT_LENGTH_TOOLTIP": "Geeft het aantal tekens terug (inclusief spaties) in de opgegeven tekst.", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "%1 is leeg", "TEXT_ISEMPTY_TOOLTIP": "Geeft \"waar\" terug, als de opgegeven tekst leeg is.", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "Geeft de index terug van het eerste of laatste voorkomen van de eerste tekst in de tweede tekst. Geeft %1 terug als de tekst niet gevonden is.", "TEXT_INDEXOF_TITLE": "in tekst %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "zoek eerste voorkomen van tekst", "TEXT_INDEXOF_OPERATOR_LAST": "zoek het laatste voorkomen van tekst", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "in tekst %1 %2", "TEXT_CHARAT_FROM_START": "haal letter # op", "TEXT_CHARAT_FROM_END": "haal letter # op vanaf einde", @@ -244,7 +220,6 @@ "TEXT_CHARAT_RANDOM": "haal willekeurige letter op", "TEXT_CHARAT_TOOLTIP": "Geeft de letter op de opgegeven positie terug.", "TEXT_GET_SUBSTRING_TOOLTIP": "Geeft het opgegeven onderdeel van de tekst terug.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "in tekst", "TEXT_GET_SUBSTRING_START_FROM_START": "haal subtekst op vanaf letter #", "TEXT_GET_SUBSTRING_START_FROM_END": "haal subtekst op vanaf letter # vanaf einde", @@ -252,20 +227,16 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "naar letter #", "TEXT_GET_SUBSTRING_END_FROM_END": "van letter # tot einde", "TEXT_GET_SUBSTRING_END_LAST": "naar laatste letter", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "Geef een kopie van de tekst met veranderde hoofdletters terug.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "naar HOOFDLETTERS", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "naar kleine letters", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "naar Hoofdletter Per Woord", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "Geeft een kopie van de tekst met verwijderde spaties van één of beide kanten.", "TEXT_TRIM_OPERATOR_BOTH": "spaties van beide kanten afhalen van", "TEXT_TRIM_OPERATOR_LEFT": "spaties van de linkerkant verwijderen van", "TEXT_TRIM_OPERATOR_RIGHT": "spaties van de rechterkant verwijderen van", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "tekst weergeven: %1", "TEXT_PRINT_TOOLTIP": "Drukt de opgegeven tekst, getal of een andere waarde af.", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "vraagt om invoer met bericht", "TEXT_PROMPT_TYPE_NUMBER": "vraagt de gebruiker om een getal met de tekst", "TEXT_PROMPT_TOOLTIP_NUMBER": "Vraagt de gebruiker om een getal in te voeren.", @@ -276,7 +247,6 @@ "TEXT_REPLACE_TOOLTIP": "Vervang alle voorkomens van tekst in een andere tekst.", "TEXT_REVERSE_MESSAGE0": "%1 omkeren", "TEXT_REVERSE_TOOLTIP": "Keert de volgorde van de tekens in de tekst om.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "maak een lege lijst", "LISTS_CREATE_EMPTY_TOOLTIP": "Geeft een lijst terug met lengte 0, zonder items", "LISTS_CREATE_WITH_TOOLTIP": "Maak een lijst met een willekeurig aantal items.", @@ -284,16 +254,13 @@ "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "lijst", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Voeg stukken toe, verwijder ze of wijzig de volgorde om dit lijstblok aan te passen.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Voeg iets toe aan de lijst.", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "Maakt een lijst die bestaat uit de opgegeven waarde, het opgegeven aantal keer herhaald.", "LISTS_REPEAT_TITLE": "Maak lijst met item %1, %2 keer herhaald", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "lengte van %1", "LISTS_LENGTH_TOOLTIP": "Geeft de lengte van een lijst terug.", "LISTS_ISEMPTY_TITLE": "%1 is leeg", "LISTS_ISEMPTY_TOOLTIP": "Geeft waar terug als de lijst leeg is.", "LISTS_INLIST": "in lijst", - "LISTS_INDEX_OF_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", "LISTS_INDEX_OF_FIRST": "zoek eerste voorkomen van item", "LISTS_INDEX_OF_LAST": "zoek laatste voorkomen van item", "LISTS_INDEX_OF_TOOLTIP": "Geeft de index terug van het eerste of laatste voorkomen van een item in de lijst. Geeft %1 terug als het item niet is gevonden.", @@ -319,7 +286,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "Verwijdert het eerste item in een lijst.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "Verwijdert het laatste item uit een lijst.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "Verwijdert een willekeurig item uit een lijst.", - "LISTS_SET_INDEX_HELPURL": "https://github.com/google/blockly/wiki/Lists#in-list--set", "LISTS_SET_INDEX_SET": "stel in", "LISTS_SET_INDEX_INSERT": "tussenvoegen op", "LISTS_SET_INDEX_INPUT_TO": "als", @@ -331,7 +297,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Voegt het item toe aan het begin van de lijst.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Voeg het item aan het einde van een lijst toe.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Voegt het item op een willekeurige positie in de lijst in.", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "haal sublijst op vanaf positie", "LISTS_GET_SUBLIST_START_FROM_END": "haal sublijst op van positie vanaf einde", "LISTS_GET_SUBLIST_START_FIRST": "haal sublijst op vanaf eerste", @@ -339,7 +304,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "naar # vanaf einde", "LISTS_GET_SUBLIST_END_LAST": "naar laatste", "LISTS_GET_SUBLIST_TOOLTIP": "Maakt een kopie van het opgegeven deel van de lijst.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sorteer %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sorteer een kopie van een lijst.", "LISTS_SORT_ORDER_ASCENDING": "oplopend", @@ -354,10 +318,8 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Lijst van tekstdelen samenvoegen in één stuk tekst, waarbij de tekstdelen gescheiden zijn door een scheidingsteken.", "LISTS_REVERSE_MESSAGE0": "%1 omkeren", "LISTS_REVERSE_TOOLTIP": "Keert een kopie van een lijst om.", - "VARIABLES_GET_HELPURL": "https://github.com/google/blockly/wiki/Variables#get", "VARIABLES_GET_TOOLTIP": "Geeft de waarde van deze variabele.", "VARIABLES_GET_CREATE_SET": "Maak \"verander %1\"", - "VARIABLES_SET_HELPURL": "https://github.com/google/blockly/wiki/Variables#set", "VARIABLES_SET": "stel %1 in op %2", "VARIABLES_SET_TOOLTIP": "Verandert de waarde van de variabele naar de waarde van de invoer.", "VARIABLES_SET_CREATE_GET": "Maak 'opvragen van %1'", @@ -384,7 +346,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Accentueer functiedefinitie", "PROCEDURES_CREATE_DO": "Maak \"%1\"", "PROCEDURES_IFRETURN_TOOLTIP": "Als de eerste waarde \"waar\" is, geef dan de tweede waarde terug.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Waarschuwing: dit blok mag alleen gebruikt worden binnen de definitie van een functie.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Zeg iets...", "WORKSPACE_ARIA_LABEL": "Blockly werkruimte", diff --git a/msg/json/oc.json b/msg/json/oc.json index 14b8d9af3..2c6f6b508 100644 --- a/msg/json/oc.json +++ b/msg/json/oc.json @@ -90,14 +90,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Renvia lo logaritme decimal d’un nombre.", "MATH_SINGLE_TOOLTIP_EXP": "Renvia a la poténcia d’un nombre.", "MATH_SINGLE_TOOLTIP_POW10": "Renvia 10 a la poténcia d’un nombre.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Renvia lo sinus d’un angle en grases (pas en radians).", "MATH_TRIG_TOOLTIP_COS": "Renvia lo cosinus d’un angle en grases (pas en radians).", "MATH_TRIG_TOOLTIP_TAN": "Renvia la tangenta d’un angle en grases (pas en radians).", "MATH_TRIG_TOOLTIP_ASIN": "Renvia l’arcsinus d’un nombre.", "MATH_TRIG_TOOLTIP_ACOS": "Renvia l’arccosinus d’un nombre.", "MATH_TRIG_TOOLTIP_ATAN": "Renvia l’arctangenta d’un nombre.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_IS_EVEN": "es par", "MATH_IS_ODD": "es impar", "MATH_IS_PRIME": "es primièr", @@ -117,13 +115,9 @@ "MATH_ONLIST_OPERATOR_MODE": "majoritaris de la lista", "MATH_ONLIST_OPERATOR_STD_DEV": "escart-tipe de la lista", "MATH_ONLIST_OPERATOR_RANDOM": "element aleatòri de lista", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "residú de %1 ÷ %2", "MATH_CONSTRAIN_TITLE": "constrénher %1 entre %2 e %3", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "fraccion aleatòria", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Una letra, un mot o una linha de tèxte.", "TEXT_JOIN_TITLE_CREATEWITH": "crear un tèxte amb", "TEXT_CREATE_JOIN_TITLE_JOIN": "jónher", @@ -189,8 +183,6 @@ "PROCEDURES_CALL_BEFORE_PARAMS": "amb :", "PROCEDURES_DEFRETURN_RETURN": "retorn", "PROCEDURES_ALLOW_STATEMENTS": "autorizar los òrdres", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_MUTATORCONTAINER_TITLE": "entradas", "PROCEDURES_MUTATORARG_TITLE": "nom de l’entrada :", "PROCEDURES_CREATE_DO": "Crear '%1'", diff --git a/msg/json/pa.json b/msg/json/pa.json index 47b9bc8a5..e784ddc39 100644 --- a/msg/json/pa.json +++ b/msg/json/pa.json @@ -28,7 +28,6 @@ "UNDO": "ਅਣਕੀਤਾ ਕਰੋ", "REDO": "ਮੁੜ ਕਰੋ", "CHANGE_VALUE_TITLE": "ਮੁੱਲ ਬਦਲੋ:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "ਰੰਗ-ਫੱਟੀ ਵਿੱਚੋਂ ਰੰਗ ਚੁਣੋ", "COLOUR_RANDOM_TITLE": "ਰਲ਼ਵਾਂ ਰੰਗ", "COLOUR_RANDOM_TOOLTIP": "ਰਲ਼ਵਾਂ ਰੰਗ ਚੁਣੋ", @@ -41,7 +40,6 @@ "COLOUR_BLEND_COLOUR2": "ਰੰਗ 2", "COLOUR_BLEND_RATIO": "ਅਨੁਪਾਤ", "COLOUR_BLEND_TOOLTIP": "ਦਿੱਤੇ ਅਨੁਪਾਤ (0.0 - 1.0) ਅਨੁਸਾਰ ਦੋ ਰੰਗ ਮਿਲਾਓ।", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 ਵਾਰੀ ਦੁਹਰਾਉ", "CONTROLS_REPEAT_INPUT_DO": "ਕਰੋ", "CONTROLS_IF_MSG_IF": "ਜੇ", diff --git a/msg/json/pl.json b/msg/json/pl.json index 3943f451d..83045a070 100644 --- a/msg/json/pl.json +++ b/msg/json/pl.json @@ -22,13 +22,14 @@ "WaldiSt", "Wojtas", "Woytecr", + "Łukasz3212", "아라" ] }, "VARIABLES_DEFAULT_NAME": "element", "UNNAMED_KEY": "bez nazwy", "TODAY": "Dzisiaj", - "DUPLICATE_BLOCK": "Powiel", + "DUPLICATE_BLOCK": "Duplikat", "ADD_COMMENT": "Dodaj Komentarz", "REMOVE_COMMENT": "Usuń komentarz", "DUPLICATE_COMMENT": "Zduplikowany komentarz", @@ -61,23 +62,19 @@ "DELETE_VARIABLE_CONFIRMATION": "Usunąć %1 wystąpień zmiennej '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Nie można usunąć zmiennej '%1', ponieważ jest częścią definicji funkcji '%2'", "DELETE_VARIABLE": "Usuń zmienną '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Wybierz kolor z palety.", "COLOUR_RANDOM_TITLE": "losowy kolor", "COLOUR_RANDOM_TOOLTIP": "Wybierz kolor w sposób losowy.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "kolor z", "COLOUR_RGB_RED": "czerwony", "COLOUR_RGB_GREEN": "zielony", "COLOUR_RGB_BLUE": "niebieski", "COLOUR_RGB_TOOLTIP": "Utwórz kolor składający sie z podanej ilości czerwieni, zieleni i błękitu. Zakres wartości: 0 do 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "wymieszaj", "COLOUR_BLEND_COLOUR1": "kolor 1", "COLOUR_BLEND_COLOUR2": "kolor 2", "COLOUR_BLEND_RATIO": "proporcja", "COLOUR_BLEND_TOOLTIP": "Miesza dwa kolory w danej proporcji (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "powtórz %1 razy", "CONTROLS_REPEAT_INPUT_DO": "wykonaj", "CONTROLS_REPEAT_TOOLTIP": "Wykonaj niektóre instrukcje kilka razy.", @@ -120,21 +117,14 @@ "LOGIC_BOOLEAN_TRUE": "prawda", "LOGIC_BOOLEAN_FALSE": "fałsz", "LOGIC_BOOLEAN_TOOLTIP": "Zwraca 'prawda' lub 'fałsz'.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "nic", "LOGIC_NULL_TOOLTIP": "Zwraca nic.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "jeśli prawda", "LOGIC_TERNARY_IF_FALSE": "jeśli fałsz", "LOGIC_TERNARY_TOOLTIP": "Sprawdź warunek w „test”. Jeśli warunek jest prawdziwy, to zwróci „jeśli prawda”; jeśli nie jest prawdziwy to zwróci „jeśli fałsz”.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Liczba.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", "MATH_DIVISION_SYMBOL": "/", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tg", @@ -174,7 +164,6 @@ "MATH_IS_NEGATIVE": "jest ujemna", "MATH_IS_DIVISIBLE_BY": "jest podzielna przez", "MATH_IS_TOOLTIP": "Sprawdź, czy liczba jest parzysta, nieparzysta, pierwsza, całkowita, dodatnia, ujemna, lub czy jest podzielna przez podaną liczbę. Zwraca wartość \"prawda\" lub \"fałsz\".", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "zmień %1 o %2", "MATH_CHANGE_TOOLTIP": "Dodaj liczbę do zmiennej '%1'.", "MATH_ROUND_HELPURL": "https://pl.wikipedia.org/wiki/Zaokrąglanie", @@ -182,7 +171,6 @@ "MATH_ROUND_OPERATOR_ROUND": "zaokrąglij", "MATH_ROUND_OPERATOR_ROUNDUP": "zaokrąglij w górę", "MATH_ROUND_OPERATOR_ROUNDDOWN": "zaokrąglij w dół", - "MATH_ONLIST_HELPURL": "", "MATH_ONLIST_OPERATOR_SUM": "suma elementów listy", "MATH_ONLIST_TOOLTIP_SUM": "Zwróć sumę wszystkich liczb z listy.", "MATH_ONLIST_OPERATOR_MIN": "minimalna wartość z listy", @@ -204,13 +192,11 @@ "MATH_MODULO_TOOLTIP": "Zwróć resztę z dzielenia dwóch liczb przez siebie.", "MATH_CONSTRAIN_TITLE": "ogranicz %1 z dołu %2 z góry %3", "MATH_CONSTRAIN_TOOLTIP": "Ogranicz liczbę, aby była w określonych granicach (włącznie).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "losowa liczba całkowita od %1 do %2", "MATH_RANDOM_INT_TOOLTIP": "Zwróć losową liczbę całkowitą w ramach dwóch wyznaczonych granic, włącznie.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "losowy ułamek", "MATH_RANDOM_FLOAT_TOOLTIP": "Zwróć losowy ułamek między 0.0 (włącznie), a 1.0 (wyłącznie).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", + "MATH_ATAN2_TITLE": "atan2 z %X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Zwraca arcus tangens punktu (X, Y) w stopniach od -180 do 180.", "TEXT_TEXT_HELPURL": "https://pl.wikipedia.org/wiki/Tekstowy_typ_danych", "TEXT_TEXT_TOOLTIP": "Litera, wyraz lub linia tekstu.", @@ -235,7 +221,6 @@ "TEXT_CHARAT_FIRST": "pobierz pierwszą literę", "TEXT_CHARAT_LAST": "pobierz ostatnią literę", "TEXT_CHARAT_RANDOM": "pobierz losową literę", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "Zwraca literę z określonej pozycji.", "TEXT_GET_SUBSTRING_TOOLTIP": "Zwraca określoną część tekstu.", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "w tekście", @@ -245,7 +230,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "do # litery", "TEXT_GET_SUBSTRING_END_FROM_END": "do # litery od końca", "TEXT_GET_SUBSTRING_END_LAST": "do ostatniej litery", - "TEXT_GET_SUBSTRING_TAIL": "", "TEXT_CHANGECASE_TOOLTIP": "Zwraca kopię tekstu z odwruconą wielkością liter.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "na WIELKIE LITERY", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "na małe litery", @@ -261,14 +245,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Zapytaj użytkownika o liczbę.", "TEXT_PROMPT_TOOLTIP_TEXT": "Zapytaj użytkownika o jakiś tekst.", "TEXT_COUNT_MESSAGE0": "policz %1 w %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Liczy ile razy dany tekst występuje w innym tekście.", "TEXT_REPLACE_MESSAGE0": "zamień %1 na %2 w %3", "TEXT_REPLACE_TOOLTIP": "Zastąp wszystkie wystąpienia danego tekstu innym.", "TEXT_REVERSE_MESSAGE0": "odwróć %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Odwraca kolejność znaków w tekście.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "utwórz pustą listę", "LISTS_CREATE_EMPTY_TOOLTIP": "Zwraca listę o długości 0, nie zawierającą danych", "LISTS_CREATE_WITH_TOOLTIP": "Utwórz listę z dowolną ilością elementów.", @@ -325,9 +306,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "do #", "LISTS_GET_SUBLIST_END_FROM_END": "do # od końca", "LISTS_GET_SUBLIST_END_LAST": "do ostatniego", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "Tworzy kopię żądanej części listy.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sortuj %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sortuj kopię listy.", "LISTS_SORT_ORDER_ASCENDING": "rosnąco", @@ -342,21 +321,17 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Łączy listę tekstów w jeden tekst, rozdzielany separatorem.", "LISTS_REVERSE_MESSAGE0": "odwróć %1", "LISTS_REVERSE_TOOLTIP": "Odwraca kolejność danych w kopii listy.", - "ORDINAL_NUMBER_SUFFIX": "", "VARIABLES_GET_TOOLTIP": "Zwraca wartość tej zmiennej.", "VARIABLES_GET_CREATE_SET": "Utwórz klocek 'ustaw %1'", "VARIABLES_SET": "przypisz %1 wartość %2", "VARIABLES_SET_TOOLTIP": "Wartości zmiennej i wejście będą identyczne.", "VARIABLES_SET_CREATE_GET": "Utwórz klocek 'pobierz %1'", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "do", "PROCEDURES_DEFNORETURN_PROCEDURE": "zrób coś", "PROCEDURES_BEFORE_PARAMS": "z:", "PROCEDURES_CALL_BEFORE_PARAMS": "z:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Tworzy funkcję nie posiadającą wyjścia.", "PROCEDURES_DEFNORETURN_COMMENT": "Opisz tę funkcję...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "zwróć", "PROCEDURES_DEFRETURN_TOOLTIP": "Tworzy funkcję posiadającą wyjście.", "PROCEDURES_ALLOW_STATEMENTS": "zezwól na czynności", @@ -374,6 +349,7 @@ "PROCEDURES_IFRETURN_TOOLTIP": "Jeśli warunek jest spełniony zwróć drugą wartość.", "PROCEDURES_IFRETURN_WARNING": "Uwaga: Ten klocek może być używany tylko w definicji funkcji.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Powiedz coś...", + "WORKSPACE_ARIA_LABEL": "Obszar roboczy Blockly", "COLLAPSED_WARNINGS_WARNING": "Zwinięte bloki zawierają ostrzeżenia.", "DIALOG_OK": "OK", "DIALOG_CANCEL": "Anuluj" diff --git a/msg/json/pms.json b/msg/json/pms.json index f48080d17..acee3f24a 100644 --- a/msg/json/pms.json +++ b/msg/json/pms.json @@ -40,7 +40,6 @@ "DELETE_VARIABLE_CONFIRMATION": "Eliminé %1 utilisassion ëd la variàbil '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "As peul nen eliminesse la variàbil '%1' përchè a l'é part ëd la definission dla fonsion '%2'", "DELETE_VARIABLE": "Eliminé la variàbil '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Serne un color ant la taulòssa.", "COLOUR_RANDOM_TITLE": "color a asar", "COLOUR_RANDOM_TOOLTIP": "Serne un color a asar.", @@ -54,7 +53,6 @@ "COLOUR_BLEND_COLOUR2": "color 2", "COLOUR_BLEND_RATIO": "rapòrt", "COLOUR_BLEND_TOOLTIP": "A mës-cia doi color ansema con un rapòrt dàit (0,0 - 1,0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "arpete %1 vire", "CONTROLS_REPEAT_INPUT_DO": "fé", "CONTROLS_REPEAT_TOOLTIP": "Eseguì chèiche anstrussion vàire vire.", @@ -81,7 +79,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Gionté, gavé o riordiné le session për cinfiguré torna ës blòch si.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Gionté na condission al blòch si.", "CONTROLS_IF_ELSE_TOOLTIP": "Gionté na condission final ch'a cheuj tut al blòch si.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Rësponde ver si le doe imission a son uguaj.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Rësponde ver si le doe imission a son nen uguaj.", "LOGIC_COMPARE_TOOLTIP_LT": "Rësponde ver si la prima imission a l'é pi cita dla sconda.", @@ -103,15 +100,18 @@ "LOGIC_TERNARY_IF_TRUE": "se ver", "LOGIC_TERNARY_IF_FALSE": "se fàuss", "LOGIC_TERNARY_TOOLTIP": "Controlé la condission an 'preuva'. Se la condission a l'é vera, a rëspond con ël valor 'se ver'; dësnò a rëspond con ël valor 'se fàuss'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Un nùmer.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", + "MATH_TRIG_SIN": "sin", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "asin", + "MATH_TRIG_ACOS": "acos", + "MATH_TRIG_ATAN": "atan", "MATH_ARITHMETIC_TOOLTIP_ADD": "A smon la soma ëd doi nùmer.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "A smon la diferensa dij doi nùmer.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "A smon ël prodot dij doi nùmer.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "A smon ël cossient dij doi nùmer.", "MATH_ARITHMETIC_TOOLTIP_POWER": "A smon ël prim nùmer alvà a la potensa dël second.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "rèis quadra", "MATH_SINGLE_TOOLTIP_ROOT": "A smon la rèis quadra d'un nùmer.", "MATH_SINGLE_OP_ABSOLUTE": "assolù", @@ -121,14 +121,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "A smon ël logaritm an base 10 d'un nùmer.", "MATH_SINGLE_TOOLTIP_EXP": "A smon e a la potensa d'un nùmer.", "MATH_SINGLE_TOOLTIP_POW10": "A smon 10 a la potensa d'un nùmer.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "A smon ël sen ëd n'àngol an gré (pa an radiant).", "MATH_TRIG_TOOLTIP_COS": "A smon ël cosen ëd n'àngol an gré (pa an radiant).", "MATH_TRIG_TOOLTIP_TAN": "A smon la tangenta ëd n'àngol an gré (pa an radiant).", "MATH_TRIG_TOOLTIP_ASIN": "A smon l'arch-sen d'un nùmer.", "MATH_TRIG_TOOLTIP_ACOS": "A smon l'arch-cosen d'un nùmer.", "MATH_TRIG_TOOLTIP_ATAN": "A smon l'arch-tangenta d'un nùmer.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "A smon un-a dle costante comun-e π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…) o ∞ (infinì).", "MATH_IS_EVEN": "a l'é cobi", "MATH_IS_ODD": "a l'é dëscobi", @@ -138,10 +136,8 @@ "MATH_IS_NEGATIVE": "a l'é negativ", "MATH_IS_DIVISIBLE_BY": "a l'é divisìbil për", "MATH_IS_TOOLTIP": "A contròla si un nùmer a l'é cobi, dëscobi, prim, antreghm positiv, negativ, o s'a l'é divisìbil për un nùmer dàit. A rëspond ver o fàuss.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "ancrementé %1 për %2", "MATH_CHANGE_TOOLTIP": "Gionté un nùmer a la variàbil '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "A arionda un nùmer për difet o ecess.", "MATH_ROUND_OPERATOR_ROUND": "ariondé", "MATH_ROUND_OPERATOR_ROUNDUP": "ariondé për ecess", @@ -162,21 +158,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "A smon la deviassion ëstàndard ëd la lista.", "MATH_ONLIST_OPERATOR_RANDOM": "element a l'ancàpit ëd la lista", "MATH_ONLIST_TOOLTIP_RANDOM": "A smon n'element a l'ancàpit da la lista.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "resta ëd %1:%2", "MATH_MODULO_TOOLTIP": "A smon la resta ëd la division dij doi nùmer.", "MATH_CONSTRAIN_TITLE": "limité %1 antra %2 e %3", "MATH_CONSTRAIN_TOOLTIP": "Limité un nùmer a esse antra le limitassion ëspessificà (comprèise).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "antregh aleatòri antra %1 e %2", "MATH_RANDOM_INT_TOOLTIP": "A smon n'antregh aleatòri antra ij doi lìmit ëspessificà, comprèis.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "frassion aleatòria", "MATH_RANDOM_FLOAT_TOOLTIP": "A smon na frassion aleatòria antra 0,0 (comprèis) e 1,0 (esclus).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 ëd X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "A rëspond con l'arch-tangent dël pont (X, Y) an gre da -180 a 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Na litra, na paròla o na linia ëd test.", "TEXT_JOIN_TITLE_CREATEWITH": "creé ël test con", "TEXT_JOIN_TOOLTIP": "Creé un tòch ëd test an gionzend un nùmer qualsëssìa d'element.", @@ -223,17 +214,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Ciamé un nùmer a l'utent.", "TEXT_PROMPT_TOOLTIP_TEXT": "Ciamé un test a l'utent.", "TEXT_COUNT_MESSAGE0": "nùmer %1 su %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Conté vàire vire un test dàit a compariss an n'àutr test.", "TEXT_REPLACE_MESSAGE0": "rampiassé %1 con %2 an %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Rampiassé tute j'ocorense d'un test con n'àutr.", "TEXT_REVERSE_MESSAGE0": "Anversé %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Anversé l'òrdin dij caràter ant ël test.", "LISTS_CREATE_EMPTY_TITLE": "creé na lista veuida", "LISTS_CREATE_EMPTY_TOOLTIP": "Smon-e na lista, ëd longheur 0, ch'a conten gnun-a argistrassion", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Creé na lista con un nùmer qualsëssìa d'element.", "LISTS_CREATE_WITH_INPUT_WITH": "creé na lista con", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "lista", @@ -252,6 +239,7 @@ "LISTS_GET_INDEX_GET": "oten-e", "LISTS_GET_INDEX_GET_REMOVE": "oten-e e eliminé", "LISTS_GET_INDEX_REMOVE": "eliminé", + "LISTS_GET_INDEX_FROM_START": "n.", "LISTS_GET_INDEX_FROM_END": "# da la fin", "LISTS_GET_INDEX_FIRST": "prim", "LISTS_GET_INDEX_LAST": "ùltim", @@ -288,7 +276,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "fin-a a # da la fin", "LISTS_GET_SUBLIST_END_LAST": "fin-a a l'ùltim", "LISTS_GET_SUBLIST_TOOLTIP": "A crea na còpia dël tòch ëspessificà ëd na lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordiné %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordiné na còpia ëd na lista.", "LISTS_SORT_ORDER_ASCENDING": "chërsent", @@ -296,13 +283,11 @@ "LISTS_SORT_TYPE_NUMERIC": "numérich", "LISTS_SORT_TYPE_TEXT": "alfabétich", "LISTS_SORT_TYPE_IGNORECASE": "alfabétich, ignorand ël caràter minùscol o majùscol", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "fé na lista da 'n test", "LISTS_SPLIT_TEXT_FROM_LIST": "fé 'n test da na lista", "LISTS_SPLIT_WITH_DELIMITER": "con ël separator", "LISTS_SPLIT_TOOLTIP_SPLIT": "Divide un test an na lista ëd test, tajand a minca 'n separator.", "LISTS_SPLIT_TOOLTIP_JOIN": "Gionze na lista ëd test ant un test sol, separandje con un separator.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "anversé %1", "LISTS_REVERSE_TOOLTIP": "Anversé na còpia ëd na lista", "VARIABLES_GET_TOOLTIP": "A smon ël valor ëd sa variàbil.", @@ -320,9 +305,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "A crea na fonsion con na surtìa.", "PROCEDURES_ALLOW_STATEMENTS": "përmëtte le diciairassion", "PROCEDURES_DEF_DUPLICATE_WARNING": "Atension: Costa fonsion a l'ha dij paràmeter duplicà.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Eseguì la fonsion '%1' definìa da l'utent.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Eseguì la fonsion '%1' definìa da l'utent e dovré sò arzultà.", "PROCEDURES_MUTATORCONTAINER_TITLE": "imission", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Gionté, gavé o riordiné j'imission ëd sa fonsion.", @@ -331,7 +314,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Sot-ligné la definission dla fonsion", "PROCEDURES_CREATE_DO": "Creé '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Se un valor a l'é ver, antlora smon-e un second valor.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Atension: Ës blòch a podria esse dovrà mach an na definission ëd fonsion.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Dì cheicòs...", "WORKSPACE_ARIA_LABEL": "Spassi ëd travaj ëd Blockly", diff --git a/msg/json/pt-br.json b/msg/json/pt-br.json index a12da9813..d2da28672 100644 --- a/msg/json/pt-br.json +++ b/msg/json/pt-br.json @@ -197,7 +197,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://pt.wikipedia.org/wiki/Gerador_de_n%C3%BAmeros_pseudoaleat%C3%B3rios", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "fração aleatória", "MATH_RANDOM_FLOAT_TOOLTIP": "Retorna uma fração aleatória entre 0.0 (inclusivo) e 1.0 (exclusivo).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 de X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Retorne o arco tangente do ponto (X, Y) em graus de -180 a 180.", "TEXT_TEXT_HELPURL": "https://pt.wikipedia.org/wiki/Cadeia_de_caracteres", @@ -225,7 +224,6 @@ "TEXT_CHARAT_RANDOM": "obter letra aleatória", "TEXT_CHARAT_TOOLTIP": "Retorna a letra na posição especificada.", "TEXT_GET_SUBSTRING_TOOLTIP": "Retorna o trecho de texto especificado.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "no texto", "TEXT_GET_SUBSTRING_START_FROM_START": "obter trecho de letra nº", "TEXT_GET_SUBSTRING_START_FROM_END": "obter trecho de letra nº a partir do final", @@ -233,49 +231,37 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "até letra nº", "TEXT_GET_SUBSTRING_END_FROM_END": "até letra nº a partir do final", "TEXT_GET_SUBSTRING_END_LAST": "até última letra", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "Retorna uma cópia do texto em um formato diferente.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "para MAIÚSCULAS", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "para minúsculas", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "para Nomes Próprios", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "Retorna uma cópia do texto com os espaços removidos de uma ou ambas extremidades.", "TEXT_TRIM_OPERATOR_BOTH": "remover espaços de ambos os lados de", "TEXT_TRIM_OPERATOR_LEFT": "remover espaços à esquerda de", "TEXT_TRIM_OPERATOR_RIGHT": "remover espaços à direita de", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "imprime %1", "TEXT_PRINT_TOOLTIP": "Imprime o texto, número ou valor especificado.", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "Pede um texto com uma mensagem", "TEXT_PROMPT_TYPE_NUMBER": "Pede um número com uma mensagem", "TEXT_PROMPT_TOOLTIP_NUMBER": "Pede ao usuário um número.", "TEXT_PROMPT_TOOLTIP_TEXT": "Pede ao usuário um texto.", "TEXT_COUNT_MESSAGE0": "Contar %1 em %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Calcule quantas vezes algum texto aparece centro de algum outro texto.", "TEXT_REPLACE_MESSAGE0": "substituir %1 por %2 em %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Texto#substituindo-substrings", "TEXT_REPLACE_TOOLTIP": "Substitua todas as ocorrências de algum texto dentro de algum outro texto.", "TEXT_REVERSE_MESSAGE0": "inverter %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Texto#invertendo-texto", "TEXT_REVERSE_TOOLTIP": "Inverter a ordem dos caracteres no texto.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "criar lista vazia", "LISTS_CREATE_EMPTY_TOOLTIP": "Retorna uma lista, de tamanho 0, contendo nenhum registro", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Cria uma lista com a quantidade de itens informada.", "LISTS_CREATE_WITH_INPUT_WITH": "criar lista com", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "lista", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Acrescenta, remove ou reordena seções para reconfigurar este bloco de lista.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Acrescenta um item à lista.", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "Cria uma lista consistindo no valor informado repetido o número de vezes especificado.", "LISTS_REPEAT_TITLE": "criar lista com item %1 repetido %2 vezes", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "tamanho de %1", "LISTS_LENGTH_TOOLTIP": "Retorna o tamanho de uma lista.", - "LISTS_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#is-empty", "LISTS_ISEMPTY_TITLE": "%1 é vazia", "LISTS_ISEMPTY_TOOLTIP": "Retorna ao verdadeiro se a lista estiver vazia.", "LISTS_INLIST": "na lista", @@ -315,7 +301,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Insere o item no início de uma lista.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Insere o item no final de uma lista.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Insere o item em uma posição qualquer de uma lista.", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "obtém sublista de nº", "LISTS_GET_SUBLIST_START_FROM_END": "obtém sublista de nº a partir do final", "LISTS_GET_SUBLIST_START_FIRST": "obtém sublista a partir do primeiro", @@ -323,7 +308,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "até nº a partir do final", "LISTS_GET_SUBLIST_END_LAST": "até último", "LISTS_GET_SUBLIST_TOOLTIP": "Cria uma cópia da porção especificada de uma lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordenar %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordenar uma cópia de uma lista.", "LISTS_SORT_ORDER_ASCENDING": "ascendente", @@ -331,19 +315,15 @@ "LISTS_SORT_TYPE_NUMERIC": "numérico", "LISTS_SORT_TYPE_TEXT": "alfabético", "LISTS_SORT_TYPE_IGNORECASE": "alfabético, ignorar maiúscula/minúscula", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "Fazer uma lista a partir do texto", "LISTS_SPLIT_TEXT_FROM_LIST": "fazer um texto a partir da lista", "LISTS_SPLIT_WITH_DELIMITER": "com delimitador", "LISTS_SPLIT_TOOLTIP_SPLIT": "Dividir o texto em uma lista de textos, separando-o em cada delimitador.", "LISTS_SPLIT_TOOLTIP_JOIN": "Juntar uma lista de textos em um único texto, separado por um delimitador.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Listas#invertendo-uma-lista", "LISTS_REVERSE_MESSAGE0": "inverter %1", "LISTS_REVERSE_TOOLTIP": "Inverter uma cópia da lista.", - "VARIABLES_GET_HELPURL": "https://github.com/google/blockly/wiki/Variables#get", "VARIABLES_GET_TOOLTIP": "Retorna o valor desta variável.", "VARIABLES_GET_CREATE_SET": "Criar \"definir %1\"", - "VARIABLES_SET_HELPURL": "https://github.com/google/blockly/wiki/Variables#set", "VARIABLES_SET": "definir %1 para %2", "VARIABLES_SET_TOOLTIP": "Define esta variável para o valor da entrada.", "VARIABLES_SET_CREATE_GET": "Criar \"obter %1\"", @@ -370,7 +350,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Destacar definição da função", "PROCEDURES_CREATE_DO": "Criar \"%1\"", "PROCEDURES_IFRETURN_TOOLTIP": "Se um valor é verdadeiro, então retorna um valor.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Atenção: Este bloco só pode ser utilizado dentro da definição de uma função.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Diz algo...", "WORKSPACE_ARIA_LABEL": "Espaço de trabalho do Blockly", diff --git a/msg/json/pt.json b/msg/json/pt.json index 85b6a445f..55be8612a 100644 --- a/msg/json/pt.json +++ b/msg/json/pt.json @@ -60,13 +60,11 @@ "COLOUR_PICKER_TOOLTIP": "Escolha uma cor da paleta de cores.", "COLOUR_RANDOM_TITLE": "cor aleatória", "COLOUR_RANDOM_TOOLTIP": "Escolha uma cor aleatoriamente.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "pinte com", "COLOUR_RGB_RED": "vermelho", "COLOUR_RGB_GREEN": "verde", "COLOUR_RGB_BLUE": "azul", "COLOUR_RGB_TOOLTIP": "Cria uma cor de acordo com a quantidade especificada de vermelho, verde e azul. Todos os valores devem estar entre 0 e 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "misturar", "COLOUR_BLEND_COLOUR1": "cor 1", "COLOUR_BLEND_COLOUR2": "cor 2", @@ -125,11 +123,6 @@ "LOGIC_TERNARY_TOOLTIP": "Avalia a condição em \"teste\". Se a condição for verdadeira retorna o valor \"se verdadeiro\", senão retorna o valor \"se falso\".", "MATH_NUMBER_HELPURL": "http://pt.wikipedia.org/wiki/N%C3%BAmero", "MATH_NUMBER_TOOLTIP": "Um número.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -204,7 +197,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "http://pt.wikipedia.org/wiki/N%C3%BAmero_aleat%C3%B3rio", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "fração aleatória", "MATH_RANDOM_FLOAT_TOOLTIP": "Insere uma fração aleatória entre 0.0 (inclusive) e 1.0 (exclusive).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 de X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Devolver o arco tangente do ponto (X, Y) em graus entre -180 e 180.", "TEXT_TEXT_HELPURL": "http://pt.wikipedia.org/wiki/Cadeia_de_caracteres", @@ -254,15 +246,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Pede ao utilizador um número.", "TEXT_PROMPT_TOOLTIP_TEXT": "Pede ao utilizador um texto.", "TEXT_COUNT_MESSAGE0": "contar %1 em %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Conte quantas vezes um certo texto aparece dentro de algum outro texto.", "TEXT_REPLACE_MESSAGE0": "substituir %1 por %2 em %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Substituir todas as ocorrências de um certo texto dentro de algum outro texto.", "TEXT_REVERSE_MESSAGE0": "inverter %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Inverte a ordem dos caracteres no texto.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "criar lista vazia", "LISTS_CREATE_EMPTY_TOOLTIP": "Retorna uma lista, de tamanho 0, contendo nenhum registo", "LISTS_CREATE_WITH_TOOLTIP": "Cria uma lista com qualquer número de itens.", @@ -320,7 +308,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "até #, a partir do final", "LISTS_GET_SUBLIST_END_LAST": "para o último", "LISTS_GET_SUBLIST_TOOLTIP": "Cria uma cópia da porção especificada de uma lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "ordenar %1 %2 %3", "LISTS_SORT_TOOLTIP": "Ordenar uma cópia de uma lista.", "LISTS_SORT_ORDER_ASCENDING": "ascendente", @@ -333,7 +320,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "com delimitador", "LISTS_SPLIT_TOOLTIP_SPLIT": "Dividir o texto numa lista de textos, separando-o em cada delimitador.", "LISTS_SPLIT_TOOLTIP_JOIN": "Juntar uma lista de textos num único texto, separado por um delimitador.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "inverter %1", "LISTS_REVERSE_TOOLTIP": "Inverter uma cópia da lista.", "VARIABLES_GET_TOOLTIP": "Retorna o valor desta variável.", @@ -341,14 +327,12 @@ "VARIABLES_SET": "definir %1 para %2", "VARIABLES_SET_TOOLTIP": "Define esta variável para o valor inserido.", "VARIABLES_SET_CREATE_GET": "Criar \"obter %1\"", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_DEFNORETURN_TITLE": "para", "PROCEDURES_DEFNORETURN_PROCEDURE": "faz algo", "PROCEDURES_BEFORE_PARAMS": "com:", "PROCEDURES_CALL_BEFORE_PARAMS": "com:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Cria uma função que não tem retorno.", "PROCEDURES_DEFNORETURN_COMMENT": "Descreva esta função...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_DEFRETURN_RETURN": "retorna", "PROCEDURES_DEFRETURN_TOOLTIP": "Cria uma função que possui um valor de retorno.", "PROCEDURES_ALLOW_STATEMENTS": "permitir declarações", diff --git a/msg/json/qqq.json b/msg/json/qqq.json index 17154d64c..3cfa464f8 100644 --- a/msg/json/qqq.json +++ b/msg/json/qqq.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "Ajeje Brazorf", + "Amire80", "Espertus", "Liuxinyu970226", "Metalhead64", @@ -47,16 +48,16 @@ "DELETE_VARIABLE": "dropdown choice - Delete the currently selected variable.", "COLOUR_PICKER_HELPURL": "{{Optional}} url - Information about colour.", "COLOUR_PICKER_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Colour#picking-a-colour-from-a-palette https://github.com/google/blockly/wiki/Colour#picking-a-colour-from-a-palette].", - "COLOUR_RANDOM_HELPURL": "{{Optional}} url - A link that displays a random colour each time you visit it.", + "COLOUR_RANDOM_HELPURL": "{{Ignored}} url - A link that displays a random colour each time you visit it.", "COLOUR_RANDOM_TITLE": "block text - Title of block that generates a colour at random.", "COLOUR_RANDOM_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Colour#generating-a-random-colour https://github.com/google/blockly/wiki/Colour#generating-a-random-colour].", - "COLOUR_RGB_HELPURL": "{{Optional}} url - A link for colour codes with percentages (0-100%) for each component, instead of the more common 0-255, which may be more difficult for beginners.", + "COLOUR_RGB_HELPURL": "{{Ignored}} url - A link for colour codes with percentages (0-100%) for each component, instead of the more common 0-255, which may be more difficult for beginners.", "COLOUR_RGB_TITLE": "block text - Title of block for [https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components].", "COLOUR_RGB_RED": "block input text - The amount of red (from 0 to 100) to use when [https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components].\n{{Identical|Red}}", "COLOUR_RGB_GREEN": "block input text - The amount of green (from 0 to 100) to use when [https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components].", "COLOUR_RGB_BLUE": "block input text - The amount of blue (from 0 to 100) to use when [https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components].\n{{Identical|Blue}}", "COLOUR_RGB_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components https://github.com/google/blockly/wiki/Colour#creating-a-colour-from-red-green-and-blue-components].", - "COLOUR_BLEND_HELPURL": "{{Optional}} url - A useful link that displays blending of two colours.", + "COLOUR_BLEND_HELPURL": "{{Ignored}} url - A useful link that displays blending of two colours.", "COLOUR_BLEND_TITLE": "block text - A verb for blending two shades of paint.", "COLOUR_BLEND_COLOUR1": "block input text - The first of two colours to [https://github.com/google/blockly/wiki/Colour#blending-colours blend].", "COLOUR_BLEND_COLOUR2": "block input text - The second of two colours to [https://github.com/google/blockly/wiki/Colour#blending-colours blend].", @@ -236,7 +237,7 @@ "TEXT_CHARAT_FIRST": "block text - Indicates that the first letter of the following piece of text should be retrieved. See [https://github.com/google/blockly/wiki/Text#extracting-a-single-character https://github.com/google/blockly/wiki/Text#extracting-a-single-character]. [[File:Blockly-text-get.png]]", "TEXT_CHARAT_LAST": "block text - Indicates that the last letter (or number, punctuation mark, etc.) of the following piece of text should be retrieved. See [https://github.com/google/blockly/wiki/Text#extracting-a-single-character https://github.com/google/blockly/wiki/Text#extracting-a-single-character]. [[File:Blockly-text-get.png]]", "TEXT_CHARAT_RANDOM": "block text - Indicates that any letter (or number, punctuation mark, etc.) in the following piece of text should be randomly selected. See [https://github.com/google/blockly/wiki/Text#extracting-a-single-character https://github.com/google/blockly/wiki/Text#extracting-a-single-character]. [[File:Blockly-text-get.png]]", - "TEXT_CHARAT_TAIL": "block text - Text that goes after the rightmost block/dropdown when getting a single letter from a piece of text, as in [https://blockly-demo.appspot.com/static/apps/code/index.html#3m23km these blocks] or shown below. For most languages, this will be blank. [[File:Blockly-text-get.png]]", + "TEXT_CHARAT_TAIL": "{{Optional}}\nblock text - Text that goes after the rightmost block/dropdown when getting a single letter from a piece of text, as in [https://blockly-demo.appspot.com/static/apps/code/index.html#3m23km these blocks] or shown below. For most languages, this will be blank. [[File:Blockly-text-get.png]]", "TEXT_CHARAT_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Text#extracting-a-single-character https://github.com/google/blockly/wiki/Text#extracting-a-single-character]. [[File:Blockly-text-get.png]]", "TEXT_GET_SUBSTRING_TOOLTIP": "See [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text].", "TEXT_GET_SUBSTRING_HELPURL": "{{Optional}} url - Information about extracting characters from text. Reminder: urls are the lowest priority translations. Feel free to skip.", @@ -247,7 +248,7 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "dropdown - Indicates that the following number specifies the position (relative to the start position) of the end of the region of text that should be obtained from the preceding piece of text. See [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text]. [[File:Blockly-get-substring.png]]", "TEXT_GET_SUBSTRING_END_FROM_END": "dropdown - Indicates that the following number specifies the position (relative to the end position) of the end of the region of text that should be obtained from the preceding piece of text. See [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text]. [[File:Blockly-get-substring.png]]", "TEXT_GET_SUBSTRING_END_LAST": "block text - Indicates that a region ending with the last letter of the preceding piece of text should be extracted. See [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text]. [[File:Blockly-get-substring.png]]", - "TEXT_GET_SUBSTRING_TAIL": "block text - Text that should go after the rightmost block/dropdown when [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text extracting a region of text]. In most languages, this will be the empty string. [[File:Blockly-get-substring.png]]", + "TEXT_GET_SUBSTRING_TAIL": "{{Optional}}\nblock text - Text that should go after the rightmost block/dropdown when [https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text extracting a region of text]. In most languages, this will be the empty string. [[File:Blockly-get-substring.png]]", "TEXT_CHANGECASE_HELPURL": "{{Optional}} url - Information about the case of letters (upper-case and lower-case).", "TEXT_CHANGECASE_TOOLTIP": "tooltip - Describes a block to adjust the case of letters. For more information on this block, see [https://github.com/google/blockly/wiki/Text#adjusting-text-case https://github.com/google/blockly/wiki/Text#adjusting-text-case].", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "block text - Indicates that all of the letters in the following piece of text should be capitalized. If your language does not use case, you may indicate that this is not applicable to your language. For more information on this block, see [https://github.com/google/blockly/wiki/Text#adjusting-text-case https://github.com/google/blockly/wiki/Text#adjusting-text-case].", @@ -285,7 +286,7 @@ "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Lists#changing-number-of-inputs https://github.com/google/blockly/wiki/Lists#changing-number-of-inputs].", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Lists#changing-number-of-inputs https://github.com/google/blockly/wiki/Lists#changing-number-of-inputs].", "LISTS_REPEAT_HELPURL": "{{Optional}} url - Information about [https://github.com/google/blockly/wiki/Lists#create-list-with creating a list with multiple copies of a single item].", - "LISTS_REPEAT_TOOLTIP": "{{Optional}} url - See [https://github.com/google/blockly/wiki/Lists#create-list-with creating a list with multiple copies of a single item].", + "LISTS_REPEAT_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Lists#create-list-with creating a list with multiple copies of a single item].", "LISTS_REPEAT_TITLE": "block text - See [https://github.com/google/blockly/wiki/Lists#create-list-with https://github.com/google/blockly/wiki/Lists#create-list-with]. \n\nParameters:\n* %1 - the item (text) to be repeated\n* %2 - the number of times to repeat it", "LISTS_LENGTH_HELPURL": "{{Optional}} url - Information about how the length of a list is computed (i.e., by the total number of elements, not the number of different elements).", "LISTS_LENGTH_TITLE": "block text - See [https://github.com/google/blockly/wiki/Lists#length-of https://github.com/google/blockly/wiki/Lists#length-of]. \n\nParameters:\n* %1 - the list whose length is desired", @@ -306,7 +307,7 @@ "LISTS_GET_INDEX_FIRST": "dropdown - Indicates that the '''first''' item should be [https://github.com/google/blockly/wiki/Lists#getting-a-single-item accessed in a list]. [[File:Blockly-list-get-item.png]]", "LISTS_GET_INDEX_LAST": "dropdown - Indicates that the '''last''' item should be [https://github.com/google/blockly/wiki/Lists#getting-a-single-item accessed in a list]. [[File:Blockly-list-get-item.png]]", "LISTS_GET_INDEX_RANDOM": "dropdown - Indicates that a '''random''' item should be [https://github.com/google/blockly/wiki/Lists#getting-a-single-item accessed in a list]. [[File:Blockly-list-get-item.png]]", - "LISTS_GET_INDEX_TAIL": "block text - Text that should go after the rightmost block/dropdown when [https://github.com/google/blockly/wiki/Lists#getting-a-single-item accessing an item from a list]. In most languages, this will be the empty string. [[File:Blockly-list-get-item.png]]", + "LISTS_GET_INDEX_TAIL": "{{Optional}}\nblock text - Text that should go after the rightmost block/dropdown when [https://github.com/google/blockly/wiki/Lists#getting-a-single-item accessing an item from a list]. In most languages, this will be the empty string. [[File:Blockly-list-get-item.png]]", "LISTS_INDEX_FROM_START_TOOLTIP": "tooltip - Indicates the ordinal number that the first item in a list is referenced by. %1 will be replaced by either '#0' or '#1' depending on the indexing mode.", "LISTS_INDEX_FROM_END_TOOLTIP": "tooltip - Indicates the ordinal number that the last item in a list is referenced by. %1 will be replaced by either '#0' or '#1' depending on the indexing mode.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "tooltip - See [https://github.com/google/blockly/wiki/Lists#getting-a-single-item https://github.com/google/blockly/wiki/Lists#getting-a-single-item] for more information.", @@ -340,7 +341,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "dropdown - Indicates that an index relative to the front of the list should be used to specify the end of the range from which to [https://github.com/google/blockly/wiki/Lists#getting-a-sublist get a sublist]. [[File:Blockly-get-sublist.png]]", "LISTS_GET_SUBLIST_END_FROM_END": "dropdown - Indicates that an index relative to the end of the list should be used to specify the end of the range from which to [https://github.com/google/blockly/wiki/Lists#getting-a-sublist get a sublist]. [[File:Blockly-get-sublist.png]]", "LISTS_GET_SUBLIST_END_LAST": "dropdown - Indicates that the '''last''' item in the given list should be [https://github.com/google/blockly/wiki/Lists#getting-a-sublist the end of the selected sublist]. [[File:Blockly-get-sublist.png]]", - "LISTS_GET_SUBLIST_TAIL": "block text - This appears in the rightmost position ('tail') of the sublist block, as described at [https://github.com/google/blockly/wiki/Lists#getting-a-sublist https://github.com/google/blockly/wiki/Lists#getting-a-sublist]. In English and most other languages, this is the empty string. [[File:Blockly-get-sublist.png]]", + "LISTS_GET_SUBLIST_TAIL": "{{Optional}}\nblock text - This appears in the rightmost position ('tail') of the sublist block, as described at [https://github.com/google/blockly/wiki/Lists#getting-a-sublist https://github.com/google/blockly/wiki/Lists#getting-a-sublist]. In English and most other languages, this is the empty string. [[File:Blockly-get-sublist.png]]", "LISTS_GET_SUBLIST_TOOLTIP": "tooltip - See [https://github.com/google/blockly/wiki/Lists#getting-a-sublist https://github.com/google/blockly/wiki/Lists#getting-a-sublist] for more information. [[File:Blockly-get-sublist.png]]", "LISTS_SORT_HELPURL": "{{Optional}} url - Information describing sorting a list.", "LISTS_SORT_TITLE": "Sort as type %1 (numeric or alphabetic) in order %2 (ascending or descending) a list of items %3.\n{{Identical|Sort}}", @@ -359,7 +360,7 @@ "LISTS_REVERSE_HELPURL": "{{Optional}} url - Information describing reversing a list.", "LISTS_REVERSE_MESSAGE0": "block text - Title of block that returns a copy of a list (%1) with the order of items reversed.", "LISTS_REVERSE_TOOLTIP": "tooltip - Short description for a block that reverses a copy of a list.", - "ORDINAL_NUMBER_SUFFIX": "grammar - Text that follows an ordinal number (a number that indicates position relative to other numbers). In most languages, such text appears before the number, so this should be blank. An exception is Hungarian. See [[Translating:Blockly#Ordinal_numbers]] for more information.", + "ORDINAL_NUMBER_SUFFIX": "{{Optional}}\ngrammar - Text that follows an ordinal number (a number that indicates position relative to other numbers). In most languages, such text appears before the number, so this should be blank. An exception is Hungarian. See [[Translating:Blockly#Ordinal_numbers]] for more information.", "VARIABLES_GET_HELPURL": "{{Optional}} url - Information about ''variables'' in computer programming. Consider using your language's translation of [https://en.wikipedia.org/wiki/Variable_(computer_science) https://en.wikipedia.org/wiki/Variable_(computer_science)], if it exists.", "VARIABLES_GET_TOOLTIP": "tooltip - This gets the value of the named variable without modifying it.", "VARIABLES_GET_CREATE_SET": "context menu - Selecting this creates a block to set (change) the value of this variable. \n\nParameters:\n* %1 - the name of the variable.", @@ -372,7 +373,7 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "default name - This acts as a placeholder for the name of a function on a function definition block, as shown on [https://blockly-demo.appspot.com/static/apps/code/index.html?lang=en#w7cfju this block]. The user will replace it with the function's name.", "PROCEDURES_BEFORE_PARAMS": "block text - This precedes the list of parameters on a function's definition block. See [https://blockly-demo.appspot.com/static/apps/code/index.html?lang=en#voztpd this sample function with parameters].", "PROCEDURES_CALL_BEFORE_PARAMS": "block text - This precedes the list of parameters on a function's caller block. See [https://blockly-demo.appspot.com/static/apps/code/index.html?lang=en#voztpd this sample function with parameters].", - "PROCEDURES_DEFNORETURN_DO": "block text - This appears next to the function's 'body', the blocks that should be run when the function is called, as shown in [https://blockly-demo.appspot.com/static/apps/code/index.html?lang=en#voztpd this sample function definition].", + "PROCEDURES_DEFNORETURN_DO": "{{Optional}}\nblock text - This appears next to the function's 'body', the blocks that should be run when the function is called, as shown in [https://blockly-demo.appspot.com/static/apps/code/index.html?lang=en#voztpd this sample function definition].", "PROCEDURES_DEFNORETURN_TOOLTIP": "tooltip", "PROCEDURES_DEFNORETURN_COMMENT": "Placeholder text that the user is encouraged to replace with a description of what their function does.", "PROCEDURES_DEFRETURN_HELPURL": "{{Optional}} url - Information about defining [https://en.wikipedia.org/wiki/Subroutine functions] that have return values.", diff --git a/msg/json/ro.json b/msg/json/ro.json index 51c9d612d..456337c03 100644 --- a/msg/json/ro.json +++ b/msg/json/ro.json @@ -50,19 +50,16 @@ "COLOUR_PICKER_TOOLTIP": "Alege o culoare din paleta de culori.", "COLOUR_RANDOM_TITLE": "culoare aleatorie", "COLOUR_RANDOM_TOOLTIP": "Alege o culoare la întâmplare.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "colorează cu", "COLOUR_RGB_RED": "roșu", "COLOUR_RGB_GREEN": "verde", "COLOUR_RGB_BLUE": "albastru", "COLOUR_RGB_TOOLTIP": "Creează o culoare cu suma specificată de roșu, verde și albastru. Toate valorile trebuie să fie între 0 și 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "amestec", "COLOUR_BLEND_COLOUR1": "culoare 1", "COLOUR_BLEND_COLOUR2": "culoare 2", "COLOUR_BLEND_RATIO": "Raport", "COLOUR_BLEND_TOOLTIP": "Amestecă două culori cu un raport dat (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "repetă de %1 ori", "CONTROLS_REPEAT_INPUT_DO": "fă", "CONTROLS_REPEAT_TOOLTIP": "Face unele afirmații de mai multe ori.", @@ -89,7 +86,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Adaugă, elimină sau reordonează secțiuni pentru a reconfigura acest bloc if.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Adăugați o condiție în blocul if.", "CONTROLS_IF_ELSE_TOOLTIP": "Adauga o stare finala, cuprinde toata conditia din blocul if.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Returnează adevărat dacă ambele intrări sunt egale.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Returnează adevărat daca cele două intrări nu sunt egale.", "LOGIC_COMPARE_TOOLTIP_LT": "Returnează adevărat dacă prima intrare este mai mică decât a doua intrare.", @@ -105,21 +101,13 @@ "LOGIC_BOOLEAN_TRUE": "adevărat", "LOGIC_BOOLEAN_FALSE": "fals", "LOGIC_BOOLEAN_TOOLTIP": "Returnează adevărat sau fals.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "nul", "LOGIC_NULL_TOOLTIP": "returnează nul.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "dacă este adevărat", "LOGIC_TERNARY_IF_FALSE": "dacă este fals", "LOGIC_TERNARY_TOOLTIP": "Verifică condiția din „test”. Dacă condiția este adevărată, returnează valoarea „în cazul în care adevărat”; în caz contrar întoarce valoarea „în cazul în care e fals”.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Un număr.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tg", @@ -132,7 +120,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Returnează produsul celor două numere.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Returnează câtul celor două numere.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Returneaza numărul rezultat prin ridicarea primului număr la puterea celui de-al doilea.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "rădăcina pătrată", "MATH_SINGLE_TOOLTIP_ROOT": "Returnează rădăcina pătrată a unui număr.", "MATH_SINGLE_OP_ABSOLUTE": "absolută", @@ -159,10 +146,8 @@ "MATH_IS_NEGATIVE": "este negativ", "MATH_IS_DIVISIBLE_BY": "este divizibil cu", "MATH_IS_TOOLTIP": "Verifică dacă un număr este un par, impar, prim, întreg, pozitiv, negativ, sau dacă este divizibil cu un anumit număr. Returnează true sau false.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "schimbă %1 de %2", "MATH_CHANGE_TOOLTIP": "Adaugă un număr variabilei '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Rotunjirea unui număr în sus sau în jos.", "MATH_ROUND_OPERATOR_ROUND": "rotund", "MATH_ROUND_OPERATOR_ROUNDUP": "rotunjește în sus", @@ -183,21 +168,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Întoarce deviația standard a listei.", "MATH_ONLIST_OPERATOR_RANDOM": "element aleatoriu din lista", "MATH_ONLIST_TOOLTIP_RANDOM": "Returnează un element aleatoriu din listă.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "restul la %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Întoarce restul din împărțirea celor două numere.", "MATH_CONSTRAIN_TITLE": "constrânge %1 redus %2 ridicat %3", "MATH_CONSTRAIN_TOOLTIP": "Constrânge un număr să fie între limitele specificate (inclusiv).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "un număr întreg aleator de la %1 la %2", "MATH_RANDOM_INT_TOOLTIP": "Returnează un număr întreg aleator aflat între cele două limite specificate, inclusiv.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "fracții aleatorii", "MATH_RANDOM_FLOAT_TOOLTIP": "Returnează o fracție aleatoare între 0.0 (inclusiv) și 1.0 (exclusiv).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 of X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Întoarceți arctangentul punctului (X, Y) în grade de la -180 la 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "O literă, cuvânt sau linie de text.", "TEXT_JOIN_TITLE_CREATEWITH": "crează text cu", "TEXT_JOIN_TOOLTIP": "Creați o bucată de text prin unirea oricărui număr de elemente.", @@ -249,7 +229,6 @@ "TEXT_REPLACE_TOOLTIP": "Înlocuiți toate aparițiile anumitor texte într-un alt text.", "TEXT_REVERSE_MESSAGE0": "inversă %1", "TEXT_REVERSE_TOOLTIP": "Inversează ordinea caracterelor din text.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "creează listă goală", "LISTS_CREATE_EMPTY_TOOLTIP": "Returnează o listă, de lungime 0, care nu conține înregistrări de date", "LISTS_CREATE_WITH_TOOLTIP": "Creați o listă cu orice număr de elemente.", @@ -307,7 +286,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "la # de la sfarsit", "LISTS_GET_SUBLIST_END_LAST": "la ultima", "LISTS_GET_SUBLIST_TOOLTIP": "Creează o copie a porțiunii specificate dintr-o listă.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sortați %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sortați o copie a unei liste.", "LISTS_SORT_ORDER_ASCENDING": "crescător", @@ -327,7 +305,6 @@ "VARIABLES_SET": "seteaza %1 la %2", "VARIABLES_SET_TOOLTIP": "Setează această variabilă sa fie egală la intrare.", "VARIABLES_SET_CREATE_GET": "Crează 'get %1'", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "la", "PROCEDURES_DEFNORETURN_PROCEDURE": "fă ceva", "PROCEDURES_BEFORE_PARAMS": "cu:", @@ -339,9 +316,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Creează o funcție cu o ieșire.", "PROCEDURES_ALLOW_STATEMENTS": "permite declarațiile", "PROCEDURES_DEF_DUPLICATE_WARNING": "Atenție: Această funcție are parametri duplicați.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Executați funcția '%1 'definită de utilizator.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Executați funcția „%1” definită de utilizator și folosiți producția sa.", "PROCEDURES_MUTATORCONTAINER_TITLE": "intrări", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Adăugă, șterge sau reordonează parametrii de intrare ai acestei funcții.", diff --git a/msg/json/ru.json b/msg/json/ru.json index 42a117e90..f71b7cae8 100644 --- a/msg/json/ru.json +++ b/msg/json/ru.json @@ -9,6 +9,7 @@ "Mouse21", "Movses", "Okras", + "Pacha Tchernof", "Phil Rigovanov", "RedFox", "Redredsonia", @@ -16,7 +17,9 @@ "SimondR", "Teretalexev", "Thothsum", - "Vlad5250" + "UniCollab", + "Vlad5250", + "Zauzolkov" ] }, "VARIABLES_DEFAULT_NAME": "элемент", @@ -31,7 +34,7 @@ "DELETE_BLOCK": "Удалить блок", "DELETE_X_BLOCKS": "Удалить %1 блоков", "DELETE_ALL_BLOCKS": "Удалить все блоки (%1)?", - "CLEAN_UP": "Очистить блоки", + "CLEAN_UP": "Упорядочить блоки", "COLLAPSE_BLOCK": "Свернуть блок", "COLLAPSE_ALL": "Свернуть блоки", "EXPAND_BLOCK": "Развернуть блок", @@ -51,7 +54,7 @@ "NEW_VARIABLE_TYPE_TITLE": "Новый тип переменной:", "NEW_VARIABLE_TITLE": "Имя новой переменной:", "VARIABLE_ALREADY_EXISTS": "Переменная с именем '%1' уже существует.", - "VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE": "Название переменной '%1' уже используется другой типа: '%2'.", + "VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE": "Название переменной '%1' уже используется для другого типа: '%2'.", "DELETE_VARIABLE_CONFIRMATION": "Удалить %1 использований переменной '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Невозможно удалить переменную '%1', поскольку она является частью определения функции '%2'", "DELETE_VARIABLE": "Удалить переменную '%1'", @@ -112,7 +115,6 @@ "LOGIC_BOOLEAN_TRUE": "истина", "LOGIC_BOOLEAN_FALSE": "ложь", "LOGIC_BOOLEAN_TOOLTIP": "Возвращает значение истина или ложь.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "ничто", "LOGIC_NULL_TOOLTIP": "Возвращает ничто.", "LOGIC_TERNARY_HELPURL": "https://ru.wikipedia.org/wiki/Тернарная_условная_операция", @@ -122,6 +124,12 @@ "LOGIC_TERNARY_TOOLTIP": "Проверяет условие выбора. Если условие истинно, возвращает первое значение, в противном случае возвращает второе значение.", "MATH_NUMBER_HELPURL": "https://ru.wikipedia.org/wiki/Число", "MATH_NUMBER_TOOLTIP": "Число.", + "MATH_TRIG_SIN": "sin", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "arcsin", + "MATH_TRIG_ACOS": "arccos", + "MATH_TRIG_ATAN": "arctan", "MATH_ARITHMETIC_HELPURL": "https://ru.wikipedia.org/wiki/Арифметика", "MATH_ARITHMETIC_TOOLTIP_ADD": "Возвращает сумму двух чисел.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Возвращает разность двух чисел.", @@ -155,7 +163,7 @@ "MATH_IS_NEGATIVE": "отрицательное", "MATH_IS_DIVISIBLE_BY": "делится на", "MATH_IS_TOOLTIP": "Проверяет, является ли число чётным, нечётным, простым, целым, положительным, отрицательным или оно кратно определённому числу. Возвращает значение истина или ложь.", - "MATH_CHANGE_HELPURL": "https://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B8%D0%BE%D0%BC%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29#.D0.98.D0.BD.D0.BA.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D1.82", + "MATH_CHANGE_HELPURL": "https://ru.wikipedia.org/wiki/Идиома_(программирование)#Инкремент", "MATH_CHANGE_TITLE": "увеличить %1 на %2", "MATH_CHANGE_TOOLTIP": "Добавляет число к переменной '%1'.", "MATH_ROUND_HELPURL": "https://ru.wikipedia.org/wiki/Округление", @@ -180,17 +188,16 @@ "MATH_ONLIST_OPERATOR_RANDOM": "случайный элемент списка", "MATH_ONLIST_TOOLTIP_RANDOM": "Возвращает случайный элемент списка.", "MATH_MODULO_HELPURL": "https://ru.wikipedia.org/wiki/Деление_с_остатком", - "MATH_MODULO_TITLE": "остаток от %1 : %2", + "MATH_MODULO_TITLE": "остаток от %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Возвращает остаток от деления двух чисел.", "MATH_CONSTRAIN_TITLE": "ограничить %1 снизу %2 сверху %3", "MATH_CONSTRAIN_TOOLTIP": "Ограничивает число нижней и верхней границами (включительно).", "MATH_RANDOM_INT_HELPURL": "https://ru.wikipedia.org/wiki/Генератор_псевдослучайных_чисел", - "MATH_RANDOM_INT_TITLE": "случайное целое число от %1 для %2", + "MATH_RANDOM_INT_TITLE": "случайное целое число от %1 до %2", "MATH_RANDOM_INT_TOOLTIP": "Возвращает случайное число между двумя заданными пределами (включая и их).", "MATH_RANDOM_FLOAT_HELPURL": "https://ru.wikipedia.org/wiki/Генератор_псевдослучайных_чисел", - "MATH_RANDOM_FLOAT_TITLE_RANDOM": "случайное число от 0 (включительно) до 1", + "MATH_RANDOM_FLOAT_TITLE_RANDOM": "случайное число от 0.0 до 1.0 (вкл.)", "MATH_RANDOM_FLOAT_TOOLTIP": "Возвращает случайное число от 0.0 (включительно) до 1.0.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 от X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Возвращает арктангенс точки (X, Y) в градусах от -180 до 180.", "TEXT_TEXT_HELPURL": "https://ru.wikipedia.org/wiki/Строковый_тип", @@ -240,17 +247,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Запросить у пользователя число.", "TEXT_PROMPT_TOOLTIP_TEXT": "Запросить у пользователя текст.", "TEXT_COUNT_MESSAGE0": "подсчитать количество %1 в %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Подсчитать, сколько раз отрывок текста появляется в другом тексте.", "TEXT_REPLACE_MESSAGE0": "заменить %1 на %2 в %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Заменить все вхождения некоторого текста другим текстом.", "TEXT_REVERSE_MESSAGE0": "изменить порядок на обратный %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Меняет порядок символов в тексте на обратный.", "LISTS_CREATE_EMPTY_TITLE": "создать пустой список", "LISTS_CREATE_EMPTY_TOOLTIP": "Возвращает список длины 0, не содержащий данных", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Создаёт список с любым числом элементов.", "LISTS_CREATE_WITH_INPUT_WITH": "создать список из", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "список", @@ -269,6 +272,7 @@ "LISTS_GET_INDEX_GET": "взять", "LISTS_GET_INDEX_GET_REMOVE": "взять и удалить", "LISTS_GET_INDEX_REMOVE": "удалить", + "LISTS_GET_INDEX_FROM_START": "№", "LISTS_GET_INDEX_FROM_END": "№ с конца", "LISTS_GET_INDEX_FIRST": "первый", "LISTS_GET_INDEX_LAST": "последний", @@ -305,7 +309,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "по № с конца", "LISTS_GET_SUBLIST_END_LAST": "по последний", "LISTS_GET_SUBLIST_TOOLTIP": "Создаёт копию указанной части списка.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сортировать %1 %2 %3", "LISTS_SORT_TOOLTIP": "Сортировать копию списка.", "LISTS_SORT_ORDER_ASCENDING": "по возрастанию", @@ -313,13 +316,11 @@ "LISTS_SORT_TYPE_NUMERIC": "числовая", "LISTS_SORT_TYPE_TEXT": "по алфавиту", "LISTS_SORT_TYPE_IGNORECASE": "по алфавиту, без учёта регистра", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "сделать список из текста", "LISTS_SPLIT_TEXT_FROM_LIST": "собрать текст из списка", "LISTS_SPLIT_WITH_DELIMITER": "с разделителем", "LISTS_SPLIT_TOOLTIP_SPLIT": "Разбивает текст в список текстов, по разделителям.", "LISTS_SPLIT_TOOLTIP_JOIN": "Соединяет список текстов в один текст с разделителями.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "изменить порядок на обратный %1", "LISTS_REVERSE_TOOLTIP": "Изменить порядок списка на обратный.", "VARIABLES_GET_TOOLTIP": "Возвращает значение этой переменной.", @@ -327,12 +328,14 @@ "VARIABLES_SET": "присвоить %1 = %2", "VARIABLES_SET_TOOLTIP": "Присваивает переменной значение вставки.", "VARIABLES_SET_CREATE_GET": "Создать вставку %1", + "PROCEDURES_DEFNORETURN_HELPURL": "https://ru.wikipedia.org/wiki/Подпрограмма", "PROCEDURES_DEFNORETURN_TITLE": "чтобы", "PROCEDURES_DEFNORETURN_PROCEDURE": "выполнить что-то", "PROCEDURES_BEFORE_PARAMS": "с:", "PROCEDURES_CALL_BEFORE_PARAMS": "с:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Создаёт процедуру, не возвращающую значение.", "PROCEDURES_DEFNORETURN_COMMENT": "Опишите эту функцию…", + "PROCEDURES_DEFRETURN_HELPURL": "https://ru.wikipedia.org/wiki/Функция_(программирование)", "PROCEDURES_DEFRETURN_RETURN": "вернуть", "PROCEDURES_DEFRETURN_TOOLTIP": "Создаёт процедуру, возвращающую значение.", "PROCEDURES_ALLOW_STATEMENTS": "разрешить операторы", @@ -348,7 +351,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Выделить определение процедуры", "PROCEDURES_CREATE_DO": "Создать вызов '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Если первое значение истинно, возвращает второе значение.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Предупреждение: Этот блок может использоваться только внутри определения функции.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Напишите здесь что-нибудь...", "WORKSPACE_ARIA_LABEL": "Рабочая область Blockly", diff --git a/msg/json/sc.json b/msg/json/sc.json index 5a9c241ae..6e44bc658 100644 --- a/msg/json/sc.json +++ b/msg/json/sc.json @@ -29,7 +29,6 @@ "RENAME_VARIABLE_TITLE": "A is variabilis '%1' muda nòmini a:", "NEW_VARIABLE": "Variabili noa...", "NEW_VARIABLE_TITLE": "Nòmini de sa variabili noa:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Scebera unu colori de sa tauledda.", "COLOUR_RANDOM_TITLE": "Unu colori a brítiu", "COLOUR_RANDOM_TOOLTIP": "Scebera unu colori a brítiu.", @@ -43,7 +42,6 @@ "COLOUR_BLEND_COLOUR2": "colori 2", "COLOUR_BLEND_RATIO": "raportu", "COLOUR_BLEND_TOOLTIP": "Amestura duus coloris cun unu raportu (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "repiti %1 bortas", "CONTROLS_REPEAT_INPUT_DO": "fai", "CONTROLS_REPEAT_TOOLTIP": "Fait pariga de cumandus prus bortas.", @@ -70,7 +68,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Aciungi, fùlia, o assenta is partis po torrai a sètiu custu brocu si.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Aciungi una cunditzioni a su brocu si.", "CONTROLS_IF_ELSE_TOOLTIP": "Aciungi una urtima cunditzioni piga-totu a su brocu si.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Torrat berus si is inputs funt unu uguali a s'àteru.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Torrat berus si is inputs non funt unu uguali a s'àteru.", "LOGIC_COMPARE_TOOLTIP_LT": "Torrat berus si su primu input est prus piticu de s'àteru.", @@ -92,15 +89,12 @@ "LOGIC_TERNARY_IF_TRUE": "si berus", "LOGIC_TERNARY_IF_FALSE": "si frassu", "LOGIC_TERNARY_TOOLTIP": "‎Cumproa sa cunditzioni in 'cumproa'. Si sa cunditzioni est berus, torrat su valori 'si berus'; sinuncas torrat su valori 'si frassu'.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Unu numeru", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Torrat sa summa de is duus nùmerus.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Torrat sa diferèntzia de is duus nùmerus.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Torrat su produtu de is duus nùmerus.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Torrat su cuotzienti de is duus nùmerus.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Torrat su primu numeru artziau a sa potenza de su segundu nùmeru.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "arraxina cuadra", "MATH_SINGLE_TOOLTIP_ROOT": "Torrat s'arraxina cuadra de unu numeru.", "MATH_SINGLE_OP_ABSOLUTE": "assolutu", @@ -110,14 +104,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Torrat su logaritmu a basi 10 de unu numeru.", "MATH_SINGLE_TOOLTIP_EXP": "Torrat (e) a sa potèntzia de unu numeru.", "MATH_SINGLE_TOOLTIP_POW10": "Torrat (10) a sa potèntzia de unu numeru.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Torrat su sinu de unu gradu (no radianti).", "MATH_TRIG_TOOLTIP_COS": "Torrat su cosinu de unu gradu (no radianti).", "MATH_TRIG_TOOLTIP_TAN": "Torrat sa tangenti de unu gradu (no radianti).", "MATH_TRIG_TOOLTIP_ASIN": "Torrat su arcsinu de unu numeru.", "MATH_TRIG_TOOLTIP_ACOS": "Torrat su arccosinu de unu numeru.", "MATH_TRIG_TOOLTIP_ATAN": "Torrat su arctangenti de unu numeru.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Torrat una de is costantis comunas: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), o ∞ (infiniu).", "MATH_IS_EVEN": "est paris", "MATH_IS_ODD": "est dísparu", @@ -127,10 +119,8 @@ "MATH_IS_NEGATIVE": "est negativu", "MATH_IS_DIVISIBLE_BY": "fait a ddu dividi po", "MATH_IS_TOOLTIP": "Cumprova si unu numeru est paris, dìsparis, primu, intreu, positivu, negativu o si fait a ddu dividi po unu numeru giau. Torrat berus o frassu.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "muda %1 de %2", "MATH_CHANGE_TOOLTIP": "Aciungi unu numeru a sa variabili '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Arretunda unu numeru faci a susu o faci a bàsciu.", "MATH_ROUND_OPERATOR_ROUND": "arretunda", "MATH_ROUND_OPERATOR_ROUNDUP": "Arretunda faci a susu", @@ -151,18 +141,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Torrat sa deviadura standard de sa lista.", "MATH_ONLIST_OPERATOR_RANDOM": "unu item a brìtiu de sa lista", "MATH_ONLIST_TOOLTIP_RANDOM": "Torrat unu item a brìtiu de sa lista.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "arrestu de %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Torrat s'arrestu de sa divisioni de duus numerus.", "MATH_CONSTRAIN_TITLE": "custringi %1 de %2 a %3", "MATH_CONSTRAIN_TOOLTIP": "Custringi unu numeru aintru de is liminaxus giaus (cumprendius).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "numeru intreu a brítiu de %1 a %2", "MATH_RANDOM_INT_TOOLTIP": "Torrat unu numeru intreu a brìtiu intra duus nùmerus giaus (cumpresus).", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "una fratzioni a brìtiu", "MATH_RANDOM_FLOAT_TOOLTIP": "Torrat una fratzioni a brìtiu intra 0.0 (cumpresu) e 1.0 (bogau).", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Una lìtera, paràula, o linia de testu.", "TEXT_JOIN_TITLE_CREATEWITH": "scri testu cun", "TEXT_JOIN_TOOLTIP": "Fait unu testu ponendi a pari parigas de items.", @@ -282,9 +268,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Fait una funtzioni cun output.", "PROCEDURES_ALLOW_STATEMENTS": "permiti decraratzionis", "PROCEDURES_DEF_DUPLICATE_WARNING": "Amonestu: Custa funtzioni tenit parametrus duplicaus.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_CALLNORETURN_TOOLTIP": "Arròllia sa funtzione '%1' cuncordada dae s'impitadore.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_CALLRETURN_TOOLTIP": "Arròllia sa funtzione '%1' cuncordada dae s'impitadore e imprea s'output suu.", "PROCEDURES_MUTATORCONTAINER_TITLE": "inputs", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Aciungi, fùlia, o assenta is inputs a custa funtzioni.", diff --git a/msg/json/sd.json b/msg/json/sd.json index c4e18afc5..308ad1608 100644 --- a/msg/json/sd.json +++ b/msg/json/sd.json @@ -33,7 +33,6 @@ "RENAME_VARIABLE": "ڦرڻي کي نئون نالو ڏيو...", "NEW_VARIABLE": "نئون ڦرڻو...", "NEW_VARIABLE_TITLE": "ڦرڻي جو نئون نالو:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "رنگ دٻيءَ مان رنگ چونڊيو.", "COLOUR_RANDOM_TITLE": "بنا ترتيب رنگ", "COLOUR_RANDOM_TOOLTIP": "ڪو بہ ‌رنگ چونڊيو.", @@ -47,7 +46,6 @@ "COLOUR_BLEND_COLOUR2": "رنگ 2", "COLOUR_BLEND_RATIO": "تناسب", "COLOUR_BLEND_TOOLTIP": "ڄاڻايل تناسب سان ٻہ رنگ پاڻ ۾ ملايو (0.0-1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "1٪ ڀيرا ورجايو", "CONTROLS_REPEAT_INPUT_DO": "ڪريو", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "ورجايو جڏهن", @@ -57,7 +55,6 @@ "CONTROLS_IF_MSG_IF": "جيڪڏهن", "CONTROLS_IF_MSG_ELSEIF": "نہ تہ جي", "CONTROLS_IF_MSG_ELSE": "نہ تہ", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "جيڪڏهن ٻئي ان پُٽس برابر آهن تہ درست وراڻيو", "LOGIC_COMPARE_TOOLTIP_NEQ": "جيڪڏهن ٻئي ان پُٽس اڻ برابر آهن تہ درست وراڻيو", "LOGIC_COMPARE_TOOLTIP_LT": "جيڪڏهن پهريون ان پُٽ ٻين ان پُٽ کان ننڍو آهي تہ درست وراڻيو", @@ -77,7 +74,6 @@ "LOGIC_TERNARY_IF_TRUE": "جيڪڏهن سچو", "LOGIC_TERNARY_IF_FALSE": "جيڪڏهن ڪوڙو", "MATH_NUMBER_TOOLTIP": "ڪو انگ.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "ٻن انگن جي جوڙ اپت ڏيو.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "ٻنهي انگن جو تفاوت ڏيو.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "ٻنهي انگن جي ضرب اُپت ڏيو.", diff --git a/msg/json/sk.json b/msg/json/sk.json index 26a89d16f..ab400afd5 100644 --- a/msg/json/sk.json +++ b/msg/json/sk.json @@ -50,7 +50,6 @@ "DELETE_VARIABLE_CONFIRMATION": "Odstrániť %1 použití premennej '%2'?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Nie je možné zmazať premennú „%1“, pretože je súčasťou definície funkcie „%2“", "DELETE_VARIABLE": "Odstrániť premennú '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Zvoľte farbu z palety.", "COLOUR_RANDOM_TITLE": "náhodná farba", "COLOUR_RANDOM_TOOLTIP": "Zvoliť farbu náhodne.", @@ -64,7 +63,6 @@ "COLOUR_BLEND_COLOUR2": "farba 2", "COLOUR_BLEND_RATIO": "pomer", "COLOUR_BLEND_TOOLTIP": "Zmieša dve farby v danom pomere (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "opakuj %1 krát", "CONTROLS_REPEAT_INPUT_DO": "rob", "CONTROLS_REPEAT_TOOLTIP": "Opakuj určité príkazy viackrát.", @@ -91,7 +89,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Pridať, odstrániť alebo zmeniť poradie oddielov tohto \"ak\" bloku.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Pridať podmienku k \"ak\" bloku.", "CONTROLS_IF_ELSE_TOOLTIP": "Pridať poslednú záchytnú podmienku k \"ak\" bloku.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Vráť hodnotu pravda, ak sú vstupy rovnaké.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Vráť hodnotu pravda, ak vstupy nie sú rovnaké.", "LOGIC_COMPARE_TOOLTIP_LT": "Vráť hodnotu pravda, ak prvý vstup je menší než druhý.", @@ -113,18 +110,15 @@ "LOGIC_TERNARY_IF_TRUE": "ak pravda", "LOGIC_TERNARY_IF_FALSE": "ak nepravda", "LOGIC_TERNARY_TOOLTIP": "Skontroluj podmienku testom. Ak je podmienka pravda, vráť hodnotu \"ak pravda\", inak vráť hodnotu \"ak nepravda\".", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Číslo.", "MATH_TRIG_ASIN": "arcsin", "MATH_TRIG_ACOS": "arccos", "MATH_TRIG_ATAN": "arctan", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Vráť súčet dvoch čísel.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Vráť rozdiel dvoch čísel.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Vráť súčin dvoch čísel.", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "Vráť podiel dvoch čísel.", "MATH_ARITHMETIC_TOOLTIP_POWER": "Vráť prvé číslo umocnené druhým.", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "druhá odmocnina", "MATH_SINGLE_TOOLTIP_ROOT": "Vráť druhú odmocninu čísla.", "MATH_SINGLE_OP_ABSOLUTE": "absolútna hodnota", @@ -134,7 +128,6 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Vráť logaritmus čísla so základom 10.", "MATH_SINGLE_TOOLTIP_EXP": "Vráť e umocnené číslom.", "MATH_SINGLE_TOOLTIP_POW10": "Vráť 10 umocnené číslom.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Vráť sínus uhla (v stupňoch).", "MATH_TRIG_TOOLTIP_COS": "Vráť kosínus uhla (v stupňoch).", "MATH_TRIG_TOOLTIP_TAN": "Vráť tangens uhla (v stupňoch).", @@ -151,10 +144,8 @@ "MATH_IS_NEGATIVE": "je záporné", "MATH_IS_DIVISIBLE_BY": "je deliteľné", "MATH_IS_TOOLTIP": "Skontroluj či je číslo párne, nepárne, celé, kladné, záporné alebo deliteľné určitým číslom. Vráť hodnotu pravda alebo nepravda.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "zmeniť %1 o %2", "MATH_CHANGE_TOOLTIP": "Pridaj číslo do premennej \"%1\".", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Zaokrúhli číslo nahor alebo nadol.", "MATH_ROUND_OPERATOR_ROUND": "zaokrúhli", "MATH_ROUND_OPERATOR_ROUNDUP": "zaokrúhli nahor", @@ -175,21 +166,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Vráť smeroddajnú odchýlku zoznamu.", "MATH_ONLIST_OPERATOR_RANDOM": "náhodný prvok zoznamu", "MATH_ONLIST_TOOLTIP_RANDOM": "Vráť náhodne zvolený prvok zoznamu.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "zvyšok po delení %1 + %2", "MATH_MODULO_TOOLTIP": "Vráť zvyšok po delení jedného čísla druhým.", "MATH_CONSTRAIN_TITLE": "obmedz %1 od %2 do %3", "MATH_CONSTRAIN_TOOLTIP": "Obmedzí číslo do zadaných hraníc (vrátane).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "náhodné celé číslo od %1 do %2", "MATH_RANDOM_INT_TOOLTIP": "Vráť náhodné celé číslo z určeného intervalu (vrátane).", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "náhodné číslo od 0 do 1", "MATH_RANDOM_FLOAT_TOOLTIP": "Vráť náhodné číslo z intervalu 0.0 (vrátane) až 1.0.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 of X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Vráťte arktangent bodu (X, Y) v stupňoch od -180 do 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Písmeno, slovo alebo riadok textu.", "TEXT_JOIN_TITLE_CREATEWITH": "vytvor text z", "TEXT_JOIN_TOOLTIP": "Vytvor text spojením určitého počtu prvkov.", @@ -243,7 +229,6 @@ "TEXT_REVERSE_TOOLTIP": "Obrátiť poradie písmen v texte.", "LISTS_CREATE_EMPTY_TITLE": "prázdny zoznam", "LISTS_CREATE_EMPTY_TOOLTIP": "Vráti zoznam nulovej dĺžky, ktorý neobsahuje žiadne prvky.", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Vytvor zoznam s ľubovoľným počtom prvkov.", "LISTS_CREATE_WITH_INPUT_WITH": "vytvor zoznam s", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "zoznam", @@ -298,7 +283,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "po # od konca", "LISTS_GET_SUBLIST_END_LAST": "po koniec", "LISTS_GET_SUBLIST_TOOLTIP": "Skopíruje určený úsek zoznamu.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "zoradiť %1 %2 %3", "LISTS_SORT_TOOLTIP": "Zoradiť kópiu zoznamu.", "LISTS_SORT_ORDER_ASCENDING": "Vzostupne", diff --git a/msg/json/skr-arab.json b/msg/json/skr-arab.json index dc342da18..187cb3691 100644 --- a/msg/json/skr-arab.json +++ b/msg/json/skr-arab.json @@ -5,10 +5,12 @@ ] }, "VARIABLES_DEFAULT_NAME": "آئٹم", + "UNNAMED_KEY": "بغیر ناں", "TODAY": "اڄ", "DUPLICATE_BLOCK": "ڈپلیکیٹ", "ADD_COMMENT": "تبصرہ کرو", "REMOVE_COMMENT": "رائے مٹاؤ", + "DUPLICATE_COMMENT": " نقل تبصرہ", "EXTERNAL_INPUTS": "باہرلے انپٹ", "INLINE_INPUTS": "ان لائن ان پٹ", "DELETE_BLOCK": "بلاک مٹاؤ", @@ -29,7 +31,6 @@ "NEW_VARIABLE": "متغیر بݨاؤ۔۔۔", "NEW_VARIABLE_TITLE": "نواں متغیر ناں:", "VARIABLE_ALREADY_EXISTS": "'%1' نامی متغیر پہلے موجود ہے۔", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_RANDOM_TITLE": "بنا ترتيب رنگ", "COLOUR_RGB_TITLE": "نال رن٘گ", "COLOUR_RGB_RED": "رتا", @@ -55,7 +56,6 @@ "LOGIC_TERNARY_IF_TRUE": "اگر سچ ہے", "LOGIC_TERNARY_IF_FALSE": "اگر کوڑ ہے", "MATH_NUMBER_TOOLTIP": "ہک عدد", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_SINGLE_OP_ROOT": "مربعی جذر", "MATH_SINGLE_OP_ABSOLUTE": "مطلق", "MATH_IS_EVEN": "جفت ہے", diff --git a/msg/json/sl.json b/msg/json/sl.json index 09a48be4d..8e80cc25c 100644 --- a/msg/json/sl.json +++ b/msg/json/sl.json @@ -24,8 +24,8 @@ "DELETE_X_BLOCKS": "Izbriši bloke (%1)", "DELETE_ALL_BLOCKS": "Izbrišem vse bloke (%1)?", "CLEAN_UP": "Ponastavi bloke", - "COLLAPSE_BLOCK": "Skrči blok", - "COLLAPSE_ALL": "Skrči bloke", + "COLLAPSE_BLOCK": "Strni blok", + "COLLAPSE_ALL": "Strni bloke", "EXPAND_BLOCK": "Razširi blok", "EXPAND_ALL": "Razširi bloke", "DISABLE_BLOCK": "Onemogoči blok", @@ -51,13 +51,11 @@ "COLOUR_PICKER_TOOLTIP": "Izberite barvo s palete.", "COLOUR_RANDOM_TITLE": "naključna barva", "COLOUR_RANDOM_TOOLTIP": "Izberite naključno barvo.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "določena barva", "COLOUR_RGB_RED": "rdeča", "COLOUR_RGB_GREEN": "zelena", "COLOUR_RGB_BLUE": "modra", "COLOUR_RGB_TOOLTIP": "Ustvari barvo z določeno količino rdeče, zelene in modre. Vse vrednosti morajo biti med 0 in 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "mešanica", "COLOUR_BLEND_COLOUR1": "barva 1", "COLOUR_BLEND_COLOUR2": "barva 2", @@ -67,24 +65,19 @@ "CONTROLS_REPEAT_TITLE": "ponovi %1-krat", "CONTROLS_REPEAT_INPUT_DO": "izvedi", "CONTROLS_REPEAT_TOOLTIP": "Določeni stavki se izvedejo večkrat.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "ponavljaj, dokler", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "ponavljaj, dokler ni", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Določeni stavki se izvajajo, dokler je vrednost resnična.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Določeni stavki se izvajajo, dokler je vrednost neresnična.", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "Vrednost spremenljivke »%1« se v določenem koraku spreminja od začetnega do končnega števila. Pri tem se izvedejo določeni bloki.", "CONTROLS_FOR_TITLE": "štej s/z %1 od %2 do %3 po %4", - "CONTROLS_FOREACH_HELPURL": "https://github.com/google/blockly/wiki/Loops#for-each", "CONTROLS_FOREACH_TITLE": "za vsak element %1 v seznamu %2", "CONTROLS_FOREACH_TOOLTIP": "Za vsak element v seznamu nastavi spremenljivko »%1« na ta element. Pri tem se izvedejo določeni stavki.", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "prekini zanko", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "nadaljuj z naslednjo ponovitvijo zanke", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Prekine vsebujočo zanko.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Preskoči preostanek te zanke in nadaljuje z naslednjo ponovitvijo.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Pozor: Ta blok lahko uporabite znotraj zanke samo enkrat.", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "Če je vrednost resnična, izvedi določene stavke.", "CONTROLS_IF_TOOLTIP_2": "Če je vrednost resnična, izvedi prvo skupino stavkov. Sicer izvedi drugo skupino stavkov.", "CONTROLS_IF_TOOLTIP_3": "Če je prva vrednost resnična, izvedi prvo skupino stavkov. Sicer, če je resnična druga vrednost, izvedi drugo skupino stavkov.", @@ -95,40 +88,29 @@ "CONTROLS_IF_IF_TOOLTIP": "Dodajte, odstranite ali spremenite vrstni red odsekov za ponovno nastavitev bloka »če«.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Dodajte bloku »če« pogoj.", "CONTROLS_IF_ELSE_TOOLTIP": "Dodajte bloku »če« končni pogoj.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Vrne resnično, če sta vnosa enaka.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Vrne resnično, če vnosa nista enaka.", "LOGIC_COMPARE_TOOLTIP_LT": "Vrne resnično, če je prvi vnos manjši od drugega.", "LOGIC_COMPARE_TOOLTIP_LTE": "Vrne resnično, če je prvi vnos manjši ali enak drugemu.", "LOGIC_COMPARE_TOOLTIP_GT": "Vrne resnično, če je prvi vnos večji od drugega.", "LOGIC_COMPARE_TOOLTIP_GTE": "Vrne resnično, če je prvi vnos večji ali enak drugemu.", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "Vrne resnično, če sta oba vnosa resnična.", "LOGIC_OPERATION_AND": "in", "LOGIC_OPERATION_TOOLTIP_OR": "Vrne resnično, če je vsaj eden od vnosov resničen.", "LOGIC_OPERATION_OR": "ali", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "ne %1", "LOGIC_NEGATE_TOOLTIP": "Vrne resnično, če je vnos neresničen. Vrne neresnično, če je vnos resničen.", - "LOGIC_BOOLEAN_HELPURL": "https://github.com/google/blockly/wiki/Logic#values", "LOGIC_BOOLEAN_TRUE": "resnično", "LOGIC_BOOLEAN_FALSE": "neresnično", "LOGIC_BOOLEAN_TOOLTIP": "Vrne resnično ali neresnično.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "prazno", "LOGIC_NULL_TOOLTIP": "Vrne prazno.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "če resnično", "LOGIC_TERNARY_IF_FALSE": "če neresnično", "LOGIC_TERNARY_TOOLTIP": "Preveri pogoj v »testu«. Če je pogoj resničen, potem vrne vrednost »če resnično«; sicer vrne vrednost »če neresnično«.", "MATH_NUMBER_HELPURL": "https://sl.wikipedia.org/wiki/%C5%A0tevilo", "MATH_NUMBER_TOOLTIP": "Število.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -195,13 +177,10 @@ "MATH_MODULO_HELPURL": "https://sl.wikipedia.org/wiki/Modulo", "MATH_MODULO_TITLE": "ostanek pri %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Vrne ostanek pri deljenju dveh števil.", - "MATH_CONSTRAIN_HELPURL": "https://en.wikipedia.org/wiki/Clamping_%28graphics%29", "MATH_CONSTRAIN_TITLE": "omeji %1 na najmanj %2 in največ %3", "MATH_CONSTRAIN_TOOLTIP": "Omeji število, da bo med določenima (vključenima) mejama.", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "naključno število med %1 in %2", "MATH_RANDOM_INT_TOOLTIP": "Vrne naključno število med dvema določenima mejama, vključno z mejama.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "naključni ulomek", "MATH_RANDOM_FLOAT_TOOLTIP": "Vrne naključni ulomek med (vključno) 0,0 in 1,0 (izključno).", "MATH_ATAN2_HELPURL": "https://sl.wikipedia.org/wiki/Atan2", @@ -209,27 +188,21 @@ "MATH_ATAN2_TOOLTIP": "Vrne arkus tangens točke (X, Y) v stopinjah med −180 in 180.", "TEXT_TEXT_HELPURL": "https://sl.wikipedia.org/wiki/Niz", "TEXT_TEXT_TOOLTIP": "Črka, beseda ali vrstica besedila.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "ustvari besedilo iz", "TEXT_JOIN_TOOLTIP": "Ustvari besedilo tako, da združi poljubno število elementov.", "TEXT_CREATE_JOIN_TITLE_JOIN": "združi", "TEXT_CREATE_JOIN_TOOLTIP": "Doda, odstrani ali spremeni vrstni red odsekov za ponovno nastavitev tega bloka besedila.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "Doda element k besedilu.", - "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_APPEND_TITLE": "k %1 dodaj besedilo %2", "TEXT_APPEND_TOOLTIP": "Doda besedilo k spremenljivki »%1«.", - "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "dolžina %1", "TEXT_LENGTH_TOOLTIP": "Vrne število znakov (vključno s presledki) v določenem besedilu.", - "TEXT_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Text#checking-for-empty-text", "TEXT_ISEMPTY_TITLE": "%1 je prazno", "TEXT_ISEMPTY_TOOLTIP": "Vrne resnično, če je določeno besedilo prazno.", - "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "Vrne mesto (indeks) prve/zadnje pojavitve drugega besedila v prvem besedilu. Če besedila ne najde, vrne %1.", "TEXT_INDEXOF_TITLE": "v besedilu %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "najdi prvo pojavitev besedila", "TEXT_INDEXOF_OPERATOR_LAST": "najdi zadnjo pojavitev besedila", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "v besedilu %1 %2", "TEXT_CHARAT_FROM_START": "vrni črko št.", "TEXT_CHARAT_FROM_END": "vrni črko št. od konca", @@ -238,7 +211,6 @@ "TEXT_CHARAT_RANDOM": "vrni naključno črko", "TEXT_CHARAT_TOOLTIP": "Vrne črko na določenem mestu.", "TEXT_GET_SUBSTRING_TOOLTIP": "Vrne določen del besedila.", - "TEXT_GET_SUBSTRING_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "iz besedila", "TEXT_GET_SUBSTRING_START_FROM_START": "vrni podniz od črke št.", "TEXT_GET_SUBSTRING_START_FROM_END": "vrni podniz od črke št. od konca", @@ -246,20 +218,16 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "do črke št.", "TEXT_GET_SUBSTRING_END_FROM_END": "do črke št. od konca", "TEXT_GET_SUBSTRING_END_LAST": "do zadnje črke", - "TEXT_CHANGECASE_HELPURL": "https://github.com/google/blockly/wiki/Text#adjusting-text-case", "TEXT_CHANGECASE_TOOLTIP": "Vrne kopijo besedila v drugi obliki.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "v VELIKE ČRKE", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "v male črke", "TEXT_CHANGECASE_OPERATOR_TITLECASE": "v Velike Začetnice", - "TEXT_TRIM_HELPURL": "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces", "TEXT_TRIM_TOOLTIP": "Vrne kopijo besedila z odstranjenimi presledki z ene ali obeh strani.", "TEXT_TRIM_OPERATOR_BOTH": "odstrani presledke z obeh strani", "TEXT_TRIM_OPERATOR_LEFT": "odstrani presledke z leve strani", "TEXT_TRIM_OPERATOR_RIGHT": "odstrani presledke z desne strani", - "TEXT_PRINT_HELPURL": "https://github.com/google/blockly/wiki/Text#printing-text", "TEXT_PRINT_TITLE": "izpiši %1", "TEXT_PRINT_TOOLTIP": "Izpiše določeno besedilo, številko ali drugo vrednost.", - "TEXT_PROMPT_HELPURL": "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user", "TEXT_PROMPT_TYPE_TEXT": "vprašaj za besedilo s sporočilom", "TEXT_PROMPT_TYPE_NUMBER": "vprašaj za številko s sporočilom", "TEXT_PROMPT_TOOLTIP_NUMBER": "Vpraša uporabnika za vnos številke.", @@ -270,26 +238,20 @@ "TEXT_REPLACE_TOOLTIP": "Zamenja vse pojavitve besedila v drugem besedilu.", "TEXT_REVERSE_MESSAGE0": "obrni %1", "TEXT_REVERSE_TOOLTIP": "Obrne vrstni red znakov v besedilu.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "ustvari prazen seznam", "LISTS_CREATE_EMPTY_TOOLTIP": "Vrne seznam dolžine 0, ki ne vsebuje nobenih podatkovnih zapisov.", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Ustvari seznam s poljubnim številom elementov.", "LISTS_CREATE_WITH_INPUT_WITH": "ustvari seznam iz", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "seznam", "LISTS_CREATE_WITH_CONTAINER_TOOLTIP": "Doda, odstrani ali spremeni vrstni red blokov seznama.", "LISTS_CREATE_WITH_ITEM_TOOLTIP": "Doda element v seznam.", - "LISTS_REPEAT_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_REPEAT_TOOLTIP": "Ustvari seznam iz dane vrednosti z določenim številom ponovitev.", "LISTS_REPEAT_TITLE": "ustvari seznam z elementom %1, ki se ponovi %2-krat", - "LISTS_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Lists#length-of", "LISTS_LENGTH_TITLE": "dolžina %1", "LISTS_LENGTH_TOOLTIP": "Vrne dolžino seznama.", - "LISTS_ISEMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#is-empty", "LISTS_ISEMPTY_TITLE": "%1 je prazen", "LISTS_ISEMPTY_TOOLTIP": "Vrne resnično, če je seznam prazen.", "LISTS_INLIST": "v seznamu", - "LISTS_INDEX_OF_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", "LISTS_INDEX_OF_FIRST": "najdi prvo pojavitev elementa", "LISTS_INDEX_OF_LAST": "najdi zadnjo pojavitev elementa", "LISTS_INDEX_OF_TOOLTIP": "Vrne mesto (indeks) prve/zadnje pojavitve elementa v seznamu. Če elementa ne najde, vrne %1.", @@ -315,7 +277,6 @@ "LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST": "Odstrani prvi element seznama.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST": "Odstrani zadnji element seznama.", "LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM": "Odstrani naključni element seznama.", - "LISTS_SET_INDEX_HELPURL": "https://github.com/google/blockly/wiki/Lists#in-list--set", "LISTS_SET_INDEX_SET": "nastavi na", "LISTS_SET_INDEX_INSERT": "vstavi na", "LISTS_SET_INDEX_INPUT_TO": "element", @@ -327,7 +288,6 @@ "LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST": "Vstavi element na začetek seznama.", "LISTS_SET_INDEX_TOOLTIP_INSERT_LAST": "Doda element na konec seznama.", "LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM": "Vstavi element na naključno mesto v seznamu.", - "LISTS_GET_SUBLIST_HELPURL": "https://github.com/google/blockly/wiki/Lists#getting-a-sublist", "LISTS_GET_SUBLIST_START_FROM_START": "ustvari podseznam od mesta št.", "LISTS_GET_SUBLIST_START_FROM_END": "ustvari podseznam od mesta št. od konca", "LISTS_GET_SUBLIST_START_FIRST": "ustvari podseznam od prvega mesta", @@ -335,7 +295,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "do mesta št. od konca", "LISTS_GET_SUBLIST_END_LAST": "do zadnjega mesta", "LISTS_GET_SUBLIST_TOOLTIP": "Ustvari kopijo določenega dela seznama.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "uredi %1 %2 %3", "LISTS_SORT_TOOLTIP": "Uredi kopijo seznama.", "LISTS_SORT_ORDER_ASCENDING": "naraščajoče", @@ -343,7 +302,6 @@ "LISTS_SORT_TYPE_NUMERIC": "številsko", "LISTS_SORT_TYPE_TEXT": "abecedno", "LISTS_SORT_TYPE_IGNORECASE": "abecedno, prezri velikost črk", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "ustvari seznam iz besedila", "LISTS_SPLIT_TEXT_FROM_LIST": "ustvari besedilo iz seznama", "LISTS_SPLIT_WITH_DELIMITER": "z ločilom", @@ -351,21 +309,17 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Združi seznam besedil v eno besedilo z ločilom med besedili.", "LISTS_REVERSE_MESSAGE0": "obrni %1", "LISTS_REVERSE_TOOLTIP": "Obrne kopijo seznama.", - "VARIABLES_GET_HELPURL": "https://github.com/google/blockly/wiki/Variables#get", "VARIABLES_GET_TOOLTIP": "Vrne vrednost spremenljivke.", "VARIABLES_GET_CREATE_SET": "Ustvari »nastavi %1«", - "VARIABLES_SET_HELPURL": "https://github.com/google/blockly/wiki/Variables#set", "VARIABLES_SET": "nastavi %1 na %2", "VARIABLES_SET_TOOLTIP": "Nastavi, da je vrednost spremenljivke enaka vnosu.", "VARIABLES_SET_CREATE_GET": "Ustvari »vrni %1«", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "izvedi", "PROCEDURES_DEFNORETURN_PROCEDURE": "nekaj", "PROCEDURES_BEFORE_PARAMS": "s/z:", "PROCEDURES_CALL_BEFORE_PARAMS": "s/z:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Ustvari funkcijo brez izhoda.", "PROCEDURES_DEFNORETURN_COMMENT": "Opiši funkcijo ...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "vrni", "PROCEDURES_DEFRETURN_TOOLTIP": "Ustvari funkcijo z izhodom.", "PROCEDURES_ALLOW_STATEMENTS": "dovoli stavke", @@ -381,7 +335,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Označi blok funkcije", "PROCEDURES_CREATE_DO": "Ustvari »%1«", "PROCEDURES_IFRETURN_TOOLTIP": "Če je vrednost resnična, vrne drugo vrednost.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Pozor: Ta blok lahko uporabite samo v bloku funkcije.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Povej nekaj ...", "WORKSPACE_ARIA_LABEL": "Blocklyjev delovni prostor", diff --git a/msg/json/sq.json b/msg/json/sq.json index eae51aeb7..31a5c2cb6 100644 --- a/msg/json/sq.json +++ b/msg/json/sq.json @@ -47,13 +47,11 @@ "COLOUR_PICKER_TOOLTIP": "Zgjidh nje ngjyre nga nje game ngjyrash.", "COLOUR_RANDOM_TITLE": "ngjyre e rastesishme", "COLOUR_RANDOM_TOOLTIP": "Zgjidhni një ngjyrë në mënyrë të rastësishme.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "ngjyre me", "COLOUR_RGB_RED": "e kuqe", "COLOUR_RGB_GREEN": "jeshile", "COLOUR_RGB_BLUE": "blu", "COLOUR_RGB_TOOLTIP": "Krijo një ngjyrë me shumën e specifikuar te te kuqes, te gjelbëres, dhe bluse. Te gjitha vlerat duhet te jene mes 0 dhe 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "Përzierje", "COLOUR_BLEND_COLOUR1": "Ngjyra 1", "COLOUR_BLEND_COLOUR2": "Ngjyra 2", @@ -112,11 +110,7 @@ "LOGIC_TERNARY_TOOLTIP": "Kontrollo kushtin në 'test'. Nëse kushti është i saktë, kthen vlerën 'nëse e saktë'; përndryshe kthen vlerën 'nëse e pasaktë'.", "MATH_NUMBER_HELPURL": "http://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Një numër.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", "MATH_MULTIPLICATION_SYMBOL": "x", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -191,7 +185,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "http://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "fraksioni i rastësishëm", "MATH_RANDOM_FLOAT_TOOLTIP": "Kthe fraksionin e rastësishëm në mes të 0.0 (përfshirëse) dhe 1.0 (jopërfshirëse).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 of X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Ktheni arkangjentin e pikës (X, Y) në gradë nga -180 në 180.", "TEXT_TEXT_HELPURL": "http://en.wikipedia.org/wiki/String_(computer_science)", @@ -241,13 +234,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Kerkoji perdoruesit nje numer.", "TEXT_PROMPT_TOOLTIP_TEXT": "Kerkoji perdoruesit ca tekst.", "TEXT_COUNT_MESSAGE0": "numro %1 në %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Numrin sa herë paraqitet një tekst brenda një teksti tjetër.", "TEXT_REPLACE_MESSAGE0": "zëvendëso %1 me %2 në %3", "TEXT_REPLACE_TOOLTIP": "Zëvendëso të gjitha paraqitjet e një teksti brenda një teksti tjetër.", "TEXT_REVERSE_MESSAGE0": "kthe %1", "TEXT_REVERSE_TOOLTIP": "Kthen renditjen e karaktereve në tekst.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "krijo një listë të zbrazët", "LISTS_CREATE_EMPTY_TOOLTIP": "Kthen një listë, te gjatësisë 0, duke mos përmbajtur asnjë regjistrim të të dhënave", "LISTS_CREATE_WITH_TOOLTIP": "Krijo një listë me ndonjë numbër të sendeve.", @@ -305,7 +296,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "tek # nga fundi", "LISTS_GET_SUBLIST_END_LAST": "tek i fundit", "LISTS_GET_SUBLIST_TOOLTIP": "Krijon në kopje të pjesës së specifikuar të listës.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "rendit %1 %2 %3", "LISTS_SORT_TOOLTIP": "Rendit një kopje të listës.", "LISTS_SORT_ORDER_ASCENDING": "ngjitje", @@ -325,21 +315,17 @@ "VARIABLES_SET": "vendos %1 ne %2", "VARIABLES_SET_TOOLTIP": "Vendos kete variable te jete e barabarte me te dhenat ne hyrje.", "VARIABLES_SET_CREATE_GET": "Krijo 'merr %1", - "PROCEDURES_DEFNORETURN_HELPURL": "http://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "te", "PROCEDURES_DEFNORETURN_PROCEDURE": "bëj diqka", "PROCEDURES_BEFORE_PARAMS": "me:", "PROCEDURES_CALL_BEFORE_PARAMS": "me:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Krijon një funksion pa dalje.", "PROCEDURES_DEFNORETURN_COMMENT": "Përshkruaj këtë funksion...", - "PROCEDURES_DEFRETURN_HELPURL": "http://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "rikthe", "PROCEDURES_DEFRETURN_TOOLTIP": "Krijon një funksion me një dalje.", "PROCEDURES_ALLOW_STATEMENTS": "lejo deklaratat", "PROCEDURES_DEF_DUPLICATE_WARNING": "Paralajmërim: Ky funksion ka parametra të dyfishuar.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Lësho funksionin e definuar nga përdoruesi '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Lëho funksionin e definuar nga përdoruesi '%1' dhe përdor daljen e tij.", "PROCEDURES_MUTATORCONTAINER_TITLE": "Informacioni i futur", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Shto, hiq, ose rirendit inputet e këtij funksioni.", diff --git a/msg/json/sr-latn.json b/msg/json/sr-latn.json index 4dbffcc8d..c38a6ca60 100644 --- a/msg/json/sr-latn.json +++ b/msg/json/sr-latn.json @@ -39,13 +39,11 @@ "COLOUR_PICKER_TOOLTIP": "Izaberite boju sa palete.", "COLOUR_RANDOM_TITLE": "slučajna boja", "COLOUR_RANDOM_TOOLTIP": "Izaberite boju nasumice.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "boja sa", "COLOUR_RGB_RED": "crvena", "COLOUR_RGB_GREEN": "zelena", "COLOUR_RGB_BLUE": "plava", "COLOUR_RGB_TOOLTIP": "Kreiraj boju sa određenom količinom crvene,zelene, i plave. Sve vrednosti moraju biti između 0 i 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "pomešaj", "COLOUR_BLEND_COLOUR1": "boja 1", "COLOUR_BLEND_COLOUR2": "boja 2", @@ -94,28 +92,19 @@ "LOGIC_BOOLEAN_TRUE": "tačno", "LOGIC_BOOLEAN_FALSE": "netačno", "LOGIC_BOOLEAN_TOOLTIP": "Vraća ili tačno ili netačno.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "bez vrednosti", "LOGIC_NULL_TOOLTIP": "Vraća „bez vrednosti“.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "proba", "LOGIC_TERNARY_IF_TRUE": "ako je tačno", "LOGIC_TERNARY_IF_FALSE": "ako je netačno", "LOGIC_TERNARY_TOOLTIP": "Proveri uslov u 'test'. Ako je uslov tačan, tada vraća 'if true' vrednost; u drugom slučaju vraća 'if false' vrednost.", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "Neki broj.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", "MATH_TRIG_ASIN": "arc sin", "MATH_TRIG_ACOS": "arc cos", "MATH_TRIG_ATAN": "arc tan", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_ARITHMETIC_TOOLTIP_ADD": "Vratite zbir dva broja.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Vraća razliku dva broja.", "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "Vraća proizvod dva broja.", @@ -148,7 +137,6 @@ "MATH_IS_NEGATIVE": "je negativan", "MATH_IS_DIVISIBLE_BY": "je deljiv sa", "MATH_IS_TOOLTIP": "Provjerava da li je broj paran, neparan, prost, cio, pozitivan, negativan, ili da li je deljiv sa određenim brojem. Vraća tačno ili netačno.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "promeni %1 za %2", "MATH_CHANGE_TOOLTIP": "Dodajte broj promenljivoj „%1“.", "MATH_ROUND_HELPURL": "https://sr.wikipedia.org/wiki/Zaokruživanje", @@ -230,15 +218,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Pitajte korisnika za broj.", "TEXT_PROMPT_TOOLTIP_TEXT": "Pitajte korisnika za unos teksta.", "TEXT_COUNT_MESSAGE0": "broj %1 u %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Broji koliko puta se neki tekst pojavljuje unutar nekog drugog teksta.", "TEXT_REPLACE_MESSAGE0": "zamena %1 sa %2 u %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Zamena svih pojava nekog teksta unutar nekog drugog teksta.", "TEXT_REVERSE_MESSAGE0": "obrnuto %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Obrće redosled karaktera u tekstu.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "napravi prazan spisak", "LISTS_CREATE_EMPTY_TOOLTIP": "vraća listu, dužine 0, ne sadržavajući evidenciju podataka", "LISTS_CREATE_WITH_TOOLTIP": "Kreiraj listu sa bilo kojim brojem stavki.", @@ -296,7 +280,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "do # od kraja", "LISTS_GET_SUBLIST_END_LAST": "do poslednje", "LISTS_GET_SUBLIST_TOOLTIP": "Pravi kopiju određenog dela liste.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sortiraj %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sortirajte kopiju spiska.", "LISTS_SORT_ORDER_ASCENDING": "rastuće", @@ -309,7 +292,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "sa razdvajanje", "LISTS_SPLIT_TOOLTIP_SPLIT": "Podeliti tekst u listu tekstova, razbijanje na svakom graničnik.", "LISTS_SPLIT_TOOLTIP_JOIN": "Da se pridruži listu tekstova u jedan tekst, podeljenih za razdvajanje.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "obrnuto %1", "LISTS_REVERSE_TOOLTIP": "Obrni kopiju spiska.", "VARIABLES_GET_TOOLTIP": "Vraća vrednost ove promenljive.", @@ -317,21 +299,17 @@ "VARIABLES_SET": "postavi %1 u %2", "VARIABLES_SET_TOOLTIP": "Postavlja promenljivu tako da bude jednaka ulazu.", "VARIABLES_SET_CREATE_GET": "Napravi „preuzmi %1“", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "da", "PROCEDURES_DEFNORETURN_PROCEDURE": "uradite nešto", "PROCEDURES_BEFORE_PARAMS": "sa:", "PROCEDURES_CALL_BEFORE_PARAMS": "sa:", "PROCEDURES_DEFNORETURN_TOOLTIP": "Pravi funkciju bez izlaza.", "PROCEDURES_DEFNORETURN_COMMENT": "Opisati ovu funkciju...", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "vrati", "PROCEDURES_DEFRETURN_TOOLTIP": "Pravi funkciju sa izlazom.", "PROCEDURES_ALLOW_STATEMENTS": "dozvoliti izreke", "PROCEDURES_DEF_DUPLICATE_WARNING": "Upozorenje: Ova funkcija ima duplikate parametara.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Pokrenite prilagođenu funkciju „%1“.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Pokrenite prilagođenu funkciju „%1“ i koristi njen izlaz.", "PROCEDURES_MUTATORCONTAINER_TITLE": "ulazi", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Da dodate, uklonite ili pereuporяdočitь ulaza za ovu funkciju.", diff --git a/msg/json/sr.json b/msg/json/sr.json index bf3c42a06..ab6714d5f 100644 --- a/msg/json/sr.json +++ b/msg/json/sr.json @@ -53,13 +53,11 @@ "COLOUR_PICKER_TOOLTIP": "Одаберите боју са палете.", "COLOUR_RANDOM_TITLE": "случајна боја", "COLOUR_RANDOM_TOOLTIP": "Одаберите боју насумично.", - "COLOUR_RGB_HELPURL": "http://www.december.com/html/spec/colorper.html", "COLOUR_RGB_TITLE": "боја са", "COLOUR_RGB_RED": "црвена", "COLOUR_RGB_GREEN": "зелена", "COLOUR_RGB_BLUE": "плава", "COLOUR_RGB_TOOLTIP": "Направите боју са одређеном количином црвене, зелене и плаве. Све вредности морају бити између 0 и 100.", - "COLOUR_BLEND_HELPURL": "http://meyerweb.com/eric/tools/color-blend/", "COLOUR_BLEND_TITLE": "помешај", "COLOUR_BLEND_COLOUR1": "боја 1", "COLOUR_BLEND_COLOUR2": "боја 2", @@ -108,21 +106,14 @@ "LOGIC_BOOLEAN_TRUE": "тачно", "LOGIC_BOOLEAN_FALSE": "нетачно", "LOGIC_BOOLEAN_TOOLTIP": "Враћа или „тачно“ или „нетачно“.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "без вредности", "LOGIC_NULL_TOOLTIP": "Враћа „без вредности“.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "проба", "LOGIC_TERNARY_IF_TRUE": "ако је тачно", "LOGIC_TERNARY_IF_FALSE": "ако је нетачно", "LOGIC_TERNARY_TOOLTIP": "Проверите услов у „проба”. Ако је услов тачан, тада враћа „ако је тачно” вредност; у другом случају враћа „ако је нетачно” вредност.", "MATH_NUMBER_HELPURL": "https://sr.wikipedia.org/wiki/Број", "MATH_NUMBER_TOOLTIP": "Број.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "син", "MATH_TRIG_COS": "цос", "MATH_TRIG_TAN": "тан", @@ -162,7 +153,6 @@ "MATH_IS_NEGATIVE": "је негативан", "MATH_IS_DIVISIBLE_BY": "је дељив са", "MATH_IS_TOOLTIP": "Проверава да ли је број паран, непаран, прост, цео, позитиван, негативан, или дељив са одређеним бројем. Враћа „тачно” или „нетачно”.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "промени %1 за %2", "MATH_CHANGE_TOOLTIP": "Додаје број променљивој „%1”.", "MATH_ROUND_HELPURL": "https://sr.wikipedia.org/wiki/Заокруживање", @@ -170,7 +160,6 @@ "MATH_ROUND_OPERATOR_ROUND": "заокружи", "MATH_ROUND_OPERATOR_ROUNDUP": "заокружи навише", "MATH_ROUND_OPERATOR_ROUNDDOWN": "заокружи наниже", - "MATH_ONLIST_HELPURL": "", "MATH_ONLIST_OPERATOR_SUM": "збир списка", "MATH_ONLIST_TOOLTIP_SUM": "Враћа збир свих бројева са списка.", "MATH_ONLIST_OPERATOR_MIN": "мин. списка", @@ -198,7 +187,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://sr.wikipedia.org/wiki/Генератор_случајних_бројева", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "случајни разломак", "MATH_RANDOM_FLOAT_TOOLTIP": "Враћа случајни разломак између 0.0 (укључиво) и 1.0 (искључиво).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "атан2 од X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Врати арктангенту тачке (X, Y) у степенима од -180 до 180.", "TEXT_TEXT_HELPURL": "https://sr.wikipedia.org/wiki/Ниска", @@ -224,7 +212,6 @@ "TEXT_CHARAT_FIRST": "преузми прво слово", "TEXT_CHARAT_LAST": "преузми последње слово", "TEXT_CHARAT_RANDOM": "преузми случајно слово", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "Враћа слово на одређени положај.", "TEXT_GET_SUBSTRING_TOOLTIP": "Враћа одређени део текста.", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "у тексту", @@ -234,7 +221,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "слову #", "TEXT_GET_SUBSTRING_END_FROM_END": "слову # са краја", "TEXT_GET_SUBSTRING_END_LAST": "последњем слову", - "TEXT_GET_SUBSTRING_TAIL": "", "TEXT_CHANGECASE_TOOLTIP": "Враћа примерак текста са другачијом величином слова.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "великим словима", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "малим словима", @@ -250,15 +236,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Питајте корисника за број.", "TEXT_PROMPT_TOOLTIP_TEXT": "Питајте корисника за унос текста.", "TEXT_COUNT_MESSAGE0": "број %1 у %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Броји колико пута се неки текст појављује унутар неког другог текста.", "TEXT_REPLACE_MESSAGE0": "замена %1 са %2 у %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Замена свих појава неког текста унутар неког другог текста.", "TEXT_REVERSE_MESSAGE0": "обрнуто %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Обрће редослед карактера у тексту.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "направи празан списак", "LISTS_CREATE_EMPTY_TOOLTIP": "Враћа списак, дужине 0, без података", "LISTS_CREATE_WITH_TOOLTIP": "Направите списак са било којим бројем ставки.", @@ -284,7 +266,6 @@ "LISTS_GET_INDEX_FIRST": "прва", "LISTS_GET_INDEX_LAST": "последња", "LISTS_GET_INDEX_RANDOM": "случајна", - "LISTS_GET_INDEX_TAIL": "", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 је прва ставка.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 је последња ставка.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "Враћа ставку на одређену позицију на списку.", @@ -316,9 +297,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "до #", "LISTS_GET_SUBLIST_END_FROM_END": "до # од краја", "LISTS_GET_SUBLIST_END_LAST": "до последње", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "Прави копију одређеног дела списка.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сортирај %1 %2 %3", "LISTS_SORT_TOOLTIP": "Сортирајте копију списка.", "LISTS_SORT_ORDER_ASCENDING": "растуће", @@ -331,24 +310,19 @@ "LISTS_SPLIT_WITH_DELIMITER": "са граничником", "LISTS_SPLIT_TOOLTIP_SPLIT": "Раздваја текст у списак текстова, преламањем на сваком граничнику.", "LISTS_SPLIT_TOOLTIP_JOIN": "Спаја списак текстова у један текст, раздвојених граничником.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "обрнуто %1", "LISTS_REVERSE_TOOLTIP": "Обрни копију списка.", - "ORDINAL_NUMBER_SUFFIX": "", "VARIABLES_GET_TOOLTIP": "Враћа вредност ове променљиве.", "VARIABLES_GET_CREATE_SET": "Направи блок за доделу вредности %1", "VARIABLES_SET": "постави %1 у %2", "VARIABLES_SET_TOOLTIP": "Поставља променљиву тако да буде једнака улазу.", "VARIABLES_SET_CREATE_GET": "Направи блок за преузимање вредности из „%1”", - "PROCEDURES_DEFNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFNORETURN_TITLE": "до", "PROCEDURES_DEFNORETURN_PROCEDURE": "урадите нешто", "PROCEDURES_BEFORE_PARAMS": "са:", "PROCEDURES_CALL_BEFORE_PARAMS": "са:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Прави функцију без излаза.", "PROCEDURES_DEFNORETURN_COMMENT": "Опишите ову функцију…", - "PROCEDURES_DEFRETURN_HELPURL": "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29", "PROCEDURES_DEFRETURN_RETURN": "врати", "PROCEDURES_DEFRETURN_TOOLTIP": "Прави функцију са излазом.", "PROCEDURES_ALLOW_STATEMENTS": "дозволи изјаве", diff --git a/msg/json/sv.json b/msg/json/sv.json index 46c19a9de..1ea2206a7 100644 --- a/msg/json/sv.json +++ b/msg/json/sv.json @@ -52,40 +52,32 @@ "COLOUR_PICKER_TOOLTIP": "Välj en färg från paletten.", "COLOUR_RANDOM_TITLE": "slumpfärg", "COLOUR_RANDOM_TOOLTIP": "Slumpa fram en färg.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "färg med", "COLOUR_RGB_RED": "röd", "COLOUR_RGB_GREEN": "grön", "COLOUR_RGB_BLUE": "blå", "COLOUR_RGB_TOOLTIP": "Skapa en färg med det angivna mängden röd, grön och blå. Alla värden måste vara mellan 0 och 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "blanda", "COLOUR_BLEND_COLOUR1": "färg 1", "COLOUR_BLEND_COLOUR2": "färg 2", "COLOUR_BLEND_RATIO": "förhållande", "COLOUR_BLEND_TOOLTIP": "Blandar ihop två färger med ett bestämt förhållande (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "upprepa %1 gånger", "CONTROLS_REPEAT_INPUT_DO": "utför", "CONTROLS_REPEAT_TOOLTIP": "Utför några kommandon flera gånger.", - "CONTROLS_WHILEUNTIL_HELPURL": "https://github.com/google/blockly/wiki/Loops#repeat", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "upprepa så länge", "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "upprepa tills", "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "Medan ett värde är sant, utför några kommandon.", "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "Medan ett värde är falskt, utför några kommandon.", - "CONTROLS_FOR_HELPURL": "https://github.com/google/blockly/wiki/Loops#count-with", "CONTROLS_FOR_TOOLTIP": "Låt variabeln \"%1\" anta värden från starttalet till sluttalet, beräknat med det angivna intervallet, och utför de angivna blocken.", "CONTROLS_FOR_TITLE": "räkna med %1 från %2 till %3 med %4", - "CONTROLS_FOREACH_HELPURL": "https://github.com/google/blockly/wiki/Loops#for-each", "CONTROLS_FOREACH_TITLE": "för varje föremål %1 i listan %2", "CONTROLS_FOREACH_TOOLTIP": "För varje objekt i en lista, ange variabeln '%1' till objektet, och utför sedan några kommandon.", - "CONTROLS_FLOW_STATEMENTS_HELPURL": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks", "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "bryt ut ur loop", "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "fortsätta med nästa upprepning av loop", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "Bryt ut ur den innehållande upprepningen.", "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "Hoppa över resten av denna loop och fortsätt med nästa loop.", "CONTROLS_FLOW_STATEMENTS_WARNING": "Varning: Detta block kan endast användas i en loop.", - "CONTROLS_IF_HELPURL": "https://github.com/google/blockly/wiki/IfElse", "CONTROLS_IF_TOOLTIP_1": "Om ett värde är sant, utför några kommandon.", "CONTROLS_IF_TOOLTIP_2": "Om värdet är sant, utför det första kommandoblocket. Utför annars det andra kommandoblocket.", "CONTROLS_IF_TOOLTIP_3": "Om det första värdet är sant, utför det första kommandoblocket. Annars, om det andra värdet är sant, utför det andra kommandoblocket.", @@ -103,12 +95,10 @@ "LOGIC_COMPARE_TOOLTIP_LTE": "Ger tillbaka sant om det första värdet är mindre än eller lika med det andra.", "LOGIC_COMPARE_TOOLTIP_GT": "Ger tillbaka sant om det första värdet är större än det andra.", "LOGIC_COMPARE_TOOLTIP_GTE": "Ger tillbaka sant om det första värdet är större än eller lika med det andra.", - "LOGIC_OPERATION_HELPURL": "https://github.com/google/blockly/wiki/Logic#logical-operations", "LOGIC_OPERATION_TOOLTIP_AND": "Ger tillbaka sant om båda värdena är sanna.", "LOGIC_OPERATION_AND": "och", "LOGIC_OPERATION_TOOLTIP_OR": "Ger tillbaka sant om minst ett av värdena är sant.", "LOGIC_OPERATION_OR": "eller", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "inte %1", "LOGIC_NEGATE_TOOLTIP": "Ger tillbaka sant om inmatningen är falsk. Ger tillbaka falskt och inmatningen är sann.", "LOGIC_BOOLEAN_TRUE": "sant", @@ -117,18 +107,12 @@ "LOGIC_NULL_HELPURL": "https://sv.wikipedia.org/wiki/Null", "LOGIC_NULL": "null", "LOGIC_NULL_TOOLTIP": "Returnerar null.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "test", "LOGIC_TERNARY_IF_TRUE": "om sant", "LOGIC_TERNARY_IF_FALSE": "om falskt", "LOGIC_TERNARY_TOOLTIP": "Kontrollera villkoret i \"test\". Om villkoret är sant, ge tillbaka \"om sant\"-värdet; annars ge tillbaka \"om falskt\"-värdet.", "MATH_NUMBER_HELPURL": "https://sv.wikipedia.org/wiki/Tal", "MATH_NUMBER_TOOLTIP": "Ett tal.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "-", - "MATH_DIVISION_SYMBOL": "÷", - "MATH_MULTIPLICATION_SYMBOL": "×", - "MATH_POWER_SYMBOL": "^", "MATH_TRIG_SIN": "sin", "MATH_TRIG_COS": "cos", "MATH_TRIG_TAN": "tan", @@ -168,7 +152,6 @@ "MATH_IS_NEGATIVE": "är negativt", "MATH_IS_DIVISIBLE_BY": "är delbart med", "MATH_IS_TOOLTIP": "Kontrollera om ett tal är jämnt, ojämnt, helt, positivt, negativt eller det är delbart med ett bestämt tal. Returnerar med sant eller falskt.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "ändra %1 med %2", "MATH_CHANGE_TOOLTIP": "Lägg till ett tal till variabeln '%1'.", "MATH_ROUND_HELPURL": "https://sv.wikipedia.org/wiki/Avrundning", @@ -203,7 +186,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://sv.wikipedia.org/wiki/Slumptalsgenerator", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "slumpat decimaltal", "MATH_RANDOM_FLOAT_TOOLTIP": "Ger tillbaka ett slumpat decimaltal mellan 0.0 (inkluderat) och 1.0 (exkluderat).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 av X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Returnerar arcustangens av punkt (X, Y) i grader från -180 till 180.", "TEXT_TEXT_HELPURL": "https://sv.wikipedia.org/wiki/Str%C3%A4ng_%28data%29", @@ -253,18 +235,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Fråga användaren efter ett tal.", "TEXT_PROMPT_TOOLTIP_TEXT": "Fråga användaren efter lite text.", "TEXT_COUNT_MESSAGE0": "räkna %1 i %2", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Räkna hur många gånger en text förekommer inom en annan text.", "TEXT_REPLACE_MESSAGE0": "ersätt %1 med %2 i %3", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "Ersätt alla förekomster av en text inom en annan text.", "TEXT_REVERSE_MESSAGE0": "vänd på %1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "Vänder på teckenordningen i texten.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "skapa tom lista", "LISTS_CREATE_EMPTY_TOOLTIP": "Ger tillbaka en lista utan någon data, alltså med längden 0", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "Skapa en lista med valfritt antal föremål.", "LISTS_CREATE_WITH_INPUT_WITH": "skapa lista med", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "lista", @@ -320,7 +297,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "till # från slutet", "LISTS_GET_SUBLIST_END_LAST": "till sista", "LISTS_GET_SUBLIST_TOOLTIP": "Skapar en kopia av den specificerade delen av en lista.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sortera %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sortera en kopia av en lista.", "LISTS_SORT_ORDER_ASCENDING": "stigande", @@ -328,13 +304,11 @@ "LISTS_SORT_TYPE_NUMERIC": "numeriskt", "LISTS_SORT_TYPE_TEXT": "alfabetiskt", "LISTS_SORT_TYPE_IGNORECASE": "alfabetiskt, ignorera skiftläge", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "skapa lista från text", "LISTS_SPLIT_TEXT_FROM_LIST": "skapa text från lista", "LISTS_SPLIT_WITH_DELIMITER": "med avgränsare", "LISTS_SPLIT_TOOLTIP_SPLIT": "Dela upp text till en textlista och bryt vid varje avgränsare.", "LISTS_SPLIT_TOOLTIP_JOIN": "Sammanfoga en textlista till en text, som separeras av en avgränsare.", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "vänd på %1", "LISTS_REVERSE_TOOLTIP": "Vänd på en kopia av en lista.", "VARIABLES_GET_TOOLTIP": "Returnerar värdet av denna variabel.", @@ -354,9 +328,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Skapar en funktion med output.", "PROCEDURES_ALLOW_STATEMENTS": "tillåta uttalanden", "PROCEDURES_DEF_DUPLICATE_WARNING": "Varning: Denna funktion har dubbla parametrar.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Kör den användardefinierade funktionen \"%1\".", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Kör den användardefinierade funktionen \"%1\" och använd resultatet av den.", "PROCEDURES_MUTATORCONTAINER_TITLE": "inmatningar", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Lägg till, ta bort och ändra ordningen för inmatningar till denna funktion.", @@ -365,7 +337,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Markera funktionsdefinition", "PROCEDURES_CREATE_DO": "Skapa '%1'", "PROCEDURES_IFRETURN_TOOLTIP": "Om ett värde är sant returneras ett andra värde.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Varning: Detta block får användas endast i en funktionsdefinition.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Säg någonting...", "WORKSPACE_ARIA_LABEL": "Blocklys arbetsyta", diff --git a/msg/json/ta.json b/msg/json/ta.json index bc858c934..63e7705a8 100644 --- a/msg/json/ta.json +++ b/msg/json/ta.json @@ -35,7 +35,6 @@ "NEW_VARIABLE": "மாறிலியை உருவாக்குக...", "NEW_VARIABLE_TYPE_TITLE": "புதிய மாறிலியின் பெயர்:", "NEW_VARIABLE_TITLE": "புதிய மாறிலியின் பெயர்:", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "வண்ண தட்டிலிருந்து ஒரு நிறத்தைத் தேர்ந்தெடுக்கவும்.", "COLOUR_RANDOM_TITLE": "தற்போக்கு நிறம்", "COLOUR_RANDOM_TOOLTIP": "தற்போக்கில் ஒரு நிறத்தை தேர்ந்தெடுக்கவும்.", @@ -49,7 +48,6 @@ "COLOUR_BLEND_COLOUR2": "நிறம் 2", "COLOUR_BLEND_RATIO": "விகிதம்", "COLOUR_BLEND_TOOLTIP": "கொடுக்கப்பட்ட விகதத்தில் (0.0 - 1.0) இரு நிறங்களை கலக்குக.", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "'%1' முரை திரும்ப செய்", "CONTROLS_REPEAT_INPUT_DO": "செய்க", "CONTROLS_REPEAT_TOOLTIP": "கட்டளைகளை பல முரை செய்ய", @@ -76,7 +74,6 @@ "CONTROLS_IF_IF_TOOLTIP": "கட்டளைகளை தொகுப்பு திருத்துதம் செய்", "CONTROLS_IF_ELSEIF_TOOLTIP": "ஆனால் தொகுப்பிற்கு நிபந்தனை சேர்க்க", "CONTROLS_IF_ELSE_TOOLTIP": "ஆனால் தொகுப்பிற்கு விதிவிலக்கு காப்பை சேர்க்க", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "இரண்டு மாறியும் ஈடானால், மெய் பின்கொடு.", "LOGIC_COMPARE_TOOLTIP_NEQ": "இரண்டு மாறியும் ஈடாகாவிட்டால், மெய் பின்கொடு.", "LOGIC_COMPARE_TOOLTIP_LT": "முதல் உள்ளீடு இரண்டாவதைவிட குறைவாக இருந்தால், மெய் பின்கொடு.", @@ -132,10 +129,8 @@ "MATH_IS_POSITIVE": "எண் நேர்ம முழுதானதா ?", "MATH_IS_NEGATIVE": "எண் குறைவானதா ?", "MATH_IS_DIVISIBLE_BY": "ஆல் வகுபடக் கூடியது", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "மாற்று %1 மூலம் %2", "MATH_CHANGE_TOOLTIP": "எண்னை '%1' மதிப்பால் கூட்டு,", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "மேல்/கீழ் வழி முழு எண் ஆக மாற்று.", "MATH_ROUND_OPERATOR_ROUND": "முழுமையாக்கு", "MATH_ROUND_OPERATOR_ROUNDUP": "மேல்வழி முழுமையாக்கு", @@ -156,15 +151,12 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "பட்டியலின் நியமவிலகலை பின்கொடு.", "MATH_ONLIST_OPERATOR_RANDOM": "ஒரு பட்டியலில் இருந்து சீரற்ற உருப்படி", "MATH_ONLIST_TOOLTIP_RANDOM": "ஒரு பட்டியலில் இருந்து சீரற்ற உருப்படி பின்கொடு", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "%1 ÷ %2ன் மீதி", "MATH_MODULO_TOOLTIP": "இரண்டு எண்கள் மூலம் பிரிவில் இருந்து எஞ்சியதை பின்கொடு.", "MATH_CONSTRAIN_TITLE": "%1 மாறியை %2 மேலும் %3 கீழும் வற்புறுத்து", "MATH_CONSTRAIN_TOOLTIP": "எண் மாறி வீசுகளம் உள்ளடங்கிய வாறு வற்புறுத்து", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "வீசுகளம் %1 இல் இருந்து %2 உள்ளடங்கிய வாறு சீரற்ற எண்", "MATH_RANDOM_INT_TOOLTIP": "வீசுகளம் இல் இருந்த (உள்ளடங்கிய) வாறு சீரற்ற எண் பின்கொடு.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "சீரற்ற எண் பின்னம்", "MATH_RANDOM_FLOAT_TOOLTIP": "சீரற்ற எண் பின்னம், 0.0 இல் இருந்து 1.0 உட்பட, பின்கொடு.", "TEXT_TEXT_HELPURL": "https://ta.wikipedia.org/wiki/%E0%AE%9A%E0%AE%B0%E0%AE%AE%E0%AF%8D_%28%E0%AE%95%E0%AE%A3%E0%AE%BF%E0%AE%A9%E0%AE%BF%E0%AE%AF%E0%AE%BF%E0%AE%AF%E0%AE%B2%E0%AF%8D%29", @@ -291,9 +283,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "வெளியீடு உள்ள ஒரு செயல்பாடு உருவாக்குகிறது", "PROCEDURES_ALLOW_STATEMENTS": "வாக்குமூலங்களை அனுமதிக்கவும்", "PROCEDURES_DEF_DUPLICATE_WARNING": "எச்சரிக்கை: இந்த செயற்கூறில் போலியான அளபுருக்கள் உண்டு.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "பயனரின் '%1' செயற்கூற்றை ஓட்டு.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "பயனரின் '%1' செயற்கூற்றை ஓட்டி வரும் வெளியீட்டை பயன்படுத்து.", "PROCEDURES_MUTATORCONTAINER_TITLE": "உள்ளீடுகள்", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "செயல்கூறுகளின் உள்ளீட்டை சேர், நீக்கு, or மீண்டும் வரிசை செய்.", diff --git a/msg/json/tcy.json b/msg/json/tcy.json index a5ed486f4..6f38cacaa 100644 --- a/msg/json/tcy.json +++ b/msg/json/tcy.json @@ -52,7 +52,6 @@ "COLOUR_BLEND_COLOUR2": "ಬಣ್ಣೊ ೨(ರಡ್ಡ್)", "COLOUR_BLEND_RATIO": "ಅನುಪಾತೊ", "COLOUR_BLEND_TOOLTIP": "ಕೊರಿನ ಅನುಪಾತೊಡು (0.0- 1.0) ರಡ್ಡ್ ಬಣ್ಣೊಲೆನ್ ಬೆರಕೆ ಮಲ್ಪುಂಡು.", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": " %1 ಸರ್ತಿ ಕೂಡೊರ ಮಲ್ಪು", "CONTROLS_REPEAT_INPUT_DO": "ಮಲ್ಪುಲೆ", "CONTROLS_REPEAT_TOOLTIP": "ಕೆಲವು ಪಾತೆರೊಲೆನ್ ಮಸ್ತ್ ಸರ್ತಿ ಮಲ್ಪು", @@ -79,7 +78,6 @@ "CONTROLS_IF_IF_TOOLTIP": "ಸೇರಾವ್, ದೆತ್ತ್‌ ಬುಡು, ಅತ್ತಂಡ ಈ 'ಒಂಜಿ ವೇಲೆ' ತಡೆನ್ ಕುಡ ಸಂರಚಣೆ ಮಲ್ಪೆರೆ ವಿಭಾಗೊಲೆನ್ ಕುಡ ಒತ್ತರೆ ಮಲ್ಪುಲೆ.", "CONTROLS_IF_ELSEIF_TOOLTIP": "'ಒಂಜಿ ವೇಲೆ' ತಡೆಕ್ಕ್ ಒಂಜಿ ಶರ್ತನ್ ಸೇರಾವ್", "CONTROLS_IF_ELSE_TOOLTIP": "'ಒಂಜಿ ವೇಲೆ' ತಡೆಕ್ಕ್ ಒಂಜಿ ಕಡೆತ್ತ ಮಾತೆನ್ಲಾ-ಪತ್ತ್ (catch-all) ಶರ್ತನ್ ಸೇರಾವ್", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "ರಡ್ದ್ ಇನ್‌ಪುಟ್‌ಲಾ ಸಮ ಇತ್ತ್ಂಡ 'ನಿಜ'ನ್ ಪಿರಕೊರು", "LOGIC_COMPARE_TOOLTIP_NEQ": "ರಡ್ದ್ ಇನ್‌ಪುಟ್‌ಲಾ ಸಮ ಅತ್ತಾಂಡ 'ನಿಜ'ನ್ ಪಿರಕೊರು", "LOGIC_COMPARE_TOOLTIP_LT": "ಸುರುತ್ತ ಇನ್‌ಪುಟ್ ರಡ್ಡನೆ ಇನ್‌ಪುಟ್‌ಡ್ದ್ ಎಲ್ಯ ಆದಿತ್ತ್ಂಡ, 'ನಿಜ'ನ್ ಪಿರಕೊರು", @@ -136,7 +134,6 @@ "MATH_IS_NEGATIVE": "ಋಣ ಸಂಖ್ಯೆ", "MATH_IS_DIVISIBLE_BY": "ಭಾಗಿಪೊಲಿ", "MATH_IS_TOOLTIP": "ಒಂಜಿ ಸಂಖ್ಯೆ ಸಮನಾ, ಬೆಸನಾ, ಅವಿಭಾಜ್ಯನಾ, ಪೂರ್ಣನಾ, ಧನನಾ, ಋಣನಾ, ಅತ್ತಂಡ ಅವೆನ್ ಬೇತೆ ಒಂಜಿ ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಡ್ದ್ ಭಾಗಿಪೊಲಿಯಾ ಪಂದ್ ಪರೀಕ್ಷೆ ಮಲ್ಪು. ನಿಜ ಅತ್ತಂಡ ಸುಲ್ಲುನು ಪಿರಕೊರ್ಪುಂಡು.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "%1 ನ್ %2 ಟ್ ಬದಲ್ ಮಲ್ಪು", "MATH_CHANGE_TOOLTIP": "'%1' ವ್ಯತ್ಯಯೊಗು ಒಂಜಿ ಸಂಖ್ಯೆನ್ ಸೇರಾವ್", "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/ಪೂರ್ಣಾಂಕೊ", @@ -171,7 +168,6 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/ರಾಂಡಮ್_ನಂಬರ್_ಜನರೇಶನ್", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "ಒವ್ವಾಂಡಲ ಒಂಜಿ ಭಿನ್ನರಾಶಿ", "MATH_RANDOM_FLOAT_TOOLTIP": "0.0 (ಸೇರ್‌ದ್) ಬೊಕ್ಕ 1.0 (ಸೇರಂದೆ) ನಡುತ ಒವ್ವಾಂಡಲ ಒಂಜಿ ಭಿನ್ನರಾಶಿನ್ ಪಿರಕೊರು.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/ಸ್ಟ್ರಿಂಗ್_(ಕಂಪ್ಯೂಟರ್_ಸೈನ್ಸ್)", "TEXT_TEXT_TOOLTIP": "ಒಂಜಿ ಅಕ್ಷರೊ, ಪದೊ ಅತ್ತಂಡ ಪಾಟೊದ ಒಂಜಿ ಸಾಲ್", "TEXT_JOIN_TITLE_CREATEWITH": "ನೆಡ್ದ್ ಪಟ್ಯೊನು ಉಂಡು ಮಲ್ಪು", @@ -274,7 +270,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ಅಕೇರಿಡ್ದ್ # ಗ್", "LISTS_GET_SUBLIST_END_LAST": "ಅಕೇರಿಗ್", "LISTS_GET_SUBLIST_TOOLTIP": "ಪಟ್ಯೊದ ನಿರ್ದಿಷ್ಟ ಬಾಗೊದ ಪ್ರತಿನ್ ಉಂಡುಮಲ್ಪುಂಡು.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "%1 %2 %3 ಇಂಗಡಿಪು", "LISTS_SORT_TOOLTIP": "ಒಂಜಿ ಪಟ್ಟಿದ ಒಂಜಿ ಪ್ರತಿನ್ ಇಂಗಡಿಪು", "LISTS_SORT_ORDER_ASCENDING": "ಏರುನು", diff --git a/msg/json/tdd.json b/msg/json/tdd.json new file mode 100644 index 000000000..1d80f22c1 --- /dev/null +++ b/msg/json/tdd.json @@ -0,0 +1,108 @@ +{ + "@metadata": { + "authors": [ + "咽頭べさ" + ] + }, + "VARIABLES_DEFAULT_NAME": "ᥟᥢᥴ", + "TODAY": "ᥛᥫᥲᥢᥭᥳ", + "DUPLICATE_BLOCK": "ᥗᥧᥖᥱ", + "ADD_COMMENT": "ᥔᥬᥱᥑᥩᥲᥑᥭᥲᥓᥬᥴ", + "REMOVE_COMMENT": "ᥗᥩᥢᥴᥙᥦᥖᥲ ᥑᥩᥲᥑᥭᥲᥓᥬᥴ", + "EXTERNAL_INPUTS": "ᥑᥫᥒᥲᥟᥢᥴᥘᥧᥐᥳᥖᥣᥒᥰᥢᥩᥐᥲᥑᥝᥲᥛᥣᥰ", + "INLINE_INPUTS": "ᥑᥫᥒᥲᥟᥢᥴᥑᥝᥲᥛᥣᥰᥓᥩᥛᥰᥘᥦᥒᥰ", + "DELETE_BLOCK": "ᥛᥩᥖᥱᥙᥘᥩᥐᥳ", + "DELETE_X_BLOCKS": "ᥛᥩᥖᥱᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰ %1", + "COLLAPSE_BLOCK": "ᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰᥘᥦᥝᥴ", + "COLLAPSE_ALL": "ᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰᥓᥫᥰᥘᥦᥝᥴ", + "EXPAND_BLOCK": "ᥑᥣᥐᥲᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰ", + "EXPAND_ALL": "ᥑᥣᥐᥲᥓᥫᥰᥞᥦᥳᥖᥖᥰ", + "DISABLE_BLOCK": "ᥟᥪᥖᥰᥓᥬᥳ ᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰ", + "ENABLE_BLOCK": "ᥙᥪᥖᥱᥓᥬᥳ ᥘᥩᥒᥲᥞᥦᥳᥖᥖᥰ", + "HELP": "ᥓᥩᥭᥲᥗᥦᥛᥴ", + "CHANGE_VALUE_TITLE": "ᥘᥦᥐᥲᥘᥣᥭᥲᥢᥛᥳᥐᥖᥳ:", + "RENAME_VARIABLE": "ᥘᥪᥛᥳᥑᥪᥢᥰ ᥟᥢᥴᥘᥣᥭᥲᥛᥬᥱ...", + "RENAME_VARIABLE_TITLE": "ᥘᥪᥛᥳᥑᥪᥢᥰ ᥟᥢᥴᥘᥣᥭᥲᥛᥬᥱᥓᥫᥰᥢᥢᥳ '%1' ᥗᥪᥒᥴ:", + "NEW_VARIABLE": "ᥐᥩᥱᥔᥣᥒᥲ ᥖᥨᥝᥴᥢᥪᥒᥴ...", + "NEW_VARIABLE_TITLE": "ᥓᥪᥲᥟᥢᥴᥘᥣᥭᥲᥛᥬᥱ:", + "COLOUR_PICKER_HELPURL": "https://tdd.wikipedia.org/wiki/ᥔᥤᥴ", + "COLOUR_PICKER_TOOLTIP": "ᥘᥫᥐᥲᥔᥤᥴ ᥖᥛᥲᥖᥤᥲ ᥚᥣᥰᥘᥦᥖᥳ.", + "COLOUR_RANDOM_TITLE": "ᥔᥤᥴᥘᥣᥛᥰᥘᥤᥛᥰ", + "COLOUR_RANDOM_TOOLTIP": "ᥘᥫᥐᥲᥔᥤᥴᥖᥛᥲᥖᥤᥲᥘᥩᥐᥰᥘᥣᥛᥰᥘᥤᥛᥰ.", + "COLOUR_RGB_TITLE": "ᥞᥨᥛᥲᥐᥪᥐᥰᥔᥤᥴ", + "COLOUR_RGB_RED": "ᥘᥤᥒᥴ", + "COLOUR_RGB_GREEN": "ᥑᥥᥝᥴ", + "COLOUR_RGB_BLUE": "ᥔᥩᥛᥱ", + "COLOUR_RGB_TOOLTIP": "ᥞᥥᥖᥰᥖᥨᥭᥰ ᥔᥤᥴᥟᥢᥴᥢᥪᥒᥲ ᥓᥩᥛᥰᥢᥒᥱᥛᥐᥰᥛᥢᥲᥝᥭᥳ ᥢᥬᥰᥑᥣᥒᥱ ᥔᥤᥴᥘᥦᥒᥴ, ᥑᥥᥝᥴ ᥘᥦᥲ ᥔᥩᥛᥱ. ᥢᥛᥳᥢᥐᥰᥔᥤᥴ ᥖᥥᥴᥘᥭᥲᥛᥤᥰᥢᥬᥰᥝᥨᥒᥲᥐᥣᥒᥴ 0 ᥖᥩᥱ 100.", + "COLOUR_BLEND_TITLE": "ᥘᥩᥰᥘᥦᥰ", + "COLOUR_BLEND_COLOUR1": "ᥔᥤᥴ 1", + "COLOUR_BLEND_COLOUR2": "ᥔᥤᥴ 2", + "COLOUR_BLEND_RATIO": "ᥔᥦᥢᥰ", + "COLOUR_BLEND_TOOLTIP": "ᥟᥝᥴᥔᥤᥴᥔᥩᥒᥴᥟᥢᥴᥘᥩᥰᥐᥢᥴ ᥓᥩᥛᥰᥢᥛᥴ ᥔᥦᥢᥰᥟᥢᥴᥙᥢᥴᥝᥭᥳ (0.0 - 1.0).", + "CONTROLS_REPEAT_HELPURL": "https://tdd.wikipedia.org/wiki/ᥖᥣᥱᥖᥨᥒᥱᥛᥨᥢᥰ", + "CONTROLS_REPEAT_TITLE": "ᥙᥢᥱᥑᥪᥢᥰ %1 ᥐᥛᥰ", + "CONTROLS_REPEAT_INPUT_DO": "ᥞᥥᥖᥰ", + "CONTROLS_REPEAT_TOOLTIP": "ᥞᥥᥖᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥐᥛᥲᥚᥩᥒᥲ ᥖᥒᥰᥢᥛᥴ.", + "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "ᥑᥣᥝᥰᥖᥪᥐᥳᥘᥪᥛᥳ", + "CONTROLS_WHILEUNTIL_OPERATOR_UNTIL": "ᥖᥪᥐᥳᥘᥪᥛᥳᥗᥪᥒᥴ", + "CONTROLS_WHILEUNTIL_TOOLTIP_WHILE": "ᥙᥩᥰᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥛᥣᥢᥱᥛᥦᥢᥲᥕᥝᥳᥓᥪᥒᥴ ᥞᥥᥖᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥐᥛᥲᥚᥩᥒᥲ.", + "CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL": "ᥙᥩᥰᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥟᥛᥱᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥞᥥᥖᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴ ᥐᥛᥲᥚᥩᥒᥲ.", + "CONTROLS_FOR_TITLE": "ᥖᥦᥱᥟᥣᥢᥱᥐᥪᥐᥰ %1 ᥖᥩᥱ %2 ᥖᥩᥱ %3 ᥘᥨᥭᥲ %4", + "CONTROLS_FOREACH_TITLE": "ᥖᥣᥱᥐᥧᥲᥟᥢᥴᥟᥢᥴ ᥢᥬᥰ %1 ᥔᥥᥢᥲᥛᥣᥭᥴ %2", + "CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK": "ᥟᥩᥐᥱᥖᥤᥲᥑᥩᥙᥱᥛᥨᥢᥰ", + "CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE": "ᥔᥪᥙᥱᥙᥢᥱᥗᥦᥒᥲ ᥑᥩᥙᥱᥛᥨᥢᥰᥖᥣᥒᥱᥟᥢᥴ", + "CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK": "ᥐᥪᥖᥰᥙᥦᥖᥲ ᥑᥩᥙᥱᥛᥨᥢᥰ ᥟᥢᥴᥛᥤᥰᥝᥭᥳ", + "CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE": "ᥝᥥᥢᥳᥝᥭᥳ ᥑᥩᥙᥱᥛᥨᥢᥰ ᥟᥢᥴᥐᥪᥖᥰᥓᥫᥲᥝᥭᥳ, ᥔᥥᥴ ᥔᥪᥙᥱᥗᥦᥒᥲᥖᥣᥒᥱᥟᥢᥴ.", + "CONTROLS_FLOW_STATEMENTS_WARNING": "ᥜᥣᥒᥳ: ᥙᥘᥩᥐᥳᥟᥢᥴᥢᥭᥳ ᥐᥨᥭᥰᥓᥬᥳᥘᥨᥭᥲᥖᥣᥱ ᥑᥩᥙᥱᥛᥨᥢᥰᥐᥨᥭᥰ.", + "CONTROLS_IF_TOOLTIP_1": "ᥙᥩᥰᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥛᥣᥢᥱᥛᥦᥢᥲᥕᥝᥳᥓᥪᥒᥴ ᥞᥥᥖᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥐᥛᥲᥚᥩᥒᥲ.", + "CONTROLS_IF_TOOLTIP_2": "ᥙᥩᥰᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥛᥣᥢᥱᥛᥦᥢᥲᥕᥝᥳᥓᥪᥒᥴ ᥞᥥᥖᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥐᥛᥲᥚᥩᥒᥲ.", + "CONTROLS_IF_TOOLTIP_3": "ᥔᥒᥴᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ(ᥢᥛᥳᥐᥖᥳ)ᥛᥣᥳᥢᥪᥒᥲ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥞᥥᥖᥰᥙᥘᥩᥐᥳᥟᥩᥢᥴᥖᥣᥒᥰᥔᥧᥖᥰ ᥖᥤᥲᥢᥬᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥖ. ᥔᥒᥴᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ(ᥢᥛᥳᥐᥖᥳ)ᥛᥣᥭᥴᥔᥩᥒᥴᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥞᥥᥖᥰᥙᥦᥖᥲ ᥙᥘᥩᥐᥳᥔᥩᥒᥴ ᥖᥤᥲᥢᥬᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴ.", + "CONTROLS_IF_TOOLTIP_4": "ᥔᥒᥴᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ(ᥢᥛᥳᥐᥖᥳ)ᥛᥣᥭᥴᥢᥪᥒᥲ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥞᥥᥖᥰᥙᥘᥩᥐᥳᥟᥩᥢᥴᥖᥣᥒᥰᥔᥧᥖᥰ ᥖᥤᥲᥢᥬᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥖ. ᥘᥫᥴᥔᥥᥴᥢᥢᥳ, ᥔᥒᥴᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥛᥣᥭᥴᥔᥩᥒᥴ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥞᥥᥖᥰᥙᥦᥖᥲ ᥙᥘᥩᥐᥳᥔᥩᥒᥴ ᥖᥤᥲᥢᥬᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥖ. ᥔᥒᥴᥝᥣᥲ ᥐᥣᥲᥑᥢᥴ(ᥢᥛᥳᥐᥖᥳ) ᥟᥛᥱᥛᥤᥰᥘᥩᥒᥲᥛᥣᥢᥱᥛᥦᥢᥲ ᥔᥒᥴᥓᥪᥒᥴ ᥞᥥᥖᥰᥙᥦᥖᥲᥙᥘᥩᥐᥳ ᥐᥛᥰᥘᥪᥛᥰ ᥖᥤᥲᥢᥬᥰᥑᥩᥲᥐᥥᥙᥰᥗᥩᥢᥴᥖ.", + "CONTROLS_IF_MSG_IF": "ᥔᥒᥴᥝᥣᥲ", + "CONTROLS_IF_MSG_ELSEIF": "ᥔᥒᥴᥝᥣᥲ ᥘᥫᥴᥔᥥᥴᥢᥢᥳ", + "CONTROLS_IF_MSG_ELSE": "ᥘᥫᥴᥔᥥᥴᥢᥢᥳ", + "CONTROLS_IF_ELSEIF_TOOLTIP": "ᥔᥒᥴᥝᥣᥲ ᥙᥘᥩᥐᥳᥓᥪᥒᥴ ᥔᥬᥱᥙᥢᥴᥘᥩᥒᥲᥖᥣᥒᥰᥛᥢᥰ ᥖᥛᥲ.", + "CONTROLS_IF_ELSE_TOOLTIP": "ᥔᥬᥱᥐᥛᥰᥘᥪᥢᥰ, ᥔᥒᥴᥝᥣᥲ ᥙᥘᥩᥐᥳᥓᥪᥒᥴ ᥟᥝᥴᥘᥩᥒᥲᥖᥣᥒᥰᥛᥢᥰᥖᥒᥰᥔᥥᥒᥲ ᥖᥛᥲ.", + "LOGIC_COMPARE_HELPURL": "ᥔᥬᥱᥐᥛᥰᥘᥪᥢᥰ, ᥔᥒᥴᥝᥣᥲ ᥙᥘᥩᥐᥳᥓᥪᥒᥴ ᥟᥝᥴᥘᥩᥒᥲᥖᥣᥒᥰᥛᥢᥰᥖᥒᥰᥔᥥᥒᥲ ᥖᥛᥲ. https://tdd.wikipedia.org/wiki/ᥙᥣᥭᥰᥢᥙᥳ", + "LOGIC_COMPARE_TOOLTIP_EQ": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥖᥒᥰᥔᥩᥒᥴ ᥛᥫᥢᥴᥖᥣᥒᥱᥟᥢᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_COMPARE_TOOLTIP_NEQ": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥖᥒᥰᥔᥩᥒᥴ ᥟᥛᥱᥛᥫᥢᥴᥖᥣᥒᥱᥟᥢᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_COMPARE_TOOLTIP_LT": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥟᥩᥢᥴᥖᥣᥒᥰ ᥛᥫᥢᥴ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥛᥣᥭᥴᥔᥩᥒᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_COMPARE_TOOLTIP_LTE": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥟᥩᥢᥴᥖᥣᥒᥰ ᥛᥫᥢᥴ ᥟᥛᥱᥢᥢᥴ ᥚᥥᥒᥱᥙᥥᥒᥰ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥛᥣᥭᥴᥔᥩᥒᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_COMPARE_TOOLTIP_GT": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥟᥩᥢᥴᥖᥣᥒᥰ ᥕᥬᥱᥘᥫᥴ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥛᥣᥭᥴᥔᥩᥒᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_COMPARE_TOOLTIP_GTE": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥟᥩᥢᥴᥖᥣᥒᥰ ᥕᥬᥱᥘᥫᥴ ᥟᥛᥱᥢᥢᥴ ᥚᥥᥒᥱᥙᥥᥒᥰ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥛᥣᥭᥴᥔᥩᥒᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_OPERATION_TOOLTIP_AND": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥖᥒᥰᥔᥩᥒᥴᥟᥢᥴ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_OPERATION_AND": "ᥘᥦᥲ", + "LOGIC_OPERATION_TOOLTIP_OR": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥐᥛᥰᥘᥪᥢᥰᥔᥧᥖᥰ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ.", + "LOGIC_OPERATION_OR": "ᥟᥛᥱᥢᥢᥴ", + "LOGIC_NEGATE_TITLE": "ᥟᥛᥱᥓᥬᥲ %1", + "LOGIC_NEGATE_TOOLTIP": "ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥟᥛᥱᥢᥦᥢᥲᥢᥣᥴᥓᥪᥒᥴ ᥛᥦᥰᥑᥪᥢᥰ ᥞᥬᥲᥛᥣᥢᥱᥛᥦᥢᥲ. ᥔᥒᥴᥝᥣᥲ ᥟᥢᥴᥚᥫᥛᥳᥔᥬᥱ ᥛᥣᥢᥱᥛᥦᥢᥲᥓᥪᥒᥴ ᥑᥪᥢᥰᥛᥨᥢᥳᥛᥦᥰ ᥞᥬᥲᥢᥦᥢᥲᥢᥣᥴ.", + "LOGIC_BOOLEAN_TRUE": "ᥛᥣᥢᥱᥛᥦᥢᥲ", + "LOGIC_BOOLEAN_FALSE": "ᥟᥛᥱᥢᥦᥢᥲᥢᥣᥴ", + "LOGIC_BOOLEAN_TOOLTIP": "ᥛᥣᥢᥱᥛᥦᥢᥲᥘᥦᥲᥔᥒᥴ ᥟᥛᥱᥢᥦᥢᥲᥢᥣᥴᥘᥦᥲᥔᥒᥴ ᥞᥨᥢᥴᥑᥪᥢᥰ.", + "LOGIC_NULL": "ᥟᥛᥱᥑᥝᥲᥑᥣᥒᥱ", + "LOGIC_NULL_TOOLTIP": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥟᥛᥱᥑᥝᥲᥑᥣᥒᥱ", + "LOGIC_TERNARY_CONDITION": "ᥓᥣᥛᥰ", + "LOGIC_TERNARY_IF_TRUE": "ᥔᥒᥴᥝᥣᥲ ᥛᥣᥢᥱᥛᥦᥢᥲ", + "LOGIC_TERNARY_IF_FALSE": "ᥔᥒᥴᥝᥣᥲ ᥟᥛᥱᥢᥦᥢᥲᥢᥣᥴ", + "LOGIC_TERNARY_TOOLTIP": "ᥓᥣᥛᥰᥐᥨᥖᥱᥖᥨᥭᥰ ᥔᥣᥭᥴᥒᥣᥭᥴ. ᥔᥒᥴᥝᥣᥲ ᥔᥣᥭᥴᥒᥣᥭᥴᥛᥣᥢᥱᥛᥦᥢᥲ, ᥘᥥᥝᥴᥑᥪᥢᥰ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) 'ᥔᥒᥴᥛᥣᥢᥱᥛᥦᥢᥲ'; ᥘᥫᥴᥢᥢᥳ ᥘᥥᥝᥴᥑᥪᥢᥰ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) 'ᥔᥒᥴᥟᥛᥱᥢᥦᥢᥲᥢᥣᥴ'.", + "MATH_NUMBER_HELPURL": "https://tdd.wikipedia.org/wiki/ᥛᥣᥭᥴᥢᥙᥳ", + "MATH_NUMBER_TOOLTIP": "ᥛᥣᥭᥴᥢᥙᥳ ᥢᥪᥒᥲᥟᥢᥴ.", + "MATH_ARITHMETIC_HELPURL": "https://tdd.wikipedia.org/wiki/ᥙᥣᥭᥰᥢᥙᥳ", + "MATH_ARITHMETIC_TOOLTIP_ADD": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥖᥣᥒᥰᥢᥛᥴ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ ᥔᥩᥒᥴ.", + "MATH_ARITHMETIC_TOOLTIP_MINUS": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥟᥢᥴᥙᥦᥐᥱᥙᥫᥒᥲ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ ᥔᥩᥒᥴ.", + "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥟᥢᥴᥟᥝᥴᥟᥩᥐᥱ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ ᥔᥩᥒᥴ.", + "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥙᥛᥣᥱᥢ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ ᥔᥩᥒᥴ.", + "MATH_ARITHMETIC_TOOLTIP_POWER": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥖᥨᥝᥴᥢᥙᥳᥛᥣᥭᥴᥢᥪᥒᥲᥢᥭᥳ ᥓᥩᥭᥲᥞᥦᥒᥰᥙᥢᥴ ᥖᥨᥝᥴᥢᥙᥳᥛᥣᥭᥴᥔᥩᥒᥴ.", + "MATH_SINGLE_HELPURL": "https://tdd.wikipedia.org/wiki/ᥛᥣᥭᥴᥖᥨᥙᥳᥛᥫᥢᥴ", + "MATH_SINGLE_OP_ROOT": "ᥛᥣᥭᥴᥖᥨᥙᥳᥛᥫᥢᥴ", + "MATH_SINGLE_TOOLTIP_ROOT": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥛᥣᥭᥴᥖᥨᥙᥳᥛᥫᥢᥴ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_OP_ABSOLUTE": "ᥙᥐᥖᥤ", + "MATH_SINGLE_TOOLTIP_ABS": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥐᥣᥲᥑᥢᥴ (ᥢᥛᥳᥐᥖᥳ) ᥙᥐᥖᥤ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_TOOLTIP_NEG": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥟᥢᥴᥔᥣᥢᥴᥑᥖᥰ ᥢᥬᥰ ᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_TOOLTIP_LN": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥘᥩᥐᥰᥘᥣᥭᥰᥢᥙᥳ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_TOOLTIP_LOG10": "ᥘᥥᥝᥴᥑᥪᥢᥰ ᥙᥪᥢᥳᥗᥣᥢᥴ 10 ᥘᥩᥐᥰᥘᥣᥭᥰᥢᥙᥳ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_TOOLTIP_EXP": "ᥘᥥᥝᥴᥑᥪᥢᥰ e ᥐᥣᥱᥖᥤᥲ ᥙᥣᥱᥝᥣᥱ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_SINGLE_TOOLTIP_POW10": "ᥘᥥᥝᥴᥑᥪᥢᥰ 10 ᥐᥣᥱᥖᥤᥲ ᥙᥣᥱᥝᥣᥱ ᥢᥬᥰᥛᥣᥭᥴᥢᥙᥳ.", + "MATH_IS_EVEN": "ᥙᥥᥢᥴᥐᥨᥙᥳ", + "MATH_IS_ODD": "ᥙᥥᥢᥴᥐᥤᥐᥲ" +} diff --git a/msg/json/th.json b/msg/json/th.json index 2e8d5b8c7..cf969982c 100644 --- a/msg/json/th.json +++ b/msg/json/th.json @@ -61,7 +61,6 @@ "COLOUR_BLEND_COLOUR2": "สีที่ 2", "COLOUR_BLEND_RATIO": "อัตราส่วน", "COLOUR_BLEND_TOOLTIP": "ผสมสองสีเข้าด้วยกันด้วยอัตราส่วน (0.0 - 1.0)", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ทำซ้ำ %1 ครั้ง", "CONTROLS_REPEAT_INPUT_DO": "ทำ", "CONTROLS_REPEAT_TOOLTIP": "ทำซ้ำบางคำสั่งหลายครั้ง", @@ -118,7 +117,6 @@ "MATH_ARITHMETIC_TOOLTIP_MULTIPLY": "คืนค่าผลคูณของตัวเลขทั้งสองจำนวน", "MATH_ARITHMETIC_TOOLTIP_DIVIDE": "คืนค่าผลหารของตัวเลขทั้งสองจำนวน", "MATH_ARITHMETIC_TOOLTIP_POWER": "คืนค่าผลการยกกำลัง โดยตัวเลขแรกเป็นฐาน และตัวเลขที่สองเป็นเลขชี้กำลัง", - "MATH_SINGLE_HELPURL": "https://en.wikipedia.org/wiki/Square_root", "MATH_SINGLE_OP_ROOT": "รากที่สอง", "MATH_SINGLE_TOOLTIP_ROOT": "คืนค่ารากที่สองของตัวเลข", "MATH_SINGLE_OP_ABSOLUTE": "ค่าสัมบูรณ์", @@ -145,7 +143,6 @@ "MATH_IS_NEGATIVE": "เป็นเลขติดลบ", "MATH_IS_DIVISIBLE_BY": "หารลงตัว", "MATH_IS_TOOLTIP": "ตรวจว่าตัวเลขเป็นจำนวนคู่ จำนวนคี่ จำนวนเฉพาะ จำนวนเต็ม เลขบวก เลขติดลบ หรือหารด้วยเลขที่กำหนดลงตัวหรือไม่ คืนค่าเป็นจริงหรือเท็จ", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "เปลี่ยนค่า %1 เป็น %2", "MATH_CHANGE_TOOLTIP": "เพิ่มค่าของตัวแปร \"%1\"", "MATH_ROUND_HELPURL": "https://th.wikipedia.org/wiki/การปัดเศษ", @@ -169,18 +166,14 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "คืนค่าส่วนเบี่ยงเบนมาตรฐานของรายการ", "MATH_ONLIST_OPERATOR_RANDOM": "สุ่มรายการ", "MATH_ONLIST_TOOLTIP_RANDOM": "สุ่มคืนค่าสิ่งที่อยู่ในรายการ", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "เศษของ %1 ÷ %2", "MATH_MODULO_TOOLTIP": "คืนค่าเศษที่ได้จากการหารของตัวเลขทั้งสองจำนวน", "MATH_CONSTRAIN_TITLE": "จำกัดค่า %1 ต่ำสุด %2 สูงสุด %3", "MATH_CONSTRAIN_TOOLTIP": "จำกัดค่าของตัวเลขให้อยู่ในช่วงที่กำหนด", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "สุ่มเลขจำนวนเต็มตั้งแต่ %1 จนถึง %2", "MATH_RANDOM_INT_TOOLTIP": "สุ่มเลขจำนวนเต็มจากช่วงที่กำหนด", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "สุ่มเลขเศษส่วน", "MATH_RANDOM_FLOAT_TOOLTIP": "สุ่มเลขเศษส่วน ตั้งแต่ 0.0 แต่ไม่เกิน 1.0", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 ของ X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "เปลี่ยนอาร์กแทนเจนต์ของชุด (X, Y) จากองศา 180 เป็น -180.", "TEXT_TEXT_HELPURL": "https://th.wikipedia.org/wiki/สายอักขระ", @@ -291,7 +284,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "ถึง # จากท้ายสุด", "LISTS_GET_SUBLIST_END_LAST": "ถึง ท้ายสุด", "LISTS_GET_SUBLIST_TOOLTIP": "สร้างสำเนารายการในช่วงที่กำหนด", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "เรียงลำดับ %1 %2 %3", "LISTS_SORT_TOOLTIP": "เรียงลำดับสำเนาของรายชื่อ", "LISTS_SORT_ORDER_ASCENDING": "น้อยไปหามาก", diff --git a/msg/json/tr.json b/msg/json/tr.json index f22282ee8..307b411fe 100644 --- a/msg/json/tr.json +++ b/msg/json/tr.json @@ -65,13 +65,11 @@ "COLOUR_PICKER_TOOLTIP": "Paletten bir renk seç.", "COLOUR_RANDOM_TITLE": "rastgele renk", "COLOUR_RANDOM_TOOLTIP": "Rastgele bir renk seç.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "renk değerleri", "COLOUR_RGB_RED": "kırmızı", "COLOUR_RGB_GREEN": "yeşil", "COLOUR_RGB_BLUE": "mavi", "COLOUR_RGB_TOOLTIP": "Kırmızı, yeşil ve mavinin belirli miktarıyla bir renk oluştur. Tüm değerler 0 ile 100 arasında olmalıdır.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "karıştır", "COLOUR_BLEND_COLOUR1": "1. renk", "COLOUR_BLEND_COLOUR2": "2. renk", @@ -130,9 +128,6 @@ "LOGIC_TERNARY_TOOLTIP": "'test' durumunu kontrol edin. Koşul true olursa, 'if true' değerini döndürür; aksi takdirde 'if false' değerini döndürür.", "MATH_NUMBER_HELPURL": "https://tr.wikipedia.org/wiki/Sayı", "MATH_NUMBER_TOOLTIP": "Sayı.", - "MATH_ADDITION_SYMBOL": "+", - "MATH_SUBTRACTION_SYMBOL": "tire", - "MATH_DIVISION_SYMBOL": "÷", "MATH_MULTIPLICATION_SYMBOL": "x", "MATH_POWER_SYMBOL": "üst alma", "MATH_TRIG_SIN": "Sinüs", @@ -182,7 +177,6 @@ "MATH_ROUND_OPERATOR_ROUND": "yuvarla", "MATH_ROUND_OPERATOR_ROUNDUP": "yukarı yuvarla", "MATH_ROUND_OPERATOR_ROUNDDOWN": "aşağı yuvarla", - "MATH_ONLIST_HELPURL": "", "MATH_ONLIST_OPERATOR_SUM": "listenin toplamı", "MATH_ONLIST_TOOLTIP_SUM": "Listedeki tüm sayıların toplamını döndürün.", "MATH_ONLIST_OPERATOR_MIN": "listenin en küçüğü", @@ -236,7 +230,6 @@ "TEXT_CHARAT_FIRST": "ilk harfini al", "TEXT_CHARAT_LAST": "son harfi al", "TEXT_CHARAT_RANDOM": "rastgele harf al", - "TEXT_CHARAT_TAIL": "", "TEXT_CHARAT_TOOLTIP": "Belirtilen konumdaki harfi döndürür.", "TEXT_GET_SUBSTRING_TOOLTIP": "Metnin belirli bir bölümünü döndürür.", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "metinde", @@ -246,7 +239,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "# harfe", "TEXT_GET_SUBSTRING_END_FROM_END": "en başından # harfi", "TEXT_GET_SUBSTRING_END_LAST": "son harfe", - "TEXT_GET_SUBSTRING_TAIL": "", "TEXT_CHANGECASE_TOOLTIP": "Metnin bir kopyasını farklı bir durumda döndürün.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "ÜST DURUMA", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "küçük harfe", @@ -262,13 +254,11 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "Bir numara için kullanıcı sor.", "TEXT_PROMPT_TOOLTIP_TEXT": "Bazı metinler için kullanıcı sor.", "TEXT_COUNT_MESSAGE0": "%1 içinde %2 say.", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "Bazı metnin başka bir metnin içinde kaç kez oluştuğunu sayın.", "TEXT_REPLACE_MESSAGE0": "%1 yerine %3 içindeki %2 ile değiştir", "TEXT_REPLACE_TOOLTIP": "Bazı metnin tüm tekrarlarını başka bir metnin içinde değiştirin.", "TEXT_REVERSE_MESSAGE0": "%1 ters çevirin", "TEXT_REVERSE_TOOLTIP": "Metindeki karakterlerin sırasını tersine çevirir.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "boş liste oluştur", "LISTS_CREATE_EMPTY_TOOLTIP": "Veri kaydı içermeyen 0 uzunluğunda bir liste döndürür", "LISTS_CREATE_WITH_TOOLTIP": "İstediğiniz sayıda öğe içeren bir liste oluşturun.", @@ -294,7 +284,6 @@ "LISTS_GET_INDEX_FIRST": "ilk", "LISTS_GET_INDEX_LAST": "son", "LISTS_GET_INDEX_RANDOM": "rastgele", - "LISTS_GET_INDEX_TAIL": "", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 ilk öğedir.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 son öğedir.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "Listede belirtilen konumda bulunan öğeyi döndürür.", @@ -326,9 +315,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "#", "LISTS_GET_SUBLIST_END_FROM_END": "sonuna kadar #", "LISTS_GET_SUBLIST_END_LAST": "sona", - "LISTS_GET_SUBLIST_TAIL": "", "LISTS_GET_SUBLIST_TOOLTIP": "Listenin belirtilen bölümünün bir kopyasını oluşturur.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sıra %1 %2 %3", "LISTS_SORT_TOOLTIP": "Listenin bir kopyasını sıralayın.", "LISTS_SORT_ORDER_ASCENDING": "artan", @@ -343,7 +330,6 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Metin listesini bir sınırlayıcı ile ayrılmış tek bir metinde birleştirin.", "LISTS_REVERSE_MESSAGE0": "%1 ters çevirin", "LISTS_REVERSE_TOOLTIP": "Listenin bir kopyasını ters çevirin.", - "ORDINAL_NUMBER_SUFFIX": "", "VARIABLES_GET_TOOLTIP": "Bu değişkenin değerini döndürür.", "VARIABLES_GET_CREATE_SET": "'set %1' oluştur", "VARIABLES_SET": "%1 %2 ayarla", @@ -354,7 +340,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "bir şey yap", "PROCEDURES_BEFORE_PARAMS": "ile:", "PROCEDURES_CALL_BEFORE_PARAMS": "ile:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Çıkışı olmayan bir işlev oluşturur.", "PROCEDURES_DEFNORETURN_COMMENT": "Bu işlevi açıklayın...", "PROCEDURES_DEFRETURN_HELPURL": "https://tr.wikipedia.org/wiki/Altyordam", @@ -373,7 +358,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Vurgulama işlevi tanımı", "PROCEDURES_CREATE_DO": "'%1' oluştur", "PROCEDURES_IFRETURN_TOOLTIP": "Bir değer true ise, ikinci bir değer döndürün.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Uyarı: Bu blok yalnızca bir işlev tanımı içinde kullanılabilir.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Bir şeyler söyle...", "WORKSPACE_ARIA_LABEL": "Blockly Çalışma Alanı", diff --git a/msg/json/uk.json b/msg/json/uk.json index b0763406e..e5d397ca5 100644 --- a/msg/json/uk.json +++ b/msg/json/uk.json @@ -54,13 +54,11 @@ "COLOUR_PICKER_TOOLTIP": "Вибрати колір з палітри.", "COLOUR_RANDOM_TITLE": "випадковий колір", "COLOUR_RANDOM_TOOLTIP": "Вибрати колір навмання.", - "COLOUR_RGB_HELPURL": "https://www.december.com/html/spec/colorpercompact.html", "COLOUR_RGB_TITLE": "колір з", "COLOUR_RGB_RED": "червоний", "COLOUR_RGB_GREEN": "зелений", "COLOUR_RGB_BLUE": "синій", "COLOUR_RGB_TOOLTIP": "Створити колір зі вказаними рівнями червоного, зеленого та синього. Усі значення мають бути від 0 до 100.", - "COLOUR_BLEND_HELPURL": "https://meyerweb.com/eric/tools/color-blend/#:::rgbp", "COLOUR_BLEND_TITLE": "змішати", "COLOUR_BLEND_COLOUR1": "колір 1", "COLOUR_BLEND_COLOUR2": "колір 2", @@ -109,10 +107,8 @@ "LOGIC_BOOLEAN_TRUE": "істина", "LOGIC_BOOLEAN_FALSE": "хибність", "LOGIC_BOOLEAN_TOOLTIP": "Повертає значення істина або хибність.", - "LOGIC_NULL_HELPURL": "https://en.wikipedia.org/wiki/Nullable_type", "LOGIC_NULL": "ніщо", "LOGIC_NULL_TOOLTIP": "Повертає ніщо.", - "LOGIC_TERNARY_HELPURL": "https://en.wikipedia.org/wiki/%3F:", "LOGIC_TERNARY_CONDITION": "тест", "LOGIC_TERNARY_IF_TRUE": "якщо істина", "LOGIC_TERNARY_IF_FALSE": "якщо хибність", @@ -152,7 +148,6 @@ "MATH_IS_NEGATIVE": "від'ємне", "MATH_IS_DIVISIBLE_BY": "ділиться на", "MATH_IS_TOOLTIP": "Перевіряє, чи число парне, непарне, просте, ціле, додатне, від'ємне або чи воно ділиться на певне число без остачі. Повертає істину або хибність.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "змінити %1 на %2", "MATH_CHANGE_TOOLTIP": "Додати число до змінної '%1'.", "MATH_ROUND_HELPURL": "https://uk.wikipedia.org/wiki/Округлення", @@ -188,12 +183,10 @@ "MATH_RANDOM_FLOAT_HELPURL": "https://uk.wikipedia.org/wiki/Генерація_випадкових_чисел", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "випадковий дріб", "MATH_RANDOM_FLOAT_TOOLTIP": "Повертає випадковий дріб від 0,0 (включно) та 1.0 (не включно).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 по X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Повертає арктангенс точки (X, Y) у градусах від -180 до 180.", "TEXT_TEXT_HELPURL": "https://uk.wikipedia.org/wiki/Рядок_(програмування)", "TEXT_TEXT_TOOLTIP": "Символ, слово або рядок тексту.", - "TEXT_JOIN_HELPURL": "https://github.com/google/blockly/wiki/Text#text-creation", "TEXT_JOIN_TITLE_CREATEWITH": "створити текст з", "TEXT_JOIN_TOOLTIP": "Створити фрагмент тексту шляхом з'єднування будь-якого числа елементів.", "TEXT_CREATE_JOIN_TITLE_JOIN": "приєднати", @@ -209,14 +202,12 @@ "TEXT_INDEXOF_TITLE": "у тексті %1 %2 %3.", "TEXT_INDEXOF_OPERATOR_FIRST": "знайти перше входження тексту", "TEXT_INDEXOF_OPERATOR_LAST": "знайти останнє входження тексту", - "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", "TEXT_CHARAT_TITLE": "з тексту %1 %2", "TEXT_CHARAT_FROM_START": "отримати символ #", "TEXT_CHARAT_FROM_END": "отримати символ # з кінця", "TEXT_CHARAT_FIRST": "отримати перший символ", "TEXT_CHARAT_LAST": "отримати останній символ", "TEXT_CHARAT_RANDOM": "отримати випадковий символ", - "TEXT_CHARAT_TAIL": "-ий.", "TEXT_CHARAT_TOOLTIP": "Повертає символ у зазначеній позиції.", "TEXT_GET_SUBSTRING_TOOLTIP": "Повертає заданий фрагмент тексту.", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "у тексті", @@ -226,7 +217,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "до символу #", "TEXT_GET_SUBSTRING_END_FROM_END": "до символу # з кінця", "TEXT_GET_SUBSTRING_END_LAST": "до останнього символу", - "TEXT_GET_SUBSTRING_TAIL": "-ого.", "TEXT_CHANGECASE_TOOLTIP": "В іншому випадку повертає копію тексту.", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "до ВЕРХНЬОГО регістру", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "до нижнього регістру", @@ -247,7 +237,6 @@ "TEXT_REPLACE_TOOLTIP": "Замінює всі входження деякого тексту іншим текстом.", "TEXT_REVERSE_MESSAGE0": "розвернути %1", "TEXT_REVERSE_TOOLTIP": "Змінює на протилежний порядок символів у тексті.", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "створити порожній список", "LISTS_CREATE_EMPTY_TOOLTIP": "Повертає список, довжиною 0, що не містить записів даних", "LISTS_CREATE_WITH_TOOLTIP": "Створює список з будь-якою кількістю елементів.", @@ -273,7 +262,6 @@ "LISTS_GET_INDEX_FIRST": "перший", "LISTS_GET_INDEX_LAST": "останній", "LISTS_GET_INDEX_RANDOM": "випадковий", - "LISTS_GET_INDEX_TAIL": "-ий.", "LISTS_INDEX_FROM_START_TOOLTIP": "%1 - це перший елемент.", "LISTS_INDEX_FROM_END_TOOLTIP": "%1 - це останній елемент.", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "Повертає елемент у заданій позиції у списку.", @@ -305,9 +293,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "до #", "LISTS_GET_SUBLIST_END_FROM_END": "до # з кінця", "LISTS_GET_SUBLIST_END_LAST": "до останнього", - "LISTS_GET_SUBLIST_TAIL": "символу.", "LISTS_GET_SUBLIST_TOOLTIP": "Створює копію вказаної частини списку.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "сортувати %3 %1 %2", "LISTS_SORT_TOOLTIP": "Сортувати копію списку.", "LISTS_SORT_ORDER_ASCENDING": "за зростанням", @@ -322,7 +308,6 @@ "LISTS_SPLIT_TOOLTIP_JOIN": "Злити список текстів у єдиний текст, відокремивши розділювачами.", "LISTS_REVERSE_MESSAGE0": "розвернути %1", "LISTS_REVERSE_TOOLTIP": "Змінити порядок копії списку на зворотний.", - "ORDINAL_NUMBER_SUFFIX": "-ий.", "VARIABLES_GET_TOOLTIP": "Повертає значення цієї змінної.", "VARIABLES_GET_CREATE_SET": "Створити 'встановити %1'", "VARIABLES_SET": "встановити %1 до %2", @@ -333,7 +318,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "щось зробити", "PROCEDURES_BEFORE_PARAMS": "з:", "PROCEDURES_CALL_BEFORE_PARAMS": "з:", - "PROCEDURES_DEFNORETURN_DO": "блок тексту", "PROCEDURES_DEFNORETURN_TOOLTIP": "Створює функцію без виводу.", "PROCEDURES_DEFNORETURN_COMMENT": "Опишіть цю функцію...", "PROCEDURES_DEFRETURN_HELPURL": "https://uk.wikipedia.org/wiki/Підпрограма", @@ -352,7 +336,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "Підсвітити визначення функції", "PROCEDURES_CREATE_DO": "Створити \"%1\"", "PROCEDURES_IFRETURN_TOOLTIP": "Якщо значення істинне, то повернути друге значення.", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "Попередження: цей блок може використовуватися лише в межах визначення функції.", "WORKSPACE_COMMENT_DEFAULT_TEXT": "Скажіть щось...", "WORKSPACE_ARIA_LABEL": "Робоча область Blockly", diff --git a/msg/json/ur.json b/msg/json/ur.json index d869380c6..d5c5036cd 100644 --- a/msg/json/ur.json +++ b/msg/json/ur.json @@ -46,7 +46,6 @@ "DELETE_VARIABLE_CONFIRMATION": "%2 متغیر کے %1 استعمال کو حذف کریں؟", "CANNOT_DELETE_VARIABLE_PROCEDURE": "متغیر '٪ 1' کو حذف نہیں کر سکتا کیونکہ یہ فنکشن کی تعریف کا حصہ ہے '٪ 2'", "DELETE_VARIABLE": "'٪ 1' متغیر کو حذف کریں", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "پیلیٹ سے رنگ منتخب کریں", "COLOUR_RANDOM_TITLE": "ناسیدھا رنگ", "COLOUR_RANDOM_TOOLTIP": "کسی بھی رنگ کو منتجب کریں", @@ -60,7 +59,6 @@ "COLOUR_BLEND_COLOUR2": "رنگ 2", "COLOUR_BLEND_RATIO": "ریشیو", "COLOUR_BLEND_TOOLTIP": "دیئے گئے ریشیو میں دو رنگوں کو مرکب کریں (0.0-1.0)", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "%1 مرتبہ دہرائے", "CONTROLS_REPEAT_INPUT_DO": "کریں", "CONTROLS_REPEAT_TOOLTIP": "کچھ جملوں کو کہیں مرتبہ کریں۔", @@ -79,7 +77,6 @@ "CONTROLS_IF_MSG_IF": "اگر", "CONTROLS_IF_MSG_ELSEIF": "دوسراں اگر", "CONTROLS_IF_MSG_ELSE": "دوسراں", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_OPERATION_AND": "اور", "LOGIC_OPERATION_OR": "یا", "LOGIC_NEGATE_TITLE": "%1 نہیں", @@ -88,9 +85,7 @@ "LOGIC_TERNARY_CONDITION": "ٹیسٹ", "LOGIC_TERNARY_IF_TRUE": "اگ سچ ہے", "LOGIC_TERNARY_IF_FALSE": "اگر غلط ہے", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "ایک نمبر.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", "MATH_SINGLE_OP_ROOT": "اسکویر روٹ", "MATH_SINGLE_OP_ABSOLUTE": "بالکل", "TEXT_CHARAT_FROM_START": "# حرف حاصل کریں", diff --git a/msg/json/uz.json b/msg/json/uz.json index 94e58a654..c8d830e60 100644 --- a/msg/json/uz.json +++ b/msg/json/uz.json @@ -26,7 +26,6 @@ "VARIABLE_ALREADY_EXISTS": "'%1' nomli o'zgaruvchi mavjud.", "VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE": "'%1' nomli o'zgaruvchi boshqa tur uchun allaqachon mavjud: '%2'.", "DELETE_VARIABLE": "'%1' o'zgaruvchisini o'chirib tashlang", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_RANDOM_TITLE": "tasodifiy rang", "COLOUR_RANDOM_TOOLTIP": "Tasodifiy rangni tanlang.", "COLOUR_RGB_RED": "qizil", diff --git a/msg/json/vi.json b/msg/json/vi.json index 886cdf7a7..43c68b346 100644 --- a/msg/json/vi.json +++ b/msg/json/vi.json @@ -9,6 +9,7 @@ "Nguyễn Mạnh An", "Qneutron", "SierraNguyen", + "TARGET6tidiem", "Withoutaname" ] }, @@ -62,7 +63,6 @@ "COLOUR_BLEND_COLOUR2": "màu 2", "COLOUR_BLEND_RATIO": "tỉ lệ", "COLOUR_BLEND_TOOLTIP": "Pha hai màu với nhau theo tỉ lệ (0 - 100).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "lặp lại %1 lần", "CONTROLS_REPEAT_INPUT_DO": "thực hiện", "CONTROLS_REPEAT_TOOLTIP": "Thực hiện các lệnh vài lần.", @@ -113,6 +113,12 @@ "LOGIC_TERNARY_TOOLTIP": "Kiểm tra điều kiện. Nếu điều kiện đúng, hoàn trả giá trị từ mệnh đề \"nếu đúng\" nếu không đúng, hoàn trả giá trị từ mệnh đề \"nếu sai\".", "MATH_NUMBER_HELPURL": "https://vi.wikipedia.org/wiki/S%E1%BB%91", "MATH_NUMBER_TOOLTIP": "Một con số.", + "MATH_TRIG_SIN": "sin", + "MATH_TRIG_COS": "cos", + "MATH_TRIG_TAN": "tan", + "MATH_TRIG_ASIN": "asin", + "MATH_TRIG_ACOS": "acos", + "MATH_TRIG_ATAN": "atan", "MATH_ARITHMETIC_HELPURL": "https://vi.wikipedia.org/wiki/S%E1%BB%91_h%E1%BB%8Dc", "MATH_ARITHMETIC_TOOLTIP_ADD": "Hoàn trả tổng của hai con số.", "MATH_ARITHMETIC_TOOLTIP_MINUS": "Hoàn trả hiệu của hai con số.", @@ -136,7 +142,6 @@ "MATH_TRIG_TOOLTIP_ASIN": "Hoàn trả Arcsin của một góc (theo độ).", "MATH_TRIG_TOOLTIP_ACOS": "Hoàn trả Arccos của một góc (theo độ).", "MATH_TRIG_TOOLTIP_ATAN": "Hoàn trả Arctang của một góc (theo độ).", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Hoàn trả các đẳng số thường gặp: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (vô cực).", "MATH_IS_EVEN": "là số chẵn", "MATH_IS_ODD": "là số lẻ", @@ -149,12 +154,10 @@ "MATH_CHANGE_HELPURL": "https://vi.wikipedia.org/wiki/Ph%C3%A9p_c%E1%BB%99ng", "MATH_CHANGE_TITLE": "cộng vào %1 giá trị %2", "MATH_CHANGE_TOOLTIP": "Cộng số đầu vào vào biến \"%1\".", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Làm tròn lên hoặc tròn xuống số đầu vào.", "MATH_ROUND_OPERATOR_ROUND": "làm tròn", "MATH_ROUND_OPERATOR_ROUNDUP": "làm tròn lên", "MATH_ROUND_OPERATOR_ROUNDDOWN": "làm tròn xuống", - "MATH_ONLIST_HELPURL": "", "MATH_ONLIST_OPERATOR_SUM": "tổng của một danh sách", "MATH_ONLIST_TOOLTIP_SUM": "Hoàn trả tổng số của tất cả các số trong danh sách.", "MATH_ONLIST_OPERATOR_MIN": "số nhỏ nhất của một danh sách", @@ -171,23 +174,18 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Hoàn trả độ lệch chuẩn của danh sách số.", "MATH_ONLIST_OPERATOR_RANDOM": "một số bất kỳ của một danh sách", "MATH_ONLIST_TOOLTIP_RANDOM": "Hoàn trả một số bất kỳ từ các số trong danh sách.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "số dư của %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Chia số thứ nhất cho số thứ hai rồi hoàn trả số dư từ.", "MATH_CONSTRAIN_TITLE": "giới hạn %1 không dưới %2 không hơn %3", "MATH_CONSTRAIN_TOOLTIP": "Giới hạn số đầu vào để không dưới số thứ nhất và không hơn số thứ hai.", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "Một số nguyên bất kỳ từ %1 đến %2", "MATH_RANDOM_INT_TOOLTIP": "Hoàn trả một số nguyên bất kỳ lớn hơn hoặc bằng số đầu và nhỏ hơn hoặc bằng số sau.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "phân số bất kỳ", "MATH_RANDOM_FLOAT_TOOLTIP": "Hoàn trả một phân số bất kỳ không nhỏ hơn 0.0 và không lớn hơn 1.0.", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 của X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Trả về arctangent của điểm (X, Y) trong khoảng từ -180 độ đến 180 độ.", "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/string_(computer_science)", "TEXT_TEXT_TOOLTIP": "Một ký tự, một từ, hay một dòng.", - "TEXT_JOIN_HELPURL": "", "TEXT_JOIN_TITLE_CREATEWITH": "tạo văn bản từ", "TEXT_JOIN_TOOLTIP": "Tạo một văn bản từ các thành phần.", "TEXT_CREATE_JOIN_TITLE_JOIN": "kết nối", @@ -295,7 +293,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "đến (đếm từ cuối) thứ", "LISTS_GET_SUBLIST_END_LAST": "đến cuối cùng", "LISTS_GET_SUBLIST_TOOLTIP": "Lấy một mảng của danh sách này để tạo danh sách con.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "sắp xếp %1 %2 %3", "LISTS_SORT_TOOLTIP": "Sắp xếp một bản sao của một danh sách.", "LISTS_SORT_ORDER_ASCENDING": "tăng dần", @@ -319,7 +316,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "làm gì đó", "PROCEDURES_BEFORE_PARAMS": "với:", "PROCEDURES_CALL_BEFORE_PARAMS": "với:", - "PROCEDURES_DEFNORETURN_DO": "", "PROCEDURES_DEFNORETURN_TOOLTIP": "Một thủ tục không có giá trị hoàn trả.", "PROCEDURES_DEFNORETURN_COMMENT": "Mô tả hàm này...", "PROCEDURES_DEFRETURN_RETURN": "hoàn trả", diff --git a/msg/json/yo.json b/msg/json/yo.json index 524d89e03..b6c62963c 100644 --- a/msg/json/yo.json +++ b/msg/json/yo.json @@ -39,7 +39,6 @@ "DELETE_VARIABLE_CONFIRMATION": "Paa %1 lilo '%2' oniruuru rẹ?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "E ko lee paa Oniruuru rẹ ' %1' nitori wipe o je ara itumọ isise eto yi '%2'", "DELETE_VARIABLE": "Paa awon '%1' Oniruuru rẹ", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_PICKER_TOOLTIP": "Yan awọ kan lati inu patako awọ.", "COLOUR_RANDOM_TITLE": "awọ àrìnàkò", "COLOUR_RANDOM_TOOLTIP": "Yan awọ kan ni ọna àrìnàkò.", @@ -53,7 +52,6 @@ "COLOUR_BLEND_COLOUR2": "awọ 2", "COLOUR_BLEND_RATIO": "ipin", "COLOUR_BLEND_TOOLTIP": "Da awo meji papo pelu ipin (0.0 - 1.0).", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "Iye igba %1 ti tun ṣe", "CONTROLS_REPEAT_INPUT_DO": "ṣe", "CONTROLS_REPEAT_TOOLTIP": "Ṣe awon alaye ni igba pupo.", @@ -80,7 +78,6 @@ "CONTROLS_IF_IF_TOOLTIP": "Ṣe afikun, se ayọkuro, tabi se a tun beere abala yii lati se a tun gbejade bulọọku yii.", "CONTROLS_IF_ELSEIF_TOOLTIP": "Ṣe afikun si ipo yii bi bulọọku.", "CONTROLS_IF_ELSE_TOOLTIP": "Ṣe afikun ipari, mu-gbogbo ipo si bulọọku.", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_COMPARE_TOOLTIP_EQ": "Da otito pada b iafikun mejeji ba dogba bakanna.", "LOGIC_COMPARE_TOOLTIP_NEQ": "Da otito pada bi afikun mejeji ko ba dogba bakanna.", "LOGIC_COMPARE_TOOLTIP_LT": "Da otito pada bi afikun akooko ba kere ju afiku keji lo.", @@ -120,14 +117,12 @@ "MATH_SINGLE_TOOLTIP_LOG10": "Da ipilẹ 10 lọgaridimu nọmba kan pada.", "MATH_SINGLE_TOOLTIP_EXP": "Da e pada si agbara ti nọmba kan.", "MATH_SINGLE_TOOLTIP_POW10": "Da 10 pada si agbara nọmba kan.", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_TRIG_TOOLTIP_SIN": "Da sine ti digiri pada (kii ṣe Radian).", "MATH_TRIG_TOOLTIP_COS": "Da cosine ti digiri pada (kii ṣe Radian).", "MATH_TRIG_TOOLTIP_TAN": "Da tangent ti digiri pada (kii ṣe Radian).", "MATH_TRIG_TOOLTIP_ASIN": "Da arcsine ti digiri pada.", "MATH_TRIG_TOOLTIP_ACOS": "Da arccosine ti digiri pada.", "MATH_TRIG_TOOLTIP_ATAN": "Da arctangent ti digiri pada.", - "MATH_CONSTANT_HELPURL": "https://en.wikipedia.org/wiki/Mathematical_constant", "MATH_CONSTANT_TOOLTIP": "Da ọkan ninu awọn aiyipada ti o wọpọ pada: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (ailopin).", "MATH_IS_EVEN": "je se e pin", "MATH_IS_ODD": "je ai se e pin", @@ -137,10 +132,8 @@ "MATH_IS_NEGATIVE": "je ai dara", "MATH_IS_DIVISIBLE_BY": "je sisee pin pẹlu", "MATH_IS_TOOLTIP": "Ṣe ayẹwo boya nọmba jẹ eyi to se pin, ai se pin, akori, odidi, ti o dara, ti ko dara, tabi ti o ba se e pin pelu nọmba kan. Pada otitọ tabi irọ.", - "MATH_CHANGE_HELPURL": "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter", "MATH_CHANGE_TITLE": "iyipada %1 nipasẹ %2", "MATH_CHANGE_TOOLTIP": "Se afiku si nọmba orisirisi '%1'.", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", "MATH_ROUND_TOOLTIP": "Pa oju nọmba de soke tabi si isalẹ.", "MATH_ROUND_OPERATOR_ROUND": "pa ju de", "MATH_ROUND_OPERATOR_ROUNDUP": "pa ju de soke", @@ -161,21 +154,16 @@ "MATH_ONLIST_TOOLTIP_STD_DEV": "Da iṣiro deede ti akojọ pada.", "MATH_ONLIST_OPERATOR_RANDOM": "àrìnàkò nkan ti akojọ", "MATH_ONLIST_TOOLTIP_RANDOM": "Da àrìnàkò ida ipilẹ nkan lati inu akojọ.", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", "MATH_MODULO_TITLE": "iyokù %1 ÷ %2", "MATH_MODULO_TOOLTIP": "Da iyokù lati pinpin awọn nọmba meji pada.", "MATH_CONSTRAIN_TITLE": "atokọ %1 kukuru %2 giga %3", "MATH_CONSTRAIN_TOOLTIP": "Ṣe atokọ nọmba laarin awọn nọmba kukuru ati giga. (ini afikun).", - "MATH_RANDOM_INT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_INT_TITLE": "oniruru abala lati %1 si %2", "MATH_RANDOM_INT_TOOLTIP": "Da àrìnàkò abala laarin awon opin pato meji pada, ini afikun.", - "MATH_RANDOM_FLOAT_HELPURL": "https://en.wikipedia.org/wiki/Random_number_generation", "MATH_RANDOM_FLOAT_TITLE_RANDOM": "oniruru ipin", "MATH_RANDOM_FLOAT_TOOLTIP": "Da àrìnàkò ida pada laarin 0.0 (ini afikun) ati 1.0 (iyasọtọ).", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 X:%1 Y:%2", "MATH_ATAN2_TOOLTIP": "Da ojuami arctangent pada (X, Y) ni awon digiri lati -180 si 180.", - "TEXT_TEXT_HELPURL": "https://en.wikipedia.org/wiki/String_(computer_science)", "TEXT_TEXT_TOOLTIP": "Lẹta, ọrọ, tabi ila ọrọ.", "TEXT_JOIN_TITLE_CREATEWITH": "ṣẹ ẹda ọrọ pẹlu", "TEXT_JOIN_TOOLTIP": "Ṣẹda ọrọ kan nipa ṣiṣepọ gbogbo awọn ohun kan.", @@ -283,7 +271,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "sii # lati opin", "LISTS_GET_SUBLIST_END_LAST": "sii opin", "LISTS_GET_SUBLIST_TOOLTIP": "Ṣẹda ẹda ti apa kan ti o wa ninu akojọ.", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "to %1 %2 %3", "LISTS_SORT_TOOLTIP": "To ẹda akojọ lẹsẹẹsẹ.", "LISTS_SORT_ORDER_ASCENDING": "si oke", @@ -313,9 +300,7 @@ "PROCEDURES_DEFRETURN_TOOLTIP": "Ṣẹda iṣẹ pẹlu iṣagbejade kan.", "PROCEDURES_ALLOW_STATEMENTS": "gba alaye laaye", "PROCEDURES_DEF_DUPLICATE_WARNING": "Ikilo: Isẹ yii ni awọn ẹda odiwọn.", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLNORETURN_TOOLTIP": "Ṣe ṣalaye-iṣẹ ti olumulo '%1'.", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_CALLRETURN_TOOLTIP": "Ṣe ṣalaye-iṣẹ ti olumulo '%1' kii o sii lo iṣagbejade rẹ.", "PROCEDURES_MUTATORCONTAINER_TITLE": "igbewọle", "PROCEDURES_MUTATORCONTAINER_TOOLTIP": "Fikun, yọ kuro, tabi tun beere awọn igbewọle si iṣẹ yii.", diff --git a/msg/json/zgh.json b/msg/json/zgh.json index 8d5a525bb..33401304c 100644 --- a/msg/json/zgh.json +++ b/msg/json/zgh.json @@ -27,7 +27,6 @@ "NEW_VARIABLE_TYPE_TITLE": "ⴰⵏⴰⵡ ⴰⵎⴰⵢⵏⵓ ⵏ ⵓⵎⵙⴽⵉⵍ:", "NEW_VARIABLE_TITLE": "ⵉⵙⵎ ⵏ ⵓⵎⵙⴽⵉⵍ ⴰⵎⴰⵢⵏⵓ:", "DELETE_VARIABLE": "ⴽⴽⵙ ⴰⵎⵙⴽⵉⵍ '%1'", - "COLOUR_PICKER_HELPURL": "https://en.wikipedia.org/wiki/Color", "COLOUR_RGB_TITLE": "ⴽⵍⵓ ⵙ", "COLOUR_RGB_RED": "ⴰⵣⴳⴳⵯⴰⵖ", "COLOUR_RGB_GREEN": "ⴰⵣⴳⵣⴰ", @@ -37,7 +36,6 @@ "COLOUR_BLEND_COLOUR1": "ⴰⴽⵍⵓ 1", "COLOUR_BLEND_COLOUR2": "ⴰⴽⵍⵓ 2", "COLOUR_BLEND_RATIO": "ⴰⵙⵙⴰⵖ", - "CONTROLS_REPEAT_HELPURL": "https://en.wikipedia.org/wiki/For_loop", "CONTROLS_REPEAT_TITLE": "ⴰⵍⵙ %1 ⵜⵉⴽⴽⴰⵍ", "CONTROLS_REPEAT_INPUT_DO": "ⴳ", "CONTROLS_WHILEUNTIL_OPERATOR_WHILE": "ⴰⵍⵙ ⴰⴷⴷⴰⴳ", @@ -46,7 +44,6 @@ "CONTROLS_IF_MSG_IF": "ⵎⴽ", "CONTROLS_IF_MSG_ELSEIF": "ⵉⵙ", "CONTROLS_IF_MSG_ELSE": "ⵎⴽ ⴷ ⵓⵀⵓ", - "LOGIC_COMPARE_HELPURL": "https://en.wikipedia.org/wiki/Inequality_(mathematics)", "LOGIC_OPERATION_AND": "ⴷ", "LOGIC_OPERATION_OR": "ⵏⵖ", "LOGIC_NEGATE_TITLE": "ⵓⵔ ⴷ %1", @@ -56,15 +53,9 @@ "LOGIC_TERNARY_CONDITION": "ⴰⵔⵎ", "LOGIC_TERNARY_IF_TRUE": "ⵎⴽ ⵉⴷⵜⵜⴰ", "LOGIC_TERNARY_IF_FALSE": "ⵎⴽ ⵓⵔ ⵉⴷⵜⵜⵉ", - "MATH_NUMBER_HELPURL": "https://en.wikipedia.org/wiki/Number", "MATH_NUMBER_TOOLTIP": "ⴽⵔⴰ ⵏ ⵓⵎⴹⴰⵏ.", - "MATH_ARITHMETIC_HELPURL": "https://en.wikipedia.org/wiki/Arithmetic", - "MATH_TRIG_HELPURL": "https://en.wikipedia.org/wiki/Trigonometric_functions", "MATH_CHANGE_TITLE": "ⵙⵏⴼⵍ %1 ⵙ %2", "MATH_CHANGE_TOOLTIP": "ⵔⵏⵓ ⵢⴰⵏ ⵓⵎⴹⴰⵏ ⵖⵔ ⵓⵎⵙⴽⵉⵍ '%1'", - "MATH_ROUND_HELPURL": "https://en.wikipedia.org/wiki/Rounding", - "MATH_MODULO_HELPURL": "https://en.wikipedia.org/wiki/Modulo_operation", - "MATH_ATAN2_HELPURL": "https://en.wikipedia.org/wiki/Atan2", "MATH_ATAN2_TITLE": "atan2 ⵙⴳ X:%1 Y:%2", "TEXT_JOIN_TITLE_CREATEWITH": "ⵙⵏⴼⵍⵓⵍ ⴰⴹⵕⵉⵚ ⵙ", "TEXT_CREATE_JOIN_TITLE_JOIN": "ⵍⴽⵎ", @@ -86,8 +77,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "ⴳ ⴽⵔⴰ", "PROCEDURES_BEFORE_PARAMS": "ⵙ:", "PROCEDURES_CALL_BEFORE_PARAMS": "ⵙ:", - "PROCEDURES_CALLNORETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", - "PROCEDURES_CALLRETURN_HELPURL": "https://en.wikipedia.org/wiki/Subroutine", "PROCEDURES_MUTATORARG_TOOLTIP": "ⵔⵏⵓ ⴰⵏⴽⵛⴰⵎ ⵖⵔ ⵜⵙⵖⵏⵜ.", "DIALOG_OK": "ⵡⴰⵅⵅⴰ", "DIALOG_CANCEL": "ⵙⵔ" diff --git a/msg/json/zh-hans.json b/msg/json/zh-hans.json index 4e4d60738..34019dba1 100644 --- a/msg/json/zh-hans.json +++ b/msg/json/zh-hans.json @@ -114,7 +114,6 @@ "LOGIC_OPERATION_AND": "并且", "LOGIC_OPERATION_TOOLTIP_OR": "如果至少有一个输入结果为真,则返回真。", "LOGIC_OPERATION_OR": "或", - "LOGIC_NEGATE_HELPURL": "https://github.com/google/blockly/wiki/Logic#not", "LOGIC_NEGATE_TITLE": "非%1", "LOGIC_NEGATE_TOOLTIP": "如果输入结果为假,则返回真;如果输入结果为真,则返回假。", "LOGIC_BOOLEAN_TRUE": "真", @@ -223,7 +222,6 @@ "TEXT_CHARAT_FIRST": "获取第一个字符", "TEXT_CHARAT_LAST": "获取最后一个字符", "TEXT_CHARAT_RANDOM": "获取随机一个字符", - "TEXT_CHARAT_TAIL": "-", "TEXT_CHARAT_TOOLTIP": "返回位于指定位置的字符。", "TEXT_GET_SUBSTRING_TOOLTIP": "返回文本中指定的一部分。", "TEXT_GET_SUBSTRING_INPUT_IN_TEXT": "从文本", @@ -233,7 +231,6 @@ "TEXT_GET_SUBSTRING_END_FROM_START": "到第#个字符", "TEXT_GET_SUBSTRING_END_FROM_END": "到倒数第#个字符", "TEXT_GET_SUBSTRING_END_LAST": "到最后一个字符", - "TEXT_GET_SUBSTRING_TAIL": "-", "TEXT_CHANGECASE_TOOLTIP": "用不同的大小写模式复制并返回这段文字。", "TEXT_CHANGECASE_OPERATOR_UPPERCASE": "转为大写", "TEXT_CHANGECASE_OPERATOR_LOWERCASE": "转为小写", @@ -249,18 +246,13 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "要求用户输入数字。", "TEXT_PROMPT_TOOLTIP_TEXT": "要求用户输入一些文本。", "TEXT_COUNT_MESSAGE0": "计算%1在%2里出现的次数", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "计算在一段文本中,某个部分文本重复出现了多少次。", "TEXT_REPLACE_MESSAGE0": "把%3中的%1替换为%2", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "在一段文本中,将出现过的某部分文本都替换掉。", "TEXT_REVERSE_MESSAGE0": "倒转文本%1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "将文本中各个字符的顺序倒转。", - "LISTS_CREATE_EMPTY_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-empty-list", "LISTS_CREATE_EMPTY_TITLE": "创建空列表", "LISTS_CREATE_EMPTY_TOOLTIP": "返回一个列表,长度为 0,不包含任何数据记录", - "LISTS_CREATE_WITH_HELPURL": "https://github.com/google/blockly/wiki/Lists#create-list-with", "LISTS_CREATE_WITH_TOOLTIP": "建立一个具有任意数量项目的列表。", "LISTS_CREATE_WITH_INPUT_WITH": "创建列表,内容:", "LISTS_CREATE_WITH_CONTAINER_TITLE_ADD": "列表", @@ -284,7 +276,6 @@ "LISTS_GET_INDEX_FIRST": "第一项", "LISTS_GET_INDEX_LAST": "最后一项", "LISTS_GET_INDEX_RANDOM": "随机的一项", - "LISTS_GET_INDEX_TAIL": "-", "LISTS_INDEX_FROM_START_TOOLTIP": "%1是第一项。", "LISTS_INDEX_FROM_END_TOOLTIP": "%1是最后一项。", "LISTS_GET_INDEX_TOOLTIP_GET_FROM": "返回在列表中的指定位置的项。", @@ -316,9 +307,7 @@ "LISTS_GET_SUBLIST_END_FROM_START": "到第#项", "LISTS_GET_SUBLIST_END_FROM_END": "到倒数第#项", "LISTS_GET_SUBLIST_END_LAST": "到最后一项", - "LISTS_GET_SUBLIST_TAIL": "-", "LISTS_GET_SUBLIST_TOOLTIP": "复制列表中指定的部分。", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "排序%1 %2 %3", "LISTS_SORT_TOOLTIP": "排序一个列表,返回副本。", "LISTS_SORT_ORDER_ASCENDING": "升序", @@ -326,16 +315,13 @@ "LISTS_SORT_TYPE_NUMERIC": "按数字", "LISTS_SORT_TYPE_TEXT": "按字母", "LISTS_SORT_TYPE_IGNORECASE": "按字母(忽略大小写)", - "LISTS_SPLIT_HELPURL": "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", "LISTS_SPLIT_LIST_FROM_TEXT": "从文本制作列表", "LISTS_SPLIT_TEXT_FROM_LIST": "将列表合并为文本", "LISTS_SPLIT_WITH_DELIMITER": "分隔符:", "LISTS_SPLIT_TOOLTIP_SPLIT": "将文本按指定的分隔符拆分为文本组成的列表。", "LISTS_SPLIT_TOOLTIP_JOIN": "加入文本列表至一个文本,由分隔符分隔。", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "倒转%1", "LISTS_REVERSE_TOOLTIP": "倒转一个列表,返回副本。", - "ORDINAL_NUMBER_SUFFIX": "-", "VARIABLES_GET_TOOLTIP": "返回此变量的值。", "VARIABLES_GET_CREATE_SET": "创建“设定%1”", "VARIABLES_SET": "赋值 %1 为 %2", @@ -346,7 +332,6 @@ "PROCEDURES_DEFNORETURN_PROCEDURE": "做点什么", "PROCEDURES_BEFORE_PARAMS": "与:", "PROCEDURES_CALL_BEFORE_PARAMS": "与:", - "PROCEDURES_DEFNORETURN_DO": "-", "PROCEDURES_DEFNORETURN_TOOLTIP": "创建一个不带输出值的函数。", "PROCEDURES_DEFNORETURN_COMMENT": "描述该功能...", "PROCEDURES_DEFRETURN_HELPURL": "https://zh.wikipedia.org/wiki/子程序", @@ -365,7 +350,6 @@ "PROCEDURES_HIGHLIGHT_DEF": "突出显示函数定义", "PROCEDURES_CREATE_DO": "创建“%1”", "PROCEDURES_IFRETURN_TOOLTIP": "如果值为真,则返回第二个值。", - "PROCEDURES_IFRETURN_HELPURL": "http://c2.com/cgi/wiki?GuardClause", "PROCEDURES_IFRETURN_WARNING": "警告:这个块只能在函数内部使用。", "WORKSPACE_COMMENT_DEFAULT_TEXT": "说点什么...", "WORKSPACE_ARIA_LABEL": "Blockly工作区", diff --git a/msg/json/zh-hant.json b/msg/json/zh-hant.json index 9c4048e95..b3dfbadab 100644 --- a/msg/json/zh-hant.json +++ b/msg/json/zh-hant.json @@ -119,6 +119,12 @@ "LOGIC_TERNARY_TOOLTIP": "檢查「測試」中的條件。如果條件為真,將返回「如果為真」的值;否則,返回「如果為假」的值。", "MATH_NUMBER_HELPURL": "https://zh.wikipedia.org/wiki/數", "MATH_NUMBER_TOOLTIP": "一個數字。", + "MATH_TRIG_SIN": "正弦", + "MATH_TRIG_COS": "餘弦", + "MATH_TRIG_TAN": "正切", + "MATH_TRIG_ASIN": "反正弦", + "MATH_TRIG_ACOS": "反餘弦", + "MATH_TRIG_ATAN": "反正切", "MATH_ARITHMETIC_HELPURL": "https://zh.wikipedia.org/wiki/算術", "MATH_ARITHMETIC_TOOLTIP_ADD": "返回兩個數字的總和。", "MATH_ARITHMETIC_TOOLTIP_MINUS": "返回兩個數字的差。", @@ -237,13 +243,10 @@ "TEXT_PROMPT_TOOLTIP_NUMBER": "輸入數字", "TEXT_PROMPT_TOOLTIP_TEXT": "輸入文字", "TEXT_COUNT_MESSAGE0": "在%2計算%1", - "TEXT_COUNT_HELPURL": "https://github.com/google/blockly/wiki/Text#counting-substrings", "TEXT_COUNT_TOOLTIP": "計算某些文字在內容裡的出現次數。", "TEXT_REPLACE_MESSAGE0": "在%3以%2取代%1", - "TEXT_REPLACE_HELPURL": "https://github.com/google/blockly/wiki/Text#replacing-substrings", "TEXT_REPLACE_TOOLTIP": "取代在內容裡的全部某些文字。", "TEXT_REVERSE_MESSAGE0": "反轉%1", - "TEXT_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Text#reversing-text", "TEXT_REVERSE_TOOLTIP": "反轉排序在文字裡的字元。", "LISTS_CREATE_EMPTY_TITLE": "建立空的清單", "LISTS_CREATE_EMPTY_TOOLTIP": "返回一個長度(項目數量)為 0 的清單,不包含任何資料記錄", @@ -265,6 +268,7 @@ "LISTS_GET_INDEX_GET": "取得", "LISTS_GET_INDEX_GET_REMOVE": "取得並移除", "LISTS_GET_INDEX_REMOVE": "移除", + "LISTS_GET_INDEX_FROM_START": "#", "LISTS_GET_INDEX_FROM_END": "倒數第 # 筆", "LISTS_GET_INDEX_FIRST": "第一筆", "LISTS_GET_INDEX_LAST": "最後一筆", @@ -301,7 +305,6 @@ "LISTS_GET_SUBLIST_END_FROM_END": "到 # 倒數", "LISTS_GET_SUBLIST_END_LAST": "到 最後面", "LISTS_GET_SUBLIST_TOOLTIP": "複製清單中指定的部分。", - "LISTS_SORT_HELPURL": "https://github.com/google/blockly/wiki/Lists#sorting-a-list", "LISTS_SORT_TITLE": "排列 %1 %2 %3", "LISTS_SORT_TOOLTIP": "排序清單的複製內容。", "LISTS_SORT_ORDER_ASCENDING": "升序", @@ -314,7 +317,6 @@ "LISTS_SPLIT_WITH_DELIMITER": "用分隔符", "LISTS_SPLIT_TOOLTIP_SPLIT": "將文本變成清單項目,按分隔符號拆分。", "LISTS_SPLIT_TOOLTIP_JOIN": "串起清單項目成一個文本,並用分隔符號分開。", - "LISTS_REVERSE_HELPURL": "https://github.com/google/blockly/wiki/Lists#reversing-a-list", "LISTS_REVERSE_MESSAGE0": "反轉%1", "LISTS_REVERSE_TOOLTIP": "反轉清單的複製內容。", "VARIABLES_GET_TOOLTIP": "返回此變數的值。", diff --git a/package-lock.json b/package-lock.json index b57ab3cc1..9d0baff9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36 +1,37 @@ { "name": "blockly", - "version": "8.0.0", + "version": "9.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "blockly", - "version": "8.0.0", + "version": "9.0.1", "license": "Apache-2.0", "dependencies": { "jsdom": "15.2.1" }, "devDependencies": { - "@blockly/block-test": "^2.0.1", - "@blockly/dev-tools": "^4.0.2", - "@blockly/theme-modern": "^2.1.1", - "@hyperjump/json-schema": "^0.18.4", + "@blockly/block-test": "^3.0.0", + "@blockly/dev-tools": "^5.0.0", + "@blockly/theme-modern": "^3.0.0", + "@hyperjump/json-schema": "^0.18.5", "@microsoft/api-extractor": "^7.29.5", "@typescript-eslint/eslint-plugin": "^5.33.1", "@wdio/selenium-standalone-service": "^7.10.1", "chai": "^4.2.0", "clang-format": "^1.6.0", "closure-calculate-chunks": "^3.0.2", - "concurrently": "^7.0.0", + "concurrently": "^7.4.0", "eslint": "^8.4.1", "eslint-config-google": "^0.14.0", "eslint-plugin-jsdoc": "^39.3.6", - "google-closure-compiler": "^20220905.0.0", + "google-closure-compiler": "^20221004.0.0", "google-closure-deps": "^20220905.0.0", "gulp": "^4.0.2", "gulp-clang-format": "^1.0.27", "gulp-concat": "^2.6.1", + "gulp-gzip": "^1.4.2", "gulp-insert": "^0.5.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", @@ -158,28 +159,28 @@ } }, "node_modules/@blockly/block-test": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-2.0.18.tgz", - "integrity": "sha512-IujQmkTPwRtbONyJ1nWxSr5FYaoCXByOKuNYsXiLa5TL79DlU6CuapzFCw/AnFF0z6LImY+WlMuiQPo0HhG/Lw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-3.0.1.tgz", + "integrity": "sha512-lXHwyAFiLNAmDS3BvBscy7S4YfKt8U8yMghop/j5G3nUz5gKWQGMtUJDq7Wm5ZpIFHghYDPxnhdpwhdCkuRchA==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=7 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/dev-tools": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-4.0.3.tgz", - "integrity": "sha512-YWkutC33AjdOHFYmzC2skVbVqv7acfOzoD4f1ph3/9G6JsfNPuXLMvYdeuxH2iCULtHcYXwUn5Cg8Q7cLS83ow==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-5.0.0.tgz", + "integrity": "sha512-9GSH+Y8aU+KLcu3sFKkqr/sIz4RWDjmkzKgDI0ryiZiihR8LKIi/gxREc04ZnnLWZWMlXo/RyMoLNWyM7YW36g==", "dev": true, "dependencies": { - "@blockly/block-test": "^2.0.18", - "@blockly/theme-dark": "^3.0.17", - "@blockly/theme-deuteranopia": "^2.0.17", - "@blockly/theme-highcontrast": "^2.0.17", - "@blockly/theme-tritanopia": "^2.0.17", + "@blockly/block-test": "^3.0.0", + "@blockly/theme-dark": "^4.0.0", + "@blockly/theme-deuteranopia": "^3.0.0", + "@blockly/theme-highcontrast": "^3.0.0", + "@blockly/theme-tritanopia": "^3.0.0", "chai": "^4.2.0", "dat.gui": "^0.7.7", "lodash.assign": "^4.2.0", @@ -191,67 +192,67 @@ "node": ">=8.0.0" }, "peerDependencies": { - "blockly": ">=8 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/theme-dark": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-3.0.17.tgz", - "integrity": "sha512-WxYApZT2vok2k4ba98KrweFTTiL2CS8JvOO8ZaOaI5GSWTU7jO6b+KCPHf5WAEY80iqAspg1gRTeePKliZmgIA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-4.0.0.tgz", + "integrity": "sha512-JCah9PULu/K4E8485CzvWTpWMDB8zAsqKxLtAGu106eSUKgaOrB6WR3nzoA10nmoUcZdh/fk/UPcHUB/XsHkhg==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=7 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/theme-deuteranopia": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-2.0.17.tgz", - "integrity": "sha512-smTIWZJNUBAz7YoNRoFUWk0K5ghFWaXlrDqtbPWxpSEr+qxmVoj3ZqjDvy1R+QexMCg4BQ+XZdJpTwVAwuY8lg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-3.0.0.tgz", + "integrity": "sha512-1m8aEZw4tA7LwKWXyIU5IU1pO2iDgrJGYTHn3/N5+GPRIQzuHqxGM62QcP3wTMYPqj8TX1Rs3xR0OPVZW2CgGw==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=7 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/theme-highcontrast": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-2.0.17.tgz", - "integrity": "sha512-Cy3hd0TNmeytvLwqo9yRYy4YgW9pn4z8sDPWO7SXdUqFNgKoT8FBfMMEbYLmC2vdQyn+Fj1Q04FugVF1xqEm2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-3.0.0.tgz", + "integrity": "sha512-4egNcV/Dl2pDcWBdS1199HUAI/hrlwAjwq7B2cf52A0O2ek/qfdrHxB2jm+6ez+giQFvrnFVjvCL9DptuKfNIg==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=7 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/theme-modern": { - "version": "2.1.42", - "resolved": "https://registry.npmjs.org/@blockly/theme-modern/-/theme-modern-2.1.42.tgz", - "integrity": "sha512-CCS1EYQ3k0N70/ol0ozzEBcb5dYMpmjjOQFOEDWsSzyt8qujKRneFDp8f9+/W1a43jyaY53kZPTYuaXfPaAp0A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@blockly/theme-modern/-/theme-modern-3.0.1.tgz", + "integrity": "sha512-rKB5NrAGFF+Vo4aIfk+zbXZYfKDULPMFNWkT5dS0cyMSNHvcy7Xgi3llq29YhTG/LLicOjitSc8cErcZsicjng==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=3.20200123.0 <9" + "blockly": "^9.0.0" } }, "node_modules/@blockly/theme-tritanopia": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-2.0.17.tgz", - "integrity": "sha512-DuE6TcRTcrEIzVszbcI3xeq8XEdAR25uOVIOTAUPLcp8wjGSGxDp5OZLePLHvIFC8aZ7tUgr/3gW6F0/F0nPmQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-3.0.0.tgz", + "integrity": "sha512-kwV01Wt57ktzqcu3yWb7FPHsXd0ZLz6ApvX0AWCuNJ+64+AxezBG+WOigD0/JzyIz7U6VFjHsecX+MIKmxaPgw==", "dev": true, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=7 <9" + "blockly": "^9.0.0" } }, "node_modules/@es-joy/jsdoccomment": { @@ -269,9 +270,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -386,9 +387,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz", + "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -399,16 +400,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -429,13 +420,13 @@ "dev": true }, "node_modules/@hyperjump/json-pointer": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@hyperjump/json-pointer/-/json-pointer-0.9.2.tgz", - "integrity": "sha512-PGCyTWO+WTkNWhMdlgE7OiQYPVkme9/e6d7K2xiZxH1wMGxGgZEEDNCe8hox7rkuD1equ4eZM+K3eoPCexckmA==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@hyperjump/json-pointer/-/json-pointer-0.9.6.tgz", + "integrity": "sha512-3szMJLfz+1wtfPHnGi1sHzwFfFdZqIZLCCYtaD47vLZMAQCbtoBRVZn44jJgIQ6v37+8fom5rsxSSIMKWi0zbg==", "dev": true, "hasInstallScript": true, "dependencies": { - "just-curry-it": "^3.2.1" + "just-curry-it": "^5.2.1" }, "funding": { "type": "github", @@ -458,9 +449,9 @@ } }, "node_modules/@hyperjump/json-schema-core": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/@hyperjump/json-schema-core/-/json-schema-core-0.23.6.tgz", - "integrity": "sha512-X0IzGRi5K4c91awB3xNt5bvbs34UyHwOpRKKFFJ2nWDWW7e22VNGvibqo/S2rdFyta3wqOHTICFNTQjjcVdIZg==", + "version": "0.23.7", + "resolved": "https://registry.npmjs.org/@hyperjump/json-schema-core/-/json-schema-core-0.23.7.tgz", + "integrity": "sha512-64gBteTl+zAvI1D68l/+gH7ncuM+Cf0rGdm/YwtsYZlNfbybgFD5R5uuJCsPGJDm5ZYqqWMdPIq6Nh5jDENYRw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -477,9 +468,9 @@ } }, "node_modules/@hyperjump/pact": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@hyperjump/pact/-/pact-0.2.1.tgz", - "integrity": "sha512-imzl9j1UiqM/HC3kgfS0/TdXcEFGFkq5EwjyaztLfdmia8KLBXGy3rC96K+nnyY+2fA69yA9HtnDappub5VSQQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@hyperjump/pact/-/pact-0.2.4.tgz", + "integrity": "sha512-BGmyLaUSCMVyHrwXr67rMxgiQHPHwcmVCjROoY8q232EpMz9d9aFCkgGhdx//yEfHM7zgsm0zZ8RD/F89uPySg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -490,16 +481,22 @@ "url": "https://github.com/sponsors/jdesrosiers" } }, + "node_modules/@hyperjump/pact/node_modules/just-curry-it": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", + "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==", + "dev": true + }, "node_modules/@microsoft/api-extractor": { - "version": "7.31.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.31.1.tgz", - "integrity": "sha512-rWEE+S1to8B2X8E8fVttwmCNS7yfvTNzlFGdla/OT8bJeS94L7Lw1Wkynwsl59gb46yvMZrQDXiRkXWzxgvc8g==", + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.31.2.tgz", + "integrity": "sha512-ZODCU9ckTS9brXiZpUW2iDrnAg7jLxeLBM1AkPpSZFcbG/8HGLvfKOKrd71VIJHjc52x2lB8xj7ZWksnP7AOBA==", "dev": true, "dependencies": { - "@microsoft/api-extractor-model": "7.24.1", + "@microsoft/api-extractor-model": "7.24.2", "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.51.2", + "@rushstack/node-core-library": "3.52.0", "@rushstack/rig-package": "0.3.15", "@rushstack/ts-command-line": "4.12.3", "colors": "~1.2.1", @@ -514,14 +511,14 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.24.1.tgz", - "integrity": "sha512-H2KrRbO3beDnH2Fwt+3zXgK8KagFEzHHWNUR7weSEOssabGH5T/aADNR0k1FBidKpXokrvMM6SHamdMCVJjlBg==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.24.2.tgz", + "integrity": "sha512-uUvjqTCY7hYERWGks+joTioN1QYHIucCDy7I/JqLxFxLbFXE5dpc1X7L+FG4PN/s8QYL24DKt0fqJkgcrFKLTw==", "dev": true, "dependencies": { "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.51.2" + "@rushstack/node-core-library": "3.52.0" } }, "node_modules/@microsoft/api-extractor/node_modules/resolve": { @@ -618,9 +615,9 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "3.51.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.51.2.tgz", - "integrity": "sha512-DwK2Lo62sHCsg8VsVe/WfugiL1lC5YzmhwzdWr8jLsfOCl8DzcIdLm4Plz0bOCQj/9ItJX1QGXr2jK5xw1Kzwg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", + "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", "dev": true, "dependencies": { "@types/node": "12.20.24", @@ -946,6 +943,12 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", + "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "dev": true + }, "node_modules/@types/through": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", @@ -989,16 +992,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", - "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", + "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/type-utils": "5.37.0", - "@typescript-eslint/utils": "5.37.0", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/type-utils": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", @@ -1022,13 +1024,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1039,9 +1041,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1052,12 +1054,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1115,13 +1117,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", - "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", + "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.37.0", - "@typescript-eslint/utils": "5.37.0", + "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1142,9 +1144,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1155,13 +1157,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1182,12 +1184,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1241,17 +1243,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", - "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/typescript-estree": "5.37.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1265,13 +1269,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1282,9 +1286,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1295,13 +1299,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1322,12 +1326,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1369,12 +1373,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/@wdio/cli": { "version": "7.16.10", "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.16.10.tgz", @@ -1685,21 +1683,21 @@ } }, "node_modules/@wdio/repl": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.23.0.tgz", - "integrity": "sha512-AZwNnS2r+6fAjp9JonmZEM6kN1mWNGN4xOxOgRp/MJUK3XAK0HJ4ZoWqeMeEMlPmu1nlm/1oUyeQYThFEj5n2Q==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.25.1.tgz", + "integrity": "sha512-3DUtOrLi5thba22IBn/XQ7caFrbXtYOg3750UtXxUuxXU4QHkKq1AN8+WXr4Rq2EnXfB2G9t9pEdqjZSv9oPAw==", "dev": true, "dependencies": { - "@wdio/utils": "7.23.0" + "@wdio/utils": "7.25.1" }, "engines": { "node": ">=12.0.0" } }, "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "node_modules/@wdio/repl/node_modules/@wdio/logger": { @@ -1718,9 +1716,9 @@ } }, "node_modules/@wdio/repl/node_modules/@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -1739,13 +1737,13 @@ } }, "node_modules/@wdio/repl/node_modules/@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" }, "engines": { @@ -1753,17 +1751,17 @@ } }, "node_modules/@wdio/selenium-standalone-service": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.24.0.tgz", - "integrity": "sha512-8jZT607tYWMyIK939QNe6qXu1zjC1776kvgDEyDjn8prwDhKhEeFGNLlCWkimvo8pUo+6VFa3Zwy2SilV+gZ8w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.25.1.tgz", + "integrity": "sha512-TRD4hAxdHuZ0z414eDayE6q2gEmyAg7YdMrF+CJHWbjZKhJG4cqTSpV04zgMfQmTov5Y2+WtasdlGnqV5AXfMg==", "dev": true, "dependencies": { "@types/fs-extra": "^9.0.1", "@types/node": "^18.0.0", "@types/selenium-standalone": "^7.0.0", - "@wdio/config": "7.24.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", + "@wdio/types": "7.25.1", "fs-extra": "^10.0.0", "selenium-standalone": "^8.0.3" }, @@ -1775,20 +1773,20 @@ } }, "node_modules/@wdio/selenium-standalone-service/node_modules/@types/node": { - "version": "18.7.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", - "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", + "version": "18.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", + "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==", "dev": true }, "node_modules/@wdio/selenium-standalone-service/node_modules/@wdio/config": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.24.0.tgz", - "integrity": "sha512-MSIuwbs7JeOh9eMiFP3nVYDyaK3jYv7HY4eJIfvl6TBo4G1mTjbF1Dnct38W0ZR5WIFeSKhl15LiumbNUv0pyA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", - "@wdio/utils": "7.24.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" }, @@ -1812,9 +1810,9 @@ } }, "node_modules/@wdio/selenium-standalone-service/node_modules/@wdio/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.24.0.tgz", - "integrity": "sha512-wJZ+1lIHFz5aWXSO+k91wX8tfZdpyX4YYoker5xfC4zvM7ypyK81dZyiE5whS+QFL3VTCPP8dXNjwX5f5h+YEw==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -1833,13 +1831,13 @@ } }, "node_modules/@wdio/selenium-standalone-service/node_modules/@wdio/utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.24.0.tgz", - "integrity": "sha512-VWfFT1Ket3pAt19kY5lPRuwJDheKF4hMwG0AiezkqqerDl/m+fcb4a6pj1WHjlawvlYM4MM15iBZFxYfphG9lg==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" }, "engines": { @@ -2087,6 +2085,12 @@ "node": ">=0.10.0" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -2406,9 +2410,9 @@ } }, "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/async-done": { @@ -2646,9 +2650,9 @@ } }, "node_modules/blockly": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-8.0.4.tgz", - "integrity": "sha512-qGYrynzalzEHOMLJhZmADpuMXUH55nSTVgVd11Z1ZlVsm3NQ69ZVgBEaCSN+GsEUUpoui71g4oVzE2iHEHbAtw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-9.0.0.tgz", + "integrity": "sha512-V8rAT3N4QJ5r2emMGAf8D/yhwmAEfMnu/JVXmcvmS6dFcWR8g8aVlYpjTjW3CH8FyAPTrav2JalLqSfdc8TPpg==", "dev": true, "peer": true, "dependencies": { @@ -2742,6 +2746,15 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cac": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", @@ -3596,13 +3609,13 @@ } }, "node_modules/concurrently": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", - "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz", + "integrity": "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "date-fns": "^2.29.1", "lodash": "^4.17.21", "rxjs": "^7.0.0", "shell-quote": "^1.7.3", @@ -3612,10 +3625,14 @@ "yargs": "^17.3.1" }, "bin": { + "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" }, "engines": { "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, "node_modules/concurrently/node_modules/supports-color": { @@ -3842,9 +3859,9 @@ } }, "node_modules/date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", "dev": true, "engines": { "node": ">=0.11" @@ -4104,50 +4121,50 @@ } }, "node_modules/devtools": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.23.0.tgz", - "integrity": "sha512-mu9ovRS0sfLP9bjtC20bCy8DF9kCtH9Xg1XmII6Vk+Icc2z/IMbm05QO0ScFDRrr3KdzldmfUOud5KfsLY4W/w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.25.1.tgz", + "integrity": "sha512-01T8QZeiD92MpI/7rP8kUflN3XcMqv2moa07123OjjENuuOhYxRWmJ7xj94txnF5PJp1Cv8/jvK8EUbnEHf6MQ==", "dev": true, "dependencies": { "@types/node": "^18.0.0", "@types/ua-parser-js": "^0.7.33", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "chrome-launcher": "^0.15.0", "edge-paths": "^2.1.0", "puppeteer-core": "^13.1.3", "query-selector-shadow-dom": "^1.0.0", "ua-parser-js": "^1.0.1", - "uuid": "^8.0.0" + "uuid": "^9.0.0" }, "engines": { "node": ">=12.0.0" } }, "node_modules/devtools-protocol": { - "version": "0.0.1034970", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1034970.tgz", - "integrity": "sha512-kC7Wo+7z+Bo202DVB7qVqccreL+RpcGk/6eCrpM1qj2azag6UCMg05GL3ty2adg8CXWFpUGdMeyFJfIN8lQtgw==", + "version": "0.0.1056733", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz", + "integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA==", "dev": true }, "node_modules/devtools/node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "node_modules/devtools/node_modules/@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" }, @@ -4180,9 +4197,9 @@ } }, "node_modules/devtools/node_modules/@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -4201,13 +4218,13 @@ } }, "node_modules/devtools/node_modules/@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" }, "engines": { @@ -4255,23 +4272,14 @@ } }, "node_modules/devtools/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4594,14 +4602,13 @@ } }, "node_modules/eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -4618,7 +4625,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -4627,6 +4633,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -5573,12 +5580,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/gaxios": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", @@ -6058,13 +6059,13 @@ } }, "node_modules/google-closure-compiler": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20220905.0.0.tgz", - "integrity": "sha512-idZavy2vn91HCmqEepjmLFjfOdYoRsh9PggUbazUpjAOrBQz0HOm3WjOICMiywre+EnY1QGss0srEBtFtukM6w==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221004.0.0.tgz", + "integrity": "sha512-OKENLrZFF2o3FZ/E4zdTc9NeuAUh1fdwbQxT0sibI19aR62sgNUBo2mLU6sc4Gcm0cQ2gwfB7qX1xnapOIkbaA==", "dev": true, "dependencies": { "chalk": "4.x", - "google-closure-compiler-java": "^20220905.0.0", + "google-closure-compiler-java": "^20221004.0.0", "minimist": "1.x", "vinyl": "2.x", "vinyl-sourcemaps-apply": "^0.2.0" @@ -6076,21 +6077,21 @@ "node": ">=10" }, "optionalDependencies": { - "google-closure-compiler-linux": "^20220905.0.0", - "google-closure-compiler-osx": "^20220905.0.0", - "google-closure-compiler-windows": "^20220905.0.0" + "google-closure-compiler-linux": "^20221004.0.0", + "google-closure-compiler-osx": "^20221004.0.0", + "google-closure-compiler-windows": "^20221004.0.0" } }, "node_modules/google-closure-compiler-java": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20220905.0.0.tgz", - "integrity": "sha512-wxGxNla/0UDS1Lm0cRxEy85KhVRd0vNlsTclnIJ9f1gRWzvvTsJ4lwz+PdT60R6y2hKAOBvydIJHh+B8XJastA==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221004.0.0.tgz", + "integrity": "sha512-CygLEB40HxtK0VtP6klv2Xm08w4HQNYX/DTgLV7CP74r8LiQMUByRFleaG/Hv5xQG1JzPNiW0GOAiAubDSdr5A==", "dev": true }, "node_modules/google-closure-compiler-linux": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20220905.0.0.tgz", - "integrity": "sha512-kH09S66sz9+6wZmYM22VX8vG8KhCKJwFwXCfHx/ZOU6DBEzni6KfWrP+87CzTmZFEivclBhWAndm5HgNhSOEXQ==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221004.0.0.tgz", + "integrity": "sha512-B6sca3Lmw3cYXdFzdU0iQpk8L9VEo1ecC1aM7Gl9lgWhIicqqEZebsgnUe5TQ3uHBfQoKjV9fdFG8mt8X/oqSQ==", "cpu": [ "x32", "x64" @@ -6102,9 +6103,9 @@ ] }, "node_modules/google-closure-compiler-osx": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20220905.0.0.tgz", - "integrity": "sha512-4uo2GAz77gI8nDt4OA8VUYh/FNdjmTLOIRDazl7si+BOjgp9bC6C3E/88o+YHETsVtrPmZk57/W7vH0lftyTAw==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221004.0.0.tgz", + "integrity": "sha512-z5V7BvaMauPga8DMTt9u6RGcjBdLAuv4gL2Ebw5NIQRTAHVkEVzCd3kiMX7CVCGhmWdS/1r3jZcCg4BswGia6w==", "cpu": [ "x32", "x64", @@ -6117,9 +6118,9 @@ ] }, "node_modules/google-closure-compiler-windows": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20220905.0.0.tgz", - "integrity": "sha512-TZKHu6RHnrmgV90Gyen8+TGc0vgjgds80ErR+al5CqmfP9p+AskBbOe5CWZJht0bANrUhaeBMCrbs+7loFv06Q==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221004.0.0.tgz", + "integrity": "sha512-JSAWilVa7d65QJYKUr+DmklwKmjkAce6BMD6smqJfdL2dv5OSJ2ydGy73euoBJ4Tka8iQPoaOP+BjLrhIuvqKg==", "cpu": [ "x32", "x64" @@ -6533,6 +6534,15 @@ "through2": "^2.0.0" } }, + "node_modules/gulp-diff/node_modules/diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/gulp-diff/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -6543,6 +6553,45 @@ "xtend": "~4.0.1" } }, + "node_modules/gulp-gzip": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz", + "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "bytes": "^3.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.0", + "stream-to-array": "^2.3.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/gulp-gzip/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-gzip/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/gulp-insert": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz", @@ -7740,7 +7789,7 @@ "node_modules/jake/node_modules/async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==", "dev": true, "peer": true }, @@ -7837,6 +7886,12 @@ "node": ">= 10.x" } }, + "node_modules/js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8012,9 +8067,9 @@ } }, "node_modules/just-curry-it": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", - "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-5.2.1.tgz", + "integrity": "sha512-M8qhhO9WVNc3yZgf3qfiNxMIsQlHqFHJ3vMI8N/rkp852h1utOB/N3ebS8jeXGAwYSbkdd0K6zP9eZneUtjHwA==", "dev": true }, "node_modules/just-debounce": { @@ -8947,12 +9002,11 @@ "dev": true }, "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", @@ -10196,9 +10250,9 @@ } }, "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" @@ -11214,9 +11268,9 @@ "dev": true }, "node_modules/selenium-standalone": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-8.2.0.tgz", - "integrity": "sha512-gRFJm2A91sL0/4PavIsfTVNjyqNjk+zbdJg/zAYgTMjuoWJv+BlYJh+1UbEtyjt4YvZACYif1DFAzFjQapqiOA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-8.2.2.tgz", + "integrity": "sha512-CdfN5WnX0mzrjeCTFnvnsjsXEsQwgepLIvrA6OamrKT29gD8mufemwM3v9VG4grQDFHZZy7Ma1giw232x4eGmw==", "dev": true, "dependencies": { "commander": "^9.0.0", @@ -11926,6 +11980,15 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "dev": true, + "dependencies": { + "any-promise": "^1.1.0" + } + }, "node_modules/streamqueue": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz", @@ -12963,17 +13026,17 @@ } }, "node_modules/webdriver": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.23.0.tgz", - "integrity": "sha512-riIQ77PVWnuyGsI/Kt13jDjWnatrFme2OWm9In9sKvKTaJBz5WU1ae1pYO8H/SQVIxMyys2y9UYGOLJnQ3XM8A==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.25.1.tgz", + "integrity": "sha512-BmR5RT37EGNJj/O/GTCqBKXV/Jr9V4oQTTDaurZixVKW0ubG7uyfrhiklzuWUtmES9VualTKgQumhGhchBTC6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "got": "^11.0.2", "ky": "0.30.0", "lodash.merge": "^4.6.1" @@ -12983,20 +13046,20 @@ } }, "node_modules/webdriver/node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "node_modules/webdriver/node_modules/@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" }, @@ -13029,9 +13092,9 @@ } }, "node_modules/webdriver/node_modules/@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -13050,13 +13113,13 @@ } }, "node_modules/webdriver/node_modules/@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" }, "engines": { @@ -13116,25 +13179,25 @@ } }, "node_modules/webdriverio": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.23.0.tgz", - "integrity": "sha512-xQwVrT27Ly23r95heFTumwZmkW5Sw2PwOrXpII4GMRfAY5tIQlkutlCJgf4sEfPCD6mxbW40Oniun/VwL2bkSw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.25.2.tgz", + "integrity": "sha512-lZwHh1G2Zxg4LmVQZZZNhKAqjGoSxoDaqlAf0ojh/3DcWVxMpFtaj0mksrqCyVhObudb2dopOX26beWPyKwL4A==", "dev": true, "dependencies": { "@types/aria-query": "^5.0.0", "@types/node": "^18.0.0", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/repl": "7.23.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/repl": "7.25.1", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "archiver": "^5.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools": "7.23.0", - "devtools-protocol": "^0.0.1034970", + "devtools": "7.25.1", + "devtools-protocol": "^0.0.1056733", "fs-extra": "^10.0.0", "grapheme-splitter": "^1.0.2", "lodash.clonedeep": "^4.5.0", @@ -13147,27 +13210,27 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^8.0.0", - "webdriver": "7.23.0" + "webdriver": "7.25.1" }, "engines": { "node": ">=12.0.0" } }, "node_modules/webdriverio/node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "node_modules/webdriverio/node_modules/@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" }, @@ -13200,9 +13263,9 @@ } }, "node_modules/webdriverio/node_modules/@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -13221,13 +13284,13 @@ } }, "node_modules/webdriverio/node_modules/@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "dependencies": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" }, "engines": { @@ -13431,12 +13494,12 @@ "dev": true }, "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", @@ -13505,6 +13568,20 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/yarn-install": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", @@ -13790,23 +13867,23 @@ } }, "@blockly/block-test": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-2.0.18.tgz", - "integrity": "sha512-IujQmkTPwRtbONyJ1nWxSr5FYaoCXByOKuNYsXiLa5TL79DlU6CuapzFCw/AnFF0z6LImY+WlMuiQPo0HhG/Lw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-3.0.1.tgz", + "integrity": "sha512-lXHwyAFiLNAmDS3BvBscy7S4YfKt8U8yMghop/j5G3nUz5gKWQGMtUJDq7Wm5ZpIFHghYDPxnhdpwhdCkuRchA==", "dev": true, "requires": {} }, "@blockly/dev-tools": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-4.0.3.tgz", - "integrity": "sha512-YWkutC33AjdOHFYmzC2skVbVqv7acfOzoD4f1ph3/9G6JsfNPuXLMvYdeuxH2iCULtHcYXwUn5Cg8Q7cLS83ow==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-5.0.0.tgz", + "integrity": "sha512-9GSH+Y8aU+KLcu3sFKkqr/sIz4RWDjmkzKgDI0ryiZiihR8LKIi/gxREc04ZnnLWZWMlXo/RyMoLNWyM7YW36g==", "dev": true, "requires": { - "@blockly/block-test": "^2.0.18", - "@blockly/theme-dark": "^3.0.17", - "@blockly/theme-deuteranopia": "^2.0.17", - "@blockly/theme-highcontrast": "^2.0.17", - "@blockly/theme-tritanopia": "^2.0.17", + "@blockly/block-test": "^3.0.0", + "@blockly/theme-dark": "^4.0.0", + "@blockly/theme-deuteranopia": "^3.0.0", + "@blockly/theme-highcontrast": "^3.0.0", + "@blockly/theme-tritanopia": "^3.0.0", "chai": "^4.2.0", "dat.gui": "^0.7.7", "lodash.assign": "^4.2.0", @@ -13816,37 +13893,37 @@ } }, "@blockly/theme-dark": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-3.0.17.tgz", - "integrity": "sha512-WxYApZT2vok2k4ba98KrweFTTiL2CS8JvOO8ZaOaI5GSWTU7jO6b+KCPHf5WAEY80iqAspg1gRTeePKliZmgIA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-4.0.0.tgz", + "integrity": "sha512-JCah9PULu/K4E8485CzvWTpWMDB8zAsqKxLtAGu106eSUKgaOrB6WR3nzoA10nmoUcZdh/fk/UPcHUB/XsHkhg==", "dev": true, "requires": {} }, "@blockly/theme-deuteranopia": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-2.0.17.tgz", - "integrity": "sha512-smTIWZJNUBAz7YoNRoFUWk0K5ghFWaXlrDqtbPWxpSEr+qxmVoj3ZqjDvy1R+QexMCg4BQ+XZdJpTwVAwuY8lg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-3.0.0.tgz", + "integrity": "sha512-1m8aEZw4tA7LwKWXyIU5IU1pO2iDgrJGYTHn3/N5+GPRIQzuHqxGM62QcP3wTMYPqj8TX1Rs3xR0OPVZW2CgGw==", "dev": true, "requires": {} }, "@blockly/theme-highcontrast": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-2.0.17.tgz", - "integrity": "sha512-Cy3hd0TNmeytvLwqo9yRYy4YgW9pn4z8sDPWO7SXdUqFNgKoT8FBfMMEbYLmC2vdQyn+Fj1Q04FugVF1xqEm2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-3.0.0.tgz", + "integrity": "sha512-4egNcV/Dl2pDcWBdS1199HUAI/hrlwAjwq7B2cf52A0O2ek/qfdrHxB2jm+6ez+giQFvrnFVjvCL9DptuKfNIg==", "dev": true, "requires": {} }, "@blockly/theme-modern": { - "version": "2.1.42", - "resolved": "https://registry.npmjs.org/@blockly/theme-modern/-/theme-modern-2.1.42.tgz", - "integrity": "sha512-CCS1EYQ3k0N70/ol0ozzEBcb5dYMpmjjOQFOEDWsSzyt8qujKRneFDp8f9+/W1a43jyaY53kZPTYuaXfPaAp0A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@blockly/theme-modern/-/theme-modern-3.0.1.tgz", + "integrity": "sha512-rKB5NrAGFF+Vo4aIfk+zbXZYfKDULPMFNWkT5dS0cyMSNHvcy7Xgi3llq29YhTG/LLicOjitSc8cErcZsicjng==", "dev": true, "requires": {} }, "@blockly/theme-tritanopia": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-2.0.17.tgz", - "integrity": "sha512-DuE6TcRTcrEIzVszbcI3xeq8XEdAR25uOVIOTAUPLcp8wjGSGxDp5OZLePLHvIFC8aZ7tUgr/3gW6F0/F0nPmQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-3.0.0.tgz", + "integrity": "sha512-kwV01Wt57ktzqcu3yWb7FPHsXd0ZLz6ApvX0AWCuNJ+64+AxezBG+WOigD0/JzyIz7U6VFjHsecX+MIKmxaPgw==", "dev": true, "requires": {} }, @@ -13862,9 +13939,9 @@ } }, "@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -13958,9 +14035,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz", + "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -13968,12 +14045,6 @@ "minimatch": "^3.0.4" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -13987,12 +14058,12 @@ "dev": true }, "@hyperjump/json-pointer": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@hyperjump/json-pointer/-/json-pointer-0.9.2.tgz", - "integrity": "sha512-PGCyTWO+WTkNWhMdlgE7OiQYPVkme9/e6d7K2xiZxH1wMGxGgZEEDNCe8hox7rkuD1equ4eZM+K3eoPCexckmA==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@hyperjump/json-pointer/-/json-pointer-0.9.6.tgz", + "integrity": "sha512-3szMJLfz+1wtfPHnGi1sHzwFfFdZqIZLCCYtaD47vLZMAQCbtoBRVZn44jJgIQ6v37+8fom5rsxSSIMKWi0zbg==", "dev": true, "requires": { - "just-curry-it": "^3.2.1" + "just-curry-it": "^5.2.1" } }, "@hyperjump/json-schema": { @@ -14006,9 +14077,9 @@ } }, "@hyperjump/json-schema-core": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/@hyperjump/json-schema-core/-/json-schema-core-0.23.6.tgz", - "integrity": "sha512-X0IzGRi5K4c91awB3xNt5bvbs34UyHwOpRKKFFJ2nWDWW7e22VNGvibqo/S2rdFyta3wqOHTICFNTQjjcVdIZg==", + "version": "0.23.7", + "resolved": "https://registry.npmjs.org/@hyperjump/json-schema-core/-/json-schema-core-0.23.7.tgz", + "integrity": "sha512-64gBteTl+zAvI1D68l/+gH7ncuM+Cf0rGdm/YwtsYZlNfbybgFD5R5uuJCsPGJDm5ZYqqWMdPIq6Nh5jDENYRw==", "dev": true, "requires": { "@hyperjump/json-pointer": "^0.9.1", @@ -14020,24 +14091,32 @@ } }, "@hyperjump/pact": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@hyperjump/pact/-/pact-0.2.1.tgz", - "integrity": "sha512-imzl9j1UiqM/HC3kgfS0/TdXcEFGFkq5EwjyaztLfdmia8KLBXGy3rC96K+nnyY+2fA69yA9HtnDappub5VSQQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@hyperjump/pact/-/pact-0.2.4.tgz", + "integrity": "sha512-BGmyLaUSCMVyHrwXr67rMxgiQHPHwcmVCjROoY8q232EpMz9d9aFCkgGhdx//yEfHM7zgsm0zZ8RD/F89uPySg==", "dev": true, "requires": { "just-curry-it": "^3.1.0" + }, + "dependencies": { + "just-curry-it": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", + "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==", + "dev": true + } } }, "@microsoft/api-extractor": { - "version": "7.31.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.31.1.tgz", - "integrity": "sha512-rWEE+S1to8B2X8E8fVttwmCNS7yfvTNzlFGdla/OT8bJeS94L7Lw1Wkynwsl59gb46yvMZrQDXiRkXWzxgvc8g==", + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.31.2.tgz", + "integrity": "sha512-ZODCU9ckTS9brXiZpUW2iDrnAg7jLxeLBM1AkPpSZFcbG/8HGLvfKOKrd71VIJHjc52x2lB8xj7ZWksnP7AOBA==", "dev": true, "requires": { - "@microsoft/api-extractor-model": "7.24.1", + "@microsoft/api-extractor-model": "7.24.2", "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.51.2", + "@rushstack/node-core-library": "3.52.0", "@rushstack/rig-package": "0.3.15", "@rushstack/ts-command-line": "4.12.3", "colors": "~1.2.1", @@ -14066,14 +14145,14 @@ } }, "@microsoft/api-extractor-model": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.24.1.tgz", - "integrity": "sha512-H2KrRbO3beDnH2Fwt+3zXgK8KagFEzHHWNUR7weSEOssabGH5T/aADNR0k1FBidKpXokrvMM6SHamdMCVJjlBg==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.24.2.tgz", + "integrity": "sha512-uUvjqTCY7hYERWGks+joTioN1QYHIucCDy7I/JqLxFxLbFXE5dpc1X7L+FG4PN/s8QYL24DKt0fqJkgcrFKLTw==", "dev": true, "requires": { "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.51.2" + "@rushstack/node-core-library": "3.52.0" } }, "@microsoft/tsdoc": { @@ -14139,9 +14218,9 @@ } }, "@rushstack/node-core-library": { - "version": "3.51.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.51.2.tgz", - "integrity": "sha512-DwK2Lo62sHCsg8VsVe/WfugiL1lC5YzmhwzdWr8jLsfOCl8DzcIdLm4Plz0bOCQj/9ItJX1QGXr2jK5xw1Kzwg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", + "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", "dev": true, "requires": { "@types/node": "12.20.24", @@ -14452,6 +14531,12 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", + "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "dev": true + }, "@types/through": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", @@ -14495,16 +14580,15 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", - "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", + "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/type-utils": "5.37.0", - "@typescript-eslint/utils": "5.37.0", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/type-utils": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", @@ -14512,28 +14596,28 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" } }, "@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } } @@ -14564,31 +14648,31 @@ } }, "@typescript-eslint/type-utils": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", - "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", + "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.37.0", - "@typescript-eslint/utils": "5.37.0", + "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -14597,12 +14681,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } } @@ -14632,43 +14716,45 @@ } }, "@typescript-eslint/utils": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", - "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/typescript-estree": "5.37.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" } }, "@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -14677,12 +14763,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -14709,12 +14795,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "@wdio/cli": { "version": "7.16.10", "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.16.10.tgz", @@ -14971,18 +15051,18 @@ "peer": true }, "@wdio/repl": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.23.0.tgz", - "integrity": "sha512-AZwNnS2r+6fAjp9JonmZEM6kN1mWNGN4xOxOgRp/MJUK3XAK0HJ4ZoWqeMeEMlPmu1nlm/1oUyeQYThFEj5n2Q==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.25.1.tgz", + "integrity": "sha512-3DUtOrLi5thba22IBn/XQ7caFrbXtYOg3750UtXxUuxXU4QHkKq1AN8+WXr4Rq2EnXfB2G9t9pEdqjZSv9oPAw==", "dev": true, "requires": { - "@wdio/utils": "7.23.0" + "@wdio/utils": "7.25.1" }, "dependencies": { "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "@wdio/logger": { @@ -14998,9 +15078,9 @@ } }, "@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "requires": { "@types/node": "^18.0.0", @@ -15008,49 +15088,49 @@ } }, "@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" } } } }, "@wdio/selenium-standalone-service": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.24.0.tgz", - "integrity": "sha512-8jZT607tYWMyIK939QNe6qXu1zjC1776kvgDEyDjn8prwDhKhEeFGNLlCWkimvo8pUo+6VFa3Zwy2SilV+gZ8w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.25.1.tgz", + "integrity": "sha512-TRD4hAxdHuZ0z414eDayE6q2gEmyAg7YdMrF+CJHWbjZKhJG4cqTSpV04zgMfQmTov5Y2+WtasdlGnqV5AXfMg==", "dev": true, "requires": { "@types/fs-extra": "^9.0.1", "@types/node": "^18.0.0", "@types/selenium-standalone": "^7.0.0", - "@wdio/config": "7.24.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", + "@wdio/types": "7.25.1", "fs-extra": "^10.0.0", "selenium-standalone": "^8.0.3" }, "dependencies": { "@types/node": { - "version": "18.7.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", - "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", + "version": "18.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", + "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==", "dev": true }, "@wdio/config": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.24.0.tgz", - "integrity": "sha512-MSIuwbs7JeOh9eMiFP3nVYDyaK3jYv7HY4eJIfvl6TBo4G1mTjbF1Dnct38W0ZR5WIFeSKhl15LiumbNUv0pyA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", - "@wdio/utils": "7.24.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" } @@ -15068,9 +15148,9 @@ } }, "@wdio/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.24.0.tgz", - "integrity": "sha512-wJZ+1lIHFz5aWXSO+k91wX8tfZdpyX4YYoker5xfC4zvM7ypyK81dZyiE5whS+QFL3VTCPP8dXNjwX5f5h+YEw==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "requires": { "@types/node": "^18.0.0", @@ -15078,13 +15158,13 @@ } }, "@wdio/utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.24.0.tgz", - "integrity": "sha512-VWfFT1Ket3pAt19kY5lPRuwJDheKF4hMwG0AiezkqqerDl/m+fcb4a6pj1WHjlawvlYM4MM15iBZFxYfphG9lg==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.24.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" } }, @@ -15264,6 +15344,12 @@ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -15508,9 +15594,9 @@ "dev": true }, "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "async-done": { @@ -15693,9 +15779,9 @@ } }, "blockly": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-8.0.4.tgz", - "integrity": "sha512-qGYrynzalzEHOMLJhZmADpuMXUH55nSTVgVd11Z1ZlVsm3NQ69ZVgBEaCSN+GsEUUpoui71g4oVzE2iHEHbAtw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-9.0.0.tgz", + "integrity": "sha512-V8rAT3N4QJ5r2emMGAf8D/yhwmAEfMnu/JVXmcvmS6dFcWR8g8aVlYpjTjW3CH8FyAPTrav2JalLqSfdc8TPpg==", "dev": true, "peer": true, "requires": { @@ -15766,6 +15852,12 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, "cac": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", @@ -16440,13 +16532,13 @@ } }, "concurrently": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", - "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz", + "integrity": "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==", "dev": true, "requires": { "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "date-fns": "^2.29.1", "lodash": "^4.17.21", "rxjs": "^7.0.0", "shell-quote": "^1.7.3", @@ -16649,9 +16741,9 @@ } }, "date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", "dev": true }, "dateformat": { @@ -16841,41 +16933,41 @@ "dev": true }, "devtools": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.23.0.tgz", - "integrity": "sha512-mu9ovRS0sfLP9bjtC20bCy8DF9kCtH9Xg1XmII6Vk+Icc2z/IMbm05QO0ScFDRrr3KdzldmfUOud5KfsLY4W/w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.25.1.tgz", + "integrity": "sha512-01T8QZeiD92MpI/7rP8kUflN3XcMqv2moa07123OjjENuuOhYxRWmJ7xj94txnF5PJp1Cv8/jvK8EUbnEHf6MQ==", "dev": true, "requires": { "@types/node": "^18.0.0", "@types/ua-parser-js": "^0.7.33", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "chrome-launcher": "^0.15.0", "edge-paths": "^2.1.0", "puppeteer-core": "^13.1.3", "query-selector-shadow-dom": "^1.0.0", "ua-parser-js": "^1.0.1", - "uuid": "^8.0.0" + "uuid": "^9.0.0" }, "dependencies": { "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" } @@ -16899,9 +16991,9 @@ "dev": true }, "@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "requires": { "@types/node": "^18.0.0", @@ -16909,13 +17001,13 @@ } }, "@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" } }, @@ -16951,23 +17043,17 @@ } }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true } } }, "devtools-protocol": { - "version": "0.0.1034970", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1034970.tgz", - "integrity": "sha512-kC7Wo+7z+Bo202DVB7qVqccreL+RpcGk/6eCrpM1qj2azag6UCMg05GL3ty2adg8CXWFpUGdMeyFJfIN8lQtgw==", - "dev": true - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "version": "0.0.1056733", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz", + "integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA==", "dev": true }, "dir-glob": { @@ -17249,14 +17335,13 @@ } }, "eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -17273,7 +17358,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -17282,6 +17366,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -18023,12 +18108,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "gaxios": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", @@ -18404,45 +18483,45 @@ } }, "google-closure-compiler": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20220905.0.0.tgz", - "integrity": "sha512-idZavy2vn91HCmqEepjmLFjfOdYoRsh9PggUbazUpjAOrBQz0HOm3WjOICMiywre+EnY1QGss0srEBtFtukM6w==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221004.0.0.tgz", + "integrity": "sha512-OKENLrZFF2o3FZ/E4zdTc9NeuAUh1fdwbQxT0sibI19aR62sgNUBo2mLU6sc4Gcm0cQ2gwfB7qX1xnapOIkbaA==", "dev": true, "requires": { "chalk": "4.x", - "google-closure-compiler-java": "^20220905.0.0", - "google-closure-compiler-linux": "^20220905.0.0", - "google-closure-compiler-osx": "^20220905.0.0", - "google-closure-compiler-windows": "^20220905.0.0", + "google-closure-compiler-java": "^20221004.0.0", + "google-closure-compiler-linux": "^20221004.0.0", + "google-closure-compiler-osx": "^20221004.0.0", + "google-closure-compiler-windows": "^20221004.0.0", "minimist": "1.x", "vinyl": "2.x", "vinyl-sourcemaps-apply": "^0.2.0" } }, "google-closure-compiler-java": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20220905.0.0.tgz", - "integrity": "sha512-wxGxNla/0UDS1Lm0cRxEy85KhVRd0vNlsTclnIJ9f1gRWzvvTsJ4lwz+PdT60R6y2hKAOBvydIJHh+B8XJastA==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221004.0.0.tgz", + "integrity": "sha512-CygLEB40HxtK0VtP6klv2Xm08w4HQNYX/DTgLV7CP74r8LiQMUByRFleaG/Hv5xQG1JzPNiW0GOAiAubDSdr5A==", "dev": true }, "google-closure-compiler-linux": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20220905.0.0.tgz", - "integrity": "sha512-kH09S66sz9+6wZmYM22VX8vG8KhCKJwFwXCfHx/ZOU6DBEzni6KfWrP+87CzTmZFEivclBhWAndm5HgNhSOEXQ==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221004.0.0.tgz", + "integrity": "sha512-B6sca3Lmw3cYXdFzdU0iQpk8L9VEo1ecC1aM7Gl9lgWhIicqqEZebsgnUe5TQ3uHBfQoKjV9fdFG8mt8X/oqSQ==", "dev": true, "optional": true }, "google-closure-compiler-osx": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20220905.0.0.tgz", - "integrity": "sha512-4uo2GAz77gI8nDt4OA8VUYh/FNdjmTLOIRDazl7si+BOjgp9bC6C3E/88o+YHETsVtrPmZk57/W7vH0lftyTAw==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221004.0.0.tgz", + "integrity": "sha512-z5V7BvaMauPga8DMTt9u6RGcjBdLAuv4gL2Ebw5NIQRTAHVkEVzCd3kiMX7CVCGhmWdS/1r3jZcCg4BswGia6w==", "dev": true, "optional": true }, "google-closure-compiler-windows": { - "version": "20220905.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20220905.0.0.tgz", - "integrity": "sha512-TZKHu6RHnrmgV90Gyen8+TGc0vgjgds80ErR+al5CqmfP9p+AskBbOe5CWZJht0bANrUhaeBMCrbs+7loFv06Q==", + "version": "20221004.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221004.0.0.tgz", + "integrity": "sha512-JSAWilVa7d65QJYKUr+DmklwKmjkAce6BMD6smqJfdL2dv5OSJ2ydGy73euoBJ4Tka8iQPoaOP+BjLrhIuvqKg==", "dev": true, "optional": true }, @@ -18793,6 +18872,47 @@ "through2": "^2.0.0" }, "dependencies": { + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "gulp-gzip": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz", + "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "bytes": "^3.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.0", + "stream-to-array": "^2.3.0", + "through2": "^2.0.3" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -19739,7 +19859,7 @@ "async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==", "dev": true, "peer": true }, @@ -19820,6 +19940,12 @@ "strip-json-comments": "^3.0.0" } }, + "js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -19963,9 +20089,9 @@ } }, "just-curry-it": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", - "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-5.2.1.tgz", + "integrity": "sha512-M8qhhO9WVNc3yZgf3qfiNxMIsQlHqFHJ3vMI8N/rkp852h1utOB/N3ebS8jeXGAwYSbkdd0K6zP9eZneUtjHwA==", "dev": true }, "just-debounce": { @@ -20751,12 +20877,11 @@ "dev": true }, "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", @@ -21724,9 +21849,9 @@ }, "dependencies": { "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -22523,9 +22648,9 @@ "dev": true }, "selenium-standalone": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-8.2.0.tgz", - "integrity": "sha512-gRFJm2A91sL0/4PavIsfTVNjyqNjk+zbdJg/zAYgTMjuoWJv+BlYJh+1UbEtyjt4YvZACYif1DFAzFjQapqiOA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-8.2.2.tgz", + "integrity": "sha512-CdfN5WnX0mzrjeCTFnvnsjsXEsQwgepLIvrA6OamrKT29gD8mufemwM3v9VG4grQDFHZZy7Ma1giw232x4eGmw==", "dev": true, "requires": { "commander": "^9.0.0", @@ -23117,6 +23242,15 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "dev": true, + "requires": { + "any-promise": "^1.1.0" + } + }, "streamqueue": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz", @@ -23973,37 +24107,37 @@ } }, "webdriver": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.23.0.tgz", - "integrity": "sha512-riIQ77PVWnuyGsI/Kt13jDjWnatrFme2OWm9In9sKvKTaJBz5WU1ae1pYO8H/SQVIxMyys2y9UYGOLJnQ3XM8A==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.25.1.tgz", + "integrity": "sha512-BmR5RT37EGNJj/O/GTCqBKXV/Jr9V4oQTTDaurZixVKW0ubG7uyfrhiklzuWUtmES9VualTKgQumhGhchBTC6g==", "dev": true, "requires": { "@types/node": "^18.0.0", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "got": "^11.0.2", "ky": "0.30.0", "lodash.merge": "^4.6.1" }, "dependencies": { "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" } @@ -24027,9 +24161,9 @@ "dev": true }, "@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "requires": { "@types/node": "^18.0.0", @@ -24037,13 +24171,13 @@ } }, "@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" } }, @@ -24087,25 +24221,25 @@ } }, "webdriverio": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.23.0.tgz", - "integrity": "sha512-xQwVrT27Ly23r95heFTumwZmkW5Sw2PwOrXpII4GMRfAY5tIQlkutlCJgf4sEfPCD6mxbW40Oniun/VwL2bkSw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.25.2.tgz", + "integrity": "sha512-lZwHh1G2Zxg4LmVQZZZNhKAqjGoSxoDaqlAf0ojh/3DcWVxMpFtaj0mksrqCyVhObudb2dopOX26beWPyKwL4A==", "dev": true, "requires": { "@types/aria-query": "^5.0.0", "@types/node": "^18.0.0", - "@wdio/config": "7.23.0", + "@wdio/config": "7.25.1", "@wdio/logger": "7.19.0", "@wdio/protocols": "7.22.0", - "@wdio/repl": "7.23.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/repl": "7.25.1", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "archiver": "^5.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools": "7.23.0", - "devtools-protocol": "^0.0.1034970", + "devtools": "7.25.1", + "devtools-protocol": "^0.0.1056733", "fs-extra": "^10.0.0", "grapheme-splitter": "^1.0.2", "lodash.clonedeep": "^4.5.0", @@ -24118,24 +24252,24 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^8.0.0", - "webdriver": "7.23.0" + "webdriver": "7.25.1" }, "dependencies": { "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz", + "integrity": "sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==", "dev": true }, "@wdio/config": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.23.0.tgz", - "integrity": "sha512-jLf1yUqu5EUyzCUxsZzDDGurkA2/8LKBv/4W55jYkRqnw4dqwx/kvOLDGIBJnNFOWF/enhvJwNuxEGf3dWNynQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.25.1.tgz", + "integrity": "sha512-7I3L+TE75gvh8jiv8cE/Ch9S9erDgrZG9o5587OlNKfpgFciT7DH7/efPXzYwh8YPFV3grFaydxaaoYzDv6PDA==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", - "@wdio/utils": "7.23.0", + "@wdio/types": "7.25.1", + "@wdio/utils": "7.25.1", "deepmerge": "^4.0.0", "glob": "^8.0.3" } @@ -24159,9 +24293,9 @@ "dev": true }, "@wdio/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.23.0.tgz", - "integrity": "sha512-9I00r/AkitiDbOX0swYo6r3t1jzEHd6DD3opH5Zz/pMGQbwMenqvmACH+HwnRA7QKbcRVb1bY66yogMxvfQYAQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.25.1.tgz", + "integrity": "sha512-9Xt2U0YXYxRW4UvMFwjt+44UkfhwrI1gPhW+y56SubpyKaUfdNGberteboQoR/7Os1SVtJry4FohEZNmFzPK6g==", "dev": true, "requires": { "@types/node": "^18.0.0", @@ -24169,13 +24303,13 @@ } }, "@wdio/utils": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.23.0.tgz", - "integrity": "sha512-kFnUOkU2IUQXORCOzZ4QcSPA1Dk+QdUMwWYB04jtfYle1Wyzbbs9c+7PeIe03oRHBHHCYOkd6+YcnwcZAxWmOQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.25.1.tgz", + "integrity": "sha512-DL+nDRVgzruJLhedBUQEMUcojLoGwsjCQCYWram4NfwAIIkxcAX/5Y4vHSut3OoW2bEHl3R8/FQ4B/ivIr2EoQ==", "dev": true, "requires": { "@wdio/logger": "7.19.0", - "@wdio/types": "7.23.0", + "@wdio/types": "7.25.1", "p-iteration": "^1.1.8" } }, @@ -24330,18 +24464,31 @@ "dev": true }, "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index 3d4888913..94a27947e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blockly", - "version": "8.0.0", + "version": "9.0.1", "description": "Blockly is a library for building visual programming editors.", "keywords": [ "blockly" @@ -47,9 +47,9 @@ "publish:beta": "npm ci && gulp publishBeta", "recompile": "gulp recompile", "release": "gulp gitCreateRC", - "start": "http-server ./ -o /tests/playground.html -c-1", - "test": "tests/run_all_tests.sh", - "test:generators": "tests/scripts/run_generators.sh", + "start": "concurrently -n tsc,server \"tsc --watch --preserveWatchOutput --outDir 'build/src' --declarationDir 'build/declarations'\" \"http-server ./ -s -o /tests/playground.html -c-1\"", + "test": "gulp --silent test", + "test:generators": "gulp --silent testGenerators", "test:mocha:interactive": "http-server ./ -o /tests/mocha/index.html -c-1", "test:compile:advanced": "gulp buildAdvancedCompilationTest --debug", "updateGithubPages": "npm ci && gulp gitUpdateGithubPages" @@ -65,25 +65,26 @@ }, "license": "Apache-2.0", "devDependencies": { - "@blockly/block-test": "^2.0.1", - "@blockly/dev-tools": "^4.0.2", - "@blockly/theme-modern": "^2.1.1", - "@hyperjump/json-schema": "^0.18.4", + "@blockly/block-test": "^3.0.0", + "@blockly/dev-tools": "^5.0.0", + "@blockly/theme-modern": "^3.0.0", + "@hyperjump/json-schema": "^0.18.5", "@microsoft/api-extractor": "^7.29.5", "@typescript-eslint/eslint-plugin": "^5.33.1", "@wdio/selenium-standalone-service": "^7.10.1", "chai": "^4.2.0", "clang-format": "^1.6.0", "closure-calculate-chunks": "^3.0.2", - "concurrently": "^7.0.0", + "concurrently": "^7.4.0", "eslint": "^8.4.1", "eslint-config-google": "^0.14.0", "eslint-plugin-jsdoc": "^39.3.6", - "google-closure-compiler": "^20220905.0.0", + "google-closure-compiler": "^20221004.0.0", "google-closure-deps": "^20220905.0.0", "gulp": "^4.0.2", "gulp-clang-format": "^1.0.27", "gulp-concat": "^2.6.1", + "gulp-gzip": "^1.4.2", "gulp-insert": "^0.5.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", diff --git a/release-please-config.json b/release-please-config.json deleted file mode 100644 index 1a90aca04..000000000 --- a/release-please-config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "packages": { - ".": {} - }, - "draft": true -} diff --git a/scripts/gulpfiles/build_tasks.js b/scripts/gulpfiles/build_tasks.js index 086d1b244..bf3f407a2 100644 --- a/scripts/gulpfiles/build_tasks.js +++ b/scripts/gulpfiles/build_tasks.js @@ -28,6 +28,8 @@ var rimraf = require('rimraf'); var {BUILD_DIR, DEPS_FILE, RELEASE_DIR, TEST_DEPS_FILE, TSC_OUTPUT_DIR, TYPINGS_BUILD_DIR} = require('./config'); var {getPackageJson} = require('./helper_tasks'); +var {posixPath} = require('../helpers'); + //////////////////////////////////////////////////////////// // Build // //////////////////////////////////////////////////////////// @@ -102,7 +104,9 @@ const NAMESPACE_PROPERTY = '__namespace__'; const chunks = [ { name: 'blockly', - entry: path.join(CORE_DIR, 'main.js'), + entry: posixPath((argv.compileTs) ? + path.join(TSC_OUTPUT_DIR, CORE_DIR, 'main.js') : + path.join(CORE_DIR, 'main.js')), exports: 'module$build$src$core$blockly', reexport: 'Blockly', }, @@ -174,7 +178,7 @@ function stripApacheLicense() { * For a full list of closure compiler groups, consult the output of * google-closure-compiler --help or look in the source here: * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DiagnosticGroups.java#L117 - * + * * The list in JSCOMP_ERROR contains all the diagnostic groups we know * about, but some are commented out if we don't want them, and may * appear in JSCOMP_WARNING or JSCOMP_OFF instead. Items not @@ -277,7 +281,7 @@ var JSCOMP_OFF = [ * core/utils/*. We were downgrading access control violations * (including @private) to warnings, but this ends up being so * spammy that it makes the compiler output nearly useless. - * + * * Once ES module migration is complete, they will be re-enabled and * an alternative to @package will be established. */ @@ -336,6 +340,18 @@ function buildDeps(done) { 'tests/mocha' ]; + /** + * Extracts lines that contain the specified keyword. + * @param {string} text output text + * @param {string} keyword extract lines with this keyword + * @returns {string} modified text + */ + function extractOutputs(text, keyword) { + return text.split('\n') + .filter((line) => line.includes(keyword)) + .join('\n'); + } + function filterErrors(text) { return text.split('\n') .filter( @@ -348,29 +364,29 @@ function buildDeps(done) { new Promise((resolve, reject) => { const args = roots.map(root => `--root '${root}' `).join(''); exec( - `closure-make-deps ${args} >'${DEPS_FILE}'`, - {stdio: ['inherit', 'inherit', 'pipe']}, + `closure-make-deps ${args}`, (error, stdout, stderr) => { console.warn(filterErrors(stderr)); if (error) { reject(error); } else { + fs.writeFileSync(DEPS_FILE, stdout); resolve(); } }); }).then(() => new Promise((resolve, reject) => { - // Use grep to filter out the entries that are already in deps.js. + // Filter out the entries that are already in deps.js. const testArgs = testRoots.map(root => `--root '${root}' `).join(''); exec( - `closure-make-deps ${testArgs} 2>/dev/null\ - | grep 'tests/mocha' > '${TEST_DEPS_FILE}'`, - {stdio: ['inherit', 'inherit', 'pipe']}, + `closure-make-deps ${testArgs}`, (error, stdout, stderr) => { console.warn(filterErrors(stderr)); if (error) { reject(error); } else { + fs.writeFileSync(TEST_DEPS_FILE, + extractOutputs(stdout, 'tests/mocha')); resolve(); } }); @@ -463,7 +479,7 @@ function chunkWrapper(chunk) { browserDepsExpr = `root.${chunk.parent.reexport}`; factoryArgs = '__parent__'; namespaceExpr = `${factoryArgs}.${NAMESPACE_PROPERTY}`; - } + } // Code to assign the result of the factory function to the desired // export location when running in a browser. When @@ -519,9 +535,6 @@ return ${chunk.exports}; * closure-calculate-chunks. */ function getChunkOptions() { - if (argv.compileTs) { - chunks[0].entry = path.join(TSC_OUTPUT_DIR, chunks[0].entry); - } const basePath = path.join(TSC_OUTPUT_DIR, 'closure', 'goog', 'base_minimal.js'); const cccArgs = [ @@ -559,7 +572,9 @@ function getChunkOptions() { // chunk depends on any chunk but the first), so we look for // one of the entrypoints amongst the files in each chunk. const chunkByNickname = Object.create(null); - const jsFiles = rawOptions.js.slice(); // Will be modified via .splice! + // Copy and convert to posix js file paths. + // Result will be modified via `.splice`! + const jsFiles = rawOptions.js.map(p => posixPath(p)); const chunkList = rawOptions.chunk.map((element) => { const [nickname, numJsFiles, parentNick] = element.split(':'); diff --git a/scripts/gulpfiles/package_tasks.js b/scripts/gulpfiles/package_tasks.js index fda1b5c94..2408641f7 100644 --- a/scripts/gulpfiles/package_tasks.js +++ b/scripts/gulpfiles/package_tasks.js @@ -343,7 +343,7 @@ function packageReadme() { function packageDTS() { const handwrittenSrcs = [ 'typings/*.d.ts', - 'typings/msg/msg.d.ts', + 'typings/msg/*.d.ts', ]; return gulp.src(handwrittenSrcs, {base: 'typings'}) .pipe(gulp.src(`${TYPINGS_BUILD_DIR}/**/*.d.ts`)) diff --git a/scripts/gulpfiles/test_tasks.js b/scripts/gulpfiles/test_tasks.js new file mode 100644 index 000000000..54a5ffa92 --- /dev/null +++ b/scripts/gulpfiles/test_tasks.js @@ -0,0 +1,350 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @fileoverview Gulp tasks to test. + */ +/* eslint-env node */ + +const gulp = require('gulp'); +const gzip = require('gulp-gzip'); +const fs = require('fs'); +const path = require('path'); +const {execSync} = require('child_process'); +const rimraf = require('rimraf'); + +const {BUILD_DIR} = require('./config'); + +const runMochaTestsInBrowser = + require('../../tests/mocha/run_mocha_tests_in_browser.js'); + +const runGeneratorsInBrowser = + require('../../tests/generators/run_generators_in_browser.js'); + +const OUTPUT_DIR = 'build/generators/'; +const GOLDEN_DIR = 'tests/generators/golden/'; + +const BOLD_GREEN = '\x1b[1;32m'; +const BOLD_RED = '\x1b[1;31m'; +const ANSI_RESET = '\x1b[0m'; + +let failerCount = 0; + +/** + * Helper method for running test code block. + * @param {string} id test id + * @param {function} block test code block + * @return {Promise} asynchronous result + */ +function runTestBlock(id, block) { + return new Promise((resolve) => { + console.log('======================================='); + console.log(`== ${id}`); + if (process.env.CI) console.log('::group::'); + block() + .then((result) => { + if (process.env.CI) console.log('::endgroup::'); + console.log(`${BOLD_GREEN}SUCCESS:${ANSI_RESET} ${id}`); + resolve(result); + }) + .catch((err) => { + failerCount++; + console.error(err.message); + if (process.env.CI) console.log('::endgroup::'); + console.log(`${BOLD_RED}FAILED:${ANSI_RESET} ${id}`); + // Always continue. + resolve(err); + }); + }); +} + +/** + * Helper method for running test command. + * @param {string} id test id + * @param {string} command command line to run + * @return {Promise} asynchronous result + */ +function runTestCommand(id, command) { + return runTestBlock(id, async() => { + return execSync(command, {stdio: 'inherit'}); + }, false); +} + +/** + * Lint the codebase. + * Skip for CI environments, because linting is run separately. + * @return {Promise} asynchronous result + */ +function eslint() { + if (process.env.CI) { + console.log('Skip linting.'); + return Promise.resolve(); + } + return runTestCommand('eslint', 'eslint .'); +} + +/** + * Run the full usual build process, checking to ensure there are no + * closure compiler warnings / errors. + * @return {Promise} asynchronous result + */ +function buildDebug() { + return runTestCommand('build-debug', 'npm run build-debug'); +} + +/** + * Run renaming validation test. + * @return {Promise} asynchronous result + */ +function renamings() { + return runTestCommand('renamings', 'node tests/migration/validate-renamings.js'); +} + +/** + * Helper method for gzipping file. + * @param {string} file target file + * @return {Promise} asynchronous result + */ +function gzipFile(file) { + return new Promise((resolve) => { + const name = path.posix.join('build', file); + + const stream = gulp.src(name) + .pipe(gzip()) + .pipe(gulp.dest('build')); + + stream.on('end', () => { + resolve(); + }); + }); +} + +/** + * Helper method for comparing file size. + * @param {string} file target file + * @param {number} expected expected size + * @return {number} 0: success / 1: failed + */ +function compareSize(file, expected) { + const name = path.posix.join(BUILD_DIR, file); + const compare = Math.floor(expected * 1.1); + const stat = fs.statSync(name); + const size = stat.size; + + if (size > compare) { + const message = `Failed: ` + + `Size of ${name} has grown more than 10%. ${size} vs ${expected} `; + console.log(`${BOLD_RED}${message}${ANSI_RESET}`); + return 1; + } else { + const message = + `Size of ${name} at ${size} compared to previous ${expected}`; + console.log(`${BOLD_GREEN}${message}${ANSI_RESET}`); + return 0; + } +} + +/** + * Helper method for zipping the compressed files. + * @return {Promise} asynchronous result + */ +function zippingFiles() { + // GZip them for additional size comparisons (keep originals, force + // overwite previously-gzipped copies). + console.log('Zipping the compressed files'); + const gzip1 = gzipFile('blockly_compressed.js'); + const gzip2 = gzipFile('blocks_compressed.js'); + return Promise.all([gzip1, gzip2]); +} + +/** + * Check the sizes of built files for unexpected growth. + * @return {Promise} asynchronous result + */ +function metadata() { + return runTestBlock('metadata', async() => { + // Zipping the compressed files. + await zippingFiles(); + // Read expected size from script. + const contents = fs.readFileSync('tests/scripts/check_metadata.sh') + .toString(); + const pattern = /^readonly (?[A-Z_]+)=(?\d+)$/gm; + const matches = contents.matchAll(pattern); + const expected = {}; + for (const match of matches) { + expected[match.groups.key] = match.groups.value; + } + + // Check the sizes of the files. + let failed = 0; + failed += compareSize('blockly_compressed.js', + expected.BLOCKLY_SIZE_EXPECTED); + failed += compareSize('blocks_compressed.js', + expected.BLOCKS_SIZE_EXPECTED); + failed += compareSize('blockly_compressed.js.gz', + expected.BLOCKLY_GZ_SIZE_EXPECTED); + failed += compareSize('blocks_compressed.js.gz', + expected.BLOCKS_GZ_SIZE_EXPECTED); + if (failed > 0) { + throw new Error('Unexpected growth was detected.'); + } + }); +} + +/** + * Run Mocha tests inside a browser. + * @return {Promise} asynchronous result + */ +function mocha() { + return runTestBlock('mocha', async() => { + const result = await runMochaTestsInBrowser().catch(e => { + throw e; + }); + if (result) { + throw new Error('Mocha tests failed'); + } + console.log('Mocha tests passed'); + }); +} + +/** + * Helper method for comparison file. + * @param {string} file1 first target file + * @param {string} file2 second target file + * @return {boolean} comparison result (true: same / false: different) + */ +function compareFile(file1, file2) { + const buf1 = fs.readFileSync(file1); + const buf2 = fs.readFileSync(file2); + // Normalize the line feed. + const code1 = buf1.toString().replace(/(?:\r\n|\r|\n)/g, '\n'); + const code2 = buf2.toString().replace(/(?:\r\n|\r|\n)/g, '\n'); + const result = (code1 === code2); + return result; +} + +/** + * Helper method for checking the result of generator. + * @param {string} suffix target suffix + * @return {number} check result (0: success / 1: failed) + */ +function checkResult(suffix) { + const fileName = `generated.${suffix}`; + const resultFileName = path.posix.join(OUTPUT_DIR, fileName); + + const SUCCESS_PREFIX = `${BOLD_GREEN}SUCCESS:${ANSI_RESET}`; + const FAILURE_PREFIX = `${BOLD_RED}FAILED:${ANSI_RESET}`; + + if (fs.existsSync(resultFileName)) { + const goldenFileName = path.posix.join(GOLDEN_DIR, fileName); + if (fs.existsSync(goldenFileName)) { + if (compareFile(resultFileName, goldenFileName)) { + console.log(`${SUCCESS_PREFIX} ${suffix}: ` + + `${resultFileName} matches ${goldenFileName}`); + return 0; + } else { + console.log( + `${FAILURE_PREFIX} ${suffix}: ` + + `${resultFileName} does not match ${goldenFileName}`); + } + } else { + console.log(`File ${goldenFileName} not found!`); + } + } else { + console.log(`File ${resultFileName} not found!`); + } + return 1; +} + +/** + * Run generator tests inside a browser and check the results. + * @return {Promise} asynchronous result + */ +function generators() { + return runTestBlock('generators', async() => { + // Clean up. + rimraf.sync(OUTPUT_DIR); + fs.mkdirSync(OUTPUT_DIR); + + await runGeneratorsInBrowser(OUTPUT_DIR).catch(() => {}); + + const generatorSuffixes = ['js', 'py', 'dart', 'lua', 'php']; + let failed = 0; + generatorSuffixes.forEach((suffix) => { + failed += checkResult(suffix); + }); + + if (failed === 0) { + console.log(`${BOLD_GREEN}All generator tests passed.${ANSI_RESET}`); + } else { + console.log( + `${BOLD_RED}Failures in ${failed} generator tests.${ANSI_RESET}`); + throw new Error('Generator tests failed.'); + } + }); +} + +/** + * Run the package build process, as Node tests depend on it. + * @return {Promise} asynchronous result + */ +function package() { + return runTestCommand('package', 'npm run package'); +} + +/** + * Run Node tests. + * @return {Promise} asynchronous result + */ +function node() { + return runTestCommand('node', 'mocha tests/node --config tests/node/.mocharc.js'); +} + +/** + * Attempt advanced compilation of a Blockly app. + * @return {Promise} asynchronous result + */ +function advancedCompile() { + return runTestCommand('advanced_compile', 'npm run test:compile:advanced'); +} + +/** + * Report test result. + * @return {Promise} asynchronous result + */ +function reportTestResult() { + console.log('======================================='); + // Check result. + if (failerCount === 0) { + console.log(`${BOLD_GREEN}All tests passed.${ANSI_RESET}`); + return Promise.resolve(); + } else { + console.log(`${BOLD_RED}Failures in ${failerCount} test groups.${ANSI_RESET}`); + return Promise.reject(); + } +} + +// Indivisual tasks. +const testTasks = [ + eslint, + buildDebug, + renamings, + metadata, + mocha, + generators, + package, + node, + advancedCompile, + reportTestResult, +]; + +// Run all tests in sequence. +const test = gulp.series(...testTasks); + +module.exports = { + test, + generators, +}; diff --git a/scripts/helpers.js b/scripts/helpers.js new file mode 100644 index 000000000..8dd013835 --- /dev/null +++ b/scripts/helpers.js @@ -0,0 +1,35 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @fileoverview Helper functions for build/test. + */ +/* eslint-env node */ + +const path = require('path'); + +/** + * Escape regular expression pattern + * @param {string} pattern regular expression pattern + * @return {string} escaped regular expression pattern + */ +function escapeRegex(pattern) { + return pattern.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +/** + * Replaces OS-specific path with POSIX style path. + * @param {string} target target path + * @return {string} posix path + */ +function posixPath(target) { + const osSpecificSep = new RegExp(escapeRegex(path.sep), 'g'); + return target.replace(osSpecificSep, path.posix.sep); +} + +module.exports = { + posixPath, +}; diff --git a/scripts/migration/renamings.json5 b/scripts/migration/renamings.json5 index 311662d41..540fd08e5 100644 --- a/scripts/migration/renamings.json5 +++ b/scripts/migration/renamings.json5 @@ -1337,7 +1337,7 @@ }, ], - 'develop': [ + '9.0.0': [ { 'oldName': 'Blockly.utils.global', 'newPath': 'globalThis', @@ -1360,7 +1360,7 @@ { oldName: 'Blockly.PHP', newExport: 'phpGenerator', - newPath: 'Blockly.php', + newPath: 'Blockly.PHP', }, { oldName: 'Blockly.Python', @@ -1416,4 +1416,8 @@ }, }, ], + + 'develop': [ + // New renamings go here! + ] } diff --git a/scripts/package/README.md b/scripts/package/README.md index b4f0cf3b8..80748bfe3 100644 --- a/scripts/package/README.md +++ b/scripts/package/README.md @@ -36,9 +36,9 @@ For samples on how to integrate Blockly into your project, view the list of samp ### Importing Blockly When you import Blockly with ``import * as Blockly from 'blockly';`` you'll get the default modules: -Blockly core, Blockly built-in blocks, the JavaScript generator and the English lang files. +Blockly core, Blockly built-in blocks, the JavaScript generator and the English lang files. -If you need more flexibility, you'll want to define your imports more carefully: +If you need more flexibility, you'll want to define your imports more carefully: #### Blockly Core @@ -49,16 +49,16 @@ import * as Blockly from 'blockly/core'; #### Blockly built in blocks ```js -import 'blockly/blocks'; +import * as libraryBlocks from 'blockly/blocks'; ``` #### Blockly Generators If your application needs to generate code from the Blockly blocks, you'll want to include a generator. ```js -import 'blockly/python'; +import {pythonGenerator} from 'blockly/python'; ``` -to include the Python generator, you can also import ``blockly/javascript``, ``blockly/php``, ``blockly/dart`` and ``blockly/lua``. +to include the Python generator. You can also import `{javascriptGenerator} from 'blockly/javascript'`, `{phpGenerator} from 'blockly/php'`, `{dartGenerator} from 'blockly/dart'` and `{luaGenerator} from 'blockly/lua'`. #### Blockly Languages diff --git a/scripts/package/browser/core.js b/scripts/package/browser/core.js index a0b0d9259..7471feda6 100644 --- a/scripts/package/browser/core.js +++ b/scripts/package/browser/core.js @@ -12,9 +12,3 @@ /* eslint-disable */ 'use strict'; -// Add a helper method to set the Blockly locale. -Blockly.setLocale = function (locale) { - Object.keys(locale).forEach(function (k) { - Blockly.Msg[k] = locale[k]; - }); -}; diff --git a/scripts/package/node/core.js b/scripts/package/node/core.js index 2135b966d..11e77b5b6 100644 --- a/scripts/package/node/core.js +++ b/scripts/package/node/core.js @@ -12,12 +12,6 @@ /* eslint-disable */ 'use strict'; -// Add a helper method to set the Blockly locale. -Blockly.setLocale = function (locale) { - Object.keys(locale).forEach(function (k) { - Blockly.Msg[k] = locale[k]; - }); -}; // Override textToDomDocument and provide Node.js alternatives to DOMParser and // XMLSerializer. diff --git a/scripts/package/templates/node.template b/scripts/package/templates/node.template index eef05d742..e9887243e 100644 --- a/scripts/package/templates/node.template +++ b/scripts/package/templates/node.template @@ -2,4 +2,4 @@ (function (<%= param %>){ <%= contents %> module.exports = <%= exports %>; -})(<%= cjs %>); +})(<%= cjs %>); diff --git a/scripts/package/templates/umd-msg.template b/scripts/package/templates/umd-msg.template index 527936f16..dda7334b3 100644 --- a/scripts/package/templates/umd-msg.template +++ b/scripts/package/templates/umd-msg.template @@ -13,4 +13,4 @@ }(this, function() { <%= contents %> return Blockly.Msg; -})); +})); diff --git a/scripts/package/templates/umd.template b/scripts/package/templates/umd.template index ab62e103c..9eaa0e3cd 100644 --- a/scripts/package/templates/umd.template +++ b/scripts/package/templates/umd.template @@ -10,4 +10,4 @@ }(this, function(<%= param %>) { <%= contents %> return <%= exports %>; -})); +})); diff --git a/tests/bootstrap.js b/tests/bootstrap.js index 4dea776aa..7d3549101 100644 --- a/tests/bootstrap.js +++ b/tests/bootstrap.js @@ -68,7 +68,7 @@ depsFiles: [ 'build/deps.js', ], - + // List of goog.modules to goog.require. requires: [ 'Blockly', diff --git a/tests/generators/run_generators_in_browser.js b/tests/generators/run_generators_in_browser.js index 280a59fe5..f97049805 100644 --- a/tests/generators/run_generators_in_browser.js +++ b/tests/generators/run_generators_in_browser.js @@ -9,6 +9,7 @@ */ var webdriverio = require('webdriverio'); var fs = require('fs'); +var path = require('path'); module.exports = runGeneratorsInBrowser; @@ -35,9 +36,10 @@ async function runLangGeneratorInBrowser(browser, filename, codegenFn) { * Runs the generator tests in Chrome. It uses webdriverio to * launch Chrome and load index.html. Outputs a summary of the test results * to the console and outputs files for later validation. + * @param {string} outputDir output directory * @return the Thenable managing the processing of the browser tests. */ -async function runGeneratorsInBrowser() { +async function runGeneratorsInBrowser(outputDir) { var options = { capabilities: { browserName: 'chrome', @@ -52,15 +54,15 @@ async function runGeneratorsInBrowser() { }; } else { // --disable-gpu is needed to prevent Chrome from hanging on Linux with - // NVIDIA drivers older than v295.20. See - // https://github.com/google/blockly/issues/5345 for details. + // NVIDIA drivers older than v295.20. See + // https://github.com/google/blockly/issues/5345 for details. options.capabilities['goog:chromeOptions'] = { args: ['--allow-file-access-from-files', '--disable-gpu'] }; } var url = 'file://' + __dirname + '/index.html'; - var prefix = 'tests/generators/tmp/generated'; + var prefix = path.join(outputDir, 'generated'); console.log('Starting webdriverio...'); const browser = await webdriverio.remote(options); @@ -97,7 +99,7 @@ async function runGeneratorsInBrowser() { } if (require.main === module) { - runGeneratorsInBrowser().catch(e => { + runGeneratorsInBrowser('tests/generators/tmp').catch(e => { console.error(e); process.exit(1); }).then(function(result) { diff --git a/tests/migration/validate-renamings.js b/tests/migration/validate-renamings.js old mode 100755 new mode 100644 index 8b66e3bea..a5c084b3f --- a/tests/migration/validate-renamings.js +++ b/tests/migration/validate-renamings.js @@ -17,6 +17,7 @@ const JsonSchema = require('@hyperjump/json-schema'); const JSON5 = require('json5'); const fs = require('fs'); const path = require('path'); +const {posixPath} = require('../../scripts/helpers'); /** @@ -35,7 +36,7 @@ const RENAMINGS_FILENAME = // Can't use top-level await outside a module, and can't use require // in a module, so use an IIAFE. (async function() { - const schemaUrl = 'file://' + path.resolve(SCHEMA_FILENAME); + const schemaUrl = 'file://' + posixPath(path.resolve(SCHEMA_FILENAME)); const schema = await JsonSchema.get(schemaUrl); const renamingsJson5 = fs.readFileSync(RENAMINGS_FILENAME); diff --git a/tests/mocha/block_change_event_test.js b/tests/mocha/block_change_event_test.js index ecd62f4b4..8574c1f68 100644 --- a/tests/mocha/block_change_event_test.js +++ b/tests/mocha/block_change_event_test.js @@ -25,12 +25,12 @@ suite('Block Change Event', function() { setup(function() { defineMutatorBlocks(); }); - + teardown(function() { Blockly.Extensions.unregister('xml_mutator'); Blockly.Extensions.unregister('jso_mutator'); }); - + suite('XML', function() { test('Undo', function() { const block = this.workspace.newBlock('xml_block', 'block_id'); diff --git a/tests/mocha/blocks/variables_test.js b/tests/mocha/blocks/variables_test.js index 737471220..7de2b7368 100644 --- a/tests/mocha/blocks/variables_test.js +++ b/tests/mocha/blocks/variables_test.js @@ -92,7 +92,7 @@ suite('Variables', function() { }); suite('getVariable', function() { - test('By id', function() { + test('By ID', function() { const var1 = this.workspace.createVariable('name1', 'type1', 'id1'); const var2 = this.workspace.createVariable('name2', 'type1', 'id2'); const var3 = this.workspace.createVariable('name3', 'type2', 'id3'); @@ -122,7 +122,7 @@ suite('Variables', function() { chai.assert.equal(var3, result3); }); - test('Bad id with name and type fallback', function() { + test('Bad ID with name and type fallback', function() { const var1 = this.workspace.createVariable('name1', 'type1', 'id1'); const var2 = this.workspace.createVariable('name2', 'type1', 'id2'); const var3 = this.workspace.createVariable('name3', 'type2', 'id3'); diff --git a/tests/mocha/event_test.js b/tests/mocha/event_test.js index 30bec99ed..9954225be 100644 --- a/tests/mocha/event_test.js +++ b/tests/mocha/event_test.js @@ -61,7 +61,7 @@ suite('Events', function() { suite('Constructors', function() { test('Abstract', function() { const event = new Blockly.Events.Abstract(); - assertEventEquals(event, undefined, undefined, undefined, { + assertEventEquals(event, '', undefined, undefined, { 'recordUndo': true, 'group': '', }); @@ -69,7 +69,7 @@ suite('Events', function() { test('UI event without block', function() { const event = new Blockly.Events.UiBase(this.workspace.id); - assertEventEquals(event, undefined, this.workspace.id, undefined, { + assertEventEquals(event, '', this.workspace.id, undefined, { 'recordUndo': false, 'group': '', }, true); @@ -110,10 +110,9 @@ suite('Events', function() { test('Block base', function() { const event = new Blockly.Events.BlockBase(this.block); sinon.assert.calledOnce(this.genUidStub); - assertEventEquals(event, undefined, + assertEventEquals(event, '', this.workspace.id, this.TEST_BLOCK_ID, { - 'varId': undefined, 'recordUndo': true, 'group': '', }); @@ -223,7 +222,7 @@ suite('Events', function() { test('Block base', function() { const event = new Blockly.Events.BlockBase(this.block); sinon.assert.calledOnce(this.genUidStub); - assertEventEquals(event, undefined, + assertEventEquals(event, '', this.workspace.id, this.TEST_BLOCK_ID, { 'varId': undefined, @@ -339,51 +338,51 @@ suite('Events', function() { const variableEventTestCases = [ {title: 'Var create', class: Blockly.Events.VarCreate, getArgs: (thisObj) => [thisObj.variable], - getExpectedJson: () => ({type: 'var_create', varId: 'id1', + getExpectedJson: () => ({type: 'var_create', group: '', varId: 'id1', varType: 'type1', varName: 'name1'})}, {title: 'Var delete', class: Blockly.Events.VarDelete, getArgs: (thisObj) => [thisObj.variable], - getExpectedJson: () => ({type: 'var_delete', varId: 'id1', + getExpectedJson: () => ({type: 'var_delete', group: '', varId: 'id1', varType: 'type1', varName: 'name1'})}, {title: 'Var rename', class: Blockly.Events.VarRename, getArgs: (thisObj) => [thisObj.variable, 'name2'], - getExpectedJson: () => ({type: 'var_rename', varId: 'id1', + getExpectedJson: () => ({type: 'var_rename', group: '', varId: 'id1', oldName: 'name1', newName: 'name2'})}, ]; const uiEventTestCases = [ {title: 'Bubble open', class: Blockly.Events.BubbleOpen, getArgs: (thisObj) => [thisObj.block, true, 'mutator'], - getExpectedJson: (thisObj) => ({type: 'bubble_open', isOpen: true, + getExpectedJson: (thisObj) => ({type: 'bubble_open', group: '', isOpen: true, bubbleType: 'mutator', blockId: thisObj.block.id})}, {title: 'Block click', class: Blockly.Events.Click, getArgs: (thisObj) => [thisObj.block, null, 'block'], - getExpectedJson: (thisObj) => ({type: 'click', targetType: 'block', + getExpectedJson: (thisObj) => ({type: 'click', group: '', targetType: 'block', blockId: thisObj.block.id})}, {title: 'Workspace click', class: Blockly.Events.Click, getArgs: (thisObj) => [null, thisObj.workspace.id, 'workspace'], - getExpectedJson: (thisObj) => ({type: 'click', + getExpectedJson: (thisObj) => ({type: 'click', group: '', targetType: 'workspace'})}, {title: 'Drag start', class: Blockly.Events.BlockDrag, getArgs: (thisObj) => [thisObj.block, true, [thisObj.block]], - getExpectedJson: (thisObj) => ({type: 'drag', + getExpectedJson: (thisObj) => ({type: 'drag', group: '', isStart: true, blockId: thisObj.block.id, blocks: [thisObj.block]})}, {title: 'Drag end', class: Blockly.Events.BlockDrag, getArgs: (thisObj) => [thisObj.block, false, [thisObj.block]], - getExpectedJson: (thisObj) => ({type: 'drag', + getExpectedJson: (thisObj) => ({type: 'drag', group: '', isStart: false, blockId: thisObj.block.id, blocks: [thisObj.block]})}, {title: 'null to Block Marker move', class: Blockly.Events.MarkerMove, getArgs: (thisObj) => [thisObj.block, true, null, new ASTNode(ASTNode.types.BLOCK, thisObj.block)], - getExpectedJson: (thisObj) => ({type: 'marker_move', - isCursor: true, blockId: thisObj.block.id, oldNode: null, + getExpectedJson: (thisObj) => ({type: 'marker_move', group: '', + isCursor: true, blockId: thisObj.block.id, oldNode: undefined, newNode: new ASTNode(ASTNode.types.BLOCK, thisObj.block)})}, {title: 'null to Workspace Marker move', class: Blockly.Events.MarkerMove, getArgs: (thisObj) => [null, true, null, ASTNode.createWorkspaceNode(thisObj.workspace, new Blockly.utils.Coordinate(0, 0))], - getExpectedJson: (thisObj) => ({type: 'marker_move', - isCursor: true, blockId: null, oldNode: null, + getExpectedJson: (thisObj) => ({type: 'marker_move', group: '', + isCursor: true, blockId: undefined, oldNode: undefined, newNode: ASTNode.createWorkspaceNode(thisObj.workspace, new Blockly.utils.Coordinate(0, 0))})}, {title: 'Workspace to Block Marker move', @@ -392,7 +391,7 @@ suite('Events', function() { ASTNode.createWorkspaceNode(thisObj.workspace, new Blockly.utils.Coordinate(0, 0)), new ASTNode(ASTNode.types.BLOCK, thisObj.block)], - getExpectedJson: (thisObj) => ({type: 'marker_move', + getExpectedJson: (thisObj) => ({type: 'marker_move', group: '', isCursor: true, blockId: thisObj.block.id, oldNode: ASTNode.createWorkspaceNode(thisObj.workspace, new Blockly.utils.Coordinate(0, 0)), @@ -406,40 +405,39 @@ suite('Events', function() { new Blockly.utils.Coordinate(0, 0))]}, {title: 'Selected', class: Blockly.Events.Selected, getArgs: (thisObj) => [null, thisObj.block.id, thisObj.workspace.id], - getExpectedJson: (thisObj) => ({type: 'selected', oldElementId: null, + getExpectedJson: (thisObj) => ({type: 'selected', group: '', newElementId: thisObj.block.id})}, {title: 'Selected (deselect)', class: Blockly.Events.Selected, getArgs: (thisObj) => [thisObj.block.id, null, thisObj.workspace.id], - getExpectedJson: (thisObj) => ({type: 'selected', - oldElementId: thisObj.block.id, newElementId: null})}, + getExpectedJson: (thisObj) => ({type: 'selected', group: '', + oldElementId: thisObj.block.id})}, {title: 'Theme Change', class: Blockly.Events.ThemeChange, getArgs: (thisObj) => ['classic', thisObj.workspace.id], - getExpectedJson: () => ({type: 'theme_change', themeName: 'classic'})}, + getExpectedJson: () => ({type: 'theme_change', group: '', themeName: 'classic'})}, {title: 'Toolbox item select', class: Blockly.Events.ToolboxItemSelect, getArgs: (thisObj) => ['Math', 'Loops', thisObj.workspace.id], - getExpectedJson: () => ({type: 'toolbox_item_select', oldItem: 'Math', + getExpectedJson: () => ({type: 'toolbox_item_select', group: '', oldItem: 'Math', newItem: 'Loops'})}, {title: 'Toolbox item select (no previous)', class: Blockly.Events.ToolboxItemSelect, getArgs: (thisObj) => [null, 'Loops', thisObj.workspace.id], - getExpectedJson: () => ({type: 'toolbox_item_select', oldItem: null, + getExpectedJson: () => ({type: 'toolbox_item_select', group: '', newItem: 'Loops'})}, {title: 'Toolbox item select (deselect)', class: Blockly.Events.ToolboxItemSelect, getArgs: (thisObj) => ['Math', null, thisObj.workspace.id], - getExpectedJson: () => ({type: 'toolbox_item_select', oldItem: 'Math', - newItem: null})}, + getExpectedJson: () => ({type: 'toolbox_item_select', group: '', oldItem: 'Math'})}, {title: 'Trashcan open', class: Blockly.Events.TrashcanOpen, getArgs: (thisObj) => [true, thisObj.workspace.id], - getExpectedJson: () => ({type: 'trashcan_open', isOpen: true})}, + getExpectedJson: () => ({type: 'trashcan_open', group: '', isOpen: true})}, {title: 'Viewport change', class: Blockly.Events.ViewportChange, getArgs: (thisObj) => [2.666, 1.333, 1.2, thisObj.workspace.id, 1], - getExpectedJson: () => ({type: 'viewport_change', viewTop: 2.666, + getExpectedJson: () => ({type: 'viewport_change', group: '', viewTop: 2.666, viewLeft: 1.333, scale: 1.2, oldScale: 1})}, {title: 'Viewport change (0,0)', class: Blockly.Events.ViewportChange, getArgs: (thisObj) => [0, 0, 1.2, thisObj.workspace.id, 1], - getExpectedJson: () => ({type: 'viewport_change', viewTop: 0, + getExpectedJson: () => ({type: 'viewport_change', group: '', viewTop: 0, viewLeft: 0, scale: 1.2, oldScale: 1})}, ]; const blockEventTestCases = [ @@ -449,6 +447,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.block, 'collapsed', null, false, true], getExpectedJson: (thisObj) => ({ type: 'change', + group: '', blockId: thisObj.block.id, element: 'collapsed', oldValue: false, @@ -461,6 +460,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.block], getExpectedJson: (thisObj) => ({ type: 'create', + group: '', blockId: thisObj.block.id, xml: '' + @@ -480,6 +480,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.shadowBlock], getExpectedJson: (thisObj) => ({ type: 'create', + group: '', blockId: thisObj.shadowBlock.id, xml: '' + @@ -500,6 +501,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.block], getExpectedJson: (thisObj) => ({ type: 'delete', + group: '', blockId: thisObj.block.id, oldXml: '' + @@ -520,6 +522,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.shadowBlock], getExpectedJson: (thisObj) => ({ type: 'delete', + group: '', blockId: thisObj.shadowBlock.id, oldXml: '' + @@ -542,6 +545,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.block], getExpectedJson: (thisObj) => ({ type: 'move', + group: '', blockId: thisObj.block.id, }), }, @@ -551,6 +555,7 @@ suite('Events', function() { getArgs: (thisObj) => [thisObj.shadowBlock], getExpectedJson: (thisObj) => ({ type: 'move', + group: '', blockId: thisObj.shadowBlock.id, recordUndo: false, }), @@ -559,29 +564,25 @@ suite('Events', function() { const workspaceEventTestCases = [ {title: 'Finished Loading', class: Blockly.Events.FinishedLoading, getArgs: (thisObj) => [thisObj.workspace], - getExpectedJson: (thisObj) => ({type: 'finished_loading', + getExpectedJson: (thisObj) => ({type: 'finished_loading', group: '', workspaceId: thisObj.workspace.id})}, ]; const workspaceCommentEventTestCases = [ {title: 'Comment change', class: Blockly.Events.CommentChange, getArgs: (thisObj) => [thisObj.comment, 'bar', 'foo'], - getExpectedJson: (thisObj) => ({type: 'comment_change', + getExpectedJson: (thisObj) => ({type: 'comment_change', group: '', commentId: thisObj.comment.id, oldContents: 'bar', newContents: 'foo'})}, {title: 'Comment create', class: Blockly.Events.CommentCreate, getArgs: (thisObj) => [thisObj.comment], - getExpectedJson: (thisObj) => ({type: 'comment_create', + getExpectedJson: (thisObj) => ({type: 'comment_create', group: '', commentId: thisObj.comment.id, xml: Blockly.Xml.domToText(thisObj.comment.toXmlWithXY())})}, {title: 'Comment delete', class: Blockly.Events.CommentDelete, getArgs: (thisObj) => [thisObj.comment], - getExpectedJson: (thisObj) => ({type: 'comment_delete', + getExpectedJson: (thisObj) => ({type: 'comment_delete', group: '', commentId: thisObj.comment.id})}, // TODO(#4577) Test serialization of move event coordinate properties. - {title: 'Comment move', class: Blockly.Events.CommentMove, - getArgs: (thisObj) => [thisObj.comment], - getExpectedJson: (thisObj) => ({type: 'comment_move', - commentId: thisObj.comment.id, oldCoordinate: '0,0'})}, ]; const testSuites = [ {title: 'Variable events', testCases: variableEventTestCases, @@ -670,7 +671,7 @@ suite('Events', function() { suite('Constructors', function() { test('Var base', function() { const event = new Blockly.Events.VarBase(this.variable); - assertEventEquals(event, undefined, this.workspace.id, undefined, { + assertEventEquals(event, '', this.workspace.id, undefined, { 'varId': 'id1', 'recordUndo': true, 'group': '', @@ -997,10 +998,6 @@ suite('Events', function() { this.eventsFireSpy, 0, Blockly.Events.BlockDelete, {oldXml: expectedOldXml, group: ''}, workspaceSvg.id, expectedId); - assertNthCallEventArgEquals( - changeListenerSpy, 0, Blockly.Events.BlockDelete, - {oldXml: expectedOldXml, group: ''}, - workspaceSvg.id, expectedId); // Expect the workspace to not have a variable with ID 'test_block_id'. chai.assert.isNull(this.workspace.getVariableById(TEST_BLOCK_ID)); diff --git a/tests/mocha/field_angle_test.js b/tests/mocha/field_angle_test.js index 172b0eeba..d23acd80e 100644 --- a/tests/mocha/field_angle_test.js +++ b/tests/mocha/field_angle_test.js @@ -323,7 +323,7 @@ suite('Angle Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldAngle(value); diff --git a/tests/mocha/field_checkbox_test.js b/tests/mocha/field_checkbox_test.js index 60a95430c..771ce6627 100644 --- a/tests/mocha/field_checkbox_test.js +++ b/tests/mocha/field_checkbox_test.js @@ -217,7 +217,7 @@ suite('Checkbox Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldCheckbox(value); diff --git a/tests/mocha/field_colour_test.js b/tests/mocha/field_colour_test.js index bf7c00f1a..65d4a9d2c 100644 --- a/tests/mocha/field_colour_test.js +++ b/tests/mocha/field_colour_test.js @@ -290,7 +290,7 @@ suite('Colour Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldColour(value); diff --git a/tests/mocha/field_dropdown_test.js b/tests/mocha/field_dropdown_test.js index b16303eaf..2704ccf27 100644 --- a/tests/mocha/field_dropdown_test.js +++ b/tests/mocha/field_dropdown_test.js @@ -166,7 +166,6 @@ suite('Dropdown Fields', function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - this.assertValue = (value, field) => { const block = this.workspace.newBlock('row_block'); field.setValue(value); diff --git a/tests/mocha/field_label_serializable_test.js b/tests/mocha/field_label_serializable_test.js index 928f0aa66..77705288f 100644 --- a/tests/mocha/field_label_serializable_test.js +++ b/tests/mocha/field_label_serializable_test.js @@ -194,7 +194,7 @@ suite('Label Serializable Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldLabelSerializable(value); diff --git a/tests/mocha/field_multilineinput_test.js b/tests/mocha/field_multilineinput_test.js index 594dc863d..ecf86cdd5 100644 --- a/tests/mocha/field_multilineinput_test.js +++ b/tests/mocha/field_multilineinput_test.js @@ -172,7 +172,7 @@ suite('Multiline Input Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldMultilineInput(value); diff --git a/tests/mocha/field_number_test.js b/tests/mocha/field_number_test.js index 10176cf22..23b112c81 100644 --- a/tests/mocha/field_number_test.js +++ b/tests/mocha/field_number_test.js @@ -346,7 +346,7 @@ suite('Number Fields', function() { setup(function() { this.workspace = new Blockly.Workspace(); defineRowBlock(); - + this.assertValue = (value) => { const block = this.workspace.newBlock('row_block'); const field = new Blockly.FieldNumber(value); diff --git a/tests/mocha/field_registry_test.js b/tests/mocha/field_registry_test.js index 7c2378d39..09d4da02b 100644 --- a/tests/mocha/field_registry_test.js +++ b/tests/mocha/field_registry_test.js @@ -93,7 +93,7 @@ suite('Field Registry', function() { }; const field = Blockly.fieldRegistry.fromJson(json); - + chai.assert.isNotNull(field); chai.assert.equal(field.getValue(), 'ok'); }); diff --git a/tests/mocha/field_test.js b/tests/mocha/field_test.js index ca5cad5f5..fcd124ed2 100644 --- a/tests/mocha/field_test.js +++ b/tests/mocha/field_test.js @@ -192,13 +192,13 @@ suite('Abstract Fields', function() { const value = field.saveState(); chai.assert.equal(value, 'test value'); }); - + test('Xml implementations', function() { const field = new CustomXmlField('test value'); const value = field.saveState(); chai.assert.equal(value, 'custom value'); }); - + test('Xml super implementation', function() { const field = new CustomXmlCallSuperField('test value'); const value = field.saveState(); @@ -206,13 +206,13 @@ suite('Abstract Fields', function() { value, 'test value'); }); - + test('JSO implementations', function() { const field = new CustomJsoField('test value'); const value = field.saveState(); chai.assert.equal(value, 'custom value'); }); - + test('JSO super implementations', function() { const field = new CustomJsoCallSuperField('test value'); const value = field.saveState(); @@ -236,7 +236,7 @@ suite('Abstract Fields', function() { value, 'test value'); }); - + test('Xml implementations', function() { const field = new CustomXmlField('test value'); const element = document.createElement('field'); @@ -246,7 +246,7 @@ suite('Abstract Fields', function() { 'custom value' ); }); - + test('Xml super implementation', function() { const field = new CustomXmlCallSuperField('test value'); const element = document.createElement('field'); @@ -276,13 +276,13 @@ suite('Abstract Fields', function() { field.loadState('test value'); chai.assert.equal(field.getValue(), 'test value'); }); - + test('Xml implementations', function() { const field = new CustomXmlField(''); field.loadState('custom value'); chai.assert.equal(field.someProperty, 'custom value'); }); - + test('Xml super implementation', function() { const field = new CustomXmlCallSuperField(''); field.loadState( @@ -290,20 +290,20 @@ suite('Abstract Fields', function() { chai.assert.equal(field.getValue(), 'test value'); chai.assert.equal(field.someProperty, 'custom value'); }); - + test('JSO implementations', function() { const field = new CustomJsoField(''); field.loadState('custom value'); chai.assert.equal(field.someProperty, 'custom value'); }); - + test('JSO super implementations', function() { const field = new CustomJsoCallSuperField(''); field.loadState({default: 'test value', val: 'custom value'}); chai.assert.equal(field.getValue(), 'test value'); chai.assert.equal(field.someProperty, 'custom value'); }); - + test('Xml and JSO implementations', function() { const field = new CustomXmlAndJsoField(''); field.loadState('custom value'); @@ -318,14 +318,14 @@ suite('Abstract Fields', function() { Blockly.Xml.textToDom('test value')); chai.assert.equal(field.getValue(), 'test value'); }); - + test('Xml implementations', function() { const field = new CustomXmlField(''); field.fromXml( Blockly.Xml.textToDom('custom value')); chai.assert.equal(field.someProperty, 'custom value'); }); - + test('Xml super implementation', function() { const field = new CustomXmlCallSuperField(''); field.fromXml( diff --git a/tests/mocha/field_variable_test.js b/tests/mocha/field_variable_test.js index 5872f12bc..478fb1a77 100644 --- a/tests/mocha/field_variable_test.js +++ b/tests/mocha/field_variable_test.js @@ -406,7 +406,7 @@ suite('Variable Fields', function() { chai.assert.deepEqual( jso['fields'], {'VAR': {'id': 'id2', 'name': 'x', 'type': ''}}); }); - + test('Typed', function() { const block = this.workspace.newBlock('row_block'); const field = @@ -429,7 +429,7 @@ suite('Variable Fields', function() { chai.assert.isUndefined(jso['fields']['VAR']['name']); chai.assert.isUndefined(jso['fields']['VAR']['type']); }); - + test('Typed', function() { const block = this.workspace.newBlock('row_block'); const field = diff --git a/tests/mocha/generator_test.js b/tests/mocha/generator_test.js index 321d5f1cb..6a05ded2d 100644 --- a/tests/mocha/generator_test.js +++ b/tests/mocha/generator_test.js @@ -27,7 +27,7 @@ suite('Generator', function() { suite('prefix', function() { setup(function() { - this.generator = new Blockly.Generator('INTERCAL'); + this.generator = new Blockly.CodeGenerator('INTERCAL'); }); test('Nothing', function() { diff --git a/tests/mocha/gesture_test.js b/tests/mocha/gesture_test.js index 3efbb1acc..d181e620a 100644 --- a/tests/mocha/gesture_test.js +++ b/tests/mocha/gesture_test.js @@ -38,12 +38,12 @@ suite('Gesture', function() { assertEventFired(eventsFireStub, Blockly.Events.Selected, - {oldElementId: null, newElementId: block.id, type: eventUtils.SELECTED}, fieldWorkspace.id); + {newElementId: block.id, type: eventUtils.SELECTED}, fieldWorkspace.id); assertEventNotFired(eventsFireStub, Blockly.Events.Click, {type: eventUtils.CLICK}); } function getTopFlyoutBlock(flyout) { - return flyout.workspace_.topBlocks_[0]; + return flyout.workspace_.getTopBlocks(false)[0]; } setup(function() { @@ -73,8 +73,8 @@ suite('Gesture', function() { }); test('Field click - Auto close flyout', function() { - const flyout = this.workspace.flyout_; - chai.assert.exists(this.workspace.flyout_, + const flyout = this.workspace.getFlyout(true); + chai.assert.exists(flyout, 'Precondition: missing flyout'); flyout.autoClose = true; @@ -83,8 +83,8 @@ suite('Gesture', function() { }); test('Field click - Always open flyout', function() { - const flyout = this.workspace.flyout_; - chai.assert.exists(this.workspace.flyout_, + const flyout = this.workspace.getFlyout(true); + chai.assert.exists(flyout, 'Precondition: missing flyout'); flyout.autoClose = false; diff --git a/tests/mocha/index.html b/tests/mocha/index.html index 626f9acb4..ae9d7efff 100644 --- a/tests/mocha/index.html +++ b/tests/mocha/index.html @@ -92,10 +92,12 @@ 'Blockly.test.metrics', 'Blockly.test.mutator', 'Blockly.test.names', + 'Blockly.test.procedureMap', 'Blockly.test.procedures', 'Blockly.test.registry', 'Blockly.test.serialization', 'Blockly.test.shortcutRegistry', + 'Blockly.test.touch', 'Blockly.test.theme', 'Blockly.test.toolbox', 'Blockly.test.tooltip', diff --git a/tests/mocha/jso_deserialization_test.js b/tests/mocha/jso_deserialization_test.js index a476436fb..5dee84852 100644 --- a/tests/mocha/jso_deserialization_test.js +++ b/tests/mocha/jso_deserialization_test.js @@ -713,4 +713,308 @@ suite('JSO Deserialization', function() { chai.assert.equal(block.someProperty, 'some value'); }); }); + + suite('Procedures', function() { + class MockProcedureModel { + constructor(workspace, name, id) { + this.id = id ?? Blockly.utils.idGenerator.genUid(); + this.name = name; + this.parameters = []; + this.returnTypes = null; + this.enabled = true; + } + + setName(name) { + this.name = name; + return this; + } + + insertParameter(parameterModel, index) { + this.parameters.splice(index, 0, parameterModel); + return this; + } + + deleteParameter(index) { + this.parameters.splice(index, 1); + return this; + } + + setReturnTypes(types) { + this.returnTypes = types; + return this; + } + + setEnabled(enabled) { + this.enabled = enabled; + return this; + } + + getId() { + return this.id; + } + + getName() { + return this.name; + } + + getParameter(index) { + return this.parameters[index]; + } + + getParameters() { + return [...this.parameters]; + } + + getReturnTypes() { + return this.returnTypes; + } + + getEnabled() { + return this.enabled; + } + } + + class MockParameterModel { + constructor(workspace, name, id) { + this.id = id ?? Blockly.utils.idGenerator.genUid(); + this.name = name; + this.types = []; + } + + setName(name) { + this.name = name; + return this; + } + + setTypes(types) { + this.types = types; + return this; + } + + getName() { + return this.name; + } + + getTypes() { + return this.types; + } + + getId() { + return this.id; + } + } + + setup(function() { + this.procedureSerializer = new + Blockly.serialization.procedures.ProcedureSerializer( + MockProcedureModel, MockParameterModel); + this.procedureMap = this.workspace.getProcedureMap(); + }); + + teardown(function() { + this.procedureSerializer = null; + this.procedureMap = null; + }); + + suite('invariant properties', function() { + test('the id property is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const procedureModel = this.procedureMap.getProcedures()[0]; + chai.assert.isNotNull( + procedureModel, 'Expected a procedure model to exist'); + chai.assert.equal( + procedureModel.getId(), + 'test id', + 'Expected the procedure model ID to match the serialized ID'); + }); + + test('the name property is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const procedureModel = this.procedureMap.getProcedures()[0]; + chai.assert.isNotNull( + procedureModel, 'Expected a procedure model to exist'); + chai.assert.equal( + procedureModel.getName(), + 'test name', + 'Expected the procedure model name to match the serialized name'); + }); + }); + + suite('return types', function() { + test('if the return type property is null it is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': null, + }; + + this.procedureSerializer.load([jso], this.workspace); + + const procedureModel = this.procedureMap.getProcedures()[0]; + chai.assert.isNotNull( + procedureModel, 'Expected a procedure model to exist'); + chai.assert.isNull( + procedureModel.getReturnTypes(), + 'Expected the procedure model types to be null'); + }); + + test('if the return type property is an empty array it is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const procedureModel = this.procedureMap.getProcedures()[0]; + chai.assert.isNotNull( + procedureModel, 'Expected a procedure model to exist'); + chai.assert.isArray( + procedureModel.getReturnTypes(), + 'Expected the procedure model types to be an array'); + chai.assert.isEmpty( + procedureModel.getReturnTypes(), + 'Expected the procedure model types array to be empty'); + }); + + test('if the return type property is a string array it is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': ['test type 1', 'test type 2'], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const procedureModel = this.procedureMap.getProcedures()[0]; + chai.assert.isNotNull( + procedureModel, 'Expected a procedure model to exist'); + chai.assert.isArray( + procedureModel.getReturnTypes(), + 'Expected the procedure model types to be an array'); + chai.assert.deepEqual( + procedureModel.getReturnTypes(), + ['test type 1', 'test type 2'], + 'Expected the procedure model types array to be match the ' + + 'serialized array'); + }); + }); + + suite('parameters', function() { + suite('invariant properties', function() { + test('the id property is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + 'parameters': [ + { + 'id': 'test id', + 'name': 'test name', + }, + ], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const parameterModel = + this.procedureMap.getProcedures()[0].getParameters()[0]; + chai.assert.isNotNull( + parameterModel, 'Expected a parameter model to exist'); + chai.assert.equal( + parameterModel.getId(), + 'test id', + 'Expected the parameter model ID to match the serialized ID'); + }); + + test('the name property is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + 'parameters': [ + { + 'id': 'test id', + 'name': 'test name', + }, + ], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const parameterModel = + this.procedureMap.getProcedures()[0].getParameters()[0]; + chai.assert.isNotNull( + parameterModel, 'Expected a parameter model to exist'); + chai.assert.equal( + parameterModel.getName(), + 'test name', + 'Expected the parameter model name to match the serialized name'); + }); + }); + + suite('types', function() { + test('if the type property does not exist, nothing is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + 'parameters': [ + { + 'id': 'test id', + 'name': 'test name', + }, + ], + }; + + chai.assert.doesNotThrow( + () => { + this.procedureMap.getProcedures()[0].getParameters()[0]; + }, + 'Expected the deserializer to skip the non-existant type property'); + }); + + test('if the type property exists, it is assigned', function() { + const jso = { + 'id': 'test id', + 'name': 'test name', + 'returnTypes': [], + 'parameters': [ + { + 'id': 'test id', + 'name': 'test name', + 'types': ['test type 1', 'test type 2'], + }, + ], + }; + + this.procedureSerializer.load([jso], this.workspace); + + const parameterModel = + this.procedureMap.getProcedures()[0].getParameters()[0]; + chai.assert.isNotNull( + parameterModel, 'Expected a parameter model to exist'); + chai.assert.deepEqual( + parameterModel.getTypes(), + ['test type 1', 'test type 2'], + 'Expected the parameter model types to match the serialized types'); + }); + }); + }); + }); }); diff --git a/tests/mocha/jso_serialization_test.js b/tests/mocha/jso_serialization_test.js index 810f5f295..1dd86ab59 100644 --- a/tests/mocha/jso_serialization_test.js +++ b/tests/mocha/jso_serialization_test.js @@ -388,21 +388,21 @@ suite('JSO Serialization', function() { '')); return block; }; - + this.assertChild = function(blockType, inputName) { const block = this.createBlockWithChild(blockType, inputName); const jso = Blockly.serialization.blocks.save(block); this.assertInput( jso, inputName, {'block': {'type': blockType, 'id': 'id2'}}); }; - + this.assertShadow = function(blockType, inputName) { const block = this.createBlockWithShadow(blockType, inputName); const jso = Blockly.serialization.blocks.save(block); this.assertInput( jso, inputName, {'shadow': {'type': blockType, 'id': 'test'}}); }; - + this.assertOverwrittenShadow = function(blockType, inputName) { const block = this.createBlockWithShadowAndChild(blockType, inputName); @@ -428,14 +428,14 @@ suite('JSO Serialization', function() { Blockly.serialization.blocks.save(block, {addInputBlocks: false}); chai.assert.isUndefined(jso['inputs']); }; - + this.assertNoShadow = function(blockType, inputName) { const block = this.createBlockWithShadow(blockType, inputName); const jso = Blockly.serialization.blocks.save(block, {addInputBlocks: false}); chai.assert.isUndefined(jso['inputs']); }; - + this.assertNoOverwrittenShadow = function(blockType, inputName) { const block = this.createBlockWithShadowAndChild(blockType, inputName); @@ -506,11 +506,11 @@ suite('JSO Serialization', function() { test('Child', function() { this.assertChild('row_block', 'INPUT'); }); - + test('Shadow', function() { this.assertShadow('row_block', 'INPUT'); }); - + test('Overwritten shadow', function() { this.assertOverwrittenShadow('row_block', 'INPUT'); }); @@ -520,11 +520,11 @@ suite('JSO Serialization', function() { test('Child', function() { this.assertNoChild('row_block', 'INPUT'); }); - + test('Shadow', function() { this.assertNoShadow('row_block', 'INPUT'); }); - + test('Overwritten shadow', function() { this.assertNoOverwrittenShadow('row_block', 'INPUT'); }); @@ -536,11 +536,11 @@ suite('JSO Serialization', function() { test('Child', function() { this.assertChild('statement_block', 'NAME'); }); - + test('Shadow', function() { this.assertShadow('statement_block', 'NAME'); }); - + test('Overwritten shadow', function() { this.assertOverwrittenShadow('statement_block', 'NAME'); }); @@ -577,11 +577,11 @@ suite('JSO Serialization', function() { test('Child', function() { this.assertNoChild('statement_block', 'NAME'); }); - + test('Shadow', function() { this.assertNoShadow('statement_block', 'NAME'); }); - + test('Overwritten shadow', function() { this.assertNoOverwrittenShadow('statement_block', 'NAME'); }); @@ -624,14 +624,14 @@ suite('JSO Serialization', function() { chai.assert.deepInclude( jso['next'], {'block': {'type': 'stack_block', 'id': 'id2'}}); }); - + test('Shadow', function() { const block = this.createNextWithShadow(); const jso = Blockly.serialization.blocks.save(block); chai.assert.deepInclude( jso['next'], {'shadow': {'type': 'stack_block', 'id': 'test'}}); }); - + test('Overwritten shadow', function() { const block = this.createNextWithShadowAndChild(); const jso = Blockly.serialization.blocks.save(block); @@ -684,7 +684,7 @@ suite('JSO Serialization', function() { block, {addNextBlocks: false}); chai.assert.isUndefined(jso['next']); }); - + test('Shadow', function() { const block = this.createNextWithShadow(); const jso = Blockly.serialization.blocks.save( @@ -794,4 +794,205 @@ suite('JSO Serialization', function() { assertProperty(variable, 'type', 'testType'); }); }); + + suite('Procedures', function() { + class MockProcedureModel { + constructor() { + this.id = Blockly.utils.idGenerator.genUid(); + this.name = ''; + this.parameters = []; + this.returnTypes = null; + this.enabled = true; + } + + setName(name) { + this.name = name; + return this; + } + + insertParameter(parameterModel, index) { + this.parameters.splice(index, 0, parameterModel); + return this; + } + + deleteParameter(index) { + this.parameters.splice(index, 1); + return this; + } + + setReturnTypes(types) { + this.returnTypes = types; + return this; + } + + setEnabled(enabled) { + this.enabled = enabled; + return this; + } + + getId() { + return this.id; + } + + getName() { + return this.name; + } + + getParameter(index) { + return this.parameters[index]; + } + + getParameters() { + return [...this.parameters]; + } + + getReturnTypes() { + return this.returnTypes; + } + + getEnabled() { + return this.enabled; + } + } + + class MockParameterModel { + constructor(name) { + this.id = Blockly.utils.idGenerator.genUid(); + this.name = name; + this.types = []; + } + + setName(name) { + this.name = name; + return this; + } + + setTypes(types) { + this.types = types; + return this; + } + + getName() { + return this.name; + } + + getTypes() { + return this.types; + } + + getId() { + return this.id; + } + } + + setup(function() { + this.procedureMap = this.workspace.getProcedureMap(); + }); + + teardown(function() { + this.procedureMap = null; + }); + + suite('invariant properties', function() { + test('the state always has an id property', function() { + const procedureModel = new MockProcedureModel(); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'id', procedureModel.getId()); + }); + + test('if the name has not been set, name is an empty string', function() { + const procedureModel = new MockProcedureModel(); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'name', ''); + }); + + test('if the name has been set, name is the string', function() { + const procedureModel = new MockProcedureModel().setName('testName'); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'name', 'testName'); + }); + }); + + suite('return types', function() { + test('if the procedure does not return, returnTypes is null', function() { + const procedureModel = new MockProcedureModel(); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'returnTypes', null); + }); + + test( + 'if the procedure has no return type, returnTypes is an empty array', + function() { + const procedureModel = new MockProcedureModel().setReturnTypes([]); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'returnTypes', []); + }); + + test( + 'if the procedure has return types, returnTypes is the array', + function() { + const procedureModel = new MockProcedureModel() + .setReturnTypes(['a type']); + this.procedureMap.add(procedureModel); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const procedure = jso['procedures'][0]; + assertProperty(procedure, 'returnTypes', ['a type']); + }); + }); + + suite('parameters', function() { + suite('invariant properties', function() { + test('the state always has an id property', function() { + const parameterModel = new MockParameterModel('testparam'); + this.procedureMap.add( + new MockProcedureModel().insertParameter(parameterModel, 0)); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const parameter = jso['procedures'][0]['parameters'][0]; + assertProperty(parameter, 'id', parameterModel.getId()); + }); + + test('the state always has a name property', function() { + const parameterModel = new MockParameterModel('testparam'); + this.procedureMap.add( + new MockProcedureModel().insertParameter(parameterModel, 0)); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const parameter = jso['procedures'][0]['parameters'][0]; + assertProperty(parameter, 'name', 'testparam'); + }); + }); + + suite('types', function() { + test( + 'if the parameter has no type, there is no type property', + function() { + const parameterModel = new MockParameterModel('testparam'); + this.procedureMap.add( + new MockProcedureModel().insertParameter(parameterModel, 0)); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const parameter = jso['procedures'][0]['parameters'][0]; + assertNoProperty(parameter, 'types'); + }); + + test('if the parameter has types, types is an array', function() { + const parameterModel = + new MockParameterModel('testparam').setTypes(['a type']); + this.procedureMap.add( + new MockProcedureModel().insertParameter(parameterModel, 0)); + const jso = Blockly.serialization.workspaces.save(this.workspace); + const parameter = jso['procedures'][0]['parameters'][0]; + assertProperty(parameter, 'types', ['a type']); + }); + }); + }); + }); }); diff --git a/tests/mocha/procedure_map_test.js b/tests/mocha/procedure_map_test.js new file mode 100644 index 000000000..e3339a1cf --- /dev/null +++ b/tests/mocha/procedure_map_test.js @@ -0,0 +1,267 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {sharedTestSetup, sharedTestTeardown} from './test_helpers/setup_teardown.js'; + +goog.declareModuleId('Blockly.test.procedureMap'); + +suite('Procedure Map', function() { + setup(function() { + sharedTestSetup.call(this); + this.workspace = new Blockly.Workspace(); + this.procedureMap = this.workspace.getProcedureMap(); + }); + + teardown(function() { + sharedTestTeardown.call(this); + }); + + suite('triggering block updates', function() { + setup(function() { + Blockly.Blocks['procedure_mock'] = { + init: function() { }, + doProcedureUpdate: function() { }, + }; + + this.procedureBlock = this.workspace.newBlock('procedure_mock'); + + this.updateSpy = sinon.spy(this.procedureBlock, 'doProcedureUpdate'); + }); + + teardown(function() { + delete Blockly.Blocks['procedure_mock']; + }); + + suite('procedure map updates', function() { + test('inserting a procedure does not trigger an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.set(procedureModel.getId(), procedureModel); + + chai.assert.isFalse( + this.updateSpy.called, 'Expected no update to be triggered'); + }); + + test('adding a procedure does not trigger an update', function() { + this.procedureMap.add( + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name')); + + chai.assert.isFalse( + this.updateSpy.called, 'Expected no update to be triggered'); + }); + + test('deleting a procedure triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.add(procedureModel); + + this.procedureMap.delete(procedureModel.getId()); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + }); + + suite('procedure model updates', function() { + test('setting the name triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.add(procedureModel); + + procedureModel.setName('new name'); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('setting the return type triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.add(procedureModel); + + procedureModel.setReturnTypes([]); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('removing the return type triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name') + .setReturnTypes([]); + this.procedureMap.add(procedureModel); + this.updateSpy.resetHistory(); + + procedureModel.setReturnTypes(null); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('disabling the procedure triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.add(procedureModel); + + procedureModel.setEnabled(false); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('enabling the procedure triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name') + .setEnabled(false); + this.procedureMap.add(procedureModel); + this.updateSpy.resetHistory(); + + procedureModel.setEnabled(true); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('inserting a parameter triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name'); + this.procedureMap.add(procedureModel); + + procedureModel.insertParameter( + new Blockly.procedures.ObservableParameterModel(this.workspace)); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('deleting a parameter triggers an update', function() { + const procedureModel = + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name') + .insertParameter( + new Blockly.procedures.ObservableParameterModel( + this.workspace)); + this.procedureMap.add(procedureModel); + this.updateSpy.resetHistory(); + + procedureModel.deleteParameter(0); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + }); + + suite('parameter model updates', function() { + test('setting the name triggers an update', function() { + const parameterModel = + new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + this.procedureMap.add( + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name') + .insertParameter(parameterModel)); + this.updateSpy.resetHistory(); + + parameterModel.setName('test2'); + + chai.assert.isTrue( + this.updateSpy.calledOnce, 'Expected an update to be triggered'); + }); + + test('modifying the variable model does not trigger an update', function() { + const parameterModel = + new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + this.procedureMap.add( + new Blockly.procedures.ObservableProcedureModel( + this.workspace, 'test name') + .insertParameter(parameterModel)); + this.updateSpy.resetHistory(); + + const variableModel = parameterModel.getVariableModel(); + variableModel.name = 'some name'; + variableModel.type = 'some type'; + + chai.assert.isFalse( + this.updateSpy.called, 'Expected no update to be triggered'); + }); + }); + }); + + suite('event firing', function() { + // TBA after the procedure map is implemented + }); + + suite('backing variable to parameters', function() { + test( + 'construction references an existing variable if available', + function() { + const variable = this.workspace.createVariable('test1'); + const param = new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + + chai.assert.equal( + variable, + param.getVariableModel(), + 'Expected the parameter model to reference the existing variable'); + }); + + test('construction creates a variable if none exists', function() { + const param = new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + + chai.assert.equal( + this.workspace.getVariable('test1'), + param.getVariableModel(), + 'Expected the parameter model to create a variable'); + }); + + test('setName references an existing variable if available', function() { + const variable = this.workspace.createVariable('test2'); + const param = new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + + param.setName('test2'); + + chai.assert.equal( + variable, + param.getVariableModel(), + 'Expected the parameter model to reference the existing variable'); + }); + + test('setName creates a variable if none exits', function() { + const param = new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + + param.setName('test2'); + + chai.assert.equal( + this.workspace.getVariable('test2'), + param.getVariableModel(), + 'Expected the parameter model to create a variable'); + }); + + test('setTypes is unimplemented', function() { + const param = new Blockly.procedures.ObservableParameterModel( + this.workspace, 'test1'); + + chai.assert.throws( + () => { + param.setTypes(['some', 'types']); + }, + 'The built-in ParameterModel does not support typing'); + }); + }); +}); diff --git a/tests/mocha/registry_test.js b/tests/mocha/registry_test.js index b6bb66086..ba83bd351 100644 --- a/tests/mocha/registry_test.js +++ b/tests/mocha/registry_test.js @@ -26,7 +26,7 @@ suite('Registry', function() { Blockly.registry.unregister('test', 'test_name'); } }); - + suite('Registration', function() { test('Simple', function() { Blockly.registry.register('test', 'test_name', TestClass); diff --git a/tests/mocha/run_mocha_tests_in_browser.js b/tests/mocha/run_mocha_tests_in_browser.js index 217c9992b..f2d7f4a8b 100644 --- a/tests/mocha/run_mocha_tests_in_browser.js +++ b/tests/mocha/run_mocha_tests_in_browser.js @@ -8,6 +8,7 @@ * @fileoverview Node.js script to run Mocha tests in Chrome, via webdriver. */ var webdriverio = require('webdriverio'); +var {posixPath} = require('../../scripts/helpers'); module.exports = runMochaTestsInBrowser; @@ -37,14 +38,14 @@ async function runMochaTestsInBrowser() { }; } else { // --disable-gpu is needed to prevent Chrome from hanging on Linux with - // NVIDIA drivers older than v295.20. See + // NVIDIA drivers older than v295.20. See // https://github.com/google/blockly/issues/5345 for details. options.capabilities['goog:chromeOptions'] = { args: ['--allow-file-access-from-files', '--disable-gpu'] }; } - var url = 'file://' + __dirname + '/index.html'; + var url = 'file://' + posixPath(__dirname) + '/index.html'; console.log('Starting webdriverio...'); const browser = await webdriverio.remote(options); console.log('Initialized.\nLoading url: ' + url); diff --git a/tests/mocha/shortcut_registry_test.js b/tests/mocha/shortcut_registry_test.js index dea01e22a..916dc53fd 100644 --- a/tests/mocha/shortcut_registry_test.js +++ b/tests/mocha/shortcut_registry_test.js @@ -39,7 +39,7 @@ suite('Keyboard Shortcut Registry Test', function() { }; chai.assert.throws( shouldThrow, Error, - 'Shortcut with name "test_shortcut" already exists.'); + 'Shortcut named "test_shortcut" already exists.'); }); test( 'Registers shortcut with same name opt_allowOverrides=true', @@ -104,7 +104,7 @@ suite('Keyboard Shortcut Registry Test', function() { const registry = this.registry; chai.assert.isFalse(registry.unregister('test')); - sinon.assert.calledOnceWithExactly(consoleStub, 'Keyboard shortcut with name "test" not found.'); + sinon.assert.calledOnceWithExactly(consoleStub, 'Keyboard shortcut named "test" not found.'); }); test('Unregistering a shortcut with key mappings', function() { const testShortcut = {'name': 'test_shortcut'}; @@ -173,7 +173,7 @@ suite('Keyboard Shortcut Registry Test', function() { }; chai.assert.throws( shouldThrow, Error, - 'Shortcut with name "test_shortcut" collides with shortcuts test_shortcut_2'); + 'Shortcut named "test_shortcut" collides with shortcuts "test_shortcut_2"'); }); }); @@ -216,7 +216,7 @@ suite('Keyboard Shortcut Registry Test', function() { chai.assert.isFalse(isRemoved); sinon.assert.calledOnceWithExactly( consoleStub, - 'No keyboard shortcut with name "test_shortcut" registered with key code "keyCode"'); + 'No keyboard shortcut named "test_shortcut" registered with key code "keyCode"'); }); test( 'Removes a key map that does not exist from empty key mapping opt_quiet=false', @@ -229,7 +229,7 @@ suite('Keyboard Shortcut Registry Test', function() { chai.assert.isFalse(isRemoved); sinon.assert.calledOnceWithExactly( consoleStub, - 'No keyboard shortcut with name "test_shortcut" registered with key code "keyCode"'); + 'No keyboard shortcut named "test_shortcut" registered with key code "keyCode"'); }); }); diff --git a/tests/mocha/test_helpers/block_definitions.js b/tests/mocha/test_helpers/block_definitions.js index 213075a74..7d05523c2 100644 --- a/tests/mocha/test_helpers/block_definitions.js +++ b/tests/mocha/test_helpers/block_definitions.js @@ -167,6 +167,7 @@ export function createTestBlock() { }, 'renameVarById': Blockly.Block.prototype.renameVarById, 'updateVarName': Blockly.Block.prototype.updateVarName, + 'isDeadOrDying': () => false, }; } diff --git a/tests/mocha/test_helpers/code_generation.js b/tests/mocha/test_helpers/code_generation.js index 82358da63..10344957b 100644 --- a/tests/mocha/test_helpers/code_generation.js +++ b/tests/mocha/test_helpers/code_generation.js @@ -55,7 +55,7 @@ export class CodeGenerationTestSuite { */ constructor() { /** - * @type {!Blockly.Generator} The generator to use for running test cases. + * @type {!Blockly.CodeGenerator} The generator to use for running test cases. */ this.generator; } @@ -64,7 +64,7 @@ export class CodeGenerationTestSuite { /** * Returns mocha test callback for code generation based on provided * generator. - * @param {!Blockly.Generator} generator The generator to use in test. + * @param {!Blockly.CodeGenerator} generator The generator to use in test. * @return {function(!CodeGenerationTestCase):!Function} Function that * returns mocha test callback based on test case. * @private diff --git a/tests/mocha/test_helpers/setup_teardown.js b/tests/mocha/test_helpers/setup_teardown.js index 8d318af4d..669c6564b 100644 --- a/tests/mocha/test_helpers/setup_teardown.js +++ b/tests/mocha/test_helpers/setup_teardown.js @@ -179,7 +179,7 @@ export function sharedTestTeardown() { } /** - * Creates stub for Blockly.utils.genUid that returns the provided id or ids. + * Creates stub for Blockly.utils.idGenerator.genUid that returns the provided id or ids. * Recommended to also assert that the stub is called the expected number of * times. * @param {string|!Array} returnIds The return values to use for the diff --git a/tests/mocha/test_helpers/workspace.js b/tests/mocha/test_helpers/workspace.js index 21ae2db67..a51d5b02e 100644 --- a/tests/mocha/test_helpers/workspace.js +++ b/tests/mocha/test_helpers/workspace.js @@ -37,14 +37,14 @@ export function testAWorkspace() { }); function assertBlockVarModelName(workspace, blockIndex, name) { - const block = workspace.topBlocks_[blockIndex]; - chai.assert.exists(block, 'Block at topBlocks_[' + blockIndex + ']'); + const block = workspace.getTopBlocks(false)[blockIndex]; + chai.assert.exists(block, 'Block at topBlocks[' + blockIndex + ']'); const varModel = block.getVarModels()[0]; chai.assert.exists(varModel, - 'VariableModel for block at topBlocks_[' + blockIndex + ']'); + 'VariableModel for block at topBlocks[' + blockIndex + ']'); const blockVarName = varModel.name; chai.assert.equal(blockVarName, name, - 'VariableModel name for block at topBlocks_[' + blockIndex + ']'); + 'VariableModel name for block at topBlocks[' + blockIndex + ']'); } function createVarBlocksNoEvents(workspace, ids) { @@ -68,8 +68,8 @@ export function testAWorkspace() { this.workspace.newBlock(''); this.workspace.clear(); - chai.assert.equal(this.workspace.topBlocks_.length, 0); - const varMapLength = this.workspace.variableMap_.variableMap.size; + chai.assert.equal(this.workspace.getTopBlocks(false).length, 0); + const varMapLength = this.workspace.getVariableMap().variableMap.size; chai.assert.equal(varMapLength, 0); }); @@ -78,8 +78,8 @@ export function testAWorkspace() { this.workspace.newBlock(''); this.workspace.clear(); - chai.assert.equal(this.workspace.topBlocks_.length, 0); - const varMapLength = this.workspace.variableMap_.variableMap.size; + chai.assert.equal(this.workspace.getTopBlocks(false).length, 0); + const varMapLength = this.workspace.getVariableMap().variableMap.size; chai.assert.equal(varMapLength, 0); }); }); @@ -1272,7 +1272,7 @@ export function testAWorkspace() { this.workspace.undo(true); // Expect that both variables are deleted - chai.assert.equal(this.workspace.topBlocks_.length, 0); + chai.assert.equal(this.workspace.getTopBlocks(false).length, 0); chai.assert.isNull(this.workspace.getVariableById('id1')); chai.assert.isNull(this.workspace.getVariableById('id2')); @@ -1338,12 +1338,12 @@ export function testAWorkspace() { // Redo delete this.workspace.undo(true); - chai.assert.equal(this.workspace.topBlocks_.length, 0); + chai.assert.equal(this.workspace.getTopBlocks(false).length, 0); chai.assert.isNull(this.workspace.getVariableById('id1')); // Redo delete, nothing should happen this.workspace.undo(true); - chai.assert.equal(this.workspace.topBlocks_.length, 0); + chai.assert.equal(this.workspace.getTopBlocks(false).length, 0); chai.assert.isNull(this.workspace.getVariableById('id1')); }); }); diff --git a/tests/mocha/toolbox_test.js b/tests/mocha/toolbox_test.js index 40007651c..45dfe0b85 100644 --- a/tests/mocha/toolbox_test.js +++ b/tests/mocha/toolbox_test.js @@ -130,6 +130,26 @@ suite('Toolbox', function() { this.toolbox.render(jsonDef); chai.assert.lengthOf(this.toolbox.contents_, 1); }); + test('multiple icon classes can be applied', function() { + const jsonDef = {'contents': [ + { + "kind": "category", + "cssConfig": { + "icon": "customIcon customIconEvents", + }, + "contents": [ + { + "kind": "block", + "blockxml": 'FirstCategory-FirstBlock', + }, + ], + }, + ]}; + chai.assert.doesNotThrow(() => { + this.toolbox.render(jsonDef); + }); + chai.assert.lengthOf(this.toolbox.contents_, 1); + }); }); suite('onClick_', function() { diff --git a/tests/mocha/touch_test.js b/tests/mocha/touch_test.js new file mode 100644 index 000000000..77f4fb841 --- /dev/null +++ b/tests/mocha/touch_test.js @@ -0,0 +1,95 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + + goog.declareModuleId('Blockly.test.touch'); + + import {sharedTestSetup, sharedTestTeardown} from './test_helpers/setup_teardown.js'; + + suite('Touch', function() { + setup(function() { + sharedTestSetup.call(this); + }); + + teardown(function() { + Blockly.Touch.clearTouchIdentifier(); + sharedTestTeardown.call(this); + }); + + suite('shouldHandleTouch', function() { + test('handles mousedown event', function() { + const mouseEvent = new MouseEvent('mousedown'); + chai.assert.isTrue(Blockly.Touch.shouldHandleEvent(mouseEvent)); + }); + + test('handles multiple mousedown events', function() { + const mouseEvent1 = new MouseEvent('mousedown'); + const mouseEvent2 = new MouseEvent('mousedown'); + Blockly.Touch.shouldHandleEvent(mouseEvent1); + chai.assert.isTrue(Blockly.Touch.shouldHandleEvent(mouseEvent2)); + }); + + test('does not handle mouseup if not tracking touch', function() { + const mouseEvent = new MouseEvent('mouseup'); + chai.assert.isFalse(Blockly.Touch.shouldHandleEvent(mouseEvent)); + }); + + test('handles mouseup if already tracking a touch', function() { + const mousedown = new MouseEvent('mousedown'); + const mouseup = new MouseEvent('mouseup'); + // Register the mousedown event first + Blockly.Touch.shouldHandleEvent(mousedown); + chai.assert.isTrue(Blockly.Touch.shouldHandleEvent(mouseup)); + }); + + test('handles pointerdown if this is a new touch', function() { + const pointerdown = new PointerEvent('pointerdown', {pointerId: 1, pointerType: 'touch'}); + chai.assert.isTrue(Blockly.Touch.shouldHandleEvent(pointerdown)); + }); + + test('does not handle pointerdown if part of a different touch', function() { + const pointerdown1 = new PointerEvent('pointerdown', {pointerId: 1, pointerType: 'touch'}); + const pointerdown2 = new PointerEvent('pointerdown', {pointerId: 2, pointerType: 'touch'}); + Blockly.Touch.shouldHandleEvent(pointerdown1); + chai.assert.isFalse(Blockly.Touch.shouldHandleEvent(pointerdown2)); + }); + + test('does not handle pointerdown after a mousedown', function() { + const mouseEvent = new MouseEvent('mousedown'); + const pointerdown = new PointerEvent('pointerdown', {pointerId: 1, pointerType: 'touch'}); + Blockly.Touch.shouldHandleEvent(mouseEvent); + chai.assert.isFalse(Blockly.Touch.shouldHandleEvent(pointerdown)); + }); + + test('does not handle pointerup if not tracking touch', function() { + const pointerup = new PointerEvent('pointerup', {pointerId: 1, pointerType: 'touch'}); + chai.assert.isFalse(Blockly.Touch.shouldHandleEvent(pointerup)); + }); + + test('handles pointerup if part of existing touch', function() { + const pointerdown = new PointerEvent('pointerdown', {pointerId: 1, pointerType: 'touch'}); + const pointerup = new PointerEvent('pointerdown', {pointerId: 1, pointerType: 'touch'}); + Blockly.Touch.shouldHandleEvent(pointerdown); + chai.assert.isTrue(Blockly.Touch.shouldHandleEvent(pointerup)); + }); + }); + + suite('getTouchIdentifierFromEvent', function() { + test('is mouse for MouseEvents', function() { + const mousedown = new MouseEvent('mousedown'); + chai.assert.equal(Blockly.Touch.getTouchIdentifierFromEvent(mousedown), 'mouse'); + }); + + test('is pointerId for mouse PointerEvents', function() { + const pointerdown = new PointerEvent('pointerdown', {pointerId: 7, pointerType: 'mouse'}); + chai.assert.equal(Blockly.Touch.getTouchIdentifierFromEvent(pointerdown), 7); + }); + + test('is pointerId for touch PointerEvents', function() { + const pointerdown = new PointerEvent('pointerdown', {pointerId: 42, pointerType: 'touch'}); + chai.assert.equal(Blockly.Touch.getTouchIdentifierFromEvent(pointerdown), 42); + }); + }); + }); diff --git a/tests/mocha/trashcan_test.js b/tests/mocha/trashcan_test.js index f52a9b55d..5c2f3c3be 100644 --- a/tests/mocha/trashcan_test.js +++ b/tests/mocha/trashcan_test.js @@ -83,7 +83,7 @@ suite("Trashcan", function() { this.eventsFireStub, Blockly.Events.TrashcanOpen, {type: eventUtils.CLICK}); assertEventFired( this.eventsFireStub, Blockly.Events.Click, {targetType: 'workspace', type: eventUtils.CLICK}, - this.workspace.id, null); + this.workspace.id, undefined); }); test("Click with contents - fires trashcanOpen", function() { fireDeleteEvent(this.workspace, ''); @@ -115,7 +115,7 @@ suite("Trashcan", function() { {isOpen: false, type: eventUtils.TRASHCAN_OPEN}, this.workspace.id); assertEventFired( this.eventsFireStub, Blockly.Events.Click, {targetType: 'workspace', type: eventUtils.CLICK}, - this.workspace.id, null); + this.workspace.id, undefined); }); }); suite("Unique Contents", function() { diff --git a/tests/mocha/widget_div_test.js b/tests/mocha/widget_div_test.js index 864f4c09d..b7c51f39c 100644 --- a/tests/mocha/widget_div_test.js +++ b/tests/mocha/widget_div_test.js @@ -64,7 +64,7 @@ suite('WidgetDiv', function() { this.testWidgetPosition( anchorBBox, false, expectedX, expectedY, this.widgetSize.height); }); - + test('topConflict', function() { // Anchor close to the top. const anchorBBox = @@ -75,7 +75,7 @@ suite('WidgetDiv', function() { this.testWidgetPosition( anchorBBox, false, expectedX, expectedY, this.widgetSize.height); }); - + test('bottomConflict', function() { // Anchor placed close to the bottom. const anchorBBox = @@ -86,7 +86,7 @@ suite('WidgetDiv', function() { this.testWidgetPosition( anchorBBox, false, expectedX, expectedY, this.widgetSize.height); }); - + test('leftConflict', function() { // Anchor placed close to the left side. const anchorBBox = @@ -97,7 +97,7 @@ suite('WidgetDiv', function() { this.testWidgetPosition( anchorBBox, false, expectedX, expectedY, this.widgetSize.height); }); - + test('rightConflict', function() { // Anchor placed close to the right side. const anchorBBox = diff --git a/tests/mocha/zoom_controls_test.js b/tests/mocha/zoom_controls_test.js index 5bbda917e..5154fd704 100644 --- a/tests/mocha/zoom_controls_test.js +++ b/tests/mocha/zoom_controls_test.js @@ -34,7 +34,7 @@ suite("Zoom Controls", function() { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, null); + {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, undefined); assertEventNotFired( this.eventsFireStub, Blockly.Events.Click, {targetType: 'workspace', type: eventUtils.CLICK}); @@ -45,7 +45,7 @@ suite("Zoom Controls", function() { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, null); + {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, undefined); assertEventNotFired( this.eventsFireStub, Blockly.Events.Click, {targetType: 'workspace', type: eventUtils.CLICK}); @@ -56,7 +56,7 @@ suite("Zoom Controls", function() { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, null); + {targetType: 'zoom_controls', type: eventUtils.CLICK}, this.workspace.id, undefined); assertEventNotFired( this.eventsFireStub, Blockly.Events.Click, {targetType: 'workspace', type: eventUtils.CLICK}); diff --git a/tests/playground.html b/tests/playground.html index 90a727753..ef8d7bdf9 100644 --- a/tests/playground.html +++ b/tests/playground.html @@ -436,7 +436,7 @@ function addEventHandlers() { document.getElementById('hide') .addEventListener('click', function() { workspace.setVisible(false); }); } - + // Call start(). Because this + + + + + + +

Shared Procedures Playground

+ +
+
+ + diff --git a/tests/scripts/check_metadata.sh b/tests/scripts/check_metadata.sh index d56f6a0f5..d12b41c02 100755 --- a/tests/scripts/check_metadata.sh +++ b/tests/scripts/check_metadata.sh @@ -31,7 +31,8 @@ readonly RELEASE_DIR='dist' # Q4 2021 7.20211209.0 929665 # Q2 2022 8.0.0 928056 # Q3 2022 8.0.0 1040413 (mid-quarter typescript conversion) -readonly BLOCKLY_SIZE_EXPECTED=1040413 +# Q4 2022 8.0.0 870104 +readonly BLOCKLY_SIZE_EXPECTED=870104 # Size of blocks_compressed.js # Q2 2019 2.20190722.0 75618 @@ -48,7 +49,8 @@ readonly BLOCKLY_SIZE_EXPECTED=1040413 # Q4 2021 7.20211209.0 86966 # Q2 2022 8.0.0 90769 # Q3 2022 8.0.0 102176 (mid-quarter typescript conversion) -readonly BLOCKS_SIZE_EXPECTED=102176 +# Q4 2022 8.0.0 102213 +readonly BLOCKS_SIZE_EXPECTED=102213 # Size of blockly_compressed.js.gz # Q2 2019 2.20190722.0 180925 @@ -66,7 +68,8 @@ readonly BLOCKS_SIZE_EXPECTED=102176 # Q4 2021 7.20211209.0 171759 # Q2 2022 8.0.0 173997 # Q3 2022 8.0.0 185766 (mid-quarter typescript conversion) -readonly BLOCKLY_GZ_SIZE_EXPECTED=185766 +# Q4 2022 8.0.0 175140 +readonly BLOCKLY_GZ_SIZE_EXPECTED=175140 # Size of blocks_compressed.js.gz # Q2 2019 2.20190722.0 14552 @@ -83,7 +86,8 @@ readonly BLOCKLY_GZ_SIZE_EXPECTED=185766 # Q4 2021 7.20211209.0 15760 # Q2 2022 8.0.0 16192 # Q3 2022 8.0.0 17016 (mid-quarter typescript conversion) -readonly BLOCKS_GZ_SIZE_EXPECTED=17016 +# Q4 2022 8.0.0 17188 +readonly BLOCKS_GZ_SIZE_EXPECTED=17188 # ANSI colors readonly BOLD_GREEN='\033[1;32m' diff --git a/tests/scripts/run_generators.sh b/tests/scripts/run_generators.sh deleted file mode 100755 index 8c461f8e0..000000000 --- a/tests/scripts/run_generators.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -# ANSI colors -BOLD_GREEN='\033[1;32m' -BOLD_RED='\033[1;31m' -ANSI_RESET='\033[0m' -SUCCESS_PREFIX="${BOLD_GREEN}SUCCESS:${ANSI_RESET}" -FAILURE_PREFIX="${BOLD_RED}FAILED:${ANSI_RESET}" - -TMP_DIR="tests/generators/tmp/" -GOLDEN_DIR="tests/generators/golden/" - -FAILURE_COUNT=0 -check_result() { - local suffix=$1 # One of: js, py, dart, lua, php - local tmp_filename="${TMP_DIR}generated.$suffix" - - if [ -f $tmp_filename ]; then - local golden_filename="${GOLDEN_DIR}generated.$suffix" - if [ -f $golden_filename ]; then - if cmp $tmp_filename $golden_filename; then - echo -e "$SUCCESS_PREFIX $suffix: $tmp_filename matches $golden_filename" - else - echo -e "$FAILURE_PREFIX $suffix: $tmp_filename does not match $golden_filename" - FAILURE_COUNT=$((FAILURE_COUNT+1)) - fi - else - echo "File $golden_filename not found!" - FAILURE_COUNT=$((FAILURE_COUNT+1)) - fi - else - echo "File $tmp_filename not found!" - FAILURE_COUNT=$((FAILURE_COUNT+1)) - fi -} - - -mkdir $TMP_DIR - -node tests/generators/run_generators_in_browser.js -generator_suffixes=( "js" "py" "dart" "lua" "php" ) -for i in "${generator_suffixes[@]}" -do - check_result "$i" -done - - -# Clean up. -rm -r $TMP_DIR - -if [ "$FAILURE_COUNT" -eq "0" ]; then - echo -e "${BOLD_GREEN}All generator tests passed.${ANSI_RESET}" - exit 0 -else - echo -e "${BOLD_RED}Failures in ${FAILURE_COUNT} generator tests.${ANSI_RESET}" - exit 1 -fi diff --git a/tests/scripts/setup_osx_env.sh b/tests/scripts/setup_osx_env.sh index 02a2ff7d7..9b32d5564 100755 --- a/tests/scripts/setup_osx_env.sh +++ b/tests/scripts/setup_osx_env.sh @@ -1,5 +1,5 @@ #!/bin/bash - + if [ "${RUNNER_OS}" == "macOS" ] then export CHROME_BIN="/Applications/Google Chrome.app" diff --git a/typings/msg/ab.d.ts b/typings/msg/ab.d.ts index eb87b9bf3..5f2d13710 100644 --- a/typings/msg/ab.d.ts +++ b/typings/msg/ab.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ab locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ace.d.ts b/typings/msg/ace.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ace.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/af.d.ts b/typings/msg/af.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/af.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/am.d.ts b/typings/msg/am.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/am.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/ar.d.ts b/typings/msg/ar.d.ts index e2435d743..5f2d13710 100644 --- a/typings/msg/ar.d.ts +++ b/typings/msg/ar.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ar locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ast.d.ts b/typings/msg/ast.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ast.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/az.d.ts b/typings/msg/az.d.ts index a87778131..5f2d13710 100644 --- a/typings/msg/az.d.ts +++ b/typings/msg/az.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly az locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ba.d.ts b/typings/msg/ba.d.ts index 21cc21cc1..5f2d13710 100644 --- a/typings/msg/ba.d.ts +++ b/typings/msg/ba.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ba locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/bcc.d.ts b/typings/msg/bcc.d.ts index e60e54df5..5f2d13710 100644 --- a/typings/msg/bcc.d.ts +++ b/typings/msg/bcc.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly bcc locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/be-tarask.d.ts b/typings/msg/be-tarask.d.ts index 91640bb40..5f2d13710 100644 --- a/typings/msg/be-tarask.d.ts +++ b/typings/msg/be-tarask.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly be-tarask locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/be.d.ts b/typings/msg/be.d.ts index 0857b6328..5f2d13710 100644 --- a/typings/msg/be.d.ts +++ b/typings/msg/be.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly be locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/bg.d.ts b/typings/msg/bg.d.ts index 81905151a..5f2d13710 100644 --- a/typings/msg/bg.d.ts +++ b/typings/msg/bg.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly bg locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/bn.d.ts b/typings/msg/bn.d.ts index 8207499d7..5f2d13710 100644 --- a/typings/msg/bn.d.ts +++ b/typings/msg/bn.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly bn locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/br.d.ts b/typings/msg/br.d.ts index 319e7ade3..5f2d13710 100644 --- a/typings/msg/br.d.ts +++ b/typings/msg/br.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly br locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/bs.d.ts b/typings/msg/bs.d.ts index 41ad0987c..5f2d13710 100644 --- a/typings/msg/bs.d.ts +++ b/typings/msg/bs.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly bs locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ca.d.ts b/typings/msg/ca.d.ts index a89b9374b..5f2d13710 100644 --- a/typings/msg/ca.d.ts +++ b/typings/msg/ca.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ca locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/cdo.d.ts b/typings/msg/cdo.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/cdo.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/cs.d.ts b/typings/msg/cs.d.ts index fd8998d2b..5f2d13710 100644 --- a/typings/msg/cs.d.ts +++ b/typings/msg/cs.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly cs locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/da.d.ts b/typings/msg/da.d.ts index 9ae9615a0..5f2d13710 100644 --- a/typings/msg/da.d.ts +++ b/typings/msg/da.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly da locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/de.d.ts b/typings/msg/de.d.ts index 84004ffdd..5f2d13710 100644 --- a/typings/msg/de.d.ts +++ b/typings/msg/de.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly de locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/diq.d.ts b/typings/msg/diq.d.ts index 2dadf5b23..5f2d13710 100644 --- a/typings/msg/diq.d.ts +++ b/typings/msg/diq.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly diq locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/dty.d.ts b/typings/msg/dty.d.ts index 995d93af2..5f2d13710 100644 --- a/typings/msg/dty.d.ts +++ b/typings/msg/dty.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly dty locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ee.d.ts b/typings/msg/ee.d.ts index 436e5b9ad..5f2d13710 100644 --- a/typings/msg/ee.d.ts +++ b/typings/msg/ee.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ee locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/el.d.ts b/typings/msg/el.d.ts index 981a987b6..5f2d13710 100644 --- a/typings/msg/el.d.ts +++ b/typings/msg/el.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly el locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/en-gb.d.ts b/typings/msg/en-gb.d.ts index 59032a4ff..5f2d13710 100644 --- a/typings/msg/en-gb.d.ts +++ b/typings/msg/en-gb.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly en-gb locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/en.d.ts b/typings/msg/en.d.ts index 256aa7d44..5f2d13710 100644 --- a/typings/msg/en.d.ts +++ b/typings/msg/en.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly en locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/eo.d.ts b/typings/msg/eo.d.ts index a9b4004cc..5f2d13710 100644 --- a/typings/msg/eo.d.ts +++ b/typings/msg/eo.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly eo locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/es.d.ts b/typings/msg/es.d.ts index 4dd0c585a..5f2d13710 100644 --- a/typings/msg/es.d.ts +++ b/typings/msg/es.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly es locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/et.d.ts b/typings/msg/et.d.ts index 01541ff11..5f2d13710 100644 --- a/typings/msg/et.d.ts +++ b/typings/msg/et.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly et locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/eu.d.ts b/typings/msg/eu.d.ts index 1d0e85207..5f2d13710 100644 --- a/typings/msg/eu.d.ts +++ b/typings/msg/eu.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly eu locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/fa.d.ts b/typings/msg/fa.d.ts index 0e929790d..5f2d13710 100644 --- a/typings/msg/fa.d.ts +++ b/typings/msg/fa.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly fa locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/fi.d.ts b/typings/msg/fi.d.ts index dad65e992..5f2d13710 100644 --- a/typings/msg/fi.d.ts +++ b/typings/msg/fi.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly fi locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/fo.d.ts b/typings/msg/fo.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/fo.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/fr.d.ts b/typings/msg/fr.d.ts index 6014c3b63..5f2d13710 100644 --- a/typings/msg/fr.d.ts +++ b/typings/msg/fr.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly fr locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/frr.d.ts b/typings/msg/frr.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/frr.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/gl.d.ts b/typings/msg/gl.d.ts index 874c328f7..5f2d13710 100644 --- a/typings/msg/gl.d.ts +++ b/typings/msg/gl.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly gl locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/gn.d.ts b/typings/msg/gn.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/gn.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/gor.d.ts b/typings/msg/gor.d.ts index 69c2999d4..5f2d13710 100644 --- a/typings/msg/gor.d.ts +++ b/typings/msg/gor.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly gor locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ha.d.ts b/typings/msg/ha.d.ts index f5e92a6af..5f2d13710 100644 --- a/typings/msg/ha.d.ts +++ b/typings/msg/ha.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ha locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/hak.d.ts b/typings/msg/hak.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/hak.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/he.d.ts b/typings/msg/he.d.ts index deb61f950..5f2d13710 100644 --- a/typings/msg/he.d.ts +++ b/typings/msg/he.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly he locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/hi.d.ts b/typings/msg/hi.d.ts index 5abcff526..5f2d13710 100644 --- a/typings/msg/hi.d.ts +++ b/typings/msg/hi.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly hi locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/hr.d.ts b/typings/msg/hr.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/hr.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/hrx.d.ts b/typings/msg/hrx.d.ts index 785916169..5f2d13710 100644 --- a/typings/msg/hrx.d.ts +++ b/typings/msg/hrx.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly hrx locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/hu.d.ts b/typings/msg/hu.d.ts index 3f87f846d..5f2d13710 100644 --- a/typings/msg/hu.d.ts +++ b/typings/msg/hu.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly hu locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/hy.d.ts b/typings/msg/hy.d.ts index ee726e223..5f2d13710 100644 --- a/typings/msg/hy.d.ts +++ b/typings/msg/hy.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly hy locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ia.d.ts b/typings/msg/ia.d.ts index b0324c970..5f2d13710 100644 --- a/typings/msg/ia.d.ts +++ b/typings/msg/ia.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ia locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/id.d.ts b/typings/msg/id.d.ts index 79a2a28f2..5f2d13710 100644 --- a/typings/msg/id.d.ts +++ b/typings/msg/id.d.ts @@ -1,15 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ID locale. - * @author samelh@google.com (Sam El-Husseini) - */ +export * from './msg'; -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; diff --git a/typings/msg/ig.d.ts b/typings/msg/ig.d.ts index 90e5c7bec..5f2d13710 100644 --- a/typings/msg/ig.d.ts +++ b/typings/msg/ig.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ig locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/inh.d.ts b/typings/msg/inh.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/inh.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/is.d.ts b/typings/msg/is.d.ts index 88bfa07b8..5f2d13710 100644 --- a/typings/msg/is.d.ts +++ b/typings/msg/is.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly is locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/it.d.ts b/typings/msg/it.d.ts index 0bff1ff74..5f2d13710 100644 --- a/typings/msg/it.d.ts +++ b/typings/msg/it.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly it locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ja.d.ts b/typings/msg/ja.d.ts index ed76fdf25..5f2d13710 100644 --- a/typings/msg/ja.d.ts +++ b/typings/msg/ja.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ja locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ka.d.ts b/typings/msg/ka.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ka.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/kab.d.ts b/typings/msg/kab.d.ts index 98747fa49..5f2d13710 100644 --- a/typings/msg/kab.d.ts +++ b/typings/msg/kab.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly kab locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/kbd-cyrl.d.ts b/typings/msg/kbd-cyrl.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/kbd-cyrl.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/km.d.ts b/typings/msg/km.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/km.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/kn.d.ts b/typings/msg/kn.d.ts index 9ac70f39f..5f2d13710 100644 --- a/typings/msg/kn.d.ts +++ b/typings/msg/kn.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly kn locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ko.d.ts b/typings/msg/ko.d.ts index 344002e5d..5f2d13710 100644 --- a/typings/msg/ko.d.ts +++ b/typings/msg/ko.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ko locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ksh.d.ts b/typings/msg/ksh.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ksh.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/ku-latn.d.ts b/typings/msg/ku-latn.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ku-latn.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/ky.d.ts b/typings/msg/ky.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ky.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/la.d.ts b/typings/msg/la.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/la.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/lb.d.ts b/typings/msg/lb.d.ts index 0eee88ed5..5f2d13710 100644 --- a/typings/msg/lb.d.ts +++ b/typings/msg/lb.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lb locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/lki.d.ts b/typings/msg/lki.d.ts index 9559de10e..5f2d13710 100644 --- a/typings/msg/lki.d.ts +++ b/typings/msg/lki.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lki locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/lo.d.ts b/typings/msg/lo.d.ts index 5a9071cea..5f2d13710 100644 --- a/typings/msg/lo.d.ts +++ b/typings/msg/lo.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lo locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/lrc.d.ts b/typings/msg/lrc.d.ts index 044134af1..5f2d13710 100644 --- a/typings/msg/lrc.d.ts +++ b/typings/msg/lrc.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lrc locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/lt.d.ts b/typings/msg/lt.d.ts index 9cc7516c1..5f2d13710 100644 --- a/typings/msg/lt.d.ts +++ b/typings/msg/lt.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lt locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/lv.d.ts b/typings/msg/lv.d.ts index 88b41c7af..5f2d13710 100644 --- a/typings/msg/lv.d.ts +++ b/typings/msg/lv.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly lv locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/mg.d.ts b/typings/msg/mg.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/mg.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/mk.d.ts b/typings/msg/mk.d.ts index 951b027b7..5f2d13710 100644 --- a/typings/msg/mk.d.ts +++ b/typings/msg/mk.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly mk locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ml.d.ts b/typings/msg/ml.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ml.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/mnw.d.ts b/typings/msg/mnw.d.ts index 962b8c5c9..5f2d13710 100644 --- a/typings/msg/mnw.d.ts +++ b/typings/msg/mnw.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly mnw locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ms.d.ts b/typings/msg/ms.d.ts index f154c4ef4..5f2d13710 100644 --- a/typings/msg/ms.d.ts +++ b/typings/msg/ms.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ms locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/msg.d.ts b/typings/msg/msg.d.ts index 65d7808ab..28f792abc 100644 --- a/typings/msg/msg.d.ts +++ b/typings/msg/msg.d.ts @@ -10,435 +10,432 @@ */ -declare namespace Blockly.Msg { - let ADD_COMMENT : string ; - let CANNOT_DELETE_VARIABLE_PROCEDURE : string ; - let CHANGE_VALUE_TITLE : string ; - let CLEAN_UP : string ; - let COLLAPSED_WARNINGS_WARNING : string ; - let COLLAPSE_ALL : string ; - let COLLAPSE_BLOCK : string ; - let COLOUR_BLEND_COLOUR1 : string ; - let COLOUR_BLEND_COLOUR2 : string ; - let COLOUR_BLEND_HELPURL : string ; - let COLOUR_BLEND_RATIO : string ; - let COLOUR_BLEND_TITLE : string ; - let COLOUR_BLEND_TOOLTIP : string ; - let COLOUR_HUE : string ; - let COLOUR_PICKER_HELPURL : string ; - let COLOUR_PICKER_TOOLTIP : string ; - let COLOUR_RANDOM_HELPURL : string ; - let COLOUR_RANDOM_TITLE : string ; - let COLOUR_RANDOM_TOOLTIP : string ; - let COLOUR_RGB_BLUE : string ; - let COLOUR_RGB_GREEN : string ; - let COLOUR_RGB_HELPURL : string ; - let COLOUR_RGB_RED : string ; - let COLOUR_RGB_TITLE : string ; - let COLOUR_RGB_TOOLTIP : string ; - let CONTROLS_FLOW_STATEMENTS_HELPURL : string ; - let CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK : string ; - let CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE : string ; - let CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK : string ; - let CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE : string ; - let CONTROLS_FLOW_STATEMENTS_WARNING : string ; - let CONTROLS_FOREACH_HELPURL : string ; - let CONTROLS_FOREACH_INPUT_DO : string ; - let CONTROLS_FOREACH_TITLE : string ; - let CONTROLS_FOREACH_TOOLTIP : string ; - let CONTROLS_FOR_HELPURL : string ; - let CONTROLS_FOR_INPUT_DO : string ; - let CONTROLS_FOR_TITLE : string ; - let CONTROLS_FOR_TOOLTIP : string ; - let CONTROLS_IF_ELSEIF_TITLE_ELSEIF : string ; - let CONTROLS_IF_ELSEIF_TOOLTIP : string ; - let CONTROLS_IF_ELSE_TITLE_ELSE : string ; - let CONTROLS_IF_ELSE_TOOLTIP : string ; - let CONTROLS_IF_HELPURL : string ; - let CONTROLS_IF_IF_TITLE_IF : string ; - let CONTROLS_IF_IF_TOOLTIP : string ; - let CONTROLS_IF_MSG_ELSE : string ; - let CONTROLS_IF_MSG_ELSEIF : string ; - let CONTROLS_IF_MSG_IF : string ; - let CONTROLS_IF_MSG_THEN : string ; - let CONTROLS_IF_TOOLTIP_1 : string ; - let CONTROLS_IF_TOOLTIP_2 : string ; - let CONTROLS_IF_TOOLTIP_3 : string ; - let CONTROLS_IF_TOOLTIP_4 : string ; - let CONTROLS_REPEAT_HELPURL : string ; - let CONTROLS_REPEAT_INPUT_DO : string ; - let CONTROLS_REPEAT_TITLE : string ; - let CONTROLS_REPEAT_TOOLTIP : string ; - let CONTROLS_WHILEUNTIL_HELPURL : string ; - let CONTROLS_WHILEUNTIL_INPUT_DO : string ; - let CONTROLS_WHILEUNTIL_OPERATOR_UNTIL : string ; - let CONTROLS_WHILEUNTIL_OPERATOR_WHILE : string ; - let CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL : string ; - let CONTROLS_WHILEUNTIL_TOOLTIP_WHILE : string ; - let DELETE_ALL_BLOCKS : string ; - let DELETE_BLOCK : string ; - let DELETE_VARIABLE : string ; - let DELETE_VARIABLE_CONFIRMATION : string ; - let DELETE_X_BLOCKS : string ; - let DISABLE_BLOCK : string ; - let DUPLICATE_BLOCK : string ; - let DUPLICATE_COMMENT : string ; - let ENABLE_BLOCK : string ; - let EXPAND_ALL : string ; - let EXPAND_BLOCK : string ; - let EXTERNAL_INPUTS : string ; - let HELP : string ; - let INLINE_INPUTS : string ; - let IOS_CANCEL : string ; - let IOS_ERROR : string ; - let IOS_OK : string ; - let IOS_PROCEDURES_ADD_INPUT : string ; - let IOS_PROCEDURES_ALLOW_STATEMENTS : string ; - let IOS_PROCEDURES_DUPLICATE_INPUTS_ERROR : string ; - let IOS_PROCEDURES_INPUTS : string ; - let IOS_VARIABLES_ADD_BUTTON : string ; - let IOS_VARIABLES_ADD_VARIABLE : string ; - let IOS_VARIABLES_DELETE_BUTTON : string ; - let IOS_VARIABLES_EMPTY_NAME_ERROR : string ; - let IOS_VARIABLES_RENAME_BUTTON : string ; - let IOS_VARIABLES_VARIABLE_NAME : string ; - let LISTS_CREATE_EMPTY_HELPURL : string ; - let LISTS_CREATE_EMPTY_TITLE : string ; - let LISTS_CREATE_EMPTY_TOOLTIP : string ; - let LISTS_CREATE_WITH_CONTAINER_TITLE_ADD : string ; - let LISTS_CREATE_WITH_CONTAINER_TOOLTIP : string ; - let LISTS_CREATE_WITH_HELPURL : string ; - let LISTS_CREATE_WITH_INPUT_WITH : string ; - let LISTS_CREATE_WITH_ITEM_TITLE : string ; - let LISTS_CREATE_WITH_ITEM_TOOLTIP : string ; - let LISTS_CREATE_WITH_TOOLTIP : string ; - let LISTS_GET_INDEX_FIRST : string ; - let LISTS_GET_INDEX_FROM_END : string ; - let LISTS_GET_INDEX_FROM_START : string ; - let LISTS_GET_INDEX_GET : string ; - let LISTS_GET_INDEX_GET_REMOVE : string ; - let LISTS_GET_INDEX_HELPURL : string ; - let LISTS_GET_INDEX_INPUT_IN_LIST : string ; - let LISTS_GET_INDEX_LAST : string ; - let LISTS_GET_INDEX_RANDOM : string ; - let LISTS_GET_INDEX_REMOVE : string ; - let LISTS_GET_INDEX_TAIL : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_FIRST : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_FROM : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_LAST : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_RANDOM : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST : string ; - let LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM : string ; - let LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST : string ; - let LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM : string ; - let LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST : string ; - let LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM : string ; - let LISTS_GET_SUBLIST_END_FROM_END : string ; - let LISTS_GET_SUBLIST_END_FROM_START : string ; - let LISTS_GET_SUBLIST_END_LAST : string ; - let LISTS_GET_SUBLIST_HELPURL : string ; - let LISTS_GET_SUBLIST_INPUT_IN_LIST : string ; - let LISTS_GET_SUBLIST_START_FIRST : string ; - let LISTS_GET_SUBLIST_START_FROM_END : string ; - let LISTS_GET_SUBLIST_START_FROM_START : string ; - let LISTS_GET_SUBLIST_TAIL : string ; - let LISTS_GET_SUBLIST_TOOLTIP : string ; - let LISTS_HUE : string ; - let LISTS_INDEX_FROM_END_TOOLTIP : string ; - let LISTS_INDEX_FROM_START_TOOLTIP : string ; - let LISTS_INDEX_OF_FIRST : string ; - let LISTS_INDEX_OF_HELPURL : string ; - let LISTS_INDEX_OF_INPUT_IN_LIST : string ; - let LISTS_INDEX_OF_LAST : string ; - let LISTS_INDEX_OF_TOOLTIP : string ; - let LISTS_INLIST : string ; - let LISTS_ISEMPTY_HELPURL : string ; - let LISTS_ISEMPTY_TITLE : string ; - let LISTS_ISEMPTY_TOOLTIP : string ; - let LISTS_LENGTH_HELPURL : string ; - let LISTS_LENGTH_TITLE : string ; - let LISTS_LENGTH_TOOLTIP : string ; - let LISTS_REPEAT_HELPURL : string ; - let LISTS_REPEAT_TITLE : string ; - let LISTS_REPEAT_TOOLTIP : string ; - let LISTS_REVERSE_HELPURL : string ; - let LISTS_REVERSE_MESSAGE0 : string ; - let LISTS_REVERSE_TOOLTIP : string ; - let LISTS_SET_INDEX_HELPURL : string ; - let LISTS_SET_INDEX_INPUT_IN_LIST : string ; - let LISTS_SET_INDEX_INPUT_TO : string ; - let LISTS_SET_INDEX_INSERT : string ; - let LISTS_SET_INDEX_SET : string ; - let LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST : string ; - let LISTS_SET_INDEX_TOOLTIP_INSERT_FROM : string ; - let LISTS_SET_INDEX_TOOLTIP_INSERT_LAST : string ; - let LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM : string ; - let LISTS_SET_INDEX_TOOLTIP_SET_FIRST : string ; - let LISTS_SET_INDEX_TOOLTIP_SET_FROM : string ; - let LISTS_SET_INDEX_TOOLTIP_SET_LAST : string ; - let LISTS_SET_INDEX_TOOLTIP_SET_RANDOM : string ; - let LISTS_SORT_HELPURL : string ; - let LISTS_SORT_ORDER_ASCENDING : string ; - let LISTS_SORT_ORDER_DESCENDING : string ; - let LISTS_SORT_TITLE : string ; - let LISTS_SORT_TOOLTIP : string ; - let LISTS_SORT_TYPE_IGNORECASE : string ; - let LISTS_SORT_TYPE_NUMERIC : string ; - let LISTS_SORT_TYPE_TEXT : string ; - let LISTS_SPLIT_HELPURL : string ; - let LISTS_SPLIT_LIST_FROM_TEXT : string ; - let LISTS_SPLIT_TEXT_FROM_LIST : string ; - let LISTS_SPLIT_TOOLTIP_JOIN : string ; - let LISTS_SPLIT_TOOLTIP_SPLIT : string ; - let LISTS_SPLIT_WITH_DELIMITER : string ; - let LOGIC_BOOLEAN_FALSE : string ; - let LOGIC_BOOLEAN_HELPURL : string ; - let LOGIC_BOOLEAN_TOOLTIP : string ; - let LOGIC_BOOLEAN_TRUE : string ; - let LOGIC_COMPARE_HELPURL : string ; - let LOGIC_COMPARE_TOOLTIP_EQ : string ; - let LOGIC_COMPARE_TOOLTIP_GT : string ; - let LOGIC_COMPARE_TOOLTIP_GTE : string ; - let LOGIC_COMPARE_TOOLTIP_LT : string ; - let LOGIC_COMPARE_TOOLTIP_LTE : string ; - let LOGIC_COMPARE_TOOLTIP_NEQ : string ; - let LOGIC_HUE : string ; - let LOGIC_NEGATE_HELPURL : string ; - let LOGIC_NEGATE_TITLE : string ; - let LOGIC_NEGATE_TOOLTIP : string ; - let LOGIC_NULL : string ; - let LOGIC_NULL_HELPURL : string ; - let LOGIC_NULL_TOOLTIP : string ; - let LOGIC_OPERATION_AND : string ; - let LOGIC_OPERATION_HELPURL : string ; - let LOGIC_OPERATION_OR : string ; - let LOGIC_OPERATION_TOOLTIP_AND : string ; - let LOGIC_OPERATION_TOOLTIP_OR : string ; - let LOGIC_TERNARY_CONDITION : string ; - let LOGIC_TERNARY_HELPURL : string ; - let LOGIC_TERNARY_IF_FALSE : string ; - let LOGIC_TERNARY_IF_TRUE : string ; - let LOGIC_TERNARY_TOOLTIP : string ; - let LOOPS_HUE : string ; - let MATH_ADDITION_SYMBOL : string ; - let MATH_ARITHMETIC_HELPURL : string ; - let MATH_ARITHMETIC_TOOLTIP_ADD : string ; - let MATH_ARITHMETIC_TOOLTIP_DIVIDE : string ; - let MATH_ARITHMETIC_TOOLTIP_MINUS : string ; - let MATH_ARITHMETIC_TOOLTIP_MULTIPLY : string ; - let MATH_ARITHMETIC_TOOLTIP_POWER : string ; - let MATH_ATAN2_HELPURL : string ; - let MATH_ATAN2_TITLE : string ; - let MATH_ATAN2_TOOLTIP : string ; - let MATH_CHANGE_HELPURL : string ; - let MATH_CHANGE_TITLE : string ; - let MATH_CHANGE_TITLE_ITEM : string ; - let MATH_CHANGE_TOOLTIP : string ; - let MATH_CONSTANT_HELPURL : string ; - let MATH_CONSTANT_TOOLTIP : string ; - let MATH_CONSTRAIN_HELPURL : string ; - let MATH_CONSTRAIN_TITLE : string ; - let MATH_CONSTRAIN_TOOLTIP : string ; - let MATH_DIVISION_SYMBOL : string ; - let MATH_HUE : string ; - let MATH_IS_DIVISIBLE_BY : string ; - let MATH_IS_EVEN : string ; - let MATH_IS_NEGATIVE : string ; - let MATH_IS_ODD : string ; - let MATH_IS_POSITIVE : string ; - let MATH_IS_PRIME : string ; - let MATH_IS_TOOLTIP : string ; - let MATH_IS_WHOLE : string ; - let MATH_MODULO_HELPURL : string ; - let MATH_MODULO_TITLE : string ; - let MATH_MODULO_TOOLTIP : string ; - let MATH_MULTIPLICATION_SYMBOL : string ; - let MATH_NUMBER_HELPURL : string ; - let MATH_NUMBER_TOOLTIP : string ; - let MATH_ONLIST_HELPURL : string ; - let MATH_ONLIST_OPERATOR_AVERAGE : string ; - let MATH_ONLIST_OPERATOR_MAX : string ; - let MATH_ONLIST_OPERATOR_MEDIAN : string ; - let MATH_ONLIST_OPERATOR_MIN : string ; - let MATH_ONLIST_OPERATOR_MODE : string ; - let MATH_ONLIST_OPERATOR_RANDOM : string ; - let MATH_ONLIST_OPERATOR_STD_DEV : string ; - let MATH_ONLIST_OPERATOR_SUM : string ; - let MATH_ONLIST_TOOLTIP_AVERAGE : string ; - let MATH_ONLIST_TOOLTIP_MAX : string ; - let MATH_ONLIST_TOOLTIP_MEDIAN : string ; - let MATH_ONLIST_TOOLTIP_MIN : string ; - let MATH_ONLIST_TOOLTIP_MODE : string ; - let MATH_ONLIST_TOOLTIP_RANDOM : string ; - let MATH_ONLIST_TOOLTIP_STD_DEV : string ; - let MATH_ONLIST_TOOLTIP_SUM : string ; - let MATH_POWER_SYMBOL : string ; - let MATH_RANDOM_FLOAT_HELPURL : string ; - let MATH_RANDOM_FLOAT_TITLE_RANDOM : string ; - let MATH_RANDOM_FLOAT_TOOLTIP : string ; - let MATH_RANDOM_INT_HELPURL : string ; - let MATH_RANDOM_INT_TITLE : string ; - let MATH_RANDOM_INT_TOOLTIP : string ; - let MATH_ROUND_HELPURL : string ; - let MATH_ROUND_OPERATOR_ROUND : string ; - let MATH_ROUND_OPERATOR_ROUNDDOWN : string ; - let MATH_ROUND_OPERATOR_ROUNDUP : string ; - let MATH_ROUND_TOOLTIP : string ; - let MATH_SINGLE_HELPURL : string ; - let MATH_SINGLE_OP_ABSOLUTE : string ; - let MATH_SINGLE_OP_ROOT : string ; - let MATH_SINGLE_TOOLTIP_ABS : string ; - let MATH_SINGLE_TOOLTIP_EXP : string ; - let MATH_SINGLE_TOOLTIP_LN : string ; - let MATH_SINGLE_TOOLTIP_LOG10 : string ; - let MATH_SINGLE_TOOLTIP_NEG : string ; - let MATH_SINGLE_TOOLTIP_POW10 : string ; - let MATH_SINGLE_TOOLTIP_ROOT : string ; - let MATH_SUBTRACTION_SYMBOL : string ; - let MATH_TRIG_ACOS : string ; - let MATH_TRIG_ASIN : string ; - let MATH_TRIG_ATAN : string ; - let MATH_TRIG_COS : string ; - let MATH_TRIG_HELPURL : string ; - let MATH_TRIG_SIN : string ; - let MATH_TRIG_TAN : string ; - let MATH_TRIG_TOOLTIP_ACOS : string ; - let MATH_TRIG_TOOLTIP_ASIN : string ; - let MATH_TRIG_TOOLTIP_ATAN : string ; - let MATH_TRIG_TOOLTIP_COS : string ; - let MATH_TRIG_TOOLTIP_SIN : string ; - let MATH_TRIG_TOOLTIP_TAN : string ; - let NEW_COLOUR_VARIABLE : string ; - let NEW_NUMBER_VARIABLE : string ; - let NEW_STRING_VARIABLE : string ; - let NEW_VARIABLE : string ; - let NEW_VARIABLE_TITLE : string ; - let NEW_VARIABLE_TYPE_TITLE : string ; - let ORDINAL_NUMBER_SUFFIX : string ; - let PROCEDURES_ALLOW_STATEMENTS : string ; - let PROCEDURES_BEFORE_PARAMS : string ; - let PROCEDURES_CALLNORETURN_HELPURL : string ; - let PROCEDURES_CALLNORETURN_TOOLTIP : string ; - let PROCEDURES_CALLRETURN_HELPURL : string ; - let PROCEDURES_CALLRETURN_TOOLTIP : string ; - let PROCEDURES_CALL_BEFORE_PARAMS : string ; - let PROCEDURES_CREATE_DO : string ; - let PROCEDURES_DEFNORETURN_COMMENT : string ; - let PROCEDURES_DEFNORETURN_DO : string ; - let PROCEDURES_DEFNORETURN_HELPURL : string ; - let PROCEDURES_DEFNORETURN_PROCEDURE : string ; - let PROCEDURES_DEFNORETURN_TITLE : string ; - let PROCEDURES_DEFNORETURN_TOOLTIP : string ; - let PROCEDURES_DEFRETURN_COMMENT : string ; - let PROCEDURES_DEFRETURN_DO : string ; - let PROCEDURES_DEFRETURN_HELPURL : string ; - let PROCEDURES_DEFRETURN_PROCEDURE : string ; - let PROCEDURES_DEFRETURN_RETURN : string ; - let PROCEDURES_DEFRETURN_TITLE : string ; - let PROCEDURES_DEFRETURN_TOOLTIP : string ; - let PROCEDURES_DEF_DUPLICATE_WARNING : string ; - let PROCEDURES_HIGHLIGHT_DEF : string ; - let PROCEDURES_HUE : string ; - let PROCEDURES_IFRETURN_HELPURL : string ; - let PROCEDURES_IFRETURN_TOOLTIP : string ; - let PROCEDURES_IFRETURN_WARNING : string ; - let PROCEDURES_MUTATORARG_TITLE : string ; - let PROCEDURES_MUTATORARG_TOOLTIP : string ; - let PROCEDURES_MUTATORCONTAINER_TITLE : string ; - let PROCEDURES_MUTATORCONTAINER_TOOLTIP : string ; - let REDO : string ; - let REMOVE_COMMENT : string ; - let RENAME_VARIABLE : string ; - let RENAME_VARIABLE_TITLE : string ; - let TEXTS_HUE : string ; - let TEXT_APPEND_HELPURL : string ; - let TEXT_APPEND_TITLE : string ; - let TEXT_APPEND_TOOLTIP : string ; - let TEXT_APPEND_VARIABLE : string ; - let TEXT_CHANGECASE_HELPURL : string ; - let TEXT_CHANGECASE_OPERATOR_LOWERCASE : string ; - let TEXT_CHANGECASE_OPERATOR_TITLECASE : string ; - let TEXT_CHANGECASE_OPERATOR_UPPERCASE : string ; - let TEXT_CHANGECASE_TOOLTIP : string ; - let TEXT_CHARAT_FIRST : string ; - let TEXT_CHARAT_FROM_END : string ; - let TEXT_CHARAT_FROM_START : string ; - let TEXT_CHARAT_HELPURL : string ; - let TEXT_CHARAT_LAST : string ; - let TEXT_CHARAT_RANDOM : string ; - let TEXT_CHARAT_TAIL : string ; - let TEXT_CHARAT_TITLE : string ; - let TEXT_CHARAT_TOOLTIP : string ; - let TEXT_COUNT_HELPURL : string ; - let TEXT_COUNT_MESSAGE0 : string ; - let TEXT_COUNT_TOOLTIP : string ; - let TEXT_CREATE_JOIN_ITEM_TITLE_ITEM : string ; - let TEXT_CREATE_JOIN_ITEM_TOOLTIP : string ; - let TEXT_CREATE_JOIN_TITLE_JOIN : string ; - let TEXT_CREATE_JOIN_TOOLTIP : string ; - let TEXT_GET_SUBSTRING_END_FROM_END : string ; - let TEXT_GET_SUBSTRING_END_FROM_START : string ; - let TEXT_GET_SUBSTRING_END_LAST : string ; - let TEXT_GET_SUBSTRING_HELPURL : string ; - let TEXT_GET_SUBSTRING_INPUT_IN_TEXT : string ; - let TEXT_GET_SUBSTRING_START_FIRST : string ; - let TEXT_GET_SUBSTRING_START_FROM_END : string ; - let TEXT_GET_SUBSTRING_START_FROM_START : string ; - let TEXT_GET_SUBSTRING_TAIL : string ; - let TEXT_GET_SUBSTRING_TOOLTIP : string ; - let TEXT_INDEXOF_HELPURL : string ; - let TEXT_INDEXOF_OPERATOR_FIRST : string ; - let TEXT_INDEXOF_OPERATOR_LAST : string ; - let TEXT_INDEXOF_TITLE : string ; - let TEXT_INDEXOF_TOOLTIP : string ; - let TEXT_ISEMPTY_HELPURL : string ; - let TEXT_ISEMPTY_TITLE : string ; - let TEXT_ISEMPTY_TOOLTIP : string ; - let TEXT_JOIN_HELPURL : string ; - let TEXT_JOIN_TITLE_CREATEWITH : string ; - let TEXT_JOIN_TOOLTIP : string ; - let TEXT_LENGTH_HELPURL : string ; - let TEXT_LENGTH_TITLE : string ; - let TEXT_LENGTH_TOOLTIP : string ; - let TEXT_PRINT_HELPURL : string ; - let TEXT_PRINT_TITLE : string ; - let TEXT_PRINT_TOOLTIP : string ; - let TEXT_PROMPT_HELPURL : string ; - let TEXT_PROMPT_TOOLTIP_NUMBER : string ; - let TEXT_PROMPT_TOOLTIP_TEXT : string ; - let TEXT_PROMPT_TYPE_NUMBER : string ; - let TEXT_PROMPT_TYPE_TEXT : string ; - let TEXT_REPLACE_HELPURL : string ; - let TEXT_REPLACE_MESSAGE0 : string ; - let TEXT_REPLACE_TOOLTIP : string ; - let TEXT_REVERSE_HELPURL : string ; - let TEXT_REVERSE_MESSAGE0 : string ; - let TEXT_REVERSE_TOOLTIP : string ; - let TEXT_TEXT_HELPURL : string ; - let TEXT_TEXT_TOOLTIP : string ; - let TEXT_TRIM_HELPURL : string ; - let TEXT_TRIM_OPERATOR_BOTH : string ; - let TEXT_TRIM_OPERATOR_LEFT : string ; - let TEXT_TRIM_OPERATOR_RIGHT : string ; - let TEXT_TRIM_TOOLTIP : string ; - let TODAY : string ; - let UNDO : string ; - let UNNAMED_KEY : string ; - let VARIABLES_DEFAULT_NAME : string ; - let VARIABLES_DYNAMIC_HUE : string ; - let VARIABLES_GET_CREATE_SET : string ; - let VARIABLES_GET_HELPURL : string ; - let VARIABLES_GET_TOOLTIP : string ; - let VARIABLES_HUE : string ; - let VARIABLES_SET : string ; - let VARIABLES_SET_CREATE_GET : string ; - let VARIABLES_SET_HELPURL : string ; - let VARIABLES_SET_TOOLTIP : string ; - let VARIABLE_ALREADY_EXISTS : string ; - let VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE : string ; - let WORKSPACE_ARIA_LABEL : string ; - let WORKSPACE_COMMENT_DEFAULT_TEXT : string ; -} - +export const ADD_COMMENT: string; +export const CANNOT_DELETE_VARIABLE_PROCEDURE: string; +export const CHANGE_VALUE_TITLE: string; +export const CLEAN_UP: string; +export const COLLAPSED_WARNINGS_WARNING: string; +export const COLLAPSE_ALL: string; +export const COLLAPSE_BLOCK: string; +export const COLOUR_BLEND_COLOUR1: string; +export const COLOUR_BLEND_COLOUR2: string; +export const COLOUR_BLEND_HELPURL: string; +export const COLOUR_BLEND_RATIO: string; +export const COLOUR_BLEND_TITLE: string; +export const COLOUR_BLEND_TOOLTIP: string; +export const COLOUR_HUE: string; +export const COLOUR_PICKER_HELPURL: string; +export const COLOUR_PICKER_TOOLTIP: string; +export const COLOUR_RANDOM_HELPURL: string; +export const COLOUR_RANDOM_TITLE: string; +export const COLOUR_RANDOM_TOOLTIP: string; +export const COLOUR_RGB_BLUE: string; +export const COLOUR_RGB_GREEN: string; +export const COLOUR_RGB_HELPURL: string; +export const COLOUR_RGB_RED: string; +export const COLOUR_RGB_TITLE: string; +export const COLOUR_RGB_TOOLTIP: string; +export const CONTROLS_FLOW_STATEMENTS_HELPURL: string; +export const CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK: string; +export const CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE: string; +export const CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK: string; +export const CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE: string; +export const CONTROLS_FLOW_STATEMENTS_WARNING: string; +export const CONTROLS_FOREACH_HELPURL: string; +export const CONTROLS_FOREACH_INPUT_DO: string; +export const CONTROLS_FOREACH_TITLE: string; +export const CONTROLS_FOREACH_TOOLTIP: string; +export const CONTROLS_FOR_HELPURL: string; +export const CONTROLS_FOR_INPUT_DO: string; +export const CONTROLS_FOR_TITLE: string; +export const CONTROLS_FOR_TOOLTIP: string; +export const CONTROLS_IF_ELSEIF_TITLE_ELSEIF: string; +export const CONTROLS_IF_ELSEIF_TOOLTIP: string; +export const CONTROLS_IF_ELSE_TITLE_ELSE: string; +export const CONTROLS_IF_ELSE_TOOLTIP: string; +export const CONTROLS_IF_HELPURL: string; +export const CONTROLS_IF_IF_TITLE_IF: string; +export const CONTROLS_IF_IF_TOOLTIP: string; +export const CONTROLS_IF_MSG_ELSE: string; +export const CONTROLS_IF_MSG_ELSEIF: string; +export const CONTROLS_IF_MSG_IF: string; +export const CONTROLS_IF_MSG_THEN: string; +export const CONTROLS_IF_TOOLTIP_1: string; +export const CONTROLS_IF_TOOLTIP_2: string; +export const CONTROLS_IF_TOOLTIP_3: string; +export const CONTROLS_IF_TOOLTIP_4: string; +export const CONTROLS_REPEAT_HELPURL: string; +export const CONTROLS_REPEAT_INPUT_DO: string; +export const CONTROLS_REPEAT_TITLE: string; +export const CONTROLS_REPEAT_TOOLTIP: string; +export const CONTROLS_WHILEUNTIL_HELPURL: string; +export const CONTROLS_WHILEUNTIL_INPUT_DO: string; +export const CONTROLS_WHILEUNTIL_OPERATOR_UNTIL: string; +export const CONTROLS_WHILEUNTIL_OPERATOR_WHILE: string; +export const CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL: string; +export const CONTROLS_WHILEUNTIL_TOOLTIP_WHILE: string; +export const DELETE_ALL_BLOCKS: string; +export const DELETE_BLOCK: string; +export const DELETE_VARIABLE: string; +export const DELETE_VARIABLE_CONFIRMATION: string; +export const DELETE_X_BLOCKS: string; +export const DISABLE_BLOCK: string; +export const DUPLICATE_BLOCK: string; +export const DUPLICATE_COMMENT: string; +export const ENABLE_BLOCK: string; +export const EXPAND_ALL: string; +export const EXPAND_BLOCK: string; +export const EXTERNAL_INPUTS: string; +export const HELP: string; +export const INLINE_INPUTS: string; +export const IOS_CANCEL: string; +export const IOS_ERROR: string; +export const IOS_OK: string; +export const IOS_PROCEDURES_ADD_INPUT: string; +export const IOS_PROCEDURES_ALLOW_STATEMENTS: string; +export const IOS_PROCEDURES_DUPLICATE_INPUTS_ERROR: string; +export const IOS_PROCEDURES_INPUTS: string; +export const IOS_VARIABLES_ADD_BUTTON: string; +export const IOS_VARIABLES_ADD_VARIABLE: string; +export const IOS_VARIABLES_DELETE_BUTTON: string; +export const IOS_VARIABLES_EMPTY_NAME_ERROR: string; +export const IOS_VARIABLES_RENAME_BUTTON: string; +export const IOS_VARIABLES_VARIABLE_NAME: string; +export const LISTS_CREATE_EMPTY_HELPURL: string; +export const LISTS_CREATE_EMPTY_TITLE: string; +export const LISTS_CREATE_EMPTY_TOOLTIP: string; +export const LISTS_CREATE_WITH_CONTAINER_TITLE_ADD: string; +export const LISTS_CREATE_WITH_CONTAINER_TOOLTIP: string; +export const LISTS_CREATE_WITH_HELPURL: string; +export const LISTS_CREATE_WITH_INPUT_WITH: string; +export const LISTS_CREATE_WITH_ITEM_TITLE: string; +export const LISTS_CREATE_WITH_ITEM_TOOLTIP: string; +export const LISTS_CREATE_WITH_TOOLTIP: string; +export const LISTS_GET_INDEX_FIRST: string; +export const LISTS_GET_INDEX_FROM_END: string; +export const LISTS_GET_INDEX_FROM_START: string; +export const LISTS_GET_INDEX_GET: string; +export const LISTS_GET_INDEX_GET_REMOVE: string; +export const LISTS_GET_INDEX_HELPURL: string; +export const LISTS_GET_INDEX_INPUT_IN_LIST: string; +export const LISTS_GET_INDEX_LAST: string; +export const LISTS_GET_INDEX_RANDOM: string; +export const LISTS_GET_INDEX_REMOVE: string; +export const LISTS_GET_INDEX_TAIL: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_FIRST: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_FROM: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_LAST: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_RANDOM: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST: string; +export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM: string; +export const LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST: string; +export const LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM: string; +export const LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST: string; +export const LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM: string; +export const LISTS_GET_SUBLIST_END_FROM_END: string; +export const LISTS_GET_SUBLIST_END_FROM_START: string; +export const LISTS_GET_SUBLIST_END_LAST: string; +export const LISTS_GET_SUBLIST_HELPURL: string; +export const LISTS_GET_SUBLIST_INPUT_IN_LIST: string; +export const LISTS_GET_SUBLIST_START_FIRST: string; +export const LISTS_GET_SUBLIST_START_FROM_END: string; +export const LISTS_GET_SUBLIST_START_FROM_START: string; +export const LISTS_GET_SUBLIST_TAIL: string; +export const LISTS_GET_SUBLIST_TOOLTIP: string; +export const LISTS_HUE: string; +export const LISTS_INDEX_FROM_END_TOOLTIP: string; +export const LISTS_INDEX_FROM_START_TOOLTIP: string; +export const LISTS_INDEX_OF_FIRST: string; +export const LISTS_INDEX_OF_HELPURL: string; +export const LISTS_INDEX_OF_INPUT_IN_LIST: string; +export const LISTS_INDEX_OF_LAST: string; +export const LISTS_INDEX_OF_TOOLTIP: string; +export const LISTS_INLIST: string; +export const LISTS_ISEMPTY_HELPURL: string; +export const LISTS_ISEMPTY_TITLE: string; +export const LISTS_ISEMPTY_TOOLTIP: string; +export const LISTS_LENGTH_HELPURL: string; +export const LISTS_LENGTH_TITLE: string; +export const LISTS_LENGTH_TOOLTIP: string; +export const LISTS_REPEAT_HELPURL: string; +export const LISTS_REPEAT_TITLE: string; +export const LISTS_REPEAT_TOOLTIP: string; +export const LISTS_REVERSE_HELPURL: string; +export const LISTS_REVERSE_MESSAGE0: string; +export const LISTS_REVERSE_TOOLTIP: string; +export const LISTS_SET_INDEX_HELPURL: string; +export const LISTS_SET_INDEX_INPUT_IN_LIST: string; +export const LISTS_SET_INDEX_INPUT_TO: string; +export const LISTS_SET_INDEX_INSERT: string; +export const LISTS_SET_INDEX_SET: string; +export const LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST: string; +export const LISTS_SET_INDEX_TOOLTIP_INSERT_FROM: string; +export const LISTS_SET_INDEX_TOOLTIP_INSERT_LAST: string; +export const LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM: string; +export const LISTS_SET_INDEX_TOOLTIP_SET_FIRST: string; +export const LISTS_SET_INDEX_TOOLTIP_SET_FROM: string; +export const LISTS_SET_INDEX_TOOLTIP_SET_LAST: string; +export const LISTS_SET_INDEX_TOOLTIP_SET_RANDOM: string; +export const LISTS_SORT_HELPURL: string; +export const LISTS_SORT_ORDER_ASCENDING: string; +export const LISTS_SORT_ORDER_DESCENDING: string; +export const LISTS_SORT_TITLE: string; +export const LISTS_SORT_TOOLTIP: string; +export const LISTS_SORT_TYPE_IGNORECASE: string; +export const LISTS_SORT_TYPE_NUMERIC: string; +export const LISTS_SORT_TYPE_TEXT: string; +export const LISTS_SPLIT_HELPURL: string; +export const LISTS_SPLIT_LIST_FROM_TEXT: string; +export const LISTS_SPLIT_TEXT_FROM_LIST: string; +export const LISTS_SPLIT_TOOLTIP_JOIN: string; +export const LISTS_SPLIT_TOOLTIP_SPLIT: string; +export const LISTS_SPLIT_WITH_DELIMITER: string; +export const LOGIC_BOOLEAN_FALSE: string; +export const LOGIC_BOOLEAN_HELPURL: string; +export const LOGIC_BOOLEAN_TOOLTIP: string; +export const LOGIC_BOOLEAN_TRUE: string; +export const LOGIC_COMPARE_HELPURL: string; +export const LOGIC_COMPARE_TOOLTIP_EQ: string; +export const LOGIC_COMPARE_TOOLTIP_GT: string; +export const LOGIC_COMPARE_TOOLTIP_GTE: string; +export const LOGIC_COMPARE_TOOLTIP_LT: string; +export const LOGIC_COMPARE_TOOLTIP_LTE: string; +export const LOGIC_COMPARE_TOOLTIP_NEQ: string; +export const LOGIC_HUE: string; +export const LOGIC_NEGATE_HELPURL: string; +export const LOGIC_NEGATE_TITLE: string; +export const LOGIC_NEGATE_TOOLTIP: string; +export const LOGIC_NULL: string; +export const LOGIC_NULL_HELPURL: string; +export const LOGIC_NULL_TOOLTIP: string; +export const LOGIC_OPERATION_AND: string; +export const LOGIC_OPERATION_HELPURL: string; +export const LOGIC_OPERATION_OR: string; +export const LOGIC_OPERATION_TOOLTIP_AND: string; +export const LOGIC_OPERATION_TOOLTIP_OR: string; +export const LOGIC_TERNARY_CONDITION: string; +export const LOGIC_TERNARY_HELPURL: string; +export const LOGIC_TERNARY_IF_FALSE: string; +export const LOGIC_TERNARY_IF_TRUE: string; +export const LOGIC_TERNARY_TOOLTIP: string; +export const LOOPS_HUE: string; +export const MATH_ADDITION_SYMBOL: string; +export const MATH_ARITHMETIC_HELPURL: string; +export const MATH_ARITHMETIC_TOOLTIP_ADD: string; +export const MATH_ARITHMETIC_TOOLTIP_DIVIDE: string; +export const MATH_ARITHMETIC_TOOLTIP_MINUS: string; +export const MATH_ARITHMETIC_TOOLTIP_MULTIPLY: string; +export const MATH_ARITHMETIC_TOOLTIP_POWER: string; +export const MATH_ATAN2_HELPURL: string; +export const MATH_ATAN2_TITLE: string; +export const MATH_ATAN2_TOOLTIP: string; +export const MATH_CHANGE_HELPURL: string; +export const MATH_CHANGE_TITLE: string; +export const MATH_CHANGE_TITLE_ITEM: string; +export const MATH_CHANGE_TOOLTIP: string; +export const MATH_CONSTANT_HELPURL: string; +export const MATH_CONSTANT_TOOLTIP: string; +export const MATH_CONSTRAIN_HELPURL: string; +export const MATH_CONSTRAIN_TITLE: string; +export const MATH_CONSTRAIN_TOOLTIP: string; +export const MATH_DIVISION_SYMBOL: string; +export const MATH_HUE: string; +export const MATH_IS_DIVISIBLE_BY: string; +export const MATH_IS_EVEN: string; +export const MATH_IS_NEGATIVE: string; +export const MATH_IS_ODD: string; +export const MATH_IS_POSITIVE: string; +export const MATH_IS_PRIME: string; +export const MATH_IS_TOOLTIP: string; +export const MATH_IS_WHOLE: string; +export const MATH_MODULO_HELPURL: string; +export const MATH_MODULO_TITLE: string; +export const MATH_MODULO_TOOLTIP: string; +export const MATH_MULTIPLICATION_SYMBOL: string; +export const MATH_NUMBER_HELPURL: string; +export const MATH_NUMBER_TOOLTIP: string; +export const MATH_ONLIST_HELPURL: string; +export const MATH_ONLIST_OPERATOR_AVERAGE: string; +export const MATH_ONLIST_OPERATOR_MAX: string; +export const MATH_ONLIST_OPERATOR_MEDIAN: string; +export const MATH_ONLIST_OPERATOR_MIN: string; +export const MATH_ONLIST_OPERATOR_MODE: string; +export const MATH_ONLIST_OPERATOR_RANDOM: string; +export const MATH_ONLIST_OPERATOR_STD_DEV: string; +export const MATH_ONLIST_OPERATOR_SUM: string; +export const MATH_ONLIST_TOOLTIP_AVERAGE: string; +export const MATH_ONLIST_TOOLTIP_MAX: string; +export const MATH_ONLIST_TOOLTIP_MEDIAN: string; +export const MATH_ONLIST_TOOLTIP_MIN: string; +export const MATH_ONLIST_TOOLTIP_MODE: string; +export const MATH_ONLIST_TOOLTIP_RANDOM: string; +export const MATH_ONLIST_TOOLTIP_STD_DEV: string; +export const MATH_ONLIST_TOOLTIP_SUM: string; +export const MATH_POWER_SYMBOL: string; +export const MATH_RANDOM_FLOAT_HELPURL: string; +export const MATH_RANDOM_FLOAT_TITLE_RANDOM: string; +export const MATH_RANDOM_FLOAT_TOOLTIP: string; +export const MATH_RANDOM_INT_HELPURL: string; +export const MATH_RANDOM_INT_TITLE: string; +export const MATH_RANDOM_INT_TOOLTIP: string; +export const MATH_ROUND_HELPURL: string; +export const MATH_ROUND_OPERATOR_ROUND: string; +export const MATH_ROUND_OPERATOR_ROUNDDOWN: string; +export const MATH_ROUND_OPERATOR_ROUNDUP: string; +export const MATH_ROUND_TOOLTIP: string; +export const MATH_SINGLE_HELPURL: string; +export const MATH_SINGLE_OP_ABSOLUTE: string; +export const MATH_SINGLE_OP_ROOT: string; +export const MATH_SINGLE_TOOLTIP_ABS: string; +export const MATH_SINGLE_TOOLTIP_EXP: string; +export const MATH_SINGLE_TOOLTIP_LN: string; +export const MATH_SINGLE_TOOLTIP_LOG10: string; +export const MATH_SINGLE_TOOLTIP_NEG: string; +export const MATH_SINGLE_TOOLTIP_POW10: string; +export const MATH_SINGLE_TOOLTIP_ROOT: string; +export const MATH_SUBTRACTION_SYMBOL: string; +export const MATH_TRIG_ACOS: string; +export const MATH_TRIG_ASIN: string; +export const MATH_TRIG_ATAN: string; +export const MATH_TRIG_COS: string; +export const MATH_TRIG_HELPURL: string; +export const MATH_TRIG_SIN: string; +export const MATH_TRIG_TAN: string; +export const MATH_TRIG_TOOLTIP_ACOS: string; +export const MATH_TRIG_TOOLTIP_ASIN: string; +export const MATH_TRIG_TOOLTIP_ATAN: string; +export const MATH_TRIG_TOOLTIP_COS: string; +export const MATH_TRIG_TOOLTIP_SIN: string; +export const MATH_TRIG_TOOLTIP_TAN: string; +export const NEW_COLOUR_VARIABLE: string; +export const NEW_NUMBER_VARIABLE: string; +export const NEW_STRING_VARIABLE: string; +export const NEW_VARIABLE: string; +export const NEW_VARIABLE_TITLE: string; +export const NEW_VARIABLE_TYPE_TITLE: string; +export const ORDINAL_NUMBER_SUFFIX: string; +export const PROCEDURES_ALLOW_STATEMENTS: string; +export const PROCEDURES_BEFORE_PARAMS: string; +export const PROCEDURES_CALLNORETURN_HELPURL: string; +export const PROCEDURES_CALLNORETURN_TOOLTIP: string; +export const PROCEDURES_CALLRETURN_HELPURL: string; +export const PROCEDURES_CALLRETURN_TOOLTIP: string; +export const PROCEDURES_CALL_BEFORE_PARAMS: string; +export const PROCEDURES_CREATE_DO: string; +export const PROCEDURES_DEFNORETURN_COMMENT: string; +export const PROCEDURES_DEFNORETURN_DO: string; +export const PROCEDURES_DEFNORETURN_HELPURL: string; +export const PROCEDURES_DEFNORETURN_PROCEDURE: string; +export const PROCEDURES_DEFNORETURN_TITLE: string; +export const PROCEDURES_DEFNORETURN_TOOLTIP: string; +export const PROCEDURES_DEFRETURN_COMMENT: string; +export const PROCEDURES_DEFRETURN_DO: string; +export const PROCEDURES_DEFRETURN_HELPURL: string; +export const PROCEDURES_DEFRETURN_PROCEDURE: string; +export const PROCEDURES_DEFRETURN_RETURN: string; +export const PROCEDURES_DEFRETURN_TITLE: string; +export const PROCEDURES_DEFRETURN_TOOLTIP: string; +export const PROCEDURES_DEF_DUPLICATE_WARNING: string; +export const PROCEDURES_HIGHLIGHT_DEF: string; +export const PROCEDURES_HUE: string; +export const PROCEDURES_IFRETURN_HELPURL: string; +export const PROCEDURES_IFRETURN_TOOLTIP: string; +export const PROCEDURES_IFRETURN_WARNING: string; +export const PROCEDURES_MUTATORARG_TITLE: string; +export const PROCEDURES_MUTATORARG_TOOLTIP: string; +export const PROCEDURES_MUTATORCONTAINER_TITLE: string; +export const PROCEDURES_MUTATORCONTAINER_TOOLTIP: string; +export const REDO: string; +export const REMOVE_COMMENT: string; +export const RENAME_VARIABLE: string; +export const RENAME_VARIABLE_TITLE: string; +export const TEXTS_HUE: string; +export const TEXT_APPEND_HELPURL: string; +export const TEXT_APPEND_TITLE: string; +export const TEXT_APPEND_TOOLTIP: string; +export const TEXT_APPEND_VARIABLE: string; +export const TEXT_CHANGECASE_HELPURL: string; +export const TEXT_CHANGECASE_OPERATOR_LOWERCASE: string; +export const TEXT_CHANGECASE_OPERATOR_TITLECASE: string; +export const TEXT_CHANGECASE_OPERATOR_UPPERCASE: string; +export const TEXT_CHANGECASE_TOOLTIP: string; +export const TEXT_CHARAT_FIRST: string; +export const TEXT_CHARAT_FROM_END: string; +export const TEXT_CHARAT_FROM_START: string; +export const TEXT_CHARAT_HELPURL: string; +export const TEXT_CHARAT_LAST: string; +export const TEXT_CHARAT_RANDOM: string; +export const TEXT_CHARAT_TAIL: string; +export const TEXT_CHARAT_TITLE: string; +export const TEXT_CHARAT_TOOLTIP: string; +export const TEXT_COUNT_HELPURL: string; +export const TEXT_COUNT_MESSAGE0: string; +export const TEXT_COUNT_TOOLTIP: string; +export const TEXT_CREATE_JOIN_ITEM_TITLE_ITEM: string; +export const TEXT_CREATE_JOIN_ITEM_TOOLTIP: string; +export const TEXT_CREATE_JOIN_TITLE_JOIN: string; +export const TEXT_CREATE_JOIN_TOOLTIP: string; +export const TEXT_GET_SUBSTRING_END_FROM_END: string; +export const TEXT_GET_SUBSTRING_END_FROM_START: string; +export const TEXT_GET_SUBSTRING_END_LAST: string; +export const TEXT_GET_SUBSTRING_HELPURL: string; +export const TEXT_GET_SUBSTRING_INPUT_IN_TEXT: string; +export const TEXT_GET_SUBSTRING_START_FIRST: string; +export const TEXT_GET_SUBSTRING_START_FROM_END: string; +export const TEXT_GET_SUBSTRING_START_FROM_START: string; +export const TEXT_GET_SUBSTRING_TAIL: string; +export const TEXT_GET_SUBSTRING_TOOLTIP: string; +export const TEXT_INDEXOF_HELPURL: string; +export const TEXT_INDEXOF_OPERATOR_FIRST: string; +export const TEXT_INDEXOF_OPERATOR_LAST: string; +export const TEXT_INDEXOF_TITLE: string; +export const TEXT_INDEXOF_TOOLTIP: string; +export const TEXT_ISEMPTY_HELPURL: string; +export const TEXT_ISEMPTY_TITLE: string; +export const TEXT_ISEMPTY_TOOLTIP: string; +export const TEXT_JOIN_HELPURL: string; +export const TEXT_JOIN_TITLE_CREATEWITH: string; +export const TEXT_JOIN_TOOLTIP: string; +export const TEXT_LENGTH_HELPURL: string; +export const TEXT_LENGTH_TITLE: string; +export const TEXT_LENGTH_TOOLTIP: string; +export const TEXT_PRINT_HELPURL: string; +export const TEXT_PRINT_TITLE: string; +export const TEXT_PRINT_TOOLTIP: string; +export const TEXT_PROMPT_HELPURL: string; +export const TEXT_PROMPT_TOOLTIP_NUMBER: string; +export const TEXT_PROMPT_TOOLTIP_TEXT: string; +export const TEXT_PROMPT_TYPE_NUMBER: string; +export const TEXT_PROMPT_TYPE_TEXT: string; +export const TEXT_REPLACE_HELPURL: string; +export const TEXT_REPLACE_MESSAGE0: string; +export const TEXT_REPLACE_TOOLTIP: string; +export const TEXT_REVERSE_HELPURL: string; +export const TEXT_REVERSE_MESSAGE0: string; +export const TEXT_REVERSE_TOOLTIP: string; +export const TEXT_TEXT_HELPURL: string; +export const TEXT_TEXT_TOOLTIP: string; +export const TEXT_TRIM_HELPURL: string; +export const TEXT_TRIM_OPERATOR_BOTH: string; +export const TEXT_TRIM_OPERATOR_LEFT: string; +export const TEXT_TRIM_OPERATOR_RIGHT: string; +export const TEXT_TRIM_TOOLTIP: string; +export const TODAY: string; +export const UNDO: string; +export const UNNAMED_KEY: string; +export const VARIABLES_DEFAULT_NAME: string; +export const VARIABLES_DYNAMIC_HUE: string; +export const VARIABLES_GET_CREATE_SET: string; +export const VARIABLES_GET_HELPURL: string; +export const VARIABLES_GET_TOOLTIP: string; +export const VARIABLES_HUE: string; +export const VARIABLES_SET: string; +export const VARIABLES_SET_CREATE_GET: string; +export const VARIABLES_SET_HELPURL: string; +export const VARIABLES_SET_TOOLTIP: string; +export const VARIABLE_ALREADY_EXISTS: string; +export const VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE: string; +export const WORKSPACE_ARIA_LABEL: string; +export const WORKSPACE_COMMENT_DEFAULT_TEXT: string; diff --git a/typings/msg/my.d.ts b/typings/msg/my.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/my.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/mzn.d.ts b/typings/msg/mzn.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/mzn.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/nb.d.ts b/typings/msg/nb.d.ts index 42aaa1b25..5f2d13710 100644 --- a/typings/msg/nb.d.ts +++ b/typings/msg/nb.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly nb locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ne.d.ts b/typings/msg/ne.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ne.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/nl.d.ts b/typings/msg/nl.d.ts index 5d383fb0c..5f2d13710 100644 --- a/typings/msg/nl.d.ts +++ b/typings/msg/nl.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly nl locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/oc.d.ts b/typings/msg/oc.d.ts index f8eabb76e..5f2d13710 100644 --- a/typings/msg/oc.d.ts +++ b/typings/msg/oc.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly oc locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/olo.d.ts b/typings/msg/olo.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/olo.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/pa.d.ts b/typings/msg/pa.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/pa.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/pl.d.ts b/typings/msg/pl.d.ts index 957f3820d..5f2d13710 100644 --- a/typings/msg/pl.d.ts +++ b/typings/msg/pl.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly pl locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/pms.d.ts b/typings/msg/pms.d.ts index 35df33e31..5f2d13710 100644 --- a/typings/msg/pms.d.ts +++ b/typings/msg/pms.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly pms locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ps.d.ts b/typings/msg/ps.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ps.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/pt-br.d.ts b/typings/msg/pt-br.d.ts index 065d639cd..5f2d13710 100644 --- a/typings/msg/pt-br.d.ts +++ b/typings/msg/pt-br.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly pt-br locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/pt.d.ts b/typings/msg/pt.d.ts index f89879cad..5f2d13710 100644 --- a/typings/msg/pt.d.ts +++ b/typings/msg/pt.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly pt locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ro.d.ts b/typings/msg/ro.d.ts index f2183fa49..5f2d13710 100644 --- a/typings/msg/ro.d.ts +++ b/typings/msg/ro.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ro locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ru.d.ts b/typings/msg/ru.d.ts index 95ffc8300..5f2d13710 100644 --- a/typings/msg/ru.d.ts +++ b/typings/msg/ru.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ru locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sc.d.ts b/typings/msg/sc.d.ts index 2d5afcbde..5f2d13710 100644 --- a/typings/msg/sc.d.ts +++ b/typings/msg/sc.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sc locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sco.d.ts b/typings/msg/sco.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/sco.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/sd.d.ts b/typings/msg/sd.d.ts index cafc97893..5f2d13710 100644 --- a/typings/msg/sd.d.ts +++ b/typings/msg/sd.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sd locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/shn.d.ts b/typings/msg/shn.d.ts index 07a531329..5f2d13710 100644 --- a/typings/msg/shn.d.ts +++ b/typings/msg/shn.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly shn locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/si.d.ts b/typings/msg/si.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/si.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/sk.d.ts b/typings/msg/sk.d.ts index 3c26e48bc..5f2d13710 100644 --- a/typings/msg/sk.d.ts +++ b/typings/msg/sk.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sk locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/skr-arab.d.ts b/typings/msg/skr-arab.d.ts index 4ddb30fd8..5f2d13710 100644 --- a/typings/msg/skr-arab.d.ts +++ b/typings/msg/skr-arab.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly skr-arab locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sl.d.ts b/typings/msg/sl.d.ts index 51f1f568f..5f2d13710 100644 --- a/typings/msg/sl.d.ts +++ b/typings/msg/sl.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sl locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/smn.d.ts b/typings/msg/smn.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/smn.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/sq.d.ts b/typings/msg/sq.d.ts index e7997e2f4..5f2d13710 100644 --- a/typings/msg/sq.d.ts +++ b/typings/msg/sq.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sq locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sr-latn.d.ts b/typings/msg/sr-latn.d.ts index f9bf0645e..5f2d13710 100644 --- a/typings/msg/sr-latn.d.ts +++ b/typings/msg/sr-latn.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sr-latn locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sr.d.ts b/typings/msg/sr.d.ts index 7d6ea16a5..5f2d13710 100644 --- a/typings/msg/sr.d.ts +++ b/typings/msg/sr.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sr locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sv.d.ts b/typings/msg/sv.d.ts index 11018f261..5f2d13710 100644 --- a/typings/msg/sv.d.ts +++ b/typings/msg/sv.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly sv locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/sw.d.ts b/typings/msg/sw.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/sw.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/ta.d.ts b/typings/msg/ta.d.ts index d74bd3c48..5f2d13710 100644 --- a/typings/msg/ta.d.ts +++ b/typings/msg/ta.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ta locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/tcy.d.ts b/typings/msg/tcy.d.ts index 64278359d..5f2d13710 100644 --- a/typings/msg/tcy.d.ts +++ b/typings/msg/tcy.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly tcy locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/te.d.ts b/typings/msg/te.d.ts index c7acfb0c8..5f2d13710 100644 --- a/typings/msg/te.d.ts +++ b/typings/msg/te.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly te locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/th.d.ts b/typings/msg/th.d.ts index bf77eae8b..5f2d13710 100644 --- a/typings/msg/th.d.ts +++ b/typings/msg/th.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly th locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ti.d.ts b/typings/msg/ti.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/ti.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/tl.d.ts b/typings/msg/tl.d.ts index 0d51a38f3..5f2d13710 100644 --- a/typings/msg/tl.d.ts +++ b/typings/msg/tl.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly tl locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/tlh.d.ts b/typings/msg/tlh.d.ts index 5eb07eb8d..5f2d13710 100644 --- a/typings/msg/tlh.d.ts +++ b/typings/msg/tlh.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly tlh locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/tr.d.ts b/typings/msg/tr.d.ts index 2b1a29a02..5f2d13710 100644 --- a/typings/msg/tr.d.ts +++ b/typings/msg/tr.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly tr locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ug-arab.d.ts b/typings/msg/ug-arab.d.ts index f9445a560..5f2d13710 100644 --- a/typings/msg/ug-arab.d.ts +++ b/typings/msg/ug-arab.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ug-arab locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/uk.d.ts b/typings/msg/uk.d.ts index 1250e6cb1..5f2d13710 100644 --- a/typings/msg/uk.d.ts +++ b/typings/msg/uk.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly uk locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/ur.d.ts b/typings/msg/ur.d.ts index b944aad7f..5f2d13710 100644 --- a/typings/msg/ur.d.ts +++ b/typings/msg/ur.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly ur locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/uz.d.ts b/typings/msg/uz.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/uz.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/vi.d.ts b/typings/msg/vi.d.ts index 86a0e7d6f..5f2d13710 100644 --- a/typings/msg/vi.d.ts +++ b/typings/msg/vi.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly vi locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/xmf.d.ts b/typings/msg/xmf.d.ts index e230058ac..5f2d13710 100644 --- a/typings/msg/xmf.d.ts +++ b/typings/msg/xmf.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly xmf locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/yo.d.ts b/typings/msg/yo.d.ts index 29120ab8d..5f2d13710 100644 --- a/typings/msg/yo.d.ts +++ b/typings/msg/yo.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly yo locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/yue.d.ts b/typings/msg/yue.d.ts new file mode 100644 index 000000000..5f2d13710 --- /dev/null +++ b/typings/msg/yue.d.ts @@ -0,0 +1,8 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './msg'; + diff --git a/typings/msg/zgh.d.ts b/typings/msg/zgh.d.ts index be1d163ea..5f2d13710 100644 --- a/typings/msg/zgh.d.ts +++ b/typings/msg/zgh.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly zgh locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/zh-hans.d.ts b/typings/msg/zh-hans.d.ts index 938f55356..5f2d13710 100644 --- a/typings/msg/zh-hans.d.ts +++ b/typings/msg/zh-hans.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly zh-hans locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg'; diff --git a/typings/msg/zh-hant.d.ts b/typings/msg/zh-hant.d.ts index f2917aac6..5f2d13710 100644 --- a/typings/msg/zh-hant.d.ts +++ b/typings/msg/zh-hant.d.ts @@ -1,16 +1,8 @@ /** * @license - * Copyright 2020 Google LLC + * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -/** - * @fileoverview Type definitions for the Blockly zh-hant locale. - * @author samelh@google.com (Sam El-Husseini) - */ - -/// - -import BlocklyMsg = Blockly.Msg; -export = BlocklyMsg; +export * from './msg';