var pysTikTokRest = {"restApiUrl":"https://excel.tv/wp-json/pys-tiktok/v1/event","debug":""};
var pysFacebookRest = {"restApiUrl":"https://excel.tv/wp-json/pys-facebook/v1/event","debug":""};
//# sourceURL=jquery-core-js-extra
var sibErrMsg = {"invalidMail":"Please fill out valid email address","requiredField":"Please fill out required fields","invalidDateFormat":"Please fill out valid date format","invalidSMSFormat":"Please fill out valid phone number"};
var ajax_sib_front_object = {"ajax_url":"https://excel.tv/wp-admin/admin-ajax.php","ajax_nonce":"41140418ac","flag_url":"https://excel.tv/wp-content/plugins/mailin/img/flags/"};
//# sourceURL=sib-front-js-js-extra
(function () {
'use strict';
// Feature-detect: mark html so CSS collapses kick in
document.documentElement.classList.add('ignite-js');
function initReadMore() {
// Only run on mobile viewports
if (window.innerWidth > 768) return;
var summaries = document.querySelectorAll('.ub_review_block .ub_review_summary');
if (!summaries.length) return;
summaries.forEach(function (summary, idx) {
// Skip if already processed
if (summary.dataset.readmoreInit) return;
summary.dataset.readmoreInit = 'true';
// Target ONLY the long-description div, not the whole summary.
// The summary contains: .ub_review_summary_title (heading), one or more
// .ub_review_overall_value paragraphs (the body text), and
// .ub_review_cta_panel (the View Course button). We wrap just the body
// so the title and CTA stay visible at all times.
var bodyEls = summary.querySelectorAll(':scope > .ub_review_overall_value, :scope > p:not(.ub_review_summary_title), :scope > .ub_review_description');
if (!bodyEls.length) return;
// The wrap will sit immediately before the first body el and absorb all
// contiguous body siblings up to (but not including) the CTA panel.
var wrapperId = 'ignite-summary-' + idx;
var wrap = document.createElement('div');
wrap.className = 'ub_review_summary-wrap is-collapsed';
wrap.id = wrapperId;
var firstBody = bodyEls[0];
summary.insertBefore(wrap, firstBody);
// Move each body element into the wrap (preserves order, leaves title
// and CTA in place as siblings of the wrap).
bodyEls.forEach(function (el) { wrap.appendChild(el); });
// Measure: only collapse if the body is actually tall enough to need it.
var lineHeight = parseFloat(getComputedStyle(wrap).lineHeight) || 24;
var collapsedPx = lineHeight * 4.65;
if (wrap.scrollHeight <= collapsedPx + 4) {
wrap.classList.remove('is-collapsed');
return;
}
var btn = document.createElement('button');
btn.className = 'ignite-readmore-btn';
btn.setAttribute('aria-expanded', 'false');
btn.setAttribute('aria-controls', wrapperId);
btn.textContent = 'Read more';
// Insert button RIGHT AFTER the wrap (before the CTA panel) so the
// visual order is: title → collapsed body → Read more → View Course.
wrap.parentNode.insertBefore(btn, wrap.nextSibling);
btn.addEventListener('click', function () {
var collapsed = wrap.classList.contains('is-collapsed');
if (collapsed) {
wrap.classList.remove('is-collapsed');
btn.setAttribute('aria-expanded', 'true');
btn.textContent = 'Read less';
} else {
wrap.classList.add('is-collapsed');
btn.setAttribute('aria-expanded', 'false');
btn.textContent = 'Read more';
// Scroll card into view if collapsed region is now above viewport
var rect = summary.closest('.ub_review_block').getBoundingClientRect();
if (rect.top < 0) {
summary.closest('.ub_review_block').scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}
});
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initReadMore);
} else {
initReadMore();
}
})();
Would you like a list of reputable sites to download legacy O2Jam song packs, or perhaps a guide on how to install custom skins for O2Mania? O2JAM: O2mania/O2emu link w/songs · forum - Osu! - ppy
He clicked the last one.
In the early 2000s, O2Jam was a titan of the rhythm game genre, boasting over 200 million fans. However, when public servers went dark, players were left with a massive library of beloved "OJN" and "OJM" song files but no official way to play them on modern PCs. While mobile revivals appeared, many veteran players felt they lacked the precision and charm of the original experience. Google Play The Rise of O2Mania To bridge this gap, community-made emulators like o2mania english 142 patched
var wpilFrontend = {"ajaxUrl":"/wp-admin/admin-ajax.php","postId":"44613","postType":"post","openInternalInNewTab":"0","openExternalInNewTab":"0","disableClicks":"0","openLinksWithJS":"0","trackAllElementClicks":"0","clicksI18n":{"imageNoText":"Image in link: No Text","imageText":"Image Title: ","noText":"No Anchor Text Found"}};
//# sourceURL=wpil-frontend-script-js-extra