diff --git a/aircox/models/__init__.py b/aircox/models/__init__.py index 1e94504..25d1eba 100644 --- a/aircox/models/__init__.py +++ b/aircox/models/__init__.py @@ -1,10 +1,11 @@ -from .article import Article -from .page import Category, Page, StaticPage, Comment, NavItem -from .program import Program, Stream, Schedule -from .episode import Episode, Diffusion -from .log import Log -from .sound import Sound, Track -from .station import Station, Port +from .article import * +from .page import * +from .program import * +from .episode import * +from .log import * +from .sound import * +from .station import * +from .user_settings import * from . import signals diff --git a/aircox/models/article.py b/aircox/models/article.py index fff7cb6..40e1b5a 100644 --- a/aircox/models/article.py +++ b/aircox/models/article.py @@ -1,8 +1,10 @@ -from django.db import models from django.utils.translation import gettext_lazy as _ -from .page import Page, PageQuerySet -from .program import Program, ProgramChildQuerySet +from .page import Page +from .program import ProgramChildQuerySet + + +__all__ = ('Article',) class Article(Page): diff --git a/aircox/models/episode.py b/aircox/models/episode.py index 6c08f79..6773c4e 100644 --- a/aircox/models/episode.py +++ b/aircox/models/episode.py @@ -9,12 +9,12 @@ from django.utils.functional import cached_property from easy_thumbnails.files import get_thumbnailer from aircox import settings, utils -from .program import Program, ProgramChildQuerySet, \ +from .program import ProgramChildQuerySet, \ BaseRerun, BaseRerunQuerySet, Schedule -from .page import Page, PageQuerySet +from .page import Page -__all__ = ['Episode', 'Diffusion', 'DiffusionQuerySet'] +__all__ = ('Episode', 'Diffusion', 'DiffusionQuerySet') class Episode(Page): @@ -31,9 +31,9 @@ class Episode(Page): """ Return serialized data about podcasts. """ from ..serializers import PodcastSerializer podcasts = [PodcastSerializer(s).data - for s in self.sound_set.public().order_by('type') ] + for s in self.sound_set.public().order_by('type')] if self.cover: - options = {'size': (128,128), 'crop':'scale'} + options = {'size': (128, 128), 'crop': 'scale'} cover = get_thumbnailer(self.cover).get_thumbnail(options).url else: cover = None @@ -84,7 +84,7 @@ class DiffusionQuerySet(BaseRerunQuerySet): def episode(self, episode=None, id=None): """ Diffusions for this episode """ return self.filter(episode=episode) if id is None else \ - self.filter(episode__id=id) + self.filter(episode__id=id) def on_air(self): """ On air diffusions """ @@ -104,13 +104,13 @@ class DiffusionQuerySet(BaseRerunQuerySet): end = tz.datetime.combine(date, datetime.time(23, 59, 59, 999)) # start = tz.get_current_timezone().localize(start) # end = tz.get_current_timezone().localize(end) - qs = self.filter(start__range = (start, end)) + qs = self.filter(start__range=(start, end)) return qs.order_by('start') if order else qs def at(self, date, order=True): """ Return diffusions at specified date or datetime """ return self.now(date, order) if isinstance(date, tz.datetime) else \ - self.date(date, order) + self.date(date, order) def after(self, date=None): """ @@ -201,7 +201,7 @@ class Diffusion(BaseRerun): def __str__(self): str_ = '{episode} - {date}'.format( - self=self, episode=self.episode and self.episode.title, + episode=self.episode and self.episode.title, date=self.local_start.strftime('%Y/%m/%d %H:%M%z'), ) if self.initial: @@ -324,5 +324,3 @@ class Diffusion(BaseRerun): 'end': self.end, 'episode': getattr(self, 'episode', None), } - - diff --git a/aircox/models/log.py b/aircox/models/log.py index e5ff73c..73f4459 100644 --- a/aircox/models/log.py +++ b/aircox/models/log.py @@ -20,7 +20,7 @@ from .station import Station logger = logging.getLogger('aircox') -__all__ = ['Log', 'LogQuerySet', 'LogArchiver'] +__all__ = ('Log', 'LogQuerySet', 'LogArchiver') class LogQuerySet(models.QuerySet): @@ -31,7 +31,7 @@ class LogQuerySet(models.QuerySet): def date(self, date): start = tz.datetime.combine(date, datetime.time()) end = tz.datetime.combine(date, datetime.time(23, 59, 59, 999)) - return self.filter(date__range = (start, end)) + return self.filter(date__range=(start, end)) # this filter does not work with mysql # return self.filter(date__date=date) diff --git a/aircox/models/page.py b/aircox/models/page.py index cfaf2d2..bfb8193 100644 --- a/aircox/models/page.py +++ b/aircox/models/page.py @@ -1,4 +1,3 @@ -from enum import IntEnum import re from django.db import models @@ -18,7 +17,8 @@ from model_utils.managers import InheritanceQuerySet from .station import Station -__all__ = ['Category', 'PageQuerySet', 'Page', 'Comment', 'NavItem'] +__all__ = ('Category', 'PageQuerySet', + 'Page', 'StaticPage', 'Comment', 'NavItem') headline_re = re.compile(r'(

)?' diff --git a/aircox/models/program.py b/aircox/models/program.py index 42eef57..4b6c1e0 100644 --- a/aircox/models/program.py +++ b/aircox/models/program.py @@ -1,6 +1,5 @@ import calendar from collections import OrderedDict -import datetime from enum import IntEnum import logging import os @@ -10,7 +9,7 @@ import pytz from django.conf import settings as conf from django.core.exceptions import ValidationError from django.db import models -from django.db.models import F, Q +from django.db.models import F from django.db.models.functions import Concat, Substr from django.utils import timezone as tz from django.utils.translation import gettext_lazy as _ @@ -24,8 +23,8 @@ from .station import Station logger = logging.getLogger('aircox') -__all__ = ['Program', 'ProgramQuerySet', 'Stream', 'Schedule', - 'ProgramChildQuerySet', 'BaseRerun', 'BaseRerunQuerySet'] +__all__ = ('Program', 'ProgramQuerySet', 'Stream', 'Schedule', + 'ProgramChildQuerySet', 'BaseRerun', 'BaseRerunQuerySet') class ProgramQuerySet(PageQuerySet): diff --git a/aircox/models/signals.py b/aircox/models/signals.py index 16a2b31..886c8bc 100755 --- a/aircox/models/signals.py +++ b/aircox/models/signals.py @@ -2,7 +2,7 @@ import pytz from django.contrib.auth.models import User, Group, Permission from django.db import transaction -from django.db.models import F, signals +from django.db.models import signals from django.dispatch import receiver from django.utils import timezone as tz diff --git a/aircox/models/sound.py b/aircox/models/sound.py index 04fa4bd..eb9583b 100644 --- a/aircox/models/sound.py +++ b/aircox/models/sound.py @@ -1,17 +1,14 @@ -from enum import IntEnum import logging import os from django.conf import settings as conf from django.db import models -from django.db.models import Q, Value as V -from django.db.models.functions import Concat +from django.db.models import Q from django.utils import timezone as tz from django.utils.translation import gettext_lazy as _ from taggit.managers import TaggableManager -from aircox import settings from .program import Program from .episode import Episode @@ -19,7 +16,7 @@ from .episode import Episode logger = logging.getLogger('aircox') -__all__ = ['Sound', 'SoundQuerySet', 'Track'] +__all__ = ('Sound', 'SoundQuerySet', 'Track') class SoundQuerySet(models.QuerySet): diff --git a/aircox/models/station.py b/aircox/models/station.py index bfb29d1..a87a2db 100644 --- a/aircox/models/station.py +++ b/aircox/models/station.py @@ -8,7 +8,7 @@ from filer.fields.image import FilerImageField from .. import settings -__all__ = ['Station', 'StationQuerySet', 'Port'] +__all__ = ('Station', 'StationQuerySet', 'Port') class StationQuerySet(models.QuerySet): diff --git a/aircox/models/user_settings.py b/aircox/models/user_settings.py new file mode 100644 index 0000000..a7dabfa --- /dev/null +++ b/aircox/models/user_settings.py @@ -0,0 +1,16 @@ +from django.db import models +from django.contrib.auth.models import User +from django.utils.translation import gettext_lazy as _ + + +class UserSettings(models.Model): + """ + Store user's settings. + """ + user = models.OneToOneField( + User, models.CASCADE, verbose_name=_('User'), + related_name='aircox_settings') + playlist_editor_columns = models.JSONField( + _('Playlist Editor Columns')) + playlist_editor_sep = models.CharField( + _('Playlist Editor Separator'), max_length=16) diff --git a/aircox/serializers/__init__.py b/aircox/serializers/__init__.py new file mode 100644 index 0000000..d61a535 --- /dev/null +++ b/aircox/serializers/__init__.py @@ -0,0 +1,3 @@ +from .log import * +from .sound import * +from .admin import * diff --git a/aircox/serializers/admin.py b/aircox/serializers/admin.py new file mode 100644 index 0000000..0818685 --- /dev/null +++ b/aircox/serializers/admin.py @@ -0,0 +1,30 @@ +from rest_framework import serializers +from taggit.serializers import TagListSerializerField, TaggitSerializer + +from ..models import Track, UserSettings + + +__all__ = ('TrackSerializer', 'UserSettingsSerializer') + + +class TrackSerializer(TaggitSerializer, serializers.ModelSerializer): + tags = TagListSerializerField() + + class Meta: + model = Track + fields = ('pk', 'artist', 'title', 'album', 'year', 'position', + 'info', 'tags', 'episode', 'sound') + + +class UserSettingsSerializer(serializers.ModelSerializer): + # TODO: validate fields values (playlist_editor_columns at least) + class Meta: + model = UserSettings + fields = ('playlist_editor_columns', 'playlist_editor_sep') + + def create(self, validated_data): + user = self.context.get('user') + if user: + validated_data['user_id'] = user.id + return super().create(validated_data) + diff --git a/aircox/serializers.py b/aircox/serializers/log.py similarity index 58% rename from aircox/serializers.py rename to aircox/serializers/log.py index 0902782..7f5f68f 100644 --- a/aircox/serializers.py +++ b/aircox/serializers/log.py @@ -1,12 +1,9 @@ from rest_framework import serializers -from taggit.serializers import TagListSerializerField, TaggitSerializer -from .models import Diffusion, Log, Sound, Track +from ..models import Diffusion, Log -__all__ = ['LogInfo', 'LogInfoSerializer', 'SoundSerializer', - 'PodcastSerializer', - 'AdminTrackSerializer'] +__all__ = ('LogInfo', 'LogInfoSerializer') class LogInfo: @@ -54,30 +51,3 @@ class LogInfoSerializer(serializers.Serializer): info = serializers.CharField(max_length=200, required=False) url = serializers.URLField(required=False) cover = serializers.URLField(required=False) - - -class SoundSerializer(serializers.ModelSerializer): - file = serializers.FileField(use_url=False) - - class Meta: - model = Sound - fields = ['pk', 'name', 'program', 'episode', 'type', 'file', - 'duration', 'mtime', 'is_good_quality', 'is_public', 'url'] - - -class PodcastSerializer(serializers.ModelSerializer): - # serializers.HyperlinkedIdentityField(view_name='sound', format='html') - - class Meta: - model = Sound - fields = ['pk', 'name', 'program', 'episode', 'type', - 'duration', 'mtime', 'url', 'is_downloadable'] - - -class AdminTrackSerializer(TaggitSerializer, serializers.ModelSerializer): - tags = TagListSerializerField() - - class Meta: - model = Track - fields = ('pk', 'artist', 'title', 'album', 'year', 'position', - 'info', 'tags', 'episode', 'sound') diff --git a/aircox/serializers/sound.py b/aircox/serializers/sound.py new file mode 100644 index 0000000..5ad68db --- /dev/null +++ b/aircox/serializers/sound.py @@ -0,0 +1,21 @@ +from rest_framework import serializers + +from ..models import Sound + + +class SoundSerializer(serializers.ModelSerializer): + file = serializers.FileField(use_url=False) + + class Meta: + model = Sound + fields = ['pk', 'name', 'program', 'episode', 'type', 'file', + 'duration', 'mtime', 'is_good_quality', 'is_public', 'url'] + + +class PodcastSerializer(serializers.ModelSerializer): + # serializers.HyperlinkedIdentityField(view_name='sound', format='html') + + class Meta: + model = Sound + fields = ['pk', 'name', 'program', 'episode', 'type', + 'duration', 'mtime', 'url', 'is_downloadable'] diff --git a/aircox/static/aircox/js/admin.js b/aircox/static/aircox/js/admin.js index 822b279..38f5b30 100644 --- a/aircox/static/aircox/js/admin.js +++ b/aircox/static/aircox/js/admin.js @@ -16,7 +16,7 @@ \**********************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assets_styles_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./assets/styles.scss */ \"./src/assets/styles.scss\");\n/* harmony import */ var _assets_admin_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assets/admin.scss */ \"./src/assets/admin.scss\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./src/index.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app */ \"./src/app.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n\n\n\n\n\nconst AdminApp = {\n ..._app__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n components: {\n ..._app__WEBPACK_IMPORTED_MODULE_3__[\"default\"].components,\n ..._components__WEBPACK_IMPORTED_MODULE_4__.admin\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AdminApp);\nwindow.App = AdminApp;\n\n//# sourceURL=webpack://aircox-assets/./src/admin.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assets_styles_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./assets/styles.scss */ \"./src/assets/styles.scss\");\n/* harmony import */ var _assets_admin_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assets/admin.scss */ \"./src/assets/admin.scss\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./src/index.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app */ \"./src/app.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n/* harmony import */ var _track__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./track */ \"./src/track.js\");\n\n\n\n\n\n\nconst AdminApp = {\n ..._app__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n components: {\n ..._app__WEBPACK_IMPORTED_MODULE_3__[\"default\"].components,\n ..._components__WEBPACK_IMPORTED_MODULE_4__.admin\n },\n data() {\n return {\n ...super.data,\n Track: _track__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n };\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AdminApp);\nwindow.App = AdminApp;\n\n//# sourceURL=webpack://aircox-assets/./src/admin.js?"); /***/ }), diff --git a/aircox/static/aircox/js/chunk-common.js b/aircox/static/aircox/js/chunk-common.js index ee10f56..7952a3f 100644 --- a/aircox/static/aircox/js/chunk-common.js +++ b/aircox/static/aircox/js/chunk-common.js @@ -9,13 +9,23 @@ */ (self["webpackChunkaircox_assets"] = self["webpackChunkaircox_assets"] || []).push([["chunk-common"],{ +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=script&lang=js": +/*!***********************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=script&lang=js ***! + \***********************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n\n\n/**\n * Button that can be used to call API requests on provided url\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['start', 'done'],\n props: {\n //! Component tag, by default, `button`\n tag: {\n type: String,\n default: 'a'\n },\n //! Button icon\n icon: String,\n //! Data or model instance to send\n data: Object,\n //! Action method, by default, `POST`\n method: {\n type: String,\n default: 'POST'\n },\n //! Action url\n url: String,\n //! Extra request options\n fetchOptions: {\n type: Object,\n default: () => {\n return {};\n }\n },\n //! Component class while action is running\n runClass: String,\n //! Icon class while action is running\n runIcon: String\n },\n computed: {\n //! Input data as model instance\n item() {\n return this.data instanceof _model__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? this.data : new _model__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.data);\n },\n //! Computed button class\n buttonClass() {\n return this.promise ? this.runClass : '';\n }\n },\n data() {\n return {\n promise: false\n };\n },\n methods: {\n call() {\n if (this.promise || !this.url) return;\n const options = _model__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getOptions({\n ...this.fetchOptions,\n method: this.method,\n body: JSON.stringify(this.item.data)\n });\n this.promise = fetch(this.url, options).then(data => {\n const response = data.json();\n this.promise = null;\n this.$emit('done', response);\n return response;\n }, data => {\n this.promise = null;\n return data;\n });\n return this.promise;\n }\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AAutocomplete.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AAutocomplete.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n// import debounce from 'lodash/debounce'\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: {\n url: String,\n model: Function,\n placeholder: String,\n name: String,\n labelField: String,\n valueField: {\n type: String,\n default: null\n },\n count: {\n type: Number,\n count: 10\n }\n },\n data() {\n return {\n value: '',\n items: [],\n selectedIndex: -1,\n cursor: -1,\n isFetching: false\n };\n },\n computed: {\n selected() {\n let index = this.selectedIndex;\n if (index < 0) return null;\n index = Math.min(index, this.items.length - 1);\n return this.items[index];\n },\n selectedValue() {\n const sel = this.selected;\n return sel && (this.valueField ? sel.data[this.valueField] : sel.id);\n },\n selectedLabel() {\n const sel = this.selected;\n return sel && sel.data[this.labelField];\n },\n dropdownClass() {\n const active = this.cursor > -1 && this.items.length;\n return ['dropdown', active ? 'is-active' : ''];\n }\n },\n methods: {\n move(index = -1, relative = false) {\n if (relative) index += this.cursor;\n this.cursor = Math.max(-1, Math.min(index, this.items.length - 1));\n },\n select(index = -1, relative = false, active = null) {\n if (relative) index += this.selectedIndex;else if (index == this.selectedIndex) return;\n this.selectedIndex = Math.max(-1, Math.min(index, this.items.length - 1));\n if (index >= 0) {\n this.$refs.input.value = this.selectedLabel;\n this.$refs.input.focus();\n }\n if (this.selectedIndex < 0) this.$emit('unselect');else this.$emit('select', index, this.selected, this.selectedValue);\n if (active !== null) active && this.move(0) || this.move(-1);\n },\n onKeyPress: function (event) {\n switch (event.keyCode) {\n case 13:\n this.select(this.cursor, false, false);\n break;\n case 27:\n this.select();\n break;\n case 38:\n this.move(-1, true);\n break;\n case 40:\n this.move(1, true);\n break;\n default:\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n onKeyUp: function (event) {\n const value = event.target.value;\n if (value === this.value) return;\n this.value = value;\n if (!value) return this.selected && this.select(-1);\n this.fetch(value);\n },\n fetch: function (query) {\n if (!query || this.isFetching) return;\n this.isFetching = true;\n return this.model.fetch(this.url.replace('${query}', query), {\n many: true\n }).then(items => {\n this.items = items || [];\n this.isFetching = false;\n this.move(0);\n return items;\n }, data => {\n this.isFetching = false;\n Promise.reject(data);\n });\n }\n },\n mounted() {\n const form = this.$el.closest('form');\n form.addEventListener('reset', () => {\n this.value = '';\n this.select(-1);\n });\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n// import debounce from 'lodash/debounce'\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['change', 'keypress', 'keydown', 'keyup', 'select', 'unselect', 'update:modelValue'],\n props: {\n //! Search URL (where `${query}` is replaced by search term)\n url: String,\n //! Items' model\n model: Function,\n //! Input tag class\n inputClass: Array,\n //! input text placeholder\n placeholder: String,\n //! input form field name\n name: String,\n //! Field on items to use as label\n labelField: String,\n //! Field on selected item to get selectedValue from, if any\n valueField: {\n type: String,\n default: null\n },\n count: {\n type: Number,\n count: 10\n },\n //! If true, show button when value has been selected\n button: Boolean,\n //! If true, value must come from a selection\n mustExist: {\n type: Boolean,\n default: false\n },\n //! Minimum input size before fetching\n minFetchLength: {\n type: Number,\n default: 3\n },\n modelValue: {\n default: ''\n }\n },\n data() {\n return {\n inputValue: this.modelValue || '',\n query: '',\n items: [],\n selectedIndex: -1,\n cursor: -1,\n promise: null\n };\n },\n watch: {\n modelValue(value) {\n this.inputValue = value;\n },\n inputValue(value) {\n if (value != this.inputValue && value != this.modelValue) this.$emit('update:modelValue', value);\n }\n },\n computed: {\n isFetching() {\n return !!this.promise;\n },\n selected() {\n let index = this.selectedIndex;\n if (index < 0) return null;\n index = Math.min(index, this.items.length - 1);\n return this.items[index];\n },\n selectedValue() {\n let value = this.itemValue(this.selected);\n if (!value && !this.mustExist) value = this.inputValue;\n return value;\n },\n selectedLabel() {\n return this.itemLabel(this.selected);\n },\n dropdownClass() {\n var active = this.cursor > -1 && this.items.length;\n if (active && this.items.length == 1 && this.itemValue(this.items[0]) == this.inputValue) active = false;\n return ['dropdown is-fullwidth', active ? 'is-active' : ''];\n }\n },\n methods: {\n itemValue(item) {\n return this.valueField ? item && item[this.valueField] : item;\n },\n itemLabel(item) {\n return this.labelField ? item && item[this.labelField] : item;\n },\n hide() {\n this.cursor = -1;\n this.selectedIndex = -1;\n },\n move(index = -1, relative = false) {\n if (relative) index += this.cursor;\n this.cursor = Math.max(-1, Math.min(index, this.items.length - 1));\n },\n select(index = -1, relative = false, active = null) {\n if (relative) index += this.selectedIndex;else if (index == this.selectedIndex) return;\n this.selectedIndex = Math.max(-1, Math.min(index, this.items.length - 1));\n if (index >= 0) {\n this.inputValue = this.selectedLabel;\n this.$refs.input.focus();\n }\n if (this.selectedIndex < 0) this.$emit('unselect');else this.$emit('select', index, this.selected, this.selectedValue);\n if (active !== null) active && this.move(0) || this.move(-1);\n },\n onInputFocus() {\n this.cursor < 0 && this.move(0);\n },\n onBlur(event) {\n var index = event.relatedTarget && event.relatedTarget.dataset.autocompleteIndex;\n if (index !== undefined) this.select(index, false, false);\n this.cursor = -1;\n },\n onKeyDown(event) {\n if (event.ctrlKey || event.altKey || event.metaKey) return;\n switch (event.keyCode) {\n case 13:\n this.select(this.cursor, false, false);\n break;\n case 27:\n this.hide();\n this.select();\n break;\n case 38:\n this.move(-1, true);\n break;\n case 40:\n this.move(1, true);\n break;\n default:\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n onKeyUp(event) {\n if (event.ctrlKey || event.altKey || event.metaKey) return;\n const value = event.target.value;\n if (value === this.query) return;\n this.inputValue = value;\n if (!value) return this.selected && this.select(-1);\n if (!this.minFetchLength || value.length >= this.minFetchLength) this.fetch(value);\n },\n fetch(query) {\n if (!query || this.promise) return;\n this.query = query;\n var url = this.url.replace('${query}', query);\n var promise = this.model ? this.model.fetch(url, {\n many: true\n }) : fetch(url, _model__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getOptions()).then(d => d.json());\n promise = promise.then(items => {\n this.items = items || [];\n this.promise = null;\n this.move(0);\n return items;\n }, data => {\n this.promise = null;\n Promise.reject(data);\n });\n this.promise = promise;\n return promise;\n }\n },\n mounted() {\n const form = this.$el.closest('form');\n form.addEventListener('reset', () => {\n this.inputValue = this.value;\n this.select(-1);\n });\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -35,7 +45,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mod \***************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emits: ['select', 'unselect', 'move'],\n data() {\n return {\n selectedIndex: this.defaultIndex\n };\n },\n props: {\n listClass: String,\n itemClass: String,\n defaultIndex: {\n type: Number,\n default: -1\n },\n set: Object,\n orderable: {\n type: Boolean,\n default: false\n },\n itemTag: {\n default: 'li'\n },\n listTag: {\n default: 'ul'\n }\n },\n computed: {\n model() {\n return this.set.model;\n },\n items() {\n return this.set.items;\n },\n length() {\n return this.set.length;\n },\n selected() {\n return this.selectedIndex > -1 && this.items.length > this.selectedIndex > -1 ? this.items[this.selectedIndex] : null;\n }\n },\n methods: {\n get(index) {\n return this.set.get(index);\n },\n find(pred) {\n return this.set.find(pred);\n },\n findIndex(pred) {\n return this.set.findIndex(pred);\n },\n remove(index, select = false) {\n this.set.remove(index);\n if (index < this.selectedIndex) this.selectedIndex--;\n if (select && this.selectedIndex == index) this.select(index);\n },\n select(index) {\n this.selectedIndex = index > -1 && this.items.length ? index % this.items.length : -1;\n this.$emit('select', {\n item: this.selected,\n index: this.selectedIndex\n });\n return this.selectedIndex;\n },\n unselect() {\n this.$emit('unselect', {\n item: this.selected,\n index: this.selectedIndex\n });\n this.selectedIndex = -1;\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `cell:${dataset.index}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('cell:')) return;\n ev.preventDefault();\n const from = Number(data.slice(5));\n const target = ev.target.tagName == this.itemTag ? ev.target : ev.target.closest(this.itemTag);\n this.$emit('move', {\n from,\n target,\n to: Number(target.dataset.index),\n set: this.set\n });\n }\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emits: ['select', 'unselect', 'move'],\n data() {\n return {\n selectedIndex: this.defaultIndex\n };\n },\n props: {\n listClass: String,\n itemClass: String,\n defaultIndex: {\n type: Number,\n default: -1\n },\n set: Object,\n orderable: {\n type: Boolean,\n default: false\n },\n itemTag: {\n default: 'li'\n },\n listTag: {\n default: 'ul'\n }\n },\n computed: {\n model() {\n return this.set.model;\n },\n items() {\n return this.set.items;\n },\n length() {\n return this.set.length;\n },\n selected() {\n return this.selectedIndex > -1 && this.items.length > this.selectedIndex > -1 ? this.items[this.selectedIndex] : null;\n }\n },\n methods: {\n get(index) {\n return this.set.get(index);\n },\n find(pred) {\n return this.set.find(pred);\n },\n findIndex(pred) {\n return this.set.findIndex(pred);\n },\n remove(index, select = false) {\n this.set.remove(index);\n if (index < this.selectedIndex) this.selectedIndex--;\n if (select && this.selectedIndex == index) this.select(index);\n },\n select(index) {\n this.selectedIndex = index > -1 && this.items.length ? index % this.items.length : -1;\n this.$emit('select', {\n item: this.selected,\n index: this.selectedIndex\n });\n return this.selectedIndex;\n },\n unselect() {\n this.$emit('unselect', {\n item: this.selected,\n index: this.selectedIndex\n });\n this.selectedIndex = -1;\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `row:${dataset.index}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('row:')) return;\n ev.preventDefault();\n const from = Number(data.slice(4));\n const target = ev.target.tagName == this.itemTag ? ev.target : ev.target.closest(this.itemTag);\n this.$emit('move', {\n from,\n target,\n to: Number(target.dataset.index),\n set: this.set\n });\n }\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -75,7 +85,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ALi \*************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modes\": function() { return /* binding */ Modes; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n/* harmony import */ var _track__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../track */ \"./src/track.js\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n/* harmony import */ var _ARows_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ARows.vue */ \"./src/components/ARows.vue\");\n\n\n\n\n\n\nconst Modes = {\n Text: 0,\n List: 1,\n Settings: 2\n};\nconst FormatLabels = {\n artist: 'Artiste',\n album: 'Album',\n year: 'Année',\n tags: 'Tags',\n title: 'Titre'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n ARows: _ARows_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n },\n props: {\n dataEl: String,\n dataPrefix: String,\n listClass: String,\n itemClass: String\n },\n data() {\n return {\n Modes: Modes,\n FormatLabels: FormatLabels,\n mode: Modes.Text,\n set: new _model__WEBPACK_IMPORTED_MODULE_2__.Set(_track__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n columns: ['artist', 'title', 'tags', 'album', 'year'],\n extraData: {}\n };\n },\n computed: {\n items() {\n return this.set.items;\n },\n rowsSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-') || x.startsWith('rows-')).map(x => [x, x.startsWith('rows-') ? x.slice(5) : x]);\n }\n },\n methods: {\n onCellEvent(event) {\n switch (event.name) {\n case 'change':\n this.updateInput();\n break;\n }\n },\n formatMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n this.updateList();\n },\n listItemMove({\n from,\n to,\n set\n }) {\n set.move(from, to);\n this.updateInput();\n },\n updateList() {\n const items = this.toList(this.$refs.textarea.value, this.$refs.sep.value);\n this.set.reset(items);\n },\n updateInput() {\n const input = this.toText(this.items, this.$refs.sep.value);\n this.$refs.textarea.value = input;\n },\n /**\n * From input and separator, return list of items.\n */\n toList(input, sep) {\n var lines = input.split('\\n');\n var items = [];\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n var lineBits = line.split(sep);\n var item = {};\n for (var col in this.columns) {\n if (col >= lineBits.length) break;\n const attr = this.columns[col];\n item[attr] = lineBits[col].trim();\n }\n item && items.push(item);\n }\n return items;\n },\n /**\n * From items and separator return a string\n */\n toText(items, sep) {\n var lines = [];\n sep = ` ${(sep || this.$refs.sep.value).trim()} `;\n for (let item of items) {\n if (!item) continue;\n var line = [];\n for (var col of this.columns) line.push(item.data[col] || '');\n line = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.dropRightWhile)(line, x => !x);\n lines.push(line.join(sep));\n }\n return lines.join('\\n');\n },\n _data_key(key) {\n key = key.slice(this.dataPrefix.length);\n try {\n var [index, attr] = key.split('-', 1);\n return [Number(index), attr];\n } catch (err) {\n return [null, key];\n }\n },\n /**\n * Load initial data\n */\n loadData({\n items = []\n }) {\n for (var index in items) this.set.push(items[index]);\n this.updateInput();\n }\n },\n mounted() {\n if (this.dataEl) {\n const el = document.getElementById(this.dataEl);\n if (el) {\n const data = JSON.parse(el.textContent);\n this.loadData(data);\n }\n }\n this.mode = this.items ? Modes.List : Modes.Text;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Page\": function() { return /* binding */ Page; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n/* harmony import */ var _track__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../track */ \"./src/track.js\");\n/* harmony import */ var _AActionButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AActionButton */ \"./src/components/AActionButton.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n/* harmony import */ var _ARows_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ARows.vue */ \"./src/components/ARows.vue\");\n\n\n\n\n\n\n\n\n/// Page display\nconst Page = {\n Text: 0,\n List: 1,\n Settings: 2\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n AActionButton: _AActionButton__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n ARows: _ARows_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n },\n props: {\n initData: Object,\n dataPrefix: String,\n labels: Object,\n settingsUrl: String,\n defaultColumns: {\n type: Array,\n default: () => ['artist', 'title', 'tags', 'album', 'year']\n }\n },\n data() {\n const settings = {\n playlist_editor_columns: this.defaultColumns,\n playlist_editor_sep: ' -- '\n };\n return {\n Page: Page,\n page: Page.Text,\n set: new _model__WEBPACK_IMPORTED_MODULE_2__.Set(_track__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n extraData: {},\n settings,\n savedSettings: (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(settings)\n };\n },\n computed: {\n settingsChanged() {\n var k = Object.keys(this.savedSettings).findIndex(k => !(0,lodash__WEBPACK_IMPORTED_MODULE_1__.isEqual)(this.settings[k], this.savedSettings[k]));\n return k != -1;\n },\n separator: {\n set(value) {\n this.settings.playlist_editor_sep = value;\n if (this.page == Page.List) this.updateInput();\n },\n get() {\n return this.settings.playlist_editor_sep;\n }\n },\n columns: {\n set(value) {\n var cols = value.filter(x => x in this.defaultColumns);\n var left = this.defaultColumns.filter(x => !(x in cols));\n value = cols.concat(left);\n this.settings.playlist_editor_columns = value;\n },\n get() {\n return this.settings.playlist_editor_columns;\n }\n },\n items() {\n return this.set.items;\n },\n rowsSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-') || x.startsWith('rows-')).map(x => [x, x.startsWith('rows-') ? x.slice(5) : x]);\n }\n },\n methods: {\n onCellEvent(event) {\n switch (event.name) {\n case 'change':\n this.updateInput();\n break;\n }\n },\n formatMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n if (this.page == Page.Text) this.updateList();else this.updateText();\n },\n columnMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n this.updateInput();\n },\n listItemMove({\n from,\n to,\n set\n }) {\n set.move(from, to);\n this.updateInput();\n },\n updateList() {\n const items = this.toList(this.$refs.textarea.value);\n this.set.reset(items);\n },\n updateInput() {\n const input = this.toText(this.items);\n this.$refs.textarea.value = input;\n },\n /**\n * From input and separator, return list of items.\n */\n toList(input) {\n var lines = input.split('\\n');\n var items = [];\n for (let line of lines) {\n line = line.trimLeft();\n if (!line) continue;\n var lineBits = line.split(this.separator);\n var item = {};\n for (var col in this.columns) {\n if (col >= lineBits.length) break;\n const attr = this.columns[col];\n item[attr] = lineBits[col].trim();\n }\n item && items.push(item);\n }\n return items;\n },\n /**\n * From items and separator return a string\n */\n toText(items) {\n const sep = ` ${this.separator.trim()} `;\n const lines = [];\n for (let item of items) {\n if (!item) continue;\n var line = [];\n for (var col of this.columns) line.push(item.data[col] || '');\n line = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.dropRightWhile)(line, x => !x || !('' + x).trim());\n line = line.join(sep).trimRight();\n lines.push(line);\n }\n return lines.join('\\n');\n },\n _data_key(key) {\n key = key.slice(this.dataPrefix.length);\n try {\n var [index, attr] = key.split('-', 1);\n return [Number(index), attr];\n } catch (err) {\n return [null, key];\n }\n },\n //! Update saved settings from this.settings\n settingsSaved(settings = null) {\n if (settings !== null) this.settings = settings;\n this.savedSettings = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(this.settings);\n },\n /**\n * Load initial data\n */\n loadData({\n items = [],\n settings = null\n }, reset = false) {\n if (reset) {\n this.set.items = [];\n }\n for (var index in items) this.set.push((0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(items[index]));\n if (settings) this.settingsSaved(settings);\n this.updateInput();\n }\n },\n watch: {\n initData(val) {\n this.loadData(val);\n }\n },\n mounted() {\n this.initData && this.loadData(this.initData);\n this.page = this.items ? Page.List : Page.Text;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -95,7 +105,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ \**************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['move', 'cell'],\n props: {\n item: Object,\n cell: Object,\n orderable: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n row() {\n return this.cell.row || 0;\n },\n columns() {\n return this.cell.columns;\n },\n itemData() {\n return this.item instanceof _model__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? this.item.data : this.item;\n },\n cells() {\n const cell = (0,vue__WEBPACK_IMPORTED_MODULE_1__.isReactive)(this.cell) && (0,vue__WEBPACK_IMPORTED_MODULE_1__.toRefs)(this.cell) || this.cell;\n const cells = [];\n for (var col in this.columns) cells.push({\n ...cell,\n col: Number(col)\n });\n return cells;\n },\n cellEls() {\n return [...this.$el.querySelectorAll('td')].filter(x => x.dataset.col);\n }\n },\n methods: {\n /// Emit a 'cell' event.\n /// Event data: `{name, data, item, attr}`\n ///\n /// @param {Number} col: cell column's index\n /// @param {String} name: cell's event name\n /// @param {} data: cell's event data\n cellEmit(name, cell, data) {\n this.$emit('cell', {\n name,\n cell,\n data,\n item: this.item\n });\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `cell:${dataset.col}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('cell:')) return;\n ev.preventDefault();\n this.$emit('move', {\n from: Number(data.slice(5)),\n to: Number(ev.target.dataset.col)\n });\n },\n focus(col, from) {\n if (from) col += from.col;\n const target = this.cellEls[col];\n if (!target) return;\n const control = target.querySelector('input') || target.querySelector('button') || target.querySelector('select') || target.querySelector('a');\n control && control.focus();\n }\n },\n mounted() {\n this.$el.__row = this;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['move', 'cell'],\n props: {\n item: Object,\n columns: Array,\n cell: {\n type: Object,\n default() {\n return {\n row: 0\n };\n }\n },\n cellTag: {\n type: String,\n default: 'td'\n },\n orderable: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n row() {\n return this.cell && this.cell.row;\n },\n itemData() {\n return this.item instanceof _model__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? this.item.data : this.item;\n },\n cells() {\n const cell = (0,vue__WEBPACK_IMPORTED_MODULE_1__.isReactive)(this.cell) && (0,vue__WEBPACK_IMPORTED_MODULE_1__.toRefs)(this.cell) || this.cell || {};\n const cells = [];\n for (var col in this.columns) cells.push({\n ...cell,\n col: Number(col)\n });\n return cells;\n },\n cellEls() {\n return [...this.$el.querySelectorAll(self.cellTag)].filter(x => x.dataset.col);\n }\n },\n methods: {\n /// Emit a 'cell' event.\n /// Event data: `{name, data, item, attr}`\n ///\n /// @param {Number} col: cell column's index\n /// @param {String} name: cell's event name\n /// @param {} data: cell's event data\n cellEmit(name, cell, data) {\n this.$emit('cell', {\n name,\n cell,\n data,\n item: this.item\n });\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `cell:${dataset.col}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('cell:')) return;\n ev.preventDefault();\n this.$emit('move', {\n from: Number(data.slice(5)),\n to: Number(ev.target.dataset.col)\n });\n },\n focus(col, from) {\n if (from) col += from.col;\n const target = this.cellEls[col];\n if (!target) return;\n const control = target.querySelector('input') || target.querySelector('button') || target.querySelector('select') || target.querySelector('a');\n control && control.focus();\n }\n },\n mounted() {\n this.$el.__row = this;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -105,7 +115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core \***************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _AList_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n\n\n\nconst Component = {\n extends: _AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n components: {\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n emit: ['cell'],\n props: {\n ..._AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].props,\n columns: Array,\n labels: Object,\n allowCreate: Boolean\n },\n data() {\n return {\n ...super.data,\n extraItem: new this.set.model()\n };\n },\n computed: {\n rowCells() {\n const cells = [];\n for (var row in this.items) cells.push({\n row,\n columns: this.columns\n });\n },\n rows() {\n return [...this.$el.querySelectorAll('tr')].filter(x => x.__row).map(x => x.__row);\n },\n rowSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-')).map(x => [x, x.slice(4)]);\n }\n },\n methods: {\n validateExtraCell() {\n if (!this.allowCreate) return;\n this.set.push(this.extraItem);\n this.extraItem = new this.set.model();\n },\n onControlKey(event, cell) {\n switch (event.key) {\n case \"ArrowUp\":\n this.focus(-1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowDown\":\n this.focus(1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n this.focus(0, -1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowRight\":\n this.focus(0, 1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n },\n /**\n * React on 'cell' event, re-emitting it with additional values:\n * - `set`: data set\n * - `row`: row index\n *\n * @param {Number} row: row index\n * @param {} data: cell's event data\n */\n onCellEvent(row, event) {\n if (event.name == 'focus') this.cellFocus(event.data, event.cell);\n this.$emit('cell', {\n ...event,\n row,\n set: this.set\n });\n },\n getCellNode(row, col) {\n const el = this.$refs[row];\n return el && el.cellEls(col);\n },\n /**\n * Focus on a cell\n */\n focus(row, col, from = null) {\n if (from) row += from.row;\n row = this.rows[row];\n row && row.focus(col, from);\n }\n }\n};\nComponent.props.itemTag.default = 'tr';\nComponent.props.listTag.default = 'tbody';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _AList_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n\n\n\nconst Component = {\n extends: _AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n components: {\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n emit: ['cell', 'colmove'],\n props: {\n ..._AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].props,\n columns: Array,\n labels: Object,\n allowCreate: Boolean\n },\n data() {\n return {\n ...super.data,\n extraItem: new this.set.model()\n };\n },\n computed: {\n rowCells() {\n const cells = [];\n for (var row in this.items) cells.push({\n row\n });\n },\n rows() {\n return [...this.$el.querySelectorAll('tr')].filter(x => x.__row).map(x => x.__row);\n },\n rowSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-')).map(x => [x, x.slice(4)]);\n }\n },\n methods: {\n validateExtraCell() {\n if (!this.allowCreate) return;\n this.set.push(this.extraItem);\n this.extraItem = new this.set.model();\n },\n onControlKey(event, cell) {\n switch (event.key) {\n case \"ArrowUp\":\n this.focus(-1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowDown\":\n this.focus(1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n this.focus(0, -1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowRight\":\n this.focus(0, 1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n },\n /**\n * React on 'cell' event, re-emitting it with additional values:\n * - `set`: data set\n * - `row`: row index\n *\n * @param {Number} row: row index\n * @param {} data: cell's event data\n */\n onCellEvent(row, event) {\n if (event.name == 'focus') this.cellFocus(event.data, event.cell);\n this.$emit('cell', {\n ...event,\n row,\n set: this.set\n });\n },\n getCellNode(row, col) {\n const el = this.$refs[row];\n return el && el.cellEls(col);\n },\n /**\n * Focus on a cell\n */\n focus(row, col, from = null) {\n if (from) row += from.row;\n row = this.rows[row];\n row && row.focus(col, from);\n }\n }\n};\nComponent.props.itemTag.default = 'tr';\nComponent.props.listTag.default = 'tbody';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -139,13 +149,23 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sou /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=template&id=3f443389": +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=template&id=3f443389 ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n key: 0\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"icon\"\n};\nconst _hoisted_3 = {\n key: 2\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.tag), {\n onClick: $options.call,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($options.buttonClass)\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [$data.promise && $props.runIcon ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.runIcon)\n }, null, 2 /* CLASS */)])) : $props.icon ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.icon)\n }, null, 2 /* CLASS */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), _ctx.$slots.default ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\")])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"onClick\", \"class\"]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AAutocomplete.vue?vue&type=template&id=32d72269": /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AAutocomplete.vue?vue&type=template&id=32d72269 ***! \***************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"dropdown-trigger is-fullwidth\"\n};\nconst _hoisted_2 = [\"name\", \"value\"];\nconst _hoisted_3 = {\n class: \"control is-expanded\"\n};\nconst _hoisted_4 = [\"placeholder\"];\nconst _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small ml-1\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-pen\"\n})], -1 /* HOISTED */);\nconst _hoisted_6 = {\n key: 0,\n class: \"is-inline-block\"\n};\nconst _hoisted_7 = {\n class: \"dropdown-menu is-fullwidth\"\n};\nconst _hoisted_8 = {\n class: \"dropdown-content\",\n style: {\n \"overflow\": \"hidden\"\n }\n};\nconst _hoisted_9 = [\"onClickCapture\", \"title\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($options.dropdownClass)\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"hidden\",\n name: $props.name,\n value: $options.selectedValue\n }, null, 8 /* PROPS */, _hoisted_2), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n placeholder: $props.placeholder,\n ref: \"input\",\n class: \"input is-fullwidth\",\n onKeydownCapture: _cache[0] || (_cache[0] = (...args) => $options.onKeyPress && $options.onKeyPress(...args)),\n onKeyup: _cache[1] || (_cache[1] = (...args) => $options.onKeyUp && $options.onKeyUp(...args)),\n onFocus: _cache[2] || (_cache[2] = $event => this.cursor < 0 && $options.move(0))\n }, null, 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_4)], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, !$options.selected]]), $options.selected ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n class: \"button is-normal is-fullwidth has-text-left is-inline-block overflow-hidden\",\n onClick: _cache[3] || (_cache[3] = $event => $options.select(-1, false, true))\n }, [_hoisted_5, $options.selected ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"button\", {\n index: $data.selectedIndex,\n item: $options.selected,\n valueField: $props.valueField,\n labelField: $props.labelField\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.selected.data[$props.labelField]), 1 /* TEXT */)])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_8, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.items, (item, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"a\", {\n key: item.id,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['dropdown-item', index == this.cursor ? 'is-active' : '']),\n onClickCapture: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $options.select(index, false, false), [\"prevent\"]),\n title: item.data[$props.labelField]\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"item\", {\n index: index,\n item: item,\n valueField: $props.valueField,\n labelField: $props.labelField\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item.data[$props.labelField]), 1 /* TEXT */)])], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, _hoisted_9);\n }), 128 /* KEYED_FRAGMENT */))])])], 2 /* CLASS */);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"control\"\n};\nconst _hoisted_2 = [\"name\", \"value\"];\nconst _hoisted_3 = [\"placeholder\"];\nconst _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small ml-1\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-pen\"\n})], -1 /* HOISTED */);\nconst _hoisted_5 = {\n key: 0,\n class: \"is-inline-block\"\n};\nconst _hoisted_6 = {\n class: \"dropdown-menu is-fullwidth\"\n};\nconst _hoisted_7 = {\n class: \"dropdown-content\",\n style: {\n \"overflow\": \"hidden\"\n }\n};\nconst _hoisted_8 = [\"data-autocomplete-index\", \"onClick\", \"title\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"hidden\",\n name: $props.name,\n value: $options.selectedValue,\n onChange: _cache[0] || (_cache[0] = $event => _ctx.$emit('change', $event))\n }, null, 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_2), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n ref: \"input\",\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"input is-fullwidth\", $props.inputClass]),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.inputValue = $event),\n placeholder: $props.placeholder,\n onKeydownCapture: _cache[2] || (_cache[2] = (...args) => $options.onKeyDown && $options.onKeyDown(...args)),\n onKeyup: _cache[3] || (_cache[3] = $event => {\n $options.onKeyUp($event);\n _ctx.$emit('keyup', $event);\n }),\n onKeydown: _cache[4] || (_cache[4] = $event => _ctx.$emit('keydown', $event)),\n onKeypress: _cache[5] || (_cache[5] = $event => _ctx.$emit('keypress', $event)),\n onFocus: _cache[6] || (_cache[6] = (...args) => $options.onInputFocus && $options.onInputFocus(...args)),\n onBlur: _cache[7] || (_cache[7] = (...args) => $options.onBlur && $options.onBlur(...args))\n }, null, 42 /* CLASS, PROPS, HYDRATE_EVENTS */, _hoisted_3), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, !$props.button || !$options.selected], [vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.inputValue]]), $options.selected && $props.button ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"a\", {\n key: 0,\n class: \"button is-normal is-fullwidth has-text-left is-inline-block overflow-hidden\",\n onClick: _cache[8] || (_cache[8] = $event => $options.select(-1, false, true))\n }, [_hoisted_4, $options.selected ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"button\", {\n index: $data.selectedIndex,\n item: $options.selected,\n valueField: $props.valueField,\n labelField: $props.labelField\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labelField && $options.selected.data[$props.labelField] || $options.selected), 1 /* TEXT */)])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($options.dropdownClass)\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.items, (item, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"a\", {\n key: item.id,\n href: \"#\",\n \"data-autocomplete-index\": index,\n onClick: $event => $options.select(index, false, false),\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['dropdown-item', index == this.cursor ? 'is-active' : '']),\n title: $props.labelField && item.data[$props.labelField] || item,\n tabindex: \"-1\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"item\", {\n index: index,\n item: item,\n valueField: $props.valueField,\n labelField: $props.labelField\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labelField && item.data[$props.labelField] || item), 1 /* TEXT */)])], 10 /* CLASS, PROPS */, _hoisted_8);\n }), 128 /* KEYED_FRAGMENT */))])])], 2 /* CLASS */)]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -165,7 +185,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*******************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" FIXME: header and footer should be inside list tags \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.listTag), {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.listClass)\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.items, (item, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.itemTag), {\n key: index,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.itemClass),\n onClick: $event => $options.select(index),\n draggable: $props.orderable,\n onDragstart: $options.onDragStart,\n onDragover: $options.onDragOver,\n onDrop: $options.onDrop\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"item\", {\n selected: index == $data.selectedIndex,\n set: $props.set,\n index: index,\n item: item\n })]),\n _: 2 /* DYNAMIC */\n }, 1064 /* PROPS, HYDRATE_EVENTS, DYNAMIC_SLOTS */, [\"class\", \"onClick\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"class\"])), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"footer\")]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" FIXME: header and footer should be inside list tags \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.listTag), {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.listClass)\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.items, (item, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.itemTag), {\n key: index,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.itemClass),\n onClick: $event => $options.select(index),\n draggable: $props.orderable,\n \"data-index\": index,\n onDragstart: $options.onDragStart,\n onDragover: $options.onDragOver,\n onDrop: $options.onDrop\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"item\", {\n selected: index == $data.selectedIndex,\n set: $props.set,\n index: index,\n item: item\n })]),\n _: 2 /* DYNAMIC */\n }, 1064 /* PROPS, HYDRATE_EVENTS, DYNAMIC_SLOTS */, [\"class\", \"onClick\", \"draggable\", \"data-index\", \"onDragstart\", \"onDragover\", \"onDrop\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"class\"])), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"footer\")]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -205,7 +225,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*****************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"playlist-editor\"\n};\nconst _hoisted_2 = {\n class: \"columns\"\n};\nconst _hoisted_3 = {\n class: \"column\"\n};\nconst _hoisted_4 = {\n class: \"column has-text-right\"\n};\nconst _hoisted_5 = {\n class: \"float-right field has-addons\"\n};\nconst _hoisted_6 = {\n class: \"control\"\n};\nconst _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-pencil\"\n})], -1 /* HOISTED */);\nconst _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"Texte\", -1 /* HOISTED */);\nconst _hoisted_9 = [_hoisted_7, _hoisted_8];\nconst _hoisted_10 = {\n class: \"control\"\n};\nconst _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"Liste\", -1 /* HOISTED */);\nconst _hoisted_13 = [_hoisted_11, _hoisted_12];\nconst _hoisted_14 = {\n class: \"page\"\n};\nconst _hoisted_15 = {\n class: \"columns mt-2\"\n};\nconst _hoisted_16 = {\n class: \"column field is-vcentered\"\n};\nconst _hoisted_17 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n}, \" Ordre\", -1 /* HOISTED */);\nconst _hoisted_18 = {\n class: \"table is-bordered is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_19 = {\n class: \"column field is-vcentered\"\n};\nconst _hoisted_20 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n}, \" Séparateur\", -1 /* HOISTED */);\nconst _hoisted_21 = {\n class: \"control is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_22 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"column\"\n}, null, -1 /* HOISTED */);\nconst _hoisted_23 = {\n class: \"page\"\n};\nconst _hoisted_24 = {\n class: \"page\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n const _component_a_rows = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-rows\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"title\")]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['button', 'p-2', $data.mode == $data.Modes.Text ? 'is-primary' : 'is-light']),\n onClick: _cache[0] || (_cache[0] = $event => $data.mode = $data.Modes.Text)\n }, _hoisted_9, 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['button', 'p-2', $data.mode == $data.Modes.List ? 'is-primary' : 'is-light']),\n onClick: _cache[1] || (_cache[1] = $event => $data.mode = $data.Modes.List)\n }, _hoisted_13, 2 /* CLASS */)])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"top\", {\n set: $data.set,\n columns: $data.columns,\n items: $options.items\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"textarea\", {\n ref: \"textarea\",\n class: \"is-fullwidth\",\n rows: \"20\",\n onChange: _cache[2] || (_cache[2] = (...args) => $options.updateList && $options.updateList(...args))\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [_hoisted_17, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"table\", _hoisted_18, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n cell: {\n columns: $data.columns\n },\n item: $data.FormatLabels,\n onMove: $options.formatMove,\n orderable: true\n }, null, 8 /* PROPS */, [\"cell\", \"item\", \"onMove\"])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_19, [_hoisted_20, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n ref: \"sep\",\n value: \"--\",\n class: \"input is-inline\",\n onChange: _cache[3] || (_cache[3] = $event => $options.updateList())\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */)])]), _hoisted_22])], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.mode == $data.Modes.Text]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_rows, {\n set: $data.set,\n columns: $data.columns,\n labels: $data.FormatLabels,\n \"allow-create\": true,\n \"list-class\": $props.listClass,\n \"item-class\": $props.itemClass,\n orderable: true,\n onMove: $options.listItemMove,\n onCell: $options.onCellEvent\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.rowsSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"set\", \"columns\", \"labels\", \"list-class\", \"item-class\", \"onMove\", \"onCell\"])], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.mode == $data.Modes.List]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", _hoisted_24, null, 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.mode == $data.Modes.Settings]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"bottom\", {\n set: $data.set,\n columns: $data.columns,\n items: $options.items\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"playlist-editor\"\n};\nconst _hoisted_2 = {\n class: \"columns\"\n};\nconst _hoisted_3 = {\n class: \"column\"\n};\nconst _hoisted_4 = {\n class: \"column has-text-right\"\n};\nconst _hoisted_5 = {\n class: \"float-right field has-addons\"\n};\nconst _hoisted_6 = {\n class: \"control\"\n};\nconst _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-pencil\"\n})], -1 /* HOISTED */);\nconst _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"Texte\", -1 /* HOISTED */);\nconst _hoisted_9 = [_hoisted_7, _hoisted_8];\nconst _hoisted_10 = {\n class: \"control\"\n};\nconst _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"Liste\", -1 /* HOISTED */);\nconst _hoisted_13 = [_hoisted_11, _hoisted_12];\nconst _hoisted_14 = {\n class: \"page\"\n};\nconst _hoisted_15 = {\n class: \"page\"\n};\nconst _hoisted_16 = {\n class: \"mt-2\"\n};\nconst _hoisted_17 = {\n class: \"field is-inline-block is-vcentered mr-3\"\n};\nconst _hoisted_18 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n}, \" Séparateur\", -1 /* HOISTED */);\nconst _hoisted_19 = {\n class: \"control is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_20 = {\n class: \"field is-inline-block is-vcentered mr-5\"\n};\nconst _hoisted_21 = {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_22 = {\n class: \"table is-bordered is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_23 = {\n key: 0,\n style: {\n \"cursor\": \"pointer\"\n }\n};\nconst _hoisted_24 = [\"onClick\"];\nconst _hoisted_25 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-left-right\"\n}, null, -1 /* HOISTED */);\nconst _hoisted_26 = [_hoisted_25];\nconst _hoisted_27 = {\n key: 0,\n class: \"field is-vcentered is-inline-block\"\n};\nconst _hoisted_28 = {\n class: \"float-right\"\n};\nconst _hoisted_29 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-rotate\"\n})], -1 /* HOISTED */);\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_rows = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-rows\");\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n const _component_a_action_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-action-button\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"title\")]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.Text ? 'is-primary' : 'is-light']),\n onClick: _cache[0] || (_cache[0] = $event => $data.page = $data.Page.Text)\n }, _hoisted_9, 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.List ? 'is-primary' : 'is-light']),\n onClick: _cache[1] || (_cache[1] = $event => $data.page = $data.Page.List)\n }, _hoisted_13, 2 /* CLASS */)])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"top\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"textarea\", {\n ref: \"textarea\",\n class: \"is-fullwidth is-size-6\",\n rows: \"20\",\n onChange: _cache[2] || (_cache[2] = (...args) => $options.updateList && $options.updateList(...args))\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */)], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.page == $data.Page.Text]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_rows, {\n set: $data.set,\n columns: $options.columns,\n labels: $props.labels,\n \"allow-create\": true,\n orderable: true,\n onMove: $options.listItemMove,\n onColmove: $options.columnMove,\n onCell: $options.onCellEvent\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.rowsSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"set\", \"columns\", \"labels\", \"onMove\", \"onColmove\", \"onCell\"])], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.page == $data.Page.List]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_17, [_hoisted_18, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n ref: \"sep\",\n class: \"input is-inline is-text-centered is-small\",\n style: {\n \"max-width\": \"5em\"\n },\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $options.separator = $event),\n onChange: _cache[4] || (_cache[4] = $event => $options.updateList())\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $options.separator]])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", _hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.columns), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"table\", _hoisted_22, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n columns: $options.columns,\n item: $props.labels,\n onMove: $options.formatMove,\n orderable: true\n }, {\n \"cell-after\": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(({\n cell\n }) => [cell.col < $options.columns.length - 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"td\", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\",\n onClick: $event => $options.formatMove({\n from: cell.col,\n to: cell.col + 1\n })\n }, _hoisted_26, 8 /* PROPS */, _hoisted_24)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"columns\", \"item\", \"onMove\"])])])]), $options.settingsChanged ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_27, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_action_button, {\n icon: \"fa fa-floppy-disk\",\n class: \"button control p-3 is-info\",\n \"run-class\": \"blink\",\n url: $props.settingsUrl,\n method: \"POST\",\n data: $data.settings,\n \"aria-label\": $props.labels.save_settings,\n onDone: _cache[5] || (_cache[5] = $event => $options.settingsSaved())\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.save_settings), 1 /* TEXT */)]),\n\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"url\", \"data\", \"aria-label\"])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_28, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n class: \"button is-warning p-2 ml-2\",\n onClick: _cache[6] || (_cache[6] = $event => $options.loadData({\n items: this.initData.items\n }, true))\n }, [_hoisted_29, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.discard_changes), 1 /* TEXT */)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"bottom\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -225,7 +245,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \******************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = [\"data-col\", \"draggable\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\", {\n item: $props.item,\n row: $options.row\n }), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.columns, (attr, col) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"td\", {\n key: col,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['cell', 'cell-' + attr]),\n \"data-col\": col,\n draggable: $props.orderable,\n onDragstart: _cache[0] || (_cache[0] = (...args) => $options.onDragStart && $options.onDragStart(...args)),\n onDragover: _cache[1] || (_cache[1] = (...args) => $options.onDragOver && $options.onDragOver(...args)),\n onDrop: _cache[2] || (_cache[2] = (...args) => $options.onDrop && $options.onDrop(...args))\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, attr, {\n item: $props.item,\n cell: $options.cells[col],\n data: $options.itemData,\n attr: attr,\n emit: $options.cellEmit,\n value: $options.itemData && $options.itemData[attr]\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.itemData && $options.itemData[attr]), 1 /* TEXT */)])], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, _hoisted_1);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\", {\n item: $props.item,\n row: $props.cell.row\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\", {\n item: $props.item,\n row: $options.row\n }), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.columns, (attr, col) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: col\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"cell-before\", {\n item: $props.item,\n cell: $options.cells[col],\n attr: attr\n }), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)($props.cellTag), {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['cell', 'cell-' + attr]),\n \"data-col\": col,\n draggable: $props.orderable,\n onDragstart: $options.onDragStart,\n onDragover: $options.onDragOver,\n onDrop: $options.onDrop\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, attr, {\n item: $props.item,\n cell: $options.cells[col],\n data: $options.itemData,\n attr: attr,\n emit: $options.cellEmit,\n value: $options.itemData && $options.itemData[attr]\n }, () => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.itemData && $options.itemData[attr]), 1 /* TEXT */)])]),\n\n _: 2 /* DYNAMIC */\n }, 1064 /* PROPS, HYDRATE_EVENTS, DYNAMIC_SLOTS */, [\"class\", \"data-col\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\"])), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"cell-after\", {\n item: $props.item,\n col: col,\n cell: $options.cells[col],\n attr: attr\n })], 64 /* STABLE_FRAGMENT */);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\", {\n item: $props.item,\n row: $options.row\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -235,7 +255,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*******************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"table is-stripped is-fullwidth\"\n};\nconst _hoisted_2 = [\"onKeydownCapture\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"table\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"thead\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-head\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.columns, col => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"th\", {\n key: col,\n style: {\n \"vertical-align\": \"middle\"\n }\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.labels[col]), 1 /* TEXT */);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-tail\")])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tbody\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.items, (item, row) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: row\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" data-index comes from AList component drag & drop \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: item,\n cell: {\n row,\n columns: _ctx.columns\n },\n \"data-index\": row,\n draggable: _ctx.orderable,\n onDragstart: _ctx.onDragStart,\n onDragover: _ctx.onDragOver,\n onDrop: _ctx.onDrop,\n onCell: _cache[0] || (_cache[0] = $event => _ctx.onCellEvent(_ctx.index, $event))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [slot == 'head' || slot == 'tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.mergeProps)({\n key: 0\n }, data))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 1,\n onKeydownCapture: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => _ctx.onControlKey($event, data.cell), [\"ctrl\"])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))], 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_2))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"data-index\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\"])], 64 /* STABLE_FRAGMENT */);\n }), 128 /* KEYED_FRAGMENT */)), _ctx.allowCreate ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_row, {\n key: 0,\n item: _ctx.extraItem,\n cell: {\n row: _ctx.items.length,\n columns: _ctx.columns\n },\n onKeypress: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withKeys)((0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)(_ctx.validateExtraCell, [\"stop\", \"prevent\"]), [\"enter\"])\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"onKeypress\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\")])]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"table is-stripped is-fullwidth\"\n};\nconst _hoisted_2 = [\"onKeydown\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"table\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"thead\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: _ctx.labels,\n columns: _ctx.columns,\n orderable: _ctx.orderable,\n onMove: _cache[0] || (_cache[0] = $event => _ctx.$emit('colmove', $event))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [_ctx.$slots['header-head'] ? {\n name: \"head\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-head\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"0\"\n } : undefined, _ctx.$slots['header-tail'] ? {\n name: \"tail\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-tail\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"1\"\n } : undefined]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"columns\", \"orderable\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tbody\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.items, (item, row) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: row\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" data-index comes from AList component drag & drop \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: item,\n cell: {\n row\n },\n columns: _ctx.columns,\n \"data-index\": row,\n draggable: _ctx.orderable,\n onDragstart: _ctx.onDragStart,\n onDragover: _ctx.onDragOver,\n onDrop: _ctx.onDrop,\n onCell: $event => _ctx.onCellEvent(row, $event)\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [slot == 'head' || slot == 'tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.mergeProps)({\n key: 0\n }, data))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 1,\n onKeydown: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => _ctx.onControlKey($event, data.cell), [\"ctrl\"])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))], 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_2))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"columns\", \"data-index\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\", \"onCell\"])], 64 /* STABLE_FRAGMENT */);\n }), 128 /* KEYED_FRAGMENT */)), _ctx.allowCreate ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_row, {\n key: 0,\n item: _ctx.extraItem,\n cell: {\n row: _ctx.items.length,\n columns: _ctx.columns\n },\n onKeypress: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withKeys)((0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)(_ctx.validateExtraCell, [\"stop\", \"prevent\"]), [\"enter\"])\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"onKeypress\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\")])]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), @@ -295,7 +315,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"admin\": function() { return /* binding */ admin; }\n/* harmony export */ });\n/* harmony import */ var _AAutocomplete_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AAutocomplete.vue */ \"./src/components/AAutocomplete.vue\");\n/* harmony import */ var _AEpisode_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AEpisode.vue */ \"./src/components/AEpisode.vue\");\n/* harmony import */ var _AList_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _APage_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./APage.vue */ \"./src/components/APage.vue\");\n/* harmony import */ var _APlayer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./APlayer.vue */ \"./src/components/APlayer.vue\");\n/* harmony import */ var _APlaylist_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./APlaylist.vue */ \"./src/components/APlaylist.vue\");\n/* harmony import */ var _APlaylistEditor_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./APlaylistEditor.vue */ \"./src/components/APlaylistEditor.vue\");\n/* harmony import */ var _AProgress_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AProgress.vue */ \"./src/components/AProgress.vue\");\n/* harmony import */ var _ASoundItem_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ASoundItem.vue */ \"./src/components/ASoundItem.vue\");\n/* harmony import */ var _AStatistics_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AStatistics.vue */ \"./src/components/AStatistics.vue\");\n/* harmony import */ var _AStreamer_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./AStreamer.vue */ \"./src/components/AStreamer.vue\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Core components\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n AAutocomplete: _AAutocomplete_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n AEpisode: _AEpisode_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n AList: _AList_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n APage: _APage_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n APlayer: _APlayer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n APlaylist: _APlaylist_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n AProgress: _AProgress_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n ASoundItem: _ASoundItem_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n});\nconst admin = {\n AStatistics: _AStatistics_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n AStreamer: _AStreamer_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n APlaylistEditor: _APlaylistEditor_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n};\n\n//# sourceURL=webpack://aircox-assets/./src/components/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"admin\": function() { return /* binding */ admin; },\n/* harmony export */ \"base\": function() { return /* binding */ base; }\n/* harmony export */ });\n/* harmony import */ var _AAutocomplete_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AAutocomplete.vue */ \"./src/components/AAutocomplete.vue\");\n/* harmony import */ var _AEpisode_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AEpisode.vue */ \"./src/components/AEpisode.vue\");\n/* harmony import */ var _AList_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _APage_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./APage.vue */ \"./src/components/APage.vue\");\n/* harmony import */ var _APlayer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./APlayer.vue */ \"./src/components/APlayer.vue\");\n/* harmony import */ var _APlaylist_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./APlaylist.vue */ \"./src/components/APlaylist.vue\");\n/* harmony import */ var _APlaylistEditor_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./APlaylistEditor.vue */ \"./src/components/APlaylistEditor.vue\");\n/* harmony import */ var _AProgress_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AProgress.vue */ \"./src/components/AProgress.vue\");\n/* harmony import */ var _ASoundItem_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ASoundItem.vue */ \"./src/components/ASoundItem.vue\");\n/* harmony import */ var _AStatistics_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AStatistics.vue */ \"./src/components/AStatistics.vue\");\n/* harmony import */ var _AStreamer_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./AStreamer.vue */ \"./src/components/AStreamer.vue\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Core components\n */\nconst base = {\n AAutocomplete: _AAutocomplete_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n AEpisode: _AEpisode_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n AList: _AList_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n APage: _APage_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n APlayer: _APlayer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n APlaylist: _APlaylist_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n AProgress: _AProgress_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n ASoundItem: _ASoundItem_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (base);\nconst admin = {\n ...base,\n AStatistics: _AStatistics_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n AStreamer: _AStreamer_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n APlaylistEditor: _APlaylistEditor_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n};\n\n//# sourceURL=webpack://aircox-assets/./src/components/index.js?"); /***/ }), @@ -379,6 +399,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extr /***/ }), +/***/ "./src/components/AActionButton.vue": +/*!******************************************!*\ + !*** ./src/components/AActionButton.vue ***! + \******************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=template&id=3f443389 */ \"./src/components/AActionButton.vue?vue&type=template&id=3f443389\");\n/* harmony import */ var _AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=script&lang=js */ \"./src/components/AActionButton.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AActionButton.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?"); + +/***/ }), + /***/ "./src/components/AAutocomplete.vue": /*!******************************************!*\ !*** ./src/components/AAutocomplete.vue ***! @@ -445,7 +475,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APl \********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modes\": function() { return /* reexport safe */ _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.Modes; }\n/* harmony export */ });\n/* harmony import */ var _APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=template&id=6e4f72a0 */ \"./src/components/APlaylistEditor.vue?vue&type=template&id=6e4f72a0\");\n/* harmony import */ var _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=script&lang=js */ \"./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylistEditor.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Page\": function() { return /* reexport safe */ _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.Page; }\n/* harmony export */ });\n/* harmony import */ var _APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=template&id=6e4f72a0 */ \"./src/components/APlaylistEditor.vue?vue&type=template&id=6e4f72a0\");\n/* harmony import */ var _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=script&lang=js */ \"./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylistEditor.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?"); /***/ }), @@ -509,6 +539,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASt /***/ }), +/***/ "./src/components/AActionButton.vue?vue&type=script&lang=js": +/*!******************************************************************!*\ + !*** ./src/components/AActionButton.vue?vue&type=script&lang=js ***! + \******************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AActionButton.vue?vue&type=script&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=script&lang=js\");\n \n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?"); + +/***/ }), + /***/ "./src/components/AAutocomplete.vue?vue&type=script&lang=js": /*!******************************************************************!*\ !*** ./src/components/AAutocomplete.vue?vue&type=script&lang=js ***! @@ -575,7 +615,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \********************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modes\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__.Modes; },\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./APlaylistEditor.vue?vue&type=script&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n \n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Page\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__.Page; },\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./APlaylistEditor.vue?vue&type=script&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n \n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?"); /***/ }), @@ -639,6 +679,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/AActionButton.vue?vue&type=template&id=3f443389": +/*!************************************************************************!*\ + !*** ./src/components/AActionButton.vue?vue&type=template&id=3f443389 ***! + \************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AActionButton.vue?vue&type=template&id=3f443389 */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AActionButton.vue?vue&type=template&id=3f443389\");\n\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?"); + +/***/ }), + /***/ "./src/components/AAutocomplete.vue?vue&type=template&id=32d72269": /*!************************************************************************!*\ !*** ./src/components/AAutocomplete.vue?vue&type=template&id=32d72269 ***! diff --git a/aircox/templates/admin/aircox/playlist_inline.html b/aircox/templates/admin/aircox/playlist_inline.html index 9255e20..5d1312e 100644 --- a/aircox/templates/admin/aircox/playlist_inline.html +++ b/aircox/templates/admin/aircox/playlist_inline.html @@ -1,17 +1,16 @@ {% comment %}Inline block to edit playlists{% endcomment %} {% load aircox aircox_admin static i18n %} -{# include "adminsortable2/edit_inline/tabular-django-4.1.html" #} {% with inline_admin_formset as admin_formset %} {% with admin_formset.formset as formset %} -

{{ admin_formset.non_form_errors }} -