MediaWiki:Template:MainPageInfopush.js: Difference between revisions

From VRChat Wiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
$(
$(
(function () {
(function () {
//mw.loader.using(["oojs-ui-core", "oojs-ui-windows"]).done(() => {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"]).done(() => {
// var windowManager = new OO.ui.WindowManager();
var windowManager = new OO.ui.WindowManager();
// $(document.body).append(windowManager.$element);
$(document.body).append(windowManager.$element);
//
// function showArticle(element) {
// var { articleTitle, articleContent } = element.dataset;
//
// function ArticleDialog(config) {
// ArticleDialog.super.call(this, config);
// this.config = config || {};
// }
//
// OO.inheritClass(ArticleDialog, OO.ui.ProcessDialog);
//
// ArticleDialog.static.name = "ArticleDialog";
// ArticleDialog.static.title = articleTitle;
// ArticleDialog.static.size = "large";
// ArticleDialog.static.actions = [
// {
// action: "close",
// flags: "safe",
// icon: "close",
// label: "Close"
// }
// ];
//
// ArticleDialog.prototype.initialize = function () {
// ArticleDialog.super.prototype.initialize.apply(this, arguments);
// this.content = new OO.ui.PanelLayout({
// $content: atob(articleContent),
// expanded: false,
// padded: true,
// scrollable: true
// });
//
// this.$body.append(this.content.$element);
// };
//
// ArticleDialog.prototype.getActionProcess = function (action) {
// if (action === "close") {
// return new OO.ui.Process(function () {
// this.close({ action: "close" });
// }, this);
// }
// return ArticleDialog.super.prototype.getActionProcess.call(
// this,
// action
// );
// };
//
// var dialog = new ArticleDialog();
//
// windowManager.addWindows([dialog]);
// windowManager.openWindow(dialog);
// }


const infopushes = document.querySelectorAll(".tpl-infopush");
function showArticle(element) {
console.log("Template:MainPageInfopush", infopushes);
var { articleTitle, articleContent } = element.dataset;


for (const infopush of infopushes) {
function ArticleDialog(config) {
try {
ArticleDialog.super.call(this, config);
const content = infopush.querySelector(".tpl-infopush-content");
this.config = config || {};
}


const items = content.querySelectorAll(".tpl-infopush-item");
OO.inheritClass(ArticleDialog, OO.ui.ProcessDialog);
const total = items.length;


console.log("Template:MainPageInfopush", infopush, items);
ArticleDialog.static.name = "ArticleDialog";
ArticleDialog.static.title = articleTitle;
ArticleDialog.static.size = "large";
ArticleDialog.static.actions = [
{
action: "close",
flags: "safe",
icon: "close",
label: "Close"
}
];


for (const item of items) {
ArticleDialog.prototype.initialize = function () {
const { articleId } = item.dataset;
ArticleDialog.super.prototype.initialize.apply(this, arguments);
if (!articleId) return;
this.content = new OO.ui.PanelLayout({
$content: atob(articleContent),
expanded: false,
padded: true,
scrollable: true
});


item.addEventListener("click", () =>
this.$body.append(this.content.$element);
console.log("showArticle(item)")
};
 
ArticleDialog.prototype.getActionProcess = function (action) {
if (action === "close") {
return new OO.ui.Process(function () {
this.close({ action: "close" });
}, this);
}
return ArticleDialog.super.prototype.getActionProcess.call(
this,
action
);
);
}
};
 
var dialog = new ArticleDialog();
 
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
}
 
const infopushes = document.querySelectorAll(".tpl-infopush");
console.log("Template:MainPageInfopush", infopushes);
 
for (const infopush of infopushes) {
try {
const content = infopush.querySelector(".tpl-infopush-content");
 
const items = content.querySelectorAll(".tpl-infopush-item");
const total = items.length;
 
console.log("Template:MainPageInfopush", infopush, items);
 
for (const item of items) {
const { articleId } = item.dataset;
if (!articleId) continue;
 
item.style.cursor = "pointer";
item.addEventListener("click", () => showArticle(item));
}


const navigation = infopush.querySelector(".tpl-infopush-navigation");
const navigation = infopush.querySelector(".tpl-infopush-navigation");


let currentOffset = 0;
let currentOffset = 0;
function showSlide(index) {
function showSlide(index) {
currentOffset = (index + total) % total;
currentOffset = (index + total) % total;
content.style.transform = `translateX(-${currentOffset * 100}%)`;
content.style.transform = `translateX(-${currentOffset * 100}%)`;
}
}


const autoAdvanceEvery = 5000;
const autoAdvanceEvery = 5000;


let autoAdvanceInterval;
let autoAdvanceInterval;
function resetAutoAdvance() {
function resetAutoAdvance() {
if (autoAdvanceInterval) clearInterval(autoAdvanceInterval);
if (autoAdvanceInterval) clearInterval(autoAdvanceInterval);
autoAdvanceInterval = setInterval(function () {
autoAdvanceInterval = setInterval(function () {
showSlide(currentOffset + 1);
showSlide(currentOffset + 1);
}, autoAdvanceEvery);
}, autoAdvanceEvery);
}
}


navigation
navigation
.querySelector(".tpl-infopush-navigation-previous")
.querySelector(".tpl-infopush-navigation-previous")
.addEventListener("click", () => {
.addEventListener("click", () => {
showSlide(currentOffset - 1);
showSlide(currentOffset - 1);
resetAutoAdvance();
resetAutoAdvance();
});
});


navigation
navigation
.querySelector(".tpl-infopush-navigation-next")
.querySelector(".tpl-infopush-navigation-next")
.addEventListener("click", () => {
.addEventListener("click", () => {
showSlide(currentOffset + 1);
showSlide(currentOffset + 1);
resetAutoAdvance();
resetAutoAdvance();
});
});


resetAutoAdvance();
resetAutoAdvance();
showSlide(0);
showSlide(0);
} catch (reason) {
} catch (reason) {
console.warn(
console.warn(
"Template:MainPageInfopush",
"Template:MainPageInfopush",
"Couldn't initialize infopush.",
"Couldn't initialize infopush.",
reason
reason
);
);
}
}
}
}
});
// });
})()
})()
);
);

Latest revision as of 01:02, 19 August 2024

$(
	(function () {
		mw.loader.using(["oojs-ui-core", "oojs-ui-windows"]).done(() => {
			var windowManager = new OO.ui.WindowManager();
			$(document.body).append(windowManager.$element);

			function showArticle(element) {
				var { articleTitle, articleContent } = element.dataset;

				function ArticleDialog(config) {
					ArticleDialog.super.call(this, config);
					this.config = config || {};
				}

				OO.inheritClass(ArticleDialog, OO.ui.ProcessDialog);

				ArticleDialog.static.name = "ArticleDialog";
				ArticleDialog.static.title = articleTitle;
				ArticleDialog.static.size = "large";
				ArticleDialog.static.actions = [
					{
						action: "close",
						flags: "safe",
						icon: "close",
						label: "Close"
					}
				];

				ArticleDialog.prototype.initialize = function () {
					ArticleDialog.super.prototype.initialize.apply(this, arguments);
					this.content = new OO.ui.PanelLayout({
						$content: atob(articleContent),
						expanded: false,
						padded: true,
						scrollable: true
					});

					this.$body.append(this.content.$element);
				};

				ArticleDialog.prototype.getActionProcess = function (action) {
					if (action === "close") {
						return new OO.ui.Process(function () {
							this.close({ action: "close" });
						}, this);
					}
					return ArticleDialog.super.prototype.getActionProcess.call(
						this,
						action
					);
				};

				var dialog = new ArticleDialog();

				windowManager.addWindows([dialog]);
				windowManager.openWindow(dialog);
			}

			const infopushes = document.querySelectorAll(".tpl-infopush");
			console.log("Template:MainPageInfopush", infopushes);

			for (const infopush of infopushes) {
				try {
					const content = infopush.querySelector(".tpl-infopush-content");

					const items = content.querySelectorAll(".tpl-infopush-item");
					const total = items.length;

					console.log("Template:MainPageInfopush", infopush, items);

					for (const item of items) {
						const { articleId } = item.dataset;
						if (!articleId) continue;

						item.style.cursor = "pointer";
						item.addEventListener("click", () => showArticle(item));
					}

					const navigation = infopush.querySelector(".tpl-infopush-navigation");

					let currentOffset = 0;
					function showSlide(index) {
						currentOffset = (index + total) % total;
						content.style.transform = `translateX(-${currentOffset * 100}%)`;
					}

					const autoAdvanceEvery = 5000;

					let autoAdvanceInterval;
					function resetAutoAdvance() {
						if (autoAdvanceInterval) clearInterval(autoAdvanceInterval);
						autoAdvanceInterval = setInterval(function () {
							showSlide(currentOffset + 1);
						}, autoAdvanceEvery);
					}

					navigation
						.querySelector(".tpl-infopush-navigation-previous")
						.addEventListener("click", () => {
							showSlide(currentOffset - 1);
							resetAutoAdvance();
						});

					navigation
						.querySelector(".tpl-infopush-navigation-next")
						.addEventListener("click", () => {
							showSlide(currentOffset + 1);
							resetAutoAdvance();
						});

					resetAutoAdvance();
					showSlide(0);
				} catch (reason) {
					console.warn(
						"Template:MainPageInfopush",
						"Couldn't initialize infopush.",
						reason
					);
				}
			}
		});
	})()
);