289 lines
6.5 KiB
JavaScript
289 lines
6.5 KiB
JavaScript
function checkSelectKitIsNotExpanded(selector) {
|
|
if (find(selector).hasClass("is-expanded")) {
|
|
throw new Error(
|
|
"You expected select-kit to be collapsed but it is expanded."
|
|
);
|
|
}
|
|
}
|
|
|
|
function checkSelectKitIsNotCollapsed(selector) {
|
|
if (!find(selector).hasClass("is-expanded")) {
|
|
throw new Error(
|
|
"You expected select-kit to be expanded but it is collapsed."
|
|
);
|
|
}
|
|
}
|
|
|
|
Ember.Test.registerAsyncHelper("expandSelectKit", function(app, selector) {
|
|
checkSelectKitIsNotExpanded(selector);
|
|
click(selector + " .select-kit-header");
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("collapseSelectKit", function(app, selector) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
click(selector + " .select-kit-header");
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("selectKitFillInFilter", function(
|
|
app,
|
|
filter,
|
|
selector
|
|
) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
fillIn(selector + " .filter-input", filter);
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("selectKitSelectRowByValue", function(
|
|
app,
|
|
value,
|
|
selector
|
|
) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
click(selector + " .select-kit-row[data-value='" + value + "']");
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("selectKitSelectRowByName", function(
|
|
app,
|
|
name,
|
|
selector
|
|
) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
click(selector + " .select-kit-row[data-name='" + name + "']");
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("selectKitSelectNoneRow", function(
|
|
app,
|
|
selector
|
|
) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
click(selector + " .select-kit-row.none");
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("selectKitSelectRowByIndex", function(
|
|
app,
|
|
index,
|
|
selector
|
|
) {
|
|
checkSelectKitIsNotCollapsed(selector);
|
|
click(find(selector + " .select-kit-row").eq(index));
|
|
});
|
|
|
|
Ember.Test.registerAsyncHelper("keyboardHelper", function(
|
|
app,
|
|
value,
|
|
target,
|
|
selector
|
|
) {
|
|
function createEvent(element, keyCode, options) {
|
|
element = element || ".filter-input";
|
|
selector = find(selector).find(element);
|
|
options = options || {};
|
|
|
|
var type = options.type || "keydown";
|
|
var event = jQuery.Event(type);
|
|
event.keyCode = keyCode;
|
|
if (options && options.metaKey) {
|
|
event.metaKey = true;
|
|
}
|
|
|
|
andThen(() => {
|
|
find(selector).trigger(event);
|
|
});
|
|
}
|
|
|
|
switch (value) {
|
|
case "enter":
|
|
return createEvent(target, 13);
|
|
case "backspace":
|
|
return createEvent(target, 8);
|
|
case "selectAll":
|
|
return createEvent(target, 65, { metaKey: true });
|
|
case "escape":
|
|
return createEvent(target, 27);
|
|
case "down":
|
|
return createEvent(target, 40);
|
|
case "up":
|
|
return createEvent(target, 38);
|
|
case "tab":
|
|
return createEvent(target, 9);
|
|
}
|
|
});
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
function selectKit(selector) {
|
|
selector = selector || ".select-kit";
|
|
|
|
function rowHelper(row) {
|
|
return {
|
|
name: function() {
|
|
return row.attr("data-name");
|
|
},
|
|
icon: function() {
|
|
return row.find(".d-icon");
|
|
},
|
|
title: function() {
|
|
return row.attr("title");
|
|
},
|
|
value: function() {
|
|
return row.attr("data-value");
|
|
},
|
|
exists: function() {
|
|
return exists(row);
|
|
},
|
|
el: function() {
|
|
return row;
|
|
}
|
|
};
|
|
}
|
|
|
|
function headerHelper(header) {
|
|
return {
|
|
value: function() {
|
|
return header.attr("data-value");
|
|
},
|
|
name: function() {
|
|
return header.attr("data-name");
|
|
},
|
|
label: function() {
|
|
return header.text().trim();
|
|
},
|
|
icon: function() {
|
|
return header.find(".icon");
|
|
},
|
|
title: function() {
|
|
return header.attr("title");
|
|
},
|
|
el: function() {
|
|
return header;
|
|
}
|
|
};
|
|
}
|
|
|
|
function filterHelper(filter) {
|
|
return {
|
|
icon: function() {
|
|
return filter.find(".d-icon");
|
|
},
|
|
exists: function() {
|
|
return exists(filter);
|
|
},
|
|
el: function() {
|
|
return filter;
|
|
}
|
|
};
|
|
}
|
|
|
|
return {
|
|
expand: function() {
|
|
return expandSelectKit(selector);
|
|
},
|
|
|
|
collapse: function() {
|
|
return collapseSelectKit(selector);
|
|
},
|
|
|
|
selectRowByIndex: function(index) {
|
|
selectKitSelectRowByIndex(index, selector);
|
|
return selectKit(selector);
|
|
},
|
|
|
|
selectRowByValue: function(value) {
|
|
return selectKitSelectRowByValue(value, selector);
|
|
},
|
|
|
|
// Remove when stable is updated to Discourse 2.1
|
|
selectRowByValueAwait: function(value) {
|
|
return selectKitSelectRowByValue(value, selector);
|
|
},
|
|
|
|
selectRowByName: function(name) {
|
|
selectKitSelectRowByValue(name, selector);
|
|
return selectKit(selector);
|
|
},
|
|
|
|
selectNoneRow: function() {
|
|
return selectKitSelectNoneRow(selector);
|
|
},
|
|
|
|
fillInFilter: function(filter) {
|
|
return selectKitFillInFilter(filter, selector);
|
|
},
|
|
|
|
keyboard: function(value, target) {
|
|
return keyboardHelper(value, target, selector);
|
|
},
|
|
|
|
isExpanded: function() {
|
|
return find(selector).hasClass("is-expanded");
|
|
},
|
|
|
|
isFocused: function() {
|
|
return find(selector).hasClass("is-focused");
|
|
},
|
|
|
|
isHidden: function() {
|
|
return find(selector).hasClass("is-hidden");
|
|
},
|
|
|
|
header: function() {
|
|
return headerHelper(find(selector).find(".select-kit-header"));
|
|
},
|
|
|
|
filter: function() {
|
|
return filterHelper(find(selector).find(".select-kit-filter"));
|
|
},
|
|
|
|
rows: function() {
|
|
return find(selector).find(".select-kit-row");
|
|
},
|
|
|
|
rowByValue: function(value) {
|
|
return rowHelper(
|
|
find(selector).find('.select-kit-row[data-value="' + value + '"]')
|
|
);
|
|
},
|
|
|
|
rowByName: function(name) {
|
|
return rowHelper(
|
|
find(selector).find('.select-kit-row[data-name="' + name + '"]')
|
|
);
|
|
},
|
|
|
|
rowByIndex: function(index) {
|
|
return rowHelper(
|
|
find(selector).find(".select-kit-row:eq(" + index + ")")
|
|
);
|
|
},
|
|
|
|
el: function() {
|
|
return find(selector);
|
|
},
|
|
|
|
noneRow: function() {
|
|
return rowHelper(find(selector).find(".select-kit-row.none"));
|
|
},
|
|
|
|
validationMessage: function() {
|
|
var validationMessage = find(selector).find(".validation-message");
|
|
|
|
if (validationMessage.length) {
|
|
return validationMessage.html().trim();
|
|
} else {
|
|
return null;
|
|
}
|
|
},
|
|
|
|
selectedRow: function() {
|
|
return rowHelper(find(selector).find(".select-kit-row.is-selected"));
|
|
},
|
|
|
|
highlightedRow: function() {
|
|
return rowHelper(find(selector).find(".select-kit-row.is-highlighted"));
|
|
},
|
|
|
|
exists: function() {
|
|
return exists(selector);
|
|
}
|
|
};
|
|
}
|