163 lines
4.4 KiB
Vue
163 lines
4.4 KiB
Vue
<template>
|
|
<modal :action="'Ad Editor'" @submit="submit" ref="dialog" @open="load" dialogClass="w-100"
|
|
:buttonText="'Save'">
|
|
|
|
<div class="form-group ad-list" v-for="(ad, index) in ads">
|
|
<label :for="'adm-content-' + index" class="control-label">Ad #{{(index + 1)}}
|
|
<a v-if="(index > 0)" @click="moveAdUp(index)" title="Move Up"><i class="fa fa-arrow-up"></i></a>
|
|
<a v-if="(index < ads.length - 1)" @click="moveAdDown(index)" title="Move Down"><i class="fa fa-arrow-down"></i></a>
|
|
<a @click="removeAd(index)" title="Remove Ad"><i class="fas fa-times-circle"></i></a>
|
|
</label>
|
|
|
|
<editor :id="'adm-content-' + index" v-model="ad.content" :hasToolbar="true" class="form-control" :maxlength="core.connection.vars.lfrp_max" :disabled="ad.disabled">
|
|
</editor>
|
|
|
|
<tagEditor :id="'adm-tags-' + index" v-model="ad.tags" placeholder="Enter one or more tags, e.g. 'romantic'" :add-tag-on-keys="[13, 188, 9, 32]" class="form-control" :disabled="ad.disabled" :add-tag-on-blur="true"></tagEditor>
|
|
|
|
<label class="control-label disable" :for="'adm-disabled-' + index">
|
|
<input type="checkbox" :id="'adm-disabled-' + index" v-model='ad.disabled' />
|
|
Disable
|
|
</label>
|
|
</div>
|
|
|
|
<button class="btn btn-outline-secondary" @click="addAd()">Add Another</button>
|
|
|
|
</modal>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import {Component} from '@f-list/vue-ts';
|
|
import CustomDialog from '../../components/custom_dialog';
|
|
import Modal from '../../components/Modal.vue';
|
|
import {Conversation} from '../interfaces';
|
|
import l from '../localize';
|
|
import {Editor} from '../bbcode';
|
|
import core from '../core';
|
|
import { Dialog } from '../../helpers/dialog';
|
|
import InputTag from 'vue-input-tag';
|
|
import { Ad } from './ad-center';
|
|
import _ from 'lodash';
|
|
|
|
@Component({
|
|
components: {modal: Modal, editor: Editor, tagEditor: InputTag},
|
|
})
|
|
export default class AdCenterDialog extends CustomDialog {
|
|
l = l;
|
|
setting = Conversation.Setting;
|
|
ads!: Ad[];
|
|
core = core;
|
|
|
|
load(): void {
|
|
this.ads = _.cloneDeep(core.adCenter.get());
|
|
|
|
if (this.ads.length === 0) {
|
|
this.addAd();
|
|
}
|
|
}
|
|
|
|
async submit(): Promise<void> {
|
|
await core.adCenter.set(this.ads);
|
|
}
|
|
|
|
addAd(): void {
|
|
this.ads.push({
|
|
content: '',
|
|
disabled: false,
|
|
tags: []
|
|
});
|
|
}
|
|
|
|
removeAd(index: number): void {
|
|
// if (confirm('Are you sure you wish to remove this ad?')) {
|
|
if (Dialog.confirmDialog('Are you sure you wish to remove this ad?')) {
|
|
this.ads.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
moveAdUp(index: number): void {
|
|
const ad = this.ads.splice(index, 1);
|
|
|
|
this.ads.splice(index - 1, 0, ad[0]);
|
|
}
|
|
|
|
|
|
moveAdDown(index: number): void {
|
|
const ad = this.ads.splice(index, 1);
|
|
|
|
this.ads.splice(index + 1, 0, ad[0]);
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.w-100 {
|
|
min-width: 70%;
|
|
}
|
|
|
|
.form-group.ad-list {
|
|
label {
|
|
font-size: 140%;
|
|
|
|
a {
|
|
padding-right: 0.3rem;
|
|
opacity:0.3;
|
|
font-size: 70%;
|
|
|
|
&:hover {
|
|
opacity:0.6
|
|
}
|
|
}
|
|
}
|
|
|
|
.bbcode-preview {
|
|
margin-top: 0;
|
|
border: 1px solid;
|
|
padding: 5px;
|
|
border-radius: 0 5px 5px 5px;
|
|
background: var(--input-bg);
|
|
border-color: var(--secondary);
|
|
}
|
|
|
|
.bbcode-editor {
|
|
border: none;
|
|
background: none;
|
|
height: auto;
|
|
|
|
textarea {
|
|
width: 100%;
|
|
color: var(--input-color);
|
|
background-color: var(--input-bg);
|
|
border-radius: 0 5px 5px 5px;
|
|
}
|
|
}
|
|
|
|
.vue-input-tag-wrapper[disabled=disabled],
|
|
textarea[disabled=disabled],
|
|
div.bbcode-toolbar[disabled=disabled] {
|
|
opacity: 0.5;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.vue-input-tag-wrapper {
|
|
margin: 0.375rem 0.75rem;
|
|
width: auto;
|
|
height: auto;
|
|
padding-bottom: 0;
|
|
|
|
input {
|
|
width: 260px;
|
|
color: var(--gray-dark);
|
|
}
|
|
}
|
|
|
|
label.disable {
|
|
color: var(--gray-dark);
|
|
margin: 0.375rem 0.75rem;
|
|
font-size: 100%;
|
|
}
|
|
}
|
|
|
|
</style>
|
|
|