Home › Forums › Ticket Products › Event Tickets Plus › Attendee Information NOT Showing Up
- This topic has 24 replies, 2 voices, and was last updated 8 years, 9 months ago by
Gerald.
-
AuthorPosts
-
June 26, 2017 at 11:00 pm #1308269
Gerald
ParticipantHi,
I am developing a new feature on a site that I am working on and I have tested and tested this plugin but for some reason, the attendee information questions are not showing up. Do you have any idea why? Note that I have been testing the site in the evening since the site is live, and we currently have a different way of purchasing tickets. We are moving to Event Tickets Plus because of the integration with WooCommerce, which we are not currently using, so when you go to look at the site it may look different. Because of this, I know it is going to be hard for you to duplicate the problem. Is there any reason you know of why the attendee information will not show up when questions are programmed into an event?
June 27, 2017 at 8:23 pm #1309847Gerald
ParticipantUpon further review of the problem, this seems to have something to do with the script “tribe-event-tickets-plus-meta-fields”. This is really upsetting because I literally NEED this plugin to work in order to complete this project. I purchased the premium plugin and it is very annoying that it is not working out-of-the-box.
June 27, 2017 at 8:25 pm #1309848Gerald
ParticipantEDIT: I didn’t mean to click “Correct Answer”, and now that is highlighted on my previous reply. Please disregard that.
June 28, 2017 at 9:29 pm #1311109Cliff
MemberHi, Gerald. Sorry you’re experiencing this frustration.
I don’t know what code is in your custom plugin, but if you deactivate that custom plugin, do your Event Tickets Plus (ET+) Attendee Information fields then appear (one per ticket being purchased), as expected?
If yes, please describe the expected functionality of your custom plugin and possibly share a copy of it in a private reply if you choose.
June 28, 2017 at 10:19 pm #1311196Gerald
ParticipantYou mentioned in your reply that I should deactivate a “custom plugin”…what custom plugin are you referring to? There are a number of plugins that I deactivate every time I work on the site because of conflicts with the ET+ and The Events Calendar plugins, and when I return the site back to normal functionality I reactivate the plugins I deactivated so the site is good to go again. Obviously once I get everything sorted out I’m going to delete the prior plugins completely so I can use ET+, The Events Calendar, and WooCommerce in conjunction with one another, but in the meantime this is the only way I can test everything unfortunately.
So getting back to your question, what “custom plugin” were you referring to? Thanks for the help.
June 29, 2017 at 12:12 pm #1312428Cliff
MemberSorry for any confusion, Gerald. It was more of a general recommendation, not suggesting any specific plugin in particular.
It sounds like you’ve dealt with this quite a few times. I hope you can understand that it’d be difficult for me to know which of your many plugins are causing the issue, especially since you’ve been experiencing this multiple times.
Typically, you should develop a new version of your site on a testing/staging/development version of your site and then push to your live server once it’s ready. This is how you can have a site where it runs your “old” site live and then your development site can run the “new” version with our plugins.
Please let me know if you have any follow-up questions on this topic.
June 29, 2017 at 2:13 pm #1312729Gerald
ParticipantCliff,
I understand the best way to set it up would have been through a staging site but unfortunately there were some factors that made that impossible for this particular project. Trust me when I say I pleaded with my client to let me do it that way but it just wasn’t feasible. That being said…
Do you know any reason the “Attendee Information” fields will not show up? Could it have to do with a JavaScript issue? I know this isn’t the ideal way to troubleshoot, and I apologize for that, but I really need to figure this out…
June 29, 2017 at 2:58 pm #1312814Cliff
MemberGotcha.
Yes, they are hidden/displayed via JavaScript so you might see if you can spot any console errors at your site. (If needed, you may reference our KB article Using Google Chrome Developer Tools.)
Whenever developing, I’d also suggest you enable WP_DEBUG and WP_DEBUG_LOG (which will create a file on your server at /wp-content/debug.log if there are any WP_DEBUG messages).
Please let me know what you find out.
June 29, 2017 at 5:55 pm #1313108Gerald
ParticipantOK, I have done some research and here is what I have found…
I went down the line disabling plugins and checking a debugger log and I eventually discovered one error that remained constant:
TypeError: debug.info is not a functionhttp://www.rancholoscerritos.org/wp-content/plugins/the-events-calendar/src/resources/js/tribe-events.min.js?ver=4.5.7 line 1I looked through the “tribe-events.min.js” file unminified and I don’t know what it is that I need to fix, but here is the code…any ideas?
var tribe_ev = window.tribe_ev || {}, tribe_debug = !0; window.debug = function() { function e(e) { !r || !a && s && s.log || r.apply(i, e) } function t(e) { return d > 0 ? d > e : l.length + d <= e } for (var r, a, i = this, n = Array.prototype.slice, s = i.console, o = {}, d = 9, l = ["error", "warn", "info", "debug", "log"], u = "assert clear count dir dirxml exception group groupCollapsed groupEnd profile profileEnd table time timeEnd trace".split(" "), c = u.length, b = []; --c >= 0;) ! function(e) { o[e] = function() { 0 !== d && s && s[e] && s[e].apply(s, arguments) } }(u[c]); for (c = l.length; --c >= 0;) ! function(r, a) { o[a] = function() { var o = n.call(arguments), d = [a].concat(o); b.push(d), e(d), s && t(r) && (s.firebug ? s[a].apply(i, o) : s[a] ? s[a](o) : s.log(o)) } }(c, l[c]); return o.setLevel = function(e) { d = "number" == typeof e ? e : 9 }, o.setCallback = function() { var t = n.call(arguments), i = b.length, s = i; for (r = t.shift() || null, a = "boolean" == typeof t[0] && t.shift(), s -= "number" == typeof t[0] ? t.shift() : i; s < i;) e(b[s++]) }, o }(), Object.prototype.hasOwnProperty.call(window, "tribe_ev") && (tribe_ev.diagnostics = { init: [] }); var tribe_storage, t_fail, t_uid; try { t_uid = new Date, (tribe_storage = window.localStorage).setItem(t_uid, t_uid), t_fail = tribe_storage.getItem(t_uid) != t_uid, tribe_storage.removeItem(t_uid), t_fail && (tribe_storage = !1) } catch (e) { tribe_storage = !1 } var tribeDateFormat = function() { var e = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, t = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, r = /[^-+\dA-Z]/g, a = function(e, t) { for (e = String(e), t = t || 2; e.length < t;) e = "0" + e; return e }; return function(i, n, s) { var o = tribeDateFormat; if (1 != arguments.length || "[object String]" != Object.prototype.toString.call(i) || /\d/.test(i) || (n = i, i = void 0), "string" == typeof i && (i = i.replace(/-/g, "/")), i = i ? new Date(i) : new Date, !isNaN(i)) { n = String(o.masks[n] || n || o.masks["default"]), "UTC:" == n.slice(0, 4) && (n = n.slice(4), s = !0); var d = s ? "getUTC" : "get", l = i[d + "Date"](), u = i[d + "Day"](), c = i[d + "Month"](), b = i[d + "FullYear"](), v = i[d + "Hours"](), _ = i[d + "Minutes"](), p = i[d + "Seconds"](), y = i[d + "Milliseconds"](), f = s ? 0 : i.getTimezoneOffset(), m = { d: l, dd: a(l), ddd: o.i18n.dayNames[u], dddd: o.i18n.dayNames[u + 7], m: c + 1, mm: a(c + 1), mmm: o.i18n.monthNames[c], mmmm: o.i18n.monthNames[c + 12], yy: String(b).slice(2), yyyy: b, h: v % 12 || 12, hh: a(v % 12 || 12), H: v, HH: a(v), M: _, MM: a(_), s: p, ss: a(p), l: a(y, 3), L: a(y > 99 ? Math.round(y / 10) : y), t: v < 12 ? "a" : "p", tt: v < 12 ? "am" : "pm", T: v < 12 ? "A" : "P", TT: v < 12 ? "AM" : "PM", Z: s ? "UTC" : (String(i).match(t) || [""]).pop().replace(r, ""), o: (f > 0 ? "-" : "+") + a(100 * Math.floor(Math.abs(f) / 60) + Math.abs(f) % 60, 4), S: ["th", "st", "nd", "rd"][l % 10 > 3 ? 0 : (l % 100 - l % 10 != 10) * l % 10] }; return n.replace(e, function(e) { return e in m ? m[e] : e.slice(1, e.length - 1) }) } } }(); tribeDateFormat.masks = { "default": "ddd mmm dd yyyy HH:MM:ss", tribeQuery: "yyyy-mm-dd", tribeMonthQuery: "yyyy-mm", 0: "yyyy-mm-dd", 1: "m/d/yyyy", 2: "mm/dd/yyyy", 3: "d/m/yyyy", 4: "dd/mm/yyyy", 5: "m-d-yyyy", 6: "mm-dd-yyyy", 7: "d-m-yyyy", 8: "dd-mm-yyyy", m0: "yyyy-mm", m1: "m/yyyy", m2: "mm/yyyy", m3: "m/yyyy", m4: "mm/yyyy", m5: "m-yyyy", m6: "mm-yyyy", m7: "m-yyyy", m8: "mm-yyyy" }, tribeDateFormat.i18n = { dayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], monthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] }; var tribeUtils = { getQueryVars: function(e) { var t = {}, e = e || location; return e.search.substr(1).split("&").forEach(function(e) { t[e.split("=")[0]] = e.split("=")[1] }), t } }; Date.prototype.format = function(e, t) { return tribeDateFormat(this, e, t) }, function() { function e(e, t) { var r = arguments.callee; return r.cache[e] || (r.cache[e] = function() { var t = e, a = /^[\w\-]+$/.test(e) ? r.get(e) : (t = "template(string)", e), i = 1, n = ("try { " + (r.variable ? "var " + r.variable + " = this.stash;" : "with (this.stash) { ") + "this.ret += '" + a.replace(/\[\[/g, "").replace(/\]\]/g, "").replace(/'(?![^\x11\x13]+?\x13)/g, "\\x27").replace(/^\s*|\s*$/g, "").replace(/\n/g, function() { return "';\nthis.line = " + ++i + "; this.ret += '\\n" }).replace(/\x11=raw(.+?)\x13/g, "' + ($1) + '").replace(/\x11=(.+?)\x13/g, "' + this.escapeHTML($1) + '").replace(/\x11(.+?)\x13/g, "'; $1; this.ret += '") + "'; " + (r.variable ? "" : "}") + "return this.ret;} catch (e) { throw 'TemplateError: ' + e + ' (on " + t + "' + ' line ' + this.line + ')'; } //@ sourceURL=" + t + "\n").replace(/this\.ret \+= '';/g, ""), s = new Function(n), o = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, d = function(e) { return ("" + e).replace(/[&<>\'\"]/g, function(e) { return o[e] }) }; return function(e) { return s.call(r.context = { escapeHTML: d, line: 1, ret: "", stash: e }) } }()), t ? r.cache[e](t) : r.cache[e] } function t(t, r) { var a = function(r) { return r.include = function(t, r) { var a = {}; for (var i in e.context.stash) e.context.stash.hasOwnProperty(i) && (a[i] = e.context.stash[i]); if (r) for (var i in r) r.hasOwnProperty(i) && (a[i] = r[i]); var n = e.context; n.ret += e(t, a), e.context = n }, r.wrapper = function(t, r) { var a = e.context.ret; e.context.ret = "", r.apply(e.context); var i = e.context.ret, n = e.context.stash.content; e.context.stash.content = i, e.context.ret = a + e(t, e.context.stash), e.context.stash.content = n }, e(t, r) }; return r ? a(r) : a } e.cache = {}, e.get = function(e) { return document.getElementById(e).innerHTML }, e.get = function(e) { var r = t.get; return r ? r(e) : document.getElementById(e).innerHTML }, this.tribe_tmpl = e, this.tribe_tmpl_extended = t }(), function(e, t) { if (e.fn.tribe_clear_form = function() { return this.each(function() { var t = this.type, r = this.tagName.toLowerCase(); return "form" == r ? e(":input", this).tribe_clear_form() : void("text" == t || "password" == t || "textarea" == r ? this.value = "" : "checkbox" == t || "radio" == t ? this.checked = !1 : "select" == r && (this.selectedIndex = 0)) }) }, e.fn.tribe_has_attr = function(e) { return this.attr(e) !== t }, e.fn.tribe_spin = function() { var t = e(".tribe-events-ajax-loading:first").clone().addClass("tribe-events-active-spinner"); t.prependTo("#tribe-events-content"), e(this).addClass("tribe-events-loading").css("opacity", .25) }, "undefined" != typeof e.fn.datepicker && "undefined" != typeof e.fn.datepicker.noConflict) { var r = e.fn.datepicker.noConflict(); e.fn.bootstrapDatepicker = r } "undefined" != typeof tribe_bootstrap_datepicker_strings && null != tribe_bootstrap_datepicker_strings.dates && (e.fn.bootstrapDatepicker.dates.en = tribe_bootstrap_datepicker_strings.dates) }(jQuery), function(e, t, r, a, i, n) { tribe_ev.fn = { current_date: function() { var e = new Date, t = e.getDate(), r = e.getMonth() + 1, a = e.getFullYear(); return t < 10 && (t = "0" + t), r < 10 && (r = "0" + r), a + "-" + r + "-" + t }, disable_inputs: function(e, t) { r(e).find(t).prop("disabled", !0), r(e).find(".select2-container").length && r(e).find(".select2-container").each(function() { var e = r(this).attr("id"), t = r("#" + e); t.select2("disable") }) }, disable_empty: function(e, t) { r(e).find(t).each(function() { "" === r(this).val() && r(this).prop("disabled", !0) }) }, enable_inputs: function(e, t) { r(e).find(t).prop("disabled", !1), r(e).find(".select2-container").length && r(e).find(".select2-container").each(function() { var e = r(this).attr("id"), t = r("#" + e); t.select2("enable") }) }, execute_resize: function() { var e = tribe_ev.data.v_width; tribe_ev.fn.update_viewport_variables(), e !== tribe_ev.data.v_width && (tribe_ev.fn.mobile_class(), r(tribe_ev.events).trigger("tribe_ev_resizeComplete"), r(tribe_ev.events).trigger("resize-complete.tribe")) }, get_base_url: function() { var t = "", a = r("#tribe-events-header"), i = r('link[rel="canonical"]'); return t = i.length ? i.attr("href") : a.length ? a.data("baseurl") : e.location.origin + e.location.path }, update_base_url: function(e) { var t = r("#tribe-events-header"), a = r('link[rel="canonical"]'); a.length ? a.attr("href", e) : t.length && t.data("baseurl", e).attr("data-baseurl", e) }, get_category: function() { return tribe_ev.fn.is_category() ? r("#tribe-events").data("category") : "" }, get_day: function() { var e = ""; return r("#tribe-bar-date").length && (e = r("#tribe-bar-date-day").val()), a && debug.info('TEC Debug: tribe_ev.fn.get_day returned this date: "' + e + '".'), e }, get_params: function() { return location.search.substr(1) }, get_url_param: function(e) { return decodeURIComponent((new RegExp("[?|&]" + e + "=([^&;]+?)(&|#|;|$)").exec(location.search) || [, ""])[1].replace(/\+/g, "%20")) || null }, in_params: function(e, t) { return e.toLowerCase().indexOf(t) }, invalid_date: function(e) { return e = new Date(e), isNaN(e) }, invalid_date_in_params: function(e) { if (e.hasOwnProperty("tribe-bar-date")) { var t = new Date(e["tribe-bar-date"]); return isNaN(t) } return !1 }, is_category: function() { var e = r("#tribe-events"); return !(!e.length || !e.tribe_has_attr("data-category") || "" === e.data("category")) }, is_featured: function() { return "1" == r("#tribe-events").data("featured") }, mobile_class: function() { var e = r("body"); tribe_ev.data.v_width <= tribe_ev.data.mobile_break ? e.addClass("tribe-mobile") : e.removeClass("tribe-mobile") }, maybe_default_view_change: function() { if (!tribe_ev.data.default_view || !tribe_ev.data.default_mobile_view || tribe_ev.data.default_view == tribe_ev.data.default_mobile_view || !tribe_ev.state.view || tribe_ev.data.default_mobile_view == tribe_ev.state.view || tribe_ev.data.cur_url == tribe_ev.data.base_url) return !1; var e = r("body"); if (!e.hasClass("tribe-mobile")) return !1; var t = r(".tribe-bar-views-option"), a = ".tribe-bar-views-option-" + tribe_ev.data.default_mobile_view, i = t.filter(a); i.trigger("click") }, parse_string: function(e) { var t = {}; return e.replace(/([^&=]+)=?([^&]*)(?:&+|$)/g, function(e, r, a) { (t[r] = t[r] || []).push(a) }), a && debug.info("TEC Debug: tribe_ev.fn.parse_string returned this map:", t), t }, pre_ajax: function(e) { e && "function" == typeof e && e() }, scroll_to: function(e, t, a) { r("html, body").stop().animate({ scrollTop: r(e).offset().top - t }, { duration: a }) }, serialize: function(e, t) { tribe_ev.fn.enable_inputs(e, t), tribe_ev.fn.disable_empty(e, t); var i = r(e).serialize(); return tribe_ev.fn.disable_inputs(e, t), a && i && debug.info('TEC Debug: tribe_ev.fn.serialize returned these params: "' + i), i }, set_form: function(e) { var t = r("body"), i = r("#tribe-bar-form"); t.addClass("tribe-reset-on"), i.length && i.tribe_clear_form(), e = tribe_ev.fn.parse_string(e), r.each(e, function(e, t) { if ("action" !== e) { var a = decodeURIComponent(e), i = ""; if (1 === t.length) Array.isArray(t) && (t = t[0]), t = decodeURIComponent(t.replace(/\+/g, "%20")), r('[name="' + a + '"]').is('input[type="text"], input[type="hidden"]') ? r('[name="' + a + '"]').val(t) : r('[name="' + a + '"][value="' + t + '"]').is(":checkbox, :radio") ? r('[name="' + a + '"][value="' + t + '"]').prop("checked", !0) : r('[name="' + a + '"]').is("select") && r('select[name="' + a + '"] option[value="' + t + '"]').attr("selected", !0); else for (var n = 0; n < t.length; n++) i = r('[name="' + a + '"][value="' + t[n] + '"]'), i.is(":checkbox, :radio") ? i.prop("checked", !0) : r('select[name="' + a + '"] option[value="' + t[n] + '"]').attr("selected", !0) } }), t.removeClass("tribe-reset-on"), a && debug.info('TEC Debug: tribe_ev.fn.set_form fired these params: "' + e) }, setup_ajax_timer: function(e) { var t = 500; clearTimeout(tribe_ev.state.ajax_timer), tribe_ev.tests.reset_on() || (tribe_ev.state.ajax_timer = setTimeout(function() { e() }, t), a && debug.info('TEC Debug: tribe_ev.fn.setup_ajax_timer fired with a timeout of "' + t + '" ms')) }, snap: function(e, t, a) { r(t).on("click", a, function(t) { t.preventDefault(), r("html, body").animate({ scrollTop: r(e).offset().top - 120 }, { duration: 0 }) }) }, tooltips: function() { var e = r("#tribe-events"), t = r("body"), a = e.hasClass("tribe-events-shortcode"), i = e.hasClass("view-month") || t.hasClass("events-gridview"), n = e.hasClass("view-week") || t.hasClass("tribe-events-week"), s = e.hasClass("view-photo") || t.hasClass("tribe-events-photo"), o = e.hasClass("view-day") || t.hasClass("tribe-events-day"), d = e.hasClass("view-list") || t.hasClass("events-list"), l = (e.hasClass("view-map") || t.hasClass("tribe-events-map"), t.hasClass("single-tribe_events")); e.on("mouseenter", 'div[id*="tribe-events-event-"], div.event-is-recurring', function() { var e, t = 0, u = r(this); if (i ? t = u.find("a").outerHeight() + 18 : l || o || d ? t = u.outerHeight() + 12 : s && (t = u.outerHeight() + 10), u.parents(".tribe-events-calendar-widget").length && (t = u.outerHeight() - 6), !n || a) if (i || a) { if (e = u.find(".tribe-events-tooltip"), !e.length) { var c = u.data("tribejson"); "string" == typeof c && (c = r.parseJSON(c)); var b = u.hasClass("tribe-event-featured") ? "tribe_tmpl_tooltip_featured" : "tribe_tmpl_tooltip"; u.append(tribe_tmpl(b, c)), e = u.find(".tribe-events-tooltip") } e.css("bottom", t).show() } else u.find(".tribe-events-tooltip").css("bottom", t).show() }).on("mouseleave", 'div[id*="tribe-events-event-"], div[id*="tribe-events-daynum-"]:has(a), div.event-is-recurring', function() { r(this).find(".tribe-events-tooltip").stop(!0, !1).fadeOut(200) }) }, update_picker: function(t) { var i = r("#tribe-bar-date"); r().bootstrapDatepicker && i.length ? (tribe_ev.state.updating_picker = !0, e.attachEvent && !e.addEventListener && (i.bootstrapDatepicker("remove"), i.val(""), i.bootstrapDatepicker(tribe_ev.data.datepicker_opts)), i.bootstrapDatepicker("setDate", t), tribe_ev.state.updating_picker = !1, a && debug.info('TEC Debug: tribe_ev.fn.update_picker sent "' + t + '" to the boostrapDatepicker')) : i.length ? (i.val(t), a && debug.warn('TEC Debug: tribe_ev.fn.update_picker sent "' + t + '" to ' + i)) : a && debug.warn('TEC Debug: tribe_ev.fn.update_picker couldnt send "' + t + '" to any object.') }, update_viewport_variables: function() { tribe_ev.data.v_height = r(e).height(), tribe_ev.data.v_width = r(e).width() }, url_path: function(e) { return e.split("?")[0] }, equal_height: function(e) { var t = 0; e.css("height", "auto"), e.each(function() { var e = r(this).outerHeight(); e > t && (t = e) }), setTimeout(function() { e.css("height", t) }, 100) } }, tribe_ev.tests = { live_ajax: function() { var e = r("#tribe-events"); return !(!e.length || !e.tribe_has_attr("data-live_ajax") || "1" != e.data("live_ajax")) }, map_view: function() { return !("undefined" == typeof GeoLoc || !GeoLoc.map_view) }, no_bar: function() { return r("body").is(".tribe-bar-is-disabled") }, pushstate: !(!e.history || !history.pushState), reset_on: function() { return r("body").is(".tribe-reset-on") }, starting_delim: function() { return tribe_ev.state.cur_url.indexOf("?") != -1 ? "&" : "?" }, webkit: "WebkitAppearance" in t.documentElement.style }, tribe_ev.data = { ajax_response: {}, base_url: "", cur_url: tribe_ev.fn.url_path(t.URL), cur_date: tribe_ev.fn.current_date(), datepicker_formats: { main: ["yyyy-mm-dd", "m/d/yyyy", "mm/dd/yyyy", "d/m/yyyy", "dd/mm/yyyy", "m-d-yyyy", "mm-dd-yyyy", "d-m-yyyy", "dd-mm-yyyy"], month: ["yyyy-mm", "m/yyyy", "mm/yyyy", "m/yyyy", "mm/yyyy", "m-yyyy", "mm-yyyy", "m-yyyy", "mm-yyyy"] }, datepicker_opts: {}, default_permalinks: !i.permalink_settings.length, initial_url: tribe_ev.fn.url_path(t.URL), mobile_break: 768, default_mobile_view: null, default_view: null, params: tribe_ev.fn.get_params(), v_height: 0, v_width: 0 }, tribe_ev.events = {}, tribe_ev.state = { ajax_running: !1, ajax_timer: 0, ajax_trigger: "", category: "", date: "", datepicker_format: "0", do_string: !1, featured: !1, filters: !1, filter_cats: !1, initial_load: !0, mdate: "", paged: 1, page_title: "", params: {}, popping: !1, pushstate: !0, pushcount: 0, recurrence: !1, updating_picker: !1, url_params: {}, view: "", view_target: "" } }(window, document, jQuery, tribe_debug, tribe_js_config), function(e, t, r, a, i, n, s, o, d) { r(t).ready(function() { function l() { r(".tribe-events-list").length && r(".tribe-events-list-separator-month").prev(".vevent").addClass("tribe-event-end-month") } function u() { var e = t.URL, a = "?"; e.indexOf("?") > 0 && (a = "&"); var i = e + a + "ical=1&tribe_display=" + s.view; r("a.tribe-events-ical").attr("href", i) } d && debug.info("TEC Debug: Tribe Events JS init, Init Timer started from tribe-events.js."), n.update_viewport_variables(); var c, b = r("body"), v = r("#tribe-events"), _ = (r("#tribe-events-content"), r("#tribe-events-header")); v.removeClass("tribe-no-js"), s.category = n.get_category(), a.base_url = n.get_base_url(), s.page_title = t.title; var p = n.get_url_param("tribe_event_display"); if (p ? s.view = p : _.length && _.tribe_has_attr("data-view") && (s.view = _.data("view")), v.tribe_has_attr("data-datepicker_format") && 1 === v.attr("data-datepicker_format").length && (s.datepicker_format = v.attr("data-datepicker_format")), s.view && d && debug.time("Tribe JS Init Timer"), r(i).on("tribe_ev_collectParams", function() { if ("undefined" != typeof tribe_ev.state && "undefined" != typeof tribe_ev.state.params && (-1 !== tribe_ev.fn.in_params(tribe_ev.state.params, "eventdate") || -1 !== tribe_ev.fn.in_params(tribe_ev.state.params, "tribe_event_display")) && r(t.getElementById("tribe-events")).is(".tribe-events-shortcode")) { var a = r("#tribe-events-header"), i = r('link[rel="canonical"]'), n = null; if (n = i.length ? i.attr("href") : a.length ? a.data("baseurl") : e.location.origin + e.location.path, tribe_ev.state.params += "&baseurl=" + n, a.length) { var s = /tribe_events_cat=([^&]*)/gi.exec(a.data("baseurl")); if (s = s && "undefined" != typeof s[1] ? s[1] : null) { var o = new RegExp("tribe_event_category=" + s); tribe_ev.state.params.match(o) || (tribe_ev.state.params += "&tribe_event_category=" + s), "string" != typeof tribe_ev.state.url_params || tribe_ev.state.url_params.match(o) || (tribe_ev.state.url_params += "&tribe_event_category=" + s) } } } }), v.length) { var y = v.tribe_has_attr("data-mobilebreak"); y = !1 === y ? v.find("[data-mobilebreak]").eq(0) : v, y.length && (a.mobile_break = parseInt(y.data("mobilebreak"), 10)); var f = v.tribe_has_attr("data-default-mobile-view"); f = !1 === f ? v.find("[data-default-mobile-view]").eq(0) : v, f.length && (a.default_mobile_view = f.data("defaultMobileView"), a.default_view = f.data("defaultView")) } v.length && a.mobile_break > 0 && b.addClass("tribe-is-responsive"), r(".tribe-events-calendar-widget").not(":eq(0)").hide(), n.tooltips(), n.mobile_class(), l(), r(".tribe-events-list .tribe-events-notices").length && r("#tribe-events-header .tribe-events-sub-nav").empty(), r(".tribe-events-list").length && r(".tribe-events-list-separator-month").prev(".vevent").addClass("tribe-event-end-month"), r(i).on("tribe_ev_ajaxSuccess", function() { r(".tribe-events-active-spinner").remove(), l() }), r(i).on("tribe_ev_ajaxSuccess", function() { u() }), u(), r(e).resize(function() { clearTimeout(c), c = setTimeout(n.execute_resize, 200) }), d && (debug.groupCollapsed("TEC Debug: Browser and events settings information:"), debug.log('User agent reported as: "' + navigator.userAgent), debug.log('Live ajax returned its state as: "' + o.live_ajax()), s.view && debug.log('Tribe js detected the view to be: "' + s.view), debug.log('Supports pushstate: "' + o.pushstate), debug.groupEnd(), debug.info("TEC Debug: tribe-events.js successfully loaded")) }) }(window, document, jQuery, tribe_ev.data, tribe_ev.events, tribe_ev.fn, tribe_ev.state, tribe_ev.tests, tribe_debug);-
This reply was modified 8 years, 10 months ago by
Gerald.
June 29, 2017 at 7:31 pm #1313251Cliff
MemberThanks for that report.
Please add this line to your wp-config.php file:
define( 'SCRIPT_DEBUG', true ); // so TEC scripts aren't minifiedAnd then do this over again and see if you get any different results or a more helpful error besides Line #1.
Thank you.
June 30, 2017 at 11:00 am #1314666Gerald
ParticipantOk, I have a little more information. The error message is now:
TypeError: debug.info is not a function http://www.rancholoscerritos.org/wp-content/plugins/the-events-calendar/src/resources/js/tribe-events.js?ver=4.5.7 line 1276I then went and looked at tribe-events.js (note that in this paste, the line in question is actually 1273):
/** * @file The core file for the events calendar plugin javascript. * This file must load on all front facing events pages and be the first file loaded after vendor dependencies. * @version 3.0 */ /** * @namespace tribe_ev * @desc The tribe_ev namespace that stores all custom functions, data, application state and an empty events object to bind custom events to. * This Object Literal namespace loads for all tribe events pages and is by design fully public so that themers can hook in and/or extend anything they want from their own files. * @example <caption>Test for tribe_ev in your own js and then run one of our functions.</caption> * jQuery(document).ready(function ($) { * if (Object.prototype.hasOwnProperty.call(window, 'tribe_ev')) { * if(tribe_ev.fn.get_category() === 'Cats'){ * alert('Meow!'); * } * } * }); */ var tribe_ev = window.tribe_ev || {}; /** * @define {boolean} tribe_debug * @global tribe_debug is used both by closure compiler to strip debug code on min and as a failsafe short circuit if compiler fails to strip all debug strings. * @desc Setup safe enhanced console logging. See the link to get the available methods, then prefix with this short circuit: 'tribe_debug && '. tribe_debug is aliased in all tribe js doc readys as 'dbug'. * @link http://benalman.com/code/projects/javascript-debug/docs/files/ba-debug-js.html * @example <caption>EG: Place this at the very bottom of the doc ready for tribe-events.js. ALWAYS short circuit with 'tribe_debug && ' or 'dbug &&' if aliased as such.</caption> * * tribe_debug && debug.info('tribe-events.js successfully loaded'); */ var tribe_debug = true; /*! * this debug code is stripped out by closure compiler so it is not present in the .min versions. */ // @ifdef DEBUG /*! * JavaScript Debug - v0.4 - 6/22/2010 * http://benalman.com/projects/javascript-debug-console-log/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ * * With lots of help from Paul Irish! * http://paulirish.com/ */ window.debug = (function() { var window = this, aps = Array.prototype.slice, con = window.console, that = {}, callback_func, callback_force, log_level = 9, log_methods = [ 'error', 'warn', 'info', 'debug', 'log' ], pass_methods = 'assert clear count dir dirxml exception group groupCollapsed groupEnd profile profileEnd table time timeEnd trace'.split( ' ' ), idx = pass_methods.length, logs = []; while ( --idx >= 0 ) { (function( method ) { that[ method ] = function() { log_level !== 0 && con && con[ method ] && con[ method ].apply( con, arguments ); } })( pass_methods[idx] ); } idx = log_methods.length; while ( --idx >= 0 ) { (function( idx, level ) { that[ level ] = function() { var args = aps.call( arguments ), log_arr = [ level ].concat( args ); logs.push( log_arr ); exec_callback( log_arr ); if ( !con || !is_level( idx ) ) { return; } con.firebug ? con[ level ].apply( window, args ) : con[ level ] ? con[ level ]( args ) : con.log( args ); }; })( idx, log_methods[idx] ); } function exec_callback( args ) { if ( callback_func && (callback_force || !con || !con.log) ) { callback_func.apply( window, args ); } } that.setLevel = function( level ) { log_level = typeof level === 'number' ? level : 9; }; function is_level( level ) { return log_level > 0 ? log_level > level : log_methods.length + log_level <= level; } that.setCallback = function() { var args = aps.call( arguments ), max = logs.length, i = max; callback_func = args.shift() || null; callback_force = typeof args[0] === 'boolean' ? args.shift() : false; i -= typeof args[0] === 'number' ? args.shift() : max; while ( i < max ) { exec_callback( logs[i++] ); } }; return that; })(); if ( Object.prototype.hasOwnProperty.call( window, 'tribe_ev' ) ) { tribe_ev.diagnostics = { init: [] }; } // @endif /** * @global * @desc Test for localstorage support. Returns false if not available and tribe_storage as a method if true. * @example * if (tribe_storage) { * tribe_storage.setItem('cats', 'hairball'); * tribe_storage.getItem('cats'); * } */ var tribe_storage, t_fail, t_uid; try { t_uid = new Date; (tribe_storage = window.localStorage).setItem( t_uid, t_uid ); t_fail = tribe_storage.getItem( t_uid ) != t_uid; tribe_storage.removeItem( t_uid ); t_fail && (tribe_storage = false); } catch ( e ) { tribe_storage = false; } /* * Date Format 1.2.3 * (c) 2007-2009 Steven Levithan <stevenlevithan.com> * MIT license * * Includes enhancements by Scott Trenda <scott.trenda.net> * and Kris Kowal <cixar.com/~kris.kowal/> * * Accepts a date, a mask, or a date and a mask. * Returns a formatted version of the given date. * The date defaults to the current date/time. * The mask defaults to dateFormat.masks.default. */ var tribeDateFormat = function() { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, timezoneClip = /[^-+\dA-Z]/g, pad = function( val, len ) { val = String( val ); len = len || 2; while ( val.length < len ) { val = "0" + val; } return val; }; // Regexes and supporting functions are cached through closure return function( date, mask, utc ) { var dF = tribeDateFormat; // You can't provide utc if you skip other args (use the "UTC:" mask prefix) if ( arguments.length == 1 && Object.prototype.toString.call( date ) == "[object String]" && !/\d/.test( date ) ) { mask = date; date = undefined; } if ( typeof date === 'string' ) { date = date.replace( /-/g, "/" ); } // Passing date through Date applies Date.parse, if necessary date = date ? new Date( date ) : new Date; if ( isNaN( date ) ) { return; } mask = String( dF.masks[mask] || mask || dF.masks["default"] ); // Allow setting the utc argument via the mask if ( mask.slice( 0, 4 ) == "UTC:" ) { mask = mask.slice( 4 ); utc = true; } var _ = utc ? "getUTC" : "get", d = date[_ + "Date"](), D = date[_ + "Day"](), m = date[_ + "Month"](), y = date[_ + "FullYear"](), H = date[_ + "Hours"](), M = date[_ + "Minutes"](), s = date[_ + "Seconds"](), L = date[_ + "Milliseconds"](), o = utc ? 0 : date.getTimezoneOffset(), flags = { d : d, dd : pad( d ), ddd : dF.i18n.dayNames[D], dddd: dF.i18n.dayNames[D + 7], m : m + 1, mm : pad( m + 1 ), mmm : dF.i18n.monthNames[m], mmmm: dF.i18n.monthNames[m + 12], yy : String( y ).slice( 2 ), yyyy: y, h : H % 12 || 12, hh : pad( H % 12 || 12 ), H : H, HH : pad( H ), M : M, MM : pad( M ), s : s, ss : pad( s ), l : pad( L, 3 ), L : pad( L > 99 ? Math.round( L / 10 ) : L ), t : H < 12 ? "a" : "p", tt : H < 12 ? "am" : "pm", T : H < 12 ? "A" : "P", TT : H < 12 ? "AM" : "PM", Z : utc ? "UTC" : (String( date ).match( timezone ) || [""]).pop().replace( timezoneClip, "" ), o : (o > 0 ? "-" : "+") + pad( Math.floor( Math.abs( o ) / 60 ) * 100 + Math.abs( o ) % 60, 4 ), S : ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] }; return mask.replace( token, function( $0 ) { return $0 in flags ? flags[$0] : $0.slice( 1, $0.length - 1 ); } ); }; }(); tribeDateFormat.masks = { "default" : "ddd mmm dd yyyy HH:MM:ss", "tribeQuery" : "yyyy-mm-dd", "tribeMonthQuery": "yyyy-mm", "0" : 'yyyy-mm-dd', "1" : 'm/d/yyyy', "2" : 'mm/dd/yyyy', "3" : 'd/m/yyyy', "4" : 'dd/mm/yyyy', "5" : 'm-d-yyyy', "6" : 'mm-dd-yyyy', "7" : 'd-m-yyyy', "8" : 'dd-mm-yyyy', "m0" : 'yyyy-mm', "m1" : 'm/yyyy', "m2" : 'mm/yyyy', "m3" : 'm/yyyy', "m4" : 'mm/yyyy', "m5" : 'm-yyyy', "m6" : 'mm-yyyy', "m7" : 'm-yyyy', "m8" : 'mm-yyyy' }; tribeDateFormat.i18n = { dayNames : [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], monthNames: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] }; /** * A collection of utility functions. * * @type {{getQueryVars: tribeUtils.getQueryVars}} */ var tribeUtils = { /** * Searches a URL, or the current page URL, for query vars and returns an object listing * them where each query var name is a property associated to its value(s). * * @param string location Def. to <code>location</code>, an optional URL to scan for query vars. * * @returns {{}} An array containing the query vars as properties. */ 'getQueryVars': function ( url ) { var queryVars = {}, url = url || location; url.search.substr( 1 ).split( '&' ).forEach( function ( queryVar ) { queryVars[ queryVar.split( '=' )[0] ] = queryVar.split( '=' )[1]; } ); return queryVars; } }; Date.prototype.format = function( mask, utc ) { return tribeDateFormat( this, mask, utc ); }; (function() { /** * @function tribe_tmpl * @desc Javascript templating function based on John Resigs micro-templating approach and expanded upon by cho45. Tags and function name changed here to avoid conflicts. * @param id The javascript template * @param data The data object */ /** * https://github.com/cho45/micro-template.js * (c) cho45 http://cho45.github.com/mit-license */ function tribe_tmpl( id, data ) { var me = arguments.callee; if ( !me.cache[id] ) { me.cache[id] = (function() { var name = id, string = /^[\w\-]+$/.test( id ) ? me.get( id ) : (name = 'template(string)', id); // no warnings var line = 1, body = ( "try { " + (me.variable ? "var " + me.variable + " = this.stash;" : "with (this.stash) { ") + "this.ret += '" + string. replace( /\[\[/g, '\x11' ).replace( /\]\]/g, '\x13' ). // if you want other tag, just edit this line replace( /'(?![^\x11\x13]+?\x13)/g, '\\x27' ). replace( /^\s*|\s*$/g, '' ). replace( /\n/g,function() { return "';\nthis.line = " + (++line) + "; this.ret += '\\n" } ). replace( /\x11=raw(.+?)\x13/g, "' + ($1) + '" ). replace( /\x11=(.+?)\x13/g, "' + this.escapeHTML($1) + '" ). replace( /\x11(.+?)\x13/g, "'; $1; this.ret += '" ) + "'; " + (me.variable ? "" : "}") + "return this.ret;" + "} catch (e) { throw 'TemplateError: ' + e + ' (on " + name + "' + ' line ' + this.line + ')'; } " + "//@ sourceURL=" + name + "\n" // source map ).replace( /this\.ret \+= '';/g, '' ); var func = new Function( body ); var map = { '&': '&', '<': '<', '>': '>', '\x22': '"', '\x27': ''' }; var escapeHTML = function( string ) { return ('' + string).replace( /[&<>\'\"]/g, function( _ ) { return map[_] } ) }; return function( stash ) { return func.call( me.context = { escapeHTML: escapeHTML, line: 1, ret: '', stash: stash } ) }; })(); } return data ? me.cache[id]( data ) : me.cache[id]; } tribe_tmpl.cache = {}; tribe_tmpl.get = function( id ) { return document.getElementById( id ).innerHTML }; /** * Extended template function: * requires: basic template() function * provides: * include(id) * wrapper(id, function () {}) */ function tribe_tmpl_extended( id, data ) { var fun = function( data ) { data.include = function( name, args ) { var stash = {}; for ( var key in tribe_tmpl.context.stash ) { if ( tribe_tmpl.context.stash.hasOwnProperty( key ) ) { stash[key] = tribe_tmpl.context.stash[key]; } } if ( args ) { for ( var key in args ) { if ( args.hasOwnProperty( key ) ) { stash[key] = args[key]; } } } var context = tribe_tmpl.context; context.ret += tribe_tmpl( name, stash ); tribe_tmpl.context = context; }; data.wrapper = function( name, fun ) { var current = tribe_tmpl.context.ret; tribe_tmpl.context.ret = ''; fun.apply( tribe_tmpl.context ); var content = tribe_tmpl.context.ret; var orig_content = tribe_tmpl.context.stash.content; tribe_tmpl.context.stash.content = content; tribe_tmpl.context.ret = current + tribe_tmpl( name, tribe_tmpl.context.stash ); tribe_tmpl.context.stash.content = orig_content; }; return tribe_tmpl( id, data ); }; return data ? fun( data ) : fun; } tribe_tmpl.get = function( id ) { var fun = tribe_tmpl_extended.get; return fun ? fun( id ) : document.getElementById( id ).innerHTML; }; this.tribe_tmpl = tribe_tmpl; this.tribe_tmpl_extended = tribe_tmpl_extended; })(); /** * @external "jQuery.fn" * @desc The jQuery plugin namespace. */ (function( $, undefined ) { /** * @function external:"jQuery.fn".tribe_clear_form * @desc Clear a forms inputs with jquery. * @example <caption>Clear a form with the forms id as a selector.</caption> * $('#myForm').tribe_clear_form(); */ $.fn.tribe_clear_form = function() { return this.each( function() { var type = this.type, tag = this.tagName.toLowerCase(); if ( tag == 'form' ) { return $( ':input', this ).tribe_clear_form(); } if ( type == 'text' || type == 'password' || tag == 'textarea' ) { this.value = ''; } else if ( type == 'checkbox' || type == 'radio' ) { this.checked = false; } else if ( tag == 'select' ) { this.selectedIndex = 0; } } ); }; /** * @function external:"jQuery.fn".tribe_has_attr * @desc Check if a given element has an attribute. * @example if($('#myLink').tribe_has_attr('data-cats')) {true} else {false} */ $.fn.tribe_has_attr = function( name ) { return this.attr( name ) !== undefined; }; /** * @function external:"jQuery.fn".tribe_spin * @desc Shows loading spinners for events ajax interactions. * @example $('#myElement').tribe_spin(); */ $.fn.tribe_spin = function() { var $loadingImg = $( '.tribe-events-ajax-loading:first' ).clone().addClass( 'tribe-events-active-spinner' ); $loadingImg.prependTo( '#tribe-events-content' ); $( this ).addClass( 'tribe-events-loading' ).css( 'opacity', .25 ) }; if ( "undefined" !== typeof $.fn.datepicker && "undefined" !== typeof $.fn.datepicker.noConflict ) { var datepicker = $.fn.datepicker.noConflict(); $.fn.bootstrapDatepicker = datepicker; } if ( "undefined" !== typeof tribe_bootstrap_datepicker_strings && tribe_bootstrap_datepicker_strings.dates != null ) { $.fn.bootstrapDatepicker.dates['en'] = tribe_bootstrap_datepicker_strings.dates; } })( jQuery ); (function( window, document, $, dbug, config, undefined ) { /** * @namespace tribe_ev.fn * @desc tribe_ev.fn namespace stores all the custom functions used throughout the core events plugin. */ tribe_ev.fn = { /** * @function tribe_ev.fn.current_date * @desc tribe_ev.fn.current_date simply gets the current date in javascript and formats it to yyyy-mm-dd for use were needed. * @example var right_now = tribe_ev.fn.current_date(); */ current_date : function() { var today = new Date(), dd = today.getDate(), mm = today.getMonth() + 1, yyyy = today.getFullYear(); if ( dd < 10 ) { dd = '0' + dd } if ( mm < 10 ) { mm = '0' + mm } return yyyy + '-' + mm + '-' + dd; }, /** * @function tribe_ev.fn.disable_inputs * @desc tribe_ev.fn.disable_inputs disables all inputs of a specified type inside a parent element, and also disables select2 selects if it discovers any. * @param {String} parent The top level element you would like all child inputs of the specified type to be disabled for. * @param {String} type A single or comma separated string of the type of inputs you would like disabled. * @example <caption>Disable all inputs and selects for #myForm.</caption> * tribe_ev.fn.disable_inputs( '#myForm', 'input, select' ); */ disable_inputs : function( parent, type ) { $( parent ).find( type ).prop( 'disabled', true ); if ( $( parent ).find( '.select2-container' ).length ) { $( parent ).find( '.select2-container' ).each( function() { var s2_id = $( this ).attr( 'id' ); var $this = $( '#' + s2_id ); $this.select2( "disable" ); } ); } }, /** * @function tribe_ev.fn.disable_empty * @desc tribe_ev.fn.disable_empty disables all empty inputs of a specified type inside a parent element. * @param {String} parent The top level element you would like all empty child inputs of the specified type to be disabled for. * @param {String} type A single or comma separated string of the type of empty inputs you would like disabled. * @example <caption>Disable all empty inputs and selects for #myForm.</caption> * tribe_ev.fn.disable_empty( '#myForm', 'input, select' ); */ disable_empty : function( parent, type ) { $( parent ).find( type ).each( function() { if ( $( this ).val() === '' ) { $( this ).prop( 'disabled', true ); } } ); }, /** * @function tribe_ev.fn.enable_inputs * @desc tribe_ev.fn.enable_inputs enables all inputs of a specified type inside a parent element, and also enables select2 selects if it discovers any. * @param {String} parent The top level element you would like all child inputs of the specified type to be disabled for. * @param {String} type A single or comma separated string of the type of inputs you would like enabled. * @example <caption>Enable all inputs and selects for #myForm.</caption> * tribe_ev.fn.enable_inputs( '#myForm', 'input, select' ); */ enable_inputs : function( parent, type ) { $( parent ).find( type ).prop( 'disabled', false ); if ( $( parent ).find( '.select2-container' ).length ) { $( parent ).find( '.select2-container' ).each( function() { var s2_id = $( this ).attr( 'id' ); var $this = $( '#' + s2_id ); $this.select2( "enable" ); } ); } }, /** * @function tribe_ev.fn.execute_resize * @desc tribe_ev.fn.execute_resize groups together functions that should execute at the end of the window resize event. */ execute_resize : function() { var prev_width = tribe_ev.data.v_width; tribe_ev.fn.update_viewport_variables(); if ( prev_width !== tribe_ev.data.v_width ) { tribe_ev.fn.mobile_class(); /** * DEPRECATED: tribe_ev_resizeComplete has been deprecated in 4.0. Use resize-complete.tribe instead */ $( tribe_ev.events ).trigger( 'tribe_ev_resizeComplete' ); $( tribe_ev.events ).trigger( 'resize-complete.tribe' ); } }, /** * @function tribe_ev.fn.get_base_url * @desc tribe_ev.fn.get_base_url can be used on any events view to get the base_url for that view, even when on a category subset for that view. * @returns {String} Either an empty string or base url if data-baseurl is found on #tribe-events-header. * @example var base_url = tribe_ev.fn.get_base_url(); */ get_base_url : function() { var base_url = '', $event_header = $( '#tribe-events-header' ), $canonical = $( 'link[rel="canonical"]' ); if ( $canonical.length ) { // use the canonical URL if it is available (it should be) base_url = $canonical.attr( 'href' ); } else if ( $event_header.length ) { // failover to the baseurl of the event header base_url = $event_header.data( 'baseurl' ); } else { // use the current URL as a last ditch effort base_url = window.location.origin + window.location.path; } return base_url; }, /** * @function tribe_ev.fn.update_base_url * @desc tribe_ev.fn.update_base_url can be used on any events view to update base_url for that view */ update_base_url: function( url ) { var $event_header = $( '#tribe-events-header' ), $canonical = $( 'link[rel="canonical"]' ); if ( $canonical.length ) { // use the canonical URL if it is available (it should be) $canonical.attr( 'href', url ); } else if ( $event_header.length ) { // failover to the baseurl of the event header $event_header.data( 'baseurl', url ).attr( 'data-baseurl', url ); } }, /** * @function tribe_ev.fn.get_category * @desc tribe_ev.fn.get_category can be used on any events view to get the category for that view. * @returns {String} Either an empty string or category slug if data-category is found on #tribe-events. * @example var cat = tribe_ev.fn.get_category(); */ get_category : function() { if ( tribe_ev.fn.is_category() ) { return $( '#tribe-events' ).data( 'category' ); } else { return ''; } }, /** * @function tribe_ev.fn.get_day * @desc tribe_ev.fn.get_day can be used to check the event bar for a day value that was set by the user when using the datepicker. * @returns {String|Number} Either an empty string or day number if #tribe-bar-date-day has a val() set by user interaction. * @example var day = tribe_ev.fn.get_day(); */ get_day : function() { var dp_day = ''; if ( $( '#tribe-bar-date' ).length ) { dp_day = $( '#tribe-bar-date-day' ).val(); } // @ifdef DEBUG dbug && debug.info( 'TEC Debug: tribe_ev.fn.get_day returned this date: "' + dp_day + '".' ); // @endif return dp_day; }, /** * @function tribe_ev.fn.get_params * @desc tribe_ev.fn.get_params returns the params of the current document.url. * @returns {String} any url params sans "?". * @example var params = tribe_ev.fn.get_params(); */ get_params : function() { return location.search.substr( 1 ); }, /** * @function tribe_ev.fn.get_url_param * @desc tribe_ev.fn.get_url_param returns the value of a passed param name if set. * @param {String} name The name of the url param value desired. * @returns {String|Null} the value of a parameter if set or null if not. * @example var param = tribe_ev.fn.get_url_param('category'); */ get_url_param : function( name ) { return decodeURIComponent( (new RegExp( '[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)' ).exec( location.search ) || [, ""])[1].replace( /\+/g, '%20' ) ) || null; }, /** * @function tribe_ev.fn.in_params * @desc tribe_ev.fn.in_params returns the value of a passed param name if set. * @param {String} params The parameter string you would like to search for a term. * @param {String} term The name of the url param value you are checking for. * @returns {Number} Returns index if term is present in params, or -1 if not found. * @example * if (tribe_ev.fn.in_params(tribe_ev.data.params, "tabby") >= 0)){ * // tabby is in params * } else { * // tabby is not in params * } */ in_params : function( params, term ) { return params.toLowerCase().indexOf( term ); }, /** * @function tribe_ev.fn.invalid_date * @desc tribe_ev.fn.invalid_date tests a date object and confirms if it is actually valid by forcing parseDate on it. * @returns {Boolean} Returns true if date is invalid, false if valid. * @example if(tf.invalid_date(ts.date)) return; */ invalid_date : function( date ) { date = new Date( date ); return isNaN( date ); }, invalid_date_in_params: function( params ) { if ( params.hasOwnProperty( 'tribe-bar-date' ) ) { var date = new Date( params['tribe-bar-date'] ); return isNaN( date ); } return false; }, /** * @function tribe_ev.fn.is_category * @desc tribe_ev.fn.is_category test for whether the view is a category subpage in the pretty permalink system. * @returns {Boolean} Returns true if category page, false if not. * @example if (tribe_ev.fn.is_category()){ true } else { false } */ is_category : function() { var $tribe_events = $( '#tribe-events' ); return ($tribe_events.length && $tribe_events.tribe_has_attr( 'data-category' ) && $tribe_events.data( 'category' ) !== '') ? true : false; }, /** * Indicates if the current view is a featured events archive. * * @return {boolean} */ is_featured: function() { return $( '#tribe-events' ).data( 'featured' ) == '1'; }, /** * @function tribe_ev.fn.mobile_class * @desc tribe_ev.fn.mobile_class adds or removes a mobile class from the body element based on the mobile breakpoint. */ mobile_class : function() { var $body = $( 'body' ); if ( tribe_ev.data.v_width <= tribe_ev.data.mobile_break ) { $body.addClass( 'tribe-mobile' ); } else { $body.removeClass( 'tribe-mobile' ); } }, /** * @function tribe_ev.fn.mobile_view_redirect * @desc tribe_ev.fn.mobile_view_redirect Will redirect mobile users to the correct default view, this will only work if used after events-bar is loaded */ maybe_default_view_change : function() { // if we don't these we can't do anything if ( // There is no default View set ! tribe_ev.data.default_view || // There is no default mobile View set ! tribe_ev.data.default_mobile_view || // The mobile and normal default views are the same tribe_ev.data.default_view == tribe_ev.data.default_mobile_view || // There is no View set ! tribe_ev.state.view || // We are on the default mobile view tribe_ev.data.default_mobile_view == tribe_ev.state.view || // We are with an defined view tribe_ev.data.cur_url == tribe_ev.data.base_url ) { return false; } var $body = $( 'body' ); // Not a Mobile Call if ( ! $body.hasClass( 'tribe-mobile' ) ) { return false; } var $views = $( '.tribe-bar-views-option' ), view_class_filter = '.tribe-bar-views-option-' + tribe_ev.data.default_mobile_view, $default_view_link = $views.filter( view_class_filter ); // Actually do the Changing View $default_view_link.trigger( 'click' ); }, /** * @function tribe_ev.fn.parse_string * @desc tribe_ev.fn.parse_string converts a string to an object. * @param {String} string The string to be converted. * @returns {Object} Returns mapped object. * @example if (tribe_ev.fn.is_category()){ true } else { false } */ parse_string : function( string ) { var map = {}; string.replace( /([^&=]+)=?([^&]*)(?:&+|$)/g, function( match, key, value ) { (map[key] = map[key] || []).push( value ); } ); // @ifdef DEBUG dbug && debug.info( 'TEC Debug: tribe_ev.fn.parse_string returned this map:', map ); // @endif return map; }, /** * @function tribe_ev.fn.pre_ajax * @desc tribe_ev.fn.pre_ajax allows for functions to be executed before ajax begins. * @param {Function} callback The callback function, expected to be an ajax function for one of our views. */ pre_ajax : function( callback ) { if ( callback && typeof( callback ) === "function" ) { callback(); } }, /** * @function tribe_ev.fn.scroll_to * @desc tribe_ev.fn.scroll_to animates the body to the target with the passed duration and offset. * @param {String} target the id of the target to scroll the body to. * @param {Number} offset the vertical offset from the target.. * @param {Number} duration the duration of the scroll animation. */ scroll_to : function( target, offset, duration ) { $( 'html, body' ).stop().animate( {scrollTop: $( target ).offset().top - offset}, {duration: duration} ); }, /** * @function tribe_ev.fn.serialize * @desc tribe_ev.fn.serialize serializes the passed input types. Enable/disable stack in place to protect inputs during process, especially for live ajax mode. * @param {String} form The form element. * @param {String} type The input types to be serialized. * @returns {String} Returns a param string of populated inputs. * @example tribe_ev.fn.serialize('#myForm', 'input, select'); */ serialize : function( form, type ) { tribe_ev.fn.enable_inputs( form, type ); tribe_ev.fn.disable_empty( form, type ); var params = $( form ).serialize(); tribe_ev.fn.disable_inputs( form, type ); // @ifdef DEBUG dbug && params && debug.info( 'TEC Debug: tribe_ev.fn.serialize returned these params: "' + params ); // @endif return params; }, /** * @function tribe_ev.fn.set_form * @desc tribe_ev.fn.set_form takes a param string and sets a forms inputs to the values received. Extended in the Query Filters plugin. * @param {String} params The params to be looped over and applied to the named input. Needed for back button browser history when forms are outside of the ajax area. * @example <caption>Set all inputs in a form(s) to the values in a param string retrieved from the history object on popstate.</caption> * $(window).on('popstate', function (event) { * var state = event.originalEvent.state; * if (state) { * tribe_ev.state.params = state.tribe_params; * // do something magical to restore query state like ajax, then set the forms to match the history state like so: * tribe_ev.fn.set_form(tribe_ev.state.params); * } * }); */ set_form : function( params ) { var $body = $( 'body' ), $tribe_bar = $( '#tribe-bar-form' ); $body.addClass( 'tribe-reset-on' ); if ( $tribe_bar.length ) { $tribe_bar.tribe_clear_form(); } params = tribe_ev.fn.parse_string( params ); $.each( params, function( key, value ) { if ( key !== 'action' ) { var name = decodeURIComponent( key ), $target = ''; if ( value.length === 1 ) { if ( Array.isArray( value ) ) { value = value[0]; } value = decodeURIComponent( value.replace( /\+/g, '%20' ) ); if ( $( '[name="' + name + '"]' ).is( 'input[type="text"], input[type="hidden"]' ) ) { $( '[name="' + name + '"]' ).val( value ); } else if ( $( '[name="' + name + '"][value="' + value + '"]' ).is( ':checkbox, :radio' ) ) { $( '[name="' + name + '"][value="' + value + '"]' ).prop( "checked", true ); } else if ( $( '[name="' + name + '"]' ).is( 'select' ) ) { $( 'select[name="' + name + '"] option[value="' + value + '"]' ).attr( 'selected', true ); } } else { for ( var i = 0; i < value.length; i++ ) { $target = $( '[name="' + name + '"][value="' + value[i] + '"]' ); if ( $target.is( ':checkbox, :radio' ) ) { $target.prop( "checked", true ); } else { $( 'select[name="' + name + '"] option[value="' + value[i] + '"]' ).attr( 'selected', true ); } } } } } ); $body.removeClass( 'tribe-reset-on' ); // @ifdef DEBUG dbug && debug.info( 'TEC Debug: tribe_ev.fn.set_form fired these params: "' + params ); // @endif }, /** * @function tribe_ev.fn.setup_ajax_timer * @desc tribe_ev.fn.setup_ajax_timer is a simple function to add a delay to the execution of a passed callback function, in our case ajax hence the name. * @param {Function} callback Used to delay ajax execution when in live ajax mode. * @example <caption>Run some crazy ajax.</caption> * tribe_ev.fn.setup_ajax_timer( function() { * run_some_crazy_ajax(); * }); */ setup_ajax_timer : function( callback ) { var timer = 500; clearTimeout( tribe_ev.state.ajax_timer ); if ( !tribe_ev.tests.reset_on() ) { tribe_ev.state.ajax_timer = setTimeout( function() { callback(); }, timer ); // @ifdef DEBUG dbug && debug.info( 'TEC Debug: tribe_ev.fn.setup_ajax_timer fired with a timeout of "' + timer + '" ms' ); // @endif } }, /** * @function tribe_ev.fn.snap * @desc tribe_ev.fn.snap uses jquery to bind a handler to a trigger_parent which uses bubbling of a click event from the trigger to position the document to the passed container. Has an offset of -120 px to get some breathing room. * @param {String} container the jquery selector to send the document to. * @param {String} trigger_parent the persistent element to bind the handler to. * @param {String} trigger the trigger for the click event * @example <caption>"Snap" the document 120 px above the tribe bar when a footer nav link is clicked.</caption> * tribe_ev.fn.snap('#tribe-bar-form', '#tribe-events', '#tribe-events-footer a'); */ snap : function( container, trigger_parent, trigger ) { $( trigger_parent ).on( 'click', trigger, function( e ) { e.preventDefault(); $( 'html, body' ).animate( {scrollTop: $( container ).offset().top - 120}, {duration: 0} ); } ); }, /** * @function tribe_ev.fn.tooltips * @desc tribe_ev.fn.tooltips binds the event handler that covers all tooltip hover events for the various views. Extended in tribe-events-pro.js for the pro views. One of the reasons both these files must load FIRST in the tribe events js stack at all times. * @example <caption>It's really not that hard... Get yourself inside a doc ready and...</caption> * tribe_ev.fn.tooltips(); */ tooltips : function() { var $container = $( '#tribe-events' ), $body = $( 'body' ), is_shortcode = $container.hasClass( 'tribe-events-shortcode' ), is_month_view = $container.hasClass( 'view-month' ) || $body.hasClass( 'events-gridview' ), is_week_view = $container.hasClass( 'view-week' ) || $body.hasClass( 'tribe-events-week' ), is_photo_view = $container.hasClass( 'view-photo' ) || $body.hasClass( 'tribe-events-photo' ), is_day_view = $container.hasClass( 'view-day' ) || $body.hasClass( 'tribe-events-day' ), is_list_view = $container.hasClass( 'view-list' ) || $body.hasClass( 'events-list' ), is_map_view = $container.hasClass( 'view-map' ) || $body.hasClass( 'tribe-events-map' ), is_single = $body.hasClass( 'single-tribe_events' ); $container.on( 'mouseenter', 'div[id*="tribe-events-event-"], div.event-is-recurring', function() { var bottomPad = 0, $this = $( this ), $tip; if ( is_month_view ) { // Cal View Tooltips bottomPad = $this.find( 'a' ).outerHeight() + 18; } else if ( is_single || is_day_view || is_list_view ) { // Single/List View Recurring Tooltips bottomPad = $this.outerHeight() + 12; } else if ( is_photo_view ) { // Photo View bottomPad = $this.outerHeight() + 10; } // Widget Tooltips if ( $this.parents( '.tribe-events-calendar-widget' ).length ) { bottomPad = $this.outerHeight() - 6; } if ( ! is_week_view || is_shortcode ) { if ( is_month_view || is_shortcode ) { $tip = $this.find( '.tribe-events-tooltip' ); if ( ! $tip.length ) { var data = $this.data( 'tribejson' ); if ( typeof data == 'string' ) { data = $.parseJSON( data ); } var tooltip_template = $this.hasClass( 'tribe-event-featured' ) ? 'tribe_tmpl_tooltip_featured' : 'tribe_tmpl_tooltip'; $this.append( tribe_tmpl( tooltip_template, data ) ); $tip = $this.find( '.tribe-events-tooltip' ); } $tip.css( 'bottom', bottomPad ).show(); } else { $this.find( '.tribe-events-tooltip' ).css( 'bottom', bottomPad ).show(); } } } ).on( 'mouseleave', 'div[id*="tribe-events-event-"], div[id*="tribe-events-daynum-"]:has(a), div.event-is-recurring', function() { $( this ).find( '.tribe-events-tooltip' ).stop( true, false ).fadeOut( 200 ); } ); }, /** * @function tribe_ev.fn.update_picker * @desc tribe_ev.fn.update_picker Updates the custom bootstrapDatepicker if it and the event bar is present, or only the event bar input if it is present. * @param {String} date The date string to update picker or input with. * @example <caption>Bind a handler that updates the datepicker if present with the date, in this case harvested from a data attribute on the link.</caption> * $('#tribe-events').on('click', '.tribe-events-nav-previous a', function (e) { * e.preventDefault(); * var $this = $(this); * tribe_ev.state.date = $this.attr("data-day"); * tribe_ev.fn.update_picker(tribe_ev.state.date); * }); */ update_picker : function( date ) { var $bar_date = $( "#tribe-bar-date" ); if ( $().bootstrapDatepicker && $bar_date.length ) { // for ie8 and under tribe_ev.state.updating_picker = true; if ( window.attachEvent && !window.addEventListener ) { $bar_date.bootstrapDatepicker( "remove" ); $bar_date.val( '' ); $bar_date.bootstrapDatepicker( tribe_ev.data.datepicker_opts ); } $bar_date.bootstrapDatepicker( "setDate", date ); tribe_ev.state.updating_picker = false; // @ifdef DEBUG dbug && debug.info( 'TEC Debug: tribe_ev.fn.update_picker sent "' + date + '" to the boostrapDatepicker' ); // @endif } else if ( $bar_date.length ) { $bar_date.val( date ); // @ifdef DEBUG dbug && debug.warn( 'TEC Debug: tribe_ev.fn.update_picker sent "' + date + '" to ' + $bar_date ); // @endif } else { // @ifdef DEBUG dbug && debug.warn( 'TEC Debug: tribe_ev.fn.update_picker couldnt send "' + date + '" to any object.' ); // @endif } }, /** * @function tribe_ev.fn.update_viewport_variables * @desc tribe_ev.fn.update_viewport_variables surprisingly updates the viewport variables stored in the tribe_ev.data object. */ update_viewport_variables: function() { tribe_ev.data.v_height = $( window ).height(); tribe_ev.data.v_width = $( window ).width(); }, /** * @function tribe_ev.fn.url_path * @desc tribe_ev.fn.url_path strips query vars from a url passed to it using js split on the ? character. * @param {String} url The url to remove all vars from. * @returns {String} Returns a url devoid of any query vars. * @example <caption>Get the query var free version of an href attribute.</caption> * $('#tribe-events').on('click', '.tribe-events-nav-next', function (e) { * e.preventDefault(); * tribe_ev.data.cur_url = tribe_ev.fn.url_path($(this).attr('href')); * }); */ url_path : function( url ) { return url.split( "?" )[0]; }, /** * @function tribe_ev.fn.equal_height * @desc tribe_ev.fn.equal_height gets the tallest height of a set of elements and sets them to the same height. * @param {Object} $group The group of elements to get and set tallest height from. * @example <caption>Get and set the height to the tallest of a set of elements.</caption> * $('#tribe-events .columns').tribe_ev.fn.equal_height(); */ equal_height : function( $group ) { var tallest = 0; $group.css( 'height', 'auto' ); $group.each( function() { var this_height = $( this ).outerHeight(); if ( this_height > tallest ) { tallest = this_height; } } ); setTimeout( function() { $group.css( 'height', tallest ); }, 100 ); } }; /** * @namespace tribe_ev * @desc tribe_ev.tests namespace stores all the custom tests used throughout the core events plugin. */ tribe_ev.tests = { /** * @function tribe_ev.tests.live_ajax * @desc tribe_ev.tests.live_ajax tests if live ajax is enabled in the events settings tab by checking the data attribute data-live_ajax on #tribe-events in the front end. * @example <caption>Very easy test to use. In a doc ready:</caption> * if (tribe_ev.tests.live_ajax()) { * // live ajax is on * ) else { * // live ajax is off * } */ live_ajax : function() { var $tribe_events = $( '#tribe-events' ); return ($tribe_events.length && $tribe_events.tribe_has_attr( 'data-live_ajax' ) && $tribe_events.data( 'live_ajax' ) == '1') ? true : false; }, /** * @function tribe_ev.tests.map_view * @desc tribe_ev.tests.map_view test if we are on map view. * @example <caption>Test if we are on map view</caption> * if (tribe_ev.tests.map_view()) { * // we are on map view * ) */ map_view : function() { return ( typeof GeoLoc !== 'undefined' && GeoLoc.map_view ) ? true : false; }, /** * @function tribe_ev.tests.no_bar * @desc tribe_ev.tests.has_bar tests if the events bar is enabled on the front end. * @example <caption>Very easy test to use. In a doc ready:</caption> * if (tribe_ev.tests.no_bar()) { * // no event bar * ) else { * // has event bar * } */ no_bar : function() { return $( 'body' ).is( '.tribe-bar-is-disabled' ); }, /** * @type Boolean tribe_ev.tests.pushstate * @desc tribe_ev.tests.pushstate checks if the history object is available safely and returns true or false. * @example <caption>Execute an if else on the presence of pushstate</caption> * if (tribe_ev.tests.pushstate) { * // pushstate is available * ) else { * // pushstate is not available * } */ pushstate : !!(window.history && history.pushState), /** * @function tribe_ev.tests.reset_on * @desc tribe_ev.tests.reset_on tests if any other function is currently disabling a tribe ajax function. * @example <caption>In another handler that will be triggering a tribe ajax function:</caption> * if (!tribe_ev.tests.reset_on()) { * // reset is not occuring so lets run some other ajax * ) */ reset_on : function() { return $( 'body' ).is( '.tribe-reset-on' ); }, /** * @function tribe_ev.tests.starting_delim * @desc tribe_ev.tests.starting_delim is used by events url forming functions to determine if "?" is already present. It then sets the delimiter for the next part of the url concatenation to "?" if not found and "&" if it is. * @example <caption>Test and set delimiter during url string concatenation.</caption> * tribe_ev.state.cur_url += tribe_ev.tests.starting_delim + tribe_ev.state.url_params; */ starting_delim: function() { return tribe_ev.state.cur_url.indexOf( '?' ) != -1 ? '&' : '?'; }, /** * @type Boolean tribe_ev.tests.webkit * @desc tribe_ev.tests.webkit checks if webkit is the browser in use and returns true or false. * @example <caption>Execute an if else on the presence of pushstate</caption> * if (tribe_ev.tests.webkit) { * // is webkit * ) else { * // is not webkit * } */ webkit : 'WebkitAppearance' in document.documentElement.style }; /** * @namespace tribe_ev * @desc tribe_ev.data stores information that is sometimes used internally and also contains useful data for themers. */ tribe_ev.data = { ajax_response : {}, base_url : '', cur_url : tribe_ev.fn.url_path( document.URL ), cur_date : tribe_ev.fn.current_date(), datepicker_formats : { 'main' : ['yyyy-mm-dd', 'm/d/yyyy', 'mm/dd/yyyy', 'd/m/yyyy', 'dd/mm/yyyy', 'm-d-yyyy', 'mm-dd-yyyy', 'd-m-yyyy', 'dd-mm-yyyy'], 'month': ['yyyy-mm', 'm/yyyy', 'mm/yyyy', 'm/yyyy', 'mm/yyyy', 'm-yyyy', 'mm-yyyy', 'm-yyyy', 'mm-yyyy'] }, datepicker_opts : {}, default_permalinks : (!config.permalink_settings.length), initial_url : tribe_ev.fn.url_path( document.URL ), mobile_break : 768, default_mobile_view : null, default_view : null, params : tribe_ev.fn.get_params(), v_height : 0, v_width : 0 }; /** * @namespace tribe_ev * @desc tribe_ev.events is an empty object used to attach all tribe custom events to. */ tribe_ev.events = {}; /** * @namespace tribe_ev * @desc tribe_ev.state is mainly used in events ajax operations, though a few variables are set on doc ready. */ tribe_ev.state = { ajax_running : false, ajax_timer : 0, ajax_trigger : '', category : '', date : '', datepicker_format: '0', do_string : false, featured : false, filters : false, filter_cats : false, initial_load : true, mdate : '', paged : 1, page_title : '', params : {}, popping : false, pushstate : true, pushcount : 0, recurrence : false, updating_picker : false, url_params : {}, view : '', view_target : '' }; })( window, document, jQuery, tribe_debug, tribe_js_config ); (function( window, document, $, td, te, tf, ts, tt, dbug ) { /* * $ = jQuery * td = tribe_ev.data * te = tribe_ev.events * tf = tribe_ev.fn * ts = tribe_ev.state * tt = tribe_ev.tests * dbug = tribe_debug */ $( document ).ready( function() { // @ifdef DEBUG dbug && debug.info( 'TEC Debug: Tribe Events JS init, Init Timer started from tribe-events.js.' ); // @endif tf.update_viewport_variables(); var $body = $( 'body' ), $tribe_events = $( '#tribe-events' ), $tribe_content = $( '#tribe-events-content' ), $tribe_events_header = $( '#tribe-events-header' ), resize_timer; $tribe_events.removeClass( 'tribe-no-js' ); ts.category = tf.get_category(); td.base_url = tf.get_base_url(); ts.page_title = document.title; var tribe_display = tf.get_url_param( 'tribe_event_display' ); if ( tribe_display ) { ts.view = tribe_display; } else if ( $tribe_events_header.length && $tribe_events_header.tribe_has_attr( 'data-view' ) ) { ts.view = $tribe_events_header.data( 'view' ); } if ( $tribe_events.tribe_has_attr( 'data-datepicker_format' ) && $tribe_events.attr( 'data-datepicker_format' ).length === 1 ) { ts.datepicker_format = $tribe_events.attr( 'data-datepicker_format' ); } // @ifdef DEBUG ts.view && dbug && debug.time( 'Tribe JS Init Timer' ); // @endif $( te ).on( 'tribe_ev_collectParams', function() { // maybe add a baseurl to the Ajax request if we are attempting to navigate events. This helps with // our shortcode pagination if ( 'undefined' === typeof tribe_ev.state || 'undefined' === typeof tribe_ev.state.params ) { return; } if ( -1 === tribe_ev.fn.in_params( tribe_ev.state.params, 'eventdate' ) && -1 === tribe_ev.fn.in_params( tribe_ev.state.params, 'tribe_event_display' ) ) { return; } // We only want to manipulate shortcode params. Bail otherwise if ( ! $( document.getElementById( 'tribe-events' ) ).is( '.tribe-events-shortcode' ) ) { return; } var $header = $( '#tribe-events-header' ); var $canonical = $( 'link[rel="canonical"]' ); var url = null; if ( $canonical.length ) { // use the canonical URL if it is available (it should be) url = $canonical.attr( 'href' ); } else if ( $header.length ) { // failover to the baseurl of the event header url = $header.data( 'baseurl' ); } else { // use the current URL as a last ditch effort url = window.location.origin + window.location.path; } tribe_ev.state.params += '&baseurl=' + url; if ( $header.length ) { var cat = /tribe_events_cat=([^&]*)/ig.exec( $header.data( 'baseurl' ) ); if ( cat && 'undefined' !== typeof cat[1] ) { cat = cat[1]; } else { cat = null; } if ( cat ) { var cat_regexp = new RegExp( 'tribe_event_category=' + cat ); if ( ! tribe_ev.state.params.match( cat_regexp ) ) { tribe_ev.state.params += '&tribe_event_category=' + cat; } if ( 'string' === typeof tribe_ev.state.url_params && ! tribe_ev.state.url_params.match( cat_regexp ) ) { tribe_ev.state.url_params += '&tribe_event_category=' + cat; } } } } ); /** * * Themers can override the mobile break with an override in functions.php * ************************************************************************* add_action( 'tribe_events_mobile_breakpoint', 'mobile_breakpoint' ); function mobile_breakpoint() { return 500; } ************************************************************************* */ if ( $tribe_events.length ) { var $breakpoint_holder = $tribe_events.tribe_has_attr( 'data-mobilebreak' ); if ( false === $breakpoint_holder ) { $breakpoint_holder = $tribe_events.find( '[data-mobilebreak]' ).eq( 0 ); } else { $breakpoint_holder = $tribe_events; } if ( $breakpoint_holder.length ) { td.mobile_break = parseInt( $breakpoint_holder.data( 'mobilebreak' ), 10 ); } /** * Deal with the Mobile View when we have a breakpoint */ var $mobile_view_holder = $tribe_events.tribe_has_attr( 'data-default-mobile-view' ); if ( false === $mobile_view_holder ) { $mobile_view_holder = $tribe_events.find( '[data-default-mobile-view]' ).eq( 0 ); } else { $mobile_view_holder = $tribe_events; } if ( $mobile_view_holder.length ) { // Remember, when using jQuery.data and dash separated variables they become CamelCase separated td.default_mobile_view = $mobile_view_holder.data( 'defaultMobileView' ); td.default_view = $mobile_view_holder.data( 'defaultView' ); } } if ( $tribe_events.length && td.mobile_break > 0 ) { $body.addClass( 'tribe-is-responsive' ); } /* Let's hide the widget calendar if we find more than one instance */ $( ".tribe-events-calendar-widget" ).not( ":eq(0)" ).hide(); tf.tooltips(); tf.mobile_class(); //remove border on list view event before month divider function list_find_month_last_event() { if ( $( '.tribe-events-list' ).length ) { $( '.tribe-events-list-separator-month' ).prev( '.vevent' ).addClass( 'tribe-event-end-month' ); } } list_find_month_last_event(); // remove events header subnav pagination if no results if ( $( '.tribe-events-list .tribe-events-notices' ).length ) { $( '#tribe-events-header .tribe-events-sub-nav' ).empty(); } //remove border on list view event before month divider if ( $( '.tribe-events-list' ).length ) { $( '.tribe-events-list-separator-month' ).prev( '.vevent' ).addClass( 'tribe-event-end-month' ); } // ajax complete function to remove active spinner $( te ).on( 'tribe_ev_ajaxSuccess', function() { $( '.tribe-events-active-spinner' ).remove(); list_find_month_last_event(); } ); /** * @function tribe_ical_url * @desc tribe_ical_url This function adds required params to the ical url. Runs on doc ready, and hooks into 'ajax-success.tribe' also. */ function tribe_ical_url() { var url = document.URL, separator = '?'; if ( url.indexOf( '?' ) > 0 ) { separator = '&'; } var new_link = url + separator + 'ical=1' + '&' + 'tribe_display=' + ts.view; $( 'a.tribe-events-ical' ).attr( 'href', new_link ); } $( te ).on( 'tribe_ev_ajaxSuccess', function() { tribe_ical_url(); } ); tribe_ical_url(); $( window ) .resize( function() { clearTimeout( resize_timer ); resize_timer = setTimeout( tf.execute_resize, 200 ); } ); // @ifdef DEBUG if ( dbug ) { debug.groupCollapsed( 'TEC Debug: Browser and events settings information:' ); debug.log( 'User agent reported as: "' + navigator.userAgent ); debug.log( 'Live ajax returned its state as: "' + tt.live_ajax() ); ts.view && debug.log( 'Tribe js detected the view to be: "' + ts.view ); debug.log( 'Supports pushstate: "' + tt.pushstate ); debug.groupEnd(); debug.info( 'TEC Debug: tribe-events.js successfully loaded' ); } // @endif } ); })( window, document, jQuery, tribe_ev.data, tribe_ev.events, tribe_ev.fn, tribe_ev.state, tribe_ev.tests, tribe_debug );-
This reply was modified 8 years, 10 months ago by
Gerald.
June 30, 2017 at 9:13 pm #1314858Cliff
MemberGot it: https://github.com/moderntribe/the-events-calendar/blob/4.5.7/src/resources/js/tribe-events.js#L1276
However, I’m not sure how to replicate this and therefore not sure how to determine if this is a true bug for us to fix or not.
Could you provide any clarification with this?
July 1, 2017 at 9:42 am #1315024Gerald
ParticipantWhat clarification would you like me to provide? I can turn on the plugins/configuration to make this happen if you give me a certain time window when you can take a look at it live. As I mentioned before, I have been working on the site but then reverting it back to its current (operational) state, but if you give me a time frame I can let you take a look at how the bug manifests itself. Also, I can give you admin privileges as well for during that time frame. Let me know.
July 1, 2017 at 4:43 pm #1315096Cliff
MemberWe work various times across various time zones so a set time likely wouldn’t work, since multiple people may need to take a closer look.
Would it be possible for you to create a staging/development site so it can stay in that state for a period of time (few days to a week)?
I understand we discussed such a setup in a previous reply, but maybe this setup would be possible if the site will be trashed once we spend the time investigating.
July 2, 2017 at 3:09 am #1315225Gerald
ParticipantThis is something I can do. I will set this up on Monday and respond with the login details.
-
This reply was modified 8 years, 10 months ago by
-
AuthorPosts
- The topic ‘Attendee Information NOT Showing Up’ is closed to new replies.
