From eb4b523e664a3b3850a5e9432901aad7d3cb158b Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Sun, 6 Nov 2022 12:36:14 -0600 Subject: [PATCH] chore: merge main (#4714) --- .pnp.cjs | 47 ++++++ ...nutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip | Bin 0 -> 14253 bytes ...mojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip | Bin 0 -> 17788 bytes ...estree-npm-1.0.0-eddde5b631-910d97fb70.zip | Bin 0 -> 6839 bytes client/agenda/AgendaMobileBar.vue | 2 +- client/components/ChatLog.vue | 70 ++++++++- client/shared/colors.scss | 139 ++++++++++++++++++ client/shared/urls.js | 26 +--- client/shared/urls.json | 9 ++ .../precompile-lodash-templates.js | 28 ++++ docker/scripts/app-rsync-extras.sh | 1 - ietf/dbtemplate/fixtures/nomcom_templates.xml | 4 +- ietf/doc/utils.py | 4 +- ietf/nomcom/utils.py | 4 +- ietf/templates/group/meetings.html | 8 +- ietf/templates/meeting/agenda.html | 14 +- package.json | 2 + vite.config.js | 8 +- yarn.lock | 32 ++++ 19 files changed, 350 insertions(+), 48 deletions(-) create mode 100644 .yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip create mode 100644 .yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip create mode 100644 .yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip create mode 100644 client/shared/colors.scss create mode 100644 client/shared/urls.json create mode 100644 dev/vite-plugins/precompile-lodash-templates.js diff --git a/.pnp.cjs b/.pnp.cjs index eaaaf1f6b..cd7f836b1 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -46,6 +46,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@percy/cli", "npm:1.11.0"],\ ["@percy/cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@popperjs/core", "npm:2.11.6"],\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@twuni/emojify", "npm:1.0.2"],\ ["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@vue/test-utils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.1.0"],\ ["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.2"],\ @@ -2148,6 +2150,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["@rollup/pluginutils", [\ + ["npm:5.0.2", {\ + "packageLocation": "./.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\ + "packageDependencies": [\ + ["@rollup/pluginutils", "npm:5.0.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2", {\ + "packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-ca58d3a074/0/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\ + "packageDependencies": [\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@types/estree", "npm:1.0.0"],\ + ["@types/rollup", null],\ + ["estree-walker", "npm:2.0.2"],\ + ["picomatch", "npm:2.3.1"],\ + ["rollup", null]\ + ],\ + "packagePeers": [\ + "@types/rollup",\ + "rollup"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@sidvind/better-ajv-errors", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/@sidvind-better-ajv-errors-npm-2.0.0-3531bddef9-12b0d87855.zip/node_modules/@sidvind/better-ajv-errors/",\ @@ -2200,6 +2227,24 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["@twuni/emojify", [\ + ["npm:1.0.2", {\ + "packageLocation": "./.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip/node_modules/@twuni/emojify/",\ + "packageDependencies": [\ + ["@twuni/emojify", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/estree", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/istanbul-lib-coverage", [\ ["npm:2.0.4", {\ "packageLocation": "./.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.4-734954bb56-a25d7589ee.zip/node_modules/@types/istanbul-lib-coverage/",\ @@ -8544,6 +8589,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@percy/cli", "npm:1.11.0"],\ ["@percy/cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@popperjs/core", "npm:2.11.6"],\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@twuni/emojify", "npm:1.0.2"],\ ["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@vue/test-utils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.1.0"],\ ["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.2"],\ diff --git a/.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip b/.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip new file mode 100644 index 0000000000000000000000000000000000000000..d898c5035c87d882fdb826768c321c403bd3b59e GIT binary patch literal 14253 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 PAwa3FH=ER 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 literal 0 HcmV?d00001 diff --git a/client/agenda/AgendaMobileBar.vue b/client/agenda/AgendaMobileBar.vue index 423647cdf..201d51794 100644 --- a/client/agenda/AgendaMobileBar.vue +++ b/client/agenda/AgendaMobileBar.vue @@ -31,7 +31,7 @@ import { } from 'naive-ui' import { useAgendaStore } from './store' -import { useSiteStore } from '../shared/store'; +import { useSiteStore } from '../shared/store' import { getUrl } from '../shared/urls' // MESSAGE PROVIDER diff --git a/client/components/ChatLog.vue b/client/components/ChatLog.vue index 779734f91..d393b1866 100644 --- a/client/components/ChatLog.vue +++ b/client/components/ChatLog.vue @@ -22,6 +22,8 @@ diff --git a/client/shared/colors.scss b/client/shared/colors.scss new file mode 100644 index 000000000..e34c459e9 --- /dev/null +++ b/client/shared/colors.scss @@ -0,0 +1,139 @@ +// Bootstrap 5 Color Variables +// Extracted from https://github.com/twbs/bootstrap/blob/main/scss/_variables.scss +// Copyright (c) 2011-2022 Twitter, Inc. +// Copyright (c) 2011-2022 The Bootstrap Authors + +// Tint a color: mix a color with white +@function tint-color($color, $weight) { + @return mix(white, $color, $weight); +} + +// Shade a color: mix a color with black +@function shade-color($color, $weight) { + @return mix(black, $color, $weight); +} + +// Color system + +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; + +$blue: #0d6efd !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #d63384 !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #198754 !default; +$teal: #20c997 !default; +$cyan: #0dcaf0 !default; + +$blue-100: tint-color($blue, 80%) !default; +$blue-200: tint-color($blue, 60%) !default; +$blue-300: tint-color($blue, 40%) !default; +$blue-400: tint-color($blue, 20%) !default; +$blue-500: $blue !default; +$blue-600: shade-color($blue, 20%) !default; +$blue-700: shade-color($blue, 40%) !default; +$blue-800: shade-color($blue, 60%) !default; +$blue-900: shade-color($blue, 80%) !default; + +$indigo-100: tint-color($indigo, 80%) !default; +$indigo-200: tint-color($indigo, 60%) !default; +$indigo-300: tint-color($indigo, 40%) !default; +$indigo-400: tint-color($indigo, 20%) !default; +$indigo-500: $indigo !default; +$indigo-600: shade-color($indigo, 20%) !default; +$indigo-700: shade-color($indigo, 40%) !default; +$indigo-800: shade-color($indigo, 60%) !default; +$indigo-900: shade-color($indigo, 80%) !default; + +$purple-100: tint-color($purple, 80%) !default; +$purple-200: tint-color($purple, 60%) !default; +$purple-300: tint-color($purple, 40%) !default; +$purple-400: tint-color($purple, 20%) !default; +$purple-500: $purple !default; +$purple-600: shade-color($purple, 20%) !default; +$purple-700: shade-color($purple, 40%) !default; +$purple-800: shade-color($purple, 60%) !default; +$purple-900: shade-color($purple, 80%) !default; + +$pink-100: tint-color($pink, 80%) !default; +$pink-200: tint-color($pink, 60%) !default; +$pink-300: tint-color($pink, 40%) !default; +$pink-400: tint-color($pink, 20%) !default; +$pink-500: $pink !default; +$pink-600: shade-color($pink, 20%) !default; +$pink-700: shade-color($pink, 40%) !default; +$pink-800: shade-color($pink, 60%) !default; +$pink-900: shade-color($pink, 80%) !default; + +$red-100: tint-color($red, 80%) !default; +$red-200: tint-color($red, 60%) !default; +$red-300: tint-color($red, 40%) !default; +$red-400: tint-color($red, 20%) !default; +$red-500: $red !default; +$red-600: shade-color($red, 20%) !default; +$red-700: shade-color($red, 40%) !default; +$red-800: shade-color($red, 60%) !default; +$red-900: shade-color($red, 80%) !default; + +$orange-100: tint-color($orange, 80%) !default; +$orange-200: tint-color($orange, 60%) !default; +$orange-300: tint-color($orange, 40%) !default; +$orange-400: tint-color($orange, 20%) !default; +$orange-500: $orange !default; +$orange-600: shade-color($orange, 20%) !default; +$orange-700: shade-color($orange, 40%) !default; +$orange-800: shade-color($orange, 60%) !default; +$orange-900: shade-color($orange, 80%) !default; + +$yellow-100: tint-color($yellow, 80%) !default; +$yellow-200: tint-color($yellow, 60%) !default; +$yellow-300: tint-color($yellow, 40%) !default; +$yellow-400: tint-color($yellow, 20%) !default; +$yellow-500: $yellow !default; +$yellow-600: shade-color($yellow, 20%) !default; +$yellow-700: shade-color($yellow, 40%) !default; +$yellow-800: shade-color($yellow, 60%) !default; +$yellow-900: shade-color($yellow, 80%) !default; + +$green-100: tint-color($green, 80%) !default; +$green-200: tint-color($green, 60%) !default; +$green-300: tint-color($green, 40%) !default; +$green-400: tint-color($green, 20%) !default; +$green-500: $green !default; +$green-600: shade-color($green, 20%) !default; +$green-700: shade-color($green, 40%) !default; +$green-800: shade-color($green, 60%) !default; +$green-900: shade-color($green, 80%) !default; + +$teal-100: tint-color($teal, 80%) !default; +$teal-200: tint-color($teal, 60%) !default; +$teal-300: tint-color($teal, 40%) !default; +$teal-400: tint-color($teal, 20%) !default; +$teal-500: $teal !default; +$teal-600: shade-color($teal, 20%) !default; +$teal-700: shade-color($teal, 40%) !default; +$teal-800: shade-color($teal, 60%) !default; +$teal-900: shade-color($teal, 80%) !default; + +$cyan-100: tint-color($cyan, 80%) !default; +$cyan-200: tint-color($cyan, 60%) !default; +$cyan-300: tint-color($cyan, 40%) !default; +$cyan-400: tint-color($cyan, 20%) !default; +$cyan-500: $cyan !default; +$cyan-600: shade-color($cyan, 20%) !default; +$cyan-700: shade-color($cyan, 40%) !default; +$cyan-800: shade-color($cyan, 60%) !default; +$cyan-900: shade-color($cyan, 80%) !default; diff --git a/client/shared/urls.js b/client/shared/urls.js index b60d656fe..ba84dc2ff 100644 --- a/client/shared/urls.js +++ b/client/shared/urls.js @@ -1,20 +1,8 @@ -import template from 'lodash-es/template' -import transform from 'lodash-es/transform' - -const urls = { - bofDefinition: 'https://www.ietf.org/how/bofs/', - meetingCalIcs: '/meeting/{meetingNumber}/agenda.ics', - meetingDetails: '/meeting/{meetingNumber}/session/{eventAcronym}/', - meetingMaterialsPdf: '/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.pdf', - meetingMaterialsTar: '/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.tgz', - meetingMeetechoRecordings: 'https://www.meetecho.com/ietf{meetingNumber}/recordings#{eventAcronym}', - meetingNotes: 'https://notes.ietf.org/notes-ietf-{meetingNumber}-{eventAcronym}' -} - -const interpolate = /{([\s\S]+?)}/g -const compiled = transform(urls, (result, value, key) => { - result[key] = template(value, { interpolate }) -}, {}) +/** + * DO NOT add the urls here directly. Edit the urls.json file instead. + * The urls are automatically precompiled into the variable below at build time. + */ +const urls = { /* __COMPILED_URLS__ */ } /** * Get an URL and replace tokens with provided values. @@ -25,6 +13,6 @@ const compiled = transform(urls, (result, value, key) => { */ export const getUrl = (key, tokens = {}) => { if (!key) { throw new Error('Must provide a key for getUrl()') } - if (!compiled[key]) { throw new Error('Invalid getUrl() key') } - return compiled[key](tokens) + if (!urls[key]) { throw new Error('Invalid getUrl() key') } + return urls[key](tokens) } diff --git a/client/shared/urls.json b/client/shared/urls.json new file mode 100644 index 000000000..285caa07d --- /dev/null +++ b/client/shared/urls.json @@ -0,0 +1,9 @@ +{ + "bofDefinition": "https://www.ietf.org/how/bofs/", + "meetingCalIcs": "/meeting/{meetingNumber}/agenda.ics", + "meetingDetails": "/meeting/{meetingNumber}/session/{eventAcronym}/", + "meetingMaterialsPdf": "/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.pdf", + "meetingMaterialsTar": "/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.tgz", + "meetingMeetechoRecordings": "https://www.meetecho.com/ietf{meetingNumber}/recordings#{eventAcronym}", + "meetingNotes": "https://notes.ietf.org/notes-ietf-{meetingNumber}-{eventAcronym}" +} diff --git a/dev/vite-plugins/precompile-lodash-templates.js b/dev/vite-plugins/precompile-lodash-templates.js new file mode 100644 index 000000000..2b2b7d54f --- /dev/null +++ b/dev/vite-plugins/precompile-lodash-templates.js @@ -0,0 +1,28 @@ +import { createFilter } from '@rollup/pluginutils' +import template from 'lodash/template' +import transform from 'lodash/transform' +import fs from 'fs/promises' + +export default function precompileLodashTemplates(options = {}) { + const filter = createFilter(options.include, options.exclude) + return { + name: 'precompile-lodash-templates', + enforce: 'pre', + async transform(code, id) { + if (!filter(id)) { return } + + const jsonPath = `${id}on` + const urls = JSON.parse(await fs.readFile(jsonPath, { encoding: 'utf8' })) + + const interpolate = /{([\s\S]+?)}/g + const compiledUrls = transform(urls, (result, value, key) => { + result.push(`"${key}": ${template(value.replaceAll('{', '{data.'), { interpolate, variable: 'data' }).source.replace('function(obj)', '(obj) =>')}`) + }, []) + + return { + code: code.replace('/* __COMPILED_URLS__ */', compiledUrls.join(',\n')), + map: null + } + } + } +} diff --git a/docker/scripts/app-rsync-extras.sh b/docker/scripts/app-rsync-extras.sh index ef6966224..b99082b53 100755 --- a/docker/scripts/app-rsync-extras.sh +++ b/docker/scripts/app-rsync-extras.sh @@ -43,7 +43,6 @@ cat << EOF > "$EXCLUDE" *.doc *.exe *.html -*.json *.mib *.new *.p7s diff --git a/ietf/dbtemplate/fixtures/nomcom_templates.xml b/ietf/dbtemplate/fixtures/nomcom_templates.xml index 369cad73c..dbaa7df3e 100644 --- a/ietf/dbtemplate/fixtures/nomcom_templates.xml +++ b/ietf/dbtemplate/fixtures/nomcom_templates.xml @@ -41,7 +41,7 @@ You have been nominated for the position of $position. The NomCom would appreciate receiving an indication of whether or not you accept this nomination to stand for consideration as a candidate for this position. -You can accept the nomination via web going to the following link http://$domain$accept_url or decline the nomination going the following link http://$domain$decline_url +You can accept the nomination via web going to the following link https://$domain$accept_url or decline the nomination going the following link https://$domain$decline_url If you accept, you will need to fill out a questionnaire. You will receive the questionnaire by email. @@ -107,7 +107,7 @@ You have been nominated for the position of $position. The NomCom would appreciate receiving an indication of whether or not you accept this nomination to stand for consideration as a candidate for this position. -You can accept the nomination via web going to the following link http://$domain$accept_url or decline the nomination going the following link http://$domain$decline_url +You can accept the nomination via web going to the following link https://$domain$accept_url or decline the nomination going the following link https://$domain$decline_url If you accept, you will need to fill out a questionnaire. diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 65666ab6c..041d38895 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -1308,6 +1308,8 @@ def fuzzy_find_documents(name, rev=None): document. """ # Handle special case name formats + if re.match(r"^\s*rfc", name, flags=re.IGNORECASE): + name = re.sub(r"\s+", "", name.lower()) if name.startswith('rfc0'): name = "rfc" + name[3:].lstrip('0') if name.startswith('review-') and re.search(r'-\d\d\d\d-\d\d$', name): @@ -1318,8 +1320,6 @@ def fuzzy_find_documents(name, rev=None): rev = rev[-2:] if re.match("^[0-9]+$", name): name = f'rfc{name}' - if re.match("^[Rr][Ff][Cc] [0-9]+$",name): - name = f'rfc{name[4:]}' # see if we can find a document using this name docs = Document.objects.filter(docalias__name=name, type_id='draft') diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 50712f9aa..3227771af 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -425,7 +425,7 @@ def make_nomineeposition_for_newperson(nomcom, candidate_name, candidate_email, return make_nomineeposition(nomcom, email.person, position, author) -def getheader(header_text, default="ascii"): +def getheader(header_text, default="utf-8"): """Decode the specified header""" tuples = decode_header(header_text) @@ -433,7 +433,7 @@ def getheader(header_text, default="ascii"): return "".join(header_sections) -def get_charset(message, default="ascii"): +def get_charset(message, default="utf-8"): """Get the message charset""" if message.get_content_charset(): diff --git a/ietf/templates/group/meetings.html b/ietf/templates/group/meetings.html index f58f8840b..fbbfd661f 100644 --- a/ietf/templates/group/meetings.html +++ b/ietf/templates/group/meetings.html @@ -1,6 +1,5 @@ {% extends "group/group_base.html" %} -{# Copyright The IETF Trust 2015, All Rights Reserved #} -{# TODO: Add text noting that dates and weekdays are displayed in each meeting's timezone #} +{# Copyright The IETF Trust 2015-2022, All Rights Reserved #} {% load origin %} {% block title %} Meetings @@ -86,6 +85,7 @@ {% endif %}

- This page shows meetings within the last four years. For earlier meetings, please see the proceedings. + This page shows meetings within the last four years. For earlier meetings, please see the + proceedings.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index 944255046..98f45aa38 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -73,25 +73,13 @@ body { right: 0; z-index: 1000000000; } - -#app-loading-footer > a { - text-decoration: none; - font-weight: 500; - font-size: .9em; - color: #0aa2c0; - display: inline-block; - padding: 8px 16px; - background-color: #F9F9F9; - border-radius: 5px; - margin-bottom: 12px; -} {% endblock %} {% block content %} {% origin %}
{% endblock %} diff --git a/package.json b/package.json index aeb0ff128..d96c37b0a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@fullcalendar/timegrid": "5.11.3", "@fullcalendar/vue3": "5.11.2", "@popperjs/core": "2.11.6", + "@twuni/emojify": "1.0.2", "bootstrap": "5.2.2", "bootstrap-icons": "1.9.1", "browser-fs-access": "0.31.1", @@ -58,6 +59,7 @@ "@parcel/transformer-sass": "2.7.0", "@percy/cli": "1.11.0", "@percy/cypress": "3.1.2", + "@rollup/pluginutils": "5.0.2", "@vitejs/plugin-vue": "3.1.2", "@vue/test-utils": "2.1.0", "browserlist": "latest", diff --git a/vite.config.js b/vite.config.js index c7e81bc16..41a2cb02e 100644 --- a/vite.config.js +++ b/vite.config.js @@ -2,6 +2,7 @@ import { defineConfig } from 'vite' import { resolve } from 'path' import vue from '@vitejs/plugin-vue' import servePreviewAssets from './dev/vite-plugins/serve-preview-assets' +import precompileLodashTemplates from './dev/vite-plugins/precompile-lodash-templates' // https://vitejs.dev/config/ export default defineConfig(({ command, mode }) => { @@ -19,7 +20,12 @@ export default defineConfig(({ command, mode }) => { }, cacheDir: '.vite', plugins: [ - vue() + vue(), + precompileLodashTemplates({ + include: [ + '**/shared/urls.js' + ] + }) ], publicDir: 'ietf/static/public', server: { diff --git a/yarn.lock b/yarn.lock index 0a1120953..dda4f64ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1668,6 +1668,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:5.0.2": + version: 5.0.2 + resolution: "@rollup/pluginutils@npm:5.0.2" + dependencies: + "@types/estree": ^1.0.0 + estree-walker: ^2.0.2 + picomatch: ^2.3.1 + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: edea15e543bebc7dcac3b0ac8bc7b8e8e6dbd46e2864dbe5dd28072de1fbd5b0e10d545a610c0edaa178e8a7ac432e2a2a52e547ece1308471412caba47db8ce + languageName: node + linkType: hard + "@sidvind/better-ajv-errors@npm:^2.0.0": version: 2.0.0 resolution: "@sidvind/better-ajv-errors@npm:2.0.0" @@ -1703,6 +1719,20 @@ __metadata: languageName: node linkType: hard +"@twuni/emojify@npm:1.0.2": + version: 1.0.2 + resolution: "@twuni/emojify@npm:1.0.2" + checksum: 0044c83b0589767dae1c1bb933cd56f2e5031a438f0fc993413e4cc229080e29c275cdd836be33ee02ddd59a5d1d6223a718685650f11ecfffc69c881c072152 + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -7114,6 +7144,8 @@ browserlist@latest: "@percy/cli": 1.11.0 "@percy/cypress": 3.1.2 "@popperjs/core": 2.11.6 + "@rollup/pluginutils": 5.0.2 + "@twuni/emojify": 1.0.2 "@vitejs/plugin-vue": 3.1.2 "@vue/test-utils": 2.1.0 bootstrap: 5.2.2