/**
* Исполняемый код приложения "Сервис загрузки изображений". Состоит из двух частей
* 1. "Стэк" - содержит код необходимый для работы стэков
* 2. "Итем" - содержит код для обработки страницы изображения
*/
function picStandAloneAgileWrapper() {
"use strict";
var DI = new DependencyInjector(),
DIContextMenu = DI.get("ContextMenu"),
DIPaste = DI.get("Paste"),
DIHistoryApi = DI.get("HistoryApi"),
DISite = DI.get("Site"),
DIUser = DI.get("User"),
DIAppReg = DI.get("AppRegister"),
DICookies = Cookies,
bBone = Backbone,
svgHandler = PicSVGHandler.getInstance(),
hostName = window.location.hostname,
$ = jQuery,
app = {
id: 'ElizaAppPic',
name: 'pic',
state: 'default',
standAlone: 0,
layout: {},
systems: {} // Список всех систем из левого меню, для коллбеков из роутера
},
UserHandler = DIUser,
hApi = DIHistoryApi,
picStatus = {
stackId: 0, // айди стека
ownerId: 0, // айди хозяина
name: '',
format: '',
state: '',
parent: 0,
parent_id: 0,
items: 0, // количество итемов
url: '',
title: '',
editable: 0,
pages: {
max: 1,
start: 1,
end: 1
},
imageData: {},
scroll: ''
},
scroller_enabled = false,
scroller_obj,
scroller_axis_y = 0,
PAGES_PER_PAGE = 30,
rightMenuActive = false,
imageEditActive = false,
imageCropActive = false,
fromClipBoard = false,
picGLBContentOnly = "false",
picGLBAlbumsOnly = "false",
selectedCount = 0,
selectedList = [],
picIds = {
scrollRight: "elizaPicRightScroll"
},
uriPic = "/api/pic/",
uriPicImage = uriPic+"image/",
uriPicStack = uriPic+"stack/",
uriPicUtils = uriPic+"utils/",
tmpG = templateGet,
tmpR = templateRender,
pic = "app/pic/",
picI = pic+"image_",
picE = pic+"explorer_",
picT = pic+"items_",
picP = pic+"popup_",
cmn = "common/",
elz = "eliza/",
tb = elz+"toolbar_",
cntx = "feature/contextmenu_",
tmplElzScroll = elz+"scroll_content",
tmplElzForbidden = elz+"forbidden",
tmplElzFooter = elz+"footer_1",
tmplCmnIcon = cmn+"elz_icon",
tmplCmnLoadingCircle = cmn+"elz_loading_circle",
tmplCmnUploadZone = cmn+"upload_zone",
tmplCmnBookmarks = cmn+"bookmarks",
tmplCmnBookmarksItem = cmn+"bookmarks_item",
tmplCmnAvatar = cmn+"scl_avatar",
tmplTbPanel = tb+"panel",
tmplTbButton = tb+"button",
tmplTbGroup = tb+"group",
tmplTbTitle = tb+"title",
tmplTbNum = tb+"num_of_num",
tmplCntxItem = cntx+"item",
tmplCntxList = cntx+"list",
tmplPicExplorerLi = picE+"li",
tmplPicExplorerUl = picE+"ul",
tmplPicExplorerWp = picE+"wp",
tmplPicImage = pic+"image",
tmplPicImageCropper = picI+"cropper",
tmplPicImageEditor = picI+"editor",
tmplPicImageEditorFooter = tmplPicImageEditor+"_footer",
tmplPicImageRightContent = picI+"right_content",
tmplPicImageRightHead = picI+"right_head",
tmplPicImageSlider = picI+"slider",
tmplPicImageSliderItem = tmplPicImageSlider+"_item",
tmplPicImageSliderItems = tmplPicImageSlider+"_items",
tmplPicImageSvg = picI+"svg",
tmplPicItemsGroup = picT+"group",
tmplPicItemsItem = picT+"item",
tmplPicItemsList = picT+"list",
tmplPicItemsLoading = picT+"loading",
tmplPopupContent = picP+"content",
tmplPopupSettings = picP+"settings",
tmpAppPicExplorerLi,
tmpAppPicExplorerUl,
tmpAppPicExplorerWp,
tmpAppPicImage,
tmpAppPicImageCropper,
tmpAppPicImageEditor,
tmpAppPicImageEditorFooter,
tmpAppPicImageRightContent,
tmpAppPicImageRightHead,
tmpAppPicImageSlider,
tmpAppPicImageSliderItem,
tmpAppPicImageSliderItems,
tmpAppPicImageSvg,
tmpAppPicItemsGroup,
tmpAppPicItemsItem,
tmpAppPicItemsList,
tmpAppPicItemsLoading,
tmpAppPicPopupContent,
tmpAppPicPopupSettings,
tmpAppToolbarPanel,
tmpAppToolbarButton,
tmpAppToolbarGroup,
tmpAppToolbarTitle,
tmpAppToolbarNum,
tmpAppCommonIcon,
tmpAppCommonLoadingCircle,
tmpAppCommonUploadZone,
tmpAppCommonBookmarks,
tmpAppCommonBookmarksItem,
tmpAppCommonAvatar,
tmpAppScrollContent,
tmpAppFooter,
tmpAppForbidden,
tmpAppFeatureContextMenuItem,
tmpAppFeatureContextMenuList,
tmpObjElzIcon,
tmpObjItemsItem,
tmpObjImgSliderItem,
idElizaApp = "ElizaAppPic",
idElizaPic = "elizaPic",
idElizaPicUploadToNewStack = idElizaPic+"UploadToNewStack",
idElizaPicRight = idElizaPic+"Right",
idElizaPicRightScroll = idElizaPic+"Scroll",
idElizaPicRightBack = idElizaPicRight+"Back",
idElizaPicRightPanel = idElizaPicRight+"Panel",
idElizaPicRightPanelClose = idElizaPicRightPanel+"Close",
idElizaPicPlupload = idElizaPic+"Plupload",
idElizaPicPluploadBtn = idElizaPicPlupload+"Btn",
idElizaPicPluploadZone = idElizaPicPlupload+"Zone",
idElizaPicPluploadCircle = idElizaPicPlupload+"Circle",
idElizaPicImage = idElizaPic+"Image",
idElizaPicImageCont = idElizaPicImage+"Cont",
idElizaPicImageDescr = idElizaPicImage+"Descr",
idElizaPicImagePage = idElizaPicImage+"Page",
idElizaPicImageFooter = idElizaPicImage+"Footer",
idElizaPicImagePageDownload = idElizaPicImagePage+"Download",
idElizaPicImagePageEdit = idElizaPicImagePage+"Edit",
idElizaPicImagePageMeta = idElizaPicImagePage+"Meta",
idElizaPicImagePageDelete = idElizaPicImagePage+"Delete",
idElizaPicImagePageTree = idElizaPicImagePage+"Tree",
idElizaPicImagePageTrash = idElizaPicImagePage+"Trash",
idElizaPicImagePageCrop = idElizaPicImagePage+"Crop",
idElizaPicImageFooterVariations = idElizaPicImageFooter+"Variations",
idElizaPicImageFooterContent = idElizaPicImageFooter+"Content",
idElizaPicImageFooterThumbs = idElizaPicImageFooter+"Thumbs",
idElizaPicImageFooterSiblings = idElizaPicImageFooter+"Siblings",
idElizaPicImageViewer = idElizaPicImage+"Viewer",
idElizaPicImageTool = idElizaPicImage+"Tool",
idElizaPicImageToolGroup = idElizaPicImageTool+"Group",
idElizaPicImageToolGroupMain = idElizaPicImageToolGroup+"Main",
idElizaPicImageToolGroupExpand = idElizaPicImageToolGroup+"Expand",
idElizaPicImageToolGroupTransform = idElizaPicImageToolGroup+"Transform",
idElizaPicImageToolGroupTransformExpand = idElizaPicImageToolGroupTransform+"Expand",
idElizaPicImageToolGroupTransformMirror = idElizaPicImageToolGroupTransform+"Mirror",
idElizaPicImageToolGroupTransformRotate = idElizaPicImageToolGroupTransform+"Rotate",
idElizaPicImageToolGroupTransformMirrorHorizontal = idElizaPicImageToolGroupTransformMirror+"Horizontal",
idElizaPicImageToolGroupTransformMirrorVertical = idElizaPicImageToolGroupTransformMirror+"Vertical",
idElizaPicImageToolGroupTransformRotateLeft = idElizaPicImageToolGroupTransformRotate+"Left",
idElizaPicImageToolGroupTransformRotateRight = idElizaPicImageToolGroupTransformRotate+"Right",
idElizaPicImageSlider = idElizaPicImage+"Slider",
idElizaPicImageSliderList = idElizaPicImageSlider+"List",
idElizaPicImageSliderCrop = idElizaPicImageSlider+"Crop",
idElizaPicImageSliderTitle = idElizaPicImageSlider+"Title",
idElizaPicImageCropper = idElizaPicImage+"Cropper",
idElizaPicImageCropperOrigin = idElizaPicImageCropper+"Origin",
idElizaPicImageCropperPoint = idElizaPicImageCropper+"Point",
idElizaPicImageCropperSave = idElizaPicImageCropper+"Save",
idElizaPicImageCropperCancel = idElizaPicImageCropper+"Cancel",
idElizaPicImageCropperWidth = idElizaPicImageCropper+"Width",
idElizaPicImageCropperHeight = idElizaPicImageCropper+"Height",
idElizaPicImageCropperRightPanelClose = idElizaPicImageCropper+"RightPanelClose",
idElizaPicImageCropperOriginWidth = idElizaPicImageCropperOrigin+"Width",
idElizaPicImageCropperOriginHeight = idElizaPicImageCropperOrigin+"Height",
idElizaPicImageCropperPointX = idElizaPicImageCropperPoint+"X",
idElizaPicImageCropperPointY = idElizaPicImageCropperPoint+"Y",
idElizaPicImageEditor = idElizaPicImage+"Editor",
idElizaPicImageEditorSwitch = idElizaPicImageEditor+"Switch",
idElizaPicImageEditorFilter = idElizaPicImageEditor+"Filter",
idElizaPicImageEditorCorrections = idElizaPicImageEditor+"Corrections",
idElizaPicImageEditorCropper = idElizaPicImageEditor+"Cropper",
idElizaPicImageEditorAspects = idElizaPicImageEditor+"Aspects",
idElizaPicImageEditorSave = idElizaPicImageEditor+"Save",
idElizaPicImageEditorCancel = idElizaPicImageEditor+"Cancel",
idElizaPicImageCopyInput = idElizaPicImage+"CopyInput",
idElizaPicImageCopyInputClean = idElizaPicImageCopyInput+"Clean",
idElizaPicImageCopyInputHtml = idElizaPicImageCopyInput+"Html",
idElizaPicImageCopyInputBBCode = idElizaPicImageCopyInput+"BBCode",
idElizaPicExplorer = idElizaPic+"Explorer",
idElizaPicExplorerWP = idElizaPicExplorer+"WP",
idElizaPicExplorerClose = idElizaPicExplorer+"Close",
idElizaPicExplorerUl = idElizaPicExplorer+"Ul_",
idElizaPicExplorerLi = idElizaPicExplorer+"Li_",
idElizaPicContent = "elizaPicContent",
idElizaPicContentBookmarks = idElizaPicContent+"Bookmarks",
idElizaPicContentScroll = idElizaPicContent+"Scroll",
idElizaPicContentStackList = idElizaPicContent+"StackList",
idElizaPicFooter = idElizaPic+"Footer",
idElizaPicFooterTitle = idElizaPicFooter+"Title",
idElizaPicFooterNext = idElizaPicFooter+"Next",
idElizaPicFooterPrev = idElizaPicFooter+"Prev",
idElizaPicFooterRoot = idElizaPicFooter+"Root",
idElizaPicFooterNumbers = idElizaPicFooter+"Numbers",
idElizaPicFooterAlbums = idElizaPicFooter+"Albums",
idElizaPicFooterContent = idElizaPicFooter+"Content",
idElizaPicTool = idElizaPic+"Tool",
idElizaPicToolStackExp = idElizaPicTool+"Expand",
idElizaPicToolAddImage = idElizaApp+"_addImage", // К этому айдишнику привязан ЦСС, без надобности не менять.
idElizaPicToolAddStack = idElizaPicTool+"AddAlbum",
idElizaPicToolTree = idElizaPicTool+"MoveToAlbum",
idElizaPicToolTrash = idElizaPicTool+"DeleteItems",
idElizaPicToolUnsel = idElizaPicTool+"RemoveSelect",
idElizaPicPopup = idElizaPic+"Popup",
idElizaPicPopupScroll = idElizaPicPopup+"Scroll",
idElizaPicPopupSettings = idElizaPicPopup+"Settings",
idElizaPicPopupSettingsClose = idElizaPicPopupSettings+"Close",
idElizaPicPopupSettingsCancel = idElizaPicPopupSettings+"Cancel",
idElizaPicPopupContent = idElizaPicPopup+"Content",
idElizaPicPopupContentScroll = idElizaPicPopupContent+"Scroll",
idElizaPicPopupContentBooks = idElizaPicPopupContent+"Books",
idElizaPicPopupContentClose = idElizaPicPopupContent+"Close",
idElizaPicPopupExplorer = idElizaPicPopup+"Explorer",
idElizaPicPopupExplorerScroll = idElizaPicPopupExplorer+"Scroll",
idElizaPicCorrPreset = idElizaPic+"elizaPicCorrPreset",
idElizaPicCorrPresetAdd = idElizaPicCorrPreset+"Add",
idElizaPicCorrPresetText = idElizaPicCorrPreset+"Text",
idElizaPicCorrPresetSave = idElizaPicCorrPreset+"Save",
idElizaPicCorrPresetList = idElizaPicCorrPreset+"List",
idElizaPicCorrPresetDelete = idElizaPicCorrPreset+"Delete",
idElizaPicCorrPresetClose = idElizaPicCorrPreset+"Close",
idElizaPicCorrPresetDivList = idElizaPicCorrPreset+"DivList",
idElizaPicCorrPresetDivForm = idElizaPicCorrPreset+"DivForm",
idElizaPicContextMenu = idElizaPic+"ContextMenu",
idElizaPicContextMenuMoveUp = idElizaPicContextMenu+"MoveUp",
idElizaPicContextMenuDelete = idElizaPicContextMenu+"Delete",
idElizaPicContextMenuEditMeta = idElizaPicContextMenu+"EditMeta",
idElizaPicContextMenuImageContent = idElizaPicContextMenu+"ImageContent",
idElizaPicContextMenuStack = idElizaPicContextMenu+"Stack",
idElizaPicContextMenuStackUpload = idElizaPicContextMenuStack+"Upload",
idElizaPicContextMenuStackInsert = idElizaPicContextMenuStack+"Insert",
idElizaPicContextMenuCopy = idElizaPicContextMenu+"Copy",
idElizaPicContextMenuCopyBBCode = idElizaPicContextMenuCopy+"BBCode",
idElizaPicContextMenuCopyHtml = idElizaPicContextMenuCopy+"Html",
idElizaPicContextMenuCopySlider = idElizaPicContextMenuCopy+"Slider",
idElizaPicContextMenuCopySliderLink = idElizaPicContextMenuCopySlider+"Link",
idElizaPicContextMenuCopySliderBBCode = idElizaPicContextMenuCopySlider+"BBCode",
idElizaPicContextMenuCopySliderHTML = idElizaPicContextMenuCopySlider+"HTML",
idElizaPicSVG = idElizaPic+"SVG",
idElizaPicSVGFilters = idElizaPicSVG+"Filters",
idElizaPicSVGCanvas = idElizaPicSVG+"Canvas",
idElizaPicSVGRightPanelClose = idElizaPicSVG+"RightPanelClose",
idElizaPicThumb = idElizaPic+"Thumb",
idElizaPicThumbCreate = idElizaPicThumb+"Create",
idElizaPicThumbForm = idElizaPicThumb+"Form",
idElizaPicThumbZoomSwitch = idElizaPicThumb+"ZoomSwitch",
idVignetteColor = "vignetteColor",
idVignetteColorReset = idVignetteColor+"Reset",
idVignetteColorFlood = idVignetteColor+"Flood",
idVignetteColorLightning = idVignetteColor+"Lightning",
$jqStackList = $("#"+idElizaPicContentStackList),
$jqStackScroll = $("#"+idElizaPicContentScroll),
langAppPicRightPanel = "Правая панель", // Правая панель
langAppPicRightBack = "Назад", // Назад
langAppPicForbidden1 = "Изображения и альбомы, удовлетворяющие выбранным фильтрам не найдены", // Изображения и альбомы, удовлетворяющие выбранным фильтрам не найдены
langAppPicForbidden2 = "Эта страница доступна только её автору", // Эта страница доступна только её автору
langAppPicForbidden3 = "Эта страница запрещена для просмотра лицам, не достигшим возраста ", // Эта страница запрещена для просмотра лицам, не достигшим возраста
langAppPicForbidden4 = " лет", // лет
langAppPicForbidden5 = "Страница не найдена", // Страница не найдена
langAppPicForbidden6 = "Для доступа к функционалу требуется регистрация", // Для доступа к функционалу требуется регистрация
langAppPicImgHtmlTitle = "Изображение с ", // Изображение с
langAppPicNotificationMoveTo = "Выберите объекты для перемещения", // Выберите объекты для перемещения
langAppPicNotificationMoved = "Перемещено элементов: ", // Перемещено элементов:
langAppPicNotificationImgSize = "Разрешенные для вставки файлы: JPG, JPEG, GIF, PNG размером не более 10 мегабайт.", // Разрешенные для вставки файлы: JPG, JPEG, GIF, PNG размером не более 10 мегабайт.
langAppPicNotificationImgUpl = "Изображение успешно загружено", // Изображение успешно загружено
langAppPicNotificationImgThumb = "Новая миниатюра создана", // Новая миниатюра создана
langAppPicNotificationImgOversize = "Ряд изображений превышает допустимый размер в 10 мегабайт", // Ряд изображений превышает допустимый размер в 10 мегабайт
langAppPicNotificationImgTypes = "Ряд изображений не соотвествует разрешенному формату", // Ряд изображений не соотвествует разрешенному формату
langAppPicNotificationImgUploads = "Изображения загружены на первую страницу текущего альбома", // Изображения загружены на первую страницу текущего альбома
langAppPicNotificationDel1 = "Удалено элементов: ", // Удалено элементов:
langAppPicNotificationDel2 = ". Не удалось удалить: ", // . Не удалось удалить:
langAppPicNotificationDel3 = ". Обнаружена связь с контентом", // . Обнаружена связь с контентом
langAppPicMenuEditMeta = "Редактировать описание", // Редактировать описание
langAppPicMenuAddImage = "Загрузить изображения", // Загрузить изображения
langAppPicMenuAddStack = "Добавить альбом", // Добавить альбом
langAppPicMenuExplorer = "Проводник по альбомам", // Проводник по альбомам
langAppPicMenuDeleted = "Показать удаленное", // Показать удаленное
langAppPicMenuRPanel = "Показать правую панель", // Показать правую панель
langAppPicNCoverWait = "Подождите", // Подождите
langAppPicNCoverTransform = "Идет трансформация", // Идет трансформация
langAppPicNCoverCropping = "Идет обработка изображения", // Идет обработка изображения
langAppPicNCoverFilters = "Идет обработка использованных фильтров", // Идет обработка использованных фильтров
langAppPicNCoverPreparing = "Идет обработка изображения", // Идет обработка изображения
langAppPicNCoverCropInit = "Инициализация интерфейса кадрирования", // Инициализация интерфейса кадрирования
langAppPicImgSliderTitle1 = "Доступные миниатюры", // Доступные миниатюры
langAppPicImgSliderTitle2 = "Изображения в альбоме", // Изображения в альбоме
langAppPicImgSliderTitle3 = "Вариации изображения", // Вариации изображения
langAppPicImgBtn1 = "Редактировать вариацию", // Редактировать вариацию
langAppPicImgBtn2 = "Создать вариацию", // Создать вариацию
langAppPicImgBtn3 = "Вариации изображения", // Вариации изображения
langAppPicImgBtn4 = "Связи с контентом", // Связи с контентом
langAppPicImgBtn5 = "Скачать изображение", // Скачать изображение
langAppPicImgBtn6 = "Переместить изображение", // Переместить изображение
langAppPicImgBtn7 = "Создать миниатюру", // Создать миниатюру
langAppPicImgBtn8 = "Редактирование изображения", // Редактирование изображения
langAppPicImgBtn9 = "Создать вариацию", // Создать вариацию
langAppPicImgBtn10 = "Редактировать описание", // Редактировать описание
langAppPicImgBtn11 = "Удалить", // Удалить
langAppPicImgBtn12 = "Отразить по горизонтали", // Отразить по горизонтали
langAppPicImgBtn13 = "Отразить по вертикали", // Отразить по вертикали
langAppPicImgBtn14 = "Повернуть против часовой стрелки", // Повернуть против часовой стрелки
langAppPicImgBtn15 = "Повернуть по часовой стрелке", // Повернуть по часовой стрелке
langAppPicImgBtn16 = "Действия", // Действия
langAppPicImgBtn17 = "Трансформация изображения", // Трансформация изображения
langAppPicImgBtn18 = "Вернуться к предыдущему состоянию", // Вернуться к предыдущему состоянию
langAppPicImgTitle1 = "Промежуточное изображение из буфера обмена", // Промежуточное изображение из буфера обмена
langAppPicImgRight1 = "Добавлено:", // Добавлено:
langAppPicImgRight2 = "Разрешение:", // Разрешение:
langAppPicImgRight3 = "Просмотры:", // Просмотры:
langAppPicImgRight4 = "Уникальные:", // Уникальные:
langAppPicImgRight5 = "Размер файла:", // Размер файла:
langAppPicImgRight6 = "Ссылка", // Ссылка
langAppPicImgRight7 = "HTML", // HTML
langAppPicImgRight8 = "BBCode", // BBCode
langAppPicImgRight9 = "Информация", // Информация
langAppPicImgRight10 = "панель информации", // панель информации
langAppPicImgRight11 = "Редактирование изображения", // Редактирование изображения
langAppPicImgRight12 = "Создание новой вариации", // Создание новой вариации
langAppPicImgRight13 = "панель редактирования", // панель редактирования
langAppPicImgEdit1 = "Ширина результата", // Ширина результата
langAppPicImgEdit2 = "Высота результата", // Высота результата
langAppPicImgEdit3 = "Позиция рамки", // Позиция рамки
langAppPicImgEdit4 = "Позиция вершины: X", // Позиция вершины: X
langAppPicImgEdit5 = "Позиция вершины: Y", // Позиция вершины: Y
langAppPicImgEdit6 = "Масштабирование", // Масштабирование
langAppPicImgEdit7 = "Ширина изображения", // Ширина изображения
langAppPicImgEdit8 = "Высота изображения", // Высота изображения
langAppPicImgEdit9 = "Оригинал", // Оригинал
langAppPicImgEdit10 = "Произвольно", // Произвольно
langAppPicImgEdit11 = "Стороны", // Стороны
langAppPicImgEdit12 = "Сохранить изображение", // Сохранить изображение
langAppPicImgEdit13 = "Создать миниатюру", // Создать миниатюру
langAppPicImgEdit14 = "Отмена", // Отмена
langAppPicImgEdit15 = "Кадрирование изображения", // Кадрирование изображения
langAppPicImgEdit16 = "Создание новой миниатюры", // Создание новой миниатюры
langAppPicImgEdit17 = "панель кадрирования", // панель кадрирования
langAppPicImgEdit18 = "панель создания миниатюры", // панель создания миниатюры
langAppPicImgEdit19 = "Сохранить изменения", // Сохранить изменения
langAppPicImgEdit20 = "Создать вариацию", // Создать вариацию
langAppPicSettingsEdit = "Изменение настроек", // Изменение настроек
langAppPicSettingsClose = "Закрыть", // Закрыть
langAppPicSettings1 = "альбома", // альбома
langAppPicSettings2 = "изображения", // изображения
langAppPicSettings3 = "Настройки", // Настройки
langAppPicExplorer = "Проводник по альбомам", // Проводник по альбомам
langAppPicExplorerClose = "Закрыть", // Закрыть
langAppPicStackFooter1 = "Показать только альбомы", // Показать только альбомы
langAppPicStackFooter2 = "Показать только связанное с контентом", // Показать только связанное с контентом
langAppPicStackFooter3 = "Сбросить выделение", // Сбросить выделение
langAppPicPageGoTo1 = "Перейти на первую страницу", // Перейти на первую страницу
langAppPicPageGoTo2 = "Перейти в корень", // Перейти в корень
langAppPicPageGoTo3 = "Перейти на главную страницу", // Перейти на главную страницу
langAppPicPageGoTo4 = "Наверх", // Наверх
langAppPicPageGoTo5 = "Предыдущая страница", // Предыдущая страница
langAppPicPageGoTo6 = "Перейти в альбом", // Перейти в альбом
langAppPicPageGoTo7 = "Перейти к оригиналу", // Перейти к оригиналу
langAppPicPageGoTo8 = "Предыдущее изображение", // Предыдущее изображение
langAppPicPageGoTo9 = "Следующее изображение", // Следующее изображение
langAppPicPageGoTo10 = "Следующая страница", // Следующая страница
langApiPicSelectionTitle1 = "Добавить альбом", // Добавить альбом
langApiPicSelectionTitle2 = "Проводник по альбомам", // Проводник по альбомам
langApiPicSelectionTitle3 = "Показать удаленное", // Показать удаленное
langApiPicSelectionTitle4 = "Восстановить удаленное", // Восстановить удаленное
langApiPicSelectionTitle5 = "Объеденить выбранное в альбом", // Объеденить выбранное в альбом
langApiPicSelectionTitle6 = "Переместить выбранное в альбом", // Переместить выбранное в альбом
langApiPicSelectionTitle7 = "Восстановить выбранное", // Восстановить выбранное
langApiPicSelectionTitle8 = "Удалить выбранное", // Удалить выбранное
langApiPicSelectionTitle9 = "Сделать иконкой альбома", // Сделать иконкой альбома
langApiPicSelectionTitle10 = "Является иконкой альбома", // Является иконкой альбома
langApiPicCommon1 = "изображение", // изображение
langApiPicCommon2 = "альбом", // альбом
langApiPicCommon3 = "выделенное", // выделенное
langApiPicCommon4 = "Восстановить", // Восстановить
langApiPicCommon5 = "Переместить", // Переместить
langApiPicCommon6 = "на уровень выше", // на уровень выше
langApiPicCommon7 = "в корень", // в корень
langApiPicCommon8 = "Связанный контент", // Связанный контент
langApiPicCommon9 = "Загрузить изображения в этот альбом", // Загрузить изображения в этот альбом
langApiPicCommon10 = "Поместить выбранное в этот альбом", // Поместить выбранное в этот альбом
langApiPicCommon11 = "Адрес", // Адрес
langApiPicCommon12 = "скопирован в буфер обмена", // скопирован в буфер обмена
langApiPicClip1 = "Копировать адрес", // Копировать адрес
langApiPicClip2 = "Копировать BBCode", // Копировать BBCode
langApiPicClip3 = "Копировать Html", // Копировать Html
langApiPicClip4 = "Адрес скопирован в буфер обмена", // Адрес скопирован в буфер обмена
langApiPicClip5 = "BBCode скопирован в буфер обмена", // BBCode скопирован в буфер обмена
langApiPicClip6 = "Html скопирован в буфер обмена", // Html скопирован в буфер обмена
langApiPicUplZoneTitle1 = "Выберите файлы", // Выберите файлы
langApiPicUplZoneTitle2 = "В этом альбоме ещё нет изображений", // В этом альбоме ещё нет изображений
langApiPicUplZoneText1 = "Или перетащите в эту область", // Или перетащите в эту область
langApiPicUplZoneText2 = "Вы можете сделать снимок экрана и нажать", // Вы можете сделать снимок экрана и нажать
langApiPicUplZoneText3 = "Выберите изображения для загрузки, нажав на эту область, или перетащите файлы сюда", // Выберите изображения для загрузки, нажав на эту область, или перетащите файлы сюда
langApiPicUplZoneSize = "Ограничение на размер файла", // Ограничение на размер файла
langTmplExplorerLi = {
title1: "Перейти в альбом", // Перейти в альбом
title2: "Альбом ID", // Альбом ID
title3: "Перенести выделенное в этот альбом", // Перенести выделенное в этот альбом
title4: "Развернуть" // Развернуть
},
langTmplImageCropper = {
label: "Расширенный режим", // Расширенный режим
title: "Соотношения сторон" // Соотношения сторон
},
langTmplImageEditor = {
title1: "Удалить предустановленный фильтр", // Удалить предустановленный фильтр
title2: "Сохранить текущие настройки фильтра", // Сохранить текущие настройки фильтра
title3: "Отмена", // Отмена
title4: "Сброс", // Сброс
capt1: "Фильтры", // Фильтры
capt2: "Цветовая коррекция", // Цветовая коррекция
capt3: "Цвета виньетирования" // Цвета виньетирования
},
langTmplImageRightContent = {
title1: "Автор", // Автор
title2: "Оригинал", // Оригинал
title3: "Альбом" // Альбом
},
langTmplImageRightHead = {
close: "Закрыть" // Закрыть
},
langTmplImageSlider = {
text: 'Изображения в альбоме', // Изображения в альбоме
title1: 'Закрыть', // Закрыть
title2: 'Создать новую миниатюру', // Создать новую миниатюру
item: 'Новая миниатюра' // Новая миниатюра
},
langTmplImageSliderItem = {
del: "Удалить" // Удалить
},
langTmplItemsItem = {
title1: "Размер изображения", // Размер изображения
title2: "Вариаций изображения", // Вариаций изображения
title3: "Формат изображения", // Формат изображения
title4p1: "Является", // Является
title4p2: "Сделать", // Сделать
title4p3: "иконкой альбома", // иконкой альбома
title5: "Альбомов внутри", // Альбомов внутри
title6: "Изображений в альбоме", // Изображений в альбоме
title7: "Альбом", // Альбом
title8: "Дней до удаления", // Дней до удаления
title9: "Изображение", // Изображение
title10: "Иконка альбома", // Иконка альбома
title11: "Доступ ограничен", // Доступ ограничен
title12p1: "Доступно только пользователям старше", // Доступно только пользователям старше
title12p2: "лет", // лет
title13: "Доступно только вам", // Доступно только вам
title14: "Доступно только автору", // Доступно только автору
title15: "Доступно только по прямой ссылке" // Доступно только по прямой ссылке"
},
langTmplItemsLoading = {
txt: "идет загрузка..." // идет загрузка...
},
langTmplPopupContent = {
txt1: "Автор", // Имя
txt2: "Оригинал", // Дата
txt3: "Альбом" // Автор
},
langTmplPopupSettings = {
holder1: "Введите название", // Введите название
holder2: "Введите описание", // Введите описание
label1: "Название", // Название
label2: "Описание", // Описание
label3: "Применить ко всем вложенным элементам" // Применить ко всем вложенным элементам
},
months = ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"];
templateGetPackage(
"eliza_app_pic",
[
tmplPicExplorerLi,
tmplPicExplorerUl,
tmplPicExplorerWp,
tmplPicImage,
tmplPicImageCropper,
tmplPicImageEditor,
tmplPicImageEditorFooter,
tmplPicImageRightContent,
tmplPicImageRightHead,
tmplPicImageSlider,
tmplPicImageSliderItem,
tmplPicImageSliderItems,
tmplPicImageSvg,
tmplPicItemsGroup,
tmplPicItemsItem,
tmplPicItemsList,
tmplPicItemsLoading,
tmplPopupContent,
tmplPopupSettings,
tmplCmnIcon,
tmplCmnLoadingCircle,
tmplCmnUploadZone,
tmplCmnBookmarks,
tmplCmnBookmarksItem,
tmplCmnAvatar,
tmplTbPanel,
tmplTbButton,
tmplTbGroup,
tmplTbTitle,
tmplTbNum,
tmplElzScroll,
tmplElzForbidden,
tmplElzFooter,
tmplCntxItem,
tmplCntxList
],
function() {
tmpAppPicExplorerLi = tmpG(tmplPicExplorerLi);
tmpAppPicExplorerUl = tmpG(tmplPicExplorerUl);
tmpAppPicExplorerWp = tmpG(tmplPicExplorerWp);
tmpAppPicImage = tmpG(tmplPicImage);
tmpAppPicImageCropper = tmpG(tmplPicImageCropper);
tmpAppPicImageEditor = tmpG(tmplPicImageEditor);
tmpAppPicImageEditorFooter = tmpG(tmplPicImageEditorFooter);
tmpAppPicImageRightContent = tmpG(tmplPicImageRightContent);
tmpAppPicImageRightHead = tmpG(tmplPicImageRightHead);
tmpAppPicImageSlider = tmpG(tmplPicImageSlider);
tmpAppPicImageSliderItem = tmpG(tmplPicImageSliderItem);
tmpAppPicImageSliderItems = tmpG(tmplPicImageSliderItems);
tmpAppPicImageSvg = tmpG(tmplPicImageSvg);
tmpAppPicItemsGroup = tmpG(tmplPicItemsGroup);
tmpAppPicItemsItem = tmpG(tmplPicItemsItem);
tmpAppPicItemsList = tmpG(tmplPicItemsList);
tmpAppPicItemsLoading = tmpG(tmplPicItemsLoading);
tmpAppPicPopupContent = tmpG(tmplPopupContent);
tmpAppPicPopupSettings = tmpG(tmplPopupSettings);
tmpAppToolbarPanel = tmpG(tmplTbPanel);
tmpAppToolbarButton = tmpG(tmplTbButton);
tmpAppToolbarGroup = tmpG(tmplTbGroup);
tmpAppToolbarTitle = tmpG(tmplTbTitle);
tmpAppToolbarNum = tmpG(tmplTbNum);
tmpAppCommonIcon = tmpG(tmplCmnIcon);
tmpAppCommonLoadingCircle = tmpG(tmplCmnLoadingCircle);
tmpAppCommonUploadZone = tmpG(tmplCmnUploadZone);
tmpAppCommonBookmarks = tmpG(tmplCmnBookmarks);
tmpAppCommonBookmarksItem = tmpG(tmplCmnBookmarksItem);
tmpAppCommonAvatar = tmpG(tmplCmnAvatar);
tmpAppScrollContent = tmpG(tmplElzScroll);
tmpAppFooter = tmpG(tmplElzFooter);
tmpAppForbidden = tmpG(tmplElzForbidden);
tmpAppFeatureContextMenuItem = tmpG(tmplCntxItem);
tmpAppFeatureContextMenuList = tmpG(tmplCntxList);
tmpObjElzIcon = {"common/elz_icon": tmpAppCommonIcon};
tmpObjItemsItem = {"app/pic/items_item": tmpAppPicItemsItem};
tmpObjImgSliderItem = {"app/pic/image_slider_item": tmpAppPicImageSliderItem};
}
);
/**
* Функция обработчик стэка. Это корневая функция, с которой начинается любой стек. При несовпадении неймов
* система перестраивает весь html, если же нейм не изменился, то просто вызывается функция инициализации страницы
* текущего стэка.
*
* @param {string} item - Нейм альбома, семь символов 0-9a-zA-Z
* @param {string} page - Параметр постраничности ?page = {start}-{end}
* @param {boolean} forcedMeta - Принудительная полная пересборка шаблона стека, с обновлением всех данных
*/
function picStackHandler(item, page, forcedMeta)
{
if (item !== picStatus.name || forcedMeta) { // Если неймы не совпадают, то мы переключились в другой стэк
picGetAlbumMeta(item, function() {picStackHandlerCallback(page, true);});
}
else {
picStackHandlerCallback(page, false);
}
}
/**
* Функция-обработчик стэка. Распарсивает постраничность. При необходимости добавляет/пеерсобирает юзер-меню и
* фуутер. Реинициализирует постраничность и осуществляет запрос актуального списка объект, которые находятся в
* альбоме.
*
* @param {string} page - Параметр постраничности ?page = {start}-{end}
* @param {bool} fullRebuild - Принудительная полная пересборка шаблона стека
*/
function picStackHandlerCallback(page, fullRebuild) {
if (page) {
var pageData = pageParser(page, picStatus.pages.max);
picStatus.pages.start = pageData.start;
picStatus.pages.end = pageData.end;
/*if (picStatus.pages.end > picStatus.pages.max) {
picStatus.pages.end = parseInt(picStatus.pages.max, 10);
}*/
}
var action = (picStatus.name === "trash" ? "add" : "remove")+"Class";
if (picStatus.state !== "stack" || fullRebuild) {
app.layout.content.cnt.content.removeAttr("data-elz-bg");
app.layout.content.cnt.subfooter.removeAttr("data-elz-bg");
app.layout.main.right.closest(".tplCLSgrid").removeClass("showside");
app.layout.content.cnt.subfooter.find(".elzCLSwinslider").removeClass("show");
//scroller_enabled = false;
picInsertMenuStack();
picStatus.state = "stack";
}
picInsertFooterStack(fullRebuild);
$("#"+idElizaPicRightBack)[picStatus.name === "root" ? "addClass" : "removeClass"]("hide");
$("#"+idElizaPicToolTrash)[action]("active");
$("#"+idElizaPicFooterAlbums )[action]("hide");
$("#"+idElizaPicFooterContent)[action]("hide");
picPaginatingReset();
if (fullRebuild) {
picStackRebuildHtml();
}
imageEditActive = false;
imageCropActive = false;
$("#"+idElizaPicPluploadBtn).find(".elzIc.main").removeClass("ic-images").removeClass("ic-image").addClass(
$("#"+idElizaApp).attr("data-appstate") === "list album" ? "ic-images" : "ic-image"
);
//одкостылим проверочку
if (picStatus.items) {
var picCLSupload = $("#"+idElizaPicContentScroll).find(".picCLSupload");
picCLSupload.removeClass("empty");
if (picStatus.pages.start === 1 && picStatus.name !== "trash") {
picCLSupload.removeClass("hide");
}
else {
picCLSupload.addClass("hide");
}
}
if (picGLBContentOnly === "true" || picGLBAlbumsOnly === "true") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
/*if (app.standAlone === 1) {
picStackItemsInit();
app.standAlone = 2;
}
else {*/
picGetItemsList({type: "replace", page: page, stackId: picStatus.stackId, ownerId: picStatus.ownerId});
/*}*/
}
/**
* Функция сборки верхней меню пользовательской меню для работы со стеком. Тут же хранятся инициализаторы событий.
*/
function picInsertMenuStack()
{
if (UserHandler.isNotActivated()) {
return false;
}
if (UserHandler.getId() === picStatus.ownerId) {
var $mid = app.layout.top.header.find('[data-layout="toolbar_middle"]'),
btn = tmpAppToolbarButton,
list = [],
funcCompress = function (list, tag, id, title, icon, subIcon, subColor) {
var returnObj = {
tag: tag, id: id, title: title, align: "right", icon: {svg: {main: icon}, size: 'small'}
};
if (subIcon) {
returnObj.icon.svg.sub = subIcon;
returnObj.icon.color = {subbg: subColor};
}
list.push(returnObj);
},
len;
if (picGLBAlbumsOnly !== "true" && picGLBContentOnly !== "true") {
if (picStatus.name !== "root" && picStatus.name !== "trash") {
funcCompress(list, "div", idElizaPicImagePageMeta, langAppPicMenuEditMeta, "ic-pencil");
}
funcCompress(list, "label", idElizaPicToolAddImage, langAppPicMenuAddImage, "ic-image", "ic-plus", "blue");
funcCompress(list, "div", idElizaPicToolAddStack, langAppPicMenuAddStack, "ic-folder", "ic-plus", "blue");
}
funcCompress(list, "div", idElizaPicToolTree, langAppPicMenuExplorer, "ic-foldertree");
list.push({
tag: "a", id: idElizaPicToolTrash, title: langAppPicMenuDeleted, align: "right",
border: {
enable: 1,
lines: "bottom",
color: "red 800"
},
icon: {svg: {main: 'ic-trash'}, size: 'small'},
href: (!app.standAlone ? "#pic" : "")+ "/trash"
});
len = list.length;
$mid.html(tmpR(tmpAppToolbarGroup, {
active: "",
position: "right",
xsub: "320",
v_pos: "top",
h_pos: "right"
}));
$mid.find('[data-layout="tool_trigger"]').prepend(tmpR(btn, {
id: idElizaPicToolStackExp,
tag: "div",
title: langAppPicMenuRPanel,
setts: {type: 'default', align: "right", link: '1'},
icon: {svg: {main: 'ic-more1'}, size: 'small', radius: "rad"}
}, tmpObjElzIcon));
//$("#"+picIds.toolStackExp).click(function() {$(this).closest(".group").toggleClass("active");});
var $ins = $mid.find('[data-layout="tool_list"]');
for(var a = 0, item; a < len; a++) {
item = list[a];
list[a] = tmpR(btn, {
id: item.id,
tag: item.tag,
href: item.href,
title: item.title,
border: item.border ? item.border : {},
setts: {type: 'default', align: item.align, txt: item.txt, link: '1'},
text: {str: item.title, align: 'left'},
icon: item.icon
}, tmpObjElzIcon);
}
$ins.append(list.join(''));
}
picFooterFiltersCheck();
picPluploaderGet(true);
}
function userPanelMenus() {
var $toolbarMiddle = app.layout.top.header.find('[data-layout="toolbar_middle"]'),
$toolbarRight = app.layout.top.header.find('[data-layout="toolbar_right"]'),
$footer = app.layout.content.cnt.footer.closest("div"),
$subfooter = app.layout.content.cnt.subfooter.closest("div"),
$content = app.layout.content.cnt.content,
ids = picIds,
picItem = tmpAppPicItemsItem,
funcCompress = function() {
$("#"+idElizaPicImageToolGroupMain).removeClass("active");
$("#"+idElizaPicImageToolGroupExpand).removeClass("active");
};
//app.layout.content.cnt.content.attr( "data-elz-bg", "grey 900");
app.layout.content.cnt.subfooter.attr("data-elz-bg", "grey 900");
// ФУНКЦИОНАЛ СТЭКА
// -------------------------------------------------------------------------------------------------------------
$toolbarMiddle.off("click").on("click", "#"+idElizaPicToolTree, function() {
picExplorerWindow();
}).on("click", "#"+idElizaPicToolTrash, function(e) {
if (!selectedCount) {
if (app.standAlone) {
hApi.pushState(
e,
$(this).attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
DIAppReg.regState(app.name, $(this).attr("href"));
}
return this;
}
e.preventDefault();
picStackDelete();
}).on("click", "#"+idElizaPicToolAddStack, function(e) {
e.preventDefault();
var data = picStatus,
stackId = data.stackId,
$stackList = $jqStackList;
if(selectedCount > 0) {
data = picAddStack(stackId, 0);
data.lang = langTmplItemsItem;
$stackList.prepend(tmpR(picItem, data));
selectedCount -= 1;
picMoveToStack($('.fileItem[data-name="'+data.system.name+'"]'));
picPaginationUpdate();
}
else {
if(data.pages.start === 1) {
data = picAddStack(stackId, 0);
data.lang = langTmplItemsItem;
$stackList.prepend(tmpR(picItem, data));
}
picItemListRefresh('add', 1);
picPaginationUpdate();
}
picStackItemsInit();
if (picStatus.name !== "trash") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty");
}
else {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
}).on("click", "#"+idElizaPicToolStackExp, function() {
$(this).closest(".group").toggleClass("active");
});
// -------------------------------------------------------------------------------------------------------------
// ФУНКЦИОНАЛ КАРТИНКИ
// -------------------------------------------------------------------------------------------------------------
$toolbarMiddle.on("click", "#"+idElizaPicImageToolGroupTransformExpand, function() {
var $edit = $("#"+idElizaPicImagePageEdit);
funcCompress();
$("#"+idElizaPicImageToolGroupTransform).toggleClass("active");
$(this).toggleClass("active");
if ($edit.hasClass("active")) {
$edit.click();
}
}).on("click", "#"+idElizaPicImageToolGroupExpand, function() {
funcCompress();
$("#"+idElizaPicImageToolGroupMain).toggleClass("active");
$(this).toggleClass("active");
/*if ($edit.hasClass("active")) {
$edit.click();
}*/
}).on("click", "#"+idElizaPicImagePageEdit, function(e) {
var $this = $(this),
$viewer = $("#"+idElizaPicImageViewer);
$viewer.removeAttr("style");
imageCropActive = false;
$("#"+idElizaPicImagePageCrop).removeClass("active");
if ($this.hasClass("active")) {
imageEditActive = false;
picImageRightContent();
if (DICookies.get("rightMenuActive") === "false") {
app.layout.main.right.closest(".tplCLSgrid").removeClass("showside");
}
$this.removeClass("active");
$("#"+idElizaPicSVGFilters).addClass("hide");
$viewer.removeClass("hide");
}
else {
imageEditActive = true;
picImageRightEditor();
$("#"+idElizaPicSVGFilters).removeClass("hide");
$this.addClass("active");
}
funcCompress();
}).on("click", "#"+idElizaPicImagePageMeta, function() {
if ($("#"+idElizaApp).attr("data-appstate") === "list album") {
picItemSettings("stack", picStatus.stackId);
}
else {
picItemSettings("image", picStatus.imageData.image.system.id);
funcCompress();
}
}).on("click", "#"+idElizaPicImagePageDelete, function() {
var stack = status.imageData.stack,
name = stack === "root" ? "root" : stack.system.name,
uri = (app.standAlone ? "/" : "#pic") + (name === "root" ? "" : (!app.standAlone ? "/" : "")+name),
deleteList = [{type: "image", id: status.imageData.image.system.id}];
ajaxSend({
url: uriPicStack+"deleteList/"+status.stackId,
data: {list: JSON.stringify(deleteList)},
success: function(result){
if (app.standAlone) {
hApi.replaceStateData({callback: "picRouter"}, uri);
DIAppReg.regState(app.name, uri);
appPicStandAloneRouter();
}
else {
bBone.history.navigate(uri, {trigger: true});
}
}
});
funcCompress();
}).on("click", "#"+idElizaPicImagePageTree, function(e) {
selectedCount = 1;
selectedList = [picStatus.name];
picExplorerWindow();
picGetImageMeta(picStatus.name, function() {picImageHandlerCallback(true);});
appShow();
funcCompress();
}).on("click", "#"+idElizaPicImagePageCrop, function(e) {
var $edit = $("#"+idElizaPicImagePageEdit);
$("#"+idElizaPicImageViewer).removeAttr("style");
if ($edit.hasClass("active")) {
$edit.click();
}
if (!$(this).hasClass("active")) {
$("#"+idElizaPicThumbCreate).click();
}
else {
$("#"+idElizaPicImageCropperRightPanelClose).click();
}
funcCompress();
}).on("click", "#"+idElizaPicImageToolGroupTransformMirrorHorizontal+", " +
"#"+idElizaPicImageToolGroupTransformMirrorVertical+", " +
"#"+idElizaPicImageToolGroupTransformRotateLeft+", " +
"#"+idElizaPicImageToolGroupTransformRotateRight,
function() {
var $edit = $("#"+idElizaPicImagePageEdit);
$("#"+idElizaPicImageViewer).removeAttr("style");
elizaNcoverTexted(langAppPicNCoverWait, langAppPicNCoverTransform, true);
if ($edit.hasClass("active")) {
$edit.click();
}
var variants = {}, mode;
variants[idElizaPicImageToolGroupTransformMirrorHorizontal] = ["transformMirroring", "horizontal"];
variants[idElizaPicImageToolGroupTransformMirrorVertical] = ["transformMirroring", "vertical" ];
variants[idElizaPicImageToolGroupTransformRotateLeft] = ["transformRotation", "left" ];
variants[idElizaPicImageToolGroupTransformRotateRight] = ["transformRotation", "right" ];
mode = variants[$(this).attr("id")];
ajaxSend({
url: uriPicImage+mode[0]+"/"+picStatus.imageData.image.system.id+"/"+mode[1],
success: function() {
var time = 0,
resultImage = picStatus.imageData.image,
name = resultImage.system.name,
file = resultImage.meta.file;
picGetImageMeta(name, function() {
var width = file.width,
height = file.height,
type = file.type;
setTimeout(function() {
var imageUrl = "/upl/" + name + "." + type + "?" + (new Date().getTime());
$("#"+idElizaPicImageViewer ).find("img").attr("src", imageUrl).attr("width", width).attr("height", height);
$("#"+idElizaPicImageCropper).find("img").attr("src", imageUrl).attr("width", width).attr("height", height);
thumbnailReset();
setTimeout(function(){elizaNcoverTexted('', '', false);}, 500);
}, time);
});
}
});
}
);
$toolbarRight.off().on("click", "#"+idElizaPicRightPanel, function() {
var $this = $(this),
$right = app.layout.main.right.closest(".tplCLSgrid");
$("#"+idElizaPicImageViewer).removeAttr("style");
if ($this.hasClass("active")) {
$this.removeClass("active");
DICookies.set("rightMenuActive", "false", {expires: 365});
rightMenuActive = false;
if (imageEditActive) {
picImageRightEditor();
}
else if(imageCropActive) {
picImageRightCropper();
}
else {
$right.removeClass("showside");
}
}
else {
$this.addClass("active");
DICookies.set("rightMenuActive", "true", {expires: 365});
rightMenuActive = true;
picImageRightContent();
$right.addClass("showside");
}
}).on("click", "#"+idElizaPicRightBack, function() {
$("#"+idElizaPicFooterRoot).click();
}).on("mouseenter", "#"+idElizaPicRightBack, function() {
$(this).attr("data-elz-title", $("#"+idElizaPicFooterRoot).attr("data-elz-title"));
});
// -------------------------------------------------------------------------------------------------------------
// F O O T E R
$footer.off("click").on("click", "#"+idElizaPicFooterAlbums, function() {
scrollLoadSkip = false;
if (picGLBAlbumsOnly === "false") {
picGLBAlbumsOnly = "true";
}
else {
picGLBAlbumsOnly = "false";
}
picFooterFiltersCheck();
picStackHandler(picStatus.name, "1", true);
}).on("click", "#"+idElizaPicFooterContent, function() {
scrollLoadSkip = false;
if (picGLBContentOnly === "false") {
picGLBContentOnly = "true";
}
else {
picGLBContentOnly = "false";
}
picFooterFiltersCheck();
picStackHandler(picStatus.name, "1", true);
}).on("click", "#"+idElizaPicToolUnsel, function() {
picSelectionReset();
});
if (app.standAlone) {
var status = picStatus,
rootButtonId = ", #"+idElizaPicFooterRoot,
rootBtnName = (status.parent ? (!app.standAlone ? "/" : "")+status.parent : "");
if (!UserHandler.getId() && (rootBtnName === "" || rootBtnName === "/")) {
rootButtonId = "";
}
$footer.on("click", "#"+idElizaPicFooterPrev+", #"+idElizaPicFooterNext+rootButtonId, function(e) {
var $this = $(this);
if ($this.hasClass("disabled")) {
e.preventDefault();
return false;
}
picSelectionReset();
(UserHandler.getDevice() === "desktop" ? $jqStackScroll.closest(".scroll-content") : $jqStackScroll.closest(".elzScroll")).scrollTop(0);
hApi.pushState(
e,
$this.attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
DIAppReg.regState(app.name, $this.attr("href"));
});
}
$footer.on('click', "#"+idElizaPicImageFooterThumbs, function() {
var $this = $(this),
$cropper = $("#"+idElizaPicImageCropper).find("img"),
$slider = $("#"+idElizaPicImageSlider),
$sliderList = $("#"+idElizaPicImageSliderList),
$btnSibling = $("#"+idElizaPicImageFooterSiblings),
$btnVariation = $("#"+idElizaPicImageFooterVariations),
$sliderCrop = $("#"+idElizaPicImageSliderCrop);
imageSiblingsActive = false;
imageVariationsActive = false;
imageThumbnailsActive = true;
if (!picStatus.imageData.image.access.editing) {
$sliderCrop.hide();
}
ajaxSend({
url: uriPicImage+"getImageThumbs/"+picStatus.imageData.image.system.id,
success: function(result) {
if ($this.hasClass("active") && !imageActiveIgnore) {
$this.removeClass("active");
imageThumbnailsActive = false;
$slider.removeClass("show");
setTimeout(function() {$(window).trigger('resize');}, 50);
//$cropper.cropper("destroy");
}
else {
if(picStatus.imageData.image.access.editing) {
$sliderCrop.show();
}
$sliderList.find(".thumbnail").remove();
$sliderList.find(".image").remove();
$("#"+idElizaPicImageSliderTitle).html(langAppPicImgSliderTitle1);
$sliderCrop.nextAll("li").remove();
$sliderList.append(tmpR(
tmpAppPicImageSliderItems,
{
list: result,
item_type: "thumbnail",
target: "_blank",
deletable: picStatus.editable ? 1 : 0,
lang: langTmplImageSliderItem
},
tmpObjImgSliderItem
));
$sliderList.find(".elzCLSoverControls .cntrlItem.link").click(function() {
var $this = $(this);
ajaxSend({
url: uriPicImage+"deleteThumbByName/"+$this.attr("data-name")+"/"+$this.attr("data-width")+"/"+$this.attr("data-height"),
success: function() {
$this.closest(".thumbnail").remove();
}
});
});
$this.addClass("active");
$slider.addClass("show");
$btnSibling.removeClass("active");
$btnVariation.removeClass("active");
setTimeout(function() {$(window).trigger('resize');}, 50);
}
imageActiveIgnore = false;
return false;
}
});
}).on("click", "#"+idElizaPicImageFooter, function() {
if (picStatus.imageData.stack === "root") {
return this;
}
var $this = $(this),
$sliderList = $("#"+idElizaPicImageSliderList),
$slider = $("#"+idElizaPicImageSlider),
$btnThumbs = $("#"+idElizaPicImageFooterThumbs),
$btnContent = $("#"+idElizaPicImageFooterContent),
$btnVariation = $("#"+idElizaPicImageFooterVariations);
imageSiblingsActive = true;
imageVariationsActive = false;
imageThumbnailsActive = false;
if ($this.hasClass("active")) {
$this.removeClass("active");
$slider.removeClass("show");
imageSiblingsActive = false;
setTimeout(function() {$(window).trigger('resize');}, 50);
return false;
}
ajaxSend({
url: uriPicImage+"getImageSiblings/"+picStatus.imageData.stack.system.id,
success: function(result) {
var $sliderCrop = $("#"+idElizaPicImageSliderCrop);
$sliderCrop.hide();
$sliderList.find(".image").remove();
$sliderList.find(".thumbnail").remove();
$("#"+idElizaPicImageSliderTitle).html(langAppPicImgSliderTitle2);
$sliderCrop.nextAll("li").remove();
$sliderList.append(tmpR(tmpAppPicImageSliderItems,
{list: result, lang: langTmplImageSliderItem}, tmpObjImgSliderItem
));
$this.addClass("active");
$slider.addClass("show");
$btnThumbs.removeClass("active");
$btnVariation.removeClass("active");
var $active = $sliderList.find('.sliderItem[data-name="'+picStatus.name+'"] a').addClass("active"),
position = $active.offset();
$("#"+idElizaPicImageSlider+" .scroll-content").scrollLeft(position.left);
setTimeout(function() {$(window).trigger('resize');}, 50);
$(".sliderItem a", $sliderList).off().click(function(e) { // TODO: подъебнуть на слайдер
hApi.pushState(
e,
$(this).attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
DIAppReg.regState(app.name, $(this).attr("href"));
});
}
});
}).on("click", "#"+idElizaPicImageFooterVariations, function() {
var $this = $(this),
$sliderList = $("#"+idElizaPicImageSliderList),
$slider = $("#"+idElizaPicImageSlider),
$btnThumbs = $("#"+idElizaPicImageFooterThumbs),
$btnSibling = $("#"+idElizaPicImageFooterSiblings);
imageSiblingsActive = false;
imageVariationsActive = true;
imageThumbnailsActive = false;
if ($this.hasClass("active")) {
$this.removeClass("active");
$slider.removeClass("show");
imageVariationsActive = false;
setTimeout(function() {$(window).trigger('resize');}, 50);
return false;
}
ajaxSend({
url: uriPicImage+"getImageVariations/"+(picStatus.imageData.image.system.parent || picStatus.imageData.image.system.id),
success: function(result) {
var $sliderCrop = $("#"+idElizaPicImageSliderCrop);
$sliderCrop.hide();
$sliderList.find(".elz.item.image").remove();
$("#"+idElizaPicImageSliderTitle).html(langAppPicImgSliderTitle3);
$sliderCrop.nextAll("li").remove();
$sliderList.append(tmpR(tmpAppPicImageSliderItems,
{list: result, lang: langTmplImageSliderItem}, tmpObjImgSliderItem
));
$this.addClass("active");
$slider.addClass("show");
$btnThumbs.removeClass("active");
$btnSibling.removeClass("active");
setTimeout(function() {$(window).trigger('resize');}, 50);
var $active = $sliderList.find('.sliderItem[data-name="'+picStatus.name+'"] a').addClass("active"),
position = $active.offset();
$("#"+idElizaPicImageSlider+" .scroll-content").scrollLeft(position.left);
setTimeout(function() {$(window).trigger('resize');}, 50);
$sliderList.find(".cntrlItem.link").off().click(function() { // TODO: naebnyt'
var $this = $(this),
name = $this.attr("data-name");
ajaxSend({
url: uriPicImage+"deleteVariation/"+name,
success: function() {
$this.closest("li.item.image").remove();
}
});
});
if (app.standAlone) {
$(".sliderItem a", $sliderList).off().click(function(e) { // TODO: подъебнуть на слайдер
hApi.pushState(
e,
$(this).attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
DIAppReg.regState(app.name, $(this).attr("href"));
});
}
}
});
}).on("click", "#"+idElizaPicImageFooterContent, function() {picItemContentLinks(picStatus.imageData.image.system.id);});
//--------------------------------------------------------------------------------------------------------------
// S L I D E R
$subfooter.off().on("click", "#"+idElizaPicImageSlider+" .elzCLStoolbar .link.right.dtr", function() {
$("#"+idElizaPicImageFooterThumbs).removeClass("active");
$("#"+idElizaPicImageFooterSiblings).removeClass("active");
$("#"+idElizaPicImageFooterVariations).removeClass("active");
setTimeout(function() {$(window).trigger('resize');}, 50);
$("#"+idElizaPicImageSlider).removeClass("show");
}).on("click", "#"+idElizaPicThumbCreate, function() {
imageEditActive = false;
imageCropActive = true;
$("#"+idElizaPicImagePageEdit).removeClass("active");
$("#"+idElizaPicImagePageCrop).addClass("active");
picImageRightCropper();
});
if (UserHandler.getDevice() !== "desktop") {
$content.on("swipeleft", function() {
$("#"+idElizaPicFooterNext).click();
}).on("swiperight", function() {
$("#"+idElizaPicFooterPrev).click();
});
}
}
/**
* Функция удаления альбома.
*/
function picStackDelete() {
var data = picStatus,
stackId = data.stackId,
$stackList = $jqStackList;
if(selectedCount > 0) {
var len = selectedList.length, name, a, item, deleteList = [];
if(!len) {
return false;
}
var $items = $(".fileItem", $stackList);
for(a = 0; a < len; a++) {
name = selectedList[a];
item = $items.filter('[data-name="'+name+'"]');
deleteList.push({type: item.attr("data-type"), id:item.attr("data-id")});
if (item.hasClass("orange")) {
continue;
}
item.remove();
}
if (data.name === 'trash') {
ajaxSend({
url: uriPicStack+"restoreList/",
data: {list: JSON.stringify(deleteList)},
success: function() {
picSelectionReset();
picPaginationUpdate();
picStackHandlerCallback("", false);
}
});
}
else {
ajaxSend({
url: uriPicStack+"deleteList/"+stackId,
data: {list: JSON.stringify(deleteList)},
success: function(result){
var selected = 0;
for(var a = 0; a < selectedCount; a++) {
item = $('.fileItem[data-name="'+selectedList[a]+'"]', $stackList);
selected +=1;
if (item.hasClass("orange")) {
continue;
}
item.remove();
}
/** @namespace result.deleted */
/** @namespace result.prevented */
var deleted = parseInt(result.deleted, 10),
prevented = parseInt(result.prevented, 10);
notificationLine(
langAppPicNotificationDel1+deleted+(prevented ? langAppPicNotificationDel2+prevented+langAppPicNotificationDel3 : ""),
prevented ? "blue" : "red 700", prevented ? 5000 : 2500);
picStackHandlerCallback("", false);
picSelectionReset();
picStackItemsInit();
picPaginationUpdate();
}
});
}
}
}
/**
* Отображение/сборка всплывающего окна настроек альбома/изображения.
*
* @param {string } itemType - тип объекта
* @param {int} itemId - идентификатор объекта
*/
function picItemSettings(itemType, itemId)
{
var id = idElizaPicPopupSettings,
idHash = "#"+id,
$popup = $(idHash),
$window = $(window),
baseWidth = 360,
baseHeight = 500,
wHeight = $window.height(),
wWidth = $window.width(),
posX = Math.round((wWidth - baseWidth ) / 2),
posY = Math.round((wHeight - baseHeight) / 2);
if (!$popup.length) {
var settingsLayouts = popupAssembler({
setts: {
id: id,
isDraggable: 1,
width: baseWidth,
height: baseHeight
},
enable: {
content: {cnt: {}}
}
});
$popup = $(idHash);
settingsLayouts.top.header.html(tmpR(tmpAppToolbarPanel, {
floated: "floated",
tone: "dark",
withoutbg: 1,
bordered: "bordered",
class: "padded bottom"
}));
settingsLayouts.top.header.find('[data-layout="toolbar_app"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
setts: {type: 'default', txt: '1'},
icon: {svg: {main: 'ic-image', sub: 'ic-pencil'}, size: 'small', color: {subbg: 'blue'}},
text: {str: langAppPicSettingsEdit, align: 'right'}
},
tmpObjElzIcon
));
settingsLayouts.top.header.find('[data-layout="toolbar_right"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
id: idElizaPicPopupSettingsClose,
title: langAppPicSettingsClose,
class: 'close',
setts: {type: 'default', link: '1', tip_h: 'dtr'},
icon: {svg: {main: 'ic-cross'}, size: 'small'}
},
tmpObjElzIcon
));
$("#"+idElizaPicPopupSettingsClose+", #"+idElizaPicPopupSettingsCancel).off().click(function() {$popup.addClass("hide");});
settingsLayouts.content.cnt.content.html(tmpR(
tmpAppScrollContent, {id: idElizaPicPopupScroll}
));
inputsInitDefault();
if (UserHandler.getDevice() === "desktop") {
$popup.draggable({handle: ".elzCLSenginePanel.header"});
}
}
ajaxSend({
url: uriPicUtils+"getDataForSettings/"+itemType+"/"+itemId,
success: function(result) {
result.lang = langTmplPopupSettings;
$("#"+idElizaPicPopupScroll).html(tmpR(
tmpAppPicPopupSettings,
result
));
inputsInitDefault();
var $header = $popup.find('.header[data-layout="top_header"]'),
$form = $popup.find("form"),
$app = $header.find('.wrapInner[data-layout="toolbar_app"]'),
$formTitle = $form.find('input[name="title"]'),
$formText = $form.find('textarea[name="description"]'),
$formAge = $form.find('input[name="age"]'),
$formAccess = $form.find('input[name="access"]'),
$formAgM = $form.find('input[name="master_age"]'),
$formAcM = $form.find('input[name="master_access"]');
/** @namespace result.isAlbum */
$app.find('.text.right').html(langAppPicSettingsEdit+" "+(result.isAlbum ? langAppPicSettings1 : langAppPicSettings2));
$app.find('.elzIc.main').removeClass("ic-image").removeClass("ic-folder").addClass(
result.isAlbum ? "ic-folder" : "ic-image"
);
DIContextMenu.hide();
$popup.removeClass("hide").css("top", posY).css("left", posX);
$popup.css("height", $header.height() + $form.height());
$header.on("submit", function(e) {e.preventDefault();});
modernTextInput($formTitle, function(callback) {
picItemSettingsSendData(itemType, itemId, {field: "title", value: $formTitle.val()}, callback);
});
modernTextInput($formText, function(callback) {
picItemSettingsSendData(itemType, itemId, {field: "descr", value: $formText.val()}, callback);
});
$formAccess.on("click", function() {
var $this = $(this), $icSpan;
if($formAcM.prop("checked")) {
$icSpan = $formAcM.next(".checker");
if (!$icSpan.html()) {
$icSpan.html('');
}
}
picItemSettingsSendData(itemType, itemId, {field: "access", value: $this.val(), master: $formAcM.prop("checked") ? "on" : ""});
});
$formAge.on("click", function() {
var $this = $(this), $icSpan;
if($formAgM.prop("checked")) {
$icSpan = $formAgM.next(".checker");
if (!$icSpan.html()) {
$icSpan.html('');
}
}
picItemSettingsSendData(itemType, itemId, {field: "age", value: $this.val(), master: $formAgM.prop("checked") ? "on" : ""});
});
$formAcM.on("change", function() {
var $this = $(this);
picItemSettingsSendData(itemType, itemId, {field: "access", value: $formAccess.filter(":checked").val(), master: $this.prop("checked") ? "on" : ""});
});
$formAgM.on("change", function() {
var $this = $(this);
picItemSettingsSendData(itemType, itemId, {field: "age", value: $formAge.filter(":checked").val(), master: $this.prop("checked") ? "on" : ""});
});
}
});
}
function picItemSettingsSendData(itemType, itemId, data, callback)
{
ajaxSend({
url: uriPicUtils+"setDataForSettings/"+itemType+"/"+itemId,
data: data,
success: function(result) {
if ($("#"+idElizaPicImageViewer).length) {
picGetImageMeta(picStatus.name, function() {
if ($("#"+idElizaPicImageDescr).length) {
picImageRightContent();
}
});
$("#"+idElizaPicFooterTitle).find(".text").html(
$("#"+idElizaPicPopupSettings).find('input[name="title"]').val()
);
return false;
}
else if ($("#"+idElizaApp).attr("data-appstate") === "list album" && parseInt(itemId, 10) === parseInt(picStatus.stackId, 10)) {
$("#"+idElizaPicFooterTitle).find(".text").html(
$("#"+idElizaPicPopupSettings).find('input[name="title"]').val()
);
}
result.lang = langTmplItemsItem;
$('[data-type="'+itemType+'"][data-id="'+itemId+'"]', $jqStackList).off().replaceWith(
tmpR(tmpAppPicItemsItem, result)
);
picStackItemsInit();
if (callback) {
callback();
}
}
});
}
function modernTextInput($object, callback) {
var control = $object.elizaIFormsControls(),
loading = 0, timeout;
$object.on("input", function() {
if (!loading) {
loading = 1;
control.showLoading();
}
clearTimeout(timeout);
timeout = setTimeout(function() {
control.showAccept();
loading = 0;
callback(function() {timeout = setTimeout(function() {control.resetIconInfo();}, 2000);});
}, 500);
});
}
/**
* Отображение/сборка окна связей с контентом
*
* @param {int} imageId - идентификатор изображения
*/
function picItemContentLinks(imageId)
{
var id = idElizaPicPopupContent,
idHash = "#"+id,
scrollId = idElizaPicPopupContentScroll,
booksScrl = idElizaPicPopupContentBooks,
$popup = $(idHash),
$window = $(window),
baseWidth = 640,
baseHeight = 500,
wHeight = $window.height(),
wWidth = $window.width(),
posX = Math.round((wWidth - baseWidth ) / 2),
posY = Math.round((wHeight - baseHeight) / 2);
if (!$popup.length) {
var settingsLayouts = popupAssembler({
setts: {
id: id,
isDraggable: 1,
width: baseWidth,
height: baseHeight
},
enable: {
top: {subheader: 1},
content: {cnt: {}}
}
});
$popup = $(idHash);
settingsLayouts.top.header.html(tmpR(tmpAppToolbarPanel, {floated: "floated", popup: 1}));
settingsLayouts.top.header.find('[data-layout="toolbar_app"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
class: 'grow',
setts: {type: 'default', txt: '1'},
icon: {svg: {main: 'ic-sharedfile'}, size: 'small'},
text: {str: langAppPicImgBtn4, align: 'right'}
},
tmpObjElzIcon
));
settingsLayouts.top.header.find('[data-layout="toolbar_right"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
id: idElizaPicPopupContentClose,
title: langAppPicSettingsClose,
class: 'close',
setts: {type: 'default', link: '1', tip_h: 'dtr'},
icon: {svg: {main: 'ic-cross'}, size: 'small'}
},
tmpObjElzIcon
));
$("#"+idElizaPicPopupContentClose).off().click(function() {$popup.addClass("hide");});
settingsLayouts.top.subheader.html(
'
'+
tmpR(tmpAppScrollContent, {id: booksScrl})+
'
'
);
settingsLayouts.content.cnt.content.html(tmpR(
tmpAppScrollContent, {id: scrollId}
));
inputsInitDefault();
if (UserHandler.getDevice() === "desktop") {
$popup.draggable({handle: ".elzCLSenginePanel.header"});
}
}
DIContextMenu.hide();
$popup.removeClass("hide").css("top", posY).css("left", posX);
ajaxSend({
url: uriPicUtils+"getContentLinksFull/"+imageId,
success: function(result) {
/** @namespace result.bookmarks */
/** @namespace result.bookmarks */
/** @namespace {string} result.status */
if (result.status === "no_links") {
$popup.addClass("hide");
return this;
}
$("#"+booksScrl).html(tmpR(
tmpAppCommonBookmarks,
{wrap: {id: idElizaPicContentBookmarks}, list: result.bookmarks},
{"common/bookmarks_item": tmpAppCommonBookmarksItem}
));
$("#"+scrollId).html(tmpR(tmpAppPicPopupContent, {list: result.content, lang: langTmplPopupContent}));
var $books = $("#"+idElizaPicContentBookmarks).find(".bookmarkItem");
$books.off().click(function() {
var $this = $(this);
if ($this.hasClass("active")) {
return this;
}
ajaxSend({
url: uriPicUtils+"getContentLinksByType/"+imageId+"/"+$this.attr("data-cid"),
success: function (result) {
$("#"+scrollId).html(tmpR(tmpAppPicPopupContent, {list: result, lang: langTmplPopupContent}));
$books.removeClass("active");
$this.addClass("active");
}
});
});
}
});
}
var presetListSet = false;
function picPresetNameListReset(selectOverride)
{
ajaxSend({
url: uriPicUtils+"getCorrectionsPreset/"+picStatus.imageData.image.system.id,
success: function(result) {
var len = result.length, a, item, html = "", part;
for(a = 0; a < len; a++) {
item = result[a];
part = "";
if (item.disabled && item.disabled === 1) {
part = ' disabled="disabled"';
}
else if((item.selected && item.selected === 1 && !selectOverride) || (selectOverride && selectOverride === item.val)) {
part = ' selected="selected"';
}
html += '';
}
$("#"+idElizaPicCorrPresetList).html(html).change();
presetListSet = true;
}
});
}
/**
* Сборка/отображение окна проводника по альбомам
*/
function picExplorerWindow()
{
var toolTreeLayouts,
id = idElizaPicPopupExplorer,
idHash = "#"+id,
scrollId = idElizaPicPopupExplorerScroll,
$popup = $(idHash),
$window = $(window),
baseWidth = 640,
baseHeight = 610,
wHeight = $window.height(),
wWidth = $window.width(),
posX = Math.round((wWidth - baseWidth ) / 2),
posY = Math.round((wHeight - baseHeight) / 2),
$explorer;
if (!$popup.length) {
toolTreeLayouts = popupAssembler({
setts: {
id: id,
isResizable: 1,
isDraggable: 1,
width: baseWidth,
height: baseHeight
},
enable: {content: {cnt: {}}}
});
$popup = $(idHash);
toolTreeLayouts.top.header.html(tmpR(tmpAppToolbarPanel, {
floated: "floated",
tone: "dark",
withoutbg: 1,
bordered: "bordered",
class: "padded bottom"
}));
toolTreeLayouts.top.header.find('[data-layout="toolbar_app"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
setts: {type: 'default', txt: '1'},
icon: {svg: {main: 'ic-foldertree'}, size: 'small'},
text: {str: langAppPicExplorer, align: 'right'}
},
tmpObjElzIcon
));
toolTreeLayouts.top.header.find('[data-layout="toolbar_right"]').html(tmpR(
tmpAppToolbarButton, {
tag: 'div',
id: idElizaPicExplorerClose,
title: langAppPicExplorerClose,
class: 'close',
setts: {type: 'default', link: '1', tip_h: 'dtr'},
icon: {svg: {main: 'ic-cross'}, size: 'small'}
},
tmpObjElzIcon
));
$("#"+idElizaPicExplorerClose).click(function() {$popup.addClass("hide");});
toolTreeLayouts.content.cnt.content.html(tmpR(
tmpAppScrollContent, {id: scrollId}
));
inputsInitDefault();
$("#" + scrollId).html(tmpR(tmpAppPicExplorerWp, {id: idElizaPicExplorerWP}));
if (UserHandler.getDevice() === "desktop") {
$popup.draggable({
handle: ".elzCLSenginePanel.header"
}).resizable({
handles: 'all', minWidth: 320, minHeight: 320
});
}
$explorer = $("#"+idElizaPicExplorerWP);
$explorer.on("click", ".elzCLSlabel.link", function() {
picMoveToStack($(this).closest(".elz.expItem"), true);
$popup.addClass("hide");
});
$explorer.closest(".padSmall").addClass("picExplorer").on("click", ".expNodeShower", function() {
var $this = $(this),
$li = $this.closest("li"),
id = $this.attr("data-id");
if(!$("#"+idElizaPicExplorerUl+id).length) {
ajaxSend({
url: uriPicStack+"getAlbumTree/"+id,
async: false,
success: function(result) {
picExplorerCreateNode(result[id], id, $li);
}
});
}
}).on("click", "a.expLink", function(e) {
$("#"+idElizaPicExplorerWP).find(".expInner").removeClass("here");
$(this).closest(".expInner").addClass("here");
if (app.standAlone) {
hApi.pushState(
e,
$(this).attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
(UserHandler.getDevice() === "desktop" ? $jqStackScroll.closest(".scroll-content") : $jqStackScroll.closest(".elzScroll")).scrollTop(0);
DIAppReg.regState(app.name, $(this).attr("href"));
}
});
}
$popup.removeClass("hide").css("top", posY).css("left", posX);
$explorer = $("#"+idElizaPicExplorerWP);
ajaxSend({
url: uriPicStack+"getAlbumTree",
success: function(result) {
if (!result["0"]) {
return this;
}
$explorer.html('');
picExplorerInsertLi(
$explorer.find("ul"),
0,
picStatus.name === "root" || picStatus.name === "" ? 1 : 0,
0,
0,
"root",
"",
0,
0
);
picExplorerCreateNode(result[0], 0, $("#"+idElizaPicExplorerLi+"0"));
if (selectedCount) {
$(".item.picExplorer").removeClass("hide");
$("#"+idElizaPicExplorerLi+picStatus.stackId).find(".expInner.here .item.picExplorer").addClass("hide");
}
}
});
}
/**
* Создание узла в проводнике по альбомам. Создает узел и наполняет его, в случае нахождения очередного узла,
* вызывает себя же рекурсивно
*
* @param {object} list - Массив со всеми узлами. Вложенность узла в узел отсуствует
* @param {int} stackId - Индекс узла, который надо добавить
* @param {object} $li
*/
function picExplorerCreateNode(list, stackId, $li)
{
var length = list.length,
isExpandable = 0,
isActive = 0,
isContent = 0,
$ul,
stackName = picStatus.name,
tplLi = tmpAppPicExplorerLi,
icon = {
svg: {
main: 'ic-folder'
},
radius: 'rad',
size: 'small',
color: {bg: ""}
};
$li.append(tmpR(
tmpAppPicExplorerUl, {
name: idElizaPicExplorerUl,
id: stackId
})
);
$ul = $("#"+idElizaPicExplorerUl+stackId);
for(var a = 0, item; a < length; a += 1) {
item = list[a];
if(parseInt(item.stacks, 10)) {
isExpandable = 1;
}
else {
isExpandable = 0;
}
if(stackName === item.url) {
isActive = 1;
}
else {
isActive = 0;
}
isContent = parseInt(item.isContent, 10);
if (isContent) {
icon.color.bg = "orange 700";
}
else {
icon.color.bg = "";
}
/** @namespace item.stack_id */
$ul.append(tmpR(tplLi, {
icon: icon,
images: parseInt(item.images, 10),
stacks: parseInt(item.stacks, 10),
name: 'picExplorer',
id: item.stack_id,
title: item.title,
mode: app.standAlone ? "/" : "#pic/",
sname: item.url,
isExpandable: isExpandable,
isActive: isActive,
isContent: isContent
}, tmpObjElzIcon));
}
}
function picExplorerInsertLi($ul, isExpandable, isActive, isContent, stackId, title, url, images, stacks) {
var stackName = picStatus.name,
icon = {
svg: {
main: 'ic-folder'
},
radius: 'rad',
size: 'small'
};
$ul.append(tmpR(tmpAppPicExplorerLi, {
icon: icon,
images: images,
stacks: stacks,
name: idElizaPicExplorerLi,
id: stackId,
title: title,
mode: app.standAlone ? "/" : "#pic/",
sname: url,
isExpandable: isExpandable,
isActive: isActive,
isContent: isContent,
lang: langTmplExplorerLi
}, tmpObjElzIcon));
}
/**
* Функция сборки и добавления фуутера для стэка
*
* @param {bool} fullRebuild - При значении true производится полная пересборка фуутера, включая tml
*/
function picInsertFooterStack(fullRebuild)
{
var $layout = app.layout.content.cnt.footer,
btn = tmpAppToolbarButton,
icon = tmpAppCommonIcon,
footerId = idElizaPicFooter,
status = picStatus,
ids = picIds;
if (fullRebuild) {
$layout.html(tmpR(tmpAppFooter, {id: footerId}));
}
var $footer = $("#"+footerId),
$left = $footer.find('[data-layout="footer_left"]'),
$right = $footer.find('[data-layout="footer_right"]'),
$middle = $footer.find('[data-layout="footer_middle"]'),
lftArr, rgtArr;
/*if (!fullRebuild) {
$middle.off().html("");
}*/
picPaginatingResetHtml();
if (fullRebuild) { // ЭТИ ЧАСТИ НЕ ТАК ЧАСТО МЕНЯЮТСЯ, ОТ СТРАНИЦЫ К СТРАНИЦЕ ОДНИ И ТЕЖЕ
// Это константа
lftArr = [
tmpR(btn, {
id: idElizaPicFooterAlbums, tag: "div", title: langAppPicStackFooter1,
class: (picGLBAlbumsOnly === "true" ? "active" : ""),
border: {enable: 1, lines: "top", color: 'blue'},
setts: {type: 'default', link: '1', align: "left", tip_v: 'dtb', tip_h: 'dtl'},
icon: {svg: {main: 'ic-foldertree'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicFooterContent, tag: "div", title: langAppPicStackFooter2,
class: (picGLBContentOnly === "true" ? "active" : ""),
border: {enable: 1, lines: "top", color: "orange"},
setts: {type: 'default', link: '1', align: "left", tip_v: 'dtb', tip_h: 'dtl'},
icon: {svg: {main: 'ic-sharedfile'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(tmpAppToolbarTitle, {
id: idElizaPicFooterTitle,
text: picStatus.title
})
];
rgtArr = [
tmpR(tmpAppToolbarNum, {id: idElizaPicFooterNumbers}),
tmpR(btn, {
id: idElizaPicToolUnsel, tag: "div", title: langAppPicStackFooter3,
class: "hide",
setts: {type: 'default', link: '1', align: "right", tip_v: 'dtb', tip_h: 'dtr'},
//data: 'data-xhide="320"',
icon: {svg: {main: 'ic-selectremove'}, size: 'small'}
}, tmpObjElzIcon)
];
$left.html(lftArr.join(""));
$right.html(rgtArr.join(""));
picFooterNumbersEditor();
}
}
function picFooterNumbersEditor() {
var paginationShift = 0,
status = picStatus;
$("#"+idElizaPicFooterNumbers+" .current").off().focusout(function(){paginationShift = 0;}).keyup(function(e){
if(e.which === 16) {
paginationShift = 0;
}
}).keydown(function(e) {
var $this = $(this),
keyNum = e.which,
toPage,
keyAllowed = [8, 13, 37, 38, 39, 40, 46, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 189];
if( keyNum === 16 ) {
paginationShift = 1;
return false;
}
if( $.inArray( keyNum, keyAllowed ) < 0 || paginationShift ) {
return false;
}
if(keyNum === 13) {
var pages = pageParser($this.html(), picStatus.pages.max),
uri = (app.standAlone ? "/" : "#pic") + (status.name === "root" ? "" : (!app.standAlone ? "/" : "")+status.name)+"?page=";
/*if (pages.start > picStatus.pages.max) {
pages.start = picStatus.pages.max;
}
if (pages.end > picStatus.pages.max) {
pages.end = picStatus.pages.max;
}*/
toPage = (pages.start !== pages.end) ? pages.start+"-"+pages.end : pages.start;
if (app.standAlone) {
hApi.replaceStateData({callback: "picRouter"}, uri+toPage);
DIAppReg.regState(app.name, uri+toPage);
appPicStandAloneRouter();
}
else {
bBone.history.navigate(uri+toPage, {trigger: true});
}
return false;
}
});
}
/**
* Функция проверки состояния фильтров в фуутере для стека. Если фильтры установлены, то скрываются кнопки
* добавления картинки и альбома. Это делается в той связи, что в режиме только контент||альбомы нельзя добавлять
* новые изображения/альбомы.
*/
function picFooterFiltersCheck()
{
var ids = picIds,
toolPair = $("#"+idElizaPicToolAddImage+", #"+idElizaPicToolAddStack);
if (picGLBAlbumsOnly === "true" || picGLBContentOnly === "true") {
toolPair.addClass("hide");
}
else {
toolPair.removeClass("hide");
}
}
/**
* Функция получения мета-данных поль конкретному альбому.
* picGLBContentOnly [true|false] - показывать ли только связанное с контентом?
* picGLBAlbumsOnly [true|false] - показывать ли только альбомы?
*
* @param {string} name - Нейм альбома, семь символов 0-9a-zA-Z
* @param {function} callback - Функция вызываемая после получения данных
*/
function picGetAlbumMeta(name, callback)
{
ajaxSend({
url: uriPicStack+"getName/"+name+"/"+picGLBContentOnly+"/"+picGLBAlbumsOnly,
success: function(result) {
/** @namespace result.id */
/** @namespace result.owner */
/** @namespace result.name */
/** @namespace result.items */
/** @namespace result.parent */
/** @namespace result.title */
/** @namespace result.editable */
/** @namespace result.pages */
/** @namespace result.restricted */
if (!picParseMetaAlbum(result)) {
return false;
}
if (callback) {
callback();
}
}
});
}
function picParseMetaAlbum(result) {
/** @namespace result.id */
/** @namespace result.owner */
/** @namespace result.name */
/** @namespace result.items */
/** @namespace result.parent */
/** @namespace result.title */
/** @namespace result.editable */
/** @namespace result.pages */
/** @namespace result.restricted */
if (result.restricted) {
appCoreRestrictedAccessPage(result.restricted, 'stack');
return false;
}
picStatus.stackId = parseInt(result.id, 10);
picStatus.ownerId = parseInt(result.owner, 10);
picStatus.name = result.name;
picStatus.items = result.items;
picStatus.parent = result.parent;
picStatus.parent_id = result.parent_id;
picStatus.title = result.title;
picStatus.editable = parseInt(result.editable, 10);
picStatus.pages.max = parseInt(result.pages, 10) || 1;
return true;
}
/**
* Функция сброса отображения постраничности. Приводит все информационные эллементы постраничности к текущему
* (актуальному) состоянию
*/
function picPaginatingReset()
{
var ids = picIds,
$cur = $("#"+idElizaPicFooterNumbers+" .current"),
$max = $("#"+idElizaPicFooterNumbers+" .total"),
pages = picStatus.pages, cur = pages.start;
if (pages.start !== pages.end) {
cur = pages.start+"-"+pages.end;
}
$max.html(pages.max);
$cur.html(cur);
}
function picPaginatingResetHtml() {
var btn = tmpAppToolbarButton,
icon = tmpAppCommonIcon,
pages = picStatus.pages,
midButtons = {
left: {class: "", tag: "a"},
right: {class: "", tag: "a"},
root: {class: "", tag: "a"}
},
status = picStatus,
ids = picIds;
var $middle = $("#"+idElizaPicFooter).find('[data-layout="footer_middle"]'),
midArr, rooTitle;
if (pages.start <= 1) {
midButtons.left = {class: "disabled", tag: "div"};
}
if (pages.end >= pages.max) {
midButtons.right = {class: "disabled", tag: "div"};
}
if (picStatus.name === "root") {
rooTitle = langAppPicPageGoTo1;
if (picStatus.pages.end === 1) {
midButtons.root.class = "disabled";
}
}
else {
rooTitle = !status.parent ? (UserHandler.getId() ? langAppPicPageGoTo2 : langAppPicPageGoTo3) : langAppPicPageGoTo4;
}
var pageStart = !app.standAlone ? "#pic" : "/",
pageName = (status.name === "root" ? "" : (!app.standAlone ? "/" : "")+status.name);
midArr = [
tmpR(btn, {
id: idElizaPicFooterPrev,
tag: midButtons.left.tag,
href: pageStart + pageName + "?page="+(pages.start-1),
class: midButtons.left.class,
title: langAppPicPageGoTo5,
setts: {type: 'default', link: '1', tip_v: 'dtb'},
icon: {svg: {main: 'ic-move-left'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicFooterRoot,
tag: midButtons.root.tag,
href: pageStart + (status.parent ? (!app.standAlone ? "/" : "")+status.parent : ""),
class: midButtons.root.class,
title: rooTitle,
setts: {type: 'default', link: '1', tip_v: 'dtb'},
icon: {svg: {main: 'ic-gallery3'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicFooterNext,
tag: midButtons.right.tag,
href: pageStart + pageName + "?page="+(pages.end+1),
class: midButtons.right.class, title: langAppPicPageGoTo10,
setts: {type: 'default', link: '1', tip_v: 'dtb'},
icon: {svg: {main: 'ic-move-right'}, size: 'small'}
}, tmpObjElzIcon)
];
$middle.html(midArr.join(""));
}
/**
* Функция получения и сброса постраничности. Реализованна через получение мета данных альбома и последующим
* сбросом постраничности до актуального состояния
*/
function picPaginationUpdate()
{
if (picStatus.state === "stack") {
picGetAlbumMeta(picStatus.name, function() {picPaginatingReset();});
}
}
/**
* Универсальная функция для получения списка картинок/альбомов, для указанного альбома. В наличии несколько
* возможных режимов работы:
* 1. "Добавление после" - полученные данные вставляются ПОСЛЕ указанного итема, этот режим полезен при подгрузке
* новых изображений при скроллинге;
*
* 2. "Добавление перед" - полученные данные вставляются ПЕРЕД указанным итемом, этот режим полезен при добавлении
* новых изображений, когда требуется вставить в начало страници ряд новых итемов и
* одновременно удалить такое-же количество старых, чтобы на странице было постоянное
* количество итемов. Также может быть полезно при добавлении функции предгрузки по
* скроллингу вверх;
*
* 3. "append/prepend" - Режимы просто регулируют метод вставки в контейнер, никак не влияет на способ получения
* данных. Получается снимок по указанным страницам.
*
* @param {object} options - Настройки для получения списка изображений/альбомов
* @param {string=} options.type - Режим работы
* @param {number=} options.ownerId - Идентификатор хозяина альбома
* @param {number=} options.stackId - Идентификатор альбома
* @param {string=} options.itemName - Нейм объекта перед/после которого производится вставка
* @param {int=} options.itemCount - Количество итем покотрые вставляются перед/после объекта
* @param {string=} options.page - Строка постраничности
* @param {bool=} options.clear - Удалить первые PAGES_PER_PAGE итемов
* @param {object=} options.event - Объект события, если нужен для работы
* @param {function=} options.success - Функция обратного вызова, которые вызывается по завершению
*/
function picGetItemsList(options)
{
var type = options.type,
memberId = options.ownerId,
stackId = options.stackId,
dPages = picStatus.pages.start+"-"+picStatus.pages.end,
$list = $("#"+idElizaPicContentStackList),
clear = options.clear ? options.clear : false,
$item, itemName, itemCount, itemId, itemType, page, url;
if(type === "add_after") {
itemName = options.itemName;
itemCount = options.itemCount;
$item = $('#'+ idElizaPicContentStackList+' li.fileItem[data-name="'+itemName+'"]');
itemId = $item.attr("data-id");
itemType = $item.attr("data-type");
url = uriPicStack+"getItemsList/after/"+itemType+"/"+itemId+"/"+stackId+"/"+memberId+"/"+itemCount+"/"+picGLBContentOnly+"/"+picGLBAlbumsOnly;
}
else if(type === "add_before") {
itemName = options.itemName;
itemCount = options.itemCount;
$item = $('#'+ idElizaPicContentStackList+' li.fileItem[data-name="'+itemName+'"]');
itemId = $item.attr("data-id");
itemType = $item.attr("data-type");
url = uriPicStack+"getItemsList/before/"+itemType+"/"+itemId+"/"+stackId+"/"+memberId+"/"+itemCount+"/"+picGLBContentOnly+"/"+picGLBAlbumsOnly;
}
else {
page = options.page || dPages;
url = uriPicStack+"get/"+memberId+"/"+stackId+"/"+page+"/"+picGLBContentOnly+"/"+picGLBAlbumsOnly;
}
ajaxSend({
url: url,
success: function(result) {
if (type === "append" ) {$list.append( picGetItemsListHtmlList(result));}
else if (type === "prepend" ) {$list.prepend(picGetItemsListHtmlList(result));}
else if (type === "add_after" ) {$item.after( picGetItemsListHtmlList(result));}
else if (type === "add_before") {$item.before( picGetItemsListHtmlList(result));}
else {
$list.html(picGetItemsListHtmlList(result));
}
if(clear) {
$jqStackList.find(".fileItem:lt("+PAGES_PER_PAGE+")").remove();
options.event.currentTarget.scrollTop -= 1;
}
picStackItemsInit();
if (options.success) {
options.success();
}
picStackTopMenuCheck();
picPluploaderFrame();
picStackScrollLoader();
if (!$("li", "#"+idElizaPicContentStackList).length && (picGLBContentOnly === "true" || picGLBAlbumsOnly === "true")) {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
appCoreRestrictedAccessPage({code: "empty", save: 1});
}
else if (!$("li", "#"+idElizaPicContentStackList).length && picStatus.name !== "trash" &&
(picStatus.name !== "root" || picStatus.pages.start === 1) && picStatus.ownerId === UserHandler.getId()) {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").addClass("empty").removeClass("hide");
}
else if (picStatus.name !== "root" && picStatus.pages.start !== 1 && picStatus.name !== "trash") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
scroller_obj.scroll();
}
});
}
/**
* Функция пересборки html контентной области стэка
*
* @returns {boolean} - возвращает false если нет прав на редактирование
*/
function picStackRebuildHtml()
{
insertStackScroll();
var ids = picIds, uploadCls = "", cntArr, prev;
if (picStatus.pages.start !== 1 && picStatus.name !== "root") {
uploadCls = "hide";
}
if (!$("#"+idElizaPicPluploadBtn).length) {
cntArr = [
''+
tmpR(
tmpAppCommonUploadZone, {
id: idElizaPicPluploadBtn,
parent_id: idElizaPicPluploadZone,
description: helperGenUploadZoneText(),
icon: {svg: {main: picStatus.name === "root" ? 'ic-image' : 'ic-images', sub: 'ic-plus'}, color: {subbg: 'blue'}},
circle: {id: idElizaPicPluploadCircle, size: 'large ', radius: '55', color: 'blue'}
},
tmpObjElzIcon
)+"
",
tmpR(
tmpAppPicItemsList, {id: idElizaPicContentStackList, list: {}, lang: langTmplItemsItem},
tmpObjItemsItem
)
];
$jqStackScroll.html(cntArr.join(""));
}
else {
$("#"+idElizaPicContentStackList).closest(".elz.picCLSgrid").replaceWith(tmpR(
tmpAppPicItemsList, {id: idElizaPicContentStackList, list: {}, lang: langTmplItemsItem},
tmpObjItemsItem
));
}
var $stackList = $("#"+idElizaPicContentStackList);
$jqStackList = $stackList;
if (!picStatus.editable) {
return false;
}
if (picGLBContentOnly === "true" || picGLBAlbumsOnly === "true") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
picStackItemsInitSingle();
picSelectionReset();
$stackList.attr("for", $("#"+idElizaPicToolAddImage).attr("for"));
return true;
}
/**
* Функция производить сборку HTML по списку итемов
*
* @param {object} list - Стандартизированный список итемов альбома (картинки и альбомы)
*
* @returns {string} - HTML код списка итемов
*/
function picGetItemsListHtmlList(list)
{
return tmpR(
tmpAppPicItemsGroup,
{list: list, iconEnabled: picStatus.name !== "root" && picStatus.name !== "trash" ? 1 : 0, lang: langTmplItemsItem},
tmpObjItemsItem
);
}
/**
* Сброс выделения в альбомы. Как следствие сброс всех необходимых счетчиков и систем уведомления о количестве
* выбранных итемов
*/
function picSelectionReset()
{
var status = picStatus,
ids = picIds,
idUnsel = idElizaPicToolUnsel,
idAlbum = idElizaPicToolAddStack,
idTree = idElizaPicToolTree,
idDelete = idElizaPicToolTrash,
$delete = $("#"+idDelete),
$deleteIcg = $delete.find(".icg i:first"),
$album = $("#"+idAlbum),
$tree = $("#"+idTree);
$jqStackList.find(".ui-selected").removeClass("ui-selected");
$delete.elizaIIconsControls().setSubBG("").setSubHtml("");
$album.elizaIIconsControls().setSubBG("send").setSubHtml("");
$tree.elizaIIconsControls().setSubBG("").setSubHtml("");
$("#"+idUnsel).elizaIIconsControls().setSubBG("").setSubHtml("");
$album.attr("data-elz-title", langApiPicSelectionTitle1);
$tree.attr("data-elz-title", langApiPicSelectionTitle2);
if (status.name !== "trash") {
$deleteIcg.addClass("ic-trash").removeClass("ic-loop");
$delete.attr("data-elz-title", langApiPicSelectionTitle3);
}
else {
$deleteIcg.removeClass("ic-trash").addClass("ic-loop");
$delete.attr("data-elz-title", langApiPicSelectionTitle4);
}
selectedCount = 0;
selectedList = [];
$("#"+idElizaPicToolUnsel).addClass("hide");
$(".item.picExplorer").addClass("hide");
}
/**
* Функция инициализации органов управления для итема (картинка/альбом). Управление не доступно в корзине и на
* мобильных устройства, потому что сорьки и чмаки.
*
* @returns {boolean} - Возвращает false если нет прав на редактирование, мобильник или корзина
*/
function picStackItemsInit()
{
var $stackList = $jqStackList,
$noInited = $stackList.find(".fileItem.noInit");
if (!picStatus.editable || UserHandler.getDevice() !== "desktop" || picStatus.name === "trash") {
return false;
}
else {
$noInited.removeClass("noInit");
}
if (UserHandler.getDevice() === "desktop") {
/**
* Включаем возможность перетаскивания итема
*/
$noInited.filter(".draggable").draggable({
//revert: true,
revertDuration: 100,
handle: ".itemLink",
containment: ".filesList",
cursor: "move",
helper: "clone",
start: function () {
var $thisM = $(this),
$dragging = $('[data-name="' + $thisM.attr("data-name") + '"]:last', $stackList),
$count = $dragging.find(".dragCount");
selectedCount = !selectedCount ? 1 : selectedCount;
$count.show().html(selectedCount);
}
});
/**
* Это дроп итема на итем, чтобы стакнуть
*/
$noInited.find(".itemLink").droppable({
accept: ".fileItem.draggable",
tolerance: "pointer",
over: function () {
$(this).closest(".fileItem").addClass("hover");
},
out: function () {
$(this).closest(".fileItem").removeClass("hover");
},
drop: function (event, ui) {
var $thisM = $(this),
$item = $thisM.closest(".fileItem"), // Сюда бросаем
$drag = ui.draggable;
selectedList.push($item.attr("data-name"));
if (!$drag.hasClass("ui-selected")) {
$drag.remove();
selectedList.push($drag.attr("data-name"));
}
picMoveToStack($item);
}
});
/**
* Это дроп на зону пересортировки
*/
$noInited.find(".reorder").droppable({
accept: ".fileItem.draggable",
hoverClass: "hover",
tolerance: "pointer",
drop: function (event, ui) {
var $thisM = $(this),
$item = $thisM.closest(".fileItem"),
$drag = ui.draggable,
a,
sel,
$list = $stackList,
orderFirst = 0;
orderFirst = parseInt($(".fileItem:first", $stackList).first().attr("data-order"), 10);
if (!$drag.hasClass("ui-selected")) {
if ($thisM.hasClass("left")) {
$item.before($drag);
}
else {
$item.after($drag);
}
}
if (selectedCount > 0) {
if ($thisM.hasClass("left") || ($thisM.hasClass("right") && $item.next("li").attr("data-id"))) {
for (a = 0; a < selectedCount; a++) {
sel = selectedList[a];
if (!sel) {
continue;
}
$item.before($('.ui-selected[data-name="' + sel + '"]', $list));
}
}
else {
for (a = 0; a < selectedCount; a++) {
sel = selectedList[a];
if (!sel) {
continue;
}
$list.append($('.ui-selected[data-name="' + sel + '"]', $list));
}
}
}
var orderObject = {};
$stackList.find(".fileItem").removeClass("hover").removeClass("ui-selected").each(function () {
var $this = $(this);
$this.attr("data-order", orderFirst);
if (!orderObject.hasOwnProperty($this.attr("data-name"))) {
orderObject[$this.attr("data-name")] = {
type: $this.attr('data-type'),
order: orderFirst,
id: $this.attr('data-id')
};
}
orderFirst--;
});
ajaxSend({
url: uriPicStack+"reorder/" + picStatus.ownerId + '/' + picStatus.stackId,
data: {order: JSON.stringify(orderObject)},
success: function (result) {
}
});
orderFirst = 0;
selectedCount = 0;
selectedList = [];
picSelectionReset();
}
});
}
// Удаляем класс "Не инициализированно", чтобы потом не инициализировать
$noInited.removeClass("noInit");
return true;
}
function picStackItemsInitSingle()
{
var $stackList = $("#"+idElizaPicContentStackList), prev, ids = picIds;
if (DISite.getPackageName() === "Pic") {
$stackList.on("click", "a", function(e) {
hApi.pushState(
e,
$(this).attr("href"),
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
DIAppReg.regState(app.name, $(this).attr("href"));
});
}
if (UserHandler.getDevice() === "desktop") {
$stackList.filter(".selectable").selectable({
filter: 'li.fileItem',
//autoRefresh: false,
cancel: ".itemLink, .itemTitle, .thumb",
selecting: function (e, ui) {
var curr = $(ui.selecting.tagName, e.target).index(ui.selecting);
if (e.shiftKey && prev > -1) {
$(ui.selecting.tagName, e.target).slice(Math.min(prev, curr), 1 + Math.max(prev, curr)).addClass('ui-selected');
prev = -1;
} else {
prev = curr;
}
},
start: function () {
DIContextMenu.hide();
},
stop: function () {
var $selected = $stackList.find("li.fileItem.ui-selected"),
$tree = $("#"+idElizaPicToolTree),
$trash = $("#"+idElizaPicToolTrash),
$unsel = $("#"+idElizaPicToolUnsel),
$addStack = $("#"+idElizaPicToolAddStack);
selectedCount = parseInt($selected.length, 10);
selectedList = [];
$selected.each(function () {
var $thisM = $(this);
if ($thisM.attr("data-name")) {
selectedList.push($thisM.attr("data-name"));
}
});
if (selectedCount) {
var name = picStatus.name,
trashColor = name === 'trash' ? 'success' : 'error';
$trash.elizaIIconsControls().setSubBG(trashColor).setSubHtml(selectedCount);
$tree.elizaIIconsControls().setSubBG("success").setSubHtml(selectedCount);
$addStack.elizaIIconsControls().setSubBG("success").setSubHtml(selectedCount);
$unsel.elizaIIconsControls().setSubBG("send").setSubHtml(selectedCount);
$addStack.attr("data-elz-title", langApiPicSelectionTitle5);
$tree.attr("data-elz-title", langApiPicSelectionTitle6);
if (name === 'trash') {
$trash.attr("data-elz-title", langApiPicSelectionTitle7);
}
else {
$trash.attr("data-elz-title", langApiPicSelectionTitle8);
}
$(".item.picExplorer").removeClass("hide");
$("#"+idElizaPicExplorerLi+picStatus.stackId).find(".expInner.here .item.picExplorer").addClass("hide");
$unsel.removeClass("hide");
}
else {
picSelectionReset();
}
}
});
}
/**
* Это редактирование тайтла у итема
*/
$stackList.on("keydown", ".itemTitle", function(e) {
var $this = $(this),
keyNum = e.which,
$item = $this.closest(".fileItem"),
type = $item.attr("data-type") === "album" ? "stack" : "image";
if(keyNum === 13) {
ajaxSend({
url: uriPic+type+"/setTitle/"+$item.attr("data-id"),
data: {title: $this.html()},
success: function(){}
});
$this.blur();
return false;
}
});
$stackList.on("click", ".makeStackIcon", function() {
var $this = $(this);
if ($this.hasClass("active")) {
return true;
}
ajaxSend({
url: uriPicStack+"setIcon/"+picStatus.name+"/"+$this.closest(".fileItem").attr("data-id"),
success: function() {
$stackList.find(".makeStackIcon").removeClass("active").attr("title", langApiPicSelectionTitle9);
$this.addClass("active").attr("title", langApiPicSelectionTitle10);
}
});
});
}
var pluploadObject; // Объект плуплоадера
var pluploadFromContext = 'false'; // Если установлено 'true' это значит, что включена контекстная меню
/**
* Инициализирует плуплоадер и возвращает ссылку на объект. Если плуплоадер был инициализирован, то
* просто возвращает ссылку
*
* @returns {object} - Возвращает ссылку на объект плуплоадера
*/
function picPluploaderGet(forceRebuild)
{
var type = typeof pluploadObject;
if (type === "object" && !forceRebuild) {
return pluploadObject;
}
if (type === "object") {
pluploadObject.plupload.destroy();
pluploadObject = "";
}
var loadToStack = false,
loadStackNm = '',
config = picStatus,
pages = config.pages,
autoGroupEnable = UserHandler.getSetting("pic", "autogroup_enable"),
autoGroupCount = UserHandler.getSetting("pic", "autogroup_size"),
picItem = tmpAppPicItemsItem,
loadingCircles = {},
PPP = PAGES_PER_PAGE,
jqIndex = 0,
pBar = ProgressBar.getInstance(),
uploader = new plupload.Uploader({
runtimes: 'html5,html4',
url: uriPicImage+'add',
dragdrop: true,
browse_button : document.getElementById(idElizaPicToolAddImage),
filters : {
max_file_size : '10mb',
mime_types: [{title : "Image files", extensions : "jpg,jpeg,gif,png"}]
},
init: {
FilesAdded: function (up) {
var stackName = picStatus.name;
jqIndex = ((pages.end - (pages.start - 1)) * PPP) - 1;
pBar.reset(1);
$("#"+idElizaPicPluploadBtn).removeClass("hover");
if (up.total.queued >= autoGroupCount && pluploadFromContext === 'false' && autoGroupEnable ) {
if(pages.start === 1) {
picStackAddLoader('album', idElizaPicUploadToNewStack, false);
loadingCircles[idElizaPicUploadToNewStack] = new LoadingCircle(idElizaPicUploadToNewStack+"_circle");
$jqStackList.find(".fileItem:gt("+jqIndex+")").remove(); // удаляет лишние картинки
}
var data = picAddStack(picStatus.stackId, 0);
loadStackNm = data.system.name;
uploader.settings.url = uriPicImage+"add/"+loadStackNm;
loadToStack = true;
}
else {
loadToStack = false;
loadStackNm = '';
if (pluploadFromContext !== 'false') {
stackName = pluploadFromContext;
$jqStackList.find('.fileItem[data-name="'+pluploadFromContext+'"]').replaceWith(
picStackAddLoader('album', idElizaPicUploadToNewStack, true)
);
loadingCircles[idElizaPicUploadToNewStack] = new LoadingCircle(idElizaPicUploadToNewStack+"_circle");
}
uploader.settings.url = uriPicImage+"add/"+stackName;
}
up.total.queueLen = up.total.queued;
uploader.start();
DIContextMenu.hide();
if (picStatus.name !== "trash") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty");
}
else {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
},
UploadFile: function(up, file) {
if (!loadToStack) {
if(pages.start === 1 && pluploadFromContext === 'false') {
picStackAddLoader('image', file.id, false);
loadingCircles[file.id] = new LoadingCircle(file.id+"_circle");
$jqStackList.find(".fileItem:gt("+jqIndex+")").remove(); // удаляет лишние картинки
}
}
},
FileUploaded: function(up, file, info) {
var jsonData = JSON.parse(info.response),
$this = $("#"+file.id);
jsonData.lang = langTmplItemsItem;
$this.replaceWith(tmpR(picItem, jsonData.data));
picStackItemsInit();
},
UploadProgress: function (up, file) {
var total = up.total,
perImg = 100 / total.queueLen,
perOne = perImg / 100,
percent = Math.ceil((total.uploaded + total.failed) * perImg + perOne * file.percent);
if(percent > 100) {
percent = 100;
}
pBar.setProgress(percent);
if ((total.queueLen < autoGroupCount || !autoGroupEnable) && pluploadFromContext === 'false') {
if(pages.start === 1) {
loadingCircles[file.id].setPercentage(file.percent);
}
}
else {
if(pages.start === 1 || pluploadFromContext !== 'false') {
loadingCircles[idElizaPicUploadToNewStack].setPercentage(percent);
}
}
},
UploadComplete: function() {
var result;
if (loadToStack || pluploadFromContext !== 'false') {
if (pluploadFromContext !== 'false') {
result = picStackResetIcon(pluploadFromContext);
}
else {
result = picStackResetIcon(loadStackNm);
}
result.lang = langTmplItemsItem;
$("#"+idElizaPicUploadToNewStack).replaceWith(tmpR(picItem, result));
picStackItemsInit();
}
if (pluploadFromContext === 'false') {
picStackHandlerCallback("", false);
if (pages.start > 1) {
notificationLine(langAppPicNotificationImgUploads, "blue", 2500);
}
}
pBar.reset(200);
picPaginationUpdate();
pluploadFromContext = 'false';
},
error: function(up, error) {
$("#"+idElizaPicPluploadBtn).removeClass("hover");
if (error.code === -600) {
notificationLine(langAppPicNotificationImgOversize, "red 700", 1500);
}
else if (error.code === -601) {
notificationLine(langAppPicNotificationImgTypes, "red 700", 1500);
}
},
PostInit: function() {
var $addImage = $("#"+idElizaPicToolAddImage);
$addImage.attr("for", $addImage.closest(".groupInner").find(".moxie-shim input").attr("id"));
$("#"+idElizaPicPluploadBtn).attr("for", $addImage.attr("for"));
}
}
});
uploader.init();
pluploadObject = {
plupload: uploader,
loadZone: {
zone: '',
input: ''
},
context: '',
inited: {
zone: false,
input: false
}
};
if (forceRebuild) {
fromClipBoard = false;
picPluploaderFrame();
}
return pluploadObject;
}
/**
* Функция подключения кнопки "Добавить изображение" и зоны для дропа картинок.
* Зона дропа картинок доступна только в корне пика и на странице 1, также на страницах 1-хх.
* Предусмотрена функция уничтожения областей, при необходимости.
*/
function picPluploaderFrame()
{
var uplId = idElizaPicPluploadZone,
btnId = idElizaPicPluploadBtn,
$uplZn = $("#"+uplId),
statusData = picStatus,
pages = statusData.pages,
plupload = picPluploaderGet(),
uploader = plupload.plupload/*,
inited = plupload.inited.zone && plupload.inited.input*/;
if (picStatus.ownerId !== UserHandler.getId()) {
$uplZn.closest(".picCLSupload").addClass("hide");
return;
}
if (statusData.name !== 'trash' && pages.start === 1 && (picGLBAlbumsOnly === "false" && picGLBContentOnly === "false")) {
$uplZn.closest(".picCLSupload").removeClass("hide");
if ($("#"+idElizaPicContentStackList+" li").length) {
$uplZn.closest(".picCLSupload").removeClass("empty");
$uplZn.find(".description").html(helperGenUploadZoneText());
}
else {
$uplZn.find(".description").html(helperGenUploadZoneText(1));
}
}
else if ($uplZn.length) {
if(($("li", "#"+idElizaPicContentStackList).length && pages.start !== 1) || statusData.name === "trash" || !statusData.editable) {
$uplZn.closest(".picCLSupload").addClass("hide");
if (plupload.inited.zone) {
plupload.loadZone.zone.destroy();
}
if (plupload.inited.input) {
plupload.loadZone.input.destroy();
}
$("#"+idElizaPicPluploadZone+" input").each(function() {$(this).closest(".moxie-shim").remove();});
return false;
}
$uplZn.closest(".picCLSupload").addClass("empty");
$uplZn.find(".description").html(helperGenUploadZoneText(1));
}
if (picGLBContentOnly === "true" || picGLBAlbumsOnly === "true") {
$("#"+idElizaPicPluploadZone).closest(".picCLSupload").removeClass("empty").addClass("hide");
}
if ($uplZn.length && $("#"+btnId).length) {
if (plupload.inited.zone) {
plupload.loadZone.zone.destroy();
}
if (plupload.inited.input) {
plupload.loadZone.input.destroy();
}
$("#"+idElizaPicPluploadZone+" input").each(function() {$(this).closest(".moxie-shim").remove();});
if (fromClipBoard) {
plupload = picPluploaderGet(true);
}
var drop = new mOxie.FileDrop({
drop_zone: document.getElementById(uplId)
});
fromClipBoard = false;
drop.ondrop = function() {uploader.addFile(drop.files);};
drop.init();
var input = new mOxie.FileInput({
browse_button: document.getElementById(btnId),
container: document.getElementById(uplId),
multiple: true
});
input.onchange = function() {uploader.addFile(input.files);};
input.init();
plupload.loadZone = {
zone: drop,
input: input
};
plupload.inited = {
zone: true,
input: true
};
$("#"+idElizaPicPluploadBtn).off("dragenter").off("dragleave").bind("dragenter", function() {
$("#"+idElizaPicPluploadBtn).addClass("hover");
}).bind("dragleave", function() {
$("#"+idElizaPicPluploadBtn).removeClass("hover");
});
}
$("#"+idElizaPicPluploadBtn).attr("for", $("#"+idElizaPicToolAddImage).attr("for"));
}
/**
*
* @param $item
* @param noReplace
* @param dataOverride
* @param skipSelfExclude
*/
function picMoveToStack($item, noReplace, dataOverride, skipSelfExclude)
{
var name, id, type;
if (dataOverride) {
id = dataOverride.id;
name = dataOverride.name;
type = dataOverride.type;
}
else {
id = $item.attr("data-id");
name = $item.attr("data-name");
type = $item.attr("data-type");
}
type = type === "album" ? "stack" : "image";
if (_.indexOf(selectedList, name) !== -1 && !skipSelfExclude) {
selectedCount -=1;
selectedList.splice(_.indexOf(selectedList, name), 1);
}
var localList = !skipSelfExclude ? selectedList.slice(0) : selectedList,
stackId = picStatus.stackId;
if(localList.length) {
ajaxSend({
url: uriPicStack+"moveItems/"+type+'/'+id+'/'+stackId,
data: {list: JSON.stringify(localList)},
success: function (result) {
var $stackList = $jqStackScroll;
result.lang = langTmplItemsItem;
if (!noReplace) {
$item.replaceWith(tmpR(tmpAppPicItemsItem, result));
}
else {
$stackList.find('li[data-name="'+name+'"]').replaceWith(
tmpR(tmpAppPicItemsItem, result)
);
}
picStackItemsInit();
picItemListRefresh('del', selectedCount);
var $fileItems = $(".fileItem", $stackList);
$fileItems.filter(".hover").removeClass("hover");
$fileItems.filter(".ui-selected").remove();
var len = localList.length;
for(var a = 0; a < len; a++) {
$stackList.find('li[data-name="'+localList[a]+'"]').remove();
}
notificationLine(langAppPicNotificationMoved+localList.length);
picSelectionReset();
picPaginationUpdate();
}
});
}
}
/**
* Функция обновления списка итемов. Для добавления новых итемов или удаления старых
*
* @param {string} actionFlag - add||del, добавление или удаление
* @param {int} number - количество итемов
*/
function picItemListRefresh(actionFlag, number)
{
var $items = $(".fileItem", $jqStackList),
name = $items.filter(":last").attr("data-name"),
itemsCount = $items.length,
data = picStatus,
pages = picStatus.pages,
pagesNum = pages.end - pages.start + 1,
pagesPics = pagesNum * PAGES_PER_PAGE;
if (actionFlag === 'add') {
if (pages.start === 1 && (itemsCount - pagesPics ) > 0) {
$items.slice(pagesPics).remove();
}
else if (pages.start > 1) {
// Здесь добавляем НУМБЕР предыдущих картинок
picGetItemsList({
type: 'add_before',
ownerId: data.ownerId,
stackId: data.stackId,
itemName: name,
itemCount: number
});
$items.slice(pagesPics).remove();
}
}
else if (actionFlag === 'del') {
picGetItemsList({
type: 'add_after',
ownerId: data.ownerId,
stackId: data.stackId,
itemName: name,
itemCount: number
});
}
}
/**
* Функция включения/выключения кнопок в юзер меню альбома. При переходе в корзину надо отключать некоторые кнопки
*/
function picStackTopMenuCheck()
{
var status = picStatus,
ids = picIds;
if (status.editable && status.name !== "trash") {
$("#"+idElizaPicToolAddImage).removeClass("hide");
$("#"+idElizaPicToolAddStack).removeClass("hide");
$("#"+idElizaPicToolTree).removeClass("hide");
}
else {
$("#"+idElizaPicToolAddImage).addClass("hide");
$("#"+idElizaPicToolAddStack).addClass("hide");
$("#"+idElizaPicToolTree).addClass("hide");
}
}
/**
* Функция добавление нового альбома
*
* @param {int} parentStackId - Идентификатор альбома-родителя
* @param {int} order - Позиция сортировки, куда надо установить альбом
*
* @returns {object} - Объект пик итема
*/
function picAddStack(parentStackId, order)
{
var data = {};
ajaxSend({
url: uriPicStack+"add/"+parentStackId+"/"+order,
async: false,
success: function (result) {data = result;}
});
return data;
}
/**
* Добавление лоадер-кружка на то место, куда будет вставлена картинка/альбом. Потом мы управляем этим лоадером.
*
* @param {string} type - Тип итема album||image
* @param {string} id - Идентификатор загрузки
* @param {boolean} html - Если не ноль, то отдасть html, иначе установит лоадер в начало стэк-листа
*
* @returns {string} - html лоадера-кружка
*/
function picStackAddLoader(type, id, html)
{
var render = tmpR(
tmpAppPicItemsLoading,
{lang: langTmplItemsLoading, type: type || "image", id: id, circle: {id: id+"_circle", radius: '43', size: 'medium', color: 'blue'}},
{"common/elz_loading_circle": tmpAppCommonLoadingCircle}
);
if (html) {
return render;
}
$jqStackList.prepend(render);
}
/**
* Функция сброса иконки у альбома. В качестве изображения иконки выбирается случайная картинка из альбома.
*
* @param {string} stackName - Нейм альбома 0-1a-zA-Z
*
* @returns {object} - Объект пик итема
*/
function picStackResetIcon(stackName)
{
var data = {};
ajaxSend({
url: uriPicStack+"resetIcon/"+stackName,
async: false,
success: function (result) {data = result;}
});
return data;
}
var stackScrollerTimeout = 0;
var stackScrollerTimeoutEnabled = false;
var scrollLoadSkip = false;
/**
* Функция обработчик скроллера, обслуживает всю магию связанную с дозагрузками страниц и всем таким прочим
*
* @returns {boolean} - Возвращает
*/
function picStackScrollLoader()
{
if (scroller_enabled) {
return true;
}
var $scrlId = $jqStackScroll,
statusData = picStatus,
scrollLoadEnable = parseInt(UserHandler.getSetting("pic", "autoload_enable"), 10),
scrollLoadMaxlen = parseInt(UserHandler.getSetting("pic", "autoload_maxlen"), 10),
scrollLoadWindow = UserHandler.getSetting("pic", "autoload_window"),
scrollScroller = UserHandler.getDevice() === "desktop" ? $scrlId.closest(".scroll-content") : $scrlId.closest(".elzScroll");
scroller_enabled = true;
scroller_obj = scrollScroller;
scrollScroller.scroll(function(e) {
var target = e.currentTarget,
scrollY = target.scrollTop;
scroller_axis_y = scrollY;
if(scrollLoadSkip || !scrollLoadEnable) {//
return this;
}
var newEndPage = 0,
enableClear = false,
pages = statusData.pages,
scrollYMax = target.scrollHeight - target.offsetHeight;
if(scrollY >= scrollYMax && pages.end < pages.max) {
newEndPage = pages.end + 1;
if(scrollLoadMaxlen && !scrollLoadWindow && newEndPage > (pages.start + scrollLoadMaxlen)) {
return this;
}
if(scrollLoadMaxlen && scrollLoadWindow && newEndPage > (pages.start + scrollLoadMaxlen)) {
enableClear = true;
pages.start += scrollLoadMaxlen;
}
else {
enableClear = false;
}
pages.end = newEndPage;
if (stackScrollerTimeout) {
clearTimeout(stackScrollerTimeout);
}
stackScrollerTimeout = setTimeout(picStackScrollTimeout, 300);
stackScrollerTimeoutEnabled = true;
scrollLoadSkip = true;
picGetItemsList({
type: "append",
page: pages.end,
stackId: picStatus.stackId,
ownerId: picStatus.ownerId,
clear: enableClear,
event: e,
success:function(){scrollLoadSkip = false;}});
}
else if(stackScrollerTimeoutEnabled) {
if (stackScrollerTimeout) {
clearTimeout(stackScrollerTimeout);
}
stackScrollerTimeout = setTimeout(picStackScrollTimeout, 300);
}
});
}
/**
* Функция обновления URI постраничности
*/
function picStackScrollTimeout()
{
var pages = picStatus.pages,
stackName = picStatus.name,
curUri = (!app.standAlone ? "#pic" : "/") + ((stackName === "" || stackName === "root")? "" : (!app.standAlone ? "/" : "")+stackName),
pageEnd = pages.end;
if (pages.end >= pages.max) {
pages.end = pages.max;
pageEnd = pages.end;
picPaginatingResetHtml();
}
else if (pages.start <= 1) {
picPaginatingResetHtml();
}
var pageStr = pages.start+"-"+pageEnd;
$("#"+idElizaPicFooterNumbers+" .current").html(pageStr);
$("#"+idElizaPicFooterNext).attr("href", curUri+"?page="+pageEnd);
if (app.standAlone) {
hApi.replaceStateData({callback: "picRouter"}, curUri+"?page="+pageStr);
DIAppReg.regState(app.name, curUri+"?page="+pageStr);
}
else {
bBone.history.navigate(curUri+"?page="+pageStr, {trigger: false, replace: true});
DIAppReg.regState(app.name, curUri+"?page="+pageStr);
}
stackScrollerTimeoutEnabled = false;
}
/*
--------------------------------------------------------------------------------------------------------------------
| |
| IMAGE SECTION |
| |
--------------------------------------------------------------------------------------------------------------------
*/
/**
* Функция обработчик обращения к странице изображения
*
* @param {string} item - нейм изображения
* @param forced
*/
function picImageHandler(item, forced)
{
clearTimeout(stackScrollerTimeout);
scroller_enabled = false;
if (item !== picStatus.name || forced) { // Если неймы не совпадают, то мы переключились в другой стэк
picGetImageMeta(item, function() {picImageHandlerCallback(true);});
}
else {
picImageHandlerCallback();
}
}
/**
* Функция молучения мета-данных по изображению. Включая альбом, родителя и тд и тп
*
* @param {string} item - нейм изображения
* @param {function} callback - функция обратного вызова
*/
function picGetImageMeta(item, callback)
{
ajaxSend({
url: uriPicImage+"getPageData/"+item,
success: function (result) {
if (!picParseMetaImage(result)) {
return this;
}
callback();
}
});
}
function picParseMetaImage(result) {
/** @namespace result.stack */
/** @namespace result.stack.system.id */
/** @namespace result.restricted */
/** @namespace result.image */
/** @namespace result.image.system */
/** @namespace result.image.system.id */
/** @namespace result.image.system.owner */
/** @namespace result.image.system.name */
/** @namespace result.image.meta */
/** @namespace result.image.meta.file */
/** @namespace result.image.meta.file.type */
/** @namespace result.image.meta.title */
/** @namespace result.image.access */
/** @namespace result.image.access.editing */
if (result.restricted) {
appCoreRestrictedAccessPage(result.restricted, 'image');
return false;
}
picStatus.stackId = result.stack === "root" ? 0 : parseInt(result.stack.system.id, 10);
picStatus.ownerId = parseInt(result.image.system.owner, 10);
picStatus.name = result.image.system.name;
picStatus.format = result.image.meta.file.type;
picStatus.title = result.image.meta.title;
picStatus.editable = parseInt(result.image.access.editing, 10);
picStatus.imageData = result;
return true;
}
/**
* Функция сборки страницы изображения
*/
function picImageHandlerCallback(forced)
{
var clickForFooter = false;
if (picStatus.state !== "image" || forced) {
if (typeof pluploadObject === "object") {
pluploadObject.plupload.destroy();
pluploadObject = '';
}
picInsertMenuImage();
picStatus.state = "image";
clickForFooter = true;
}
$("#"+idElizaPicRightBack).removeClass("hide");
var contentHtml = app.layout.content.cnt.content,
subfooterHtml = app.layout.content.cnt.subfooter,
ids = picIds,
result = picStatus.imageData,
$pageEdit = $("#"+idElizaPicImagePageEdit);
picStatus.name = result.image.system.name;
//$gspot = $edit.find(".gspot");
if (DICookies.get("rightMenuActive") === "true") {
app.layout.main.right.closest(".tplCLSgrid").addClass("showside");
}
if (picStatus.ownerId === UserHandler.getId()) {
var $edit = $pageEdit,
controls = $edit.elizaIIconsControls();
if (result.image.system.parent) {
$edit.attr("data-elz-title", langAppPicImgBtn1);
//$gspot.removeClass("ic-plus").addClass("ic-pencil");
controls.setSubIcon("ic-pencil");
$("#"+idElizaPicImagePageTree).addClass("hide");
}
else {
$edit.attr("data-elz-title", langAppPicImgBtn2);
//$gspot.removeClass("ic-pencil").addClass("ic-plus");
controls.setSubIcon("ic-plus");
$("#"+idElizaPicImagePageTree).removeClass("hide");
}
}
var fileName = result.image.system.name+"."+result.image.meta.file.type;
$("#"+idElizaPicImagePageDownload).attr("href", "/upl/"+fileName).attr("download", fileName);
contentHtml.attr( "data-elz-bg", "grey 900");
subfooterHtml.attr("data-elz-bg", "grey 900");
contentHtml.html(tmpR(tmpAppPicImage, {
vcont: idElizaPicImageCont,
viewer: idElizaPicImageViewer,
cropper: idElizaPicImageCropper,
title: result.image.meta.title,
name: result.image.system.name,
type: result.image.meta.file.type,
width: result.image.meta.file.width,
height: result.image.meta.file.height
}));
if (!$("#"+idElizaPicImageSlider).length) {
subfooterHtml.html(tmpR(tmpAppPicImageSlider, {
id: {
main: idElizaPicImageSlider,
list: idElizaPicImageSliderList,
crop: idElizaPicImageSliderCrop,
title: idElizaPicImageSliderTitle,
crop_create: idElizaPicThumbCreate,
crop_form: idElizaPicThumbForm
},
lang: langTmplImageSlider
}));
}
picImageRightContent();
$("img", $("#"+idElizaPicImageViewer)).click(function(event) {
console.log(event);
if (event.shiftKey || event.ctrlKey) {
window.open($(this).attr("src"), '_blank');
}
else {
window.open($(this).attr("src"), '_blank');
}
}).mousedown(function(e) {
if (e.which === 2) {
e.preventDefault();
e.stopPropagation();
window.open($(this).attr("src"), '_blank');
}
return true;
});
//--------------------------------------------------------------------------------------------------------------
// СБОРКА ФУУТЕРА
//--------------------------------------------------------------------------------------------------------------
picInsertFooterImage(clickForFooter);
$pageEdit.removeClass("active");
$("#"+idElizaPicImagePageCrop).removeClass("active");
imageEditActive = false;
//picImageThumbsVarsSiblings();
/*if (app.standAlone === 1) {
$("#ElizaAppPicFake").remove();
app.standAlone = 2;
}*/
}
var imageActiveIgnore = false,
imageThumbnailsActive = false,
imageSiblingsActive = false,
imageVariationsActive = false;
/**
* Сборка футера страницы с изображением
*/
function picInsertFooterImage(clickForFooter) {
var $layout = app.layout.content.cnt.footer,
btn = tmpAppToolbarButton,
icon = tmpAppCommonIcon,
footerId = idElizaPicImageFooter,
ids = picIds,
result = picStatus.imageData,
image = result.image,
page = result.page;
$layout.html(tmpR(tmpAppFooter, {id: footerId}));
var $footer = $("#"+footerId),
$left = $footer.find('[data-layout="footer_left"]'),
$right = $footer.find('[data-layout="footer_right"]'),
$middle = $footer.find('[data-layout="footer_middle"]'),
parent = image.system.parent,
upButton, upTitle;
if (parent) {
upButton = (!app.standAlone ? "/" : "")+image.system.prow.name;
upTitle = langAppPicPageGoTo7;
}
else {
upButton = page.up !== "root" ? (!app.standAlone ? "/" : "")+page.up : "";
upTitle = page.up !== "root" ? langAppPicPageGoTo6 : (UserHandler.getId() ? langAppPicPageGoTo2 : langAppPicPageGoTo3);
}
var arrMid = [
tmpR(btn, {
id: idElizaPicFooterPrev,
tag: page.prev !== "" ? "a" : "div",
href: page.prev !== "" ? (!app.standAlone ? "#pic/" : "/" )+page.prev : "",
class: page.prev !== "" && !parent ? "" : "disabled",
title: langAppPicPageGoTo8,
setts: {type: 'default', link: page.prev !== "" ? "1" : "", tip_v: 'dtb'},
icon: {svg: {main: 'ic-move-left'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicFooterRoot,
tag: "a",
href: (!app.standAlone ? "#pic" : "/")+upButton,
title: upTitle,
setts: {type: 'default', link: '1', tip_v: 'dtb'},
icon: {svg: {main: 'ic-gallery3'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicFooterNext,
tag: page.next !== "" ? "a" : "div",
href: page.next !== "" ? (!app.standAlone ? "#pic/" : "/" )+page.next : "",
class: page.next !== "" && !parent ? "" : "disabled",
title: langAppPicPageGoTo9,
setts: {type: 'default', link: page.next !== "" ? "1" : "", tip_v: 'dtb'},
icon: {svg: {main: 'ic-move-right'}, size: 'small'}
}, tmpObjElzIcon)
];
// Это константа
var arrLft = [
tmpR(btn, {
id: idElizaPicImageFooterVariations,
tag: "div",
border: {enable: 1, lines: 'top', color: 'green'},
class: !result.image.meta.numbs.variations && !image.system.parent ? "hide" : "", /** @namespace result.image.meta.numbs.variations */
title: langAppPicImgBtn3,
setts: {type: 'default', link: '1', align: "left", tip_v: 'dtb', tip_h: 'dtl'},
icon: {svg: {main: 'ic-wand'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicImageFooterContent,
tag: "div",
border: {enable: 1, lines: 'top', color: 'orange'},
class: !result.image.flags.isContent ? "hide" : "", /** @namespace result.image.flags */
title: langAppPicImgBtn4,
setts: {type: 'default', link: '1', align: "left", tip_v: 'dtb', tip_h: 'dtl'},
icon: {svg: {main: 'ic-sharedfile'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(tmpAppToolbarTitle, {id: idElizaPicFooterTitle, text: picStatus.title})
];
var arrRgt = [
tmpR(btn, {
id: idElizaPicImageFooterThumbs, tag: "div", title: langAppPicImgSliderTitle1,
border: {enable: 1, lines: 'top', color: 'blue'},
setts: {type: 'default', link: '1', align: "right", tip_v: 'dtb', tip_h: 'dtr'},
//data: 'data-xhide="480"',
icon: {svg: {main: 'ic-crop2'}, size: 'small'}
}, tmpObjElzIcon),
tmpR(btn, {
id: idElizaPicImageFooterSiblings, tag: "div", title: langAppPicImgSliderTitle2,
border: {enable: 1, lines: 'top', color: 'blue'},
class: ((!page.next && !page.prev) || result.stack === "root" || image.system.parent ) ? "hide" : "",
setts: {type: 'default', link: '1', align: "right", tip_v: 'dtb', tip_h: 'dtr'},
icon: {svg: {main: 'ic-gallery1'}, size: 'small'}
}, tmpObjElzIcon)
];
$middle.html(arrMid.join(""));
$left.html(arrLft.join(""));
$right.html(arrRgt.join(""));
//TODO: на кнопарь навернуть проверку на эдитинг
//if ($slider.hasClass("show") && (imageSiblingsActive || imageVariationsActive || imageThumbnailsActive)) {
// if (imageThumbnailsActive) {
// imageActiveIgnore = true;
// $btnThumbs.click();
// }
// else if (imageSiblingsActive) {
// $btnSibling.addClass("active");
// }
// else {
// $btnVariation.addClass("active");
// }
//
// $sliderList.find("a").removeClass("active");
// $sliderList.find('a[href="/'+picStatus.name+'"]').addClass("active");
//}
//else if(!imageSiblingsActive && !imageVariationsActive && !imageThumbnailsActive) {
// $slider.removeClass("show");
// imageActiveIgnore = false;
//}
picImageThumbsVarsSiblings(clickForFooter);
}
function picImageThumbsVarsSiblings(clickForFooter) {
var ids = picIds,
$sliderList = $("#"+idElizaPicImageSliderList),
$slider = $("#"+idElizaPicImageSlider),
$btnThumbs = $("#"+idElizaPicImageFooterThumbs),
$btnSibling = $("#"+idElizaPicImageFooterSiblings),
$btnVariation = $("#"+idElizaPicImageFooterVariations);
if ($slider.hasClass("show") && (imageSiblingsActive || imageVariationsActive || imageThumbnailsActive)) {
if (imageThumbnailsActive) {
imageActiveIgnore = true;
$btnThumbs.click();
}
else if (imageSiblingsActive) {
$btnSibling.addClass("active");
/*if (clickForFooter) {
$btnSibling.click();
}*/
}
else {
$btnVariation.addClass("active");
/*if (clickForFooter) {
$btnVariation.click();
}*/
}
$sliderList.find("a").removeClass("active");
$sliderList.find('a[href="/'+picStatus.name+'"]').addClass("active");
}
else if(!imageSiblingsActive && !imageVariationsActive && !imageThumbnailsActive) {
$slider.removeClass("show");
imageActiveIgnore = false;
}
}
/**
* Функция сборки пользовательского меню страницы с изображением
*/
function picInsertMenuImage()
{
var $mid = app.layout.top.header.find('[data-layout="toolbar_middle"]'),
btn = tmpAppToolbarButton,
ids = picIds,
list = [],
transforms = [],
result = picStatus.imageData,
type = result.image.meta.file.type,
parentId = picStatus.imageData.image.system.parent,
funcPush = function(arrayList, id, title, icon) {
arrayList.push({
tag: "div", id: id, title: title, align: "right", icon: {svg: {main: icon}, size: 'small'}
});
},
len;
list.push({
tag: "a", id: idElizaPicImagePageDownload , title: langAppPicImgBtn5, align: "right",
icon: {svg: {main: 'ic-download'}, size: 'small'},
href: "/"+picStatus.name+"."+picStatus.format,
data: ' download='+picStatus.name+'.'+picStatus.format+''
});
if (picStatus.imageData.image.access.editing) {
list.push({
tag: "div", id: idElizaPicImagePageTree, title: langAppPicImgBtn6, align: "right",
icon: {svg: {main: 'ic-foldertree', sub: 'ic-arrow-left'}, size: 'small', color: {subbg: 'blue'}}
});
list.push({
tag: "div", id: idElizaPicImagePageCrop, title: langAppPicImgBtn7, align: "right",
icon: {svg: {main: 'ic-crop'}, size: 'small'},
border: {
enable: 1,
lines: 'bottom',
color: 'green'
}
});
list.push({
tag: "div", id: idElizaPicImagePageEdit,
title: parentId ? langAppPicImgBtn8 : langAppPicImgBtn9, align: "right",
icon: {
svg: {main: 'ic-wand', sub: parentId ? "ic-pencil" : "ic-plus"},
size: 'small',
color: {subbg: "blue"}},
border: {
enable: 1,
lines: 'bottom',
color: 'green'
}
});
funcPush(list, idElizaPicImagePageMeta, langAppPicImgBtn10, "ic-pencil");
funcPush(list, idElizaPicImagePageDelete, langAppPicImgBtn11, "ic-trash");
funcPush(transforms, idElizaPicImageToolGroupTransformMirrorHorizontal, langAppPicImgBtn12, "ic-mirror-h");
funcPush(transforms, idElizaPicImageToolGroupTransformMirrorVertical, langAppPicImgBtn13, "ic-mirror-v");
funcPush(transforms, idElizaPicImageToolGroupTransformRotateLeft, langAppPicImgBtn14, "ic-rotateclockcw");
funcPush(transforms, idElizaPicImageToolGroupTransformRotateRight, langAppPicImgBtn15, "ic-rotateclockw");
}
$mid.html("");
var midHtml = "";
if (picStatus.imageData.image.access.editing) {
midHtml += tmpR(tmpAppToolbarGroup, {
id: idElizaPicImageToolGroupTransform,
active: "",
ordered: "ordered",
position: "right",
xsub: "768",
v_pos: "top",
h_pos: "right"
});
}
midHtml += tmpR(tmpAppToolbarGroup, {
id: idElizaPicImageToolGroupMain,
active: "",
ordered: "ordered",
position: "right",
xsub: "540",
v_pos: "top",
h_pos: "right"
});
$mid.append(midHtml);
//$("#"+picIds.toolStackExp).click(function() {$( this ).closest(".group").toggleClass( "active" );});
len = list.length;
for(var a = 0, item; a < len; a++) {
item = list[a];
list[a] = tmpR(btn, {
id: item.id,
tag: item.tag,
href: item.href,
title: item.title,
setts: {type: 'default', align: item.align, link: '1'},
text: {str: item.title, align: 'left'},
border: item.border ? item.border : {},
icon: item.icon,
data: item.data
}, tmpObjElzIcon);
}
var $toolGroupMain = $("#"+idElizaPicImageToolGroupMain);
$toolGroupMain.find('[data-layout="tool_list"]').append(list.join(""));
$toolGroupMain.prepend(
tmpR(btn, {
id: idElizaPicImageToolGroupExpand,
tag: "div",
title: langAppPicImgBtn16,
setts: {type: 'default', align: item.align, link: '1'},
icon: {svg: {main: 'ic-more1'}, size: 'small'},
border: {
enable: 1,
lines: 'bottom',
color: 'blue'
}
}, tmpObjElzIcon)
);
len = transforms.length;
for(a = 0; a < len; a++) {
item = transforms[a];
transforms[a] = tmpR(btn, {
id: item.id,
tag: item.tag,
href: item.href,
title: item.title,
setts: {type: 'default', align: item.align, link: '1'},
text: {str: item.title, align: 'left'},
border: item.border ? item.border : {},
icon: item.icon,
data: item.data
}, tmpObjElzIcon);
}
transforms[a+1] = tmpR(btn, {
tag: "div",
class: "sep",
sep: 1,
default: 0,
setts: {align: "right"}
});
var $transform = $("#"+idElizaPicImageToolGroupTransform);
$transform.find('[data-layout="tool_list"]').append(transforms.join(""));
$transform.prepend(
tmpR(btn, {
id: idElizaPicImageToolGroupTransformExpand,
tag: "div",
title: langAppPicImgBtn17,
setts: {type: 'default', align: item.align, link: '1'},
icon: {svg: {main: 'ic-fix'}, size: 'small'},
border: {
enable: 1,
lines: 'bottom',
color: 'blue'
}
}, tmpObjElzIcon)
);
}
/**
* Функция отображения правой панели с мета-данными
*/
function picImageRightContent()
{
var result = picStatus.imageData,
member = result.member,
stack = {
id: 0,
url: '',
title: ''
},
rightHead = app.layout.right.header,
rightContent = $("#"+idElizaPicRightScroll),
rightFooter = app.layout.right.footer,
links, info,
status = picStatus,
copyPage = "http://"+hostName+"/"+ picStatus.name,
copyUrl = copyPage+"."+picStatus.format,
copyThumb = "http://"+hostName+"/upl/t/"+ picStatus.name+"_150x150."+picStatus.format,
copyHtml = "
",
copyBBCode = "[url="+copyPage+"][img]"+copyThumb+"[/img][/url]",
resolution = result.image.meta.file.width+"×"+result.image.meta.file.height,
fileSize = result.image.meta.file.size,
addDate = result.image.system.date,
dSplit1 = addDate.split(" "),
dSplit2 = dSplit1[0].split("-"),
textDate = dSplit2[2]+" "+months[(dSplit2[1]-1)]+" "+dSplit2[0]+" в "+dSplit1[1],
imageParent;
if (!rightContent.length) {
app.layout.right.cnt.content.html(tmpR(tmpAppScrollContent, {
id: idElizaPicRightScroll
}));
rightContent = $("#"+idElizaPicRightScroll);
}
if (result.stack !== "root") {
stack.id = result.stack.system.id;
stack.title = result.stack.meta.title;
stack.url = (app.standAlone ? "/" : "#pic/")+result.stack.system.name;
}
if (result.image.system.parent) {
/** @namespace result.image.system.prow */
imageParent = {
url: (app.standAlone ? "/" : "#pic/")+result.image.system.prow.name,
title: result.image.system.prow.title
};
}
info = [
{tag: "time", title: langAppPicImgRight1, value: textDate, attrs: 'datetime="'+addDate.replace(" ", "T")+'"'},
{tag: "span", title: langAppPicImgRight2, value: resolution},
{tag: "span", title: langAppPicImgRight3, value: result.image.meta.views.count},
//{tag: "span", title: langAppPicImgRight4, value: result.image.meta.views.unic},
{tag: "span", title: langAppPicImgRight5, value: numeral(fileSize).format('b')}
];
links = [
{id: idElizaPicImageCopyInputClean, title: langAppPicImgRight6, value: copyUrl },
{id: idElizaPicImageCopyInputHtml, title: langAppPicImgRight7, value: copyHtml },
{id: idElizaPicImageCopyInputBBCode, title: langAppPicImgRight8, value: copyBBCode}
];
rightHead.html(tmpR(
tmpAppPicImageRightHead, {
texted: {
text: langAppPicImgRight9,
icon: {svg: {main: "ic-info"}, size: "small"}
},
close: {
id: idElizaPicRightPanelClose,
title: langAppPicImgRight10
},
lang: langTmplImageRightHead
}, tmpObjElzIcon));
rightContent.html(tmpR(tmpAppPicImageRightContent, {
id_descr: idElizaPicImageDescr,
isChild: result.image.system.parent ? 1 : 0,
parent: imageParent,
member: member,
stack: stack,
restrict: result.restrict,
description: result.description,
meta: {
title: result.image.meta.title,
description: ""
},
info: info,
links: links,
lang: langTmplImageRightContent
},
{"common/scl_avatar": tmpAppCommonAvatar}
));
rightFooter.html("");
inputsInitDefault();
$("#"+idElizaPicRightPanelClose).click(function() {
$("#"+idElizaPicRightPanel).click();
});
$("#"+idElizaPicImageCopyInputClean+", #"+idElizaPicImageCopyInputHtml+", #"+idElizaPicImageCopyInputBBCode).off().click(function() {
$(this).select();
});
if (DICookies.get("rightMenuActive") === "false") {
app.layout.main.right.closest(".tplCLSgrid").removeClass("showside");
}
else if(DICookies.get("rightMenuActive") === "true") {
app.layout.main.right.closest(".tplCLSgrid").addClass("showside");
$("#"+idElizaPicRightPanel).addClass("active");
}
}
/**
* Функция отображения кроппера в правой панели
*/
function picImageRightCropper(forClipboard, clipData)
{
var isClipboard = forClipboard ? true : false,
rightHead = app.layout.right.header,
rightContent = $("#"+idElizaPicRightScroll),
rightFooter = app.layout.right.footer,
result = picStatus.imageData,
width = isClipboard ? parseInt(clipData.width, 10) : result.image.meta.file.width,
height = isClipboard ? parseInt(clipData.height, 10) : result.image.meta.file.height,
type = isClipboard ? clipData.type : result.image.meta.file.type,
aspectOrig = width / height,
imgRatio = width / height;
if (!rightContent.length) {
app.layout.right.cnt.content.html(tmpR(tmpAppScrollContent, {
id: idElizaPicRightScroll
}));
rightContent = $("#"+idElizaPicRightScroll);
}
app.layout.main.right.closest(".tplCLSgrid").addClass("showside");
var $viewer = $("#"+idElizaPicImageViewer),
$cropper = $("#"+idElizaPicImageCropper),
cropperImg = $cropper.find("img"),
href = isClipboard ?
"/upl/temp/temporary_clipboard_member_"+UserHandler.getId()+".png?"+(new Date().getTime()) :
"/upl/"+result.image.system.name+"."+result.image.meta.file.type;
rightContent.html(tmpR(tmpAppPicImageCropper,
{
editor: idElizaPicImageEditorCropper,
aratio: idElizaPicImageEditorAspects,
zoom: idElizaPicThumbZoomSwitch,
width: 150,
height: parseInt(150 / imgRatio, 10),
controls: [
{
mode: "simple", disabled: "", title: "",
fields: [
{id: idElizaPicImageCropperWidth, title: langAppPicImgEdit1, val: 150},
{id: idElizaPicImageCropperHeight, title: langAppPicImgEdit2, val: parseInt(150 / imgRatio, 10)}
]
},
{
mode: "advanced", disabled: "disabled", title: langAppPicImgEdit3,
fields: [
{id: idElizaPicImageCropperPointX, title: langAppPicImgEdit4, val: ""},
{id: idElizaPicImageCropperPointY, title: langAppPicImgEdit5, val: ""}
]
},
{
mode: "advanced", disabled: "disabled", title: langAppPicImgEdit6,
fields: [
{id: idElizaPicImageCropperOriginWidth, title: langAppPicImgEdit7, val: ""},
{id: idElizaPicImageCropperOriginHeight, title: langAppPicImgEdit8, val: ""}
]
}
],
aspect_ratio: [
{type: "aspect", value: aspectOrig, title: langAppPicImgEdit9, icon: "ic-image", active: "active"},
{type: "aspect", value: 1, title: "1:1", class: "x1x1" },
{type: "aspect", value: "free", title: langAppPicImgEdit10, free: "1" },
{type: "lock", title: langAppPicImgEdit11, icon: "ic-lock", active: "active" },
{type: "aspect", value: 16/9, title: "16:9", class: "x16x9"},
{type: "aspect", value: 3/2, title: "3:2", class: "x3x2" },
{type: "aspect", value: 4/3, title: "4:3", class: "x4x3" },
{type: "aspect", value: 5/4, title: "5:4", class: "x5x4" },
{type: "aspect", value: 9/16, title: "9:16", class: "x9x16"},
{type: "aspect", value: 2/3, title: "2:3", class: "x2x3" },
{type: "aspect", value: 3/4, title: "3:4", class: "x3x4" },
{type: "aspect", value: 4/5, title: "4:5", class: "x4x5" }
],
lang: langTmplImageCropper
},
tmpObjElzIcon
));
rightFooter.html(tmpR(
tmpAppPicImageEditorFooter,
{
save: {id: idElizaPicImageCropperSave, text: isClipboard ? langAppPicImgEdit12 : langAppPicImgEdit13},
cancel: {id: idElizaPicImageCropperCancel, text: langAppPicImgEdit14 }
}
));
rightHead.html(tmpR(
tmpAppPicImageRightHead, {
texted: {
text: isClipboard ? langAppPicImgEdit15 : langAppPicImgEdit16,
icon: {
svg: {main: "ic-crop", sub: "ic-plus"},
size: "small",
color: {subbg: "blue"}
}
},
close: {
id: idElizaPicImageCropperRightPanelClose,
title: isClipboard ? langAppPicImgEdit17 : langAppPicImgEdit18
},
lang: langTmplImageRightHead
}, tmpObjElzIcon));
$("#"+idElizaPicImageCropperRightPanelClose).click(function() {
$("#"+idElizaPicImageCropperCancel).click();
$("#"+idElizaPicImagePageCrop).removeClass("active");
});
inputsInitDefault();
cropperImg.attr("src", href);
$("#"+idElizaPicImageFooterThumbs).removeClass("active");
$("#"+idElizaPicImageSlider).removeClass("show");
var $cropWidth = $("#"+idElizaPicImageCropperWidth),
$cropHeight = $("#"+idElizaPicImageCropperHeight),
$originWidth = $("#"+idElizaPicImageCropperOriginWidth),
$originHeight = $("#"+idElizaPicImageCropperOriginHeight),
$pointX = $("#"+idElizaPicImageCropperPointX),
$pointY = $("#"+idElizaPicImageCropperPointY),
percent100,
baseCanvasData = {},
percentCurr = 1,
cropperInited = false,
$aspectEd = $("#"+idElizaPicImageEditorAspects),
aspectFree = false,
$aspectList = $aspectEd.find("li"),
$switchZoom = $("#"+idElizaPicThumbZoomSwitch),
setDataToCropper = function() {
if (!cropperInited) {
return false;
}
var pointX = parseInt($pointX.val(), 10),
pointY = parseInt($pointY.val(), 10),
cropWidth = parseInt($cropWidth.val(), 10),
cropHeight = parseInt($cropHeight.val(), 10),
cropBox = cropperImg.cropper("getData");
cropBox.x = parseInt(pointX / percentCurr, 10);
cropBox.y = parseInt(pointY / percentCurr, 10);
cropBox.width = parseInt(cropWidth / percentCurr, 10);
cropBox.height = parseInt(cropHeight / percentCurr, 10);
cropperImg.cropper("setData", cropBox);
},
changeCrop = function() {
var $this = $(this),
id = $this.attr("id"),
compare = idElizaPicImageCropperWidth,
value = parseInt($this.val(), 10),
cropRatio = width / height;
if (!value || value < 0) {
value = 150;
}
if (id === compare) {
if (width < value) {
value = width;
}
}
else {
if (height < value) {
value = height;
}
}
if (cropperInited) {
var cropData = cropperImg.cropper("getCropBoxData");
cropRatio = cropData.width / cropData.height;
}
if (!aspectFree) {
if (id === compare) {
$cropHeight.val(parseInt(value / cropRatio, 10));
}
else {
$cropWidth.val(parseInt(value * cropRatio, 10));
}
}
$this.val(value);
if (!cropperInited) {
$("#"+idElizaPicImageViewer).attr("style", "width:"+$cropWidth.val()+"px;height:"+$cropHeight.val()+"px;");
}
setDataToCropper();
};
cropperImg.cropper("destroy");
$cropWidth.keyup(changeCrop);
$cropHeight.keyup(changeCrop);
$switchZoom.click(function() {
var $this = $(this),
cropModeA = $("#"+idElizaPicImageEditorCropper).find(".cropMode.advanced"),
stopZoom = false;
$originWidth.off();
$originHeight.off();
$pointX.off();
$pointY.off();
cropperImg.cropper("destroy");
$("#"+idElizaPicImageViewer).removeAttr("style");
if ($this.prop("checked")) {
cropModeA.removeClass("disabled");
$viewer .addClass("hide");
$cropper.removeClass("hide");
cropperImg.cropper({
aspectRatio: "free",
highlight: false,
background: false,
zoomable: true,
//wheelZoomRatio: 0.1,
autoCropArea: 1,
viewMode: 1,
dragMode: "move",
movable: true,
built: function() {
var contData = cropperImg.cropper("getContainerData"),
imageData = cropperImg.cropper("getImageData"),
canvasData = cropperImg.cropper("getCanvasData"),
left = (contData.width - imageData.naturalWidth ) / 2,
top = (contData.height - imageData.naturalHeight) / 2;
$aspectList.filter('[data-value="free"]').click();
cropperInited = true;
if (imageData.naturalWidth < contData.width && imageData.naturalHeight < contData.height) {
canvasData.width = imageData.naturalWidth;
canvasData.height = imageData.naturalHeight;
canvasData.left = left;
canvasData.top = top;
}
cropperImg.cropper("setCropBoxData", {
left: left,
top: top,
width: imageData.naturalWidth,
height: imageData.naturalHeight
});
cropperImg.cropper("setCanvasData", canvasData);
percent100 = imageData.width / imageData.naturalWidth;
percentCurr = 1;
$originWidth.val(parseInt(imageData.naturalWidth, 10));
$originHeight.val(parseInt(imageData.naturalHeight, 10));
baseCanvasData = canvasData;
var originRatio = imageData.naturalWidth / imageData.naturalHeight,
changeOrigin = function() {
var $this = $(this),
id = $this.attr("id"),
compare = idElizaPicImageCropperOriginWidth,
origin = id === compare ? imageData.naturalWidth : imageData.naturalHeight,
value = parseInt($this.val(), 10);
if (!value) {
if (id === compare) {
value = width;
}
else {
value = height;
}
}
value = value < 0 ? 0 : value;
value = value > origin ? origin : value;
if (id === compare) {
$originHeight.val(parseInt(value / originRatio, 10));
}
else {
$originWidth.val(parseInt(value * originRatio, 10));
}
percentCurr = value / origin;
$cropWidth.val(parseInt($cropWidth.val() * percentCurr, 10));
$cropHeight.val(parseInt($cropHeight.val() * percentCurr, 10));
$pointX.val(parseInt($pointX.val() * percentCurr, 10));
$pointY.val(parseInt($pointY.val() * percentCurr, 10));
$this.val(value);
setDataToCropper();
},
changePoint = function() {
var $this = $(this),
value = parseInt($this.val(), 10);
if(!value) {
value = 0;
}
$this.val(value);
setDataToCropper();
};
$originWidth.stopTyping(changeOrigin);
$originHeight.stopTyping(changeOrigin);
$pointX.stopTyping(changePoint);
$pointY.stopTyping(changePoint);
if (isClipboard) {
setTimeout(function() {
elizaNcoverTexted("", "", 0);
}, 500);
}
}
}).on('crop.cropper', function (e) {
var
width = parseInt(e.width * percentCurr, 10),
height = parseInt(e.height * percentCurr, 10),
pointX = parseInt(e.x * percentCurr, 10),
pointY = parseInt(e.y * percentCurr, 10);
$cropWidth.val(width);
$cropHeight.val(height);
$pointX.val(pointX);
$pointY.val(pointY);
}).on('zoom.cropper', function (e) {
if (e.ratio > e.oldRatio && e.ratio > 1) {
e.preventDefault();
}
});
}
else {
cropModeA.addClass("disabled");
cropperImg.cropper('destroy');
cropperInited = false;
$aspectList.removeClass("active");
$aspectList.find(".ic-image").closest("li").addClass("active");
$aspectList.find(".ic-lock").closest("li").addClass("active");
$originWidth.val("");
$originHeight.val("");
$pointX.val("");
$pointY.val("");
$viewer .removeClass("hide");
$cropper.addClass("hide");
aspectFree = false;
$cropWidth.keyup();
}
});
if (isClipboard) {
$switchZoom.click().attr("disabled", "disabled");
}
$aspectList.click(function() {
var $this = $(this), cropData, aspect,
beforeData = cropperImg.cropper("getCropBoxData");
aspectFree = false;
if ($this.attr("data-type") === "aspect") {
aspect = parseFloat($this.attr("data-value"));
$aspectList.removeClass("active");
$this.addClass("active");
if ($this.attr("data-value") !== "free") {
$aspectEd.find('li[data-type="lock"]').addClass("active");
}
else {
aspectFree = true;
}
}
else if($this.attr("data-type") === "lock") {
if ($this.hasClass("active")) {
aspect = NaN;
aspectFree = true;
$this.removeClass("active");
$aspectList.removeClass("active");
$aspectEd.find('li[data-type="aspect"][data-value="free"]').addClass("active");
}
else {
cropData = cropperImg.cropper("getCropBoxData");
aspect = cropData.width / cropData.height;
$this.addClass("active");
}
}
cropperImg.cropper("setAspectRatio", aspect);
cropperImg.cropper("setCropBoxData", beforeData);
});
$("#"+idElizaPicImageCropperSave).click(function() {
var mode = $("#"+idElizaPicThumbZoomSwitch).prop("checked") ? "complex" : "simple",
crop = {width: $cropWidth.val(), height: $cropHeight.val()},
point = {x: $pointX.val(), y: $pointY.val()},
resize = {width: $originWidth.val(), height: $originHeight.val()},
data = {
crop: JSON.stringify(crop),
point: JSON.stringify(point),
resize: JSON.stringify(resize)
};
$("#"+idElizaPicImageViewer).removeAttr("style");
if (isClipboard) {
elizaNcoverTexted(langAppPicNCoverWait, langAppPicNCoverCropping, 1);
setTimeout(function() {
ajaxSend({
url: uriPicImage+"addTempClipBoardCrop/"+picStatus.stackId,
data: data,
success: function(result) {
notificationLine(langAppPicNotificationImgUpl);
var pages = picStatus.pages,
type = picStatus.state !== "image" ? "album" : "image",
sett = parseInt(UserHandler.getSetting("pic", "clipboard_after_"+type), 10);
fromClipBoard = true;
if (sett) {
if (app.standAlone) {
hApi.pushState(
{},
result,
null,
{callback: 'picRouter'},
appPicStandAloneRouter,
true
);
}
else {
bBone.history.navigate("#pic/"+result, {trigger: true});
DIAppReg.regState(app.name, result);
}
}
else {
if (picStatus.name === "root") {
appPicIndex(pages.start+"-"+pages.end, true);
}
else {
appPicItem(picStatus.name, pages.start+"-"+pages.end, true);
}
}
elizaNcoverTexted("", "", 0);
}
});
}, 300);
}
else {
var id = result.image.system.id;
ajaxSend({
url: uriPicImage+"createThumbnail/"+id+"/"+mode,
data: data,
success: function() {
$("#"+idElizaPicImageCropperCancel).click();
notificationLine(langAppPicNotificationImgThumb, false, 2000);
}
});
}
});
$("#"+idElizaPicImageCropperCancel).click(function() {
$("#"+idElizaPicImageViewer).removeAttr("style");
if (isClipboard) {
var pages = picStatus.pages;
if (picStatus.name === "root") {
appPicIndex(pages.start+"-"+pages.end, true);
}
else {
appPicItem(picStatus.name, pages.start+"-"+pages.end, true);
}
}
else {
picImageRightContent();
if (DICookies.get("rightMenuActive") === "false") {
app.layout.main.right.closest(".tplCLSgrid").removeClass("showside");
}
$viewer.removeClass("hide");
$cropper.addClass("hide");
$("#"+idElizaPicImagePageCrop).removeClass("active");
$("#"+idElizaPicImageFooterThumbs).removeClass("active");
$("#"+idElizaPicImageSlider).removeClass("show");
$cropWidth.keyup();
}
});
}
/**
* Отображение редактора в правой панели
*/
function picImageRightEditor()
{
var rightHead = app.layout.right.header,
rightContent = $("#"+idElizaPicRightScroll),
rightFooter = app.layout.right.footer,
result = picStatus.imageData,
name = result.image.system.name,
type = result.image.meta.file.type,
parentId = result.image.system.parent,
width = result.image.meta.file.width,
height = result.image.meta.file.height,
cropData = "",
cropBox = "",
cropCanvas = "",
cropImage = "",
filterImagePath = "/upl/t/"+result.image.system.name+"_48x48."+result.image.meta.file.type;
app.layout.main.right.closest(".tplCLSgrid").addClass("showside");
var $vcont = $("#"+idElizaPicImageCont),
$viewer = $("#"+idElizaPicImageViewer),
$cropper = $("#"+idElizaPicImageCropper),
href = "/upl/"+name+"."+type+"?"+(new Date().getTime());
if (parentId) {
href = uriPicImage+"getVariationOriginal/"+result.image.system.id+"/"+parentId;
filterImagePath = uriPicImage+"getVariationOriginal/"+result.image.system.id+"/"+parentId+"/48x48";
/** @namespace result.image.meta.file.width */
/** @namespace result.image.meta.file.height */
width = result.image.meta.file.width;
height = result.image.meta.file.height;
}
$viewer.addClass("hide");
$cropper.addClass("hide");
if (!$("#"+idElizaPicSVGFilters).length) {
$vcont.append(tmpR(
tmpAppPicImageSvg, {
id: idElizaPicSVGFilters,
svg: idElizaPicSVGCanvas,
width: width,
height: height,
href: href
}));
}
rightHead.html(tmpR(
tmpAppPicImageRightHead, {
texted: {
text: parentId ? langAppPicImgRight11 : langAppPicImgRight12,
icon: {
svg: {main: "ic-wand", sub: parentId ? "ic-pencil" : "ic-plus"},
size: "small",
color: {subbg: "blue"}
}
},
close: {
id: idElizaPicSVGRightPanelClose,
title: langAppPicImgRight13
},
lang: langTmplImageRightHead
}, tmpObjElzIcon));
$("#"+idElizaPicSVGRightPanelClose).click(function() {
$("#"+idElizaPicImageEditorCancel).click();
});
svgHandler.reset();
ajaxSend({
url: uriPicImage+"getVariationMeta/"+result.image.system.id,
async: false,
success: function(res) {
var corrections = "", filters = "", data;
/** @namespace data.svg_corrections */
/** @namespace data.svg_filters */
/** @namespace data.crop_data */
/** @namespace data.crop_box */
/** @namespace data.crop_canvas */
/** @namespace data.crop_image */
if (res.status === "success") {
data = res.settings;
corrections = data.svg_corrections ? $.parseJSON(data.svg_corrections) : "";
filters = data.svg_filters ? $.parseJSON(data.svg_filters) : "";
cropData = data.crop_data ? $.parseJSON(data.crop_data) : "";
cropBox = data.crop_box ? $.parseJSON(data.crop_box) : "";
cropCanvas = data.crop_canvas ? $.parseJSON(data.crop_canvas) : "";
cropImage = data.crop_image ? $.parseJSON(data.crop_image) : "";
}
svgHandler.setDimensions(result.image.meta.file.width, result.image.meta.file.height);
svgHandler.input({
corrections: corrections,
filters: filters,
href: href,
name: result.image.system.name,
type: result.image.meta.file.type
});
}
});
rightContent.html(tmpR(
tmpAppPicImageEditor,
{
editor: idElizaPicImageEditor,
switch: idElizaPicImageEditorSwitch,
filter: idElizaPicImageEditorFilter,
id1: idElizaPicCorrPresetDivList,
id2: idElizaPicCorrPresetDelete,
id3: idElizaPicCorrPresetList,
id4: idElizaPicCorrPresetSave,
id5: idElizaPicCorrPresetDivForm,
id6: idElizaPicCorrPresetClose,
id7: idElizaPicCorrPresetText,
id8: idElizaPicCorrPresetAdd,
id9: idElizaPicImageEditorCorrections,
id10: idVignetteColorReset,
id11: idVignetteColorFlood,
id12: idVignetteColorLightning,
id13: "picFilterValNamed_",
img: {
name: result.image.system.name,
type: result.image.meta.file.type
},
switcher: [
{name: "filters", title: "Фильтр", icon: {svg: {main:"ic-wand"}, size: 'small'}},
{name: "correction", title: "Коррекция", icon: {svg: {main:"ic-sliders"}, size: 'small'}, class: " active"}
],
trash: {svg: {main: 'ic-trash'}, size: 'small'},
save: {svg: {main: 'ic-plus2'}, size: 'small'},
loop: {svg: {main: 'ic-loop'}, size: 'small'},
add: {svg: {main: 'ic-check'}, size: 'small'},
close: {svg: {main: 'ic-cross'}, size: 'small'},
filter_image: filterImagePath,
filters: svgHandler.getFiltersMenu(),
corrections: svgHandler.getCorrectionsMenu(),
lang: langTmplImageEditor
},
tmpObjElzIcon
));
svgHandler.inputPrepareFilters();
rightFooter.html(tmpR(
tmpAppPicImageEditorFooter, {
save: {
id: idElizaPicImageEditorSave,
text: parentId ? langAppPicImgEdit19 : langAppPicImgEdit20
},
cancel: {
id: idElizaPicImageEditorCancel,
text: langAppPicImgEdit14
}
}));
inputsInitDefault();
var $switch = $("#"+idElizaPicImageEditorSwitch),
$switches = $switch.find(".elzF.item.button"),
$containers = $("#"+idElizaPicImageEditor).find(".strCLSitem");
$switches.click(function() {
var $this = $(this),
name = $this.attr("data-name");
if ($this.hasClass("active")) {
return this;
}
$switches.removeClass("active");
$this.addClass("active");
$containers.addClass("hide");
$containers.filter('[data-name="'+name+'"]').removeClass("hide");
});
var $editorCorrection = $("#"+idElizaPicImageEditorCorrections);
$editorCorrection.find(".reset.link.clk").click(function() {
var $this = $(this),
$slider = $this.closest("li").find(".elzCLScorrectSlider"),
name = $slider.attr("data-name"),
value = parseFloat($slider.attr("data-default"));
$this.closest("li").find(".eSkip input").val(value);
$slider.slider("option", "value", value);
correctionSlide($slider, name, value, value);
});
var funcSliderSlide, funcSliderStop;
if (parseInt(UserHandler.getSetting("pic", "editor_online"), 10)) {
funcSliderStop = function() {};
funcSliderSlide = function(event, ui) {
var $this = $(this),
value = ui.value,
name = $this.attr("data-name"),
def = parseFloat($this.slider("option", "default"));
$this.slider("option", "valField").val(value);
correctionSlide($this, name, value, def);
if (presetListSet) {
$("#"+idElizaPicCorrPresetList).val(0).change();
presetListSet = false;
}
};
}
else {
funcSliderStop = function(event, ui) {
var $this = $(this),
value = ui.value,
name = $this.attr("data-name"),
def = parseFloat($this.slider("option", "default"));
$this.slider("option", "valField").val(value);
correctionSlide($this, name, value, def);
if (presetListSet) {
$("#"+idElizaPicCorrPresetList).val(0).change();
presetListSet = false;
}
};
funcSliderSlide = function(event, ui) {
var $this = $(this),
value = ui.value,
name = $this.attr("data-name"),
def = parseFloat($this.slider("option", "default"));
$this.slider("option", "valField").val(value);
correctionSlide($this, name, value, def, 0, 1);
};
}
$(".elzCLScorrectSlider", $editorCorrection).slider({
orientation: "horizontal",
range: "min",
min: 0,
max: 100,
value: 50,
doubled: "1",
create: function() {
var $this = $(this),
name = $this.attr("data-name"),
valId = "picFilterValNamed_"+name,
$valField = $("#"+valId),
min = parseFloat($this.attr("data-min")),
max = parseFloat($this.attr("data-max")),
def = parseFloat($this.attr("data-default"));
$this.slider("option", "min", min);
$this.slider("option", "max", max);
$this.slider("option", "step", parseFloat($this.attr("data-step")));
$this.slider("option", "value", parseFloat($this.attr("data-value")));
$this.slider("option", "default", def);
$this.slider("option", "valField", $valField);
correctionSlide($this, name, parseFloat($this.attr("data-value")), parseFloat($this.attr("data-default")), 1);
$valField.off().stopTyping(function() {
var $that = $(this),
value = parseFloat($that.val());
if (isNaN(value)) {
value = def;
}
else if (value < min) {
value = min;
}
else if(value > max) {
value = max;
}
$that.val(value);
$this.slider("value", value);
correctionSlide($this, name, value, def);
});
},
slide: funcSliderSlide,
stop: funcSliderStop
});
var $filterEd = $("#"+idElizaPicImageEditorFilter),
$filterLi = $filterEd.find("li");
$filterLi.click(function() {
var $this = $(this);
if (!$this.hasClass("active")) {
$this.addClass("active");
}
else {
$this.removeClass("active");
}
filtersConstruction();
});
$filterEd.sortable({
axis: "y",
handle: ".handler",
stop: function() {
filtersConstruction();
}
});
$filterEd.disableSelection();
var svgHandlerLoc = svgHandler;
$("#"+idVignetteColorFlood).spectrum({
color: svgHandlerLoc.getCorrection("vignetteFlood").value,
preferredFormat: "hex",
showInput: true,
showInitial: true,
change: function(color) {
svgHandlerLoc.setColor("vignetteFlood", color.toHexString());
if (presetListSet) {
$("#"+idElizaPicCorrPresetList).val(0).change();
presetListSet = false;
}
}
});
$("#"+idVignetteColorLightning).spectrum({
color: svgHandlerLoc.getCorrection("vignetteLight").value,
preferredFormat: "hex",
showInput: true,
showInitial: true,
change: function(color) {
svgHandlerLoc.setColor("vignetteLight", color.toHexString());
if (presetListSet) {
$("#"+idElizaPicCorrPresetList).val(0).change();
presetListSet = false;
}
}
});
svgHandlerLoc.setColor("vignetteFlood", svgHandlerLoc.getCorrection("vignetteFlood").value);
svgHandlerLoc.setColor("vignetteLight", svgHandlerLoc.getCorrection("vignetteLight").value);
$("#"+idVignetteColorReset).click(function() {
$("#"+idVignetteColorFlood ).spectrum("set", svgHandlerLoc.getCorrection("vignetteFlood").default);
$("#"+idVignetteColorLightning).spectrum("set", svgHandlerLoc.getCorrection("vignetteLight").default);
svgHandlerLoc.setColor("vignetteFlood", svgHandlerLoc.getCorrection("vignetteFlood").default);
svgHandlerLoc.setColor("vignetteLight", svgHandlerLoc.getCorrection("vignetteLight").default);
});
picPresetNameListReset();
$("#"+idElizaPicCorrPresetDelete).click(function() {
var val = parseInt($("#"+idElizaPicCorrPresetList).val(), 10);
if (val) {
ajaxSend({
url: uriPicUtils+"deleteCorrectionsPreset/"+val,
success: function() {picPresetNameListReset();}
});
}
});
$("#"+idElizaPicCorrPresetList).change(function() {
var $this = $(this);
if (parseInt($this.val(), 10)) {
ajaxSend({
url: uriPicUtils+"getCorrectionsPresetById/"+$this.val(),
success: function(result) {
svgHandler.input({corrections: $.parseJSON(result)}, true);
presetListSet = true;
}
});
}
});
$("#"+idElizaPicCorrPresetSave).click(function() {
$("#"+idElizaPicCorrPresetDivList).addClass("hide");
$("#"+idElizaPicCorrPresetDivForm).removeClass("hide");
$("#"+idElizaPicCorrPresetText).focus().val("");
});
$("#"+idElizaPicCorrPresetClose).click(function() {
$("#"+idElizaPicCorrPresetDivList).removeClass("hide");
$("#"+idElizaPicCorrPresetDivForm).addClass("hide");
});
var triggered = false;
$("#"+idElizaPicCorrPresetAdd).click(function() {
var title = $("#"+idElizaPicCorrPresetText).val();
if (title && !triggered ) {
triggered = true;
ajaxSend({
url: uriPicUtils+"saveCorrectionsPreset",
data: {
title: title,
corrections: JSON.stringify(svgHandler.output().corrections)
},
success: function(result) {
picPresetNameListReset(parseInt(result));
$("#"+idElizaPicCorrPresetClose).click();
triggered = false;
}
});
}
});
$("#"+idElizaPicImageEditorSave).click(function() {
var dataInput = JSON.stringify(svgHandler.output()),
phpMethod = parentId ? "saveVariation" : "addVariation";
elizaNcoverTexted(langAppPicNCoverWait, langAppPicNCoverFilters, true);
setTimeout(function() {
DVP_IN_DA_HOUSE(document.getElementById(idElizaPicSVGCanvas), {}, function(uri) {
ajaxSend({
url: uriPicImage+phpMethod+"/"+result.image.system.id,
data: {
input: dataInput,
image: uri,
preset: $("#"+idElizaPicCorrPresetList).val()
},
success: function(result) {
if (parentId) {
var imageUrl = "/upl/"+name+"."+type+"?"+(new Date().getTime());
$("#"+idElizaPicImageViewer ).find("img").attr("src", imageUrl);
$("#"+idElizaPicImageCropper).find("img").attr("src", imageUrl);
$vcont.addClass("hide");
$viewer.removeClass("hide");
$("#"+idElizaPicImagePageEdit).click();
thumbnailReset();
}
else {
if (app.standAlone) {
hApi.replaceStateData({callback: "picRouter"}, "/"+result.name);
appPicStandAloneRouter();
}
else {
bBone.history.navigate("#pic/"+result.name, {trigger: true});
}
}
elizaNcoverTexted('', '', false);
}
});
});
}, 300);
});
$("#"+idElizaPicImageEditorCancel).click(function() {
$vcont.addClass("hide");
$viewer.removeClass("hide");
$("#"+idElizaPicImagePageEdit).click();
});
}
/**
* Функция добавляет таймстамп ко всем изображениям миниатюр, если присутствуют
*/
function thumbnailReset()
{
var date = "?"+(new Date().getTime());
$("#"+idElizaPicImageSliderList).find(".thumbnail img").each(function() {
var $this = $(this),
src = $this.closest("a").attr("href");
$this.attr("src", src+date);
});
}
/**
* Подготовка фильтров
*/
function filtersConstruction() {
var filtersList = [];
$("#"+idElizaPicImageEditorFilter).find("li").each(function() {
var $this = $(this);
filtersList.push({
name: $this.attr("data-id"),
checked: $this.hasClass("active") ? 1 : 0
});
});
svgHandler.checkFilter(filtersList);
}
/**
* Обработчик слайдера в коррекциях
*
* @param $slider - объект слайдера
* @param name - нейм коррекции
* @param value - текущее значение
* @param def - значение по умолчанию
* @param forInit - если false, то значение сохраняется в контроллер SVG
* @param skip
*/
function correctionSlide($slider, name, value, def, forInit, skip) {
if ($slider.hasClass("middle")) {
if (value < def) {
$slider.addClass("minus").removeClass("plus");
}
else {
$slider.removeClass("minus").addClass("plus");
}
}
var $handlers = $slider.find(".ui-slider-handle");
if (def === value) {
$handlers.addClass("default");
}
else {
$handlers.removeClass("default");
}
$handlers.attr("data-elz-title", value);
if (skip) {
return true;
}
if (!forInit) {
svgHandler.setCorrection(name, value, $slider);
}
else {
svgHandler.setSlider(name, $slider);
}
}
/*
--------------------------------------------------------------------------------------------------------------------
| |
| CORE SECTION |
| |
--------------------------------------------------------------------------------------------------------------------
*/
function appCorePasteImage(event, item)
{
var result = item,
cropping = parseInt(UserHandler.getSetting("pic", "clipboard_cropping"), 10);
if (picStatus.name === "trash" || !picStatus.editable) {
return false;
}
if (appCorePasteImageCheckFormat(result)) {
elizaNcoverTexted(langAppPicNCoverWait, langAppPicNCoverPreparing, 1);
setTimeout(function() {
if (cropping) {
appCorePasteImageCropper(result);
}
else {
ajaxSend({
url: uriPicImage+"addFromClipBoard/"+picStatus.stackId,
data: {image: result},
success: function(result) {
var pages = picStatus.pages,
type = picStatus.state !== "image" ? "album" : "image",
sett = parseInt(UserHandler.getSetting("pic", "clipboard_after_"+type), 10);
notificationLine(langAppPicNotificationImgUpl);
if (sett) {
if (app.standAlone) {
hApi.pushState(
{},
result,
null,
{callback: 'picRouter'},
appPicStandAloneRouter
);
}
else {
bBone.history.navigate("#pic/"+result, {trigger: true});
DIAppReg.regState(app.name, result);
}
}
else {
if (picStatus.name === "root") {
appPicIndex(pages.start+"-"+pages.end);
}
else {
appPicItem(picStatus.name, pages.start+"-"+pages.end);
}
}
elizaNcoverTexted("", "", 0);
}
});
}
}, 200);
}
else {
notificationLine(langAppPicNotificationImgSize, "red 700", 3000);
}
}
function appCorePasteImageCheckFormat(result)
{
return result.match(/^data:image\/(png|jpg|jpeg|gif);base64,/i) ? true : false;
}
function appCorePasteImageCropper(result)
{
ajaxSend({
url: uriPicImage+"addTempClipBoard",
data: {image: result},
success: function(result) {
elizaNcoverTexted(langAppPicNCoverWait, langAppPicNCoverCropInit, 1);
scroller_enabled = false;
setTimeout(function() {
appCorePasteImageCropperBuild(result);
}, 300);
}
});
}
function appCorePasteImageCropperBuild(result)
{
var $footer = app.layout.content.cnt.footer,
$left = $footer.find('[data-layout="footer_left"]'),
$right = $footer.find('[data-layout="footer_right"]'),
$middle = $footer.find('[data-layout="footer_middle"]');
app.layout.top.header.find('[data-layout="toolbar_middle"]').html("");
app.layout.content.cnt.subfooter.html("");
$left.html("");
$right.html("");
app.layout.main.right.closest(".tplCLSgrid").addClass("showside");
var contentHtml = app.layout.content.cnt.content,
loc = window.location;
contentHtml.attr( "data-elz-bg", "grey 900");
$middle.html(tmpR(tmpAppToolbarButton, {
id: idElizaPicFooterRoot,
tag: "a",
href: loc.pathname+(loc.search !== "?" ? loc.search : "")+(loc.hash !== "#" ? loc.hash : ""),
title: langAppPicImgBtn18,
setts: {type: 'default', link: '1', tip_v: 'dtb'},
icon: {svg: {main: 'ic-gallery3'}, size: 'small'}
}, tmpObjElzIcon));
$("#"+idElizaPicFooterRoot).off().click(function(e) {
e.preventDefault();
var pages = picStatus.pages;
if (app.standAlone) {
appPicStandAloneRouter({forced:true});
}
else {
if (picStatus.name === "root") {
appPicIndex(pages.start+"-"+pages.end, true);
}
else {
appPicItem(picStatus.name, pages.start+"-"+pages.end, true);
}
}
});
contentHtml.html(tmpR(
tmpAppPicImage, {
vcont: idElizaPicImageCont,
viewer: idElizaPicImageViewer,
cropper: idElizaPicImageCropper,
title: langAppPicImgTitle1,
name: "upl/temp/temporary_clipboard_member_"+UserHandler.getId(),
type: "png?"+(new Date().getTime()),
width: "",
height: ""
}));
picImageRightCropper(1, result);
}
function appCoreContextMenu($contextElement, event, params)
{
var $this = $contextElement,
type = $this.attr("data-type"),
device = UserHandler.getDevice(),
status = picStatus,
id = $this.attr("data-id"),
name = $this.attr("data-name"),
format = $this.attr("data-format"),
isContent = $this.hasClass("orange") ? true : false,
templateIcon = tmpAppCommonIcon,
templateItem = tmpAppFeatureContextMenuItem,
templateList = tmpAppFeatureContextMenuList,
itemsList = [],
httpHost = "http://"+hostName,
urlToCopy = httpHost+"/"+name+(format ? "."+format : ""),
contextMenu = DIContextMenu,
funcClipBoardBuild = function(id, title, copy) {
new Clipboard("#"+id, {
text: function() {
notificationLine(title, false, 1000);
contextMenu.hide();
return copy;
}
});
},
funcItemObjGen = function(id, title, icon, subIcon, subColor) {
var obj = {
id: id,
tag: "div",
icon: {svg: {main: icon}, size: "small"},
title: title
};
if (subIcon) {
obj.icon.svg.sub = subIcon;
}
if (subColor) {
obj.icon.color = {subbg: subColor};
}
return obj;
};
if (type === "slider" && device !== "desktop") {
return "prevent";
}
var isSelected = _.indexOf(selectedList, name) !== -1,
gspotColor = status.name === "trash" ? "success" : "error",
deleteItem = !selectedCount ? (type === "image" ? langApiPicCommon1 : langApiPicCommon2) : langApiPicCommon3,
deleteTitle = (status.name === "trash" ? langApiPicCommon4+" " : langAppPicImgBtn11+" ") + deleteItem,
locCount = selectedCount + (isSelected ? -1 : 0),
withSelect = !isSelected ? 1 + selectedCount : selectedCount;
contextMenu.setHideCallback(function() {
pluploadFromContext = 'false';
});
if (type !== "slider") {
if (device === "desktop") {
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopy, langApiPicClip1, "ic-copy"));
if (type === "image" ) {
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopyBBCode, langApiPicClip2, "ic-copy"));
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopyHtml, langApiPicClip3, "ic-copy"));
itemsList.push({isSep: 1});
}
}
if (status.editable && status.name !== "trash") {
itemsList.push(funcItemObjGen(
idElizaPicContextMenuEditMeta, langAppPicSettings3+" "+(type === "image" ? langAppPicSettings2 : langAppPicSettings1), "ic-pencil"
));
}
}
if (type === "image") {
if (isContent) {
itemsList.push(funcItemObjGen(idElizaPicContextMenuImageContent, langApiPicCommon8, "ic-sharedfile"));
}
}
else if (type === "album") {
if (status.editable && status.name !== "trash") {
itemsList.push({isSep: 1});
itemsList.push(funcItemObjGen(idElizaPicContextMenuStackUpload, langApiPicCommon9, "ic-image"));
if (locCount) {
itemsList.push(funcItemObjGen(idElizaPicContextMenuStackInsert, langApiPicCommon10, "ic-folder"));
}
}
}
else if (type === "slider" && device === "desktop") {
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopySliderLink, langApiPicClip1, "ic-copy"));
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopySliderBBCode, langApiPicClip2, "ic-copy"));
itemsList.push(funcItemObjGen(idElizaPicContextMenuCopySliderHTML, langApiPicClip3, "ic-copy"));
}
if (status.editable && type !== "slider") {
if (status.stackId && status.name !== "trash" || $contextElement.hasClass("draggable")) {
itemsList.push({isSep: 1});
}
if (status.stackId && status.name !== "trash") {
itemsList.push(funcItemObjGen(
idElizaPicContextMenuMoveUp,
langApiPicCommon5+" "+(status.parent ? langApiPicCommon6 : langApiPicCommon7),
"ic-folder",
"ic-up",
"blue"
));
}
if ($contextElement.hasClass("draggable")) {
itemsList.push(funcItemObjGen(
idElizaPicContextMenuDelete,
(status.name !== "trash" ? langAppPicImgBtn11+" " : langApiPicCommon4+" ") +
(type === "image" ? langApiPicCommon1 : langApiPicCommon2),
status.name !== "trash" ? 'ic-trash' : "ic-loop",
0,
"red 700"
));
}
}
contextMenu.insertHtml(tmpR(
templateList,
{list: itemsList},
{"feature/contextmenu_item": templateItem, "common/elz_icon": templateIcon}
));
if (type === "slider" && device === "desktop") {
funcClipBoardBuild(
idElizaPicContextMenuCopySliderLink,
langApiPicClip4,
httpHost+$this.find("a").attr("href")
);
funcClipBoardBuild(
idElizaPicContextMenuCopyBBCode,
langApiPicClip5,
helperGenImgBBCode(urlToCopy, httpHost+$this.find("a").attr("href"))
);
funcClipBoardBuild(
idElizaPicContextMenuCopyHtml,
langApiPicClip6,
helperGenImgHtml(urlToCopy, httpHost+$this.find("a").attr("href"))
);
return;
}
var $delete = $("#"+idElizaPicContextMenuDelete),
$moveTo = $("#"+idElizaPicContextMenuStackInsert);
if (type === "image" && device === "desktop") {
funcClipBoardBuild(
idElizaPicContextMenuCopyBBCode,
langApiPicClip5,
helperGenImgBBCode(urlToCopy, httpHost+$this.find("img").attr("src"))
);
funcClipBoardBuild(
idElizaPicContextMenuCopyHtml,
langApiPicClip6,
helperGenImgHtml(urlToCopy, httpHost+$this.find("img").attr("src"))
);
}
if(device === "desktop") {
funcClipBoardBuild(
idElizaPicContextMenuCopy,
langApiPicCommon11+" " + (type === "image" ? langAppPicSettings2 : langAppPicSettings1) + " "+langApiPicCommon12,
urlToCopy
);
}
$("#"+idElizaPicContextMenuImageContent).click(function() {
picItemContentLinks(id);
contextMenu.hide();
});
if (!status.editable) {
return false;
}
$delete.elizaIIconsControls().setSubBG(gspotColor).setSubHtml(withSelect);
//$delete.find(".gspot").html(withSelect).attr("data-elz-bg", gspotColor);
$delete.find(".cell.name").find(".title").html(deleteTitle);
if (locCount) {
$moveTo.elizaIIconsControls().setSubBG("success").setSubHtml(locCount);
//$moveTo.find(".gspot").html(locCount).attr("data-elz-bg", "green");
}
$delete.click(function() {
if (!isSelected) {
selectedCount += 1;
selectedList.push(name);
}
picStackDelete();
contextMenu.hide();
});
if (status.name === "trash") {
return false;
}
$("#"+idElizaPicContextMenuEditMeta).click(function() {
picItemSettings(type, id);
contextMenu.hide();
});
$moveTo.click(function() {
if (!locCount) {
notificationLine(langAppPicNotificationMoveTo, "blue", 2500);
return this;
}
picMoveToStack($this);
picPaginationUpdate();
contextMenu.hide();
});
$("#"+idElizaPicContextMenuMoveUp).click(function() {
selectedList.push($this.attr("data-name"));
selectedCount += 1;
picMoveToStack(null, 1, {id: status.parent_id, name: status.parent, type: 'album'}, true);
picPaginationUpdate();
contextMenu.hide();
});
if ($("#"+idElizaPicContextMenuStackUpload).length) {
var pluploader = picPluploaderGet(),
uploader = pluploader.plupload;
if (typeof pluploader.context === "object") {
pluploader.context.destroy();
}
var input = new mOxie.FileInput({
browse_button: document.getElementById(idElizaPicContextMenuStackUpload),
multiple: true
});
input.onchange = function() {
uploader.addFile(input.files);
};
input.init();
pluploader.context = input;
pluploadFromContext = $this.attr('data-name');
}
}
function helperGenImgBBCode(href, src) {
return "[url="+href+"][img]"+src+"[/img][/url]";
}
function helperGenImgHtml(href, src) {
return "
";
}
function helperGenUploadZoneText(withoutImages) {
var title = langApiPicUplZoneTitle1,
text = langApiPicUplZoneText1+'
'+langApiPicUplZoneText2+' [Ctrl + V]';
if (withoutImages) {
title = langApiPicUplZoneTitle2;
text = langApiPicUplZoneText3;
}
return ''+
''+
''+title+''+
'
'+text+'
'+
''+langApiPicUplZoneSize+': 10 mb'+
'
';
}
/**
* Вставляет кастомизированный скроллер в контент область, необходимо для скроллирования альбомов
*/
function insertStackScroll() {
var scrollId = idElizaPicContentScroll;
if (!$("#"+scrollId).length) {
app.layout.content.cnt.content.html(tmpR(
tmpAppScrollContent, {id: scrollId, abs: "abs"}
));
$jqStackScroll = $("#"+idElizaPicContentScroll);
inputsInitDefault();
}
}
function appPicIndex(page, forced)
{
DIPaste.setContextApp("picImagePaste");
picStatus.ownerId = UserHandler.getId();
picStackHandler("root", page ? page : "1", !!forced/* ? true : false*/);
elizaBlur(false);
appShow();
$("#"+idElizaPicRightPanel).addClass("hide");
}
function appPicItem(item, page, forced)
{
DIPaste.setContextApp("picImagePaste");
if (item.length === 7) {
picStackHandler(item, page ? page : "1", !!forced/* ? true : false*/);
appSetState("list album");
$("#"+idElizaPicRightPanel).addClass("hide");
}
else {
picImageHandler(item, !!forced/* ? true : false*/);
appSetState("image");
$("#"+idElizaPicRightPanel).removeClass("hide");
}
elizaBlur(false);
appShow();
}
function appPicTrash(page)
{
DIPaste.setContextApp("picImagePaste");
picStackHandler("trash", page ? page : "1", false);
$("#"+idElizaPicRightPanel).addClass("hide");
elizaBlur(false);
appShow();
DIAppReg.regState(app.name, window.location.hash);
}
function appPicStandAloneRouter(params)
{
var forced = typeof params === "object" && params.hasOwnProperty("forced") ? params.forced : false;
if (!app.standAlone) {
return;
}
var loc = window.location,
path = loc.pathname,
page = loc.search;
path = path.replace(/\//gi, "");
page = page.replace(/\?page=/gi, "");
page = page ? page : "1";
if (!path) {
if (picStatus.name !== "root") {
forced = true;
}
appPicIndex(page, !!forced);
appSetState("list root");
}
else if (path === "trash") {
appPicTrash(page);
appSetState("list trash");
}
else {
appPicItem(path, page, !!forced);
}
DIAppReg.regState(app.name, window.location.pathname, "picImagePaste");
DIAppReg.setActiveApp(app.name);
DIPaste.setContextApp("picImagePaste");
}
function appCoreStandAloneWindowAttach()
{
var $window = $("#"+idElizaApp);
app.layout = {
main: {
right: $window.find('div[data-layout="right"]')
},
top: {
header: $window.find('div[data-layout="top_header"]')
},
content: {
cnt: {
content: $window.find('div[data-layout="cnt_content_content"]'),
subfooter: $window.find('div[data-layout="cnt_content_subfooter"]'),
footer: $window.find('div[data-layout="cnt_content_footer"]')
}
},
right: {
header: $window.find('div[data-layout="right_header"]'),
cnt: {
content: $window.find('div[data-layout="right_cnt_content"]')
},
footer: $window.find('div[data-layout="right_footer"]')
}
};
}
function appCoreRestrictedAccessPage(info, type) {
var layout = app.layout,
$mid = layout.top.header.find('[data-layout="toolbar_middle"]'),
$right = layout.top.header.find('[data-layout="toolbar_right"]'),
$footer = layout.content.cnt.footer,
$content = layout.content.cnt.content,
clr1 = "blue",
clr2 = "red",
icEye = "ic-eye-blocked",
compressFunc = function(name, bg, descr, txt) {
return {icon: {name: name, bg: bg+" 700", txt: txt}, descr: descr};
},
statuses = {
empty: compressFunc(icEye, clr1, langAppPicForbidden1),
private: compressFunc(icEye, clr2, langAppPicForbidden2),
age: compressFunc("", clr2, langAppPicForbidden3+info.data+langAppPicForbidden4, info.data+"+"),
missing: compressFunc("", clr2, langAppPicForbidden5, "404"),
guest: compressFunc("ic-user", clr2, langAppPicForbidden6)
},
data = statuses[info.code];
picStatus.state = "error";
if (!info.save) {
picStatus.name = "error";
$mid.html("");
$right.html("");
$footer.html("");
}
$content.off().html(tmpR(
tmpAppForbidden,
{
tone: type === 'image' ? 'light' : 'dark',
icon: {
svg: {main: info.code === "empty" ? "ic-image" : "ic-lock", sub: data.icon.name},
txt: {sub: data.icon.txt},
color: {subbg: data.icon.bg}
},
description: data.descr
},
tmpObjElzIcon
));
if (type === 'image') {
app.layout.content.cnt.content.attr("data-elz-bg", "grey 900");
}
else {
app.layout.content.cnt.content.removeAttr("data-elz-bg");
}
//$("#ElizaAppPicFake").remove();
}
function appCoreInitStandAlone() {
appCoreStandAloneWindowAttach();
inputsInitDefault();
//DIAppReg.registerApp(app.id, app.name);
}
function appCoreInit() {
app.layout = windowAssembler({
setts: {
id: idElizaApp,
app: app.name,
state: app.state,
isFullscreen: 1
},
enable: {
content: {
cnt: {
subfooter: 1,
footer: 1
}
},
right: {
cnt: {},
footer: 1
}
}
});
var layout = app.layout;
layout.top.header.html(tmpR(tmpAppToolbarPanel, {floated: "floated", size: "contentLarge"}));
insertStackScroll();
var rightSide = layout.top.header.find('[data-layout="toolbar_right"]');
rightSide.append(tmpR(tmpAppToolbarButton, {
tag: 'div',
class: 'sep',
default: 0
}
));
var compressFunc = function(id, title, cls, icon) {
rightSide.append(tmpR(tmpAppToolbarButton, {
tag: "div",
id: id,
title: title,
class: cls,
setts: {
type: "default",
link: "1",
tip_h: "dtr"
},
icon: {svg: {main: icon}, size: "small"},
border: {
enable: 1,
lines: "bottom",
color: "blue"
}
},
tmpObjElzIcon
));
};
compressFunc(idElizaPicRightPanel, langAppPicRightPanel, "rpanel", "ic-rpanel");
compressFunc(idElizaPicRightBack, langAppPicRightBack, "back", "ic-arrow-left2");
if (DISite.getPackageName() !== "Pic") {
toolbarBtnClose(rightSide, idElizaApp, app.name);
}
layout.right.cnt.content.html(tmpR(tmpAppScrollContent, {
id: idElizaPicRightScroll
}));
layout.content.cnt.content.closest(".markContent").addClass("grow");
inputsInitDefault();
userPanelMenus();
//DIAppReg.registerApp(app.id, app.name);
}
function appShow() {
$("#"+idElizaApp).removeClass("hide");
DIContextMenu.hide();
$("#"+idElizaPicPopupSettings).addClass("hide");
$("#"+idElizaPicPopupContent).addClass("hide");
}
function appSetState(state) {
$("#"+idElizaApp).attr("data-appstate", state);
app.state = state;
}
function appActionWrapper(callback, state) {
callback();
if (state) {
appSetState(state);
}
DIAppReg.regState(app.name, window.location.hash, "picImagePaste");
DIAppReg.setActiveApp(app.name);
}
function appCoreRouter() {
var router = bBone.Router.extend({
routes: {
"pic(/)(?page=:page)": 'indexAction',
"pic(/)trash(?page=:page)": 'trashAction',
"pic(/):item(?page=:page)": 'itemAction'
},
indexAction: function (page) {
appActionWrapper(function() {appPicIndex(page);}, "list root");
},
itemAction: function (item, page) {
appActionWrapper(function() {appPicItem(item, page);});
},
trashAction: function(page) {
appActionWrapper(function() {appPicTrash(page);}, "list trash");
}
});
new router();
}
function appCoreRouterStanAlone() {
app.standAlone = 1;
var $app = $("#"+idElizaApp),
hasMeta = $app.attr("data-meta") ? 1 : 0,
state = $app.attr("data-appstate"),
meta = hasMeta ? $.parseJSON($app.attr("data-meta")) : '';
if (hasMeta && state !== "image") {
picParseMetaAlbum(meta);
}
var pages = hasMeta ? pageParser(getParameterByName("page"), picStatus.pages.max) : pageParser(getParameterByName("page"));
picStatus.pages.start = pages.start;
picStatus.pages.end = pages.end;
$app.removeAttr("data-meta");
$jqStackScroll = $("#"+idElizaPicContentScroll);
$jqStackList = $("#"+idElizaPicContentStackList);
appSetState(state);
var $rightPanel = $("#"+idElizaPicRightPanel);
$rightPanel.addClass("hide");
if (hasMeta) {
if (state === "list root") {
picStatus.ownerId = UserHandler.getId();
//picParseMetaAlbum(meta);
picStackItemsInit();
picStackItemsInitSingle();
picStackScrollLoader();
scroller_obj.scroll();
picFooterNumbersEditor();
}
else if (state === "list album" || state === "list trash") {
//picParseMetaAlbum(meta);
picStackItemsInit();
picStackItemsInitSingle();
picStackScrollLoader();
scroller_obj.scroll();
picFooterNumbersEditor();
}
else if (state === "image") {
picParseMetaImage(meta);
$rightPanel.removeClass("hide");
$("img", $("#"+idElizaPicImageViewer)).click(function(event) {
if (event.shiftKey || event.ctrlKey) {
window.open($(this).attr("src"), '_blank');
}
else {
window.open($(this).attr("src"), '_blank');
}
}).mousedown(function(e) {
if (e.which === 2) {
e.preventDefault();
e.stopPropagation();
window.open($(this).attr("src"), '_blank');
}
return true;
});
picImageRightContent();
//picImageHandler(item, forced ? true : false);
}
appShow();
picPluploaderGet();
picPluploaderFrame();
userPanelMenus();
}
elizaBlur(false);
DIPaste.setContextApp("picImagePaste");
hApi.registerPopCallback("picRouter", appPicStandAloneRouter, {forced: true});
hApi.replaceStateData({callback: "picRouter"});
}
function picMainFunc() {
DIContextMenu.registerContext("pic", appCoreContextMenu, {initPaste: 1});
DIPaste.registerContext("file", "picImagePaste", appCorePasteImage);
}
return {
main: function() {
appCoreInit();
DIAppReg.registerApp(idElizaApp, "pic");
appCoreRouter();
picMainFunc();
},
mainStandAlone: function() {
appCoreInitStandAlone();
DIAppReg.registerApp(idElizaApp, "pic", function(url) {
hApi.replaceStateData({callback: "picRouter"}, url);
});
appCoreRouterStanAlone();
picMainFunc();
}
};
}