- aggiornato l'Editor HTML

This commit is contained in:
Surya Paolo
2024-09-13 19:42:55 +02:00
parent 791e18f167
commit 0872afbb39
55 changed files with 1451 additions and 1137 deletions

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker_1.0.39.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "abitaregliiblei",
"version": "1.0.58",
"version": "1.0.60",
"description": "Abitare Gli Iblei",
"productName": "AbitareGliIblei",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "fioredellavita",
"version": "1.0.58",
"version": "1.0.60",
"description": "Fiore Della Vita",
"productName": "Fiore Della Vita",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "gruppomacro",
"version": "1.0.58",
"version": "1.0.60",
"description": "GruppoMacro",
"productName": "Gruppo Macro",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.0.58"
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.0.58",
"version": "1.0.60",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Paolo Arena",

View File

@@ -20,7 +20,8 @@ if [[ $risposta == "Y" || $risposta == "y" ]]; then
echo "Sincronizzazione in remoto $SERVERDIR_WEBSITE ..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
#rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
echo "Finito $SERVERDIR_WEBSITE "

View File

@@ -20,7 +20,8 @@ if [[ $risposta == "Y" || $risposta == "y" ]]; then
echo "Sincronizzazione in remoto $SERVERDIR_WEBSITE ..."
sshpass -p $SERVERPW_WEBSITE rsync -e 'ssh -p 8855' -a --exclude 'upload' dist/pwa/ suryapaolo@servereng:/var/www/$SERVERDIR_WEBSITE/
rsync -e 'ssh -p 8855' -av --delete dist/pwa/js/ suryapaolo@servereng:/var/www/$SERVERDIR_WEBSITE/js
#rsync -e 'ssh -p 8855' -av --delete dist/pwa/js/ suryapaolo@servereng:/var/www/$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8855' -a dist/pwa/js/ suryapaolo@servereng:/var/www/$SERVERDIR_WEBSITE/js
echo "Finito $SERVERDIR_WEBSITE "
fi

View File

@@ -19,7 +19,8 @@ npm run buildpwa
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
#rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
cp .env.prod.bak .env.production

View File

@@ -19,7 +19,7 @@ npm run buildpwa
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
cp .env.prod.bak .env.production

View File

@@ -19,7 +19,7 @@ npm run buildpwa
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
cp .env.prod.bak .env.production

View File

@@ -1,6 +1,6 @@
{
"name": "abitaregliiblei",
"version": "1.0.58",
"version": "1.0.60",
"description": "Abitare Gli Iblei",
"productName": "AbitareGliIblei",
"author": "Paolo Arena",

View File

@@ -34,7 +34,7 @@ self.addEventListener('activate', (event) => {
});
const VersioneApp = "1.0.58";
const VersioneApp = "1.0.60";
console.log(' [ VER-' + VersioneApp + ' ] _---------________------ PAO: this is my custom service worker');

View File

@@ -1788,18 +1788,20 @@ export const shared_consts = {
{
value: 20,
label: 'Testo',
icon: 'fas fa-file-alt',
},
{
value: 35,
label: 'Immagine',
icon: '',
},
{
value: 7,
label: 'Scheda (1 Immagine e Testo)',
label: 'Scheda (IMG + Testo)',
},
{
value: 9,
label: 'Poster (1 Immagine + Testo)',
label: 'Poster (IMG + Testo)',
},
{
value: 195,

View File

@@ -25,7 +25,7 @@
/>
</q-avatar>
</div>
<div class="col-fixed" style="width: 200px;">
<div class="col-fixed" style="width: 200px">
<q-select
dense
v-model="tablesel"
@@ -55,9 +55,12 @@
</template>
</q-select>
</div>
<div class="col-auto"> <!-- to the right -->
<div class="col-auto">
<!-- to the right -->
<q-btn
v-if="tools.getLabelAddrec(ind)"
v-if="
tools.getLabelAddrec(ind) && tools.checkIfICanAddNewRecord()
"
rounded
outline
color="primary"

View File

@@ -15,7 +15,6 @@
style="text-align: center"
>
<q-btn
v-if="mytable && visButtRow()"
rounded
dense
color="primary"
@@ -347,9 +346,7 @@
</div>
</div>
<div
v-if="showMapAtLeast1"
v-show="showMap">
<div v-if="showMapAtLeast1" v-show="showMap">
<CMapByTable
ref="myMapComp"
mytable=""
@@ -1152,16 +1149,16 @@
autofocus
type="search"
:hint="
(pagination.rowsNumber === 1 && prop_search)
pagination.rowsNumber === 1 && prop_search
? `${pagination.rowsNumber} ` +
t('grid.found') +
' ' +
getLabelAreaMap(false)
: ((pagination.rowsNumber > 1 && prop_search)
: pagination.rowsNumber > 1 && prop_search
? `${pagination.rowsNumber} ${labelElemFind}` +
' ' +
getLabelAreaMap(false)
: '')
: ''
"
debounce="500"
:error-message="noresultLabel"

View File

@@ -1424,6 +1424,7 @@ export default defineComponent({
return pagination.value.rowsNumber
}
function createNewRecordDialog() {
const mydata: any = {

View File

@@ -162,7 +162,9 @@
{{
tools.isEntrataByRecMov(row)
? t('movement.movin')
: (tools.isUscitaByRecMov(row) ? t('movement.movout') : '')
: tools.isUscitaByRecMov(row)
? t('movement.movout')
: ''
}}
</q-toolbar-title>
</q-toolbar>

View File

@@ -1,4 +1,3 @@
.testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
//background: linear-gradient(180deg, #3144f0, transparent);
@@ -23,8 +22,7 @@ h4 {
visibility: hidden;
}
.landing {
}
.landing {}
.landing_background {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
@@ -144,7 +142,8 @@ h4 {
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.landing__features h4, .landing__features h6 {
.landing__features h4,
.landing__features h6 {
margin: 1rem 0
}
@@ -252,7 +251,8 @@ body.mobile .landing:before {
text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
}
.text-h1, h1 {
.text-h1,
h1 {
font-size: 3rem;
font-weight: bold;
line-height: 3rem;
@@ -341,14 +341,18 @@ body.mobile .landing:before {
.landing__hero {
text-align: center
}
.landing__header {
height: 7vh
}
.clgutter {
margin-top: 0;
padding: 0;
}
.landing__hero .text-h1, h1 {
.landing__hero .text-h1,
h1 {
font-size: 2rem;
line-height: 2.05rem;
margin-bottom: 1.25rem
@@ -376,7 +380,8 @@ body.mobile .landing:before {
}
.landing__features h4, .landing__features h6 {
.landing__features h4,
.landing__features h6 {
margin: 1.25rem 0
}
@@ -389,12 +394,15 @@ body.mobile .landing:before {
text-align: center;
margin-top: 1.25rem;
}
.landing__hero-content {
padding-bottom: 11.25rem;
}
.landing__hero2-content {
padding-bottom: 7.25rem;
}
.landing__hero-btns {
-webkit-box-pack: center;
-ms-flex-pack: center;
@@ -408,6 +416,7 @@ body.mobile .landing:before {
.text-subtitle1 {
font-size: 1.25rem;
}
.text-vers {
font-size: 0.6rem;
}
@@ -480,3 +489,12 @@ body.mobile .landing:before {
justify-content: space-between;
background-color: green;
}
.uniform-button {
height: 40px;
/* Altezza fissa per tutti i bottoni */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

View File

@@ -1,5 +1,5 @@
import {
defineComponent, onMounted, PropType, ref, toRef, watch,
defineComponent, onMounted, PropType, computed, ref, toRef, watch,
} from 'vue'
import { IElemText, IImgGallery, ILabelValue, IMyCard, IMyElem, IMyPage, IOperators } from '@src/model'
@@ -39,7 +39,7 @@ export default defineComponent({
CCardCarousel, COpenStreetMap, CMyPage, CMyPageIntro, CMyEditor, CMyFieldRec,
CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation
},
emits: ['saveElem', 'selElemClick'],
emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem'],
props: {
myelem: {
type: Object as PropType<IMyElem>,
@@ -90,6 +90,7 @@ export default defineComponent({
const myel = toRef(props, 'myelem')
const newtype = ref(<any>'')
const visuadd = ref(false)
const direzadd = ref(1)
watch(() => myel.value.order, (value, oldval) => {
mounted()
@@ -108,29 +109,69 @@ export default defineComponent({
// OK
disableSave.value = true
emit('saveElem', myelem)
if (exit)
elemChanged.value = false
}
})
}
function addNewElem(order?: number) {
function getNewOrderByThisElem() {
let myelem = props.myelem
let neword = 0
if (myelem) {
neword = myelem.order!
const recfound = globalStore.getMyElemNextThisElemId(props.path, myelem._id!)
if (recfound) {
neword = Math.round((recfound.order! + myelem.order!) / 2)
}
}
return neword
}
async function addNewElem(elemsel: any, direz: number) {
visuadd.value = false
let newrec = globalStore.prepareAddNewElem(order, $q, t, props.myelem, newtype.value)
let neword = 0
emit('selElemClick', newrec)
let recfound = null
if (direz === -1) { // Sopra
// ottieni l'elemento precedente, mantenendo l'ordinamento
recfound = globalStore.getMyElemPrecThisElemId(props.path, elemsel._id)
} else if (direz === 1) { // Sotto
// ottieni l'elemento precedente, mantenendo l'ordinamento
recfound = globalStore.getMyElemNextThisElemId(props.path, elemsel._id)
}
function dupElem(order?: number) {
if (recfound) {
// get the middle of the order number between thie 2 elements
neword = Math.round((recfound.order + elemsel.order) / 2)
}
const newrec = props.myelem
let newrec = await globalStore.prepareAddNewElem(neword, $q, t, props.myelem, newtype.value)
emit('selElemClick', newrec)
// emit('updateAll', newrec)
}
async function dupElem(order?: number) {
const newrec: IMyElem = { ...props.myelem }
newrec._id = undefined
newrec.order = order ? order : newrec.order! + 10
newrec.order = getNewOrderByThisElem()
if (newrec.type === shared_consts.ELEMTYPE.HTML) {
newrec.containerHtml = 'Copia di ' + newrec.containerHtml
}
const mynewelem = await globalStore.addNewElem($q, t, newrec)
emit('selElemClick', mynewelem)
globalStore.addNewElem($q, t, newrec)
}
function delElem() {
@@ -151,6 +192,7 @@ export default defineComponent({
if (ris) {
// OK
disableSave.value = true
emit('deleteElem', props.myelem)
}
})
})
@@ -292,6 +334,73 @@ export default defineComponent({
modifElem()
}
function toggleSize() {
emit('toggleSize', null)
}
const orderOptions = computed(() => {
const options = []
for (let i = 0; i <= 100; i += 1) {
options.push({ label: i.toString(), value: i });
}
for (let i = 100; i <= 1000; i += 10) {
options.push({ label: i.toString(), value: i });
}
return options;
});
function addOrder(rec: any) {
neworder.value = rec
}
async function moveElem(direz: any) {
let myelem = props.myelem
const elemprec = globalStore.getMyElemPrecThisElemId(props.path, myelem._id)
const elemnext = globalStore.getMyElemNextThisElemId(props.path, myelem._id!)
let neworder = 0
let oldorder = myelem.order!
if (direz === -1) {
// UP
neworder = elemprec.order!
elemprec.order = oldorder
if (oldorder === elemprec.order!) {
const elemprec2 = globalStore.getMyElemPrecThisElemId(props.path, elemprec._id!)
neworder = (elemprec2.order! + elemprec.order) / 2
elemprec.order = Math.round((oldorder + neworder) / 2)
}
await globalStore.saveMyElem($q, t, elemprec)
emit('saveElem', elemprec)
} else if (direz === 1) {
// DOWN
neworder = elemnext.order!
elemnext.order = oldorder
if (oldorder === elemnext.order!) {
const elemnext2 = globalStore.getMyElemNextThisElemId(props.path, elemnext._id!)
neworder = (elemnext2.order! + elemnext.order) / 2
elemnext.order = Math.round((oldorder + neworder) / 2)
}
await globalStore.saveMyElem($q, t, elemnext)
emit('saveElem', elemnext)
}
myelem.order = neworder
await globalStore.saveMyElem($q, t, myelem)
emit('saveElem', myelem)
}
onMounted(mounted)
return {
@@ -334,6 +443,11 @@ export default defineComponent({
Products,
generateSizeOptions,
updateSizeWidth,
direzadd,
toggleSize,
orderOptions,
addOrder,
moveElem,
}
},

View File

@@ -8,54 +8,66 @@
"
>
<div v-if="!!myel.type">
<div class="column">
<div class="row justify-evenly q-gutter-sm">
<q-btn
class="q-ma-sm"
dense
@click="toggleSize"
label="Espandi"
icon="chevron_left"
color="primary"
/>
<q-btn
v-if="enableAdd"
class="q-ma-sm"
label="Aggiungi"
icon="fas fa-plus"
color="primary"
@click="visuadd = true"
icon-right="arrow_upward"
color="positive"
dense
@click="
direzadd = -1;
visuadd = true;
"
>
</q-btn>
<q-btn
v-if="enableAdd"
class="q-ma-sm"
label="Aggiungi"
icon-right="arrow_downward"
color="positive"
dense
@click="
direzadd = 1;
visuadd = true;
"
>
</q-btn>
</div>
<q-bar v-if="enableEdit" dense class="q-px-sm">
<q-toggle v-model="myel.active" color="positive" icon="fas fa-eye">
</q-toggle>
<q-bar v-if="enableEdit" class="q-pa-md bg-light-blue text-white">
<!--<q-toggle v-if="tools.isManager()"
v-model="enableAdd"
icon="fas fa-plus"
</q-toggle>
>-->
&nbsp;
<q-input
style="max-width: 60px"
hide-bottom-space
borderless
dense
@update:model-value="modifElem"
v-model="neworder"
v-on:keyup.enter="saveElem(false)"
type="number"
>
</q-input>
<q-space />
<q-btn
icon="fas fa-trash-alt"
color="negative"
label="Elimina"
dense
flat
size="sm"
@click="delElem"
>
</q-btn>
<q-btn
icon="far fa-copy"
color="primary"
label="Duplica"
dense
flat
size="sm"
@click="dupElem(myel.order + 10)"
@click="dupElem(myel.order + 10 * direzadd)"
>
</q-btn>
</q-bar>
@@ -83,6 +95,69 @@
</q-btn>-->
</div>
</div>
<q-list padding bordered class="rounded-borders">
<q-expansion-item
dense
dense-toggle
expand-separator
label="Visualizzazione"
icon="fas fa-eye"
>
<div class="row q-gutter-sm q-pa-sm">
<q-toggle
v-model="myel.active"
color="positive"
icon="fas fa-eye"
label="Attiva"
>
</q-toggle>
<q-select
v-model="neworder"
:options="orderOptions"
label="Posizionamento"
options-dense
dense
emit-value
map-options
style="width: 100px"
@update:model-value="modifElem"
use-input
hide-selected
fill-input
text-color="white"
@new-value="addOrder"
>
</q-select>
</div>
</q-expansion-item>
<q-btn
v-if="enableAdd"
class="q-ma-sm"
label="Sposta in SU"
icon-right="arrow_upward"
color="positive"
dense
@click="moveElem(-1)"
>
</q-btn>
<q-btn
v-if="enableAdd"
class="q-ma-sm"
label="Sposta in GIU"
icon-right="arrow_downward"
color="positive"
dense
@click="moveElem(1)"
>
</q-btn>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Dimensioni"
icon="fas fa-expand-alt"
>
<div class="row">
<q-select
label="Lunghezza:"
@@ -109,7 +184,15 @@
>
</q-input>
</div>
</q-expansion-item>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Allineamento"
icon="fas fa-align-center"
>
<div class="row">
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
@@ -183,12 +266,21 @@
>
</q-input>
</div>
</q-expansion-item>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Animazione"
icon="fas fa-play-circle"
>
<CSelectAnimation
v-if="enableEdit && showAnimation"
v-model="myel.anim"
@update:model-value="modifElem"
>
</CSelectAnimation>
</q-expansion-item>
<div v-if="myel.type === shared_consts.ELEMTYPE.TEXT">
<div v-if="enableEdit">
<q-input
@@ -205,6 +297,13 @@
<div
v-else-if="myel.type === shared_consts.ELEMTYPE.CARD"
:class="myel.span ? '' : ''"
>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Animazione"
icon="fas fa-expand-alt"
>
<CSelectAnimation
v-if="enableEdit && showAnimation"
@@ -213,6 +312,7 @@
label="Animazione Immagini"
>
</CSelectAnimation>
</q-expansion-item>
<div class="row">
<q-input
dense
@@ -266,7 +366,6 @@
icon="fas fa-trash-alt"
color="negative"
dense
flat
size="sm"
@click="delRecCard(rec._id, myel)"
>
@@ -556,7 +655,6 @@
icon="fas fa-trash-alt"
color="negative"
dense
flat
size="sm"
@click="delRecCard(rec._id, myel)"
>
@@ -613,15 +711,6 @@
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.HTML">
<div v-if="enableEdit">
<q-input
dense
label="Classe:"
@update:model-value="modifElem"
v-model="myel.class"
filled
v-on:keyup.enter="saveElem"
>
</q-input>
<CMyEditor
v-model:value="myel.containerHtml"
title=""
@@ -684,7 +773,9 @@
>
</CMyFieldRec>
<div class="">
<div class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 col-sticky">
<!--<div
class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 col-sticky"
>
<q-select
label="Lunghezza:"
v-model="myel.widthimg"
@@ -708,7 +799,8 @@
v-on:keyup.enter="saveElem"
>
</q-input>
</div>
</div>-->
</div>
</div>
</div>
@@ -903,7 +995,9 @@
</q-toggle>
</div>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CAROUSEL_HOME"></div>
<div
v-else-if="myel.type === shared_consts.ELEMTYPE.CAROUSEL_HOME"
></div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.BUTTON">
<q-input
dense
@@ -1071,90 +1165,119 @@
</q-toggle>
</div>
</div>
</q-list>
</div>
<br /><br /><br />
</div>
<div>
<q-dialog
v-model="visuadd"
style="
width: 600px;
max-width: 100%;
position: fixed;
left: 0;
top: 0;
height: 100%;
"
transition-show="slide-up"
transition-hide="slide-down"
:maximized="$q.screen.lt.sm"
>
<q-card class="dialog_card">
<q-card class="">
<q-bar dense class="bg-primary text-white">
Aggiungi Elemento:
<q-space />
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar>
<q-card-section class="inset-shadow row q-ma-sm q-pa-sm">
<q-tabs v-model="tabadd" inline-label class="bg-gray shadow-2">
<q-tab name="tools" label="Strumenti" />
<q-tab v-if="tools.isAdmin()" name="others" label="Altri" />
<q-tab v-if="tools.isAdmin()" name="others2" label="Altri 2" />
</q-tabs>
<q-tab-panels v-model="tabadd" animated class="row justify-center">
<q-tab-panel name="tools">
<div class="q-pa-md row justify-center">
<div style="width: 100%; max-width: 600px">
<q-list padding bordered class="rounded-borders">
<q-expansion-item
label="Principali"
icon="fas fa-eye"
dense
dense-toggle
expand-separator
default-opened
>
<div class="row q-pa-sm">
<div
v-for="(rec, index) in shared_consts.TypesElem"
:key="index"
class="q-pa-sm"
class="col-6 q-pa-xs"
>
<q-btn
v-if="enableAdd"
:label="rec.label"
icon="fas fa-plus"
color="primary"
class="full-width uniform-button q-px-sm"
@click="
newtype = rec.value;
addNewElem(myel.order - 10);
addNewElem(myel, direzadd);
"
>
</q-btn>
</div>
</q-tab-panel>
<q-tab-panel name="others">
</div>
</q-expansion-item>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Gestione"
icon="fas fa-cog"
>
<div class="row q-pa-sm">
<div
v-for="(rec, index) in shared_consts.TypesElemAdmin"
:key="index"
class="q-pa-sm"
class="col-6 q-pa-xs"
>
<q-btn
v-if="enableAdd"
:label="rec.label"
icon="fas fa-plus"
color="primary"
class="full-width uniform-button q-px-sm"
@click="
newtype = rec.value;
addNewElem(myel.order - 10);
addNewElem(myel, direzadd);
"
>
</q-btn>
</div>
</q-tab-panel>
<q-tab-panel name="others2">
</div>
</q-expansion-item>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Avanzati"
icon="fas fa-star"
>
<div class="row q-pa-sm">
<div
v-for="(rec, index) in shared_consts.TypesElemAdminTools"
:key="index"
class="q-pa-sm"
class="col-6 q-pa-sm"
>
<q-btn
v-if="enableAdd"
:label="rec.label"
icon="fas fa-plus"
color="primary"
class="full-width uniform-button q-px-sm"
@click="
newtype = rec.value;
addNewElem(myel.order - 10);
addNewElem(myel, direzadd);
"
>
</q-btn>
</div>
</q-tab-panel>
</q-tab-panels>
</q-card-section>
</div>
</q-expansion-item>
</q-list>
</div>
</div>
</q-card>
</q-dialog>
</div>

View File

@@ -169,30 +169,6 @@ export default defineComponent({
globalStore.addNewElem($q, t, newrec)
}
function delElem() {
$q.dialog({
message: 'Eliminare ' + props.myelem.container + ' ?',
html: true,
ok: {
label: 'Elimina',
push: true,
},
title: '',
cancel: true,
persistent: false,
}).onOk(async () => {
// Save Elem record
await globalStore.delMyElem($q, t, props.myelem).then((ris) => {
if (ris) {
// OK
disableSave.value = true
}
})
})
}
function modifElem() {
disableSave.value = false
}
@@ -278,7 +254,6 @@ export default defineComponent({
myel,
disableSave,
modifElem,
delElem,
addNewElem,
newtype,
neworder,

View File

@@ -84,6 +84,8 @@ export default defineComponent({
const selElem = ref(globalStore.selElem)
const site = ref(globalStore.site)
const onloading = ref(false)
const myelems = computed(() => {
if (mypathin.value)
return globalStore.getMyElems(mypathin.value)
@@ -91,11 +93,11 @@ export default defineComponent({
return null
})
function load() {
async function load() {
// console.log('load', mypathin.value)
if (mypathin.value !== '') {
globalStore.loadPage('/' + mypathin.value, 'cmypageelem').then(ris => {
await globalStore.loadPage('/' + mypathin.value, 'cmypageelem').then(ris => {
rec.value = ris
// console.log('LoadPage', ris)
})
@@ -124,15 +126,8 @@ export default defineComponent({
}
})
function selElemClick(myelem: IMyElem) {
// console.log('mypageelem selElemClick', myelem)
selElem.value = {}
selElem.value = myelem
visuEditor.value = !!myelem
}
function mounted() {
load()
async function mounted() {
await load()
}
function saveElem(myelem: IMyElem) {
@@ -147,6 +142,20 @@ export default defineComponent({
mywidthEditor.value = mywidthEditor.value === 400 ? 1200 : 400
}
function deleteElem() {
selElem.value = {}
visuEditor.value = false
}
function selElemClick(myelem: IMyElem) {
// console.log('mypageelem selElemClick', myelem)
selElem.value = {}
selElem.value = myelem
visuEditor.value = !!myelem
}
onMounted(mounted)
return {
@@ -164,6 +173,8 @@ export default defineComponent({
changeVisuDrawer,
mywidthEditor,
toggleSize,
onloading,
deleteElem,
}
},

View File

@@ -1,6 +1,6 @@
<template>
<div>
<div v-if="mypathin && !!rec">
<div v-if="mypathin && !!rec && !onloading">
<q-toggle
v-if="tools.isManager()"
v-model="editOn"
@@ -37,13 +37,13 @@
></q-btn>
</q-bar>
<q-btn class="q-ma-sm" @click="toggleSize" label="<" color="primary" />
<CMyEditElem
:myelem="selElem"
:editOn="true"
:path="rec.path"
@selElemClick="selElemClick"
@deleteElem="deleteElem"
@toggleSize="toggleSize"
>
</CMyEditElem>
</q-drawer>
@@ -80,8 +80,9 @@
></q-video>
<div v-if="!!rec.content4" v-html="rec.content4"></div>
<div v-for="(myelem, ind) in myelems" :key="ind">
<div v-for="myelem in myelems" :key="myelem._id">
<div>
<transition :duration="1000" appear>
<CMyElem
v-if="(myelem.active || editOn) && !!rec.path"
:myelem="myelem"
@@ -92,11 +93,13 @@
@selElemClick="selElemClick"
>
</CMyElem>
</transition>
</div>
<div v-if="myelem.type === shared_consts.ELEMTYPE.PAGE">
<CMyPageElem2 :mypath="myelem.container">&nbsp;</CMyPageElem2>
</div>
</div>
<div v-if="myelems.length === 0">
<CMyElem
v-if="editOn && !!rec.path"
@@ -128,6 +131,9 @@
<div v-if="!nofooter"></div>
</div>
</div>
<q-inner-loading id="spinner" :showing="onloading">
<q-spinner-tail color="primary" size="4em"> </q-spinner-tail>
</q-inner-loading>
</div>
</template>

View File

@@ -106,7 +106,7 @@ export default defineComponent({
})
function selElemClick(myelem: IMyElem) {
console.log('mypageelem selElemClick', myelem)
// console.log('mypageelem selElemClick', myelem)
selElem.value = {}
selElem.value = myelem
visuEditor.value = !!myelem

View File

@@ -15,10 +15,12 @@
<q-btn
flat
round
color="white"
icon="close"
@click="visuEditor = false; selElem = {};"
@click="
visuEditor = false;
selElem = {};
"
></q-btn>
</q-bar>
<CMyEditElem :myelem="selElem" :editOn="editOn" :path="rec.path">
@@ -57,7 +59,7 @@
></q-video>
<div v-if="!!rec.content4" v-html="rec.content4"></div>
<div v-for="(myelem, ind) in myelems" :key="ind">
<div v-for="myelem in myelems" :key="myelem._id">
<CMyElem
v-if="myelem.active || editOn"
:myelem="myelem"

View File

@@ -21,8 +21,8 @@
:rules="[
(val) => !!val || $t('reg.err.required'),
(val) =>
val.length >= 5 ||
$t('reg.err.atleast') + ' 5 ' + $t('reg.err.char'),
val.length >= 4 ||
$t('reg.err.atleast') + ' 4 ' + $t('reg.err.char'),
]"
>
<template v-slot:prepend>

View File

@@ -165,7 +165,7 @@ export default defineComponent({
},
username: {
required,
minLength: minLength(3),
minLength: minLength(4),
complexityUser,
registereduser,
},

View File

@@ -1,9 +1,7 @@
<template>
<div>
<div
v-if="
tools.isLogged() && tools.getUsername() && !collettivo
"
v-if="tools.isLogged() && tools.getUsername() && !collettivo"
class="text-center"
>
<q-banner rounded class="bg-green text-white" style="text-align: center">
@@ -13,7 +11,6 @@
</span>
</q-banner>
<div class="row q-ma-sm q-pa-sm justify-center">
<q-btn
class="q-ma-sm"
@@ -81,9 +78,9 @@
<div v-if="signup.terms">
<q-input
v-if="
(showaportador &&
signup.aportador_solidario !== tools.APORTADOR_NONE)
&& v$.aportador_solidario.$error
showaportador &&
signup.aportador_solidario !== tools.APORTADOR_NONE &&
v$.aportador_solidario.$error
"
ref="inputAportador"
bg-color="lightblue"
@@ -158,7 +155,13 @@
tools.errorMsg('username', v$.username) ||
(isalreadyReg ? 'L\'Username è gia stato registrato!' : '')
"
:label="tools.getConfSiteOptionEnabled(shared_consts.ConfSite.askUSernameTelegramToTheReg) ? $t('reg.username_telegram') : $t('reg.username_reg')"
:label="
tools.getConfSiteOptionEnabled(
shared_consts.ConfSite.askUSernameTelegramToTheReg
)
? $t('reg.username_telegram')
: $t('reg.username_reg')
"
>
<template v-slot:prepend>
<q-icon name="person" />
@@ -199,14 +202,21 @@
debounce="1000"
@keyup.enter="$refs.inputSurname.focus()"
:error-message="tools.errorMsg('name', v$.name)"
:label="tools.getConfSiteOptionEnabled(shared_consts.ConfSite.regNameSurnameMandatory) ? $t('reg.name') : $t('reg.name_opt')"
:label="
tools.getConfSiteOptionEnabled(
shared_consts.ConfSite.regNameSurnameMandatory
)
? $t('reg.name')
: $t('reg.name_opt')
"
>
<template v-slot:prepend>
<q-icon name="person" />
</template>
</q-input>
<!--<q-input
<q-input
v-if="signup.surname"
ref="inputSurname"
v-model="signup.surname"
rounded
@@ -224,7 +234,7 @@
<template v-slot:prepend>
<q-icon name="person" />
</template>
</q-input>-->
</q-input>
<q-input
ref="inputPassword"
v-model="signup.password"
@@ -292,7 +302,6 @@
</template>
</q-input>
<div class="column">
<q-btn
rounded
@@ -429,7 +438,15 @@
tools.errorMsg('username', v$.username) ||
(isalreadyReg ? 'L\'Username è gia stato registrato!' : '')
"
:label="collettivo ? $t('reg.username_reg_collettivo') : (tools.getConfSiteOptionEnabled(shared_consts.ConfSite.askUSernameTelegramToTheReg) ? $t('reg.username_telegram') : $t('reg.username_reg'))"
:label="
collettivo
? $t('reg.username_reg_collettivo')
: tools.getConfSiteOptionEnabled(
shared_consts.ConfSite.askUSernameTelegramToTheReg
)
? $t('reg.username_telegram')
: $t('reg.username_reg')
"
>
<template v-slot:prepend>
<q-icon name="person" />
@@ -470,7 +487,13 @@
debounce="1000"
@keyup.enter="$refs.inputSurname.focus()"
:error-message="tools.errorMsg('name', v$.name)"
:label="tools.getConfSiteOptionEnabled(shared_consts.ConfSite.regNameSurnameMandatory) ? $t('reg.name') : $t('reg.name_opt')"
:label="
tools.getConfSiteOptionEnabled(
shared_consts.ConfSite.regNameSurnameMandatory
)
? $t('reg.name')
: $t('reg.name_opt')
"
>
<template v-slot:prepend>
<q-icon name="person" />
@@ -490,7 +513,13 @@
!checkifDisabled ? $refs.carousel.next() : null
"
:error-message="tools.errorMsg('surname', v$.surname)"
:label="tools.getConfSiteOptionEnabled(shared_consts.ConfSite.regNameSurnameMandatory) ? $t('reg.surname') : $t('reg.surname_opt')"
:label="
tools.getConfSiteOptionEnabled(
shared_consts.ConfSite.regNameSurnameMandatory
)
? $t('reg.surname')
: $t('reg.surname_opt')
"
>
<template v-slot:prepend>
<q-icon name="person" />

View File

@@ -10,7 +10,7 @@
<meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="version" content="1.0.58">
<meta name="version" content="1.0.60">
<meta name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

View File

@@ -1,28 +1,19 @@
<template>
<q-page class="">
<div v-if="tools.isLogged()">
<div v-if="true">
<CNotifAtTop />
<div v-if="tools.isUserOk()">
<div v-if="true">
<CFinder
:ind="tools.getIndMainCardsByTable(shared_consts.TABLES_ATTIVITAS)"
:table="shared_consts.TABLES_ATTIVITAS"
:showMap="true"
/>
</div>
<div v-else>
<CUserNonVerif></CUserNonVerif>
</div>
</div>
<div v-else>
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
</q-page>
</template>
<script lang="ts" src="./activities.ts">
</script>

View File

@@ -311,17 +311,6 @@
:rec="mysite"
mykey="idMyGroup"
debounce="1000"
:type="costanti.FieldType.string"
@save="updateSite"
>
</CMyFieldDb>
<CMyFieldDb
title="My Group"
table="sites"
:id="mysite._id"
:rec="mysite"
mykey="idMyGroup"
debounce="1000"
@save="save"
:jointable="toolsext.TABMYGROUPS"
:type="costanti.FieldType.select"
@@ -1091,5 +1080,5 @@
"idapp" : "19",
"chiave" : "vers",
"userId" : "ALL",
"valore" : "1.0.58"
"valore" : "1.0.60"
}

View File

@@ -5240,7 +5240,7 @@ export const tools = {
const site = globalStore.site
if (site) {
return site.host!
return site.host!.replace(/^(https?:\/\/)/, '');
}
return ''
},
@@ -8774,8 +8774,16 @@ export const tools = {
return { text: '<span style="color: ' + color + ';">' + checkDomain + '</span><br>', ok }
},
checkIfICanAddNewRecord() {
// Attualmente se sei loggato puoi inserire Record
return this.isLogged() && this.isUserOk()
}
// FINE !
// getLocale() {

View File

@@ -274,6 +274,40 @@ export const useGlobalStore = defineStore('GlobalStore', {
return state.myelems.filter((page: IMyElem) => (page.path === path)).sort((a: any, b: any) => a.order - b.order)
},
getMyElemPrecThisElemId: (state: IGlobalState) => (path: string, idelem: string): IMyElem => {
// Ottieni tutti gli myelem con lo stesso path e ordinali per order
const sortedElems = state.myelems
.filter((elem: IMyElem) => elem.path === path)
.sort((a: any, b: any) => a.order - b.order);
// Trova l'indice dell'elemento con _id = idelem
const index = sortedElems.findIndex((elem: IMyElem) => elem._id === idelem);
// ritorna l'elemento precedente
if (index > 0) {
return sortedElems[index - 1];
} else {
return sortedElems[0];
}
},
getMyElemNextThisElemId: (state: IGlobalState) => (path: string, idelem: string): IMyElem => {
// Ottieni tutti gli myelem con lo stesso path e ordinali per order
const sortedElems = state.myelems
.filter((elem: IMyElem) => elem.path === path)
.sort((a: any, b: any) => a.order - b.order);
// Trova l'indice dell'elemento con _id = idelem
const index = sortedElems.findIndex((elem: IMyElem) => elem._id === idelem);
// ritorna l'elemento successivo
if (index < sortedElems.length - 1) {
return sortedElems[index + 1];
} else {
return sortedElems[sortedElems.length - 1];
}
},
getmenu: (state: IGlobalState): any => {
// console.log('getmenu', cfgrouter.getmenu())
@@ -1630,6 +1664,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (page.loadFirst)
page.loaded = true
}
this.myelems = []
this.myelems = (res.data.myelems) ? [...res.data.myelems] : []
// console.log('this.mypage', this.mypage)
@@ -2040,16 +2075,19 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (!myelem._id)
return false
return await this.DeleteRec({ table: 'myelems', id: myelem._id }).then((ris) => {
return await this.DeleteRec({ table: 'myelems', id: myelem._id })
.then(async (ris) => {
if (ris) {
this.myelems = this.myelems.filter((rec) => rec._id !== myelem._id)
// Aggiorna anche tutto il sito...
this.loadSite()
// await this.loadSite()
tools.showPositiveNotif($q, t('db.deletedrecord'))
return true
} else {
tools.showNegativeNotif($q, t('db.recdelfailed'))
return false
}
})
},
@@ -2062,26 +2100,27 @@ export const useGlobalStore = defineStore('GlobalStore', {
mydata.data = myelem
return await this.saveTable(mydata)
.then(async (newelem) => {
if (newelem) {
console.log('*** newelem', newelem)
// Save in Memory
for (let i = 0; i < this.myelems.length; i++) {
if (this.myelems[i]._id === myelem._id) {
this.myelems[i] = myelem;
if (this.myelems[i]._id === newelem._id) {
this.myelems[i] = newelem;
break;
}
}
return await this.saveTable(mydata)
.then((ris) => {
if (ris) {
// Aggiorna anche tutto il sito...
this.loadSite()
// await this.loadSite()
tools.showPositiveNotif($q, t('db.recupdated'))
} else {
tools.showNegativeNotif($q, t('db.recfailed'))
}
return ris
return newelem
}).catch((e) => {
tools.showNegativeNotif($q, t('db.recfailed'))
return false
@@ -2091,11 +2130,12 @@ export const useGlobalStore = defineStore('GlobalStore', {
},
async addNewElem($q: any, t: any, myelem: IMyElem) {
const myrec = await this.saveMyElem($q, t, myelem)
if (myrec) {
myelem._id = myrec._id
this.myelems.push(myelem)
const newelem = await this.saveMyElem($q, t, myelem)
if (newelem) {
this.myelems.push(newelem)
}
return newelem
},
changeVisuDrawer(path: string, edit: boolean) {
@@ -2117,7 +2157,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
})
},
prepareAddNewElem(order: any, $q: any, t: any, myelem: any, newtype: any) {
async prepareAddNewElem(order: any, $q: any, t: any, myelem: any, newtype: any) {
const newrec: IMyElem = {
_id: undefined,
@@ -2145,9 +2185,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
}
}
this.addNewElem($q, t, newrec)
const mynewrec = await this.addNewElem($q, t, newrec)
return newrec
return mynewrec
},