/** * Единый медиа-пикер /adminx. Один компонент для всех мест, где выбирают файл * из медиатеки (поля документов, значения по умолчанию рубрик, навигация, * визуальный редактор). Дергает общий эндпоинт GET /media/picker. * * Использование: * Adminx.MediaPicker.open({ * type: 'image' | 'file' | 'all', // что показывать (по умолчанию image) * dir: '/uploads', // стартовая папка * title, description, // тексты шапки (опц.) * onPick: function (file) { ... }, // выбран файл из медиатеки * onFolder: function (dir) { ... }, // выбрана открытая папка (опц.) * onUrl: function (url) { ... } // опц.: показать «вставить по ссылке» * }); */ (function (window, document) { 'use strict'; var Adminx = window.Adminx || (window.Adminx = {}); function esc(value) { return String(value == null ? '' : value).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); } Adminx.MediaPicker = { open: function (options) { options = options || {}; var type = (options.type === 'file' || options.type === 'all') ? options.type : 'image'; var onPick = typeof options.onPick === 'function' ? options.onPick : function () {}; var onFolder = typeof options.onFolder === 'function' ? options.onFolder : null; var onUrl = typeof options.onUrl === 'function' ? options.onUrl : null; var base = (Adminx.base && Adminx.base()) || ''; var title = options.title || 'Выбрать файл'; var description = options.description || (type === 'image' ? 'Выберите изображение из медиатеки.' : 'Выберите файл из медиатеки.'); var placeholder = type === 'image' ? 'Поиск изображений' : 'Поиск файлов'; var overlay = document.createElement('div'); overlay.className = 'overlay media-picker-overlay'; overlay.innerHTML = '
' + esc(description) + '