92 lines
2.1 KiB
JavaScript
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());
|
|
}
|
|
}
|
|
});
|