";
}
-
}
return $html;
}
+
}
diff --git a/language/en-GB/en-GB.plg_fields_radicalmultifield.ini b/language/en-GB/en-GB.plg_fields_radicalmultifield.ini
index 7c0d636..8276d0a 100644
--- a/language/en-GB/en-GB.plg_fields_radicalmultifield.ini
+++ b/language/en-GB/en-GB.plg_fields_radicalmultifield.ini
@@ -1,87 +1,83 @@
PLG_RADICAL_MULTI_FIELD="Field - Radical MultiField"
PLG_FIELDS_RADICALMULTIFIELD_LABEL="Radical MultiField"
-PLG_RADICAL_MULTI_FIELD_XML_DESCRIPTION="Field that implements the enumerated array of data fields"
+PLG_RADICAL_MULTI_FIELD_XML_DESCRIPTION="Multifield for Joomla"
PLG_RADICAL_MULTI_FIELD_PARAMS_EXTEND_FIELDS_LABEL="Additional field types"
-PLG_RADICAL_MULTI_FIELD_PARAMS_EXTEND_FIELDS_DESC="Specify your field types from a new line"
+PLG_RADICAL_MULTI_FIELD_PARAMS_EXTEND_FIELDS_DESC="Enter your field types on a new line"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMIN_LABEL="Min Repeatable Count"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMIN_DESC="Set the minimum count of repeatable elements."
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_LABEL="Max Repeatable Count"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_DESC="Set the maximum count of repeatable elements."
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMIN_LABEL="Minimum number of items"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMIN_DESC="Please enter the minimum number of items to repeat."
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_LABEL="Maximum number of items"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_DESC="Please enter the maximum number of items to repeat."
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATE_LABEL="Template for site"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATE_DESC="Template that defines the appearance of the field when it is displayed on the site. If you selected a gallery or a slideshow, then the field names for the template must have the names 'image' for the image and 'alt' for the image name"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATECATEGORY_LABEL="Template for category"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATECATEGORY_DESC="Template that determines the appearance of the field when displayed on the site. If you have chosen a gallery or slideshow, then the field names for the template must have the names 'image' for the image and 'alt' for the name of the image"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATEARTICLE_LABEL="Template for item"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATEARTICLE_DESC="Template that determines the appearance of the field when displayed on the site. If you have chosen a gallery or slideshow, then the field names for the template must have the names 'image' for the image and 'alt' for the name of the image"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_LABEL="Admin view"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_LABEL="Template for edit"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_LIST="List"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_CARDS="Cards"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_TABLE="Table"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_TABLEUIKIT="Table Uikit"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_TABLEUIKIT="Uikit table"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORT_LABEL="Enable file import"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_LABEL="Only for admin"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_DESC="If only for the admin area, then at the front there will be no import for the field"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_LABEL="Name of the field where to import the file"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_DESC="Specify here the name of what you created below, this name will be used to fill"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAMEFILE_LABEL="Name of the field where to import the file name"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTEXC_LABEL="List of file extensions (separated by commas)"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTEXC_DESC="Extensions are used to display files and downloads"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_LABEL="Path for files"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_DESC="Specify the path for the files for this field here. Available variables: {user_id} b> - current user ID {year} b> - current year { month} b> - current month {day} b> - current day {hours} b> - current hour {minutes} b> - minutes {second} b> - seconds {unix} b> - UNIX time in seconds
Example usage: images/{user_id}/{year}-{month}-{day}"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORT_NOTE_LABEL="Importing files is possible only if Quantum Manager is installed. Download here. "
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORT_LABEL="Enable import files"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_LABEL="Import is only possible in the control panel"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_DESC="If you disable this option, the import button will not be shown on the site. Import is only possible in the site control panel."
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_LABEL="Field name for file import"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_DESC="Please enter the field name that will be used to import the file. This field will contain the imported file."
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAMEFILE_LABEL="Field name where to import file name"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_LABEL="File path"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_DESC="Please enter the file path for this field here. Available variables: {user_id} - Current user ID {item_id} - ID of the current material, user or contact {year} - current year {month} - current month {day} - current day {hours} - current hour {minutes} - minutes {second} - seconds {unix} - UNIX time in seconds
Usage example: images/{user_id}/{year}-{month}-{day}"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTMAXSIZE_LABEL="Maximum file size for uploading in megabytes"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTORIGINAL_LABEL="Keep originals"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTORIGINAL_DESC="In the folder where the image is located, the folder will be created _original, in which the original images will be stored"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZE_LABEL="Enable image resizing"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZE_DESC="When the resize is enabled, the images will resize under the specified maximum width and height"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEMAXWIDTH_LABEL="Maximum width in pixels"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEMAXHEIGHT_LABEL="Maximum height in pixels"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_LABEL="Generate preview images"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_DESC="Creating thumbnails for the field"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXWIDTH_LABEL="Max width preview in pixels"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXHEIGHT_LABEL="Max height preview in pixels"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAY_LABEL="Apply a watermark"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYFILE_LABEL="Watermark File"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPERCENT_LABEL="Percent sign compression"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPERCENT_VALUE_LABEL="How many percent of the original image to occupy"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPOS_LABEL="Select a position for the sign"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPADDING_LABEL="Indent from the edges of the image for the sign in pixels"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_LABEL="Generate thumbnail images"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_DESC="Create reduced size thumbnail files for field"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXWIDTH_LABEL="Maximum thumbnail width in pixels"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXHEIGHT_LABEL="Maximum thumbnail height in pixels"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_LABEL="Cutting algorithm"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_BEST_FIT="Reduce and crop in width and height as maximum allowed"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_FIT="Reduce and cut excess"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_RESIZE="Reduce and fill gaps with white"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_LABEL="Where to store thumbnails"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_CACHE="In the Joomla cache (closed from indexing in robots.txt)"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_GENERATED_IMAGES="In the images/generated folder (not closed from indexing in robots.txt)"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_RELATIVELY="Regarding the file (will be indexed if not closed manually)"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_LABEL="Fields list"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_NAME="Name for template"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_TITLE="Title"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_LABEL="List of fields"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_NAME="Field name in English"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_TITLE="Field display name"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_SELECT="Type"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_REQUIRED="Required"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_MULTIPLE="Multiselect"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_LISTVIEW="Admin view"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS="Option values"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS_DESC="Each value of the row again"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS="Other attributes for the field"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS_DESC="Specify attributes for the field in xml format, example: placeholder=\"Placeholder\""
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_MULTIPLE="Multiple choice"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_LISTVIEW="Administrative View"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS="List Values"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS_DESC="Each value on a new line"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS="Other attributes for the field (separated by spaces)"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS_DESC="Specify attributes for the field in xml format, for example placeholder="Placeholder""
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_CUSTOMXML="XML field code"
JOPTION_FROM_PLUGIN="--- From plugin ---"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_TREECATALOG_TITLE="Select directory"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_TITLE="Importing files"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_OPEN="Importing files"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_SPEED_UPLOAD="Speed upload"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_UPLOAD="Upload"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_SELECT="Select on server"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_TITLE="Select files"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_OPEN="Select files"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_SPEED_UPLOAD="Fast upload"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_INPUT_PATH="Selected path"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_SEARCH="Search by directories"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_SEARCH="Directory search"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_CREATE_PATH="Create directory"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_CLOSE="Close"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_IMPORT_START="Import files"
-PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_UPLOAD_DROP="To upload, drag the files or"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_IMPORT_START="Insert files"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_UPLOAD_DROP="Drag and drop files to upload or"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_UPLOAD_SELECT="select on your device."
-PLG_RADICAL_MULTI_FIELD_IMPORT_FILE_TO_LARGE_THAN_PHP_INI_ALLOWS="The size of the file is greater than allowed by the server."
-PLG_RADICAL_MULTI_FIELD_IMPORT_FILE_TO_LARGE_THAN_HTML_FORM_ALLOWS="The file size is larger than the field settings allow."
-PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_PARTIAL_UPLOAD="An error occurred while loading the file."
+PLG_RADICAL_MULTI_FIELD_IMPORT_FILE_TO_LARGE_THAN_PHP_INI_ALLOWS="The file is larger than the server allowed."
+PLG_RADICAL_MULTI_FIELD_IMPORT_FILE_TO_LARGE_THAN_HTML_FORM_ALLOWS="The file is larger than the field settings allow."
+PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_PARTIAL_UPLOAD="Error loading file."
PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_MIME_TYPE_UPLOAD="The specified mime file type is not allowed in the field settings."
PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_MIME_TYPE_LABEL="mime type"
-PLG_RADICAL_MULTI_FIELD_BUTTON_BACK="Back"
-PLG_RADICAL_MULTI_FIELD_BUTTON_UP="Up"
-PLG_RADICAL_MULTI_FIELD_BUTTON_GRID="Grid"
-PLG_RADICAL_MULTI_FIELD_BUTTON_LIST="List"
-PLG_RADICAL_MULTI_FIELD_BUTTON_SELECTALL="Select all"
+PLG_RADICAL_MULTI_FIELD_BUTTON_BACK="Back"
\ No newline at end of file
diff --git a/language/ru-RU/ru-RU.plg_fields_radicalmultifield.ini b/language/ru-RU/ru-RU.plg_fields_radicalmultifield.ini
index 951279c..cd6763e 100644
--- a/language/ru-RU/ru-RU.plg_fields_radicalmultifield.ini
+++ b/language/ru-RU/ru-RU.plg_fields_radicalmultifield.ini
@@ -10,8 +10,10 @@ PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMIN_DESC="Укажите миним
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_LABEL="Максимальное количество элементов"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_MULTIPLEMAX_DESC="Укажите максимальное количество повторяемых элементов."
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATE_LABEL="Шаблон для сайта"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATE_DESC="Шаблон, который определяет внешний вид поля при выводе на сайте. Если вы выбрали галерею или слайдшоу - то имена полей для шаблона обязательно должны иметь названия 'image' для изображения и 'alt' для названия изображения"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATECATEGORY_LABEL="Шаблон для категории"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATECATEGORY_DESC="Шаблон, который определяет внешний вид поля при выводе на сайте. Если вы выбрали галерею или слайдшоу - то имена полей для шаблона обязательно должны иметь названия 'image' для изображения и 'alt' для названия изображения"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATEARTICLE_LABEL="Шаблон для элемента"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TEMPLATEARTICLE_DESC="Шаблон, который определяет внешний вид поля при выводе на сайте. Если вы выбрали галерею или слайдшоу - то имена полей для шаблона обязательно должны иметь названия 'image' для изображения и 'alt' для названия изображения"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_LABEL="Способ вывода поля"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_LIST="Список"
@@ -19,33 +21,28 @@ PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_CARDS="Карточки"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_TABLE="Таблица"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_AVIEW_OPLION_TABLEUIKIT="Таблица Uikit"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORT_NOTE_LABEL="Импорт файлов возможен только при установленном Quantum Manager. Скачать можете тут."
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORT_LABEL="Разрешить импорт файлов"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_LABEL="Импорт возможен только в панели управления"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTADMIN_DESC="Если отключить эту опцию, то кнопка импорта не будет показана на сайте. Импорт возможен только в панели управления сайтом."
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_LABEL="Имя поля для импорта файла"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAME_DESC="Укажите имя поля, которое будет использоваться для импорта файла. В этом поле будет находиться импортированный файл."
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTNAMEFILE_LABEL="Имя поля куда импортировать название файла"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTEXC_LABEL="Разрешенные mime типы файлов (через запятую)"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTEXC_DESC="Расширения используются для отображения файлов и загрузки"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_LABEL="Путь для файлов"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPATH_DESC="Укажите здесь путь для файлов для этого поля. Доступные переменные: {user_id} - ID текущего пользователя {item_id} - ID текущего материала, пользователя или контакта {year} - текущий год {month} - текущий месяц {day} - текущий день {hours} - текущий час {minutes} - минуты {second} - секунды {unix} - время UNIX в секундах
Пример использования: images/{user_id}/{year}-{month}-{day}"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTMAXSIZE_LABEL="Максимальный размер файла для загрузки в мегабайтах"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTORIGINAL_LABEL="Сохранять оригиналы"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTORIGINAL_DESC="В папке, где находится изображение будет создана папка _original, в которой будет хранится оригиналы изображений"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZE_LABEL="Подгонять размер изображений"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZE_DESC="При включеном параметре, изображения будут изменять размер под указанные максимальную ширину и высоту в пикселях"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEMAXWIDTH_LABEL="Максимальная ширина в пикселях"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEMAXHEIGHT_LABEL="Максимальная высота в пикселях"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_LABEL="Генерация превью картинок"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_DESC="Создание файлов превью уменьшенного размера для поля"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXWIDTH_LABEL="Максимальная ширина превью в пикселях"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXHEIGHT_LABEL="Максимальная высота превью в пикселях"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAY_LABEL="Накладывать водяной знак"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYFILE_LABEL="Файл водяного знака"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPERCENT_LABEL="Процентное сжатие знака"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPERCENT_VALUE_LABEL="Сколько процентов от исходного изображения занимать"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPOS_LABEL="Выберите позицию для знака"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTRESIZEOVERLAYPADDING_LABEL="Отступы от краев изображения для знака в пикселях"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_LABEL="Генерация миниатюры картинок"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEW_DESC="Создание файлов миниатюры уменьшенного размера для поля"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXWIDTH_LABEL="Максимальная ширина миниатюры в пикселях"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWMAXHEIGHT_LABEL="Максимальная высота миниатюры в пикселях"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_LABEL="Алгоритм резки"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_BEST_FIT="Уменьшить и обрезать по ширине и высоте как максимально допустимые"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_FIT="Уменьшить и обрезать лишнее"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWALGORITHM_RESIZE="Уменьшить и заполнить пропуски белым цветом"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_LABEL="Где хранить миниатюры"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_CACHE="В кеше Joomla! (закрыто от индексации в robots.txt)"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_GENERATED_IMAGES="В папке images/generated (не закрыто от индексации в robots.txt)"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_FILESIMPORTPREVIEWFOLDER_RELATIVELY="Относительно файла (индексироваться будут, если не закрыто вручную)"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_LABEL="Список полей"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_NAME="Имя поля английскими буквами"
@@ -55,14 +52,17 @@ PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_REQUIRED="Обязатель
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_MULTIPLE="Мультивыбор"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_LISTVIEW="Административный вид"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS="Значения списка"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS_DESC="Каждое значение сновой строки"
-PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS="Прочие атрибуты для поля"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_OPTIONS_DESC="Каждое значение с новой строки"
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS="Прочие атрибуты для поля (через пробелы)"
PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_ATTRS_DESC="Укажите атрибуты для поля в формате xml, например placeholder=\"Placeholder\""
+PLG_RADICAL_MULTI_FIELD_FIELD_PARAMS_TYPELIST_FORM_CUSTOMXML="XML код поля"
JOPTION_FROM_PLUGIN="--- Из плагина ---"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_TREECATALOG_TITLE="Выберите каталог"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_UPLOAD="Загрузить"
+PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_SELECT="Выбрать на сервере"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_TITLE="Выбор файлов"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_OPEN="Выбрать файлы"
PLG_RADICAL_MULTI_FIELD_FIELD_IMPORT_MODAL_BUTTON_SPEED_UPLOAD="Быстрая загрузка"
@@ -80,8 +80,4 @@ PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_PARTIAL_UPLOAD="Ошибка при заг
PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_MIME_TYPE_UPLOAD="Указанный mime тип файла не разрешен в настройках поля."
PLG_RADICAL_MULTI_FIELD_IMPORT_ERROR_MIME_TYPE_LABEL="mime тип"
-PLG_RADICAL_MULTI_FIELD_BUTTON_BACK="Назад"
-PLG_RADICAL_MULTI_FIELD_BUTTON_UP="Вверх"
-PLG_RADICAL_MULTI_FIELD_BUTTON_GRID="Сеткой"
-PLG_RADICAL_MULTI_FIELD_BUTTON_LIST="Списком"
-PLG_RADICAL_MULTI_FIELD_BUTTON_SELECTALL="Выбрать все файлы"
+PLG_RADICAL_MULTI_FIELD_BUTTON_BACK="Назад"
\ No newline at end of file
diff --git a/layouts/import.php b/layouts/import.php
new file mode 100644
index 0000000..b8e2d4b
--- /dev/null
+++ b/layouts/import.php
@@ -0,0 +1,39 @@
+
+
+
'],
- // for script/link/style tags to work in IE6-8, you have to wrap
- // in a div with a non-whitespace character in front, ha!
- _default: innerHTMLBug ? [1, 'X
'];
-
-map.polyline =
-map.ellipse =
-map.polygon =
-map.circle =
-map.text =
-map.line =
-map.path =
-map.rect =
-map.g = [1, ''];
-
-/**
- * Parse `html` and return a DOM Node instance, which could be a TextNode,
- * HTML DOM Node of some kind (
for example), or a DocumentFragment
- * instance, depending on the contents of the `html` string.
- *
- * @param {String} html - HTML string to "domify"
- * @param {Document} doc - The `document` instance to create the Node for
- * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance
- * @api private
- */
-
-function parse(html, doc) {
- if ('string' != typeof html) throw new TypeError('String expected');
-
- // default to the global `document` object
- if (!doc) doc = document;
-
- // tag name
- var m = /<([\w:]+)/.exec(html);
- if (!m) return doc.createTextNode(html);
-
- html = html.replace(/^\s+|\s+$/g, ''); // Remove leading/trailing whitespace
-
- var tag = m[1];
-
- // body support
- if (tag == 'body') {
- var el = doc.createElement('html');
- el.innerHTML = html;
- return el.removeChild(el.lastChild);
- }
-
- // wrap map
- var wrap = map[tag] || map._default;
- var depth = wrap[0];
- var prefix = wrap[1];
- var suffix = wrap[2];
- var el = doc.createElement('div');
- el.innerHTML = prefix + html + suffix;
- while (depth--) el = el.lastChild;
-
- // one element
- if (el.firstChild == el.lastChild) {
- return el.removeChild(el.firstChild);
- }
-
- // several elements
- var fragment = doc.createDocumentFragment();
- while (el.firstChild) {
- fragment.appendChild(el.removeChild(el.firstChild));
- }
-
- return fragment;
-}
-
-},{}],3:[function(require,module,exports){
-/**
- * Code refactored from Mozilla Developer Network:
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
- */
-
-'use strict';
-
-function assign(target, firstSource) {
- if (target === undefined || target === null) {
- throw new TypeError('Cannot convert first argument to object');
- }
-
- var to = Object(target);
- for (var i = 1; i < arguments.length; i++) {
- var nextSource = arguments[i];
- if (nextSource === undefined || nextSource === null) {
- continue;
- }
-
- var keysArray = Object.keys(Object(nextSource));
- for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
- var nextKey = keysArray[nextIndex];
- var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
- if (desc !== undefined && desc.enumerable) {
- to[nextKey] = nextSource[nextKey];
- }
- }
- }
- return to;
-}
-
-function polyfill() {
- if (!Object.assign) {
- Object.defineProperty(Object, 'assign', {
- enumerable: false,
- configurable: true,
- writable: true,
- value: assign
- });
- }
-}
-
-module.exports = {
- assign: assign,
- polyfill: polyfill
-};
-
-},{}],4:[function(require,module,exports){
-// get successful control from form and assemble into object
-// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2
-
-// types which indicate a submit action and are not successful controls
-// these will be ignored
-var k_r_submitter = /^(?:submit|button|image|reset|file)$/i;
-
-// node names which could be successful controls
-var k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;
-
-// Matches bracket notation.
-var brackets = /(\[[^\[\]]*\])/g;
-
-// serializes form fields
-// @param form MUST be an HTMLForm element
-// @param options is an optional argument to configure the serialization. Default output
-// with no options specified is a url encoded string
-// - hash: [true | false] Configure the output type. If true, the output will
-// be a js object.
-// - serializer: [function] Optional serializer function to override the default one.
-// The function takes 3 arguments (result, key, value) and should return new result
-// hash and url encoded str serializers are provided with this module
-// - disabled: [true | false]. If true serialize disabled fields.
-// - empty: [true | false]. If true serialize empty fields
-function serialize(form, options) {
- if (typeof options != 'object') {
- options = { hash: !!options };
- }
- else if (options.hash === undefined) {
- options.hash = true;
- }
-
- var result = (options.hash) ? {} : '';
- var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);
-
- var elements = form && form.elements ? form.elements : [];
-
- //Object store each radio and set if it's empty or not
- var radio_store = Object.create(null);
-
- for (var i=0 ; i', ''],
- tr: [2, '
', '
'],
- col: [2, '
', '
'],
- // for script/link/style tags to work in IE6-8, you have to wrap
- // in a div with a non-whitespace character in front, ha!
- _default: innerHTMLBug ? [1, 'X
'];
-
-map.polyline =
-map.ellipse =
-map.polygon =
-map.circle =
-map.text =
-map.line =
-map.path =
-map.rect =
-map.g = [1, ''];
-
-/**
- * Parse `html` and return a DOM Node instance, which could be a TextNode,
- * HTML DOM Node of some kind (
for example), or a DocumentFragment
- * instance, depending on the contents of the `html` string.
- *
- * @param {String} html - HTML string to "domify"
- * @param {Document} doc - The `document` instance to create the Node for
- * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance
- * @api private
- */
-
-function parse(html, doc) {
- if ('string' != typeof html) throw new TypeError('String expected');
-
- // default to the global `document` object
- if (!doc) doc = document;
-
- // tag name
- var m = /<([\w:]+)/.exec(html);
- if (!m) return doc.createTextNode(html);
-
- html = html.replace(/^\s+|\s+$/g, ''); // Remove leading/trailing whitespace
-
- var tag = m[1];
-
- // body support
- if (tag == 'body') {
- var el = doc.createElement('html');
- el.innerHTML = html;
- return el.removeChild(el.lastChild);
- }
-
- // wrap map
- var wrap = map[tag] || map._default;
- var depth = wrap[0];
- var prefix = wrap[1];
- var suffix = wrap[2];
- var el = doc.createElement('div');
- el.innerHTML = prefix + html + suffix;
- while (depth--) el = el.lastChild;
-
- // one element
- if (el.firstChild == el.lastChild) {
- return el.removeChild(el.firstChild);
- }
-
- // several elements
- var fragment = doc.createDocumentFragment();
- while (el.firstChild) {
- fragment.appendChild(el.removeChild(el.firstChild));
- }
-
- return fragment;
-}
-
-},{}],2:[function(require,module,exports){
-// get successful control from form and assemble into object
-// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2
-
-// types which indicate a submit action and are not successful controls
-// these will be ignored
-var k_r_submitter = /^(?:submit|button|image|reset|file)$/i;
-
-// node names which could be successful controls
-var k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;
-
-// Matches bracket notation.
-var brackets = /(\[[^\[\]]*\])/g;
-
-// serializes form fields
-// @param form MUST be an HTMLForm element
-// @param options is an optional argument to configure the serialization. Default output
-// with no options specified is a url encoded string
-// - hash: [true | false] Configure the output type. If true, the output will
-// be a js object.
-// - serializer: [function] Optional serializer function to override the default one.
-// The function takes 3 arguments (result, key, value) and should return new result
-// hash and url encoded str serializers are provided with this module
-// - disabled: [true | false]. If true serialize disabled fields.
-// - empty: [true | false]. If true serialize empty fields
-function serialize(form, options) {
- if (typeof options != 'object') {
- options = { hash: !!options };
- }
- else if (options.hash === undefined) {
- options.hash = true;
- }
-
- var result = (options.hash) ? {} : '';
- var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);
-
- var elements = form && form.elements ? form.elements : [];
-
- //Object store each radio and set if it's empty or not
- var radio_store = Object.create(null);
-
- for (var i=0 ; i' + vex._escapeHtml(options.label || defaults.label) + '',
- input: ''
- }
- options = Object.assign(defaults, dynamicDefaults, options)
- // Pluck the value of the "vex" input field as the return value for prompt's callback
- // More closely mimics "window.prompt" in that a single string is returned
- var callback = options.callback
- options.callback = function promptCallback (value) {
- if (typeof value === 'object') {
- var keys = Object.keys(value)
- value = keys.length ? value[keys[0]] : ''
- }
- callback(value)
- }
- return this.open(options)
- }
- }
-
- // Now define any additional data that's not the direct dialog API
- dialog.buttons = {
- YES: {
- text: 'OK',
- type: 'submit',
- className: 'vex-dialog-button-primary',
- click: function yesClick () {
- this.value = true
- }
- },
-
- NO: {
- text: 'Cancel',
- type: 'button',
- className: 'vex-dialog-button-secondary',
- click: function noClick () {
- this.value = false
- this.close()
- }
- }
- }
-
- dialog.defaultOptions = {
- callback: function () {},
- afterOpen: function () {},
- message: '',
- input: '',
- buttons: [
- dialog.buttons.YES,
- dialog.buttons.NO
- ],
- showCloseButton: false,
- onSubmit: function onDialogSubmit (e) {
- e.preventDefault()
- if (this.options.input) {
- this.value = serialize(this.form, { hash: true })
- }
- return this.close()
- },
- focusFirstInput: true
- }
-
- dialog.defaultAlertOptions = {
- buttons: [
- dialog.buttons.YES
- ]
- }
-
- dialog.defaultPromptOptions = {
- label: 'Prompt:',
- placeholder: '',
- value: ''
- }
-
- dialog.defaultConfirmOptions = {}
-
- return dialog
-}
-
-module.exports = plugin
-
-},{"domify":1,"form-serialize":2}]},{},[3])(3)
-});
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"domify":2,"form-serialize":4}],6:[function(require,module,exports){
-var vex = require('./vex')
-vex.registerPlugin(require('vex-dialog'))
-module.exports = vex
-
-},{"./vex":7,"vex-dialog":5}],7:[function(require,module,exports){
-// classList polyfill for old browsers
-require('classlist-polyfill')
-// Object.assign polyfill
-require('es6-object-assign').polyfill()
-
-// String to DOM function
-var domify = require('domify')
-
-// Use the DOM's HTML parsing to escape any dangerous strings
-var escapeHtml = function escapeHtml (str) {
- if (typeof str !== 'undefined') {
- var div = document.createElement('div')
- div.appendChild(document.createTextNode(str))
- return div.innerHTML
- } else {
- return ''
- }
-}
-
-// Utility function to add space-delimited class strings to a DOM element's classList
-var addClasses = function addClasses (el, classStr) {
- if (typeof classStr !== 'string' || classStr.length === 0) {
- return
- }
- var classes = classStr.split(' ')
- for (var i = 0; i < classes.length; i++) {
- var className = classes[i]
- if (className.length) {
- el.classList.add(className)
- }
- }
-}
-
-// Detect CSS Animation End Support
-// https://github.com/limonte/sweetalert2/blob/99bd539f85e15ac170f69d35001d12e092ef0054/src/utils/dom.js#L194
-var animationEndEvent = (function detectAnimationEndEvent () {
- var el = document.createElement('div')
- var eventNames = {
- 'animation': 'animationend',
- 'WebkitAnimation': 'webkitAnimationEnd',
- 'MozAnimation': 'animationend',
- 'OAnimation': 'oanimationend',
- 'msAnimation': 'MSAnimationEnd'
- }
- for (var i in eventNames) {
- if (el.style[i] !== undefined) {
- return eventNames[i]
- }
- }
- return false
-})()
-
-// vex base CSS classes
-var baseClassNames = {
- vex: 'vex',
- content: 'vex-content',
- overlay: 'vex-overlay',
- close: 'vex-close',
- closing: 'vex-closing',
- open: 'vex-open'
-}
-
-// Private lookup table of all open vex objects, keyed by id
-var vexes = {}
-var globalId = 1
-
-// Private boolean to assist the escapeButtonCloses option
-var isEscapeActive = false
-
-// vex itself is an object that exposes a simple API to open and close vex objects in various ways
-var vex = {
- open: function open (opts) {
- // Check for usage of deprecated options, and log a warning
- var warnDeprecated = function warnDeprecated (prop) {
- console.warn('The "' + prop + '" property is deprecated in vex 3. Use CSS classes and the appropriate "ClassName" options, instead.')
- console.warn('See http://github.hubspot.com/vex/api/advanced/#options')
- }
- if (opts.css) {
- warnDeprecated('css')
- }
- if (opts.overlayCSS) {
- warnDeprecated('overlayCSS')
- }
- if (opts.contentCSS) {
- warnDeprecated('contentCSS')
- }
- if (opts.closeCSS) {
- warnDeprecated('closeCSS')
- }
-
- // The dialog instance
- var vexInstance = {}
-
- // Set id
- vexInstance.id = globalId++
-
- // Store internally
- vexes[vexInstance.id] = vexInstance
-
- // Set state
- vexInstance.isOpen = true
-
- // Close function on the vex instance
- // This is how all API functions should close individual vexes
- vexInstance.close = function instanceClose () {
- // Check state
- if (!this.isOpen) {
- return true
- }
-
- var options = this.options
-
- // escapeButtonCloses is checked first
- if (isEscapeActive && !options.escapeButtonCloses) {
- return false
- }
-
- // Allow the user to validate any info or abort the close with the beforeClose callback
- var shouldClose = (function shouldClose () {
- // Call before close callback
- if (options.beforeClose) {
- return options.beforeClose.call(this)
- }
- // Otherwise indicate that it's ok to continue with close
- return true
- }.bind(this)())
-
- // If beforeClose() fails, abort the close
- if (shouldClose === false) {
- return false
- }
-
- // Update state
- this.isOpen = false
-
- // Detect if the content el has any CSS animations defined
- var style = window.getComputedStyle(this.contentEl)
- function hasAnimationPre (prefix) {
- return style.getPropertyValue(prefix + 'animation-name') !== 'none' && style.getPropertyValue(prefix + 'animation-duration') !== '0s'
- }
- var hasAnimation = hasAnimationPre('') || hasAnimationPre('-webkit-') || hasAnimationPre('-moz-') || hasAnimationPre('-o-')
-
- // Define the function that will actually close the instance
- var close = function close () {
- if (!this.rootEl.parentNode) {
- return
- }
- // Run once
- this.rootEl.removeEventListener(animationEndEvent, close)
- this.overlayEl.removeEventListener(animationEndEvent, close)
- // Remove from lookup table (prevent memory leaks)
- delete vexes[this.id]
- // Remove the dialog from the DOM
- this.rootEl.parentNode.removeChild(this.rootEl)
- // Remove the overlay from the DOM
- this.bodyEl.removeChild(this.overlayEl)
- // Call after close callback
- if (options.afterClose) {
- options.afterClose.call(this)
- }
- // Remove styling from the body, if no more vexes are open
- if (Object.keys(vexes).length === 0) {
- document.body.classList.remove(baseClassNames.open)
- }
- }.bind(this)
-
- // Close the vex
- if (animationEndEvent && hasAnimation) {
- // Setup the end event listener, to remove the el from the DOM
- this.rootEl.addEventListener(animationEndEvent, close)
- this.overlayEl.addEventListener(animationEndEvent, close)
- // Add the closing class to the dialog, showing the close animation
- this.rootEl.classList.add(baseClassNames.closing)
- this.overlayEl.classList.add(baseClassNames.closing)
- } else {
- close()
- }
-
- return true
- }
-
- // Allow strings as content
- if (typeof opts === 'string') {
- opts = {
- content: opts
- }
- }
-
- // `content` is unsafe internally, so translate
- // safe default: HTML-escape the content before passing it through
- if (opts.unsafeContent && !opts.content) {
- opts.content = opts.unsafeContent
- } else if (opts.content) {
- opts.content = escapeHtml(opts.content)
- }
-
- // Store options on instance for future reference
- var options = vexInstance.options = Object.assign({}, vex.defaultOptions, opts)
-
- // Get Body Element
- var bodyEl = vexInstance.bodyEl = document.getElementsByTagName('body')[0]
-
- // vex root
- var rootEl = vexInstance.rootEl = document.createElement('div')
- rootEl.classList.add(baseClassNames.vex)
- addClasses(rootEl, options.className)
-
- // Overlay
- var overlayEl = vexInstance.overlayEl = document.createElement('div')
- overlayEl.classList.add(baseClassNames.overlay)
- addClasses(overlayEl, options.overlayClassName)
- if (options.overlayClosesOnClick) {
- rootEl.addEventListener('click', function overlayClickListener (e) {
- if (e.target === rootEl) {
- vexInstance.close()
- }
- })
- }
- bodyEl.appendChild(overlayEl)
-
- // Content
- var contentEl = vexInstance.contentEl = document.createElement('div')
- contentEl.classList.add(baseClassNames.content)
- addClasses(contentEl, options.contentClassName)
- contentEl.appendChild(options.content instanceof window.Node ? options.content : domify(options.content))
- rootEl.appendChild(contentEl)
-
- // Close button
- if (options.showCloseButton) {
- var closeEl = vexInstance.closeEl = document.createElement('div')
- closeEl.classList.add(baseClassNames.close)
- addClasses(closeEl, options.closeClassName)
- closeEl.addEventListener('click', vexInstance.close.bind(vexInstance))
- contentEl.appendChild(closeEl)
- }
-
- // Add to DOM
- document.querySelector(options.appendLocation).appendChild(rootEl)
-
- // Call after open callback
- if (options.afterOpen) {
- options.afterOpen.call(vexInstance)
- }
-
- // Apply styling to the body
- document.body.classList.add(baseClassNames.open)
-
- // Return the created vex instance
- return vexInstance
- },
-
- // A top-level vex.close function to close dialogs by reference or id
- close: function close (vexOrId) {
- var id
- if (vexOrId.id) {
- id = vexOrId.id
- } else if (typeof vexOrId === 'string') {
- id = vexOrId
- } else {
- throw new TypeError('close requires a vex object or id string')
- }
- if (!vexes[id]) {
- return false
- }
- return vexes[id].close()
- },
-
- // Close the most recently created/opened vex
- closeTop: function closeTop () {
- var ids = Object.keys(vexes)
- if (!ids.length) {
- return false
- }
- return vexes[ids[ids.length - 1]].close()
- },
-
- // Close every vex!
- closeAll: function closeAll () {
- for (var id in vexes) {
- this.close(id)
- }
- return true
- },
-
- // A getter for the internal lookup table
- getAll: function getAll () {
- return vexes
- },
-
- // A getter for the internal lookup table
- getById: function getById (id) {
- return vexes[id]
- }
-}
-
-// Close top vex on escape
-window.addEventListener('keyup', function vexKeyupListener (e) {
- if (e.keyCode === 27) {
- isEscapeActive = true
- vex.closeTop()
- isEscapeActive = false
- }
-})
-
-// Close all vexes on history pop state (useful in single page apps)
-window.addEventListener('popstate', function () {
- if (vex.defaultOptions.closeAllOnPopState) {
- vex.closeAll()
- }
-})
-
-vex.defaultOptions = {
- content: '',
- showCloseButton: true,
- escapeButtonCloses: true,
- overlayClosesOnClick: true,
- appendLocation: 'body',
- className: '',
- overlayClassName: '',
- contentClassName: '',
- closeClassName: '',
- closeAllOnPopState: true
-}
-
-// TODO Loading symbols?
-
-// Include escapeHtml function on the library object
-Object.defineProperty(vex, '_escapeHtml', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: escapeHtml
-})
-
-// Plugin system!
-vex.registerPlugin = function registerPlugin (pluginFn, name) {
- var plugin = pluginFn(vex)
- var pluginName = name || plugin.name
- if (vex[pluginName]) {
- throw new Error('Plugin ' + name + ' is already registered.')
- }
- vex[pluginName] = plugin
-}
-
-module.exports = vex
-
-},{"classlist-polyfill":1,"domify":2,"es6-object-assign":3}]},{},[6])(6)
-});
\ No newline at end of file
diff --git a/media/libs/vex/dist/js/vex.combined.min.js b/media/libs/vex/dist/js/vex.combined.min.js
deleted file mode 100644
index f313ede..0000000
--- a/media/libs/vex/dist/js/vex.combined.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! vex.combined.js: vex 4.1.0, vex-dialog 1.0.7 */
-
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).vex=e()}}(function(){return function e(t,n,o){function i(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(r)return r(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return i(n||e)},u,u.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a
"],r.polyline=r.ellipse=r.polygon=r.circle=r.text=r.line=r.path=r.rect=r.g=[1,'"]},{}],3:[function(e,t,n){"use strict";function o(e,t){if(null==e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),o=1;o
'],
- // for script/link/style tags to work in IE6-8, you have to wrap
- // in a div with a non-whitespace character in front, ha!
- _default: innerHTMLBug ? [1, 'X
'];
-
-map.polyline =
-map.ellipse =
-map.polygon =
-map.circle =
-map.text =
-map.line =
-map.path =
-map.rect =
-map.g = [1, ''];
-
-/**
- * Parse `html` and return a DOM Node instance, which could be a TextNode,
- * HTML DOM Node of some kind (
for example), or a DocumentFragment
- * instance, depending on the contents of the `html` string.
- *
- * @param {String} html - HTML string to "domify"
- * @param {Document} doc - The `document` instance to create the Node for
- * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance
- * @api private
- */
-
-function parse(html, doc) {
- if ('string' != typeof html) throw new TypeError('String expected');
-
- // default to the global `document` object
- if (!doc) doc = document;
-
- // tag name
- var m = /<([\w:]+)/.exec(html);
- if (!m) return doc.createTextNode(html);
-
- html = html.replace(/^\s+|\s+$/g, ''); // Remove leading/trailing whitespace
-
- var tag = m[1];
-
- // body support
- if (tag == 'body') {
- var el = doc.createElement('html');
- el.innerHTML = html;
- return el.removeChild(el.lastChild);
- }
-
- // wrap map
- var wrap = map[tag] || map._default;
- var depth = wrap[0];
- var prefix = wrap[1];
- var suffix = wrap[2];
- var el = doc.createElement('div');
- el.innerHTML = prefix + html + suffix;
- while (depth--) el = el.lastChild;
-
- // one element
- if (el.firstChild == el.lastChild) {
- return el.removeChild(el.firstChild);
- }
-
- // several elements
- var fragment = doc.createDocumentFragment();
- while (el.firstChild) {
- fragment.appendChild(el.removeChild(el.firstChild));
- }
-
- return fragment;
-}
-
-},{}],3:[function(require,module,exports){
-/**
- * Code refactored from Mozilla Developer Network:
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
- */
-
-'use strict';
-
-function assign(target, firstSource) {
- if (target === undefined || target === null) {
- throw new TypeError('Cannot convert first argument to object');
- }
-
- var to = Object(target);
- for (var i = 1; i < arguments.length; i++) {
- var nextSource = arguments[i];
- if (nextSource === undefined || nextSource === null) {
- continue;
- }
-
- var keysArray = Object.keys(Object(nextSource));
- for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
- var nextKey = keysArray[nextIndex];
- var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
- if (desc !== undefined && desc.enumerable) {
- to[nextKey] = nextSource[nextKey];
- }
- }
- }
- return to;
-}
-
-function polyfill() {
- if (!Object.assign) {
- Object.defineProperty(Object, 'assign', {
- enumerable: false,
- configurable: true,
- writable: true,
- value: assign
- });
- }
-}
-
-module.exports = {
- assign: assign,
- polyfill: polyfill
-};
-
-},{}],4:[function(require,module,exports){
-// classList polyfill for old browsers
-require('classlist-polyfill')
-// Object.assign polyfill
-require('es6-object-assign').polyfill()
-
-// String to DOM function
-var domify = require('domify')
-
-// Use the DOM's HTML parsing to escape any dangerous strings
-var escapeHtml = function escapeHtml (str) {
- if (typeof str !== 'undefined') {
- var div = document.createElement('div')
- div.appendChild(document.createTextNode(str))
- return div.innerHTML
- } else {
- return ''
- }
-}
-
-// Utility function to add space-delimited class strings to a DOM element's classList
-var addClasses = function addClasses (el, classStr) {
- if (typeof classStr !== 'string' || classStr.length === 0) {
- return
- }
- var classes = classStr.split(' ')
- for (var i = 0; i < classes.length; i++) {
- var className = classes[i]
- if (className.length) {
- el.classList.add(className)
- }
- }
-}
-
-// Detect CSS Animation End Support
-// https://github.com/limonte/sweetalert2/blob/99bd539f85e15ac170f69d35001d12e092ef0054/src/utils/dom.js#L194
-var animationEndEvent = (function detectAnimationEndEvent () {
- var el = document.createElement('div')
- var eventNames = {
- 'animation': 'animationend',
- 'WebkitAnimation': 'webkitAnimationEnd',
- 'MozAnimation': 'animationend',
- 'OAnimation': 'oanimationend',
- 'msAnimation': 'MSAnimationEnd'
- }
- for (var i in eventNames) {
- if (el.style[i] !== undefined) {
- return eventNames[i]
- }
- }
- return false
-})()
-
-// vex base CSS classes
-var baseClassNames = {
- vex: 'vex',
- content: 'vex-content',
- overlay: 'vex-overlay',
- close: 'vex-close',
- closing: 'vex-closing',
- open: 'vex-open'
-}
-
-// Private lookup table of all open vex objects, keyed by id
-var vexes = {}
-var globalId = 1
-
-// Private boolean to assist the escapeButtonCloses option
-var isEscapeActive = false
-
-// vex itself is an object that exposes a simple API to open and close vex objects in various ways
-var vex = {
- open: function open (opts) {
- // Check for usage of deprecated options, and log a warning
- var warnDeprecated = function warnDeprecated (prop) {
- console.warn('The "' + prop + '" property is deprecated in vex 3. Use CSS classes and the appropriate "ClassName" options, instead.')
- console.warn('See http://github.hubspot.com/vex/api/advanced/#options')
- }
- if (opts.css) {
- warnDeprecated('css')
- }
- if (opts.overlayCSS) {
- warnDeprecated('overlayCSS')
- }
- if (opts.contentCSS) {
- warnDeprecated('contentCSS')
- }
- if (opts.closeCSS) {
- warnDeprecated('closeCSS')
- }
-
- // The dialog instance
- var vexInstance = {}
-
- // Set id
- vexInstance.id = globalId++
-
- // Store internally
- vexes[vexInstance.id] = vexInstance
-
- // Set state
- vexInstance.isOpen = true
-
- // Close function on the vex instance
- // This is how all API functions should close individual vexes
- vexInstance.close = function instanceClose () {
- // Check state
- if (!this.isOpen) {
- return true
- }
-
- var options = this.options
-
- // escapeButtonCloses is checked first
- if (isEscapeActive && !options.escapeButtonCloses) {
- return false
- }
-
- // Allow the user to validate any info or abort the close with the beforeClose callback
- var shouldClose = (function shouldClose () {
- // Call before close callback
- if (options.beforeClose) {
- return options.beforeClose.call(this)
- }
- // Otherwise indicate that it's ok to continue with close
- return true
- }.bind(this)())
-
- // If beforeClose() fails, abort the close
- if (shouldClose === false) {
- return false
- }
-
- // Update state
- this.isOpen = false
-
- // Detect if the content el has any CSS animations defined
- var style = window.getComputedStyle(this.contentEl)
- function hasAnimationPre (prefix) {
- return style.getPropertyValue(prefix + 'animation-name') !== 'none' && style.getPropertyValue(prefix + 'animation-duration') !== '0s'
- }
- var hasAnimation = hasAnimationPre('') || hasAnimationPre('-webkit-') || hasAnimationPre('-moz-') || hasAnimationPre('-o-')
-
- // Define the function that will actually close the instance
- var close = function close () {
- if (!this.rootEl.parentNode) {
- return
- }
- // Run once
- this.rootEl.removeEventListener(animationEndEvent, close)
- this.overlayEl.removeEventListener(animationEndEvent, close)
- // Remove from lookup table (prevent memory leaks)
- delete vexes[this.id]
- // Remove the dialog from the DOM
- this.rootEl.parentNode.removeChild(this.rootEl)
- // Remove the overlay from the DOM
- this.bodyEl.removeChild(this.overlayEl)
- // Call after close callback
- if (options.afterClose) {
- options.afterClose.call(this)
- }
- // Remove styling from the body, if no more vexes are open
- if (Object.keys(vexes).length === 0) {
- document.body.classList.remove(baseClassNames.open)
- }
- }.bind(this)
-
- // Close the vex
- if (animationEndEvent && hasAnimation) {
- // Setup the end event listener, to remove the el from the DOM
- this.rootEl.addEventListener(animationEndEvent, close)
- this.overlayEl.addEventListener(animationEndEvent, close)
- // Add the closing class to the dialog, showing the close animation
- this.rootEl.classList.add(baseClassNames.closing)
- this.overlayEl.classList.add(baseClassNames.closing)
- } else {
- close()
- }
-
- return true
- }
-
- // Allow strings as content
- if (typeof opts === 'string') {
- opts = {
- content: opts
- }
- }
-
- // `content` is unsafe internally, so translate
- // safe default: HTML-escape the content before passing it through
- if (opts.unsafeContent && !opts.content) {
- opts.content = opts.unsafeContent
- } else if (opts.content) {
- opts.content = escapeHtml(opts.content)
- }
-
- // Store options on instance for future reference
- var options = vexInstance.options = Object.assign({}, vex.defaultOptions, opts)
-
- // Get Body Element
- var bodyEl = vexInstance.bodyEl = document.getElementsByTagName('body')[0]
-
- // vex root
- var rootEl = vexInstance.rootEl = document.createElement('div')
- rootEl.classList.add(baseClassNames.vex)
- addClasses(rootEl, options.className)
-
- // Overlay
- var overlayEl = vexInstance.overlayEl = document.createElement('div')
- overlayEl.classList.add(baseClassNames.overlay)
- addClasses(overlayEl, options.overlayClassName)
- if (options.overlayClosesOnClick) {
- rootEl.addEventListener('click', function overlayClickListener (e) {
- if (e.target === rootEl) {
- vexInstance.close()
- }
- })
- }
- bodyEl.appendChild(overlayEl)
-
- // Content
- var contentEl = vexInstance.contentEl = document.createElement('div')
- contentEl.classList.add(baseClassNames.content)
- addClasses(contentEl, options.contentClassName)
- contentEl.appendChild(options.content instanceof window.Node ? options.content : domify(options.content))
- rootEl.appendChild(contentEl)
-
- // Close button
- if (options.showCloseButton) {
- var closeEl = vexInstance.closeEl = document.createElement('div')
- closeEl.classList.add(baseClassNames.close)
- addClasses(closeEl, options.closeClassName)
- closeEl.addEventListener('click', vexInstance.close.bind(vexInstance))
- contentEl.appendChild(closeEl)
- }
-
- // Add to DOM
- document.querySelector(options.appendLocation).appendChild(rootEl)
-
- // Call after open callback
- if (options.afterOpen) {
- options.afterOpen.call(vexInstance)
- }
-
- // Apply styling to the body
- document.body.classList.add(baseClassNames.open)
-
- // Return the created vex instance
- return vexInstance
- },
-
- // A top-level vex.close function to close dialogs by reference or id
- close: function close (vexOrId) {
- var id
- if (vexOrId.id) {
- id = vexOrId.id
- } else if (typeof vexOrId === 'string') {
- id = vexOrId
- } else {
- throw new TypeError('close requires a vex object or id string')
- }
- if (!vexes[id]) {
- return false
- }
- return vexes[id].close()
- },
-
- // Close the most recently created/opened vex
- closeTop: function closeTop () {
- var ids = Object.keys(vexes)
- if (!ids.length) {
- return false
- }
- return vexes[ids[ids.length - 1]].close()
- },
-
- // Close every vex!
- closeAll: function closeAll () {
- for (var id in vexes) {
- this.close(id)
- }
- return true
- },
-
- // A getter for the internal lookup table
- getAll: function getAll () {
- return vexes
- },
-
- // A getter for the internal lookup table
- getById: function getById (id) {
- return vexes[id]
- }
-}
-
-// Close top vex on escape
-window.addEventListener('keyup', function vexKeyupListener (e) {
- if (e.keyCode === 27) {
- isEscapeActive = true
- vex.closeTop()
- isEscapeActive = false
- }
-})
-
-// Close all vexes on history pop state (useful in single page apps)
-window.addEventListener('popstate', function () {
- if (vex.defaultOptions.closeAllOnPopState) {
- vex.closeAll()
- }
-})
-
-vex.defaultOptions = {
- content: '',
- showCloseButton: true,
- escapeButtonCloses: true,
- overlayClosesOnClick: true,
- appendLocation: 'body',
- className: '',
- overlayClassName: '',
- contentClassName: '',
- closeClassName: '',
- closeAllOnPopState: true
-}
-
-// TODO Loading symbols?
-
-// Include escapeHtml function on the library object
-Object.defineProperty(vex, '_escapeHtml', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: escapeHtml
-})
-
-// Plugin system!
-vex.registerPlugin = function registerPlugin (pluginFn, name) {
- var plugin = pluginFn(vex)
- var pluginName = name || plugin.name
- if (vex[pluginName]) {
- throw new Error('Plugin ' + name + ' is already registered.')
- }
- vex[pluginName] = plugin
-}
-
-module.exports = vex
-
-},{"classlist-polyfill":1,"domify":2,"es6-object-assign":3}]},{},[4])(4)
-});
\ No newline at end of file
diff --git a/media/libs/vex/dist/js/vex.min.js b/media/libs/vex/dist/js/vex.min.js
deleted file mode 100644
index 8fa783b..0000000
--- a/media/libs/vex/dist/js/vex.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! vex.js 4.1.0 */
-
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).vex=e()}}(function(){return function e(t,n,o){function i(s,l){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!l&&a)return a(s,!0);if(r)return r(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var d=n[s]={exports:{}};t[s][0].call(d.exports,function(e){var n=t[s][1][e];return i(n||e)},d,d.exports,e,t,n,o)}return n[s].exports}for(var r="function"==typeof require&&require,s=0;s