discourse/app/assets/javascripts/select-kit/mixins/utils.js.es6

84 lines
1.7 KiB
Plaintext
Raw Normal View History

import Mixin from "@ember/object/mixin";
const { get, isNone, guidFor } = Ember;
2017-11-10 02:57:53 +08:00
export default Mixin.create({
valueForContentItem(content) {
switch (typeof content) {
2018-06-15 23:03:24 +08:00
case "string":
case "number":
return content;
default:
return get(content, this.valueAttribute);
}
},
2017-11-10 02:57:53 +08:00
_nameForContent(content) {
if (isNone(content)) {
return null;
}
if (typeof content === "object") {
return get(content, this.nameProperty);
2017-11-10 02:57:53 +08:00
}
return content;
},
2017-11-14 10:51:19 +08:00
_isNumeric(input) {
return !isNaN(parseFloat(input)) && isFinite(input);
},
_normalize(input) {
input = input.toLowerCase();
if (typeof input.normalize === "function") {
input = input.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return input;
},
_cast(value) {
if (value === this.noneValue) return value;
return this._castInteger(this._castBoolean(value));
},
_castBoolean(value) {
2018-06-15 23:03:24 +08:00
if (
this.castBoolean &&
2018-06-15 23:03:24 +08:00
Ember.isPresent(value) &&
typeof value === "string"
) {
return value === "true";
}
return value;
},
2017-10-20 03:51:08 +08:00
_castInteger(value) {
if (this.castInteger && Ember.isPresent(value) && this._isNumeric(value)) {
2017-10-20 03:51:08 +08:00
return parseInt(value, 10);
}
2017-11-10 02:57:53 +08:00
return value;
},
_findComputedContentItemByGuid(guid) {
if (guidFor(this.createRowComputedContent) === guid) {
return this.createRowComputedContent;
}
if (guidFor(this.noneRowComputedContent) === guid) {
return this.noneRowComputedContent;
}
return this.collectionComputedContent.find(c => {
return guidFor(c) === guid;
2017-11-10 02:57:53 +08:00
});
},
_filterRemovableComputedContents(computedContent) {
return computedContent.filter(c => c.created);
}
2017-10-20 03:51:08 +08:00
});