TeaWeb/shared/js/utils/tab.ts

98 lines
3 KiB
TypeScript
Raw Normal View History

2018-02-27 17:20:49 +01:00
interface JQuery {
2018-09-30 21:50:59 +02:00
asTabWidget(copy?: boolean) : JQuery;
tabify(copy?: boolean) : this;
2018-02-27 17:20:49 +01:00
changeElementType(type: string) : JQuery;
}
2018-04-16 20:38:35 +02:00
if(typeof (customElements) !== "undefined") {
class X_Tab extends HTMLElement {}
class X_Entry extends HTMLElement {}
class X_Tag extends HTMLElement {}
class X_Content extends HTMLElement {}
customElements.define('x-tab', X_Tab, { extends: 'div' });
customElements.define('x-entry', X_Entry, { extends: 'div' });
customElements.define('x-tag', X_Tag, { extends: 'div' });
customElements.define('x-content', X_Content, { extends: 'div' });
} else {
console.warn("Could not defied tab customElements!");
}
2018-02-27 17:20:49 +01:00
var TabFunctions = {
2018-09-30 21:50:59 +02:00
tabify(template: JQuery, copy: boolean = true) : JQuery {
console.log("Tabify: copy=" + copy);
2018-02-27 17:20:49 +01:00
console.log(template);
let tag = $.spawn("div");
tag.addClass("tab");
let header = $.spawn("div");
header.addClass("tab-header");
let content = $.spawn("div");
content.addClass("tab-content");
2018-03-07 19:06:52 +01:00
let silentContent = $.spawn("div");
silentContent.addClass("tab-content-invisible");
2018-02-27 17:20:49 +01:00
template.find("x-entry").each(function () {
let hentry = $.spawn("div");
hentry.addClass("entry");
2018-09-30 21:50:59 +02:00
if(copy)
hentry.append($(this).find("x-tag").clone(true, true));
else
hentry.append($(this).find("x-tag"));
2018-02-27 17:20:49 +01:00
const _this = $(this);
2018-09-30 21:50:59 +02:00
const _entryContent = copy ? _this.find("x-content").clone(true, true) : _this.find("x-content");
2018-03-07 19:06:52 +01:00
silentContent.append(_entryContent);
2018-02-27 17:20:49 +01:00
hentry.on("click", function () {
2018-03-07 19:06:52 +01:00
if(hentry.hasClass("selected")) return;
2018-02-27 17:20:49 +01:00
tag.find(".tab-header .selected").removeClass("selected");
hentry.addClass("selected");
2018-03-07 19:06:52 +01:00
content.children().appendTo(silentContent);
console.log(silentContent);
2018-02-27 17:20:49 +01:00
content.empty();
2018-03-07 19:06:52 +01:00
content.append(_entryContent);
//console.log(_this.find("x-content"));
//content.append(_this.find("x-content"));
2018-02-27 17:20:49 +01:00
});
console.log(this);
header.append(hentry);
});
header.find(".entry").first().trigger("click");
tag.append(header);
tag.append(content);
2018-03-07 19:06:52 +01:00
tag.append(silentContent);
2018-02-27 17:20:49 +01:00
return tag;
}
}
if(!$.fn.asTabWidget) {
2018-09-30 21:50:59 +02:00
$.fn.asTabWidget = function (copy?: boolean) : JQuery {
2018-02-27 17:20:49 +01:00
if($(this).prop("tagName") == "X-TAB")
2018-09-30 21:50:59 +02:00
return TabFunctions.tabify($(this), typeof(copy) === "boolean" ? copy : true);
2018-02-27 17:20:49 +01:00
else {
throw "Invalid tag! " + $(this).prop("tagName");
}
}
}
if(!$.fn.tabify) {
2018-09-30 21:50:59 +02:00
$.fn.tabify = function (copy?: boolean) {
2018-02-27 17:20:49 +01:00
try {
2018-09-30 21:50:59 +02:00
let self = this.asTabWidget(copy);
2018-02-27 17:20:49 +01:00
this.replaceWith(self);
} catch(object) {}
this.find("x-tab").each(function () {
2018-09-30 21:50:59 +02:00
$(this).replaceWith($(this).asTabWidget(copy));
2018-02-27 17:20:49 +01:00
});
return this;
}
}