mirror of
https://github.com/discourse/discourse.git
synced 2025-02-10 22:01:45 +08:00
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
import { createWidget } from 'discourse/widgets/widget';
|
|
import { iconNode } from 'discourse/helpers/fa-icon-node';
|
|
|
|
export default createWidget('button', {
|
|
tagName: 'button.widget-button',
|
|
|
|
buildClasses(attrs) {
|
|
const className = this.attrs.className || '';
|
|
|
|
if (!attrs.label && !attrs.contents) {
|
|
return className + ' no-text';
|
|
}
|
|
|
|
return className;
|
|
},
|
|
|
|
buildAttributes() {
|
|
const attrs = this.attrs;
|
|
|
|
let title;
|
|
if (attrs.title) {
|
|
title = I18n.t(attrs.title, attrs.titleOptions);
|
|
} else if (attrs.label) {
|
|
title = I18n.t(attrs.label, attrs.labelOptions);
|
|
}
|
|
|
|
const attributes = { "aria-label": title, title };
|
|
if (attrs.disabled) { attributes.disabled = "true"; }
|
|
|
|
if (attrs.data) {
|
|
Object.keys(attrs.data).forEach(k => attributes[`data-${k}`] = attrs.data[k]);
|
|
}
|
|
|
|
return attributes;
|
|
},
|
|
|
|
html(attrs) {
|
|
const contents = [];
|
|
const left = !attrs.iconRight;
|
|
if (attrs.icon && left) { contents.push(iconNode(attrs.icon, { class: attrs.iconClass })); }
|
|
if (attrs.label) { contents.push(I18n.t(attrs.label, attrs.labelOptions)); }
|
|
if (attrs.contents) { contents.push(attrs.contents); }
|
|
if (attrs.icon && !left) { contents.push(iconNode(attrs.icon, { class: attrs.iconClass })); }
|
|
|
|
return contents;
|
|
},
|
|
|
|
click(e) {
|
|
const attrs = this.attrs;
|
|
if (attrs.disabled) { return; }
|
|
|
|
$(`button.widget-button`).removeClass('d-hover').blur();
|
|
if (attrs.secondaryAction) {
|
|
this.sendWidgetAction(attrs.secondaryAction);
|
|
}
|
|
|
|
if (attrs.sendActionEvent) {
|
|
return this.sendWidgetAction(attrs.action, e);
|
|
}
|
|
return this.sendWidgetAction(attrs.action);
|
|
}
|
|
});
|