chore: merge main (#4714)
This commit is contained in:
parent
d16a9e77a7
commit
eb4b523e66
47
.pnp.cjs
generated
47
.pnp.cjs
generated
|
@ -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"],\
|
||||
|
|
BIN
.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip
vendored
Normal file
BIN
.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip
vendored
Normal file
BIN
.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip
vendored
Normal file
BIN
.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip
vendored
Normal file
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
<script setup>
|
||||
import { onMounted, reactive } from 'vue'
|
||||
import { DateTime } from 'luxon'
|
||||
import { emojify } from '@twuni/emojify'
|
||||
import uniq from 'lodash-es/uniq'
|
||||
import {
|
||||
NTimeline,
|
||||
NTimelineItem
|
||||
|
@ -61,9 +63,12 @@ const colors = [
|
|||
|
||||
onMounted(() => {
|
||||
const authorColors = {}
|
||||
|
||||
// Get chat log data from embedded json tag
|
||||
const chatLog = JSON.parse(document.getElementById(`${props.componentId}-data`).textContent || '[]')
|
||||
if (chatLog.length > 0) {
|
||||
const authorNames = uniq(chatLog.map(l => l.author))
|
||||
|
||||
let idx = 1
|
||||
let colorIdx = 0
|
||||
for (const logItem of chatLog) {
|
||||
|
@ -75,12 +80,22 @@ onMounted(() => {
|
|||
colorIdx = 0
|
||||
}
|
||||
}
|
||||
|
||||
// -> Format text
|
||||
let txt = emojify(logItem.text)
|
||||
if (txt.indexOf('@') >= 0) {
|
||||
for (const authorName of authorNames) {
|
||||
txt = txt.replaceAll(`@${authorName}`, `<span class="user-mention">${authorName}</span>`)
|
||||
}
|
||||
}
|
||||
txt = txt.replaceAll('href="/user_uploads/', 'href="https://zulip.ietf.org/user_uploads/')
|
||||
|
||||
// -> Generate log item
|
||||
state.items.push({
|
||||
id: `logitem-${idx}`,
|
||||
color: authorColors[logItem.author],
|
||||
author: logItem.author,
|
||||
text: logItem.text,
|
||||
text: txt,
|
||||
time: DateTime.fromISO(logItem.time).toFormat('dd LLLL yyyy \'at\' HH:mm:ss a ZZZZ')
|
||||
})
|
||||
idx++
|
||||
|
@ -90,9 +105,58 @@ onMounted(() => {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '../shared/colors.scss';
|
||||
|
||||
.chatlog {
|
||||
.n-timeline-item-content__content > div > p {
|
||||
margin-bottom: 0;
|
||||
.n-timeline-item-content__content {
|
||||
> div > p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
background-color: $gray-100;
|
||||
border-radius: 5px;
|
||||
padding: 8px;
|
||||
margin-top: -8px;
|
||||
|
||||
> p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.message_inline_image {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Manual user mention
|
||||
.user-mention {
|
||||
display: inline-block;
|
||||
padding: 1px 5px;
|
||||
background-color: rgba($purple, .05);
|
||||
color: $purple;
|
||||
font-weight: 500;
|
||||
border-radius: 4px;
|
||||
|
||||
> .user-mention {
|
||||
padding: 0;
|
||||
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: '@';
|
||||
}
|
||||
}
|
||||
|
||||
// User reply mention
|
||||
.user-mention + a {
|
||||
text-decoration: none;
|
||||
color: $purple;
|
||||
font-style: italic;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
139
client/shared/colors.scss
Normal file
139
client/shared/colors.scss
Normal file
|
@ -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;
|
|
@ -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)
|
||||
}
|
||||
|
|
9
client/shared/urls.json
Normal file
9
client/shared/urls.json
Normal file
|
@ -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}"
|
||||
}
|
28
dev/vite-plugins/precompile-lodash-templates.js
Normal file
28
dev/vite-plugins/precompile-lodash-templates.js
Normal file
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -43,7 +43,6 @@ cat << EOF > "$EXCLUDE"
|
|||
*.doc
|
||||
*.exe
|
||||
*.html
|
||||
*.json
|
||||
*.mib
|
||||
*.new
|
||||
*.p7s
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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 @@
|
|||
</table>
|
||||
{% endif %}
|
||||
<p class="alert alert-info my-3">
|
||||
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
|
||||
<a href="https://www.ietf.org/how/meetings/past/">proceedings</a>.
|
||||
</p>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -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 %}
|
||||
<div id="app"></div>
|
||||
<div id="app-loading">
|
||||
<div id="app-loading-footer">
|
||||
<a href="/meeting/{{ meetingData.meetingNumber }}/agenda.txt">Switch to text-only version ⮞</a>
|
||||
<a class="btn btn-light text-muted mb-3" href="/meeting/{{ meetingData.meetingNumber }}/agenda.txt"><small>Switch to text-only version ⮞</small></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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: {
|
||||
|
|
32
yarn.lock
32
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
|
||||
|
|
Loading…
Reference in a new issue