Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

View File

@ -0,0 +1,219 @@
/* global wu_template_switching_params, Vue, wu_create_cookie, wu_listen_to_cookie_change */
(function($, hooks) {
/*
* Sets up the cookie listener for template selection.
*/
hooks.addAction('wu_checkout_loaded', 'nextpress/wp-ultimo', function() {
/*
* Resets the template selection cookie.
*/
wu_create_cookie('wu_template', false);
/*
* Listens for changes and set the template if one is detected.
*/
wu_listen_to_cookie_change('wu_template', function(value) {
window.wu_template_switching.template_id = value;
});
});
$(document).ready(function() {
const dynamic = {
functional: true,
template: '#dynamic',
props: ['template'],
render(h, context) {
const template = context.props.template;
const component = template ? { template } : '<div>nbsp;</div>';
return h(component);
},
};
hooks.doAction('wu_checkout_loaded');
// eslint-disable-next-line no-unused-vars
window.wu_template_switching = new Vue({
el: '#wp-ultimo-form-wu-template-switching-form',
data() {
return {
template_id: 0,
original_template_id: -1,
template_category: '',
stored_templates: {},
confirm_switch: 0,
ready: false,
};
},
directives: {
init: {
bind(el, binding, vnode) {
vnode.context[binding.arg] = binding.value;
},
},
},
components: {
dynamic,
},
watch: {
ready() {
const that = this;
if (that.ready !== false) {
that.switch_template();
} // end if;
},
},
methods: {
get_template(template, data) {
if (typeof data.id === 'undefined') {
data.id = 'default';
} // end if;
const template_name = template + '/' + data.id;
if (typeof this.stored_templates[template_name] !== 'undefined') {
return this.stored_templates[template_name];
} // end if;
const template_data = {
duration: this.duration,
duration_unit: this.duration_unit,
products: this.products,
...data,
};
this.fetch_template(template, template_data);
return '<div class="wu-p-4 wu-bg-gray-100 wu-text-center wu-rounded">Loading</div>';
},
fetch_template(template, data) {
const that = this;
if (typeof data.id === 'undefined') {
data.id = 'default';
} // end if;
this.request('wu_render_field_template', {
template,
attributes: data,
}, function(results) {
const template_name = template + '/' + data.id;
if (results.success) {
Vue.set(that.stored_templates, template_name, results.data.html);
} else {
Vue.set(that.stored_templates, template_name, '<div>' + results.data[0].message + '</div>');
} // end if;
});
},
switch_template() {
const that = this;
that.block();
this.request('wu_switch_template', {
template_id: that.template_id,
}, function(results) {
/*
* Redirect of we get a redirect URL back.
*/
if (typeof results.data.redirect_url === 'string') {
window.location.href = results.data.redirect_url;
} // end if;
});
},
block() {
/*
* Get the first bg color from a parent.
*/
const bg_color = jQuery(this.$el).parents().filter(function() {
return $(this).css('backgroundColor') !== 'rgba(0, 0, 0, 0)';
}).first().css('backgroundColor');
jQuery(this.$el).wu_block({
message: '<div class="spinner is-active wu-float-none" style="float: none !important;"></div>',
overlayCSS: {
backgroundColor: bg_color ? bg_color : '#ffffff',
opacity: 0.6,
},
css: {
padding: 0,
margin: 0,
width: '50%',
fontSize: '14px !important',
top: '40%',
left: '35%',
textAlign: 'center',
color: '#000',
border: 'none',
backgroundColor: 'none',
cursor: 'wait',
},
});
},
unblock() {
jQuery(this.$el).wu_unblock();
},
request(action, data, success_handler, error_handler) {
jQuery.ajax({
method: 'POST',
url: wu_template_switching_params.ajaxurl + '&action=' + action,
data,
success: success_handler,
error: error_handler,
});
},
},
});
});
}(jQuery, wp.hooks));