This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/components/composer-user-selector.js.es6
2019-05-27 10:15:39 +02:00

92 lines
2.1 KiB
JavaScript

import {
default as computed,
observes
} from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
showSelector: true,
shouldHide: false,
defaultUsernameCount: 0,
didInsertElement() {
this._super(...arguments);
if (this.focusTarget === "usernames") {
this.$("input").putCursorAtEnd();
}
},
@observes("usernames")
_checkWidth() {
let width = 0;
const $acWrap = this.$().find(".ac-wrap");
const limit = $acWrap.width();
this.set("defaultUsernameCount", 0);
$acWrap
.find(".item")
.toArray()
.forEach(item => {
width += $(item).outerWidth(true);
const result = width < limit;
if (result) this.incrementProperty("defaultUsernameCount");
return result;
});
if (width >= limit) {
this.set("shouldHide", true);
} else {
this.set("shouldHide", false);
}
},
@observes("shouldHide")
_setFocus() {
const selector =
"#reply-control #reply-title, #reply-control .d-editor-input";
if (this.shouldHide) {
$(selector).on("focus.composer-user-selector", () => {
this.set("showSelector", false);
this.appEvents.trigger("composer:resize");
});
} else {
$(selector).off("focus.composer-user-selector");
}
},
@computed("usernames")
splitUsernames(usernames) {
return usernames.split(",");
},
@computed("splitUsernames", "defaultUsernameCount")
limitedUsernames(splitUsernames, count) {
return splitUsernames.slice(0, count).join(", ");
},
@computed("splitUsernames", "defaultUsernameCount")
hiddenUsersCount(splitUsernames, count) {
return `${splitUsernames.length - count} ${I18n.t("more")}`;
},
actions: {
toggleSelector() {
this.set("showSelector", true);
Ember.run.schedule("afterRender", () => {
this.$()
.find("input")
.focus();
});
},
triggerResize() {
this.appEvents.trigger("composer:resize");
const $this = this.$().find(".ac-wrap");
if ($this.height() >= 150) $this.scrollTop($this.height());
}
}
});