70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
import computed from 'ember-addons/ember-computed-decorators';
|
|
import { iconHTML } from 'discourse/helpers/fa-icon';
|
|
import interceptClick from 'discourse/lib/intercept-click';
|
|
|
|
export default Ember.Component.extend({
|
|
tagName: 'a',
|
|
classNames: ['d-link'],
|
|
attributeBindings: ['translatedTitle:title', 'translatedTitle:aria-title', 'href'],
|
|
|
|
@computed('path')
|
|
href(path) {
|
|
if (path) { return path; }
|
|
|
|
const route = this.get('route');
|
|
if (route) {
|
|
const router = this.container.lookup('router:main');
|
|
if (router && router.router) {
|
|
const params = [route];
|
|
const model = this.get('model');
|
|
if (model) {
|
|
params.push(model);
|
|
}
|
|
|
|
return Discourse.getURL(router.router.generate.apply(router.router, params));
|
|
}
|
|
}
|
|
|
|
return '';
|
|
},
|
|
|
|
@computed("title")
|
|
translatedTitle(title) {
|
|
if (title) return I18n.t(title);
|
|
},
|
|
|
|
click(e) {
|
|
const action = this.get('action');
|
|
if (action) {
|
|
this.sendAction('action');
|
|
return false;
|
|
}
|
|
|
|
return interceptClick(e);
|
|
},
|
|
|
|
render(buffer) {
|
|
if (!!this.get('template')) {
|
|
return this._super(buffer);
|
|
}
|
|
|
|
const icon = this.get('icon');
|
|
if (icon) {
|
|
buffer.push(iconHTML(icon));
|
|
}
|
|
|
|
const label = this.get('label');
|
|
if (label) {
|
|
if (icon) { buffer.push(" "); }
|
|
|
|
if (this.get('translateLabel') === "false") {
|
|
buffer.push(label);
|
|
} else {
|
|
const count = this.get('count');
|
|
buffer.push(I18n.t(label, { count }));
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|