generic-skin 3.0.4 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/apps/vueChrono.js CHANGED
File without changes
File without changes
@@ -147,7 +147,9 @@ Vue.component('lista-bosquejos', {
147
147
  </template>
148
148
  <template v-else>
149
149
  <li class="row is-not-lastpost not-status" v-for="draft in content.drafts">
150
- <temas-foro data-type="draft" data-mode="" :data-url="draft.topic.url" :data-title="draft.topic.name" :data-replies="draft.info.location" :data-views="draft.info.date" :data-quick="draft.modify" />
150
+ <temas-foro data-type="draft" data-mode="" :data-url="draft.topic.url" :data-replies="draft.info.location" :data-views="draft.info.date" :data-quick="draft.modify">
151
+ <template slot="title">{{ draft.topic.name }}</template>
152
+ </temas-foro>
151
153
  </li>
152
154
  </template>
153
155
  </ul>
@@ -1,4 +1,2 @@
1
- Vue.component("panel-control", { props: ["dataElements"], data: function () { return { userId: _userdata.user_id, state: { page: 0 }, content: { original: [], current: [] } } }, computed: { validationPanel: function () { return FNR.utility.genValidation(this.content.current) }, toSave: function () { let e = []; return [].forEach.call(this.content.current, (t, o) => { t.value !== this.content.original[o].value && e.push({ name: t.name, type: t.type, value: t.value }) }), e } }, methods: { updateProfile: function () { this.state.page = 2, FNR.user.profile.setData(this.toSave).then(e => { if (e) { let e = !1; this.toSave.map(t => { t.name.toLowerCase().indexOf("tema") > -1 && (e = !0) }), e ? (FNR.html.genNotification("Atención", "Información actualizada sin inconvenientes.", "fas fa-check"), FNR.user.setTheme(!0)) : (FNR.html.genNotification("Atención", "Información actualizada sin inconvenientes.", "fas fa-check"), setTimeout(() => { window.location.reload() }, 2e3)) } else FNR.html.genNotification("Atención", "Hubo un problema al actualizar. Dale otro intento.", "fas fa-exclamation") }) } }, created() { FNR.user.profile.getData(JSON.parse(this.dataElements.replace(/'/g, '"'))).then(e => { this.content.original = JSON.parse(JSON.stringify(e)), this.content.current = e, this.state.page = 1 }) }, template: '\n <section id="forum-cp" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Editar perfil</h2>\n <hr />\n <p>En esta página podrás editar tu perfil de usuario. En caso de que quieras editar tu contraseña, por favor dirígete a <a target="_blank" title="Ir a «Cambiar contraseña»" :href="\'/profile?change_password=Cambiar+tu+contraseña&mode=editprofile&page_profil=informations&user_id=\' + userId">este enlace</a>.</p>\n <p>Si estás experimentando problemas con el foro, pulsa <a title="Reiniciar cache" onclick="localStorage.clear(); window.location.replace(\'/\')">este otro</a>. Puede que los solucione.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <aviso-foro v-show="validationPanel !== \'\'">\n <ul v-html="validationPanel"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li v-for="item in content.current">\n <campo-foro :data-name="item.name">\n <input v-model="item.value" v-if="item.type === \'input\' || item.type === \'avatar\'" type="text"/>\n <textarea v-model="item.value" v-else-if="item.type === \'textarea\'"></textarea>\n <div v-else-if="item.type === \'select\'" class="select-container">\n <select v-model="item.value">\n <option :value="option.value" v-for="option in item.options">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </ul>\n <div id="usereply-comand" v-if="toSave.length && validationPanel === \'\'">\n <button class="button1 btn-main" v-on:click="updateProfile()" title="Actualizar perfil">Actualizar</button>\n </div>\n </template>\n <template v-if="state.page === 2">\n <cargando-foro data-text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n ' }), Vue.component("lista-bosquejos", { data: function () { return { state: { page: 0 }, content: { drafts: [] } } }, created() { FNR.user.profile.getDrafts().then(e => { this.state.page = 1, this.content.drafts = e }) }, template: '\n <section class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Lista de bosquejos</h2>\n <hr />\n <p>En esta página tienes tu lista de tus bosquejos. No es una lista completa, tan solo muestra la primera página. Si deseas ver más bosquejos, aligera la lista publicándolos.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <section id="forum-drafts" class="forum-topiclist">\n <lista-temas-cabecera data-elements="[\'Tema\', \'Información\']"></lista-temas-cabecera>\n <ul class="topiclist-topics no-style">\n <template v-if="content.drafts === false">\n <li class="is-not-lastpost not-status">\n <h6>No tienes bosquejos guardados</h6>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-lastpost not-status" v-for="draft in content.drafts">\n <temas-foro data-type="draft" data-mode="" :data-url="draft.topic.url" :data-title="draft.topic.name" :data-replies="draft.info.location" :data-views="draft.info.date" :data-quick="draft.modify" />\n </li>\n </template>\n </ul>\n </section>\n </template>\n </section>\n ' }), Vue.component("editor-foro", {
2
- data: function () { return { state: { page: 0, editor: "none", admin: 1 === _userdata.user_level, guest: 0 === _userdata.session_logged_in, dice: document.querySelectorAll("#list_dice").length }, colors: FNR.forum.getColors(), content: { username: "", subject: "", msg: "", type: -1, options: [] }, users: { current: "", options: [], selected: [], selector: !0 }, groups: { type: -1, options: [] }, dice: { options: [], current: [] } } }, computed: { msgCheck: function () { let e = ""; return this.state.guest && (this.content.username.trim().length < 4 || this.content.username.trim().length > 60) && (e += "<li>Escribe un nombre de usuario de tamaño adecuado.</li>"), "post" === this.state.editor && 0 === this.users.selected.length && -1 === this.groups.type && (e += "<li>Selecciona al menos un usuario.</li>"), this.state.admin && "post" === this.state.editor && 0 === this.users.selected.length && -1 === this.groups.type && (e += "<li>Selecciona un grupo.</li>"), "newtopic" !== this.state.editor && "post" !== this.state.editor || (this.content.subject.trim().length < 4 || this.content.subject.trim().length > 60) && (e += "<li>Escribe un titulo de tamaño adecuado.</li>"), this.content.msg.trim().length < 10 && (e += "<li>Escribe un mensaje lo suficientemente largo.</li>"), e }, sortedCharacters: function () { return Object.keys(this.users.options).length ? this.users.options.map(e => e.user).filter(e => -1 === this.users.selected.indexOf(e)).filter(e => e.toLowerCase().indexOf(this.users.current.toLowerCase()) > -1).sort((e, t) => e < t ? -1 : e > t ? 1 : 0) : [] }, sortedEditCharacters: function () { return this.users.selected.sort((e, t) => e < t ? -1 : e > t ? 1 : 0) } }, methods: { insertSomething: function (e, t) { const o = document.getElementById("usereply-editor"), n = e.replace(/-jump-/g, "\n"), i = t.replace(/-jump-/g, "\n"); if (document.selection) o.focus(), document.selection.createRange().text = n + document.selection.createRange().text + i; else if (o.selectionStart || "0" == o.selectionStart) { const e = o.selectionStart, t = o.selectionEnd, r = t + n.length + i.length; o.value = o.value.substring(0, e) + n + o.value.substring(e, t) + i + o.value.substring(t, o.value.length), o.setSelectionRange(r, r) } this.content.msg = o.value }, newDice: function () { this.dice.current.push({ dice: -1, number: 0 }) }, addCharacter: function (e) { this.users.selected.push(e), this.users.selector = !1, this.users.current = "", setTimeout(() => { this.users.selector = !0 }, 250) }, deleteCharacter: function (e) { this.users.current = "", this.users.selected.splice(e, 1) }, changeGroup: function () { this.users.selected = [], this.users.current = "" }, insertUrl: function () { const e = document.getElementById("usereply-editor"), t = e.selectionStart, o = e.selectionEnd; FNR.html.genPrompt("Insertar enlace", "Introduce el título del enlace. Por defecto, ponemos la este como título.", "Título del enlace", "").then(n => { !1 !== n ? this.insertSomething("[url=", "]" + n + "[/url]") : this.insertSomething("[url=", "]" + e.value.substring(t, o) + "[/url]") }) }, insertImg: function () { FNR.html.genPrompt("Insertar imagen", "Introduce las medidas de la imagen en píxeles pero sin la medida (por ejemplo 100x100). <u>En caso de dejarlo en blanco, se insertará con la medida inicial</u>.", "Medidas de la imagen", "").then(e => { !1 !== e ? this.insertSomething("[img=" + e + "]", "[/img]") : this.insertSomething("[img]", "[/img]") }) }, insertSpoiler: function () { FNR.html.genPrompt("Insertar spoiler", "Introduce el título del spoiler. <u>En caso de dejarlo en blanco, se insertará sin él.</u>.", "Título del spoiler", "").then(e => { !1 !== e ? this.insertSomething("[spoiler=" + e + "]", "[/spoiler]") : this.insertSomething("[spoiler]", "[/spoiler]") }) }, insertQuote: function () { FNR.html.genPrompt("Insertar cita", "Introduce el destinatario de la cita. <u>En caso de dejarlo en blanco, se insertará sin él.</u>.", "Destinatario de la cita", "").then(e => { !1 !== e ? this.insertSomething("[quote=" + e + "]", "[/quote]") : this.insertSomething("[quote]", "[/quote]") }) }, parseMsg: function () { window.forumParsing = !0, document.querySelector("#forum-realreply > form .sceditor-container > textarea") ? document.querySelector("#forum-realreply > form .sceditor-container > textarea").value = this.content.msg.replace(/#per/g, this.colors[this.colors.length - 1].hex) : document.querySelector("#forum-realreply > form textarea#text_editor_textarea").value = this.content.msg.replace(/#per/g, this.colors[this.colors.length - 1].hex), "reply" === this.state.editor && (FNR.content.isAutosave() && !1 !== FNR.cache.getData("post" + document.post.t.value + "-" + _userdata.user_id) && -1 !== _userdata.user_id && FNR.cache.delData("post" + document.post.t.value + "-" + _userdata.user_id), this.state.dice && ([].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice tr"), (e, t) => { 0 !== t && e.remove() }), document.querySelector("#forum-realreply > form #list_dice tr td").insertAdjacentHTML("beforeend", '<span id="dice_to_del"></span>'), this.dice.current.filter(e => -1 !== e.dice).filter(e => 0 !== parseFloat(e.number) && !isNaN(parseFloat(e.number))).forEach(e => { add_dice(document.querySelectorAll("#list_dice tr").length, e.dice, e.number) }))), this.state.guest && (this.content.subject.trim().length > 4 || this.content.subject.trim().length < 60) && (document.querySelector('#forum-realreply > form input[name="username"]').value = this.content.username), "post" === this.state.editor && this.users.selected.length > 0 && -1 === this.groups.type && this.users.selected.forEach(e => { document.querySelector("#forum-realreply > form #add_username").click(), document.querySelectorAll('#forum-realreply > form input[name="username[]"]')[document.querySelectorAll('#forum-realreply > form input[name="username[]"]').length - 2].value = e }), this.state.admin && ("post" === this.state.editor ? 0 === this.users.selected.length && -1 !== this.groups.type && (document.querySelector('#forum-realreply > form select[name="usergroup"]').value = this.groups.type) : "newtopic" === this.state.editor && -1 !== this.content.type && (document.querySelector('#forum-realreply > form input[type="radio"][name="topictype"][value="' + this.content.type + '"]').checked = !0)), "newtopic" !== this.state.editor && "post" !== this.state.editor || (this.content.subject.trim().length > 4 || this.content.subject.trim().length < 60) && (document.querySelector('#forum-realreply > form input[name="subject"]').value = this.content.subject.trim()) }, draftMsg: function () { this.parseMsg(), document.querySelector('#forum-realreply > form input[value="Bosquejo"], #forum-realreply input[value="Modificar"]').click() }, sendMsg: function () { this.parseMsg(), document.querySelector('#forum-realreply > form input[value="Enviar"], #forum-realreply input[value="Publicar"]').click() }, prevMsg: function () { this.parseMsg(), document.querySelector('#forum-realreply > form input[value="Previsualización"], #forum-realreply input[value="Previsualizar"]').click() } }, created() { const e = () => { if (document.querySelector('#forum-realreply > form input[name="username"]') && (this.content.username = document.querySelector('#forum-realreply > form input[name="username"]').value), document.querySelector("#forum-realreply > form #text_editor_textarea")) { let e = document.querySelector("#forum-realreply > form #text_editor_textarea").value; this.content.msg = e } if (document.querySelector('#forum-realreply > form input[name="subject"]')) { let e = document.querySelector('#forum-realreply input[name="subject"]').value; document.querySelector('#forum-realreply select[name="usergroup"]') && "" !== document.querySelector('#forum-realreply select[name="usergroup"]').value ? this.groups.type = document.querySelector('#forum-realreply select[name="usergroup"]').value : document.querySelector('#forum-realreply input[name="username[]"]') && [].forEach.call(document.querySelectorAll('#forum-realreply input[name="username[]"]'), e => { "" !== e.value && this.users.selected.push(e.value) }), this.content.subject = e } document.querySelector("#forum-realreply > form #list_dice") && ([].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice #post_dice option"), e => { "" !== e.value && this.dice.options.push({ value: e.value, content: e.textContent }) }), 1 === document.querySelectorAll("#forum-realreply > form #list_dice tr").length ? this.dice.current.push({ dice: -1, number: 0 }) : [].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice tr"), e => { "" !== e.querySelector("select").value && this.dice.current.push({ dice: parseFloat(e.querySelector("select").value), number: parseFloat(e.querySelector("input").value) }) })), 4 === document.querySelectorAll('#forum-realreply > form .panel.row3 input[type="radio"]').length && [].forEach.call(document.querySelectorAll('#forum-realreply > form .panel.row3 input[type="radio"]'), e => { this.content.options.push({ value: e.value, name: e.parentElement.textContent.trim() }), e.checked && (this.content.type = e.value) }), document.querySelector('#forum-realreply > form select[name="usergroup"]') && [].forEach.call(document.querySelectorAll('#forum-realreply > form select[name="usergroup"] option'), e => { "" !== e.value && this.groups.options.push({ value: e.value, name: e.textContent }) }), FNR.content.isAutosave() && "" === this.content.msg && !1 !== FNR.cache.getData("post" + document.post.t.value + "-" + _userdata.user_id) && -1 !== _userdata.user_id && (this.content.msg = FNR.cache.getData("post" + document.post.t.value + "-" + _userdata.user_id)), this.state.page = 1, document.onkeydown = (e => { const t = document.getElementById("usereply-editor"); document.activeElement === t && (e.ctrlKey && "b" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b]", "[/b]")) : e.ctrlKey && "i" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[i]", "[/i]")) : e.ctrlKey && "s" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[strike]", "[/strike]")) : e.ctrlKey && "u" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[u]", "[/u]")) : e.ctrlKey && "," === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[left]", "[/left]")) : e.ctrlKey && "." === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[center]", "[/center]")) : e.ctrlKey && "-" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[right]", "[/right]")) : e.ctrlKey && "o" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertUrl()) : e.ctrlKey && "p" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertImg()) : e.ctrlKey && "`" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSpoiler()) : e.ctrlKey && "+" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[code]", "[/code]")) : e.ctrlKey && "l" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertQuote()) : e.ctrlKey && "ñ" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[hide]", "[/hide]")) : e.ctrlKey && "´" === e.key ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[youtube]", "[/youtube]")) : "Home" === e.key ? (e.preventDefault(), e.stopPropagation(), t.setSelectionRange(0, 0)) : "End" === e.key ? (e.preventDefault(), e.stopPropagation(), t.setSelectionRange(t.value.length, t.value.length)) : e.ctrlKey && "1" === e.key && "undefined" !== this.colors[0] && this.colors.length - 1 != 0 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[0].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "!" === e.key && "undefined" !== this.colors[0] && this.colors.length - 1 != 0 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[0].hex + "]", "[/color][/b]")) : e.ctrlKey && "2" === e.key && "undefined" !== this.colors[1] && this.colors.length - 1 != 1 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[1].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && '"' === e.key && "undefined" !== this.colors[1] && this.colors.length - 1 != 1 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[1].hex + "]", "[/color][/b]")) : e.ctrlKey && "3" === e.key && "undefined" !== this.colors[2] && this.colors.length - 1 != 2 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[2].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "·" === e.key && "undefined" !== this.colors[2] && this.colors.length - 1 != 2 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[2].hex + "]", "[/color][/b]")) : e.ctrlKey && "4" === e.key && "undefined" !== this.colors[3] && this.colors.length - 1 != 3 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[3].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "$" === e.key && "undefined" !== this.colors[3] && this.colors.length - 1 != 3 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[3].hex + "]", "[/color][/b]")) : e.ctrlKey && "5" === e.key && "undefined" !== this.colors[4] && this.colors.length - 1 != 4 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[4].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "%" === e.key && "undefined" !== this.colors[4] && this.colors.length - 1 != 4 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[4].hex + "]", "[/color][/b]")) : e.ctrlKey && "6" === e.key && "undefined" !== this.colors[5] && this.colors.length - 1 != 5 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[5].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "&" === e.key && "undefined" !== this.colors[5] && this.colors.length - 1 != 5 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[5].hex + "]", "[/color][/b]")) : e.ctrlKey && "7" === e.key && "undefined" !== this.colors[6] && this.colors.length - 1 != 6 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[6].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "/" === e.key && "undefined" !== this.colors[6] && this.colors.length - 1 != 6 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[6].hex + "]", "[/color][/b]")) : e.ctrlKey && "8" === e.key && "undefined" !== this.colors[7] && this.colors.length - 1 != 7 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[7].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && "(" === e.key && "undefined" !== this.colors[7] && this.colors.length - 1 != 7 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[7].hex + "]", "[/color][/b]")) : e.ctrlKey && "9" === e.key && "undefined" !== this.colors[8] && this.colors.length - 1 != 8 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=" + this.colors[8].hex + "]", "[/color]")) : e.ctrlKey && e.shiftKey && ")" === e.key && "undefined" !== this.colors[8] && this.colors.length - 1 != 8 ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=" + this.colors[8].hex + "]", "[/color][/b]")) : e.ctrlKey && "º" === e.key && void 0 !== forumConfig.skinOptions.customColour ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[color=#per]", "[/color]")) : e.ctrlKey && e.shiftKey && "ª" === e.key && void 0 !== forumConfig.skinOptions.customColour ? (e.preventDefault(), e.stopPropagation(), this.insertSomething("[b][color=#per]", "[/color][/b]")) : e.ctrlKey && e.shiftKey && "Enter" === e.key && !this.msgCheck.length ? (e.preventDefault(), e.stopPropagation(), this.prevMsg()) : e.ctrlKey && e.altKey && "Enter" === e.key && "reply" === this.state.editor && this.state.dice && !this.msgCheck.length ? (e.preventDefault(), e.stopPropagation(), this.draftMsg()) : e.ctrlKey && "Enter" === e.key && !this.msgCheck.length && (e.preventDefault(), e.stopPropagation(), this.sendMsg())) }), setTimeout(() => { FNR.behaviour.genDropeable() }, 250) }, t = () => { "post" === this.state.editor ? FNR.forum.getMembers(!0).then(t => { this.users.options = t, e() }) : e() }; void 0 !== document.post && ("editpost" === document.post.mode.value ? void 0 !== document.post.modif_topic_title ? this.state.editor = "newtopic" : this.state.editor = "reply" : "edit" === document.post.mode.value ? this.state.editor = "post" : this.state.editor = document.post.mode.value), this.state.guest ? setTimeout(() => { e() }, 2e3) : void 0 === forumConfig.skinOptions.customColour ? t() : FNR.user.profile.getData([{ name: forumConfig.skinOptions.customColour, type: "input" }]).then(e => { this.colors.push({ hex: e[0].value, name: "Personal" }), t() }), this.state.replies = document.querySelectorAll(".forum-otherposts > *").length || document.querySelector('input[type="submit"][value="Modificar"]') ? "Varios" : "" }, mounted() { insertIntoEditor = (e => { try { this.insertSomething(" " + e + " ", "") } catch (e) { console && console.error(e) } }), $("#quickEmojInternal").on("load", function () { $("#quickEmojInternal").contents().find("head").append("<style>body{padding: 1rem!important}</style>") }); let e = ""; document.querySelector('p[style="color: red;"]') && (e = document.querySelector('p[style="color: red;"]').textContent, "preview" === document.querySelector('p[style="color: red;"]').parentElement.parentElement.id ? document.querySelector('p[style="color: red;"]').parentElement.parentElement.remove() : document.querySelector('p[style="color: red;"]').remove()), window.forumParsing = !1, "" !== e && FNR.html.genNotification("Atención", "Hubo un problema al enviar. Inténtalo de nuevo.", "fas fa-exclamation"), FNR.content.isAutosave() && window.addEventListener("beforeunload", () => { !1 === forumParsing && ("" === document.querySelector("#usereply-editor").value && !1 !== FNR.cache.getData("post" + document.post.t.value + "-" + _userdata.user_id) || "" !== document.querySelector("#usereply-editor").value) && FNR.cache.setData("post" + document.post.t.value + "-" + _userdata.user_id, document.querySelector("#usereply-editor").value, -1) }, !1) },
3
- template: '\n <div id="forum-usereply">\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <aviso-foro v-show="msgCheck.length">\n <ul v-html="msgCheck"></ul>\n </aviso-foro>\n <ul id="usereply-extra" class="forum-fieldlist no-style" v-if="state.editor !== \'reply\'">\n <template v-if="state.guest">\n <li>\n <campo-foro data-name="Nombre de usuario">\n <input type="text" v-model="content.username" placeholder="Escribe tu nombre de usuario." />\n </campo-foro>\n </li>\n </template>\n <template v-if="state.editor === \'post\'">\n <li>\n <campo-foro data-name="Usuarios">\n <div class="character-selector">\n <input type="text" v-model="users.current" placeholder="Escribe el nombre de un usuario." :disabled="groups.type !== -1" />\n <ul class="no-style selector-list" v-if="users.selector && sortedCharacters.length > 0">\n <li v-for="(character, index) in sortedCharacters" v-on:click="addCharacter(character)" :title="\'Seleccionar \' + character">{{ character }}<i class="fas fa-plus"></i></li>\n </ul>\n </div>\n <ul v-if="sortedEditCharacters.length" class="no-style character-list">\n <li v-for="(character, index) in sortedEditCharacters" v-on:click="deleteCharacter(index)" :title="\'Quitar \' + character"><i class="fas fa-times"></i> {{ character }}</li>\n </ul>\n </campo-foro>\n </li>\n </template>\n <template v-if="state.admin">\n <template v-if="state.editor === \'post\'">\n <li>\n <campo-foro data-name="Grupo">\n <div class="select-container">\n <select v-model="groups.type" v-on:change="changeGroup()" :disabled="users.selected.length !== 0">\n <option value="-1" hidden>Selecciona un grupo.</option>\n <option v-for="option in groups.options" :value="option.value">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </template>\n <template v-else-if="state.editor === \'newtopic\' && content.type !== -1">\n <li>\n <campo-foro data-name="Tipo de tema">\n <div class="select-container">\n <select v-model="content.type">\n <option value="-1" hidden>Selecciona una opción.</option>\n <option v-for="option in content.options" :value="option.value">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </template>\n </template>\n <template v-if="state.editor === \'newtopic\' || state.editor === \'post\'">\n <li>\n <campo-foro data-name="Título">\n <input type="text" v-model="content.subject" placeholder="Escribe el título." />\n </campo-foro>\n </li>\n </template>\n </ul>\n <div id="usereply-top" class="usereply-header">\n <h3>Editor de texto<small>Ver guía de <a href="https://www.bbcode.org/reference.php" target="_blank">BBCode</a>.</small></h3>\n <div id="usereply-buttons">\n <ul class="is-hidden-mobile">\n <li id="bold-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[b]\', \'[/b]\')" title="Negrita">\n <i class="fas fa-bold"></i>\n </button>\n </li>\n <li id="italic-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[i]\', \'[/i]\')" title="Cursiva">\n <i class="fas fa-italic"></i>\n </button>\n </li>\n <li id="underline-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[u]\', \'[/u]\')" title="Subrayado">\n <i class="fas fa-underline"></i>\n </button>\n </li>\n <li id="strike-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[strike]\', \'[/strike]\')" title="Tachado">\n <i class="fas fa-strikethrough"></i>\n </button>\n </li>\n </ul>\n <ul>\n <li id="colour-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Color">\n <i class="fas fa-palette"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="colour-list" class="dropdown-content">\n <div v-for="color in colors" class="usereply-option" :style="\'color:\' + color.hex" v-on:click="insertSomething(\'[color=\' + color.hex + \']\', \'[/color]\')">{{ color.name }}</div>\n </div>\n </div>\n </div>\n </li>\n <li id="emoji-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Emoticono">\n <i class="fas fa-smile"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="emoji-list" class="dropdown-content">\n <iframe id="quickEmojInternal" marginheight="0" marginwidth="0" name="smilies" scrolling="auto" src="/smilies?mode=smilies_frame"></iframe>\n </div>\n </div>\n </div>\n </li>\n <li id="align-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Alinear">\n <i class="fas fa-align-justify"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="align-list" class="dropdown-content">\n <div class="usereply-option" v-on:click="insertSomething(\'[left]\', \'[/left]\')">Izquierda</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[center]\', \'[/center]\')">Centro</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[right]\', \'[/right]\')">Derecha</div>\n </div>\n </div>\n </div>\n </li>\n <li id="toolbox-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Otros">\n <i class="fas fa-toolbox"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="toolbox-list" class="dropdown-content">\n <div class="usereply-option" v-on:click="insertUrl()">Enlace</div>\n <div class="usereply-option" v-on:click="insertImg()">Imagen</div>\n <div class="usereply-option" v-on:click="insertSpoiler()">Spoiler</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[code]\', \'[/code]\')">Code</div>\n <div class="usereply-option" v-on:click="insertQuote()">Cita</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[hide]\', \'[/hide]\')">Ocultar</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[youtube]\', \'[/youtube]\')">Youtube</div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </div>\n <textarea id="usereply-editor" contenteditable="true" v-model="content.msg"></textarea>\n <div id="usereply-comand" v-if="!msgCheck.length">\n <button class="button1 btn-main" v-on:click="sendMsg()">Enviar</button>\n <button class="button1" v-on:click="draftMsg()" v-if="state.editor === \'editpostdraft\'">Modificar</button>\n <button class="button1" v-on:click="draftMsg()" v-else-if="state.editor === \'reply\' && state.dice">Bosquejo</button>\n <button class="button1" v-on:click="prevMsg()">Previsualizar</button>\n </div>\n <div v-if="state.editor === \'reply\' && state.dice" id="usereply-dice">\n <div class="usereply-header">\n <h3>Tirar dados</h3>\n </div>\n <ul>\n <li v-for="(item, index) in dice.current">\n <div class="select-container">\n <select v-model="item.dice">\n <option value="-1" selected hidden>Selec. un dado</option>\n <option v-for="option in dice.options" :value="option.value">{{ option.content }}</option>\n </select>\n </div>\n <input type="number" v-model="item.number" />\n <button v-on:click="newDice()" v-if="(index + 1) === dice.current.length" class="dice-more">\n <i class="fas fa-plus"></i>\n </button>\n <div v-else class="dice-more"></div>\n </li>\n </ul>\n </div>\n </template>\n </div>\n '
4
- });
1
+ Vue.component("panel-control",{props:["dataElements"],data:function(){return{userId:_userdata.user_id,state:{page:0},content:{original:[],current:[]}}},computed:{validationPanel:function(){return FNR.utility.genValidation(this.content.current)},toSave:function(){let e=[];return[].forEach.call(this.content.current,(t,o)=>{t.value!==this.content.original[o].value&&e.push({name:t.name,type:t.type,value:t.value})}),e}},methods:{updateProfile:function(){this.state.page=2,FNR.user.profile.setData(this.toSave).then(e=>{if(e){let e=!1;this.toSave.map(t=>{t.name.toLowerCase().indexOf("tema")>-1&&(e=!0)}),e?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),FNR.user.setTheme(!0)):(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2e3))}else FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData(JSON.parse(this.dataElements.replace(/'/g,'"'))).then(e=>{this.content.original=JSON.parse(JSON.stringify(e)),this.content.current=e,this.state.page=1})},template:'\n <section id="forum-cp" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Editar perfil</h2>\n <hr />\n <p>En esta página podrás editar tu perfil de usuario. En caso de que quieras editar tu contraseña, por favor dirígete a <a target="_blank" title="Ir a «Cambiar contraseña»" :href="\'/profile?change_password=Cambiar+tu+contraseña&mode=editprofile&page_profil=informations&user_id=\' + userId">este enlace</a>.</p>\n <p>Si estás experimentando problemas con el foro, pulsa <a title="Reiniciar cache" onclick="localStorage.clear(); window.location.replace(\'/\')">este otro</a>. Puede que los solucione.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <aviso-foro v-show="validationPanel !== \'\'">\n <ul v-html="validationPanel"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li v-for="item in content.current">\n <campo-foro :data-name="item.name">\n <input v-model="item.value" v-if="item.type === \'input\' || item.type === \'avatar\'" type="text"/>\n <textarea v-model="item.value" v-else-if="item.type === \'textarea\'"></textarea>\n <div v-else-if="item.type === \'select\'" class="select-container">\n <select v-model="item.value">\n <option :value="option.value" v-for="option in item.options">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </ul>\n <div id="usereply-comand" v-if="toSave.length && validationPanel === \'\'">\n <button class="button1 btn-main" v-on:click="updateProfile()" title="Actualizar perfil">Actualizar</button>\n </div>\n </template>\n <template v-if="state.page === 2">\n <cargando-foro data-text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("lista-bosquejos",{data:function(){return{state:{page:0},content:{drafts:[]}}},created(){FNR.user.profile.getDrafts().then(e=>{this.state.page=1,this.content.drafts=e})},template:'\n <section class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Lista de bosquejos</h2>\n <hr />\n <p>En esta página tienes tu lista de tus bosquejos. No es una lista completa, tan solo muestra la primera página. Si deseas ver más bosquejos, aligera la lista publicándolos.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <section id="forum-drafts" class="forum-topiclist">\n <lista-temas-cabecera data-elements="[\'Tema\', \'Información\']"></lista-temas-cabecera>\n <ul class="topiclist-topics no-style">\n <template v-if="content.drafts === false">\n <li class="is-not-lastpost not-status">\n <h6>No tienes bosquejos guardados</h6>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-lastpost not-status" v-for="draft in content.drafts">\n <temas-foro data-type="draft" data-mode="" :data-url="draft.topic.url" :data-replies="draft.info.location" :data-views="draft.info.date" :data-quick="draft.modify">\n <template slot="title">{{ draft.topic.name }}</template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n </template>\n </section>\n '}),Vue.component("editor-foro",{data:function(){return{state:{page:0,editor:"none",admin:1===_userdata.user_level,guest:0===_userdata.session_logged_in,dice:document.querySelectorAll("#list_dice").length},colors:FNR.forum.getColors(),content:{username:"",subject:"",msg:"",type:-1,options:[]},users:{current:"",options:[],selected:[],selector:!0},groups:{type:-1,options:[]},dice:{options:[],current:[]}}},computed:{msgCheck:function(){let e="";return this.state.guest&&(this.content.username.trim().length<4||this.content.username.trim().length>60)&&(e+="<li>Escribe un nombre de usuario de tamaño adecuado.</li>"),"post"===this.state.editor&&0===this.users.selected.length&&-1===this.groups.type&&(e+="<li>Selecciona al menos un usuario.</li>"),this.state.admin&&"post"===this.state.editor&&0===this.users.selected.length&&-1===this.groups.type&&(e+="<li>Selecciona un grupo.</li>"),"newtopic"!==this.state.editor&&"post"!==this.state.editor||(this.content.subject.trim().length<4||this.content.subject.trim().length>60)&&(e+="<li>Escribe un titulo de tamaño adecuado.</li>"),this.content.msg.trim().length<10&&(e+="<li>Escribe un mensaje lo suficientemente largo.</li>"),e},sortedCharacters:function(){return Object.keys(this.users.options).length?this.users.options.map(e=>e.user).filter(e=>-1===this.users.selected.indexOf(e)).filter(e=>e.toLowerCase().indexOf(this.users.current.toLowerCase())>-1).sort((e,t)=>e<t?-1:e>t?1:0):[]},sortedEditCharacters:function(){return this.users.selected.sort((e,t)=>e<t?-1:e>t?1:0)}},methods:{insertSomething:function(e,t){const o=document.getElementById("usereply-editor"),n=e.replace(/-jump-/g,"\n"),i=t.replace(/-jump-/g,"\n");if(document.selection)o.focus(),document.selection.createRange().text=n+document.selection.createRange().text+i;else if(o.selectionStart||"0"==o.selectionStart){const e=o.selectionStart,t=o.selectionEnd,r=t+n.length+i.length;o.value=o.value.substring(0,e)+n+o.value.substring(e,t)+i+o.value.substring(t,o.value.length),o.setSelectionRange(r,r)}this.content.msg=o.value},newDice:function(){this.dice.current.push({dice:-1,number:0})},addCharacter:function(e){this.users.selected.push(e),this.users.selector=!1,this.users.current="",setTimeout(()=>{this.users.selector=!0},250)},deleteCharacter:function(e){this.users.current="",this.users.selected.splice(e,1)},changeGroup:function(){this.users.selected=[],this.users.current=""},insertUrl:function(){const e=document.getElementById("usereply-editor"),t=e.selectionStart,o=e.selectionEnd;FNR.html.genPrompt("Insertar enlace","Introduce el título del enlace. Por defecto, ponemos la este como título.","Título del enlace","").then(n=>{!1!==n?this.insertSomething("[url=","]"+n+"[/url]"):this.insertSomething("[url=","]"+e.value.substring(t,o)+"[/url]")})},insertImg:function(){FNR.html.genPrompt("Insertar imagen","Introduce las medidas de la imagen en píxeles pero sin la medida (por ejemplo 100x100). <u>En caso de dejarlo en blanco, se insertará con la medida inicial</u>.","Medidas de la imagen","").then(e=>{!1!==e?this.insertSomething("[img="+e+"]","[/img]"):this.insertSomething("[img]","[/img]")})},insertSpoiler:function(){FNR.html.genPrompt("Insertar spoiler","Introduce el título del spoiler. <u>En caso de dejarlo en blanco, se insertará sin él.</u>.","Título del spoiler","").then(e=>{!1!==e?this.insertSomething("[spoiler="+e+"]","[/spoiler]"):this.insertSomething("[spoiler]","[/spoiler]")})},insertQuote:function(){FNR.html.genPrompt("Insertar cita","Introduce el destinatario de la cita. <u>En caso de dejarlo en blanco, se insertará sin él.</u>.","Destinatario de la cita","").then(e=>{!1!==e?this.insertSomething("[quote="+e+"]","[/quote]"):this.insertSomething("[quote]","[/quote]")})},parseMsg:function(){window.forumParsing=!0,document.querySelector("#forum-realreply > form .sceditor-container > textarea")?document.querySelector("#forum-realreply > form .sceditor-container > textarea").value=this.content.msg.replace(/#per/g,this.colors[this.colors.length-1].hex):document.querySelector("#forum-realreply > form textarea#text_editor_textarea").value=this.content.msg.replace(/#per/g,this.colors[this.colors.length-1].hex),"reply"===this.state.editor&&(FNR.content.isAutosave()&&!1!==FNR.cache.getData("post"+document.post.t.value+"-"+_userdata.user_id)&&-1!==_userdata.user_id&&FNR.cache.delData("post"+document.post.t.value+"-"+_userdata.user_id),this.state.dice&&([].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice tr"),(e,t)=>{0!==t&&e.remove()}),document.querySelector("#forum-realreply > form #list_dice tr td").insertAdjacentHTML("beforeend",'<span id="dice_to_del"></span>'),this.dice.current.filter(e=>-1!==e.dice).filter(e=>0!==parseFloat(e.number)&&!isNaN(parseFloat(e.number))).forEach(e=>{add_dice(document.querySelectorAll("#list_dice tr").length,e.dice,e.number)}))),this.state.guest&&(this.content.subject.trim().length>4||this.content.subject.trim().length<60)&&(document.querySelector('#forum-realreply > form input[name="username"]').value=this.content.username),"post"===this.state.editor&&this.users.selected.length>0&&-1===this.groups.type&&this.users.selected.forEach(e=>{document.querySelector("#forum-realreply > form #add_username").click(),document.querySelectorAll('#forum-realreply > form input[name="username[]"]')[document.querySelectorAll('#forum-realreply > form input[name="username[]"]').length-2].value=e}),this.state.admin&&("post"===this.state.editor?0===this.users.selected.length&&-1!==this.groups.type&&(document.querySelector('#forum-realreply > form select[name="usergroup"]').value=this.groups.type):"newtopic"===this.state.editor&&-1!==this.content.type&&(document.querySelector('#forum-realreply > form input[type="radio"][name="topictype"][value="'+this.content.type+'"]').checked=!0)),"newtopic"!==this.state.editor&&"post"!==this.state.editor||(this.content.subject.trim().length>4||this.content.subject.trim().length<60)&&(document.querySelector('#forum-realreply > form input[name="subject"]').value=this.content.subject.trim())},draftMsg:function(){this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Bosquejo"], #forum-realreply input[value="Modificar"]').click()},sendMsg:function(){this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Enviar"], #forum-realreply input[value="Publicar"]').click()},prevMsg:function(){this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Previsualización"], #forum-realreply input[value="Previsualizar"]').click()}},created(){const e=()=>{if(document.querySelector('#forum-realreply > form input[name="username"]')&&(this.content.username=document.querySelector('#forum-realreply > form input[name="username"]').value),document.querySelector("#forum-realreply > form #text_editor_textarea")){let e=document.querySelector("#forum-realreply > form #text_editor_textarea").value;this.content.msg=e}if(document.querySelector('#forum-realreply > form input[name="subject"]')){let e=document.querySelector('#forum-realreply input[name="subject"]').value;document.querySelector('#forum-realreply select[name="usergroup"]')&&""!==document.querySelector('#forum-realreply select[name="usergroup"]').value?this.groups.type=document.querySelector('#forum-realreply select[name="usergroup"]').value:document.querySelector('#forum-realreply input[name="username[]"]')&&[].forEach.call(document.querySelectorAll('#forum-realreply input[name="username[]"]'),e=>{""!==e.value&&this.users.selected.push(e.value)}),this.content.subject=e}document.querySelector("#forum-realreply > form #list_dice")&&([].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice #post_dice option"),e=>{""!==e.value&&this.dice.options.push({value:e.value,content:e.textContent})}),1===document.querySelectorAll("#forum-realreply > form #list_dice tr").length?this.dice.current.push({dice:-1,number:0}):[].forEach.call(document.querySelectorAll("#forum-realreply > form #list_dice tr"),e=>{""!==e.querySelector("select").value&&this.dice.current.push({dice:parseFloat(e.querySelector("select").value),number:parseFloat(e.querySelector("input").value)})})),4===document.querySelectorAll('#forum-realreply > form .panel.row3 input[type="radio"]').length&&[].forEach.call(document.querySelectorAll('#forum-realreply > form .panel.row3 input[type="radio"]'),e=>{this.content.options.push({value:e.value,name:e.parentElement.textContent.trim()}),e.checked&&(this.content.type=e.value)}),document.querySelector('#forum-realreply > form select[name="usergroup"]')&&[].forEach.call(document.querySelectorAll('#forum-realreply > form select[name="usergroup"] option'),e=>{""!==e.value&&this.groups.options.push({value:e.value,name:e.textContent})}),FNR.content.isAutosave()&&""===this.content.msg&&!1!==FNR.cache.getData("post"+document.post.t.value+"-"+_userdata.user_id)&&-1!==_userdata.user_id&&(this.content.msg=FNR.cache.getData("post"+document.post.t.value+"-"+_userdata.user_id)),this.state.page=1,document.onkeydown=(e=>{const t=document.getElementById("usereply-editor");document.activeElement===t&&(e.ctrlKey&&"b"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b]","[/b]")):e.ctrlKey&&"i"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[i]","[/i]")):e.ctrlKey&&"s"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[strike]","[/strike]")):e.ctrlKey&&"u"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[u]","[/u]")):e.ctrlKey&&","===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[left]","[/left]")):e.ctrlKey&&"."===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[center]","[/center]")):e.ctrlKey&&"-"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[right]","[/right]")):e.ctrlKey&&"o"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertUrl()):e.ctrlKey&&"p"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertImg()):e.ctrlKey&&"`"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSpoiler()):e.ctrlKey&&"+"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[code]","[/code]")):e.ctrlKey&&"l"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertQuote()):e.ctrlKey&&"ñ"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[hide]","[/hide]")):e.ctrlKey&&"´"===e.key?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[youtube]","[/youtube]")):"Home"===e.key?(e.preventDefault(),e.stopPropagation(),t.setSelectionRange(0,0)):"End"===e.key?(e.preventDefault(),e.stopPropagation(),t.setSelectionRange(t.value.length,t.value.length)):e.ctrlKey&&"1"===e.key&&"undefined"!==this.colors[0]&&this.colors.length-1!=0?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[0].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"!"===e.key&&"undefined"!==this.colors[0]&&this.colors.length-1!=0?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[0].hex+"]","[/color][/b]")):e.ctrlKey&&"2"===e.key&&"undefined"!==this.colors[1]&&this.colors.length-1!=1?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[1].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&'"'===e.key&&"undefined"!==this.colors[1]&&this.colors.length-1!=1?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[1].hex+"]","[/color][/b]")):e.ctrlKey&&"3"===e.key&&"undefined"!==this.colors[2]&&this.colors.length-1!=2?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[2].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"·"===e.key&&"undefined"!==this.colors[2]&&this.colors.length-1!=2?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[2].hex+"]","[/color][/b]")):e.ctrlKey&&"4"===e.key&&"undefined"!==this.colors[3]&&this.colors.length-1!=3?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[3].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"$"===e.key&&"undefined"!==this.colors[3]&&this.colors.length-1!=3?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[3].hex+"]","[/color][/b]")):e.ctrlKey&&"5"===e.key&&"undefined"!==this.colors[4]&&this.colors.length-1!=4?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[4].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"%"===e.key&&"undefined"!==this.colors[4]&&this.colors.length-1!=4?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[4].hex+"]","[/color][/b]")):e.ctrlKey&&"6"===e.key&&"undefined"!==this.colors[5]&&this.colors.length-1!=5?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[5].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"&"===e.key&&"undefined"!==this.colors[5]&&this.colors.length-1!=5?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[5].hex+"]","[/color][/b]")):e.ctrlKey&&"7"===e.key&&"undefined"!==this.colors[6]&&this.colors.length-1!=6?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[6].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"/"===e.key&&"undefined"!==this.colors[6]&&this.colors.length-1!=6?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[6].hex+"]","[/color][/b]")):e.ctrlKey&&"8"===e.key&&"undefined"!==this.colors[7]&&this.colors.length-1!=7?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[7].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&"("===e.key&&"undefined"!==this.colors[7]&&this.colors.length-1!=7?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[7].hex+"]","[/color][/b]")):e.ctrlKey&&"9"===e.key&&"undefined"!==this.colors[8]&&this.colors.length-1!=8?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color="+this.colors[8].hex+"]","[/color]")):e.ctrlKey&&e.shiftKey&&")"===e.key&&"undefined"!==this.colors[8]&&this.colors.length-1!=8?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color="+this.colors[8].hex+"]","[/color][/b]")):e.ctrlKey&&"º"===e.key&&void 0!==forumConfig.skinOptions.customColour?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[color=#per]","[/color]")):e.ctrlKey&&e.shiftKey&&"ª"===e.key&&void 0!==forumConfig.skinOptions.customColour?(e.preventDefault(),e.stopPropagation(),this.insertSomething("[b][color=#per]","[/color][/b]")):e.ctrlKey&&e.shiftKey&&"Enter"===e.key&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.prevMsg()):e.ctrlKey&&e.altKey&&"Enter"===e.key&&"reply"===this.state.editor&&this.state.dice&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.draftMsg()):e.ctrlKey&&"Enter"===e.key&&!this.msgCheck.length&&(e.preventDefault(),e.stopPropagation(),this.sendMsg()))}),setTimeout(()=>{FNR.behaviour.genDropeable()},250)},t=()=>{"post"===this.state.editor?FNR.forum.getMembers(!0).then(t=>{this.users.options=t,e()}):e()};void 0!==document.post&&("editpost"===document.post.mode.value?void 0!==document.post.modif_topic_title?this.state.editor="newtopic":this.state.editor="reply":"edit"===document.post.mode.value?this.state.editor="post":this.state.editor=document.post.mode.value),this.state.guest?setTimeout(()=>{e()},2e3):void 0===forumConfig.skinOptions.customColour?t():FNR.user.profile.getData([{name:forumConfig.skinOptions.customColour,type:"input"}]).then(e=>{this.colors.push({hex:e[0].value,name:"Personal"}),t()}),this.state.replies=document.querySelectorAll(".forum-otherposts > *").length||document.querySelector('input[type="submit"][value="Modificar"]')?"Varios":""},mounted(){insertIntoEditor=(e=>{try{this.insertSomething(" "+e+" ","")}catch(e){console&&console.error(e)}}),$("#quickEmojInternal").on("load",function(){$("#quickEmojInternal").contents().find("head").append("<style>body{padding: 1rem!important}</style>")});let e="";document.querySelector('p[style="color: red;"]')&&(e=document.querySelector('p[style="color: red;"]').textContent,"preview"===document.querySelector('p[style="color: red;"]').parentElement.parentElement.id?document.querySelector('p[style="color: red;"]').parentElement.parentElement.remove():document.querySelector('p[style="color: red;"]').remove()),window.forumParsing=!1,""!==e&&FNR.html.genNotification("Atención","Hubo un problema al enviar. Inténtalo de nuevo.","fas fa-exclamation"),FNR.content.isAutosave()&&window.addEventListener("beforeunload",()=>{!1===forumParsing&&(""===document.querySelector("#usereply-editor").value&&!1!==FNR.cache.getData("post"+document.post.t.value+"-"+_userdata.user_id)||""!==document.querySelector("#usereply-editor").value)&&FNR.cache.setData("post"+document.post.t.value+"-"+_userdata.user_id,document.querySelector("#usereply-editor").value,-1)},!1)},
2
+ template:'\n <div id="forum-usereply">\n <template v-if="state.page === 0">\n <cargando-foro data-text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <aviso-foro v-show="msgCheck.length">\n <ul v-html="msgCheck"></ul>\n </aviso-foro>\n <ul id="usereply-extra" class="forum-fieldlist no-style" v-if="state.editor !== \'reply\'">\n <template v-if="state.guest">\n <li>\n <campo-foro data-name="Nombre de usuario">\n <input type="text" v-model="content.username" placeholder="Escribe tu nombre de usuario." />\n </campo-foro>\n </li>\n </template>\n <template v-if="state.editor === \'post\'">\n <li>\n <campo-foro data-name="Usuarios">\n <div class="character-selector">\n <input type="text" v-model="users.current" placeholder="Escribe el nombre de un usuario." :disabled="groups.type !== -1" />\n <ul class="no-style selector-list" v-if="users.selector && sortedCharacters.length > 0">\n <li v-for="(character, index) in sortedCharacters" v-on:click="addCharacter(character)" :title="\'Seleccionar \' + character">{{ character }}<i class="fas fa-plus"></i></li>\n </ul>\n </div>\n <ul v-if="sortedEditCharacters.length" class="no-style character-list">\n <li v-for="(character, index) in sortedEditCharacters" v-on:click="deleteCharacter(index)" :title="\'Quitar \' + character"><i class="fas fa-times"></i> {{ character }}</li>\n </ul>\n </campo-foro>\n </li>\n </template>\n <template v-if="state.admin">\n <template v-if="state.editor === \'post\'">\n <li>\n <campo-foro data-name="Grupo">\n <div class="select-container">\n <select v-model="groups.type" v-on:change="changeGroup()" :disabled="users.selected.length !== 0">\n <option value="-1" hidden>Selecciona un grupo.</option>\n <option v-for="option in groups.options" :value="option.value">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </template>\n <template v-else-if="state.editor === \'newtopic\' && content.type !== -1">\n <li>\n <campo-foro data-name="Tipo de tema">\n <div class="select-container">\n <select v-model="content.type">\n <option value="-1" hidden>Selecciona una opción.</option>\n <option v-for="option in content.options" :value="option.value">{{ option.name }}</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </template>\n </template>\n <template v-if="state.editor === \'newtopic\' || state.editor === \'post\'">\n <li>\n <campo-foro data-name="Título">\n <input type="text" v-model="content.subject" placeholder="Escribe el título." />\n </campo-foro>\n </li>\n </template>\n </ul>\n <div id="usereply-top" class="usereply-header">\n <h3>Editor de texto<small>Ver guía de <a href="https://www.bbcode.org/reference.php" target="_blank">BBCode</a>.</small></h3>\n <div id="usereply-buttons">\n <ul class="is-hidden-mobile">\n <li id="bold-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[b]\', \'[/b]\')" title="Negrita">\n <i class="fas fa-bold"></i>\n </button>\n </li>\n <li id="italic-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[i]\', \'[/i]\')" title="Cursiva">\n <i class="fas fa-italic"></i>\n </button>\n </li>\n <li id="underline-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[u]\', \'[/u]\')" title="Subrayado">\n <i class="fas fa-underline"></i>\n </button>\n </li>\n <li id="strike-button">\n <button class="usereply-button" v-on:click="insertSomething(\'[strike]\', \'[/strike]\')" title="Tachado">\n <i class="fas fa-strikethrough"></i>\n </button>\n </li>\n </ul>\n <ul>\n <li id="colour-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Color">\n <i class="fas fa-palette"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="colour-list" class="dropdown-content">\n <div v-for="color in colors" class="usereply-option" :style="\'color:\' + color.hex" v-on:click="insertSomething(\'[color=\' + color.hex + \']\', \'[/color]\')">{{ color.name }}</div>\n </div>\n </div>\n </div>\n </li>\n <li id="emoji-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Emoticono">\n <i class="fas fa-smile"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="emoji-list" class="dropdown-content">\n <iframe id="quickEmojInternal" marginheight="0" marginwidth="0" name="smilies" scrolling="auto" src="/smilies?mode=smilies_frame"></iframe>\n </div>\n </div>\n </div>\n </li>\n <li id="align-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Alinear">\n <i class="fas fa-align-justify"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="align-list" class="dropdown-content">\n <div class="usereply-option" v-on:click="insertSomething(\'[left]\', \'[/left]\')">Izquierda</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[center]\', \'[/center]\')">Centro</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[right]\', \'[/right]\')">Derecha</div>\n </div>\n </div>\n </div>\n </li>\n <li id="toolbox-button">\n <div class="dropdown upper-controls is-dropeable is-right">\n <div class="dropdown-trigger">\n <button class="usereply-button" title="Otros">\n <i class="fas fa-toolbox"></i>\n </button>\n </div>\n <div class="dropdown-menu" role="menu">\n <div id="toolbox-list" class="dropdown-content">\n <div class="usereply-option" v-on:click="insertUrl()">Enlace</div>\n <div class="usereply-option" v-on:click="insertImg()">Imagen</div>\n <div class="usereply-option" v-on:click="insertSpoiler()">Spoiler</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[code]\', \'[/code]\')">Code</div>\n <div class="usereply-option" v-on:click="insertQuote()">Cita</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[hide]\', \'[/hide]\')">Ocultar</div>\n <div class="usereply-option" v-on:click="insertSomething(\'[youtube]\', \'[/youtube]\')">Youtube</div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </div>\n <textarea id="usereply-editor" contenteditable="true" v-model="content.msg"></textarea>\n <div id="usereply-comand" v-if="!msgCheck.length">\n <button class="button1 btn-main" v-on:click="sendMsg()">Enviar</button>\n <button class="button1" v-on:click="draftMsg()" v-if="state.editor === \'editpostdraft\'">Modificar</button>\n <button class="button1" v-on:click="draftMsg()" v-else-if="state.editor === \'reply\' && state.dice">Bosquejo</button>\n <button class="button1" v-on:click="prevMsg()">Previsualizar</button>\n </div>\n <div v-if="state.editor === \'reply\' && state.dice" id="usereply-dice">\n <div class="usereply-header">\n <h3>Tirar dados</h3>\n </div>\n <ul>\n <li v-for="(item, index) in dice.current">\n <div class="select-container">\n <select v-model="item.dice">\n <option value="-1" selected hidden>Selec. un dado</option>\n <option v-for="option in dice.options" :value="option.value">{{ option.content }}</option>\n </select>\n </div>\n <input type="number" v-model="item.number" />\n <button v-on:click="newDice()" v-if="(index + 1) === dice.current.length" class="dice-more">\n <i class="fas fa-plus"></i>\n </button>\n <div v-else class="dice-more"></div>\n </li>\n </ul>\n </div>\n </template>\n </div>\n '});
package/apps/vueMulti.js CHANGED
File without changes
File without changes
package/apps/vueRela.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -180,7 +180,7 @@ const FNR = {
180
180
  content: {
181
181
  isAutosave: () => {
182
182
  if (document.post === undefined) return false;
183
- else return _userdata.user_id !== -1 && document.post.mode.value === 'reply' && document.post.t !== undefined
183
+ else return _userdata !== undefined && document.post.mode.value === 'reply' && document.post.t !== undefined
184
184
  },
185
185
  getPost: (url) => {
186
186
  return new Promise((resolve, reject) => {
@@ -265,13 +265,15 @@ const FNR = {
265
265
  },
266
266
  getLevel: () => {
267
267
  return new Promise((resolve, reject) => {
268
+ if (_userdata === undefined) resolve('guest');
269
+
268
270
  switch (_userdata.user_level) {
269
271
  case 2:
270
272
  resolve('mod');
271
273
  case 1:
272
274
  resolve('admin');
273
275
  case 0:
274
- return -1 == _userdata.user_id ? resolve('guest') : resolve('user');
276
+ resolve('user');
275
277
  }
276
278
  });
277
279
  },
File without changes
package/general.js CHANGED
File without changes
package/general.min.js CHANGED
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generic-skin",
3
- "version": "3.0.4",
3
+ "version": "3.0.7",
4
4
  "description": "Generic Forum Skin for Forumotion created by Gaylien.",
5
5
  "main": "readme.md",
6
6
  "scripts": {
package/pages/ucp.js CHANGED
File without changes
package/pages/ucp.min.js CHANGED
File without changes
File without changes
package/readme.md CHANGED
File without changes
package/stylesheet.css CHANGED
File without changes
File without changes