UNPKG

@europeana/portal

Version:
459 lines (396 loc) 17.9 kB
exports.ids = [94]; exports.modules = { /***/ 345: /***/ (function(module, exports, __webpack_require__) { // style-loader: Adds some css to the DOM by adding a <style> tag // load the styles var content = __webpack_require__(449); if(content.__esModule) content = content.default; if(typeof content === 'string') content = [[module.i, content, '']]; if(content.locals) module.exports = content.locals; // add CSS to SSR context var add = __webpack_require__(13).default module.exports.__inject__ = function (context) { add("134220cc", content, true, context) }; /***/ }), /***/ 448: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(345); /* harmony import */ var _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /***/ }), /***/ 449: /***/ (function(module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(12); var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(false); // Module ___CSS_LOADER_EXPORT___.push([module.i, ".feedback-container{position:fixed;right:1rem;bottom:1rem;z-index:1050}@media(min-width: 576px){.feedback-container{left:auto}}.feedback-container .feedback-button{position:fixed;right:1rem;bottom:1rem;z-index:1000;text-transform:capitalize;padding:.875rem;line-height:1;white-space:nowrap;border-radius:50%;max-width:50px;transition:max-width .35s ease-out,border-radius .3s ease-out;box-shadow:0 2px 8px rgba(26,26,26,.25)}.feedback-container .feedback-button .icon-ic-feedback{padding-right:0;font-size:1.25rem;line-height:1}.feedback-container .feedback-button .feedback-button-text{transition:opacity .3s ease-out;opacity:0}.feedback-container .feedback-button.hide-button{display:none}.feedback-container .feedback-button.big{border-radius:.3rem;max-width:220px;transition:max-width .75s ease-out,border-radius .25s ease-out}.feedback-container .feedback-button.big .feedback-button-text{opacity:1;transition:opacity .3s ease-out}.feedback-container .feedback-button.big .icon-ic-feedback{padding-right:.25rem}@media(max-width: 576px){.feedback-container .feedback-button.big{max-width:50px;border-radius:50%}.feedback-container .feedback-button.big .feedback-button-text{opacity:0}.feedback-container .feedback-button.big .icon-ic-feedback{padding-right:0}}.feedback-widget{border-radius:.3rem;background-color:#fff;color:#4d4d4d;visibility:hidden;opacity:0;transform:translate(0, 50px);transition:opacity .15s linear,transform .3s ease-out;position:fixed;left:1rem;right:1rem;bottom:1rem;margin:0;overflow:hidden}@media(min-width: 576px){.feedback-widget{left:auto;min-width:360px}}.feedback-widget.show-feedback-widget{opacity:1;visibility:visible;transform:none}.feedback-widget .feedback-header{background-color:#0a72cc;padding:.75rem 1rem}.feedback-widget .feedback-header h5{color:#fff;font-size:1rem;line-height:1.5;font-weight:600;margin:0}.feedback-widget .feedback-form{padding:1rem}.feedback-widget .feedback-form .form-fields{flex:0 1 100%;width:0}.feedback-widget .feedback-form .form-buttons{flex:0 1 100%}@media(max-width: 576px){.feedback-widget .feedback-form .form-buttons{flex-wrap:wrap}.feedback-widget .feedback-form .form-buttons .button-group-right{width:100%}.feedback-widget .feedback-form .form-buttons button{width:100%;margin:.5rem 0 0 !important}}.feedback-widget .feedback-form .form-control{padding:.75rem;background:#fff;border:1px solid #4d4d4d;border-radius:.375rem;font-size:1rem;height:3rem;color:#1a1a1a}.feedback-widget .feedback-form .form-control:focus{border-color:#0a72cc}.feedback-widget .feedback-form .form-control.is-invalid{border-color:#e02020}.feedback-widget .feedback-form textarea.form-control{height:auto}.feedback-widget .feedback-form .form-group{margin-bottom:0}.feedback-widget .feedback-form .form-text{font-size:.875rem;margin:.75rem 0 0}.feedback-widget .feedback-form .form-text a{color:#4d4d4d}.feedback-widget .feedback-success{color:#1a1a1a}.feedback-widget .icon-check-circle::before{color:#0a72cc;font-size:2.0625rem}.feedback-widget .icon-cancel-circle::before{color:#e02020;font-size:2.0625rem}", ""]); // Exports module.exports = ___CSS_LOADER_EXPORT___; /***/ }), /***/ 564: /***/ (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/feedback/FeedbackWidget.vue?vue&type=template&id=3964e0c4& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"feedback-container"},[_c('b-button',{ref:"button",staticClass:"feedback-button text-decoration-none",class:_vm.buttonClasses,attrs:{"variant":"primary","data-qa":"feedback button","size":"lg"},on:{"click":_vm.showFeedbackForm,"mouseover":function($event){_vm.bigButton = true},"mouseleave":function($event){_vm.bigButton = false}}},[_c('span',{staticClass:"icon-ic-feedback d-inline-flex"}),_vm._v(" "),_c('span',{staticClass:"feedback-button-text",attrs:{"data-qa":"feedback button text"}},[_vm._v(_vm._s(_vm.$t('actions.feedback')))])]),_vm._ssrNode(" "),_vm._ssrNode("<div role=\"dialog\" aria-labelledby=\"dialogHeader\" data-qa=\"feedback widget\" content-class=\"shadow\""+(_vm._ssrClass("feedback-widget shadow",_vm.showWidget ? 'show-feedback-widget' : null))+">","</div>",[_vm._ssrNode("<div id=\"dialogHeader\" class=\"feedback-header\"><h5>"+_vm._ssrEscape(_vm._s(_vm.$t('feedback.title')))+"</h5></div> "),_c('b-form',{staticClass:"feedback-form",attrs:{"data-qa":"feedback widget form"},on:{"submit":function($event){$event.preventDefault();return _vm.submitForm.apply(null, arguments)}}},[_c('b-form-group',[_c('div',{staticClass:"d-flex flex-wrap"},[_c('div',{staticClass:"form-fields"},[(_vm.currentStep === 1)?_c('div',[_c('b-form-textarea',{ref:"input",attrs:{"name":"feedback","required":"required","placeholder":_vm.$t('feedback.validFeedback'),"state":_vm.feedbackInputState,"rows":"5","data-qa":"feedback textarea","aria-describedby":"input-live-feedback"},on:{"invalid":_vm.flagInvalidFeedback},model:{value:(_vm.feedback),callback:function ($$v) {_vm.feedback=$$v},expression:"feedback"}}),_vm._v(" "),_c('b-form-invalid-feedback',{attrs:{"id":"input-live-feedback","data-qa":"feedback message invalid"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.validFeedback'))+"\n ")])],1):_vm._e(),_vm._v(" "),(_vm.currentStep === 2)?_c('div',{attrs:{"id":"step2"}},[_c('b-form-input',{attrs:{"autofocus":"","type":"email","name":"email","placeholder":_vm.$t('feedback.form.placeholders.email'),"state":_vm.emailInputState,"aria-describedby":"input-live-feedback","data-qa":"feedback email input"},on:{"invalid":_vm.flagInvalidEmail},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:"email"}}),_vm._v(" "),_c('b-form-invalid-feedback',{attrs:{"id":"input-live-feedback","data-qa":"feedback email invalid"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.validEmail'))+"\n ")]),_vm._v(" "),_c('b-form-text',{attrs:{"id":"input-live-help"}},[_c('p',{staticClass:"mb-0"},[_vm._v("\n "+_vm._s(_vm.$t('feedback.emailOptional'))+"\n ")]),_vm._v(" "),_c('i18n',{attrs:{"path":"feedback.policies","tag":"span"}},[_c('b-link',{attrs:{"to":_vm.$path('/rights'),"target":"_blank"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.termsOfService'))+"\n ")]),_vm._v(" "),_c('b-link',{attrs:{"to":_vm.$path('/rights/privacy-policy'),"target":"_blank"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.privacyPolicy'))+"\n ")])],1)],1)],1):_vm._e(),_vm._v(" "),(_vm.currentStep == 3)?_c('div',{staticClass:"feedback-success d-flex align-items-center",attrs:{"id":"step3"}},[_c('span',{class:_vm.requestSuccess ? 'icon-check-circle pr-3' : 'icon-cancel-circle pr-3'}),_vm._v(" "),(_vm.requestSuccess)?_c('span',[_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.success')))]),_vm._v(" "),_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.thankYou')))])]):(_vm.requestSuccess === false)?_c('span',[_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.failed')))])]):_vm._e()]):_vm._e()]),_vm._v(" "),_c('div',{staticClass:"form-buttons d-flex justify-content-between align-items-end"},[(_vm.showCancelButton)?_c('b-button',{staticClass:"mt-3",attrs:{"data-qa":"feedback cancel button","variant":"outline-primary"},on:{"click":function($event){$event.preventDefault();return _vm.hideFeedbackForm.apply(null, arguments)}}},[_vm._v("\n "+_vm._s(_vm.$t('actions.cancel'))+"\n ")]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"button-group-right"},[(_vm.showSkipButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback skip button","variant":"outline-primary","disabled":_vm.disableSkipButton},on:{"click":_vm.skipEmail}},[_vm._v("\n "+_vm._s(_vm.$t('actions.skip'))+"\n ")]):_vm._e(),(_vm.showNextButton)?_c('b-button',{staticClass:"button-next-step mt-3 ml-2",attrs:{"data-qa":"feedback next button","variant":"primary","type":"submit","disabled":_vm.disableNextButton}},[_vm._v("\n "+_vm._s(_vm.$t('actions.next'))+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showSendButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback send button","variant":"primary","type":"submit","disabled":_vm.disableSendButton}},[_vm._v("\n "+_vm._s(_vm.$t('actions.send'))+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showCloseButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback close button","variant":"primary"},on:{"click":function($event){$event.preventDefault();return _vm.hideFeedbackForm.apply(null, arguments)}}},[_vm._v("\n "+_vm._s(_vm.$t('actions.close'))+"\n ")]):_vm._e()],1)],1)])])],1)],2)],2)} var staticRenderFns = [] // CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue?vue&type=template&id=3964e0c4& // EXTERNAL MODULE: external "axios" var external_axios_ = __webpack_require__(7); var external_axios_default = /*#__PURE__*/__webpack_require__.n(external_axios_); // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/feedback/FeedbackWidget.vue?vue&type=script&lang=js& // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ var FeedbackWidgetvue_type_script_lang_js_ = ({ name: 'FeedbackWidget', data() { return { showWidget: false, currentStep: 1, feedback: '', feedbackInputState: true, email: '', emailInputState: true, requestSuccess: null, bigButton: true, sending: false }; }, computed: { showCancelButton() { return this.currentStep < 3 || !this.requestSuccess; }, showNextButton() { return this.currentStep < 3; }, disableNextButton() { return this.currentStep === 1 && this.feedback === '' || this.currentStep === 2 && this.email === '' || this.sending; }, disableSendButton() { return this.sending; }, disableSkipButton() { return this.sending; }, showSkipButton() { return this.currentStep === 2; }, showSendButton() { return this.currentStep === 3 && !this.requestSuccess; }, showCloseButton() { return !this.showCancelButton; }, buttonClasses() { return { 'hide-button': this.showWidget, big: this.bigButton }; } }, mounted() { window.addEventListener('scroll', () => this.bigButton = false, { once: true }); }, methods: { resetForm() { this.currentStep = 1; this.feedback = ''; this.feedbackInputState = true; this.email = ''; this.emailInputState = true; this.requestSuccess = null; }, showFeedbackForm() { this.resetForm(); this.showWidget = true; this.$nextTick(() => { const textarea = this.$refs.input; textarea.focus(); }); }, hideFeedbackForm() { this.showWidget = false; this.$nextTick(() => { const button = this.$refs.button; button.focus(); }); }, goToStep(step) { this.currentStep = step; }, flagInvalidEmail() { this.emailInputState = false; }, flagInvalidFeedback() { this.feedbackInputState = false; }, skipEmail() { this.email = ''; this.submitForm(); }, validateFeedbackLength() { return this.$options.filters.wordLength(this.feedback) >= 5; }, async submitForm() { // If this handler gets called, then the fields are valid this.feedbackInputState = true; this.emailInputState = true; if (this.currentStep === 1 && !this.validateFeedbackLength()) { this.feedbackInputState = false; return; } if (this.currentStep > 1) { await this.sendFeedback(); } if (this.currentStep < 3) { this.goToStep(this.currentStep + 1); } }, sendFeedback() { this.sending = true; return this.postFeedbackMessage().then(() => { this.requestSuccess = true; if (this.currentStep < 3) { this.goToStep(this.currentStep + 1); } }).catch(() => { this.requestSuccess = false; }).finally(() => { this.sending = false; }); }, postFeedbackMessage() { const postData = { feedback: this.feedback, pageUrl: window.location.href, browser: navigator.userAgent, screensize: `${window.innerWidth} x ${window.innerHeight}` }; if (this.email && this.email !== '') { postData.email = this.email; } // For testing purposes, uncomment the following `if` block to cause the // request always to fail on the first attempt, showing the error message, // but then succeeding on subsequent attempts. // if (this.requestSuccess === null) { // delete postData.summary; // } return external_axios_default.a.create({ baseURL: this.$config.app.baseUrl }).post('/_api/jira/service-desk', postData); } } }); // CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue?vue&type=script&lang=js& /* harmony default export */ var feedback_FeedbackWidgetvue_type_script_lang_js_ = (FeedbackWidgetvue_type_script_lang_js_); // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(3); // CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue function injectStyles (context) { var style0 = __webpack_require__(448) if (style0.__inject__) style0.__inject__(context) } /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( feedback_FeedbackWidgetvue_type_script_lang_js_, render, staticRenderFns, false, injectStyles, null, "66a0346c" ) /* harmony default export */ var FeedbackWidget = __webpack_exports__["default"] = (component.exports); /***/ }) };; //# sourceMappingURL=94.js.map