@userfrosting/sprinkle-core
Version:
Core Sprinkle for UserFrosting
170 lines (169 loc) • 5.49 kB
JavaScript
import { defineStore as e } from "pinia";
import t from "axios";
import { getProperty as n } from "dot-prop";
import { computed as r, ref as i, watch as a } from "vue";
import { useRoute as o } from "vue-router";
import { DateTime as s } from "luxon";
//#region app/assets/stores/useConfigStore.ts
var c = e("config", {
persist: !0,
state: () => ({ config: {} }),
getters: { get: (e) => (t, r) => n(e.config, t, r) },
actions: { async load() {
t.get("/api/config").then((e) => {
this.config = e.data;
});
} }
}), l = {
0: (e) => 1,
1: (e) => e === 1 ? 1 : 2,
2: (e) => e === 0 || e === 1 ? 1 : 2,
3: (e) => e === 0 ? 1 : e % 10 == 1 && e % 100 != 11 ? 2 : 3,
4: (e) => e === 1 || e == 11 ? 1 : e === 2 || e === 12 ? 2 : e >= 3 && e <= 19 ? 3 : 4,
5: (e) => e === 1 ? 1 : e === 0 || e % 100 > 0 && e % 100 < 20 ? 2 : 3,
6: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : e % 10 < 2 || e % 100 >= 10 && e % 100 < 20 ? 2 : 3,
7: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 2 : 3,
8: (e) => e === 1 ? 1 : e >= 2 && e <= 4 ? 2 : 3,
9: (e) => e === 1 ? 1 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 12 || e % 100 > 14) ? 2 : 3,
10: (e) => e % 100 == 1 ? 1 : e % 100 == 2 ? 2 : e % 100 == 3 || e % 100 == 4 ? 3 : 4,
11: (e) => e === 1 ? 1 : e === 2 ? 2 : e >= 3 && e <= 6 ? 3 : e >= 7 && e <= 10 ? 4 : 5,
12: (e) => e === 1 ? 1 : e === 2 ? 2 : e % 100 >= 3 && e % 100 <= 10 ? 3 : e % 100 >= 11 ? 4 : e == 0 ? 6 : 5,
13: (e) => e === 1 ? 1 : e === 0 || e % 100 >= 1 && e % 100 < 11 ? 2 : e % 100 > 10 && e % 100 < 20 ? 3 : 4,
14: (e) => e % 10 == 1 ? 1 : e % 10 == 2 ? 2 : 3,
15: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : 2
}, u = e("translator", () => {
let e = "plural", n = i(""), r = i({}), a = i({
name: "",
regional: "",
authors: [],
plural_rule: 0,
tag: ""
});
async function o() {
t.get("/api/dictionary").then((e) => {
n.value = e.data.identifier, a.value = e.data.config, r.value = e.data.dictionary;
});
}
function c(e, t = {}) {
let { message: n, placeholders: r } = f(e, t);
return t = r, p(n, t);
}
function u(e, t = s.DATETIME_MED_WITH_WEEKDAY) {
let n = d(e);
return typeof t == "object" ? n.toLocaleString(t) : n.toFormat(t);
}
function d(e) {
return s.fromISO(e).setLocale(a.value.tag);
}
function f(t, n) {
if (r.value[t] !== void 0) return {
message: r.value[t],
placeholders: n
};
let i = r.value[t + ".@PLURAL"] || e, a = 1;
if (typeof n == "object" && n[i] !== void 0) a = Number(n[i]);
else if (typeof n == "number" || typeof n == "string") a = Number(n);
else if (r.value[t + ".@TRANSLATION"] !== void 0) return {
message: r.value[t + ".@TRANSLATION"],
placeholders: n
};
typeof n == "number" || typeof n == "string" ? n = { [i]: a } : typeof n == "object" && n[i] === void 0 && (n = {
...n,
[i]: a
});
let o = m(t, a);
return r.value[t + "." + o] === void 0 ? r.value[t + "." + a] === void 0 ? r.value[t + ".@TRANSLATION"] === void 0 ? {
message: t,
placeholders: n
} : {
message: r.value[t + ".@TRANSLATION"],
placeholders: n
} : {
message: r.value[t + "." + a],
placeholders: n
} : {
message: r.value[t + "." + o],
placeholders: n
};
}
function p(t, n) {
typeof n != "object" && (n = { [e]: n });
for (let [e, t] of Object.entries(n)) if (typeof t == "string" && t.startsWith("&")) {
let r = Object.fromEntries(Object.entries(n).filter(([t]) => t !== e));
n[e] = c(t.substring(1), r);
}
t = t.replace(/{{&(([^}]+[^a-z]))}}/g, (e, t) => c(t, n));
for (let [e, r] of Object.entries(n)) {
let n = RegExp(`{{${e}}}`, "g");
t = t.replace(n, String(r));
}
return t;
}
function m(e, t) {
if (t === 0 && r.value[e + ".0"] !== void 0) return 0;
let n = h(t);
if (r.value[e + "." + n] !== void 0) return n;
for (let t = n; t >= 0; t--) if (r.value[e + "." + t] !== void 0) return t;
return null;
}
function h(e, t) {
let n = t ?? a.value.plural_rule;
if (n < 0 || n >= Object.keys(l).length) throw Error(`The rule number ${n} must be between 0 and 15`);
return l[n](e);
}
return {
dictionary: r,
load: o,
config: a,
identifier: n,
translate: c,
translateDate: u,
getPluralForm: h,
getDateTime: d
};
}, { persist: !0 }), d = e("pageMeta", () => {
let e = o(), { translate: t } = u(), n = i(""), s = i(""), l = i([]), d = i(!1), f = i(!1);
function p() {
d.value = !1, f.value = !1;
let r = e.matched.filter((e) => e.meta.title !== void 0 && e.meta.title !== "").map((e) => ({
label: e.meta?.title || "",
to: e.path
}));
r.unshift({
label: g.value,
to: "/"
}), l.value = r, n.value = e.meta.title || "", s.value = t(e.meta.description || "");
}
function m() {
document.title = _.value;
}
function h() {
document.querySelector("head meta[name=\"description\"]")?.setAttribute("content", s.value);
}
let g = r(() => c().get("site.title") || ""), _ = r(() => n.value ? t(n.value) + " | " + g.value : g.value);
return a(e, p, { immediate: !0 }), a(_, m, { immediate: !0 }), a(s, h, { immediate: !0 }), {
breadcrumbs: l,
title: n,
description: s,
hideBreadcrumbs: d,
hideTitle: f
};
}), f = e("alerts", {
state: () => ({ alerts: [] }),
actions: {
push(e) {
this.alerts.push(e);
},
pop() {
return this.alerts.pop();
},
shift() {
return this.alerts.shift();
},
clear() {
this.alerts = [];
}
}
});
//#endregion
export { c as i, d as n, u as r, f as t };