UNPKG

koco-xyz

Version:

Dialogs for displaying, choosing, and editing images provided in scoop idiom.

163 lines (115 loc) 5.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _concreteImageEditor = require('text!./concrete-image-editor.html'); var _concreteImageEditor2 = _interopRequireDefault(_concreteImageEditor); var _knockout = require('knockout'); var _knockout2 = _interopRequireDefault(_knockout); var _jquery = require('jquery'); var _jquery2 = _interopRequireDefault(_jquery); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _imageUtilities = require('image-utilities'); var _imageUtilities2 = _interopRequireDefault(_imageUtilities); var _mappingUtilities = require('mapping-utilities'); var _mappingUtilities2 = _interopRequireDefault(_mappingUtilities); var _disposer = require('disposer'); var _disposer2 = _interopRequireDefault(_disposer); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* args : { conceptualImage: observable conceptualImage concreteImage: observable concreteImage, dimensionRatios: ['16:9','4:3'] limiter pour les nouvelles } */ var ConcreteImagesPickerViewModel = function ConcreteImagesPickerViewModel(params, componentInfo) { var self = this; self.params = params; var selectedImage = _mappingUtilities2.default.toJS(self.params.selectedImage); var selectedConcreteImage = _mappingUtilities2.default.toJS(self.params.selectedConcreteImage); var options = buildOptions(selectedImage); self.options = _knockout2.default.observableArray(options); if (!selectedConcreteImage) { //Attention: 2 type de DefaultConcreteImage (1 pour les previews de scoop et celui ci pour le default concrete image...) //en ce moment on est chanceux, c'est la meme taille qui est utilisée par défaut mais il faudra ajuster si ca change selectedConcreteImage = _imageUtilities2.default.getDefaultConcreteImage(selectedImage); } var selectedOption = getConcreteImageHref(selectedConcreteImage); self.selectedOption = _knockout2.default.observable(selectedOption); self.params.selectedConcreteImage(selectedConcreteImage); self.koDisposer = new _disposer2.default(); self.koDisposer.add(self.selectedOption.subscribe(function (newValue) { selectedOption = newValue; var concreteImage = null; if (selectedOption) { concreteImage = _lodash2.default.find(selectedImage.concreteImages, function (c) { return c.mediaLink.href == selectedOption; }); } self.params.selectedConcreteImage(concreteImage || null); })); self.koDisposer.add(self.params.$raw.selectedImage.subscribe(function () { selectedImage = _mappingUtilities2.default.toJS(self.params.selectedImage); options = buildOptions(selectedImage); self.options(options); selectedConcreteImage = _imageUtilities2.default.getDefaultConcreteImage(selectedImage); selectedOption = getConcreteImageHref(selectedConcreteImage); self.selectedOption(selectedOption); self.params.selectedConcreteImage(selectedConcreteImage); })); }; ConcreteImagesPickerViewModel.prototype.dispose = function () { var self = this; self.koDisposer.dispose(); }; function getConcreteImageHref(selectedConcreteImage) { var selectedOption = ''; if (selectedConcreteImage && selectedConcreteImage.mediaLink && selectedConcreteImage.mediaLink.href) { selectedOption = selectedConcreteImage.mediaLink.href; } return selectedOption; } function buildOptions(selectedImage) { var options = []; if (selectedImage && selectedImage.concreteImages && selectedImage.concreteImages.length) { for (var i = 0; i < selectedImage.concreteImages.length; i++) { var concreteImage = selectedImage.concreteImages[i]; var group = _lodash2.default.find(options, function (g) { return g.ratio === concreteImage.dimensionRatio; }); if (!group) { var ratio = 'ratio inconnu'; if (concreteImage.dimensionRatio && concreteImage.dimensionRatio != 'unknown') { ratio = concreteImage.dimensionRatio; } group = new Group(ratio, []); options.push(group); } group.dimensions.push(new Option(concreteImage)); } } return options; } function Group(ratio, dimensions) { this.ratio = ratio; this.dimensions = dimensions; } function Option(concreteImage) { if (concreteImage.width && concreteImage.height) { this.name = concreteImage.width + 'x' + concreteImage.height; } else { this.name = 'dimension inconnue'; } this.id = concreteImage.mediaLink.href; } exports.default = { viewModel: { createViewModel: function createViewModel(params, componentInfo) { return new ConcreteImagesPickerViewModel(params, componentInfo); } }, template: _concreteImageEditor2.default };