Merge pull request #3774 from overleaf/jpa-meta

[frontend] import meta tag processing from das7pads fork

GitOrigin-RevId: ca74ff9fbbcb51091a626a45468ff3d24d6136ca
This commit is contained in:
Jakob Ackermann
2021-03-23 03:05:12 +00:00
committed by Copybot
parent 2e305f36bc
commit 535c97e8cf
8 changed files with 135 additions and 47 deletions
+48
View File
@@ -0,0 +1,48 @@
import _ from 'lodash'
// cache for parsed values
const cache = new Map()
export default function getMeta(name, fallback) {
if (cache.has(name)) return cache.get(name)
const element = document.head.querySelector(`meta[name="${name}"]`)
if (!element) {
return fallback
}
const plainTextValue = element.content
let value
switch (element.dataset.type) {
case 'boolean':
// in pug: content=false -> no content field
// in pug: content=true -> empty content field
value = element.hasAttribute('content')
break
case 'json':
if (!plainTextValue) {
// JSON.parse('') throws
value = undefined
} else {
value = JSON.parse(plainTextValue)
}
break
default:
value = plainTextValue
}
cache.set(name, value)
return value
}
function convertMetaToWindowAttributes() {
window.data = window.data || {}
Array.from(document.querySelectorAll('meta[name^="ol-"]'))
.map(element => element.name)
// process short labels before long ones:
// e.g. assign 'sharelatex' before 'sharelatex.templates'
.sort()
.forEach(nameWithNamespace => {
const label = nameWithNamespace.slice('ol-'.length)
_.set(window, label, getMeta(nameWithNamespace))
_.set(window.data, label, getMeta(nameWithNamespace))
})
}
convertMetaToWindowAttributes()