merged with hrk
This commit is contained in:
commit
0b3abbe6a7
7 changed files with 237 additions and 153 deletions
|
|
@ -87,37 +87,20 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
setUpDoc(stream) {
|
setUpDoc(stream) {
|
||||||
|
|
||||||
api
|
api.zulip.getMsgs(this.zulipClient, stream, "content").then((result) => {
|
||||||
.zulip
|
|
||||||
.getMsgs(this.zulipClient, stream, 'content')
|
|
||||||
.then(result => {
|
|
||||||
for (let m = 0; m < result.messages.length; m++) {
|
for (let m = 0; m < result.messages.length; m++) {
|
||||||
const message = result.messages[m]
|
const message = result.messages[m]
|
||||||
this.$store.commit('addMessage', message)
|
this.$store.commit('addMessage', message)
|
||||||
}
|
}
|
||||||
// this
|
});
|
||||||
// .$store
|
|
||||||
// .commit( 'setContents',
|
api.zulip.getMsgs(this.zulipClient, stream, "rules").then((result) => {
|
||||||
// result
|
this.$store.commit("setRules", result.messages);
|
||||||
// .messages
|
});
|
||||||
// )
|
|
||||||
})
|
|
||||||
|
|
||||||
api
|
|
||||||
.zulip
|
|
||||||
.getMsgs(this.zulipClient, stream, 'rules')
|
|
||||||
.then(result => {
|
|
||||||
this
|
|
||||||
.$store
|
|
||||||
.commit( 'setRules',
|
|
||||||
result
|
|
||||||
.messages
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
api.zulip.listen(this.zulipClient, this.eventHandler)
|
api.zulip.listen(this.zulipClient, this.eventHandler)
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
eventHandler(event) {
|
eventHandler(event) {
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,27 @@
|
||||||
<template>
|
<template>
|
||||||
<!-- <span>
|
|
||||||
<vue3-markdown-it
|
|
||||||
:source="rawJSON"
|
|
||||||
inline
|
|
||||||
></vue3-markdown-it>
|
|
||||||
</span> -->
|
|
||||||
<code
|
<code
|
||||||
class="rule"
|
class="rule"
|
||||||
:class="rule.emoji_code"
|
:class="rule.emoji_code"
|
||||||
>
|
>
|
||||||
<p>{{ rule.className }} {</p>
|
<p :title="toEmojiCode(rule.className)">{{ rule.className }} {</p>
|
||||||
<p
|
<p v-for="dec in rule.rules" :key="dec"> {{ dec }}</p>
|
||||||
v-for="dec in rule.rules"
|
|
||||||
:key="dec.text"
|
|
||||||
> {{ dec.text }}</p>
|
|
||||||
<p>}</p>
|
<p>}</p>
|
||||||
</code>
|
</code>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import emoji from "../../mixins/emoji";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Rule',
|
name: "Rule",
|
||||||
props: [
|
mixins: [emoji],
|
||||||
'rule'
|
props: ["rule"],
|
||||||
],
|
|
||||||
computed: {
|
computed: {
|
||||||
rawJSON() {
|
rawJSON() {
|
||||||
return '```json\n' + JSON.stringify(this.rule, null, 2) + '\n```'
|
return "```json\n" + JSON.stringify(this.rule, null, 2) + "\n```";
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
@ -41,5 +33,4 @@ export default {
|
||||||
.rule p {
|
.rule p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
<script>
|
<script>
|
||||||
|
import emoji from "../../mixins/emoji";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Styles",
|
name: "Styles",
|
||||||
|
mixins: [emoji],
|
||||||
computed: {
|
computed: {
|
||||||
rules() {
|
rules() {
|
||||||
return this.$store.state.rules;
|
return this.$store.state.rules;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: function(){
|
data: function () {
|
||||||
return {
|
return {
|
||||||
el: null,
|
el: null,
|
||||||
htmlTags: [
|
htmlTags: [
|
||||||
|
|
@ -24,44 +27,46 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
generateStyleRules() {
|
generateStyleRules() {
|
||||||
let styles = "";
|
let styles = "";
|
||||||
this.rules.map(r => {
|
// this.rules.map(r => {
|
||||||
const dot = this.htmlTags.indexOf(r.className) > -1 ? '' : '.'
|
// const dot = this.htmlTags.indexOf(r.className) > -1 ? '' : '.'
|
||||||
styles += `.${r.parentClassName} ${dot}${r.className}`
|
// styles += `.${r.parentClassName} ${dot}${r.className}`
|
||||||
if( this.containsEmoji(r.className)){
|
// if( this.containsEmoji(r.className)){
|
||||||
styles += `, .${r.parentClassName} .u${this.toEmojiCode(r.className)}`
|
// styles += `, .${r.parentClassName} .u${this.toEmojiCode(r.className)}`
|
||||||
|
// }
|
||||||
|
// styles += "{"
|
||||||
|
// r.rules.map((s)=>{
|
||||||
|
// styles += s.text;
|
||||||
|
// })
|
||||||
|
// styles += "}"
|
||||||
|
// })
|
||||||
|
this.rules.map((r) => {
|
||||||
|
styles += r.className;
|
||||||
|
if (this.containsEmoji(r.className)) {
|
||||||
|
styles += ", .u" + this.toEmojiCode(r.className);
|
||||||
}
|
}
|
||||||
styles += "{"
|
styles += "{";
|
||||||
r.rules.map((s)=>{
|
r.rules.map((s) => {
|
||||||
styles += s.text;
|
styles += s;
|
||||||
})
|
});
|
||||||
styles += "}"
|
styles += "}";
|
||||||
})
|
});
|
||||||
console.log(styles)
|
console.log(styles)
|
||||||
return styles;
|
return styles;
|
||||||
},
|
},
|
||||||
insertStyleElement() {
|
insertStyleElement() {
|
||||||
var style = document.createElement('style');
|
var style = document.createElement("style");
|
||||||
style.innerText = this.generateStyleRules();
|
style.innerText = this.generateStyleRules();
|
||||||
return style
|
return style;
|
||||||
},
|
},
|
||||||
containsEmoji(str) {
|
|
||||||
// Regular expression to match emoji
|
|
||||||
const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
|
|
||||||
return regexExp.test(str); // true
|
|
||||||
},
|
|
||||||
toEmojiCode(emoji) {
|
|
||||||
return emoji.replace(/\p{Emoji}/gu, (m) => m.codePointAt(0).toString(16));
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
},
|
||||||
mounted: function() {
|
mounted: function () {
|
||||||
this.el = document.head.appendChild(this.insertStyleElement());
|
this.el = document.head.appendChild(this.insertStyleElement());
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
rules() {
|
rules() {
|
||||||
let style = this.insertStyleElement();
|
let style = this.insertStyleElement();
|
||||||
this.el.parentNode.replaceChild(style, this.el);
|
this.el.parentNode.replaceChild(style, this.el);
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -1,34 +1,40 @@
|
||||||
let toUTF16 = (codePoint) => {
|
// let toUTF16 = (codePoint) => {
|
||||||
var TEN_BITS = parseInt("1111111111", 2);
|
// var TEN_BITS = parseInt("1111111111", 2);
|
||||||
if (codePoint <= 0xffff) {
|
// if (codePoint <= 0xffff) {
|
||||||
return u(codePoint);
|
// return u(codePoint);
|
||||||
}
|
// }
|
||||||
codePoint -= 0x10000;
|
// codePoint -= 0x10000;
|
||||||
// Shift right to get to most significant 10 bits
|
// // Shift right to get to most significant 10 bits
|
||||||
var leadSurrogate = 0xd800 + (codePoint >> 10);
|
// var leadSurrogate = 0xd800 + (codePoint >> 10);
|
||||||
// Mask to get least significant 10 bits
|
// // Mask to get least significant 10 bits
|
||||||
var tailSurrogate = 0xdc00 + (codePoint & TEN_BITS);
|
// var tailSurrogate = 0xdc00 + (codePoint & TEN_BITS);
|
||||||
return u(leadSurrogate) + (tailSurrogate);
|
// return u(leadSurrogate) + (tailSurrogate);
|
||||||
}
|
// }
|
||||||
|
|
||||||
let u = (codeUnit) => {
|
// let u = (codeUnit) => {
|
||||||
return "\\u" + codeUnit.toString(16).toUpperCase();
|
// return "\\u" + codeUnit.toString(16).toUpperCase();
|
||||||
}
|
// }
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
methods: {
|
methods: {
|
||||||
// toEmojiCode: (emoji) => {
|
|
||||||
// console.log(emoji);
|
|
||||||
// emoji.replace(/\p{Emoji}/gu, (m) => m.codePointAt(0).toString(16));
|
|
||||||
// },
|
|
||||||
|
|
||||||
toEmojiCode: (emoji) => {
|
toEmojiCode: (emoji) => {
|
||||||
emoji.replace(/\p{Emoji}/gu, function (m) {
|
console.log(emoji);
|
||||||
toUTF16(m.codePointAt(0));
|
return emoji.replace(/\p{Emoji}/gu, (m) => m.codePointAt(0).toString(16));
|
||||||
});
|
},
|
||||||
console.log(emoji)
|
|
||||||
return emoji;
|
// toEmojiCode: (emoji) => {
|
||||||
|
// console.log(emoji)
|
||||||
|
// emoji.replace(/\p{Emoji}/gu, function (m) {
|
||||||
|
// toUTF16(m.codePointAt(0));
|
||||||
|
// });
|
||||||
|
// console.log(emoji)
|
||||||
|
// return emoji;
|
||||||
|
// },
|
||||||
|
|
||||||
|
containsEmoji(str) {
|
||||||
|
// Regular expression to match emoji
|
||||||
|
const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
|
||||||
|
return regexExp.test(str); // true
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,56 +1,40 @@
|
||||||
|
/*eslint no-unused-vars: "off"*/
|
||||||
|
/*eslint no-undef: "off"*/
|
||||||
|
|
||||||
import { createStore } from 'vuex'
|
import { createStore } from 'vuex'
|
||||||
import emoji from "../mixins/emoji";
|
import emoji from "../mixins/emoji";
|
||||||
|
import { stripHtml } from "string-strip-html";
|
||||||
|
|
||||||
const toCSS = (poll, currentStream) => {
|
var EmojiConvertor = require('emoji-js');
|
||||||
let
|
var emojiConv = new EmojiConvertor();
|
||||||
className = "",
|
|
||||||
|
let toCSS = (message, currentStream) => {
|
||||||
|
let className = "",
|
||||||
emoji_code = "",
|
emoji_code = "",
|
||||||
options = [],
|
rules = [],
|
||||||
rules = [],
|
|
||||||
subs = poll.submessages.map((s) => JSON.parse(s.content)),
|
|
||||||
parentClassName = currentStream
|
parentClassName = currentStream
|
||||||
|
|
||||||
subs.forEach(sub => {
|
// let regex = /[/s]?(?<selector>.+)\s*\n?{\n?(?<prop>[\s\w.~:>-]+\s*:\s*.+;?\n?)*\n?}/gm
|
||||||
if (sub.widget_type && sub.widget_type == "poll") {
|
let regex = /[/s]?(?<selector>.+)\s*\n?{\n?(?<props>(.*;\n?)+)}/gm
|
||||||
className = sub.extra_data.question
|
let content = stripHtml(message.content).result;
|
||||||
emoji_code = emoji.methods.toEmojiCode(className)
|
let results = content.matchAll(regex);
|
||||||
options = sub.extra_data.options
|
results = Array.from(results);
|
||||||
// console.log(emoji_code)
|
if (results.length > 0) {
|
||||||
if (options) {
|
className = emojiConv.replace_colons(results[0]['groups']['selector']);
|
||||||
options.forEach(option => {
|
if (emoji.methods.containsEmoji(className)) {
|
||||||
let r = constructRule(option, options, subs)
|
emoji_code = emoji.methods.toEmojiCode(className);
|
||||||
if (validateRule(r)) {
|
|
||||||
rules.push(r)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} else if (sub.type && sub.type == "new_option") {
|
|
||||||
let r = constructRule(sub.option, options, subs)
|
|
||||||
if (validateRule(r)) {
|
|
||||||
rules.push(r)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
rules = results[0]['groups']['props'].split("\n");
|
||||||
return { parentClassName, className, emoji_code, rules }
|
rules = rules.filter((rule) => validateRule(rule))
|
||||||
|
return { className, emoji_code, rules };
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const constructRule = (option, options, subs) => {
|
let validateRule = (rule) => {
|
||||||
const
|
return rule.match(/.+:.+;/gm);
|
||||||
text = option,
|
|
||||||
votes = subs.filter( s =>
|
|
||||||
s.type == "vote" &&
|
|
||||||
s.key.replace("canned,", "") == options.indexOf(option)
|
|
||||||
),
|
|
||||||
weight =
|
|
||||||
votes.length > 0
|
|
||||||
? votes.map((s) => s.vote).reduce((a, b) => a + b)
|
|
||||||
: 0
|
|
||||||
return { text, weight }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// minimal validation. rules have to contain a colon and semicolon
|
|
||||||
const validateRule = rule => rule.text.match(/.+:.+;/gm)
|
|
||||||
|
|
||||||
export default createStore({
|
export default createStore({
|
||||||
|
|
||||||
strict: process.env.NODE_ENV !== 'production',
|
strict: process.env.NODE_ENV !== 'production',
|
||||||
|
|
@ -82,14 +66,6 @@ export default createStore({
|
||||||
.replace(/[^]+.*```quote\n/gm, '')
|
.replace(/[^]+.*```quote\n/gm, '')
|
||||||
.replace(/ \n```/gm, '')
|
.replace(/ \n```/gm, '')
|
||||||
}
|
}
|
||||||
// console.log(message.responseTo)
|
|
||||||
// const referenceMessage = state.contents.find(m => {
|
|
||||||
// m.id == message.responseTo.id
|
|
||||||
// // &&
|
|
||||||
// // m.sender_id == message.responseTo.sender_id
|
|
||||||
// // m.content.includes(message.responseTo.quote)
|
|
||||||
// })
|
|
||||||
// console.log(referenceMessage)
|
|
||||||
}
|
}
|
||||||
state.contents.push(message)
|
state.contents.push(message)
|
||||||
},
|
},
|
||||||
|
|
@ -118,12 +94,16 @@ export default createStore({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setRules: (state, rules) => {
|
||||||
setRules: (state, rules) => { state.rules =
|
state.rules = rules.reduce((acc, cur) => {
|
||||||
rules
|
let rule = toCSS(cur, state.currentStream);
|
||||||
.filter((r) => r.content.match(/\/poll/gm))
|
if (rule !== null) {
|
||||||
.map((r) => toCSS(r, state.currentStream))
|
acc.push(rule);
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
}, [])
|
||||||
},
|
},
|
||||||
|
|
||||||
addRule: (state, rule) => {
|
addRule: (state, rule) => {
|
||||||
if (rule.content.match(/\/poll/gm)) {
|
if (rule.content.match(/\/poll/gm)) {
|
||||||
state.rules.push(toCSS(rule))
|
state.rules.push(toCSS(rule))
|
||||||
|
|
|
||||||
117
package-lock.json
generated
117
package-lock.json
generated
|
|
@ -169,6 +169,19 @@
|
||||||
"safer-buffer": "^2.1.0"
|
"safer-buffer": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"emoji-datasource": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-datasource/-/emoji-datasource-4.1.0.tgz",
|
||||||
|
"integrity": "sha1-tEVX94ot+sLzUDkzkbFwpWfsKK0="
|
||||||
|
},
|
||||||
|
"emoji-js": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-js/-/emoji-js-3.5.0.tgz",
|
||||||
|
"integrity": "sha512-5uaULzdR3g6ALBC8xUzyoxAx6izT1M4+DEsxHLRS2/gaOKC/p62831itMoMsYfUj1fKX3YG01u5YVz2v7qpsWg==",
|
||||||
|
"requires": {
|
||||||
|
"emoji-datasource": "4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"es6-promise": {
|
"es6-promise": {
|
||||||
"version": "4.2.8",
|
"version": "4.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
|
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
|
||||||
|
|
@ -268,6 +281,11 @@
|
||||||
"har-schema": "^2.0.0"
|
"har-schema": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"html-entities": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ=="
|
||||||
|
},
|
||||||
"html2canvas": {
|
"html2canvas": {
|
||||||
"version": "1.0.0-rc.7",
|
"version": "1.0.0-rc.7",
|
||||||
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.7.tgz",
|
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.7.tgz",
|
||||||
|
|
@ -412,6 +430,26 @@
|
||||||
"type-check": "~0.3.2"
|
"type-check": "~0.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lodash.clonedeep": {
|
||||||
|
"version": "4.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||||
|
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
|
||||||
|
},
|
||||||
|
"lodash.isplainobject": {
|
||||||
|
"version": "4.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
|
||||||
|
"integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
|
||||||
|
},
|
||||||
|
"lodash.trim": {
|
||||||
|
"version": "4.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz",
|
||||||
|
"integrity": "sha1-NkJefukL5KpeJ7zruFt9EepHqlc="
|
||||||
|
},
|
||||||
|
"lodash.without": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz",
|
||||||
|
"integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw="
|
||||||
|
},
|
||||||
"mime-db": {
|
"mime-db": {
|
||||||
"version": "1.48.0",
|
"version": "1.48.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
|
||||||
|
|
@ -488,6 +526,44 @@
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||||
},
|
},
|
||||||
|
"ranges-apply": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ranges-apply/-/ranges-apply-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-VF3a0XUuYS/BQHv2RaIyX1K7S1hbfrs64hkGKgPVk0Y7p4XFwSucjTTttrBqmkcmB/PZx5ISTZdxErRZi/89aQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0",
|
||||||
|
"ranges-merge": "^7.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ranges-merge": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ranges-merge/-/ranges-merge-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-coTHcyAEIhoEdsBs9f5f+q0rmy7UHvS/5nfuXzuj5oLX/l/tbqM5uxRb6eh8WMdetXia3lK67ZO4tarH4ieulQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0",
|
||||||
|
"ranges-push": "^5.1.0",
|
||||||
|
"ranges-sort": "^4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ranges-push": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ranges-push/-/ranges-push-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-vqGcaGq7GWV1zBa9w83E+dzYkOvE9/3pIRUPvLf12c+mGQCf1nesrkBI7Ob8taN2CC9V1HDSJx0KAQl0SgZftA==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0",
|
||||||
|
"ranges-merge": "^7.1.0",
|
||||||
|
"string-collapse-leading-whitespace": "^5.1.0",
|
||||||
|
"string-trim-spaces-only": "^3.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ranges-sort": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ranges-sort/-/ranges-sort-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-GOQgk6UtsrfKFeYa53YLiBVnLINwYmOk5l2QZG1csZpT6GdImUwooh+/cRrp7b+fYawZX/rnyA3Ul+pdgQBIzA==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"regenerator-runtime": {
|
"regenerator-runtime": {
|
||||||
"version": "0.13.7",
|
"version": "0.13.7",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
|
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
|
||||||
|
|
@ -584,6 +660,47 @@
|
||||||
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz",
|
||||||
"integrity": "sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs="
|
"integrity": "sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs="
|
||||||
},
|
},
|
||||||
|
"string-collapse-leading-whitespace": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-collapse-leading-whitespace/-/string-collapse-leading-whitespace-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-mYz9/Kb5uvRB4DZj46zILwI4y9lD9JsvXG9Xb7zjbwm0I/R40G7oFfMsqJ28l2d7gWMTLJL569NfJQVLQbnHCw==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string-left-right": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-left-right/-/string-left-right-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-ic/WvfNVUygWWsgg8akzSzp2NuttfhrdbH7QmSnda5b5RFmT9aCEDiS/M+gmTJwtFy7+b/2AXU4Z6vejcePQqQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0",
|
||||||
|
"lodash.clonedeep": "^4.5.0",
|
||||||
|
"lodash.isplainobject": "^4.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string-strip-html": {
|
||||||
|
"version": "8.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.3.0.tgz",
|
||||||
|
"integrity": "sha512-1+rjTPt0JjpFr1w0bfNL1S6O0I9fJDqM+P3pFTpC6eEEpIXhmBvPLnaQoEuWarswiH219qCefDSxTLxGQyHKUg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0",
|
||||||
|
"html-entities": "^2.3.2",
|
||||||
|
"lodash.isplainobject": "^4.0.6",
|
||||||
|
"lodash.trim": "^4.5.1",
|
||||||
|
"lodash.without": "^4.4.0",
|
||||||
|
"ranges-apply": "^5.1.0",
|
||||||
|
"ranges-push": "^5.1.0",
|
||||||
|
"string-left-right": "^4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string-trim-spaces-only": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-trim-spaces-only/-/string-trim-spaces-only-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-AW7RSi3+QtE6wR+4m/kmwlyy39neBbCIzrzzu1/RGzNRiPKQOeB3rGzr4ubg4UIQgYtr2w0PrxhKPXgyqJ0vaQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"symbol-tree": {
|
"symbol-tree": {
|
||||||
"version": "3.2.4",
|
"version": "3.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
"author": "Karl Moubarak",
|
"author": "Karl Moubarak",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"emoji-js": "^3.5.0",
|
||||||
|
"string-strip-html": "^8.3.0",
|
||||||
"vue-html2pdf": "^1.8.0",
|
"vue-html2pdf": "^1.8.0",
|
||||||
"zulip-js": "^2.0.9"
|
"zulip-js": "^2.0.9"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue