generic-skin 4.0.25 → 4.0.26
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 +13 -10
- package/apps/vueChrono.min.js +1 -1
- package/apps/vueDefault.js +3 -3
- package/apps/vueDefault.min.js +1 -1
- package/apps/vueMulti.js +19 -16
- package/apps/vueMulti.min.js +1 -1
- package/apps/vueRela.js +13 -10
- package/apps/vueRela.min.js +1 -1
- package/package.json +1 -1
- package/stylesheet.css +1 -1
- package/stylesheet.min.css +1 -1
package/apps/vueChrono.js
CHANGED
|
@@ -484,16 +484,19 @@ Vue.component('gestor-cronologia', {
|
|
|
484
484
|
</li>
|
|
485
485
|
</template>
|
|
486
486
|
</mando-foro>
|
|
487
|
-
<
|
|
488
|
-
<
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
487
|
+
<section id="forum-rplist" class="forum-wikilist">
|
|
488
|
+
<lista-temas-cabecera elements="['Temas', 'Información']"></lista-temas-cabecera>
|
|
489
|
+
<ul :class="'wikilist-contents no-style' + (!paginationContent.content.length ? ' no-results': '')" :key="render">
|
|
490
|
+
<template v-if="!paginationContent.content.length">
|
|
491
|
+
<li class="is-not-topic is-not-lastpost">
|
|
492
|
+
<h6>No hay entradas en tu cronología</h6>
|
|
493
|
+
</li>
|
|
494
|
+
</template>
|
|
495
|
+
<template v-else v-for="rp in paginationContent.content">
|
|
496
|
+
<elemento-cronologia :element="rp" type="manager" :id="rp.position" />
|
|
497
|
+
</template>
|
|
498
|
+
</ul>
|
|
499
|
+
</section>
|
|
497
500
|
<mando-foro id="lower-controls" app="true">
|
|
498
501
|
<template slot="pagination" v-if="paginationContent.pages.length > 1">
|
|
499
502
|
<a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">
|
package/apps/vueChrono.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Vue.component("modal-cronologia",{props:["element","type"],data(){return{page:0,state:{modal:!1},info:{user:"",people:[],selector:!0},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nueva entrada":"edit"===this.type?"Editar entrada":void 0},oneCheck(){let t="";if(!Object.keys(this.content.edit).length)return t;this.content.edit.name.length<5&&(t+="<li>Escribe un título lo suficientemente largo.</li>"),-1===this.content.edit.link.indexOf("/t")&&(t+="<li>Escribe un enlace válido.</li>");let e=[];if((1>parseFloat(this.content.edit.date.day)||parseFloat(this.content.edit.date.day)>forumData.date.day||""===this.content.edit.date.day||Number.isNaN(parseFloat(this.content.edit.date.day)))&&e.push("un día correcto (1 al "+forumData.date.day+")"),(1>parseFloat(this.content.edit.date.month)||parseFloat(this.content.edit.date.month)>forumData.date.month||""===this.content.edit.date.month||Number.isNaN(parseFloat(this.content.edit.date.month)))&&e.push("un mes correcto (1 al "+forumData.date.month+")"),("DFI"===this.content.edit.date.time&&parseFloat(this.content.edit.date.year)>forumData.date.year||"DFI"===this.content.edit.date.time&&parseFloat(this.content.edit.date.year)<1||""===this.content.edit.date.year||Number.isNaN(parseFloat(this.content.edit.date.year)))&&e.push("un año correcto"),-1===this.content.edit.date.time&&e.push("un periodo correcto"),e.length){let n="";n+="<li>Recuerda poner ",[].forEach.call(e,(t,e,a)=>{n+=t,a.length-2===e?n+=" y ":a.length===e+1?n+=".":a.length>e&&(n+=", ")}),n+="</li>",t+=n}return t},secondCheck(){let t="";return Object.keys(this.content.edit).length?(-1===this.content.edit.status&&(t+="<li>Selecciona un estado para el tema.</li>"),this.info.people.length||(t+="<li>Selecciona al menos un personaje.</li>"),t):t},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.finalData)},finalData(){let t=JSON.parse(JSON.stringify(this.content.edit));if(!Object.keys(this.content.edit).length)return t;let e="",n="";return[].forEach.call(JSON.parse(JSON.stringify(this.sortedEditCharacters)),(t,a,o)=>{e+=t,n+=Vue.filter("just-name")(t),o.length-2===a?(e+=" y ",n+=" y "):o.length===a+1?(e+="",n+=""):o.length>a&&(e+=", ",n+=", ")}),t.people.count=this.info.people.length,t.people.list=e,t.people.short=n,"new"===this.$parent.modal.type&&(t.position=this.$parent.content.edit.length),t},sortedCharacters(){return Object.keys(this.content.edit).length?this.$parent.users.map(t=>t.user).filter(t=>-1===this.info.people.indexOf(t)).filter(t=>t.toLowerCase().indexOf(this.info.user.toLowerCase())>-1):this.$parent.users.map(t=>t.user)},sortedEditCharacters(){return this.info.people.sort((t,e)=>t<e?-1:t>e?1:0)}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry()},pushElement(){"edit"===this.$parent.modal.type&&this.$parent.content.edit.splice(this.$parent.content.edit.map(t=>t.position).indexOf(this.content.current.position),1),this.$parent.content.edit.push(this.finalData),this.modalClose()},addCharacter(t){this.info.people.push(t),this.info.selector=!1,this.info.user="",setTimeout(()=>{this.info.selector=!0},250)},deleteCharacter(t){const e=JSON.parse(JSON.stringify(this.content.edit.status));this.info.people.splice(t,1),this.forceRerender(),this.content.edit.status=-1,this.content.edit.status=e}},created(){let t=[];""!==this.content.edit.people.list&&(t=-1===this.content.edit.people.list.indexOf(" y ")?[this.content.edit.people.list]:this.content.edit.people.list.split(" y ")[0].split(", ").concat(this.content.edit.people.list.split(" y ")[1])),this.info.people=t},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template v-if="page === 0">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Título">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del tema." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Enlace">\n <input type="text" v-model="content.edit.link" placeholder="Escribe el enlace del tema." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Fecha">\n <div class="input-date">\n <div class="date-element date-dmy">\n <label>\n Día\n <input type="text" v-model="content.edit.date.day" placeholder="0" />\n </label>\n <label>\n Mes\n <input type="text" v-model="content.edit.date.month" placeholder="0" />\n </label>\n <label>\n Año\n <input type="text" v-model="content.edit.date.year" placeholder="0" />\n </label>\n </div>\n <div class="date-element not-show mt-4">\n <label>\n Periodo\n <div class="select-container">\n <select v-model="content.edit.date.time">\n <option value="-1" hidden>-</option>\n <option value="AFI">AFI</option>\n <option value="DFI">DFI</option>\n </select>\n </div>\n </label>\n </div>\n </div>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length">\n <controles-modal>\n <button class="button1 btn-main" @click="page = 1" title="Paso siguiente">Siguiente</button>\n </controles-modal>\n </template>\n </template>\n <template v-else-if="page === 1">\n <template slot="content">\n <aviso-foro v-show="secondCheck.length">\n <ul v-html="secondCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Estado">\n <div class="select-container">\n <select v-model="content.edit.status">\n <option value="-1" selected="selected" hidden="hidden">Selecciona un estado para el tema</option>\n <option value="ropened">Activo</option>\n <option value="rclosed">Cerrado</option>\n <option value="rabandoned">Abandonado</option>\n </select>\n </div>\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Personajes">\n <div class="character-selector">\n <input type="text" v-model="info.user" placeholder="Escribe el nombre de un personaje." />\n <ul class="no-style selector-list" v-if="sortedCharacters.length > 0 && info.selector">\n <li v-for="(character, index) in sortedCharacters" @click="addCharacter(character)" :title="\'Seleccionar «\' + character + \'»\'">{{ character }}<i class="fas fa-plus"></i></li>\n </ul>\n <a class="character-custom" @click="addCharacter(info.user)" v-if="info.user.length > 2" :title="\'Seleccionar «\' + info.user + \'»\'">\n <i class="fas fa-plus"></i>\n </a>\n </div>\n <ul v-if="info.people.length" class="no-style character-list">\n <li v-for="(character, index) in sortedEditCharacters" @click="deleteCharacter(index)" :title="\'Quitar \' + character"><i class="fas fa-times"></i> {{ character }}</li>\n </ul>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls">\n <controles-modal>\n <button class="button2" @click="page = 0" title="Paso anterior">Anterior</button>\n <button class="button1 btn-main" @click="pushElement()" v-if="!secondCheck.length && finalCheck" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-cronologia",{data:()=>({render:0,modal:{type:"new",status:!1},users:[],state:{page:0,pagination:0},entry:{},content:{edit:[],current:[]}}),computed:{sortedContent(){return JSON.parse(JSON.stringify(this.content.edit)).sort(({date:t,name:e},{date:n,name:a})=>{if(t.time!==n.time)return"AFI"===t.time?-1:1;const o="AFI"===t.time?n:t,i="AFI"===t.time?t:n;return parseFloat(t.year)!==parseFloat(n.year)?parseFloat(o.year)-parseFloat(i.year):parseFloat(t.month)!==parseFloat(n.month)?parseFloat(o.month)-parseFloat(i.month):parseFloat(t.day)!==parseFloat(n.day)?parseFloat(o.day)-parseFloat(i.day):e-a})},paginationContent(){const t=forumConfig.skinOptions.paginationDefault,e=Math.floor((this.sortedContent.length-1)/t)+1;let n=[];for(let t=0;t<e;t++)n.push(t);return this.forceRerender(),{pages:n,content:this.sortedContent.slice(this.state.pagination*t,(this.state.pagination+1)*t)}},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)}},methods:{forceRerender(){this.render+=1},setEntry(){this.entry={link:"",name:"",status:-1,people:{list:"",short:"",count:0},date:{time:"DFI",day:"",month:"",year:""}}},addEntry(t){t.preventDefault(),this.modal.status=!0},save(t){t.preventDefault(),this.state.page=2;const e=this.sortedContent.map(t=>(void 0!==t.desc&&delete t.desc,void 0!==t.position&&delete t.position,t));FNR.user.profile.setData([{name:forumConfig.profileUser.cronoField,type:"textarea",value:JSON.stringify(e).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2e3)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.cronoField,type:"textarea"}]).then(t=>{const e=FNR.utility.genArray(t[0].value).map((t,e)=>{let n=t;return n.position=e,n});this.content.edit=e,this.content.current=JSON.parse(JSON.stringify(e)),FNR.forum.getMembers().then(t=>{this.setEntry(),this.users=t,this.state.page=1})})},template:'\n <section id="forum-chronology" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Cronología</h2>\n <hr />\n <p>En esta página podrás editar la cronología de tu personaje.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <modal-cronologia v-if="modal.status" :type="modal.type" :element="entry"></modal-cronologia>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <ul id="forum-rplist" :class="\'no-style\' + (!paginationContent.content.length ? \' no-results\': \'\')" :key="render">\n <template v-if="!paginationContent.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay entradas en tu cronología</h6>\n </li>\n </template>\n <template v-else v-for="rp in paginationContent.content">\n <elemento-cronologia :element="rp" type="manager" :id="rp.position" />\n </template>\n </ul>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-cronologia",{props:["element","type","id"],data(){return{content:this.element}},methods:{deleteElement(){this.$parent.content.edit.splice(this.$parent.content.edit.map(t=>t.position).indexOf(this.id),1),0===this.$parent.paginationContent.content.length&&0!==this.$parent.state.pagination&&(this.$parent.state.pagination-=1),this.$parent.forceRerender()},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li class="rp-list">\n <template v-if="type === \'manager\'">\n <a class="rp-element rp-manager">\n <div class="rp-icon">\n <template v-if="content.status === \'ropened\'">\n <i class="fas fa-lock-open"></i>\n </template>\n <template v-else-if="content.status === \'rclosed\'">\n <i class="fas fa-lock"></i>\n </template>\n <template v-else-if="content.status === \'rabandoned\'">\n <i class="fas fa-times"></i>\n </template>\n </div>\n <div class="rp-content">\n <div class="rp-name">\n <span>{{ content.name }}</span>\n <small>\n {{ content.date.day | to-number | in-two-digits }}/{{ content.date.month | to-number | in-two-digits }}/{{ content.date.year | to-number | in-two-digits }} - <template v-if="content.people.count < 4">{{ content.people.short }}</template><template v-else>Invitados</template>\n </small>\n </div>\n <div class="rp-controls">\n <span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span>\n </div>\n </div>\n </a>\n </template>\n <template v-else-if="type === \'profile\'">\n <a class="rp-element" :href="content.link" target="_blank" :title="\'Ir al tema «\' + content.name + \'»\'">\n <div class="rp-icon">\n <template v-if="content.status === \'ropened\'">\n <i class="fas fa-lock-open"></i>\n </template>\n <template v-else-if="content.status === \'rclosed\'">\n <i class="fas fa-lock"></i>\n </template>\n <template v-else-if="content.status === \'rabandoned\'">\n <i class="fas fa-times"></i>\n </template>\n </div>\n <div class="rp-content">\n <div class="rp-name">\n <span>{{ content.name }}</span>\n <small>\n {{ content.date.day | to-number | in-two-digits }}/{{ content.date.month | to-number | in-two-digits }}/{{ content.date.year | to-number | in-two-digits }} - <template v-if="content.people.count < 4">{{ content.people.short }}</template><template v-else>Invitados</template>\n </small>\n </div>\n </div>\n </a>\n </template>\n </li>\n '});
|
|
1
|
+
Vue.component("modal-cronologia",{props:["element","type"],data(){return{page:0,state:{modal:!1},info:{user:"",people:[],selector:!0},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nueva entrada":"edit"===this.type?"Editar entrada":void 0},oneCheck(){let t="";if(!Object.keys(this.content.edit).length)return t;this.content.edit.name.length<5&&(t+="<li>Escribe un título lo suficientemente largo.</li>"),-1===this.content.edit.link.indexOf("/t")&&(t+="<li>Escribe un enlace válido.</li>");let e=[];if((1>parseFloat(this.content.edit.date.day)||parseFloat(this.content.edit.date.day)>forumData.date.day||""===this.content.edit.date.day||Number.isNaN(parseFloat(this.content.edit.date.day)))&&e.push("un día correcto (1 al "+forumData.date.day+")"),(1>parseFloat(this.content.edit.date.month)||parseFloat(this.content.edit.date.month)>forumData.date.month||""===this.content.edit.date.month||Number.isNaN(parseFloat(this.content.edit.date.month)))&&e.push("un mes correcto (1 al "+forumData.date.month+")"),("DFI"===this.content.edit.date.time&&parseFloat(this.content.edit.date.year)>forumData.date.year||"DFI"===this.content.edit.date.time&&parseFloat(this.content.edit.date.year)<1||""===this.content.edit.date.year||Number.isNaN(parseFloat(this.content.edit.date.year)))&&e.push("un año correcto"),-1===this.content.edit.date.time&&e.push("un periodo correcto"),e.length){let n="";n+="<li>Recuerda poner ",[].forEach.call(e,(t,e,a)=>{n+=t,a.length-2===e?n+=" y ":a.length===e+1?n+=".":a.length>e&&(n+=", ")}),n+="</li>",t+=n}return t},secondCheck(){let t="";return Object.keys(this.content.edit).length?(-1===this.content.edit.status&&(t+="<li>Selecciona un estado para el tema.</li>"),this.info.people.length||(t+="<li>Selecciona al menos un personaje.</li>"),t):t},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.finalData)},finalData(){let t=JSON.parse(JSON.stringify(this.content.edit));if(!Object.keys(this.content.edit).length)return t;let e="",n="";return[].forEach.call(JSON.parse(JSON.stringify(this.sortedEditCharacters)),(t,a,o)=>{e+=t,n+=Vue.filter("just-name")(t),o.length-2===a?(e+=" y ",n+=" y "):o.length===a+1?(e+="",n+=""):o.length>a&&(e+=", ",n+=", ")}),t.people.count=this.info.people.length,t.people.list=e,t.people.short=n,"new"===this.$parent.modal.type&&(t.position=this.$parent.content.edit.length),t},sortedCharacters(){return Object.keys(this.content.edit).length?this.$parent.users.map(t=>t.user).filter(t=>-1===this.info.people.indexOf(t)).filter(t=>t.toLowerCase().indexOf(this.info.user.toLowerCase())>-1):this.$parent.users.map(t=>t.user)},sortedEditCharacters(){return this.info.people.sort((t,e)=>t<e?-1:t>e?1:0)}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry()},pushElement(){"edit"===this.$parent.modal.type&&this.$parent.content.edit.splice(this.$parent.content.edit.map(t=>t.position).indexOf(this.content.current.position),1),this.$parent.content.edit.push(this.finalData),this.modalClose()},addCharacter(t){this.info.people.push(t),this.info.selector=!1,this.info.user="",setTimeout(()=>{this.info.selector=!0},250)},deleteCharacter(t){const e=JSON.parse(JSON.stringify(this.content.edit.status));this.info.people.splice(t,1),this.forceRerender(),this.content.edit.status=-1,this.content.edit.status=e}},created(){let t=[];""!==this.content.edit.people.list&&(t=-1===this.content.edit.people.list.indexOf(" y ")?[this.content.edit.people.list]:this.content.edit.people.list.split(" y ")[0].split(", ").concat(this.content.edit.people.list.split(" y ")[1])),this.info.people=t},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template v-if="page === 0">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Título">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del tema." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Enlace">\n <input type="text" v-model="content.edit.link" placeholder="Escribe el enlace del tema." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Fecha">\n <div class="input-date">\n <div class="date-element date-dmy">\n <label>\n Día\n <input type="text" v-model="content.edit.date.day" placeholder="0" />\n </label>\n <label>\n Mes\n <input type="text" v-model="content.edit.date.month" placeholder="0" />\n </label>\n <label>\n Año\n <input type="text" v-model="content.edit.date.year" placeholder="0" />\n </label>\n </div>\n <div class="date-element not-show mt-4">\n <label>\n Periodo\n <div class="select-container">\n <select v-model="content.edit.date.time">\n <option value="-1" hidden>-</option>\n <option value="AFI">AFI</option>\n <option value="DFI">DFI</option>\n </select>\n </div>\n </label>\n </div>\n </div>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length">\n <controles-modal>\n <button class="button1 btn-main" @click="page = 1" title="Paso siguiente">Siguiente</button>\n </controles-modal>\n </template>\n </template>\n <template v-else-if="page === 1">\n <template slot="content">\n <aviso-foro v-show="secondCheck.length">\n <ul v-html="secondCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Estado">\n <div class="select-container">\n <select v-model="content.edit.status">\n <option value="-1" selected="selected" hidden="hidden">Selecciona un estado para el tema</option>\n <option value="ropened">Activo</option>\n <option value="rclosed">Cerrado</option>\n <option value="rabandoned">Abandonado</option>\n </select>\n </div>\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Personajes">\n <div class="character-selector">\n <input type="text" v-model="info.user" placeholder="Escribe el nombre de un personaje." />\n <ul class="no-style selector-list" v-if="sortedCharacters.length > 0 && info.selector">\n <li v-for="(character, index) in sortedCharacters" @click="addCharacter(character)" :title="\'Seleccionar «\' + character + \'»\'">{{ character }}<i class="fas fa-plus"></i></li>\n </ul>\n <a class="character-custom" @click="addCharacter(info.user)" v-if="info.user.length > 2" :title="\'Seleccionar «\' + info.user + \'»\'">\n <i class="fas fa-plus"></i>\n </a>\n </div>\n <ul v-if="info.people.length" class="no-style character-list">\n <li v-for="(character, index) in sortedEditCharacters" @click="deleteCharacter(index)" :title="\'Quitar \' + character"><i class="fas fa-times"></i> {{ character }}</li>\n </ul>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls">\n <controles-modal>\n <button class="button2" @click="page = 0" title="Paso anterior">Anterior</button>\n <button class="button1 btn-main" @click="pushElement()" v-if="!secondCheck.length && finalCheck" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-cronologia",{data:()=>({render:0,modal:{type:"new",status:!1},users:[],state:{page:0,pagination:0},entry:{},content:{edit:[],current:[]}}),computed:{sortedContent(){return JSON.parse(JSON.stringify(this.content.edit)).sort(({date:t,name:e},{date:n,name:a})=>{if(t.time!==n.time)return"AFI"===t.time?-1:1;const o="AFI"===t.time?n:t,i="AFI"===t.time?t:n;return parseFloat(t.year)!==parseFloat(n.year)?parseFloat(o.year)-parseFloat(i.year):parseFloat(t.month)!==parseFloat(n.month)?parseFloat(o.month)-parseFloat(i.month):parseFloat(t.day)!==parseFloat(n.day)?parseFloat(o.day)-parseFloat(i.day):e-a})},paginationContent(){const t=forumConfig.skinOptions.paginationDefault,e=Math.floor((this.sortedContent.length-1)/t)+1;let n=[];for(let t=0;t<e;t++)n.push(t);return this.forceRerender(),{pages:n,content:this.sortedContent.slice(this.state.pagination*t,(this.state.pagination+1)*t)}},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)}},methods:{forceRerender(){this.render+=1},setEntry(){this.entry={link:"",name:"",status:-1,people:{list:"",short:"",count:0},date:{time:"DFI",day:"",month:"",year:""}}},addEntry(t){t.preventDefault(),this.modal.status=!0},save(t){t.preventDefault(),this.state.page=2;const e=this.sortedContent.map(t=>(void 0!==t.desc&&delete t.desc,void 0!==t.position&&delete t.position,t));FNR.user.profile.setData([{name:forumConfig.profileUser.cronoField,type:"textarea",value:JSON.stringify(e).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2e3)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.cronoField,type:"textarea"}]).then(t=>{const e=FNR.utility.genArray(t[0].value).map((t,e)=>{let n=t;return n.position=e,n});this.content.edit=e,this.content.current=JSON.parse(JSON.stringify(e)),FNR.forum.getMembers().then(t=>{this.setEntry(),this.users=t,this.state.page=1})})},template:'\n <section id="forum-chronology" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Cronología</h2>\n <hr />\n <p>En esta página podrás editar la cronología de tu personaje.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <modal-cronologia v-if="modal.status" :type="modal.type" :element="entry"></modal-cronologia>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <section id="forum-rplist" class="forum-wikilist">\n <lista-temas-cabecera elements="[\'Temas\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'wikilist-contents no-style\' + (!paginationContent.content.length ? \' no-results\': \'\')" :key="render">\n <template v-if="!paginationContent.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay entradas en tu cronología</h6>\n </li>\n </template>\n <template v-else v-for="rp in paginationContent.content">\n <elemento-cronologia :element="rp" type="manager" :id="rp.position" />\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-cronologia",{props:["element","type","id"],data(){return{content:this.element}},methods:{deleteElement(){this.$parent.content.edit.splice(this.$parent.content.edit.map(t=>t.position).indexOf(this.id),1),0===this.$parent.paginationContent.content.length&&0!==this.$parent.state.pagination&&(this.$parent.state.pagination-=1),this.$parent.forceRerender()},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li class="rp-list">\n <template v-if="type === \'manager\'">\n <a class="rp-element rp-manager">\n <div class="rp-icon">\n <template v-if="content.status === \'ropened\'">\n <i class="fas fa-lock-open"></i>\n </template>\n <template v-else-if="content.status === \'rclosed\'">\n <i class="fas fa-lock"></i>\n </template>\n <template v-else-if="content.status === \'rabandoned\'">\n <i class="fas fa-times"></i>\n </template>\n </div>\n <div class="rp-content">\n <div class="rp-name">\n <span>{{ content.name }}</span>\n <small>\n {{ content.date.day | to-number | in-two-digits }}/{{ content.date.month | to-number | in-two-digits }}/{{ content.date.year | to-number | in-two-digits }} - <template v-if="content.people.count < 4">{{ content.people.short }}</template><template v-else>Invitados</template>\n </small>\n </div>\n <div class="rp-controls">\n <span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span>\n </div>\n </div>\n </a>\n </template>\n <template v-else-if="type === \'profile\'">\n <a class="rp-element" :href="content.link" target="_blank" :title="\'Ir al tema «\' + content.name + \'»\'">\n <div class="rp-icon">\n <template v-if="content.status === \'ropened\'">\n <i class="fas fa-lock-open"></i>\n </template>\n <template v-else-if="content.status === \'rclosed\'">\n <i class="fas fa-lock"></i>\n </template>\n <template v-else-if="content.status === \'rabandoned\'">\n <i class="fas fa-times"></i>\n </template>\n </div>\n <div class="rp-content">\n <div class="rp-name">\n <span>{{ content.name }}</span>\n <small>\n {{ content.date.day | to-number | in-two-digits }}/{{ content.date.month | to-number | in-two-digits }}/{{ content.date.year | to-number | in-two-digits }} - <template v-if="content.people.count < 4">{{ content.people.short }}</template><template v-else>Invitados</template>\n </small>\n </div>\n </div>\n </a>\n </template>\n </li>\n '});
|
package/apps/vueDefault.js
CHANGED
|
@@ -204,7 +204,7 @@ Vue.component('lista-bosquejos', {
|
|
|
204
204
|
</template>
|
|
205
205
|
</mando-foro>
|
|
206
206
|
<section id="forum-drafts-messages" class="forum-topiclist">
|
|
207
|
-
<lista-temas-cabecera elements="['
|
|
207
|
+
<lista-temas-cabecera elements="['Temas', 'Información']"></lista-temas-cabecera>
|
|
208
208
|
<ul :class="'topiclist-topics no-style' + (!drafts.messages.content.length || drafts.messages.loading === 0 ? ' no-results': '')">
|
|
209
209
|
<template v-if="!drafts.messages.content.length">
|
|
210
210
|
<li class="is-not-topic is-not-lastpost">
|
|
@@ -240,7 +240,7 @@ Vue.component('lista-bosquejos', {
|
|
|
240
240
|
</template>
|
|
241
241
|
</mando-foro>
|
|
242
242
|
<section id="forum-drafts-messages" class="forum-topiclist">
|
|
243
|
-
<lista-temas-cabecera elements="['
|
|
243
|
+
<lista-temas-cabecera elements="['Temas', 'Información']"></lista-temas-cabecera>
|
|
244
244
|
<ul :class="'topiclist-topics no-style' + (!drafts.topics.content.length || drafts.topics.loading === 0 ? ' no-results': '')">
|
|
245
245
|
<template v-if="!drafts.topics.content.length">
|
|
246
246
|
<li class="is-not-topic is-not-lastpost">
|
|
@@ -365,7 +365,7 @@ Vue.component('lista-seguidos', {
|
|
|
365
365
|
</template>
|
|
366
366
|
</mando-foro>
|
|
367
367
|
<section id="forum-followed" class="forum-topiclist">
|
|
368
|
-
<lista-temas-cabecera elements="['
|
|
368
|
+
<lista-temas-cabecera elements="['Temas', 'Información']"></lista-temas-cabecera>
|
|
369
369
|
<ul :class="'topiclist-topics no-style' + (!followed.content.length || followed.loading === 0 ? ' no-results': '')">
|
|
370
370
|
<template v-if="!followed.content.length">
|
|
371
371
|
<li class="is-not-topic is-not-lastpost">
|
package/apps/vueDefault.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Vue.component("panel-control",{props:["elements"],data:()=>({userId:_userdata.user_id,state:{page:0},content:{original:[],current:[]}}),computed:{validationPanel(){return FNR.utility.genValidation(this.content.current)},toSave(){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(){this.toSave.length&&""===this.validationPanel&&(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.elements.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>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro 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 :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">\n <button class="button1 btn-main" @click="updateProfile()" title="Actualizar perfil">Actualizar</button>\n </div>\n </template>\n <template v-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("lista-bosquejos",{data:()=>({state:{page:0},drafts:{messages:{page:1,loading:0,pages:[],content:[]},topics:{page:1,loading:0,pages:[],content:[]}}}),methods:{getPageMessages(e){this.drafts.messages.loading=0,FNR.user.drafts.messages.getDrafts(e).then(e=>{this.drafts.messages.content=e,this.drafts.messages.loading=1,this.state.page=1})},getPageTopics(e){this.drafts.topics.loading=0,FNR.user.drafts.topics.getDrafts(e).then(e=>{this.drafts.topics.content=e,this.drafts.topics.loading=1,this.state.page=1})},setPageMessages(e){this.drafts.messages.page=e,this.getPageMessages(this.drafts.messages.pages[this.drafts.messages.page-1])},setPageTopics(e){this.drafts.topics.page=e,this.getPageMessages(this.drafts.topics.pages[this.drafts.topics.page-1])}},created(){Promise.all([FNR.user.drafts.messages.getPages(),FNR.user.drafts.topics.getPages()]).then(e=>{0!==e[0].items&&(this.drafts.messages.pages=e[0].pages,this.getPageMessages(this.drafts.messages.pages[this.drafts.messages.page-1])),0!==e[1].items&&(this.drafts.topics.pages=e[1].pages,this.getPageTopics(this.drafts.topics.pages[this.drafts.topics.page-1])),e[0].items+e[1].items===0&&(this.state.page=1)})},updated(){FNR.behaviour.genControls()},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 Bosquejos dividida entre mensajes y temas.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <div class="is-content mb-4">\n <h4>Mensajes</h4>\n </div>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="drafts.messages.pages.length > 1">\n <paginacion-foro :page="drafts.messages.page" :total="drafts.messages.pages.length" @setPage="setPageMessages" />\n </template>\n </mando-foro>\n <section id="forum-drafts-messages" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Tema\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!drafts.messages.content.length || drafts.messages.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!drafts.messages.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes bosquejos</h6>\n </li>\n </template>\n <template v-else-if="drafts.messages.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-topic is-not-lastpost" v-for="draft in drafts.messages.content">\n <temas-foro type="draft" mode="" :url="draft.topic.url" :replies="draft.info.location" :views="draft.info.date" :quick="draft.modify">\n <template slot="title">{{ draft.topic.name }}</template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="drafts.messages.pages.length > 1">\n <paginacion-foro :page="drafts.messages.page" :total="drafts.messages.pages.length" @setPage="setPageMessages" />\n </template>\n </mando-foro>\n \t <separador-foro></separador-foro>\n <div class="is-content mb-4">\n <h4>Temas</h4>\n </div>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="drafts.topics.pages.length > 1">\n <paginacion-foro :page="drafts.topics.page" :total="drafts.topics.pages.length" @setPage="setPageTopics" />\n </template>\n </mando-foro>\n <section id="forum-drafts-messages" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Tema\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!drafts.topics.content.length || drafts.topics.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!drafts.topics.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes bosquejos</h6>\n </li>\n </template>\n <template v-else-if="drafts.topics.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-topic is-not-lastpost" v-for="draft in drafts.topics.content">\n <temas-foro type="draft" mode="" :url="draft.topic.url" :replies="draft.info.location" :views="draft.info.date" :quick="draft.modify">\n <template slot="title">{{ draft.topic.name }}</template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="drafts.topics.pages.length > 1">\n <paginacion-foro :page="drafts.topics.page" :total="drafts.topics.pages.length" @setPage="setPageTopics" />\n </template>\n </mando-foro>\n </template>\n </section>\n '}),Vue.component("lista-seguidos",{data:()=>({state:{page:0,selected:[]},followed:{page:1,loading:0,pages:[],content:[]}}),methods:{getPage(e){this.followed.loading=0,FNR.user.followed.getFollowed(e).then(e=>{this.followed.content=e,this.followed.loading=1,this.state.page=1})},setPage(e){this.followed.page=e,this.getPage(this.followed.pages[this.followed.page-1])},setTopic(e){const t=this.state.selected.indexOf(e);-1===t?this.state.selected.push(e):this.state.selected.splice(t,1)},delTopics(){this.state.selected.length&&FNR.html.genPrompt("Necesitamos confirmación","Te dispones a retirar la supervisión de uno (o varios) temas. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(e=>{"ELIMINAR"===e&&FNR.user.followed.delFollowed(this.state.selected).then(e=>{e?window.location.reload():FNR.html.genNotification("Atención","Hubo un problema al retirar. Inténtalo de nuevo.","fas fa-exclamation")})})}},created(){FNR.user.followed.getPages().then(e=>{0!==e.items?(this.followed.pages=e.pages,this.getPage(this.followed.pages[this.followed.page-1])):this.state.page=1})},updated(){FNR.behaviour.genControls()},template:'\n <section class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Lista de Temas Supervisados</h2>\n <hr />\n <p>En esta página tienes tu lista de Temas Supervisados.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="followed.pages.length > 1">\n <paginacion-foro :page="followed.page" :total="followed.pages.length" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li v-if="followed.content.length" @click="delTopics()">\n <boton-foro url="javascript:{}" name="Retirar" icon="fas fa-minus"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <section id="forum-followed" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Tema\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!followed.content.length || followed.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!followed.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes temas supervisados</h6>\n </li>\n </template>\n <template v-else-if="followed.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li :class="\'row is-not-topic is-not-lastpost \' + topic.type" v-for="topic in followed.content" :key="topic.id">\n <temas-foro type="followed" mode="" :url="topic.url" :replies="topic.replies + \' respuestas\'" :views="topic.views + \' visitas\'">\n <template slot="title">{{ topic.name }}</template>\n <template slot="radio">\n <div :class="\'forum-checkbox\' + (state.selected.indexOf(topic.id) === -1 ? \'\' : \' is-active\')">\n <div class="checkbox-content" @click="setTopic(topic.id)">\n <div class="checkbox-click">\n <i class="fas fa-check"></i>\n </div>\n </div>\n </div>\n </template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="followed.pages.length > 1">\n <paginacion-foro :page="followed.page" :total="followed.pages.length" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li v-if="followed.content.length" @click="delTopics()">\n <boton-foro url="javascript:{}" name="Retirar" icon="fas fa-minus"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n </section>\n '}),Vue.component("editor-foro",{data:()=>({state:{page:0,editor:"none",admin:1===_userdata.user_level,guest:0===_userdata.session_logged_in,dice:document.querySelectorAll("#list_dice").length,draft:document.querySelectorAll('input[name="draft"]').length,edit:document.querySelectorAll('input[name="edit_reason"]').length},colors:FNR.forum.getColors(),content:{username:"",subject:"",edit:-1,msg:"",type:-1,options:[]},users:{current:"",options:[],selected:[],selector:!0},groups:{type:-1,options:[]},dice:{options:[],current:[]}}),computed:{msgCheck(){let e="";return this.state.guest&&(this.content.username.trim().length<1||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&&"edittopicdraft"!==this.state.editor||(this.content.subject.trim().length<4||this.content.subject.trim().length>100)&&(e+="<li>Escribe un titulo de tamaño adecuado (4 a 100 carácteres).</li>"),this.content.msg.trim().length<10&&(e+="<li>Escribe un mensaje lo suficientemente largo.</li>"),e},sortedCharacters(){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(){return this.users.selected.sort((e,t)=>e<t?-1:e>t?1:0)}},methods:{insertSomething(e,t){const o=document.getElementById("usereply-editor"),s=e.replace(/-jump-/g,"\n"),n=t.replace(/-jump-/g,"\n");if(document.selection)o.focus(),document.selection.createRange().text=s+document.selection.createRange().text+n;else if(o.selectionStart||"0"==o.selectionStart){const e=o.selectionStart,t=o.selectionEnd,i=t+s.length;o.value=o.value.substring(0,e)+s+o.value.substring(e,t)+n+o.value.substring(t,o.value.length),o.setSelectionRange(i,i)}this.content.msg=o.value},newDice(){this.dice.current.push({dice:-1,number:0})},addCharacter(e){this.users.selected.push(e),this.users.selector=!1,this.users.current="",setTimeout(()=>{this.users.selector=!0},250)},deleteCharacter(e){this.users.current="",this.users.selected.splice(e,1)},changeGroup(){this.users.selected=[],this.users.current=""},insertUrl(){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(s=>{!1!==s?this.insertSomething("[url=","]"+s+"[/url]"):this.insertSomething("[url=","]"+e.value.substring(t,o)+"[/url]")})},insertImg(){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(){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(){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(){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),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}),"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.edit&&(document.querySelector('#forum-realreply > form input[name="edit_reason"]').value="editar")),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),this.state.edit&&0===parseInt(this.content.edit)&&(document.querySelector('#forum-realreply > form input[name="edit_reason"]').value="not-show")),"newtopic"!==this.state.editor&&"post"!==this.state.editor&&"edittopicdraft"!==this.state.editor||(this.content.subject.trim().length>4||this.content.subject.trim().length<100)&&(document.querySelector('#forum-realreply > form input[name="subject"]').value=this.content.subject.trim()),!this.state.dice||"reply"!==this.state.editor&&"newtopic"!==this.state.editor&&"editpostdraft"!==this.state.editor&&"edittopicdraft"!==this.state.editor||([].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)}))},draftMsg(){this.msgCheck.length||(this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Bosquejo"], #forum-realreply input[value="Modificar"], #forum-realreply input[value="Registrar"]').click())},delMsg(){let e="topicdraft",t="t";"editpostdraft"===this.state.editor&&(e="draft",t="p"),FNR.html.genPrompt("Necesitamos confirmación","Te dispones a eliminar un bosquejo. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(o=>{"ELIMINAR"===o&&FNR.user.drafts.delDrafts(e,[document.post[t].value]).then(e=>{e?window.location.replace(`${window.location.protocol}//${window.location.host}${forumConfig.usableDirections.ucp}#/bosquejos`):FNR.html.genNotification("Atención","Hubo un problema al eliminar. Inténtalo de nuevo.","fas fa-exclamation")})})},sendMsg(){this.msgCheck.length||(this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Enviar"], #forum-realreply input[value="Publicar"]').click())},prevMsg(){this.msgCheck.length||(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}if(document.querySelector('#forum-realreply > form input[name="edit_reason"]')){const e=document.querySelector('#forum-realreply > form input[name="edit_reason"]').value;"editar"===e?this.content.edit=1:"not-show"===e&&(this.content.edit=0)}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]")):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||"newtopic"===this.state.editor)&&this.state.draft&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.draftMsg()):e.ctrlKey&&"Enter"===e.key&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.sendMsg()):!e.ctrlKey||"Backspace"!==e.key||"editpostdraft"!==this.state.editor&&"edittopicdraft"!==this.state.editor||(e.preventDefault(),e.stopPropagation(),this.delMsg()))}),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)}});let e="";document.querySelector('p[style="color: red;"]')&&(e=document.querySelector('p[style="color: red;"]').textContent,console.log(e),
|
|
1
|
+
Vue.component("panel-control",{props:["elements"],data:()=>({userId:_userdata.user_id,state:{page:0},content:{original:[],current:[]}}),computed:{validationPanel(){return FNR.utility.genValidation(this.content.current)},toSave(){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(){this.toSave.length&&""===this.validationPanel&&(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.elements.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>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro 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 :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">\n <button class="button1 btn-main" @click="updateProfile()" title="Actualizar perfil">Actualizar</button>\n </div>\n </template>\n <template v-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("lista-bosquejos",{data:()=>({state:{page:0},drafts:{messages:{page:1,loading:0,pages:[],content:[]},topics:{page:1,loading:0,pages:[],content:[]}}}),methods:{getPageMessages(e){this.drafts.messages.loading=0,FNR.user.drafts.messages.getDrafts(e).then(e=>{this.drafts.messages.content=e,this.drafts.messages.loading=1,this.state.page=1})},getPageTopics(e){this.drafts.topics.loading=0,FNR.user.drafts.topics.getDrafts(e).then(e=>{this.drafts.topics.content=e,this.drafts.topics.loading=1,this.state.page=1})},setPageMessages(e){this.drafts.messages.page=e,this.getPageMessages(this.drafts.messages.pages[this.drafts.messages.page-1])},setPageTopics(e){this.drafts.topics.page=e,this.getPageMessages(this.drafts.topics.pages[this.drafts.topics.page-1])}},created(){Promise.all([FNR.user.drafts.messages.getPages(),FNR.user.drafts.topics.getPages()]).then(e=>{0!==e[0].items&&(this.drafts.messages.pages=e[0].pages,this.getPageMessages(this.drafts.messages.pages[this.drafts.messages.page-1])),0!==e[1].items&&(this.drafts.topics.pages=e[1].pages,this.getPageTopics(this.drafts.topics.pages[this.drafts.topics.page-1])),e[0].items+e[1].items===0&&(this.state.page=1)})},updated(){FNR.behaviour.genControls()},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 Bosquejos dividida entre mensajes y temas.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <div class="is-content mb-4">\n <h4>Mensajes</h4>\n </div>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="drafts.messages.pages.length > 1">\n <paginacion-foro :page="drafts.messages.page" :total="drafts.messages.pages.length" @setPage="setPageMessages" />\n </template>\n </mando-foro>\n <section id="forum-drafts-messages" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Temas\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!drafts.messages.content.length || drafts.messages.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!drafts.messages.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes bosquejos</h6>\n </li>\n </template>\n <template v-else-if="drafts.messages.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-topic is-not-lastpost" v-for="draft in drafts.messages.content">\n <temas-foro type="draft" mode="" :url="draft.topic.url" :replies="draft.info.location" :views="draft.info.date" :quick="draft.modify">\n <template slot="title">{{ draft.topic.name }}</template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="drafts.messages.pages.length > 1">\n <paginacion-foro :page="drafts.messages.page" :total="drafts.messages.pages.length" @setPage="setPageMessages" />\n </template>\n </mando-foro>\n \t <separador-foro></separador-foro>\n <div class="is-content mb-4">\n <h4>Temas</h4>\n </div>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="drafts.topics.pages.length > 1">\n <paginacion-foro :page="drafts.topics.page" :total="drafts.topics.pages.length" @setPage="setPageTopics" />\n </template>\n </mando-foro>\n <section id="forum-drafts-messages" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Temas\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!drafts.topics.content.length || drafts.topics.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!drafts.topics.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes bosquejos</h6>\n </li>\n </template>\n <template v-else-if="drafts.topics.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li class="row is-not-topic is-not-lastpost" v-for="draft in drafts.topics.content">\n <temas-foro type="draft" mode="" :url="draft.topic.url" :replies="draft.info.location" :views="draft.info.date" :quick="draft.modify">\n <template slot="title">{{ draft.topic.name }}</template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="drafts.topics.pages.length > 1">\n <paginacion-foro :page="drafts.topics.page" :total="drafts.topics.pages.length" @setPage="setPageTopics" />\n </template>\n </mando-foro>\n </template>\n </section>\n '}),Vue.component("lista-seguidos",{data:()=>({state:{page:0,selected:[]},followed:{page:1,loading:0,pages:[],content:[]}}),methods:{getPage(e){this.followed.loading=0,FNR.user.followed.getFollowed(e).then(e=>{this.followed.content=e,this.followed.loading=1,this.state.page=1})},setPage(e){this.followed.page=e,this.getPage(this.followed.pages[this.followed.page-1])},setTopic(e){const t=this.state.selected.indexOf(e);-1===t?this.state.selected.push(e):this.state.selected.splice(t,1)},delTopics(){this.state.selected.length&&FNR.html.genPrompt("Necesitamos confirmación","Te dispones a retirar la supervisión de uno (o varios) temas. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(e=>{"ELIMINAR"===e&&FNR.user.followed.delFollowed(this.state.selected).then(e=>{e?window.location.reload():FNR.html.genNotification("Atención","Hubo un problema al retirar. Inténtalo de nuevo.","fas fa-exclamation")})})}},created(){FNR.user.followed.getPages().then(e=>{0!==e.items?(this.followed.pages=e.pages,this.getPage(this.followed.pages[this.followed.page-1])):this.state.page=1})},updated(){FNR.behaviour.genControls()},template:'\n <section class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Lista de Temas Supervisados</h2>\n <hr />\n <p>En esta página tienes tu lista de Temas Supervisados.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="followed.pages.length > 1">\n <paginacion-foro :page="followed.page" :total="followed.pages.length" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li v-if="followed.content.length" @click="delTopics()">\n <boton-foro url="javascript:{}" name="Retirar" icon="fas fa-minus"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <section id="forum-followed" class="forum-topiclist">\n <lista-temas-cabecera elements="[\'Temas\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'topiclist-topics no-style\' + (!followed.content.length || followed.loading === 0 ? \' no-results\': \'\')">\n <template v-if="!followed.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No tienes temas supervisados</h6>\n </li>\n </template>\n <template v-else-if="followed.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando temas…"></cargando-foro>\n </li>\n </template>\n <template v-else>\n <li :class="\'row is-not-topic is-not-lastpost \' + topic.type" v-for="topic in followed.content" :key="topic.id">\n <temas-foro type="followed" mode="" :url="topic.url" :replies="topic.replies + \' respuestas\'" :views="topic.views + \' visitas\'">\n <template slot="title">{{ topic.name }}</template>\n <template slot="radio">\n <div :class="\'forum-checkbox\' + (state.selected.indexOf(topic.id) === -1 ? \'\' : \' is-active\')">\n <div class="checkbox-content" @click="setTopic(topic.id)">\n <div class="checkbox-click">\n <i class="fas fa-check"></i>\n </div>\n </div>\n </div>\n </template>\n </temas-foro>\n </li>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="followed.pages.length > 1">\n <paginacion-foro :page="followed.page" :total="followed.pages.length" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li v-if="followed.content.length" @click="delTopics()">\n <boton-foro url="javascript:{}" name="Retirar" icon="fas fa-minus"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n </section>\n '}),Vue.component("editor-foro",{data:()=>({state:{page:0,editor:"none",admin:1===_userdata.user_level,guest:0===_userdata.session_logged_in,dice:document.querySelectorAll("#list_dice").length,draft:document.querySelectorAll('input[name="draft"]').length,edit:document.querySelectorAll('input[name="edit_reason"]').length},colors:FNR.forum.getColors(),content:{username:"",subject:"",edit:-1,msg:"",type:-1,options:[]},users:{current:"",options:[],selected:[],selector:!0},groups:{type:-1,options:[]},dice:{options:[],current:[]}}),computed:{msgCheck(){let e="";return this.state.guest&&(this.content.username.trim().length<1||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&&"edittopicdraft"!==this.state.editor||(this.content.subject.trim().length<4||this.content.subject.trim().length>100)&&(e+="<li>Escribe un titulo de tamaño adecuado (4 a 100 carácteres).</li>"),this.content.msg.trim().length<10&&(e+="<li>Escribe un mensaje lo suficientemente largo.</li>"),e},sortedCharacters(){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(){return this.users.selected.sort((e,t)=>e<t?-1:e>t?1:0)}},methods:{insertSomething(e,t){const o=document.getElementById("usereply-editor"),s=e.replace(/-jump-/g,"\n"),n=t.replace(/-jump-/g,"\n");if(document.selection)o.focus(),document.selection.createRange().text=s+document.selection.createRange().text+n;else if(o.selectionStart||"0"==o.selectionStart){const e=o.selectionStart,t=o.selectionEnd,i=t+s.length;o.value=o.value.substring(0,e)+s+o.value.substring(e,t)+n+o.value.substring(t,o.value.length),o.setSelectionRange(i,i)}this.content.msg=o.value},newDice(){this.dice.current.push({dice:-1,number:0})},addCharacter(e){this.users.selected.push(e),this.users.selector=!1,this.users.current="",setTimeout(()=>{this.users.selector=!0},250)},deleteCharacter(e){this.users.current="",this.users.selected.splice(e,1)},changeGroup(){this.users.selected=[],this.users.current=""},insertUrl(){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(s=>{!1!==s?this.insertSomething("[url=","]"+s+"[/url]"):this.insertSomething("[url=","]"+e.value.substring(t,o)+"[/url]")})},insertImg(){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(){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(){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(){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),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}),"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.edit&&(document.querySelector('#forum-realreply > form input[name="edit_reason"]').value="editar")),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),this.state.edit&&0===parseInt(this.content.edit)&&(document.querySelector('#forum-realreply > form input[name="edit_reason"]').value="not-show")),"newtopic"!==this.state.editor&&"post"!==this.state.editor&&"edittopicdraft"!==this.state.editor||(this.content.subject.trim().length>4||this.content.subject.trim().length<100)&&(document.querySelector('#forum-realreply > form input[name="subject"]').value=this.content.subject.trim()),!this.state.dice||"reply"!==this.state.editor&&"newtopic"!==this.state.editor&&"editpostdraft"!==this.state.editor&&"edittopicdraft"!==this.state.editor||([].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)}))},draftMsg(){this.msgCheck.length||(this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Bosquejo"], #forum-realreply input[value="Modificar"], #forum-realreply input[value="Registrar"]').click())},delMsg(){let e="topicdraft",t="t";"editpostdraft"===this.state.editor&&(e="draft",t="p"),FNR.html.genPrompt("Necesitamos confirmación","Te dispones a eliminar un bosquejo. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(o=>{"ELIMINAR"===o&&FNR.user.drafts.delDrafts(e,[document.post[t].value]).then(e=>{e?window.location.replace(`${window.location.protocol}//${window.location.host}${forumConfig.usableDirections.ucp}#/bosquejos`):FNR.html.genNotification("Atención","Hubo un problema al eliminar. Inténtalo de nuevo.","fas fa-exclamation")})})},sendMsg(){this.msgCheck.length||(this.parseMsg(),document.querySelector('#forum-realreply > form input[value="Enviar"], #forum-realreply input[value="Publicar"]').click())},prevMsg(){this.msgCheck.length||(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}if(document.querySelector('#forum-realreply > form input[name="edit_reason"]')){const e=document.querySelector('#forum-realreply > form input[name="edit_reason"]').value;"editar"===e?this.content.edit=1:"not-show"===e&&(this.content.edit=0)}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]")):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||"newtopic"===this.state.editor)&&this.state.draft&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.draftMsg()):e.ctrlKey&&"Enter"===e.key&&!this.msgCheck.length?(e.preventDefault(),e.stopPropagation(),this.sendMsg()):!e.ctrlKey||"Backspace"!==e.key||"editpostdraft"!==this.state.editor&&"edittopicdraft"!==this.state.editor||(e.preventDefault(),e.stopPropagation(),this.delMsg()))}),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)}});let e="";document.querySelector('p[style="color: red;"]')&&(e=document.querySelector('p[style="color: red;"]').textContent,console.log(e),
|
|
2
2
|
"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)},template:'\n <div id="forum-usereply">\n <template v-if="state.page === 0">\n <cargando-foro 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\' && state.editor !== \'editpostdraft\' || (state.editor === \'reply\' && state.admin)">\n <template v-if="state.guest">\n <li>\n <campo-foro 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 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" @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" @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 name="Grupo">\n <div class="select-container">\n <select v-model="groups.type" @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="content.type !== -1 && (state.editor === \'newtopic\' || state.editor === \'edittopicdraft\')">\n <li>\n <campo-foro 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\' || state.editor === \'edittopicdraft\'">\n <li>\n <campo-foro name="Título">\n <input type="text" v-model="content.subject" placeholder="Escribe el título." />\n </campo-foro>\n </li>\n </template>\n <template v-if="state.admin && state.edit">\n <li>\n <campo-foro name="Edición">\n <div class="select-container">\n <select v-model="content.edit">\n <option value="-1" hidden>Selecciona una opción.</option>\n <option value="1">Activar</option>\n <option value="0">Desactivar</option>\n </select>\n </div>\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" @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" @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" @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" @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" @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" @click="insertSomething(\'[left]\', \'[/left]\')">Izquierda</div>\n <div class="usereply-option" @click="insertSomething(\'[center]\', \'[/center]\')">Centro</div>\n <div class="usereply-option" @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" @click="insertUrl()">Enlace</div>\n <div class="usereply-option" @click="insertImg()">Imagen</div>\n <div class="usereply-option" @click="insertSpoiler()">Spoiler</div>\n <div class="usereply-option" @click="insertSomething(\'[code]\', \'[/code]\')">Code</div>\n <div class="usereply-option" @click="insertQuote()">Cita</div>\n <div class="usereply-option" @click="insertSomething(\'[hide]\', \'[/hide]\')">Ocultar</div>\n <div class="usereply-option" @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" v-model="content.msg"></textarea>\n <div id="usereply-comand">\n <button class="button1 btn-main" @click="sendMsg()">Enviar</button>\n <button class="button1" @click="draftMsg()" v-if="state.editor === \'editpostdraft\' || state.editor === \'edittopicdraft\'">Modificar</button>\n <button class="button1" @click="draftMsg()" v-else-if="state.draft && (state.editor === \'reply\' || state.editor === \'newtopic\')">Bosquejo</button>\n <button class="button1" @click="prevMsg()">Previsualizar</button>\n <button class="button1" @click="delMsg()" v-if="state.editor === \'editpostdraft\' || state.editor === \'edittopicdraft\'">Eliminar</button>\n </div>\n <div v-if="!state.guest && state.dice && (state.editor === \'reply\' || state.editor === \'newtopic\' || state.editor === \'editpostdraft\' || state.editor === \'edittopicdraft\')" 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" @change="item.number = 1">\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 @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
|
@@ -387,21 +387,24 @@ Vue.component('gestor-multicuentas', {
|
|
|
387
387
|
</li>
|
|
388
388
|
</template>
|
|
389
389
|
</mando-foro>
|
|
390
|
-
<
|
|
391
|
-
<
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
390
|
+
<section id="forum-accountlist" class="forum-wikilist">
|
|
391
|
+
<lista-temas-cabecera elements="['Cuentas', 'Información']"></lista-temas-cabecera>
|
|
392
|
+
<ul :class="'wikilist-contents no-style' + (!sortedCharacters.length || content.loading === 0 ? ' no-results': '')" :key="render">
|
|
393
|
+
<template v-if="!sortedCharacters.length">
|
|
394
|
+
<li class="is-not-topic is-not-lastpost">
|
|
395
|
+
<h6>No hay cuentas configuradas</h6>
|
|
396
|
+
</li>
|
|
397
|
+
</template>
|
|
398
|
+
<template v-else-if="content.loading === 0">
|
|
399
|
+
<li class="is-not-topic is-not-lastpost">
|
|
400
|
+
<cargando-foro text="Cargando cuentas…"></cargando-foro>
|
|
401
|
+
</li>
|
|
402
|
+
</template>
|
|
403
|
+
<template v-else v-for="(item, index) in sortedCharacters">
|
|
404
|
+
<elemento-multicuentas :element="item" :id="index" :key="index"></elemento-multicuentas>
|
|
405
|
+
</template>
|
|
406
|
+
</ul>
|
|
407
|
+
</section>
|
|
405
408
|
<mando-foro id="lower-controls" app="true">
|
|
406
409
|
<template slot="pagination" v-if="sortedCharacters.length > 1">
|
|
407
410
|
<paginacion-foro :page="content.page" :total="Math.ceil(content.accounts.edit.length / content.default)" @setPage="setPage" />
|
|
@@ -435,7 +438,7 @@ Vue.component('elemento-multicuentas', {
|
|
|
435
438
|
FNR.html.genPrompt('Necesitamos confirmación', 'Te dispones a eliminar una cuenta almacenada en el gestor. ¿Estás segur@?', 'Escribe «ELIMINAR» para confirmar', '').then(r => {
|
|
436
439
|
if (r === 'ELIMINAR') {
|
|
437
440
|
this.$parent.content.accounts.edit.splice(this.id, 1);
|
|
438
|
-
|
|
441
|
+
|
|
439
442
|
this.$parent.forceRerender();
|
|
440
443
|
}
|
|
441
444
|
});
|
package/apps/vueMulti.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Vue.component("modal-multicuentas",{props:["element","type"],data(){return{state:{modal:!1},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nuevo usuario":"edit"===this.type?"Editar usuario":void 0},oneCheck(){let t="";return this.content.edit.name.length<4&&(t+="<li>Escribe el nombre de la cuenta.</li>"),this.content.edit.password.length<4&&(t+="<li>Escribe la contraseña de la cuenta.</li>"),t},finalCheck(){const{name:t,password:e}=this.content.current,{name:n,password:a}=this.content.edit;return t!==n||e!==a}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry(),this.$parent.forceRerender()},pushElement(){if("edit"===this.$parent.modal.type){let t=this.$parent.content.accounts.edit.map(t=>t.id).indexOf(this.content.current.id);this.$parent.content.accounts.edit.splice(t,1)}this.$parent.content.accounts.edit.push({name:this.content.edit.name,type:"password",id:FNR.utility.genSlug(this.content.edit.name),password:this.content.edit.password}),this.modalClose()}},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre de la cuenta." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Contraseña">\n <div class="character-selector">\n <input :type="content.edit.type" v-model="content.edit.password" placeholder="Escribe la contraseña de la cuenta." />\n <a class="character-custom" @click="content.edit.type === \'text\' ? content.edit.type = \'password\' : content.edit.type = \'text\'" title="Cambiar modo">\n <template v-if="content.edit.type === \'text\'">\n <i class="fas fa-eye-slash"></i>\n </template>\n <template v-else-if="content.edit.type === \'password\'">\n <i class="fas fa-eye"></i>\n </template>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls">\n <controles-modal v-if="!oneCheck.length && finalCheck">\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-multicuentas",{data:()=>({render:0,modal:{type:"new",status:!1,bonus:!1},state:{new:!1,error:!1,page:0,pagination:0},entry:{},content:{page:1,default:forumConfig.skinOptions.paginationDefault,loading:1,encrypted:{},password:{type:"password",value:""},accounts:{current:[],edit:[]}}}),computed:{msgCheck(){let t="";return this.content.password.value.length<5&&(t+="<li>Escribe la contraseña maestra.</li>"),t},finalCheck(){return JSON.stringify(this.content.accounts.current)!==JSON.stringify(this.content.accounts.edit)},sortedCharacters(){return this.content.accounts.edit.sort((t,e)=>t.name<e.name?-1:t.name>e.name?1:0).slice((this.content.page-1)*this.content.default,this.content.page*this.content.default)}},methods:{modalClose(){this.state.page=3,setTimeout(()=>{window.location.reload()},2500)},forceRerender(){this.render+=1},setEntry(){this.entry={name:"",id:"",type:"password",password:""}},addEntry(t){t.preventDefault(),this.modal.status=!0},save(t){t.preventDefault(),this.updateData()},updateLocal(){this.updateData()},updateForum(){this.content.accounts.edit=FNR.cache.getData("usermultiaccounts").map(t=>({name:t.name,password:sjcl.decrypt(this.content.password.value,t.password)})),this.updateData()},setData(){this.state.page=3,FNR.cache.setData("userpassword",this.content.password.value,-1),setTimeout(()=>{window.location.reload()},2500)},setPage(t){this.content.loading=0,this.content.page=t,this.forceRerender(),setTimeout(()=>{this.content.loading=1},350)},updateData(){this.state.page=3;const t=this.content.accounts.edit.map(t=>({name:t.name,password:sjcl.encrypt(this.content.password.value,t.password)}));FNR.cache.setData("userpassword",this.content.password.value,-1),FNR.cache.setData("usermultiaccounts",t,-1),FNR.user.profile.setData([{name:forumConfig.profileUser.accountsField,type:"textarea",value:JSON.stringify([{password:this.state.new?sjcl.encrypt(this.content.password.value,"gaylien_masterpass"):this.content.encrypted.password,accounts:t}]).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2500)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.accountsField,type:"textarea"}]).then(t=>{if(this.content.encrypted=FNR.utility.genArray(t[0].value)[0],this.state.new=0===Object.keys(this.content.encrypted).length,FNR.cache.getData("userpassword"))try{sjcl.decrypt(FNR.cache.getData("userpassword"),this.content.encrypted.password)}catch(t){"ccm: tag doesn't match"===t.message&&(this.state.error=!0,FNR.cache.delData("userpassword"),setTimeout(()=>{window.location.reload()},2500))}finally{if(!this.state.error)if(this.state.new&&FNR.cache.getData("usermultiaccounts").length>0)this.state.page=3,FNR.user.profile.setData([{name:forumConfig.profileUser.accountsField,type:"textarea",value:JSON.stringify([{password:sjcl.encrypt(FNR.cache.getData("userpassword"),"gaylien_masterpass"),accounts:FNR.cache.getData("usermultiaccounts")}]).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2500)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")});else{let t=[];this.content.password.value=FNR.cache.getData("userpassword"),this.state.new||(t=JSON.parse(JSON.stringify(this.content.encrypted)).accounts.map(t=>({name:t.name,type:"password",id:FNR.utility.genSlug(t.name),password:sjcl.decrypt(this.content.password.value,t.password)}))),this.setEntry(),this.content.accounts.edit=t,this.content.accounts.current=JSON.parse(JSON.stringify(t)),this.state.page=2,this.state.new||JSON.stringify(FNR.cache.getData("usermultiaccounts"))===JSON.stringify(this.content.encrypted.accounts)||(this.modal.bonus=!0)}}else this.state.page=1})},template:'\n <section id="forum-multiaccount" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Multicuentas</h2>\n <hr />\n <p>En esta página podrás configurar tu cambio de cuenta rápido.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro 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 class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Contraseña maestra">\n <div class="character-selector">\n <input :type="content.password.type" v-model="content.password.value" />\n <a class="character-custom" @click="content.password.type === \'text\' ? content.password.type = \'password\' : content.password.type = \'text\'" title="Cambiar modo">\n <template v-if="content.password.type === \'text\'">\n <i class="fas fa-eye-slash"></i>\n </template>\n <template v-else-if="content.password.type === \'password\'">\n <i class="fas fa-eye"></i>\n </template>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n <div id="usereply-comand" v-if="!msgCheck.length">\n <button class="button1 btn-main" @click="setData()">Guardar</button>\n </div>\n </template>\n <template v-else-if="state.page === 2">\n <modal-multicuentas v-if="modal.status" :type="modal.type" :element="entry"></modal-multicuentas>\n <modal-foro v-if="modal.bonus" title="Atención" @modal-close="modalClose()">\n <template slot="content">\n <p>Hemos detectado que tienes dos versiones de tu base de datos de cuentas asociadas diferentes. Por favor, elige o actualizar la del dispositivo o la del foro.</p>\n </template>\n <template slot="controls">\n <controles-modal>\n <button class="button1 btn-main" @click="updateForum()" title="Actualizar versión foro">Actualizar foro</button>\n <button class="button1" @click="updateLocal()" title="Actualizar versión local">Actualizar local</button>\n </controles-modal>\n </template>\n </modal-foro>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="content.accounts.edit.length > 1">\n <paginacion-foro :page="content.page" :total="Math.ceil(content.accounts.edit.length / content.default)" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <ul :class="\'no-style\' + (!sortedCharacters.length || content.loading === 0 ? \' no-results\': \'\')" :key="render">\n <template v-if="!sortedCharacters.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay cuentas configuradas</h6>\n </li>\n </template>\n <template v-else-if="content.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando cuentas…"></cargando-foro>\n </li>\n </template>\n <template v-else v-for="(item, index) in sortedCharacters">\n <elemento-multicuentas :element="item" :id="index" :key="index"></elemento-multicuentas>\n </template>\n </ul>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="sortedCharacters.length > 1">\n <paginacion-foro :page="content.page" :total="Math.ceil(content.accounts.edit.length / content.default)" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 3">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-multicuentas",{props:["element","id"],data(){return{content:this.element}},methods:{deleteElement(){FNR.html.genPrompt("Necesitamos confirmación","Te dispones a eliminar una cuenta almacenada en el gestor. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(t=>{"ELIMINAR"===t&&(this.$parent.content.accounts.edit.splice(this.id,1),this.$parent.forceRerender())})},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li>\n <campo-foro :name="content.name">\n <div class="character-selector">\n <input :type="content.type" v-model="content.password" disabled/>\n <span class="character-custom rp-controls">\n <span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span>\n </span>\n </div>\n </campo-foro>\n </li>\n '});
|
|
1
|
+
Vue.component("modal-multicuentas",{props:["element","type"],data(){return{state:{modal:!1},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nuevo usuario":"edit"===this.type?"Editar usuario":void 0},oneCheck(){let t="";return this.content.edit.name.length<4&&(t+="<li>Escribe el nombre de la cuenta.</li>"),this.content.edit.password.length<4&&(t+="<li>Escribe la contraseña de la cuenta.</li>"),t},finalCheck(){const{name:t,password:e}=this.content.current,{name:n,password:a}=this.content.edit;return t!==n||e!==a}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry(),this.$parent.forceRerender()},pushElement(){if("edit"===this.$parent.modal.type){let t=this.$parent.content.accounts.edit.map(t=>t.id).indexOf(this.content.current.id);this.$parent.content.accounts.edit.splice(t,1)}this.$parent.content.accounts.edit.push({name:this.content.edit.name,type:"password",id:FNR.utility.genSlug(this.content.edit.name),password:this.content.edit.password}),this.modalClose()}},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre de la cuenta." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Contraseña">\n <div class="character-selector">\n <input :type="content.edit.type" v-model="content.edit.password" placeholder="Escribe la contraseña de la cuenta." />\n <a class="character-custom" @click="content.edit.type === \'text\' ? content.edit.type = \'password\' : content.edit.type = \'text\'" title="Cambiar modo">\n <template v-if="content.edit.type === \'text\'">\n <i class="fas fa-eye-slash"></i>\n </template>\n <template v-else-if="content.edit.type === \'password\'">\n <i class="fas fa-eye"></i>\n </template>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls">\n <controles-modal v-if="!oneCheck.length && finalCheck">\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-multicuentas",{data:()=>({render:0,modal:{type:"new",status:!1,bonus:!1},state:{new:!1,error:!1,page:0,pagination:0},entry:{},content:{page:1,default:forumConfig.skinOptions.paginationDefault,loading:1,encrypted:{},password:{type:"password",value:""},accounts:{current:[],edit:[]}}}),computed:{msgCheck(){let t="";return this.content.password.value.length<5&&(t+="<li>Escribe la contraseña maestra.</li>"),t},finalCheck(){return JSON.stringify(this.content.accounts.current)!==JSON.stringify(this.content.accounts.edit)},sortedCharacters(){return this.content.accounts.edit.sort((t,e)=>t.name<e.name?-1:t.name>e.name?1:0).slice((this.content.page-1)*this.content.default,this.content.page*this.content.default)}},methods:{modalClose(){this.state.page=3,setTimeout(()=>{window.location.reload()},2500)},forceRerender(){this.render+=1},setEntry(){this.entry={name:"",id:"",type:"password",password:""}},addEntry(t){t.preventDefault(),this.modal.status=!0},save(t){t.preventDefault(),this.updateData()},updateLocal(){this.updateData()},updateForum(){this.content.accounts.edit=FNR.cache.getData("usermultiaccounts").map(t=>({name:t.name,password:sjcl.decrypt(this.content.password.value,t.password)})),this.updateData()},setData(){this.state.page=3,FNR.cache.setData("userpassword",this.content.password.value,-1),setTimeout(()=>{window.location.reload()},2500)},setPage(t){this.content.loading=0,this.content.page=t,this.forceRerender(),setTimeout(()=>{this.content.loading=1},350)},updateData(){this.state.page=3;const t=this.content.accounts.edit.map(t=>({name:t.name,password:sjcl.encrypt(this.content.password.value,t.password)}));FNR.cache.setData("userpassword",this.content.password.value,-1),FNR.cache.setData("usermultiaccounts",t,-1),FNR.user.profile.setData([{name:forumConfig.profileUser.accountsField,type:"textarea",value:JSON.stringify([{password:this.state.new?sjcl.encrypt(this.content.password.value,"gaylien_masterpass"):this.content.encrypted.password,accounts:t}]).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2500)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.accountsField,type:"textarea"}]).then(t=>{if(this.content.encrypted=FNR.utility.genArray(t[0].value)[0],this.state.new=0===Object.keys(this.content.encrypted).length,FNR.cache.getData("userpassword"))try{sjcl.decrypt(FNR.cache.getData("userpassword"),this.content.encrypted.password)}catch(t){"ccm: tag doesn't match"===t.message&&(this.state.error=!0,FNR.cache.delData("userpassword"),setTimeout(()=>{window.location.reload()},2500))}finally{if(!this.state.error)if(this.state.new&&FNR.cache.getData("usermultiaccounts").length>0)this.state.page=3,FNR.user.profile.setData([{name:forumConfig.profileUser.accountsField,type:"textarea",value:JSON.stringify([{password:sjcl.encrypt(FNR.cache.getData("userpassword"),"gaylien_masterpass"),accounts:FNR.cache.getData("usermultiaccounts")}]).replace(/"/g,"`")}]).then(t=>{t?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2500)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")});else{let t=[];this.content.password.value=FNR.cache.getData("userpassword"),this.state.new||(t=JSON.parse(JSON.stringify(this.content.encrypted)).accounts.map(t=>({name:t.name,type:"password",id:FNR.utility.genSlug(t.name),password:sjcl.decrypt(this.content.password.value,t.password)}))),this.setEntry(),this.content.accounts.edit=t,this.content.accounts.current=JSON.parse(JSON.stringify(t)),this.state.page=2,this.state.new||JSON.stringify(FNR.cache.getData("usermultiaccounts"))===JSON.stringify(this.content.encrypted.accounts)||(this.modal.bonus=!0)}}else this.state.page=1})},template:'\n <section id="forum-multiaccount" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Multicuentas</h2>\n <hr />\n <p>En esta página podrás configurar tu cambio de cuenta rápido.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro 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 class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Contraseña maestra">\n <div class="character-selector">\n <input :type="content.password.type" v-model="content.password.value" />\n <a class="character-custom" @click="content.password.type === \'text\' ? content.password.type = \'password\' : content.password.type = \'text\'" title="Cambiar modo">\n <template v-if="content.password.type === \'text\'">\n <i class="fas fa-eye-slash"></i>\n </template>\n <template v-else-if="content.password.type === \'password\'">\n <i class="fas fa-eye"></i>\n </template>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n <div id="usereply-comand" v-if="!msgCheck.length">\n <button class="button1 btn-main" @click="setData()">Guardar</button>\n </div>\n </template>\n <template v-else-if="state.page === 2">\n <modal-multicuentas v-if="modal.status" :type="modal.type" :element="entry"></modal-multicuentas>\n <modal-foro v-if="modal.bonus" title="Atención" @modal-close="modalClose()">\n <template slot="content">\n <p>Hemos detectado que tienes dos versiones de tu base de datos de cuentas asociadas diferentes. Por favor, elige o actualizar la del dispositivo o la del foro.</p>\n </template>\n <template slot="controls">\n <controles-modal>\n <button class="button1 btn-main" @click="updateForum()" title="Actualizar versión foro">Actualizar foro</button>\n <button class="button1" @click="updateLocal()" title="Actualizar versión local">Actualizar local</button>\n </controles-modal>\n </template>\n </modal-foro>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="content.accounts.edit.length > 1">\n <paginacion-foro :page="content.page" :total="Math.ceil(content.accounts.edit.length / content.default)" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <section id="forum-accountlist" class="forum-wikilist">\n <lista-temas-cabecera elements="[\'Cuentas\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'wikilist-contents no-style\' + (!sortedCharacters.length || content.loading === 0 ? \' no-results\': \'\')" :key="render">\n <template v-if="!sortedCharacters.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay cuentas configuradas</h6>\n </li>\n </template>\n <template v-else-if="content.loading === 0">\n <li class="is-not-topic is-not-lastpost">\n <cargando-foro text="Cargando cuentas…"></cargando-foro>\n </li>\n </template>\n <template v-else v-for="(item, index) in sortedCharacters">\n <elemento-multicuentas :element="item" :id="index" :key="index"></elemento-multicuentas>\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="sortedCharacters.length > 1">\n <paginacion-foro :page="content.page" :total="Math.ceil(content.accounts.edit.length / content.default)" @setPage="setPage" />\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 3">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-multicuentas",{props:["element","id"],data(){return{content:this.element}},methods:{deleteElement(){FNR.html.genPrompt("Necesitamos confirmación","Te dispones a eliminar una cuenta almacenada en el gestor. ¿Estás segur@?","Escribe «ELIMINAR» para confirmar","").then(t=>{"ELIMINAR"===t&&(this.$parent.content.accounts.edit.splice(this.id,1),this.$parent.forceRerender())})},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li>\n <campo-foro :name="content.name">\n <div class="character-selector">\n <input :type="content.type" v-model="content.password" disabled/>\n <span class="character-custom rp-controls">\n <span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span>\n </span>\n </div>\n </campo-foro>\n </li>\n '});
|
package/apps/vueRela.js
CHANGED
|
@@ -352,16 +352,19 @@ Vue.component('gestor-relaciones', {
|
|
|
352
352
|
</li>
|
|
353
353
|
</template>
|
|
354
354
|
</mando-foro>
|
|
355
|
-
<
|
|
356
|
-
<
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
355
|
+
<section id="forum-rplist" class="forum-wikilist">
|
|
356
|
+
<lista-temas-cabecera elements="['Personajes', 'Información']"></lista-temas-cabecera>
|
|
357
|
+
<ul :class="'wikilist-contents no-style' + (!paginationContent.content.length ? ' no-results': '')" :key="render">
|
|
358
|
+
<template v-if="!paginationContent.content.length">
|
|
359
|
+
<li class="is-not-topic is-not-lastpost">
|
|
360
|
+
<h6>No hay entradas en tus relaciones</h6>
|
|
361
|
+
</li>
|
|
362
|
+
</template>
|
|
363
|
+
<template v-else v-for="character in paginationContent.content">
|
|
364
|
+
<elemento-relaciones :element="character" type="manager" :id="character.position" />
|
|
365
|
+
</template>
|
|
366
|
+
</ul>
|
|
367
|
+
</section>
|
|
365
368
|
<mando-foro id="lower-controls" app="true">
|
|
366
369
|
<template slot="pagination" v-if="paginationContent.pages.length > 1">
|
|
367
370
|
<a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">
|
package/apps/vueRela.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Vue.component("modal-relaciones",{props:["element","type"],data(){return{state:{modal:!1},info:{users:this.$parent.users,user:"",people:[]},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nueva entrada":"edit"===this.type?"Editar entrada":void 0},oneCheck(){let e="";return Object.keys(this.content.edit).length?(this.content.edit.name.length<3&&(e+="<li>Escribe el nombre del personaje.</li>"),-1===this.content.edit.color&&(e+="<li>Selecciona una facción para el personaje.</li>"),-1===this.content.edit.url.indexOf("/u")&&(e+="<li>Escribe el enlace al perfil del personaje.</li>"),this.content.edit.img.match(/(jpg|jpeg|png)$/i)||(e+="<li>Escribe el enlace a la imagen del personaje (debe ser de 190x190).</li>"),this.content.edit.desc.length<151&&(e+="<li>Escribe una descripción lo suficientemente larga (150 carácteres al menos).</li>"),e):e},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)},sortedCharacters(){return Object.keys(this.content.edit).length?this.info.users.filter(e=>-1===this.info.people.indexOf(e.user)).filter(e=>e.user.toLowerCase().indexOf(this.content.edit.name.toLowerCase())>-1):this.$parent.users.map(e=>e.user)}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry()},addCharacter(e){this.content.edit.type=!0,this.content.edit.name=e.user,this.content.edit.img=e.img,this.content.edit.color=e.color,this.content.edit.url=e.id},updateData(){const e=JSON.parse(JSON.stringify(this.info.users)).filter(e=>e.user===this.content.current.name)[0];this.content.edit.img=e.img},pushElement(){"edit"===this.$parent.modal.type&&this.$parent.content.edit.splice(this.$parent.content.edit.map(e=>e.position).indexOf(this.content.current.position),1);let e=this.content.edit;"new"===this.$parent.modal.type&&(e.position=this.$parent.content.edit.length),this.$parent.content.edit.push(e),this.modalClose()}},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template v-if="content.edit.type">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <div class="character-selector">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del personaje." disabled />\n <a class="character-custom" @click="updateData()" :title="\'Actualizar avatar de «\' + content.current.name + \'»\'">\n <i class="fas fa-redo-alt"></i>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n <h4 class="mt-5">Descripción</h4>\n <ul class="forum-fieldlist no-style">\n <li class="has-no-label">\n <campo-foro name="Descripción">\n <textarea v-model="content.edit.desc" placeholder="Escribe la descripción del personaje."></textarea>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length && finalCheck">\n <controles-modal>\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n <template v-else>\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <div class="character-selector"> \n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del personaje." />\n <ul class="no-style selector-list" v-if="sortedCharacters.length > 0">\n <li v-for="(character, index) in sortedCharacters" @click="addCharacter(character)" :title="\'Seleccionar \' + character.user">{{ character.user }}<i class="fas fa-plus"></i></li>\n </ul>\n </div>\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Imagen">\n <input type="text" v-model="content.edit.img" placeholder="Escribe el enlace a la imagen del personaje." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Perfil">\n <input type="text" v-model="content.edit.url" placeholder="Escribe el enlace al perfil del personaje." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Facción">\n <div class="select-container">\n <select v-model="content.edit.color">\n <option value="-1" hidden>Selecciona la facción del personaje.</option>\n <option value="azul">Imperio Galáctico</option>\n <option value="rojo">Remanente Purista</option>\n <option value="naranja">Autoridad del Sector Corporativo</option>\n <option value="verde">Cártel</option>\n <option value="turquesa">Nueva Rebelión</option>\n <option value="amarillo">Neutral</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </ul>\n <h4 class="mt-5">Descripción</h4>\n <ul class="forum-fieldlist no-style">\n <li class="has-no-label">\n <campo-foro name="Descripción">\n <textarea v-model="content.edit.desc" placeholder="Escribe la descripción del personaje."></textarea>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length && finalCheck">\n <controles-modal>\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-relaciones",{data:()=>({render:0,modal:{type:"new",status:!1},users:[],state:{page:0,pagination:0},entry:{},content:{edit:[],current:[]}}),computed:{sortedContent(){return JSON.parse(JSON.stringify(this.content.edit)).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)},paginationContent(){const e=parseInt(forumConfig.skinOptions.paginationDefault/2)+1,t=Math.floor((this.sortedContent.length-1)/e)+1;let n=[];for(let e=0;e<t;e++)n.push(e);return this.forceRerender(),{pages:n,content:this.sortedContent.slice(this.state.pagination*e,(this.state.pagination+1)*e)}},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)}},methods:{forceRerender(){this.render+=1},setEntry(){this.entry={type:!1,color:-1,url:"",img:"",name:"",desc:""}},addEntry(e){e.preventDefault(),this.modal.status=!0},save(e){e.preventDefault(),this.state.page=2;const t=this.sortedContent.map(e=>(void 0!==e.position&&delete e.position,e));FNR.user.profile.setData([{name:forumConfig.profileUser.relaField,type:"textarea",value:JSON.stringify(t).replace(/"/g,"`")}]).then(e=>{e?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2e3)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.relaField,type:"textarea"}]).then(e=>{const t=FNR.utility.genArray(e[0].value).map((e,t)=>{let n=e;return n.position=t,n});this.content.edit=t,this.content.current=JSON.parse(JSON.stringify(t)),FNR.forum.getMembers().then(e=>{this.setEntry(),this.users=e,this.state.page=1})})},template:'\n <section id="forum-relationships" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Relaciones</h2>\n <hr />\n <p>En esta página podrás editar las relaciones de tu personaje.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <modal-relaciones v-if="modal.status" :type="modal.type" :element="entry"></modal-relaciones>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <ul id="forum-rplist" :class="\'no-style\' + (!paginationContent.content.length ? \' no-results\': \'\')" :key="render">\n <template v-if="!paginationContent.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay entradas en tus relaciones</h6>\n </li>\n </template>\n <template v-else v-for="character in paginationContent.content">\n <elemento-relaciones :element="character" type="manager" :id="character.position" />\n </template>\n </ul>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-relaciones",{props:["element","type","id"],data(){return{profileName:forumConfig.profileOptions.profileName||"perfil",content:this.element}},computed:{realClass(){return"rela-list usergroup-"+this.content.color}},methods:{deleteElement(){this.$parent.content.edit.splice(this.$parent.content.edit.map(e=>e.position).indexOf(this.id),1),0===this.$parent.paginationContent.content.length&&0!==this.$parent.state.pagination&&(this.$parent.state.pagination-=1),this.$parent.forceRerender()},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li :class="realClass">\n <template v-if="type === \'manager\'">\n <a class="rela-element rela-manager">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n <div class="rp-controls"><span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span></div>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n <template v-else-if="type === \'profile\'">\n <template v-if="content.type">\n <a class="rela-element" :href="content.url" target="_blank" :title="\'Ir al \' + profileName + \' de «\' + content.name + \'»\'">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n <template v-else>\n <a class="rela-element">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n </template>\n </li>\n '});
|
|
1
|
+
Vue.component("modal-relaciones",{props:["element","type"],data(){return{state:{modal:!1},info:{users:this.$parent.users,user:"",people:[]},content:{edit:JSON.parse(JSON.stringify(this.element)),current:this.element}}},computed:{modalTitle(){return"new"===this.type?"Nueva entrada":"edit"===this.type?"Editar entrada":void 0},oneCheck(){let e="";return Object.keys(this.content.edit).length?(this.content.edit.name.length<3&&(e+="<li>Escribe el nombre del personaje.</li>"),-1===this.content.edit.color&&(e+="<li>Selecciona una facción para el personaje.</li>"),-1===this.content.edit.url.indexOf("/u")&&(e+="<li>Escribe el enlace al perfil del personaje.</li>"),this.content.edit.img.match(/(jpg|jpeg|png)$/i)||(e+="<li>Escribe el enlace a la imagen del personaje (debe ser de 190x190).</li>"),this.content.edit.desc.length<151&&(e+="<li>Escribe una descripción lo suficientemente larga (150 carácteres al menos).</li>"),e):e},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)},sortedCharacters(){return Object.keys(this.content.edit).length?this.info.users.filter(e=>-1===this.info.people.indexOf(e.user)).filter(e=>e.user.toLowerCase().indexOf(this.content.edit.name.toLowerCase())>-1):this.$parent.users.map(e=>e.user)}},methods:{modalClose(){this.$parent.modal.type="new",this.$parent.modal.status=!1,this.$parent.setEntry()},addCharacter(e){this.content.edit.type=!0,this.content.edit.name=e.user,this.content.edit.img=e.img,this.content.edit.color=e.color,this.content.edit.url=e.id},updateData(){const e=JSON.parse(JSON.stringify(this.info.users)).filter(e=>e.user===this.content.current.name)[0];this.content.edit.img=e.img},pushElement(){"edit"===this.$parent.modal.type&&this.$parent.content.edit.splice(this.$parent.content.edit.map(e=>e.position).indexOf(this.content.current.position),1);let e=this.content.edit;"new"===this.$parent.modal.type&&(e.position=this.$parent.content.edit.length),this.$parent.content.edit.push(e),this.modalClose()}},template:'\n <modal-foro :title="modalTitle" @modal-close="modalClose()">\n <template v-if="content.edit.type">\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <div class="character-selector">\n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del personaje." disabled />\n <a class="character-custom" @click="updateData()" :title="\'Actualizar avatar de «\' + content.current.name + \'»\'">\n <i class="fas fa-redo-alt"></i>\n </a>\n </div>\n </campo-foro>\n </li>\n </ul>\n <h4 class="mt-5">Descripción</h4>\n <ul class="forum-fieldlist no-style">\n <li class="has-no-label">\n <campo-foro name="Descripción">\n <textarea v-model="content.edit.desc" placeholder="Escribe la descripción del personaje."></textarea>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length && finalCheck">\n <controles-modal>\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n <template v-else>\n <template slot="content">\n <aviso-foro v-show="oneCheck.length">\n <ul v-html="oneCheck"></ul>\n </aviso-foro>\n <ul class="forum-fieldlist no-style">\n <li>\n <campo-foro name="Nombre">\n <div class="character-selector"> \n <input type="text" v-model="content.edit.name" placeholder="Escribe el nombre del personaje." />\n <ul class="no-style selector-list" v-if="sortedCharacters.length > 0">\n <li v-for="(character, index) in sortedCharacters" @click="addCharacter(character)" :title="\'Seleccionar \' + character.user">{{ character.user }}<i class="fas fa-plus"></i></li>\n </ul>\n </div>\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Imagen">\n <input type="text" v-model="content.edit.img" placeholder="Escribe el enlace a la imagen del personaje." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Perfil">\n <input type="text" v-model="content.edit.url" placeholder="Escribe el enlace al perfil del personaje." />\n </campo-foro>\n </li>\n <li>\n <campo-foro name="Facción">\n <div class="select-container">\n <select v-model="content.edit.color">\n <option value="-1" hidden>Selecciona la facción del personaje.</option>\n <option value="azul">Imperio Galáctico</option>\n <option value="rojo">Remanente Purista</option>\n <option value="naranja">Autoridad del Sector Corporativo</option>\n <option value="verde">Cártel</option>\n <option value="turquesa">Nueva Rebelión</option>\n <option value="amarillo">Neutral</option>\n </select>\n </div>\n </campo-foro>\n </li>\n </ul>\n <h4 class="mt-5">Descripción</h4>\n <ul class="forum-fieldlist no-style">\n <li class="has-no-label">\n <campo-foro name="Descripción">\n <textarea v-model="content.edit.desc" placeholder="Escribe la descripción del personaje."></textarea>\n </campo-foro>\n </li>\n </ul>\n </template>\n <template slot="controls" v-if="!oneCheck.length && finalCheck">\n <controles-modal>\n <button class="button1 btn-main" @click="pushElement()" title="Guardar entrada">Guardar</button>\n </controles-modal>\n </template>\n </template>\n </modal-foro>\n '}),Vue.component("gestor-relaciones",{data:()=>({render:0,modal:{type:"new",status:!1},users:[],state:{page:0,pagination:0},entry:{},content:{edit:[],current:[]}}),computed:{sortedContent(){return JSON.parse(JSON.stringify(this.content.edit)).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)},paginationContent(){const e=parseInt(forumConfig.skinOptions.paginationDefault/2)+1,t=Math.floor((this.sortedContent.length-1)/e)+1;let n=[];for(let e=0;e<t;e++)n.push(e);return this.forceRerender(),{pages:n,content:this.sortedContent.slice(this.state.pagination*e,(this.state.pagination+1)*e)}},finalCheck(){return JSON.stringify(this.content.current)!==JSON.stringify(this.content.edit)}},methods:{forceRerender(){this.render+=1},setEntry(){this.entry={type:!1,color:-1,url:"",img:"",name:"",desc:""}},addEntry(e){e.preventDefault(),this.modal.status=!0},save(e){e.preventDefault(),this.state.page=2;const t=this.sortedContent.map(e=>(void 0!==e.position&&delete e.position,e));FNR.user.profile.setData([{name:forumConfig.profileUser.relaField,type:"textarea",value:JSON.stringify(t).replace(/"/g,"`")}]).then(e=>{e?(FNR.html.genNotification("Atención","Información actualizada sin inconvenientes.","fas fa-check"),setTimeout(()=>{window.location.reload()},2e3)):FNR.html.genNotification("Atención","Hubo un problema al actualizar. Dale otro intento.","fas fa-exclamation")})}},created(){FNR.user.profile.getData([{name:forumConfig.profileUser.relaField,type:"textarea"}]).then(e=>{const t=FNR.utility.genArray(e[0].value).map((e,t)=>{let n=e;return n.position=t,n});this.content.edit=t,this.content.current=JSON.parse(JSON.stringify(t)),FNR.forum.getMembers().then(e=>{this.setEntry(),this.users=e,this.state.page=1})})},template:'\n <section id="forum-relationships" class="wiki-content is-dramatic">\n <div class="is-content">\n <h2>Relaciones</h2>\n <hr />\n <p>En esta página podrás editar las relaciones de tu personaje.</p>\n <p>Ante cualquier duda o problema, contacta con la administración.</p>\n </div>\n <separador-foro />\n <template v-if="state.page === 0">\n <cargando-foro text="Cargando utilidad…"></cargando-foro>\n </template>\n <template v-else-if="state.page === 1">\n <modal-relaciones v-if="modal.status" :type="modal.type" :element="entry"></modal-relaciones>\n <mando-foro id="upper-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n <section id="forum-rplist" class="forum-wikilist">\n <lista-temas-cabecera elements="[\'Personajes\', \'Información\']"></lista-temas-cabecera>\n <ul :class="\'wikilist-contents no-style\' + (!paginationContent.content.length ? \' no-results\': \'\')" :key="render">\n <template v-if="!paginationContent.content.length">\n <li class="is-not-topic is-not-lastpost">\n <h6>No hay entradas en tus relaciones</h6>\n </li>\n </template>\n <template v-else v-for="character in paginationContent.content">\n <elemento-relaciones :element="character" type="manager" :id="character.position" />\n </template>\n </ul>\n </section>\n <mando-foro id="lower-controls" app="true">\n <template slot="pagination" v-if="paginationContent.pages.length > 1">\n <a class="page-action" title="Ir a la página anterior" v-if="state.pagination > 0" @click="state.pagination -= 1">\n <i class="fas fa-chevron-left"></i>\n </a>\n <template v-for="page in paginationContent.pages">\n <strong v-if="page === state.pagination">{{ page + 1 }}</strong>\n <a class="page-link" :title="\'Ir a la página «\' + (page + 1) + \'»\'" v-else @click="state.pagination = page">{{ page + 1 }}</a>\n </template>\n <a class="page-action" title="Ir a la página siguiente" v-if="(state.pagination + 1) < paginationContent.pages.length" @click="state.pagination += 1">\n <i class="fas fa-chevron-right"></i>\n </a>\n </template>\n <template slot="controls">\n <li @click="addEntry($event)">\n <boton-foro url="#" name="Añadir" icon="fas fa-plus"></boton-foro>\n </li>\n <li v-if="finalCheck" @click="save($event)">\n <boton-foro url="#" name="Guardar" icon="fas fa-save" type="no-name"></boton-foro>\n </li>\n </template>\n </mando-foro>\n </template>\n <template v-else-if="state.page === 2">\n <cargando-foro text="Actualizando información…"></cargando-foro>\n </template>\n </section>\n '}),Vue.component("elemento-relaciones",{props:["element","type","id"],data(){return{profileName:forumConfig.profileOptions.profileName||"perfil",content:this.element}},computed:{realClass(){return"rela-list usergroup-"+this.content.color}},methods:{deleteElement(){this.$parent.content.edit.splice(this.$parent.content.edit.map(e=>e.position).indexOf(this.id),1),0===this.$parent.paginationContent.content.length&&0!==this.$parent.state.pagination&&(this.$parent.state.pagination-=1),this.$parent.forceRerender()},editElement(){this.$parent.modal.type="edit",this.$parent.entry=this.content,this.$parent.modal.status=!0}},template:'\n <li :class="realClass">\n <template v-if="type === \'manager\'">\n <a class="rela-element rela-manager">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n <div class="rp-controls"><span @click="editElement()" title="Editar entrada">Editar</span> / <span @click="deleteElement()" title="Eliminar entrada">Eliminar</span></div>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n <template v-else-if="type === \'profile\'">\n <template v-if="content.type">\n <a class="rela-element" :href="content.url" target="_blank" :title="\'Ir al \' + profileName + \' de «\' + content.name + \'»\'">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n <template v-else>\n <a class="rela-element">\n <div class="rela-image" :style="\'background-image: url(\' + content.img + \')\'"></div>\n <div class="rela-content">\n <div class="rela-title">\n <h4>{{ content.name }}</h4>\n </div>\n <div class="small-text is-content" :inner-html.prop="content.desc | turn-br"></div>\n </div>\n </a>\n </template>\n </template>\n </li>\n '});
|
package/package.json
CHANGED
package/stylesheet.css
CHANGED
package/stylesheet.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@keyframes dramatic-show{from{opacity:0}to{opacity:1}}.is-dramatic{animation:dramatic-show 1s}@-ms-viewport{width:device-width}*{box-sizing:border-box!important}h1,h2,h3,h4,h5,h6{font-family:var(--font-one)}h1{font-size:2.1rem}h2{font-size:1.9rem}h3{font-size:1.7rem}h4{font-size:1.5rem}h5{font-size:1.3rem}h6{font-size:1.1rem}h2 small,h3 small,h4 small,h5 small,h6 small{display:block;font-weight:400}a:hover{color:var(--color-contrast)}small{font-size:80%}strong{color:inherit}#navbar-original,.forum-head+.forumseparator-element,.subforum-element .category-element>.forum-head,:not(.category-element)+.forum-separator{display:none}.is-pointer{cursor:pointer!important}.is-default{cursor:default!important}.not-show,.to-process{display:none!important}.main-body{max-width:1200px}.is-full-width{width:100%!important;max-width:100%!important}.is-no-links a{border:none!important}.mt-d{margin-top:2rem}.mb-d{margin-bottom:2rem}.is-two-columns-list{display:flex;flex-flow:wrap;margin:-.5rem}.is-two-columns-list>li{width:50%;padding:.5rem}.columns:not(:last-child){margin-bottom:-.75rem}.is-tweakeable{display:block;width:100%}.is-measurable{white-space:nowrap}.has-anchor{position:relative}.is-selectbox:not(.is-active){display:none!important}.is-clickbox{cursor:pointer!important}.is-clickbox:not(.is-toggle).is-active{cursor:default!important}#forum-notification{position:fixed;right:1rem;bottom:1rem;transition:1s ease-in-out;z-index:999}#forum-notification:not(.notification-show){transform:translateY(400px)}#loading-element{padding:1rem}#loading-content,#loading-element{display:flex;justify-content:center;align-items:center;text-align:center;cursor:default}#loading-content i{font-size:1.25rem;margin-right:.5rem;color:var(--color-contrast)}#loading-content span{font-family:var(--font-one)}#forum-body>.main-body{display:flex;margin:0 auto;padding:3rem 0}#forum-body>.main-body>article{width:100%}#forum-body>.main-body>#right{display:none}aside#left{display:none}#forum-save{display:block}.category-element{margin-bottom:3rem}.category-element:last-child{margin:0!important}#forum-rules{margin-bottom:2rem}#quickreply-section{margin-top:3rem}#forum-realreply{display:none}#forum-reply{margin-bottom:3rem}#forum-reply:last-child{margin-bottom:0}#forum-reply+#privmsg-review #privmsg-see,:not(#forum-reply)+#privmsg-review #privmsg-write{display:none}#usereply-top{display:flex;justify-content:space-between;align-items:center}#usereply-top small{display:block;font-size:50%}.usereply-header{padding:0 .5rem}#usereply-editor{margin-top:1.25rem;height:250px;resize:none}#usereply-buttons ul{display:flex;flex:1 0 auto;justify-content:flex-end}#usereply-buttons ul:first-child{margin-bottom:.5rem}#usereply-buttons ul li{margin-left:.5rem}#usereply-buttons ul li:first-child{margin-left:0}.usereply-button{display:flex;width:2rem;height:2rem;background:0 0;color:var(--color-contrast);border:2px solid;padding:0;justify-content:center;align-items:center;cursor:pointer}#usereply-comand{display:flex;justify-content:center}#usereply-comand,.modal-buttons{margin:1rem -.5rem -.5rem -.5rem;flex-flow:wrap row}.button1,.button2,input[type=Submit],input[type=reset]{margin:.5rem}.usereply-option{font-family:var(--font-one);cursor:pointer;font-size:.85rem;margin-bottom:.4rem;white-space:nowrap}.usereply-option:last-child{margin:0}#usereply-buttons .dropdown-menu::after,#usereply-buttons .dropdown-menu::before{right:7px}#usereply-dice{margin-top:1.5rem}#usereply-dice h3{margin-bottom:1.25rem}#usereply-dice ul li{display:flex;counter-increment:special-list-counter;margin-bottom:1rem}#usereply-dice ul li:last-child{margin-bottom:0}#usereply-dice ul li::before{content:'#' counter(special-list-counter);display:flex;justify-content:center;align-items:center;flex:0 0 auto;width:2rem;margin-right:.5rem;color:var(--color-contrast);font-family:var(--font-one)}#usereply-dice ul li .dice-more{width:2rem;flex:0 0 auto;border:0;padding:0;background:0 0;color:var(--color-contrast);font-size:1rem;cursor:pointer}#usereply-dice ul li .select-container{flex:1 0 auto;width:inherit}#usereply-dice ul li input{flex:1 1 auto;width:inherit;max-width:30%}#usereply-dice ul li>*{margin-right:.5rem}#usereply-dice ul li>:last-child{margin-right:0}#usereply-extra{margin-bottom:1.5rem}#emoji-list{display:flex;flex-flow:wrap;overflow:auto;width:220px;max-height:205px;padding:0}#emoji-list iframe{width:94%;margin:3%}.forum-otherposts{margin-top:2rem}.upper-controls+.forum-otherposts{margin-top:0}.forum-otherposts .post-profile{width:224px}.forum-otherposts .post-profile>*{display:block}.forum-otherposts .post-datafields li{margin-bottom:1rem}.forum-otherposts .post-datafields li:last-child{margin-bottom:0}.forum-otherposts .datafield-name{font-family:var(--font-one)}.forum-otherposts .post-datafield a{font-family:inherit}.post-content.no-links{justify-content:flex-end}.post-content.no-links .is-content{max-width:initial!important}#forum-preview{margin-bottom:2rem}#forum-preview .post-content{justify-content:center}.wiki-body{display:flex;justify-content:space-between}#forum-preview .post-content,.wiki-body{max-width:100%}.wiki-index{align-self:flex-start;margin-right:1.5rem}.wiki-index h3{margin-bottom:1rem}.wiki-index h3::before{display:none}.wiki-index ul{padding-left:2rem}.wiki-index ul li:before{left:-2rem!important;width:2rem!important;text-align:left!important}.wiki-index .is-hidden-mobile{max-height:calc(100vh - 5rem);overflow:auto}.wiki-index .router-link-exact-active.router-link-active{cursor:default}.wiki-index li ul{margin-top:1rem}.wiki-index a{border:none!important;font-family:var(--font-one)!important}.wiki-controls{font-family:var(--font-one);cursor:default}.wiki-index .wiki-controls .wiki-cascade{padding:0;background:0 0;border:none;color:var(--color-contrast);cursor:pointer}.wiki-index .router-link-exact-active.router-link-active,.wiki-index li.is-selected>.wiki-controls>a .text{color:var(--color-two)}.wiki-index li.is-active>.wiki-controls>.wiki-cascade .fa-plus,.wiki-index li:not(.is-active)>.wiki-controls+ul,.wiki-index li:not(.is-active)>.wiki-controls>.wiki-cascade .fa-minus{display:none}.wiki-content{display:flex;flex-flow:column;flex:1 1;max-width:600px}.wiki-nav{margin-top:2.5rem;margin-bottom:1px!important}.input-real{display:none}#mp-info{display:flex;align-items:center;margin-bottom:1.5rem}#mp-info h3,.mp-main h3{margin:0}#mp-info img{width:80px;border:2px solid;margin-left:0;margin-right:1rem}#mp-info h3{font-size:1.15rem}.mp-from a{font-weight:700}.mp-main{border-top:2px solid var(--color-contrast);padding-top:1.5rem}.mp-main>h3{margin-bottom:1.5rem}.mp-main>h3>small{font-size:60%}.post .mp-main>h3>small{display:flex;justify-content:space-between}.field-element{margin-bottom:1rem}.field-element:last-child{margin-bottom:0}.forum-field{display:flex}.forum-field .field-content{flex:1 1 auto}.has-no-label .field-name{display:none}.has-button .field-content{display:flex;align-items:center}.has-button .field-content .button2{width:auto;margin:0 0 0 .5rem}.forum-checkbox{display:flex;justify-content:center}.checkbox-content{display:flex;align-items:center;cursor:pointer}.forum-checkbox .checkbox-real,.forum-checkbox:not(.is-active) i{display:none}.forum-fieldlist:not(.is-horizontal) .forum-checkbox{max-width:450px;justify-content:flex-start;margin:0 auto;width:100%}.is-two-columns-page{display:flex}#bloque-login .field-name{max-width:180px}#frmAgreement .post-content{justify-content:center;max-width:100%}#frmAgreement .post-content .is-content{max-width:initial;padding:0}#frmAgreement .forum-fieldlist.no-style{margin-left:1rem}#frmAgreement .forum-fieldlist .forum-checkbox{margin:0}.field-catcha{margin-top:1.5rem}.field-catcha .g-recaptcha{display:flex;justify-content:center}.rp-list{margin-bottom:.725rem}.rp-list:last-child{margin-bottom:0}.rp-element{display:flex;align-items:center}.rp-icon{order:0;flex-shrink:0;flex-grow:0;display:flex;justify-content:center;align-items:center;width:25px;height:25px;color:var(--color-contrast)!important;margin-right:.725rem}.rp-content{display:flex;align-items:center;flex-grow:1;max-width:calc(100% - 2rem)}.rp-name{display:flex;flex-flow:column;min-width:0;line-height:1.3rem;color:var(--color-two)!important;font-size:1.15rem}.rp-name>*{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%}.rp-name>small{font-size:.925rem;font-family:var(--font-two)}.rp-manager{cursor:default}.rp-manager .rp-content{max-width:100%;justify-content:space-between}.rp-controls{font-family:var(--font-one);color:var(--color-two);text-transform:uppercase;margin-left:1rem;cursor:default}.rp-controls span{color:var(--color-contrast);cursor:pointer}.rela-element{display:flex}.rela-element.rela-manager{cursor:default}.rela-list .rela-element .rela-image{flex:0 0 auto;align-self:flex-start;width:80px;height:80px;margin-right:1rem!important;border:2px solid var(--color-contrast);border-radius:100%;background-size:cover;background-position:center}#forum-relationships .rela-title h4{max-width:370px}.rela-title h4{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:1.15rem}.rela-content{flex:1 1 auto;color:var(--color-two);max-width:calc(100% - 80px - 1rem)}.rela-title{display:flex;justify-content:space-between;align-items:center}.rela-list{margin-bottom:1rem!important}.rela-list:last-child{margin-bottom:0!important}.rela-list:last-child::after{display:none}.small-text{margin-top:.25rem;font-family:var(--font-two);font-size:.925rem;line-height:1.25rem}.rela-text.is-content ol,.rela-text.is-content ul{padding-left:1.5rem}.rela-text.is-content ol li::before,.rela-text.is-content ul li::before{left:-1.5rem;width:1.5rem}.rela-text.is-content ol li,.rela-text.is-content ul li{margin-bottom:.5rem}#forum-multiaccount .field-name{text-transform:capitalize}#forum-multiaccount .rp-controls{top:.55em}#forum-multiaccount .rp-controls span{color:var(--color-one)}#forum-chronology .rp-name{max-width:57vw}ul.no-style{padding:0!important;list-style:none!important}ul.no-style>li::before{content:''!important;position:initial!important}ul.no-style a{border:none!important}body>footer,body>header,body>section{padding-left:1.25rem!important;padding-right:1.25rem!important}@media only screen and (max-width:1023px){html{scroll-behavior:smooth}header.forum-panel{min-height:initial}.wiki-body{flex-flow:column}.wiki-content{max-width:100%!important}.wiki-index{position:inherit!important;width:100%;margin-bottom:2rem;margin-right:0}.is-two-columns-page .is-second{order:0}.is-two-columns-page .is-first{order:1}}@media only screen and (max-width:768px){#forum-modal .modal-element{max-width:95%;width:100%}.forum-field .date-dmy label input{margin-left:.5rem}.rela-image{display:none}.forum-otherposts .post-profile,.post .mp-main>h3{position:initial;width:100%!important;margin-right:0;margin-bottom:1.5rem}.post .mp-main small{font-size:1rem}.post-content,.post-content .is-content{max-width:none}.is-two-columns-list>li{width:100%}}@media only screen and (max-width:487px){h1{font-size:1.7rem}h2{font-size:1.55rem}h3{font-size:1.4rem}h4{font-size:1.25rem}h5{font-size:1.1rem}.forum-field{flex-flow:column}.forum-field .field-name{height:.925rem;line-height:.925rem;max-width:initial!important;margin-right:0!important;margin-bottom:.825rem!important;border-bottom:0!important}#frmAgreement .forum-fieldlist.no-style{margin-left:0}.button1,.button2,input[type=Submit],input[type=reset]{width:100%}}@supports ((-webkit-hyphens:auto) or (hyphens:auto)){.is-content{-webkit-hyphens:auto;hyphens:auto}}
|
|
1
|
+
@keyframes dramatic-show{from{opacity:0}to{opacity:1}}.is-dramatic{animation:dramatic-show 1s}@-ms-viewport{width:device-width}*{box-sizing:border-box!important}h1,h2,h3,h4,h5,h6{font-family:var(--font-one)}h1{font-size:2.1rem}h2{font-size:1.9rem}h3{font-size:1.7rem}h4{font-size:1.5rem}h5{font-size:1.3rem}h6{font-size:1.1rem}h2 small,h3 small,h4 small,h5 small,h6 small{display:block;font-weight:400}a:hover{color:var(--color-contrast)}small{font-size:80%}strong{color:inherit}#navbar-original,.forum-head+.forumseparator-element,.subforum-element .category-element>.forum-head,:not(.category-element)+.forum-separator{display:none}.is-pointer{cursor:pointer!important}.is-default{cursor:default!important}.not-show,.to-process{display:none!important}.main-body{max-width:1200px}.is-full-width{width:100%!important;max-width:100%!important}.is-no-links a{border:none!important}.mt-d{margin-top:2rem}.mb-d{margin-bottom:2rem}.is-two-columns-list{display:flex;flex-flow:wrap;margin:-.5rem}.is-two-columns-list>li{width:50%;padding:.5rem}.columns:not(:last-child){margin-bottom:-.75rem}.is-tweakeable{display:block;width:100%}.is-measurable{white-space:nowrap}.has-anchor{position:relative}.is-selectbox:not(.is-active){display:none!important}.is-clickbox{cursor:pointer!important}.is-clickbox:not(.is-toggle).is-active{cursor:default!important}#forum-notification{position:fixed;right:1rem;bottom:1rem;transition:1s ease-in-out;z-index:999}#forum-notification:not(.notification-show){transform:translateY(400px)}#loading-element{padding:1rem}#loading-content,#loading-element{display:flex;justify-content:center;align-items:center;text-align:center;cursor:default}#loading-content i{font-size:1.25rem;margin-right:.5rem;color:var(--color-contrast)}#loading-content span{font-family:var(--font-one)}#forum-body>.main-body{display:flex;margin:0 auto;padding:3rem 0}#forum-body>.main-body>article{width:100%}#forum-body>.main-body>#right{display:none}aside#left{display:none}#forum-save{display:block}.category-element{margin-bottom:3rem}.category-element:last-child{margin:0!important}#forum-rules{margin-bottom:2rem}#quickreply-section{margin-top:3rem}#forum-realreply{display:none}#forum-reply{margin-bottom:3rem}#forum-reply:last-child{margin-bottom:0}#forum-reply+#privmsg-review #privmsg-see,:not(#forum-reply)+#privmsg-review #privmsg-write{display:none}#usereply-top{display:flex;justify-content:space-between;align-items:center}#usereply-top small{display:block;font-size:50%}.usereply-header{padding:0 .5rem}#usereply-editor{margin-top:1.25rem;height:250px;resize:none}#usereply-buttons ul{display:flex;flex:1 0 auto;justify-content:flex-end}#usereply-buttons ul:first-child{margin-bottom:.5rem}#usereply-buttons ul li{margin-left:.5rem}#usereply-buttons ul li:first-child{margin-left:0}.usereply-button{display:flex;width:2rem;height:2rem;background:0 0;color:var(--color-contrast);border:2px solid;padding:0;justify-content:center;align-items:center;cursor:pointer}#usereply-comand{display:flex;justify-content:center}#usereply-comand,.modal-buttons{margin:1rem -.5rem -.5rem -.5rem;flex-flow:wrap row}.button1,.button2,input[type=Submit],input[type=reset]{margin:.5rem}.usereply-option{font-family:var(--font-one);cursor:pointer;font-size:.85rem;margin-bottom:.4rem;white-space:nowrap}.usereply-option:last-child{margin:0}#usereply-buttons .dropdown-menu::after,#usereply-buttons .dropdown-menu::before{right:7px}#usereply-dice{margin-top:1.5rem}#usereply-dice h3{margin-bottom:1.25rem}#usereply-dice ul li{display:flex;counter-increment:special-list-counter;margin-bottom:1rem}#usereply-dice ul li:last-child{margin-bottom:0}#usereply-dice ul li::before{content:'#' counter(special-list-counter);display:flex;justify-content:center;align-items:center;flex:0 0 auto;width:2rem;margin-right:.5rem;color:var(--color-contrast);font-family:var(--font-one)}#usereply-dice ul li .dice-more{width:2rem;flex:0 0 auto;border:0;padding:0;background:0 0;color:var(--color-contrast);font-size:1rem;cursor:pointer}#usereply-dice ul li .select-container{flex:1 0 auto;width:inherit}#usereply-dice ul li input{flex:1 1 auto;width:inherit;max-width:30%}#usereply-dice ul li>*{margin-right:.5rem}#usereply-dice ul li>:last-child{margin-right:0}#usereply-extra{margin-bottom:1.5rem}#emoji-list{display:flex;flex-flow:wrap;overflow:auto;width:220px;max-height:205px;padding:0}#emoji-list iframe{width:94%;margin:3%}.forum-otherposts{margin-top:2rem}.upper-controls+.forum-otherposts{margin-top:0}.forum-otherposts .post-profile{width:224px}.forum-otherposts .post-profile>*{display:block}.forum-otherposts .post-datafields li{margin-bottom:1rem}.forum-otherposts .post-datafields li:last-child{margin-bottom:0}.forum-otherposts .datafield-name{font-family:var(--font-one)}.forum-otherposts .post-datafield a{font-family:inherit}.post-content.no-links{justify-content:flex-end}.post-content.no-links .is-content{max-width:initial!important}#forum-preview{margin-bottom:2rem}#forum-preview .post-content{justify-content:center}.wiki-body{display:flex;justify-content:space-between}#forum-preview .post-content,.wiki-body{max-width:100%}.wiki-index{align-self:flex-start;margin-right:1.5rem}.wiki-index h3{margin-bottom:1rem}.wiki-index h3::before{display:none}.wiki-index ul{padding-left:2rem}.wiki-index ul li:before{left:-2rem!important;width:2rem!important;text-align:left!important}.wiki-index .is-hidden-mobile{max-height:calc(100vh - 5rem);overflow:auto}.wiki-index .router-link-exact-active.router-link-active{cursor:default}.wiki-index li ul{margin-top:.5rem}.wiki-index a{border:none!important;font-family:var(--font-one)!important}.wiki-controls{font-family:var(--font-one);cursor:default}.wiki-index .wiki-controls .wiki-cascade{padding:0;background:0 0;border:none;color:var(--color-contrast);cursor:pointer}.wiki-index .router-link-exact-active.router-link-active,.wiki-index li.is-selected>.wiki-controls>a .text{color:var(--color-two)}.wiki-index li.is-active>.wiki-controls>.wiki-cascade .fa-plus,.wiki-index li:not(.is-active)>.wiki-controls+ul,.wiki-index li:not(.is-active)>.wiki-controls>.wiki-cascade .fa-minus{display:none}.wiki-content{display:flex;flex-flow:column;flex:1 1;max-width:600px}.wiki-nav{margin-top:2.5rem;margin-bottom:1px!important}.input-real{display:none}#mp-info{display:flex;align-items:center;margin-bottom:1.5rem}#mp-info h3,.mp-main h3{margin:0}#mp-info img{width:80px;border:2px solid;margin-left:0;margin-right:1rem}#mp-info h3{font-size:1.15rem}.mp-from a{font-weight:700}.mp-main{border-top:2px solid var(--color-contrast);padding-top:1.5rem}.mp-main>h3{margin-bottom:1.5rem}.mp-main>h3>small{font-size:60%}.post .mp-main>h3>small{display:flex;justify-content:space-between}.field-element{margin-bottom:1rem}.field-element:last-child{margin-bottom:0}.forum-field{display:flex}.forum-field .field-content{flex:1 1 auto}.has-no-label .field-name{display:none}.has-button .field-content{display:flex;align-items:center}.has-button .field-content .button2{width:auto;margin:0 0 0 .5rem}.forum-checkbox{display:flex;justify-content:center}.checkbox-content{display:flex;align-items:center;cursor:pointer}.forum-checkbox .checkbox-real,.forum-checkbox:not(.is-active) i{display:none}.forum-fieldlist:not(.is-horizontal) .forum-checkbox{max-width:450px;justify-content:flex-start;margin:0 auto;width:100%}.is-two-columns-page{display:flex}#bloque-login .field-name{max-width:180px}#frmAgreement .post-content{justify-content:center;max-width:100%}#frmAgreement .post-content .is-content{max-width:initial;padding:0}#frmAgreement .forum-fieldlist.no-style{margin-left:1rem}#frmAgreement .forum-fieldlist .forum-checkbox{margin:0}.field-catcha{margin-top:1.5rem}.field-catcha .g-recaptcha{display:flex;justify-content:center}.rp-list{margin-bottom:.725rem}.rp-list:last-child{margin-bottom:0}.rp-element{display:flex;align-items:center}.rp-icon{order:0;flex-shrink:0;flex-grow:0;display:flex;justify-content:center;align-items:center;width:25px;height:25px;color:var(--color-contrast)!important;margin-right:.725rem}.rp-content{display:flex;align-items:center;flex-grow:1;max-width:calc(100% - 2rem)}.rp-name{display:flex;flex-flow:column;min-width:0;line-height:1.3rem;color:var(--color-two)!important;font-size:1.15rem}.rp-name>*{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%}.rp-name>small{font-size:.925rem;font-family:var(--font-two)}.rp-manager{cursor:default}.rp-manager .rp-content{max-width:100%;justify-content:space-between}.rp-controls{font-family:var(--font-one);color:var(--color-two);text-transform:uppercase;margin-left:1rem;cursor:default}.rp-controls span{color:var(--color-contrast);cursor:pointer}.rela-element{display:flex}.rela-element.rela-manager{cursor:default}.rela-list .rela-element .rela-image{flex:0 0 auto;align-self:flex-start;width:80px;height:80px;margin-right:1rem!important;border:2px solid var(--color-contrast);border-radius:100%;background-size:cover;background-position:center}#forum-relationships .rela-title h4{max-width:370px}.rela-title h4{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:1.15rem}.rela-content{flex:1 1 auto;color:var(--color-two);max-width:calc(100% - 80px - 1rem)}.rela-title{display:flex;justify-content:space-between;align-items:center}.rela-list{margin-bottom:1rem!important}.rela-list:last-child{margin-bottom:0!important}.rela-list:last-child::after{display:none}.small-text{margin-top:.25rem;font-family:var(--font-two);font-size:.925rem;line-height:1.25rem}.rela-text.is-content ol,.rela-text.is-content ul{padding-left:1.5rem}.rela-text.is-content ol li::before,.rela-text.is-content ul li::before{left:-1.5rem;width:1.5rem}.rela-text.is-content ol li,.rela-text.is-content ul li{margin-bottom:.5rem}#forum-multiaccount .field-name{text-transform:capitalize}#forum-multiaccount .rp-controls{top:.55em}#forum-multiaccount .rp-controls span{color:var(--color-one)}#forum-chronology .rp-name{max-width:57vw}ul.no-style{padding:0!important;list-style:none!important}ul.no-style>li::before{content:''!important;position:initial!important}ul.no-style a{border:none!important}body>footer,body>header,body>section{padding-left:1.25rem!important;padding-right:1.25rem!important}@media only screen and (max-width:1023px){html{scroll-behavior:smooth}header.forum-panel{min-height:initial}.wiki-body{flex-flow:column}.wiki-content{max-width:100%!important}.wiki-index{position:inherit!important;width:100%;margin-bottom:2rem;margin-right:0}.is-two-columns-page .is-second{order:0}.is-two-columns-page .is-first{order:1}}@media only screen and (max-width:768px){#forum-modal .modal-element{max-width:95%;width:100%}.forum-field .date-dmy label input{margin-left:.5rem}.rela-image{display:none}.forum-otherposts .post-profile,.post .mp-main>h3{position:initial;width:100%!important;margin-right:0;margin-bottom:1.5rem}.post .mp-main small{font-size:1rem}.post-content,.post-content .is-content{max-width:none}.is-two-columns-list>li{width:100%}}@media only screen and (max-width:487px){h1{font-size:1.7rem}h2{font-size:1.55rem}h3{font-size:1.4rem}h4{font-size:1.25rem}h5{font-size:1.1rem}.forum-field{flex-flow:column}.forum-field .field-name{height:.925rem;line-height:.925rem;max-width:initial!important;margin-right:0!important;margin-bottom:.825rem!important;border-bottom:0!important}#frmAgreement .forum-fieldlist.no-style{margin-left:0}.button1,.button2,input[type=Submit],input[type=reset]{width:100%}}@supports ((-webkit-hyphens:auto) or (hyphens:auto)){.is-content{-webkit-hyphens:auto;hyphens:auto}}
|