mdui-ext
Version:
a extension for mdui !(not completed)
289 lines (288 loc) • 9.21 kB
JavaScript
import { ClassUtil } from "../utils/ClassUtil";
class MduiButtonElement extends HTMLElement {
constructor() {
super();
this.classList.add("mdui-btn");
this.classList.add("mdui-ripple");
this.addEventListener("click", () => {
const parent = this.parentElement;
if (parent == null) {
return;
}
if (parent.tagName != "MDUI-BTN-GROUP"
|| parent.classList == null
|| !parent.classList.contains("mdui-btn-group")) {
return;
}
const btns = parent.getElementsByTagName("mdui-btn");
if (btns == null) {
return;
}
for (let i = 0; i < btns.length; i++) {
const btn = btns[i];
btn.classList.remove("mdui-btn-active");
btn.removeAttribute("active");
}
this.active = true;
this.classList.remove("mdui-color-white");
});
const timer = () => {
if (this._textColor != this.textColor) {
this._textColor = this.textColor;
if (this.textColor) {
ClassUtil.changeTextColor(this.textColor, this);
}
}
if (this._color != this.color) {
this._color = this.color;
if (this.color) {
ClassUtil.changeColor(this.color, this);
if (this.color == "white") {
this.classList.add("mdui-ripple-black");
}
}
}
if (this._block != this.block) {
this._block = this.block;
if (this.block) {
this.classList.add("mdui-btn-block");
}
}
if (this._raised != this.raised) {
this._raised = this.raised;
if (this.raised) {
this.classList.add("mdui-btn-raised");
}
}
if (this._icon != this.icon) {
this._icon = this.icon;
if (this.icon) {
this.classList.add("mdui-btn-icon");
}
}
if (this._dense != this.dense) {
this._dense = this.dense;
if (this.dense) {
this.classList.add("mdui-btn-dense");
}
}
if (this._active != this.active) {
this._active = this.active;
if (this.active) {
this.classList.add("mdui-btn-active");
this.classList.forEach((clazz) => {
if (clazz.startsWith("mdui-color-")) {
this.classList.remove(clazz);
}
});
}
}
};
setInterval(timer, 50);
}
/**
* 设置text-color属性即可更改按钮的文字颜色
* 示例:将按钮的文字颜色设置成蓝色
* <mdui-btn text-color="blue">这是一个蓝色字体的按钮</mdui-btn>
*/
get textColor() {
const colorAttr = this.getAttributeNode("text-color");
if (colorAttr == null) {
const bodyClassList = document.body.classList;
if (bodyClassList == null) {
return "black";
}
for (let clazz in bodyClassList) {
if (clazz.startsWith("mdui-theme-accent-")) {
return "white";
}
}
if (this.color != "white") {
return "white";
}
return "black";
}
return colorAttr.value;
}
set textColor(color) {
this.setAttribute("text-color", color);
ClassUtil.changeTextColor(color, this);
}
/**
* 设置color属性即可更改按钮的颜色
* 示例:将按钮的颜色设置成蓝色
* <mdui-btn color="blue">这是一个蓝色的按钮</mdui-btn>
*/
get color() {
const colorAttr = this.getAttributeNode("color");
if (colorAttr == null) {
const bodyClassList = document.body.classList;
if (bodyClassList == null) {
return "white";
}
for (let clazz in bodyClassList) {
if (clazz.startsWith("mdui-theme-accent-")) {
return "theme-accent";
}
}
return "white";
}
return colorAttr.value;
}
set color(color) {
this.setAttribute("color", color);
ClassUtil.changeColor(color, this);
if (color == "white") {
this.classList.add("mdui-ripple-black");
}
else {
this.classList.remove("mdui-ripple-black");
}
}
/**
* 设置block属性即可将按钮拉伸到父元素的100%宽度,并且变为块级元素
* 示例:
* <mdui-btn block>这是一个块级按钮</mdui-btn>
*/
get block() {
const blockAttr = this.getAttributeNode("block");
if (blockAttr == null) {
return false;
}
return blockAttr.value != "false";
}
set block(isBlock) {
this.setAttribute("block", String(isBlock));
if (isBlock) {
this.classList.add("mdui-btn-block");
}
else {
this.classList.remove("mdui-btn-block");
}
}
/**
* 设置raised属性即可使按钮获得浮动效果
* 示例:
* <mdui-btn raised>这是一个浮动按钮</mdui-btn>
*/
get raised() {
const outlinedAttr = this.getAttributeNode("raised");
if (outlinedAttr == null) {
return false;
}
else {
return outlinedAttr.value != "false";
}
}
set raised(isRaised) {
this.setAttribute("raised", String(isRaised));
if (isRaised) {
this.classList.add("mdui-btn-raised");
}
else {
this.classList.remove("mdui-btn-raised");
}
}
/**
* 给按钮添加icon属性可将其变为图标按钮
* 示例:
* <mdui-btn icon>
* <mdui-icon>add</mdui-icon>
* </mdui-btn>
*/
get icon() {
const iconAttr = this.getAttributeNode("icon");
if (iconAttr == null) {
return false;
}
else {
return iconAttr.value != "false";
}
}
set icon(isIcon) {
this.setAttribute("icon", String(isIcon));
if (isIcon) {
this.classList.add("mdui-btn-icon");
}
else {
this.classList.remove("mdui-btn-icon");
}
}
/**
* 在按钮上加入属性dense即可使按钮变为密集型按钮
* 示例:
* <mdui-btn dense>这是一个密集型按钮</mdui-btn>
*/
get dense() {
const denseAttr = this.getAttributeNode("dense");
if (denseAttr == null) {
return false;
}
else {
return denseAttr.value != "false";
}
}
set dense(isDense) {
this.setAttribute("dense", String(isDense));
if (isDense) {
this.classList.add("mdui-btn-dense");
}
else {
this.classList.remove("mdui-btn-dense");
}
}
/**
* 在按钮上加入属性disabled即可禁用此按钮
* 示例:
* <mdui-btn disabled>这个按钮被禁用了</mdui-btn>
*/
get disabled() {
const disabledAttr = this.getAttributeNode("disabled");
if (disabledAttr == null) {
return false;
}
else {
return disabledAttr.value != "false";
}
}
set disabled(isDisabled) {
if (isDisabled) {
this.setAttribute("disabled", "true");
}
}
/**
* 在按钮上加入属性active表示该按钮处于选中状态,该属性在按钮组中才会生效
* 示例:按钮组中第二个按钮处于选中状态
* <mdui-btn-group>
* <mdui-btn icon><mdui-icon>format_align_left</mdui-icon></mdui-btn>
* <mdui-btn icon active><mdui-icon>format_align_center</mdui-icon></mdui-btn>
* <mdui-btn icon><mdui-icon>format_align_right</mdui-icon></mdui-btn>
* <mdui-btn icon><mdui-icon>format_align_justify</mdui-icon></mdui-btn>
* </mdui-btn-group>
*/
get active() {
const activeAttr = this.getAttributeNode("active");
if (activeAttr == null) {
return false;
}
else {
return activeAttr.value != "false";
}
}
set active(isActive) {
this.setAttribute("active", String(isActive));
if (isActive) {
this.classList.add("mdui-btn-active");
}
else {
this.classList.remove("mdui-btn-active");
}
}
}
class MduiButtonGroupElement extends HTMLElement {
constructor() {
super();
this.classList.add("mdui-btn-group");
}
}
export { MduiButtonElement, MduiButtonGroupElement };