Styles.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. "use strict";
  2. var __values = (this && this.__values) || function(o) {
  3. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  4. if (m) return m.call(o);
  5. if (o && typeof o.length === "number") return {
  6. next: function () {
  7. if (o && i >= o.length) o = void 0;
  8. return { value: o && o[i++], done: !o };
  9. }
  10. };
  11. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  12. };
  13. var __read = (this && this.__read) || function (o, n) {
  14. var m = typeof Symbol === "function" && o[Symbol.iterator];
  15. if (!m) return o;
  16. var i = m.call(o), r, ar = [], e;
  17. try {
  18. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  19. }
  20. catch (error) { e = { error: error }; }
  21. finally {
  22. try {
  23. if (r && !r.done && (m = i["return"])) m.call(i);
  24. }
  25. finally { if (e) throw e.error; }
  26. }
  27. return ar;
  28. };
  29. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  30. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  31. if (ar || !(i in from)) {
  32. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  33. ar[i] = from[i];
  34. }
  35. }
  36. return to.concat(ar || Array.prototype.slice.call(from));
  37. };
  38. Object.defineProperty(exports, "__esModule", { value: true });
  39. exports.Styles = void 0;
  40. var TRBL = ['top', 'right', 'bottom', 'left'];
  41. var WSC = ['width', 'style', 'color'];
  42. function splitSpaces(text) {
  43. var parts = text.split(/((?:'[^']*'|"[^"]*"|,[\s\n]|[^\s\n])*)/g);
  44. var split = [];
  45. while (parts.length > 1) {
  46. parts.shift();
  47. split.push(parts.shift());
  48. }
  49. return split;
  50. }
  51. function splitTRBL(name) {
  52. var e_1, _a;
  53. var parts = splitSpaces(this.styles[name]);
  54. if (parts.length === 0) {
  55. parts.push('');
  56. }
  57. if (parts.length === 1) {
  58. parts.push(parts[0]);
  59. }
  60. if (parts.length === 2) {
  61. parts.push(parts[0]);
  62. }
  63. if (parts.length === 3) {
  64. parts.push(parts[1]);
  65. }
  66. try {
  67. for (var _b = __values(Styles.connect[name].children), _c = _b.next(); !_c.done; _c = _b.next()) {
  68. var child = _c.value;
  69. this.setStyle(this.childName(name, child), parts.shift());
  70. }
  71. }
  72. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  73. finally {
  74. try {
  75. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  76. }
  77. finally { if (e_1) throw e_1.error; }
  78. }
  79. }
  80. function combineTRBL(name) {
  81. var e_2, _a;
  82. var children = Styles.connect[name].children;
  83. var parts = [];
  84. try {
  85. for (var children_1 = __values(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {
  86. var child = children_1_1.value;
  87. var part = this.styles[name + '-' + child];
  88. if (!part) {
  89. delete this.styles[name];
  90. return;
  91. }
  92. parts.push(part);
  93. }
  94. }
  95. catch (e_2_1) { e_2 = { error: e_2_1 }; }
  96. finally {
  97. try {
  98. if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);
  99. }
  100. finally { if (e_2) throw e_2.error; }
  101. }
  102. if (parts[3] === parts[1]) {
  103. parts.pop();
  104. if (parts[2] === parts[0]) {
  105. parts.pop();
  106. if (parts[1] === parts[0]) {
  107. parts.pop();
  108. }
  109. }
  110. }
  111. this.styles[name] = parts.join(' ');
  112. }
  113. function splitSame(name) {
  114. var e_3, _a;
  115. try {
  116. for (var _b = __values(Styles.connect[name].children), _c = _b.next(); !_c.done; _c = _b.next()) {
  117. var child = _c.value;
  118. this.setStyle(this.childName(name, child), this.styles[name]);
  119. }
  120. }
  121. catch (e_3_1) { e_3 = { error: e_3_1 }; }
  122. finally {
  123. try {
  124. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  125. }
  126. finally { if (e_3) throw e_3.error; }
  127. }
  128. }
  129. function combineSame(name) {
  130. var e_4, _a;
  131. var children = __spreadArray([], __read(Styles.connect[name].children), false);
  132. var value = this.styles[this.childName(name, children.shift())];
  133. try {
  134. for (var children_2 = __values(children), children_2_1 = children_2.next(); !children_2_1.done; children_2_1 = children_2.next()) {
  135. var child = children_2_1.value;
  136. if (this.styles[this.childName(name, child)] !== value) {
  137. delete this.styles[name];
  138. return;
  139. }
  140. }
  141. }
  142. catch (e_4_1) { e_4 = { error: e_4_1 }; }
  143. finally {
  144. try {
  145. if (children_2_1 && !children_2_1.done && (_a = children_2.return)) _a.call(children_2);
  146. }
  147. finally { if (e_4) throw e_4.error; }
  148. }
  149. this.styles[name] = value;
  150. }
  151. var BORDER = {
  152. width: /^(?:[\d.]+(?:[a-z]+)|thin|medium|thick|inherit|initial|unset)$/,
  153. style: /^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|inherit|initial|unset)$/
  154. };
  155. function splitWSC(name) {
  156. var e_5, _a, e_6, _b;
  157. var parts = { width: '', style: '', color: '' };
  158. try {
  159. for (var _c = __values(splitSpaces(this.styles[name])), _d = _c.next(); !_d.done; _d = _c.next()) {
  160. var part = _d.value;
  161. if (part.match(BORDER.width) && parts.width === '') {
  162. parts.width = part;
  163. }
  164. else if (part.match(BORDER.style) && parts.style === '') {
  165. parts.style = part;
  166. }
  167. else {
  168. parts.color = part;
  169. }
  170. }
  171. }
  172. catch (e_5_1) { e_5 = { error: e_5_1 }; }
  173. finally {
  174. try {
  175. if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
  176. }
  177. finally { if (e_5) throw e_5.error; }
  178. }
  179. try {
  180. for (var _e = __values(Styles.connect[name].children), _f = _e.next(); !_f.done; _f = _e.next()) {
  181. var child = _f.value;
  182. this.setStyle(this.childName(name, child), parts[child]);
  183. }
  184. }
  185. catch (e_6_1) { e_6 = { error: e_6_1 }; }
  186. finally {
  187. try {
  188. if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
  189. }
  190. finally { if (e_6) throw e_6.error; }
  191. }
  192. }
  193. function combineWSC(name) {
  194. var e_7, _a;
  195. var parts = [];
  196. try {
  197. for (var _b = __values(Styles.connect[name].children), _c = _b.next(); !_c.done; _c = _b.next()) {
  198. var child = _c.value;
  199. var value = this.styles[this.childName(name, child)];
  200. if (value) {
  201. parts.push(value);
  202. }
  203. }
  204. }
  205. catch (e_7_1) { e_7 = { error: e_7_1 }; }
  206. finally {
  207. try {
  208. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  209. }
  210. finally { if (e_7) throw e_7.error; }
  211. }
  212. if (parts.length) {
  213. this.styles[name] = parts.join(' ');
  214. }
  215. else {
  216. delete this.styles[name];
  217. }
  218. }
  219. var FONT = {
  220. style: /^(?:normal|italic|oblique|inherit|initial|unset)$/,
  221. variant: new RegExp('^(?:' +
  222. ['normal|none',
  223. 'inherit|initial|unset',
  224. 'common-ligatures|no-common-ligatures',
  225. 'discretionary-ligatures|no-discretionary-ligatures',
  226. 'historical-ligatures|no-historical-ligatures',
  227. 'contextual|no-contextual',
  228. '(?:stylistic|character-variant|swash|ornaments|annotation)\\([^)]*\\)',
  229. 'small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps',
  230. 'lining-nums|oldstyle-nums|proportional-nums|tabular-nums',
  231. 'diagonal-fractions|stacked-fractions',
  232. 'ordinal|slashed-zero',
  233. 'jis78|jis83|jis90|jis04|simplified|traditional',
  234. 'full-width|proportional-width',
  235. 'ruby'].join('|') + ')$'),
  236. weight: /^(?:normal|bold|bolder|lighter|[1-9]00|inherit|initial|unset)$/,
  237. stretch: new RegExp('^(?:' +
  238. ['normal',
  239. '(?:(?:ultra|extra|semi)-)?condensed',
  240. '(?:(?:semi|extra|ulta)-)?expanded',
  241. 'inherit|initial|unset'].join('|') + ')$'),
  242. size: new RegExp('^(?:' +
  243. ['xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller',
  244. '[\d.]+%|[\d.]+[a-z]+',
  245. 'inherit|initial|unset'].join('|') + ')' +
  246. '(?:\/(?:normal|[\d.\+](?:%|[a-z]+)?))?$')
  247. };
  248. function splitFont(name) {
  249. var e_8, _a, e_9, _b;
  250. var parts = splitSpaces(this.styles[name]);
  251. var value = {
  252. style: '', variant: [], weight: '', stretch: '',
  253. size: '', family: '', 'line-height': ''
  254. };
  255. try {
  256. for (var parts_1 = __values(parts), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) {
  257. var part = parts_1_1.value;
  258. value.family = part;
  259. try {
  260. for (var _c = (e_9 = void 0, __values(Object.keys(FONT))), _d = _c.next(); !_d.done; _d = _c.next()) {
  261. var name_1 = _d.value;
  262. if ((Array.isArray(value[name_1]) || value[name_1] === '') && part.match(FONT[name_1])) {
  263. if (name_1 === 'size') {
  264. var _e = __read(part.split(/\//), 2), size = _e[0], height = _e[1];
  265. value[name_1] = size;
  266. if (height) {
  267. value['line-height'] = height;
  268. }
  269. }
  270. else if (value.size === '') {
  271. if (Array.isArray(value[name_1])) {
  272. value[name_1].push(part);
  273. }
  274. else {
  275. value[name_1] = part;
  276. }
  277. }
  278. }
  279. }
  280. }
  281. catch (e_9_1) { e_9 = { error: e_9_1 }; }
  282. finally {
  283. try {
  284. if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
  285. }
  286. finally { if (e_9) throw e_9.error; }
  287. }
  288. }
  289. }
  290. catch (e_8_1) { e_8 = { error: e_8_1 }; }
  291. finally {
  292. try {
  293. if (parts_1_1 && !parts_1_1.done && (_a = parts_1.return)) _a.call(parts_1);
  294. }
  295. finally { if (e_8) throw e_8.error; }
  296. }
  297. saveFontParts(name, value);
  298. delete this.styles[name];
  299. }
  300. function saveFontParts(name, value) {
  301. var e_10, _a;
  302. try {
  303. for (var _b = __values(Styles.connect[name].children), _c = _b.next(); !_c.done; _c = _b.next()) {
  304. var child = _c.value;
  305. var cname = this.childName(name, child);
  306. if (Array.isArray(value[child])) {
  307. var values = value[child];
  308. if (values.length) {
  309. this.styles[cname] = values.join(' ');
  310. }
  311. }
  312. else if (value[child] !== '') {
  313. this.styles[cname] = value[child];
  314. }
  315. }
  316. }
  317. catch (e_10_1) { e_10 = { error: e_10_1 }; }
  318. finally {
  319. try {
  320. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  321. }
  322. finally { if (e_10) throw e_10.error; }
  323. }
  324. }
  325. function combineFont(_name) { }
  326. var Styles = (function () {
  327. function Styles(cssText) {
  328. if (cssText === void 0) { cssText = ''; }
  329. this.parse(cssText);
  330. }
  331. Object.defineProperty(Styles.prototype, "cssText", {
  332. get: function () {
  333. var e_11, _a;
  334. var styles = [];
  335. try {
  336. for (var _b = __values(Object.keys(this.styles)), _c = _b.next(); !_c.done; _c = _b.next()) {
  337. var name_2 = _c.value;
  338. var parent_1 = this.parentName(name_2);
  339. if (!this.styles[parent_1]) {
  340. styles.push(name_2 + ': ' + this.styles[name_2] + ';');
  341. }
  342. }
  343. }
  344. catch (e_11_1) { e_11 = { error: e_11_1 }; }
  345. finally {
  346. try {
  347. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  348. }
  349. finally { if (e_11) throw e_11.error; }
  350. }
  351. return styles.join(' ');
  352. },
  353. enumerable: false,
  354. configurable: true
  355. });
  356. Styles.prototype.set = function (name, value) {
  357. name = this.normalizeName(name);
  358. this.setStyle(name, value);
  359. if (Styles.connect[name] && !Styles.connect[name].combine) {
  360. this.combineChildren(name);
  361. delete this.styles[name];
  362. }
  363. while (name.match(/-/)) {
  364. name = this.parentName(name);
  365. if (!Styles.connect[name])
  366. break;
  367. Styles.connect[name].combine.call(this, name);
  368. }
  369. };
  370. Styles.prototype.get = function (name) {
  371. name = this.normalizeName(name);
  372. return (this.styles.hasOwnProperty(name) ? this.styles[name] : '');
  373. };
  374. Styles.prototype.setStyle = function (name, value) {
  375. this.styles[name] = value;
  376. if (Styles.connect[name] && Styles.connect[name].children) {
  377. Styles.connect[name].split.call(this, name);
  378. }
  379. if (value === '') {
  380. delete this.styles[name];
  381. }
  382. };
  383. Styles.prototype.combineChildren = function (name) {
  384. var e_12, _a;
  385. var parent = this.parentName(name);
  386. try {
  387. for (var _b = __values(Styles.connect[name].children), _c = _b.next(); !_c.done; _c = _b.next()) {
  388. var child = _c.value;
  389. var cname = this.childName(parent, child);
  390. Styles.connect[cname].combine.call(this, cname);
  391. }
  392. }
  393. catch (e_12_1) { e_12 = { error: e_12_1 }; }
  394. finally {
  395. try {
  396. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  397. }
  398. finally { if (e_12) throw e_12.error; }
  399. }
  400. };
  401. Styles.prototype.parentName = function (name) {
  402. var parent = name.replace(/-[^-]*$/, '');
  403. return (name === parent ? '' : parent);
  404. };
  405. Styles.prototype.childName = function (name, child) {
  406. if (child.match(/-/)) {
  407. return child;
  408. }
  409. if (Styles.connect[name] && !Styles.connect[name].combine) {
  410. child += name.replace(/.*-/, '-');
  411. name = this.parentName(name);
  412. }
  413. return name + '-' + child;
  414. };
  415. Styles.prototype.normalizeName = function (name) {
  416. return name.replace(/[A-Z]/g, function (c) { return '-' + c.toLowerCase(); });
  417. };
  418. Styles.prototype.parse = function (cssText) {
  419. if (cssText === void 0) { cssText = ''; }
  420. var PATTERN = this.constructor.pattern;
  421. this.styles = {};
  422. var parts = cssText.replace(PATTERN.comment, '').split(PATTERN.style);
  423. while (parts.length > 1) {
  424. var _a = __read(parts.splice(0, 3), 3), space = _a[0], name_3 = _a[1], value = _a[2];
  425. if (space.match(/[^\s\n]/))
  426. return;
  427. this.set(name_3, value);
  428. }
  429. };
  430. Styles.pattern = {
  431. style: /([-a-z]+)[\s\n]*:[\s\n]*((?:'[^']*'|"[^"]*"|\n|.)*?)[\s\n]*(?:;|$)/g,
  432. comment: /\/\*[^]*?\*\//g
  433. };
  434. Styles.connect = {
  435. padding: {
  436. children: TRBL,
  437. split: splitTRBL,
  438. combine: combineTRBL
  439. },
  440. border: {
  441. children: TRBL,
  442. split: splitSame,
  443. combine: combineSame
  444. },
  445. 'border-top': {
  446. children: WSC,
  447. split: splitWSC,
  448. combine: combineWSC
  449. },
  450. 'border-right': {
  451. children: WSC,
  452. split: splitWSC,
  453. combine: combineWSC
  454. },
  455. 'border-bottom': {
  456. children: WSC,
  457. split: splitWSC,
  458. combine: combineWSC
  459. },
  460. 'border-left': {
  461. children: WSC,
  462. split: splitWSC,
  463. combine: combineWSC
  464. },
  465. 'border-width': {
  466. children: TRBL,
  467. split: splitTRBL,
  468. combine: null
  469. },
  470. 'border-style': {
  471. children: TRBL,
  472. split: splitTRBL,
  473. combine: null
  474. },
  475. 'border-color': {
  476. children: TRBL,
  477. split: splitTRBL,
  478. combine: null
  479. },
  480. font: {
  481. children: ['style', 'variant', 'weight', 'stretch', 'line-height', 'size', 'family'],
  482. split: splitFont,
  483. combine: combineFont
  484. }
  485. };
  486. return Styles;
  487. }());
  488. exports.Styles = Styles;
  489. //# sourceMappingURL=Styles.js.map