UNPKG

@europeana/portal

Version:
202 lines (170 loc) 6.62 kB
exports.ids = [103]; exports.modules = { /***/ 209: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(URL) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return urlIsContentfulAsset; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return optimisedSrcForContentfulAsset; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return responsiveImageSrcset; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return responsiveBackgroundImageCSSVars; }); function urlIsContentfulAsset(url) { return new URL(url).host === 'images.ctfassets.net'; } function optimisedSrcForContentfulAsset(asset, params = {}) { if (!(asset !== null && asset !== void 0 && asset.url)) { return null; } const imageUrl = new URL(asset.url); // TODO: are optimisations possible on any other content types? if (asset.contentType === 'image/jpeg') { params['fm'] = 'jpg'; params['fl'] = 'progressive'; if (!params.q) { params.q = 80; } } for (const key in params) { imageUrl.searchParams.set(key, params[key]); } return imageUrl.toString(); } function responsiveImageSrcset(image, params) { if (image !== null && image !== void 0 && image.url && urlIsContentfulAsset(image.url) && params) { return [`${optimisedSrcForContentfulAsset(image, params.small)} ${params.small.w}w`, `${optimisedSrcForContentfulAsset(image, params.medium)} ${params.medium.w}w`, `${optimisedSrcForContentfulAsset(image, params.large)} ${params.large.w}w`, `${optimisedSrcForContentfulAsset(image, params.xl)} ${params.xl.w}w`, `${optimisedSrcForContentfulAsset(image, params.xxl)} ${params.xxl.w}w`, `${optimisedSrcForContentfulAsset(image, params.xxxl)} ${params.xxxl.w}w`, `${optimisedSrcForContentfulAsset(image, params.wqhd)} ${params.wqhd.w}w`, `${optimisedSrcForContentfulAsset(image, params['4k'])} ${params['4k'].w}w`].join(','); } else if (image !== null && image !== void 0 && image.url) { return image.url; } else { return null; } } function responsiveBackgroundImageCSSVars(image, params) { if (image.url && urlIsContentfulAsset(image.url) && params) { return { '--bg-img-small': `url('${optimisedSrcForContentfulAsset(image, params.small)}')`, '--bg-img-medium': `url('${optimisedSrcForContentfulAsset(image, params.medium)}')`, '--bg-img-large': `url('${optimisedSrcForContentfulAsset(image, params.large)}')`, '--bg-img-xl': `url('${optimisedSrcForContentfulAsset(image, params.xl)}')`, '--bg-img-xxl': `url('${optimisedSrcForContentfulAsset(image, params.xxl)}')`, '--bg-img-xxxl': `url('${optimisedSrcForContentfulAsset(image, params.xxxl)}')`, '--bg-img-wqhd': `url('${optimisedSrcForContentfulAsset(image, params.wqhd)}')`, '--bg-img-4k': `url('${optimisedSrcForContentfulAsset(image, params['4k'])}')` }; } else if (image.url) { return { '--bg-img-small': `url('${image.url}')` }; } else { return null; } } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(9)["URL"])) /***/ }), /***/ 253: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/generic/OptimisedImage.vue?vue&type=template&id=2bfc3fc3& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.lazy)?_c('b-img-lazy',{attrs:{"src":_vm.optimisedSrc,"blank-color":"#fff","blank-width":_vm.optimisedWidth,"blank-height":_vm.optimisedHeight,"alt":_vm.alt}}):_c('b-img',{attrs:{"src":_vm.optimisedSrc,"width":_vm.optimisedWidth,"height":_vm.optimisedHeight,"alt":_vm.alt}})} var staticRenderFns = [] // CONCATENATED MODULE: ./src/components/generic/OptimisedImage.vue?vue&type=template&id=2bfc3fc3& // EXTERNAL MODULE: ./src/plugins/contentful-utils.js var contentful_utils = __webpack_require__(209); // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/generic/OptimisedImage.vue?vue&type=script&lang=js& // // // // // // // // // // // // // // // // // // /* harmony default export */ var OptimisedImagevue_type_script_lang_js_ = ({ name: 'OptimisedImage', props: { src: { type: String, required: true }, width: { type: Number, required: true }, height: { type: Number, required: true }, alt: { type: String, default: '' }, contentType: { // TODO: required? type: String, default: null }, quality: { type: Number, default: 80 }, maxWidth: { type: Number, default: null }, lazy: { type: Boolean, default: true } }, computed: { aspectRatio() { return this.width / this.height; }, optimisedWidth() { return this.maxWidth === null || this.width <= this.maxWidth ? this.width : this.maxWidth; }, optimisedHeight() { return Math.round(this.optimisedWidth / this.aspectRatio); }, optimisedSrc() { if (typeof this.contentType !== 'string' || !Object(contentful_utils["d" /* urlIsContentfulAsset */])(this.src)) { return this.src; } return Object(contentful_utils["a" /* optimisedSrcForContentfulAsset */])({ url: this.src, contentType: this.contentType }, { w: this.maxWidth, q: this.quality }); } } }); // CONCATENATED MODULE: ./src/components/generic/OptimisedImage.vue?vue&type=script&lang=js& /* harmony default export */ var generic_OptimisedImagevue_type_script_lang_js_ = (OptimisedImagevue_type_script_lang_js_); // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(3); // CONCATENATED MODULE: ./src/components/generic/OptimisedImage.vue /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( generic_OptimisedImagevue_type_script_lang_js_, render, staticRenderFns, false, null, null, "1ab8704c" ) /* harmony default export */ var OptimisedImage = __webpack_exports__["default"] = (component.exports); /***/ }) };; //# sourceMappingURL=103.js.map