Files
blockly/core/utils/idgenerator.js
Neil Fraser 90b3f75d82 Remove @author tags (#5601)
Our files are up to a decade old, and have churned so much, that the initial author of the file no longer has much meaning.

Furthermore, this will encourage developers to post to the developer group, rather than emailing Googlers (usually me) directly.
2021-10-15 09:50:46 -07:00

84 lines
2.1 KiB
JavaScript

/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Generators for unique IDs.
*/
'use strict';
/**
* Generators for unique IDs.
* @namespace Blockly.utils.idGenerator
*/
goog.module('Blockly.utils.idGenerator');
/**
* Namespace object for internal implementations we want to be able to
* stub in tests.
* @ignore
*/
const internal = {};
exports.TEST_ONLY = internal;
/**
* Next unique ID to use.
* @type {number}
*/
let nextId = 0;
/**
* Generate the next unique element IDs.
* IDs are compatible with the HTML4 id attribute restrictions:
* Use only ASCII letters, digits, '_', '-' and '.'
*
* For UUIDs use genUid (below) instead; this ID generator should
* primarily be used for IDs that end up in the DOM.
*
* @return {string} The next unique identifier.
* @alias Blockly.utils.idGenerator.getNextUniqueId
*/
const getNextUniqueId = function() {
return 'blockly-' + (nextId++).toString(36);
};
exports.getNextUniqueId = getNextUniqueId;
/**
* Legal characters for the universally unique IDs. Should be all on
* a US keyboard. No characters that conflict with XML or JSON.
* Requests to remove additional 'problematic' characters from this
* soup will be denied. That's your failure to properly escape in
* your own environment. Issues #251, #625, #682, #1304.
*/
const soup = '!#$%()*+,-./:;=?@[]^_`{|}~' +
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
/**
* Generate a random unique ID. This should be globally unique.
* 87 characters ^ 20 length > 128 bits (better than a UUID).
* @return {string} A globally unique ID string.
*/
internal.genUid = function() {
const length = 20;
const soupLength = soup.length;
const id = [];
for (let i = 0; i < length; i++) {
id[i] = soup.charAt(Math.random() * soupLength);
}
return id.join('');
};
/**
* Generate a random unique ID.
* @see internal.genUid
* @return {string} A globally unique ID string.
* @alias Blockly.utils.idGenerator.genUid
*/
const genUid = function() {
return internal.genUid();
};
exports.genUid = genUid;