Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 18x 18x 18x 16x 30x 30x 30x 16x 30x 16x 16x 16x 16x 16x 16x 16x | import * as $ from 'jquery'; const _ = require('underscore'); const __ = require('oro/translator'); const BaseField = require('pim/form/common/fields/field'); const Routing = require('routing'); const Mediator = require('oro/mediator'); const Messenger = require('oro/messenger'); const MediaUrlGenerator = require('pim/media-url-generator'); const template = require('pim/template/form/common/fields/media'); require('jquery.slimbox'); /** * Media field (using back-end FileInfo) * * @author Marie Gautier <marie.gautier@akeneo.com> * @copyright 2018 Akeneo SAS (http://www.akeneo.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ class MediaField extends BaseField { readonly template = _.template(template); constructor(config: any) { super(config); this.events = { 'change input[type="file"]': this.uploadMedia, 'click .clear-field': this.clearField, 'click .open-media': this.openMedia }; } /** * {@inheritdoc} */ getTemplateContext() { return BaseField.prototype.getTemplateContext.apply(this, arguments) .then((templateContext: any) => { templateContext.mediaUrlGenerator = MediaUrlGenerator; return templateContext; }); } /** * {@inheritdoc} */ renderInput(templateContext: any) { return this.template(Object.assign(templateContext, { media: this.getFormData()[this.fieldName], readOnly: this.readOnly, uploadLabel: __('pim_common.media_upload') })); } private handleProcess(e: { loaded: number, total: number }) { this.$('> .akeneo-media-uploader-field .progress').css({opacity: 1}); this.$('> .akeneo-media-uploader-field .progress .bar').css({ width: ((e.loaded / e.total) * 100) + '%' }); } private setUploadContextValue(value: any) { this.updateModel(value); Mediator.trigger('pim_enrich:form:entity:update_state'); } private uploadMedia() { const input = this.$('input[type="file"]')[0]; if (!input || 0 === input.files.length) { return; } const formData = new FormData(); formData.append('file', input.files[0]); $.ajax({ url: Routing.generate('pim_enrich_media_rest_post'), type: 'POST', data: formData, contentType: false, cache: false, processData: false, xhr: () => { const myXhr = (<any> $.ajaxSettings).xhr(); if (myXhr.upload) { myXhr.upload.addEventListener('progress', this.handleProcess.bind(this), false); } return myXhr; } }).done((data) => { this.setUploadContextValue(data); this.render(); }).fail((xhr) => { const message = xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : __('pim_enrich.entity.product.error.upload'); Messenger.enqueueMessage('error', message); }).always(() => { this.$('> .akeneo-media-uploader-field .progress').css({opacity: 0}); }); } private clearField() { this.updateModel({ filePath: null, originalFilename: null }); this.render(); } private openMedia() { const mediaUrl = MediaUrlGenerator.getMediaShowUrl(this.getFormData()[this.fieldName].filePath, 'preview'); if (mediaUrl) { (<any> $).slimbox(mediaUrl, '', {overlayOpacity: 0.3}); } } } export = MediaField |