@europeana/portal
Version:
Europeana Portal
202 lines (170 loc) • 6.62 kB
JavaScript
exports.ids = [103];
exports.modules = {
/***/ 209:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
/* 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__) {
;
// 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