Brak opisu

token-list.js 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. this["wp"] = this["wp"] || {}; this["wp"]["tokenList"] =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = "hwXU");
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ({
  89. /***/ "YLtl":
  90. /***/ (function(module, exports) {
  91. (function() { module.exports = window["lodash"]; }());
  92. /***/ }),
  93. /***/ "hwXU":
  94. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  95. "use strict";
  96. __webpack_require__.r(__webpack_exports__);
  97. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TokenList; });
  98. /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("YLtl");
  99. /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
  100. /**
  101. * External dependencies
  102. */
  103. /**
  104. * A set of tokens.
  105. *
  106. * @see https://dom.spec.whatwg.org/#domtokenlist
  107. */
  108. class TokenList {
  109. /**
  110. * Constructs a new instance of TokenList.
  111. *
  112. * @param {string} initialValue Initial value to assign.
  113. */
  114. constructor(initialValue = '') {
  115. this.value = initialValue; // Disable reason: These are type hints on the class.
  116. /* eslint-disable no-unused-expressions */
  117. /** @type {string} */
  118. this._currentValue;
  119. /** @type {string[]} */
  120. this._valueAsArray;
  121. /* eslint-enable no-unused-expressions */
  122. }
  123. /**
  124. * @param {Parameters<Array<string>['entries']>} args
  125. */
  126. entries(...args) {
  127. return this._valueAsArray.entries(...args);
  128. }
  129. /**
  130. * @param {Parameters<Array<string>['forEach']>} args
  131. */
  132. forEach(...args) {
  133. return this._valueAsArray.forEach(...args);
  134. }
  135. /**
  136. * @param {Parameters<Array<string>['keys']>} args
  137. */
  138. keys(...args) {
  139. return this._valueAsArray.keys(...args);
  140. }
  141. /**
  142. * @param {Parameters<Array<string>['values']>} args
  143. */
  144. values(...args) {
  145. return this._valueAsArray.values(...args);
  146. }
  147. /**
  148. * Returns the associated set as string.
  149. *
  150. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-value
  151. *
  152. * @return {string} Token set as string.
  153. */
  154. get value() {
  155. return this._currentValue;
  156. }
  157. /**
  158. * Replaces the associated set with a new string value.
  159. *
  160. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-value
  161. *
  162. * @param {string} value New token set as string.
  163. */
  164. set value(value) {
  165. value = String(value);
  166. this._valueAsArray = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["uniq"])(Object(lodash__WEBPACK_IMPORTED_MODULE_0__["compact"])(value.split(/\s+/g)));
  167. this._currentValue = this._valueAsArray.join(' ');
  168. }
  169. /**
  170. * Returns the number of tokens.
  171. *
  172. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-length
  173. *
  174. * @return {number} Number of tokens.
  175. */
  176. get length() {
  177. return this._valueAsArray.length;
  178. }
  179. /**
  180. * Returns the stringified form of the TokenList.
  181. *
  182. * @see https://dom.spec.whatwg.org/#DOMTokenList-stringification-behavior
  183. * @see https://www.ecma-international.org/ecma-262/9.0/index.html#sec-tostring
  184. *
  185. * @return {string} Token set as string.
  186. */
  187. toString() {
  188. return this.value;
  189. }
  190. /**
  191. * Returns an iterator for the TokenList, iterating items of the set.
  192. *
  193. * @see https://dom.spec.whatwg.org/#domtokenlist
  194. *
  195. * @return {IterableIterator<string>} TokenList iterator.
  196. */
  197. *[Symbol.iterator]() {
  198. return yield* this._valueAsArray;
  199. }
  200. /**
  201. * Returns the token with index `index`.
  202. *
  203. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-item
  204. *
  205. * @param {number} index Index at which to return token.
  206. *
  207. * @return {string|undefined} Token at index.
  208. */
  209. item(index) {
  210. return this._valueAsArray[index];
  211. }
  212. /**
  213. * Returns true if `token` is present, and false otherwise.
  214. *
  215. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-contains
  216. *
  217. * @param {string} item Token to test.
  218. *
  219. * @return {boolean} Whether token is present.
  220. */
  221. contains(item) {
  222. return this._valueAsArray.indexOf(item) !== -1;
  223. }
  224. /**
  225. * Adds all arguments passed, except those already present.
  226. *
  227. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-add
  228. *
  229. * @param {...string} items Items to add.
  230. */
  231. add(...items) {
  232. this.value += ' ' + items.join(' ');
  233. }
  234. /**
  235. * Removes arguments passed, if they are present.
  236. *
  237. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-remove
  238. *
  239. * @param {...string} items Items to remove.
  240. */
  241. remove(...items) {
  242. this.value = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["without"])(this._valueAsArray, ...items).join(' ');
  243. }
  244. /**
  245. * If `force` is not given, "toggles" `token`, removing it if it’s present
  246. * and adding it if it’s not present. If `force` is true, adds token (same
  247. * as add()). If force is false, removes token (same as remove()). Returns
  248. * true if `token` is now present, and false otherwise.
  249. *
  250. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-toggle
  251. *
  252. * @param {string} token Token to toggle.
  253. * @param {boolean} [force] Presence to force.
  254. *
  255. * @return {boolean} Whether token is present after toggle.
  256. */
  257. toggle(token, force) {
  258. if (undefined === force) {
  259. force = !this.contains(token);
  260. }
  261. if (force) {
  262. this.add(token);
  263. } else {
  264. this.remove(token);
  265. }
  266. return force;
  267. }
  268. /**
  269. * Replaces `token` with `newToken`. Returns true if `token` was replaced
  270. * with `newToken`, and false otherwise.
  271. *
  272. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-replace
  273. *
  274. * @param {string} token Token to replace with `newToken`.
  275. * @param {string} newToken Token to use in place of `token`.
  276. *
  277. * @return {boolean} Whether replacement occurred.
  278. */
  279. replace(token, newToken) {
  280. if (!this.contains(token)) {
  281. return false;
  282. }
  283. this.remove(token);
  284. this.add(newToken);
  285. return true;
  286. }
  287. /**
  288. * Returns true if `token` is in the associated attribute’s supported
  289. * tokens. Returns false otherwise.
  290. *
  291. * Always returns `true` in this implementation.
  292. *
  293. * @see https://dom.spec.whatwg.org/#dom-domtokenlist-supports
  294. *
  295. * @return {boolean} Whether token is supported.
  296. */
  297. supports() {
  298. return true;
  299. }
  300. }
  301. /***/ })
  302. /******/ })["default"];