mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Widget: Handle resize events
This commit is contained in:
@@ -108,6 +108,7 @@ def generate_widget_js(lang):
|
|||||||
|
|
||||||
files = [
|
files = [
|
||||||
'vuejs/vue.js' if settings.DEBUG else 'vuejs/vue.min.js',
|
'vuejs/vue.js' if settings.DEBUG else 'vuejs/vue.min.js',
|
||||||
|
'vuejs/vue-resize.min.js',
|
||||||
'pretixpresale/js/widget/docready.js',
|
'pretixpresale/js/widget/docready.js',
|
||||||
'pretixpresale/js/widget/floatformat.js',
|
'pretixpresale/js/widget/floatformat.js',
|
||||||
'pretixpresale/js/widget/widget.js',
|
'pretixpresale/js/widget/widget.js',
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ window.PretixWidget = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var Vue = module.exports;
|
var Vue = module.exports;
|
||||||
|
Vue.component('resize-observer', VueResize.ResizeObserver)
|
||||||
|
|
||||||
var strings = {
|
var strings = {
|
||||||
'sold_out': django.pgettext('widget', 'Sold out'),
|
'sold_out': django.pgettext('widget', 'Sold out'),
|
||||||
@@ -542,6 +543,9 @@ var shared_methods = {
|
|||||||
window.open(redirect_url);
|
window.open(redirect_url);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleResize: function () {
|
||||||
|
this.mobile = this.$refs.wrapper.clientWidth <= 800;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var shared_widget_data = function () {
|
var shared_widget_data = function () {
|
||||||
@@ -918,6 +922,7 @@ Vue.component('pretix-widget-event-calendar', {
|
|||||||
Vue.component('pretix-widget', {
|
Vue.component('pretix-widget', {
|
||||||
template: ('<div class="pretix-widget-wrapper" ref="wrapper">'
|
template: ('<div class="pretix-widget-wrapper" ref="wrapper">'
|
||||||
+ '<div :class="classObject">'
|
+ '<div :class="classObject">'
|
||||||
|
+ '<resize-observer @notify="handleResize" />'
|
||||||
+ shared_loading_fragment
|
+ shared_loading_fragment
|
||||||
+ '<div class="pretix-widget-error-message" v-if="$root.error && $root.view !== \'event\'">{{ $root.error }}</div>'
|
+ '<div class="pretix-widget-error-message" v-if="$root.error && $root.view !== \'event\'">{{ $root.error }}</div>'
|
||||||
+ '<pretix-widget-event-form ref="formcomp" v-if="$root.view === \'event\'"></pretix-widget-event-form>'
|
+ '<pretix-widget-event-form ref="formcomp" v-if="$root.view === \'event\'"></pretix-widget-event-form>'
|
||||||
|
|||||||
@@ -84,7 +84,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.pretix-widget {
|
.pretix-widget {
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
@@ -716,3 +715,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/Akryum/vue-resize/blob/master/dist/vue-resize.css
|
||||||
|
.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}
|
||||||
|
|||||||
1
src/pretix/static/vuejs/vue-resize.min.js
vendored
Normal file
1
src/pretix/static/vuejs/vue-resize.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var VueResize=function(e){"use strict";var t=void 0;function i(){i.init||(i.init=!0,t=-1!==function(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(t>0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var i=e.indexOf("rv:");return parseInt(e.substring(i+3,e.indexOf(".",i)),10)}var n=e.indexOf("Edge/");return n>0?parseInt(e.substring(n+5,e.indexOf(".",n)),10):-1}())}var n={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})},staticRenderFns:[],_scopeId:"data-v-b329ee4c",name:"resize-observer",methods:{compareAndNotify:function(){this._w===this.$el.offsetWidth&&this._h===this.$el.offsetHeight||(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.$emit("notify"))},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!t&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),delete this._resizeObject.onload)}},mounted:function(){var e=this;i(),this.$nextTick(function(){e._w=e.$el.offsetWidth,e._h=e.$el.offsetHeight});var n=document.createElement("object");this._resizeObject=n,n.setAttribute("aria-hidden","true"),n.setAttribute("tabindex",-1),n.onload=this.addResizeHandlers,n.type="text/html",t&&this.$el.appendChild(n),n.data="about:blank",t||this.$el.appendChild(n)},beforeDestroy:function(){this.removeResizeHandlers()}};function s(e){e.component("resize-observer",n),e.component("ResizeObserver",n)}var r={version:"0.4.5",install:s},o=null;return"undefined"!=typeof window?o=window.Vue:"undefined"!=typeof global&&(o=global.Vue),o&&o.use(r),e.install=s,e.ResizeObserver=n,e.default=r,e}({});
|
||||||
Reference in New Issue
Block a user