mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-25 09:03:12 +03:00
Upgraded ember-power-*
addons (#1459)
no issue - bump deps - adjust usage for breaking changes... - https://github.com/cibernox/ember-power-select/blob/master/CHANGELOG.md#300-beta1 - https://github.com/cibernox/ember-basic-dropdown/blob/master/CHANGELOG.md#200-beta3 - https://github.com/cibernox/ember-power-datepicker/blob/master/CHANGELOG.md#070 - update overridden component and template files to match latest addon code - switch to class syntax w/decorators - adjust for angle bracket syntax
This commit is contained in:
parent
210eb6ef2e
commit
7c7c4962f9
@ -1,19 +1,20 @@
|
|||||||
import BasicDropdown from 'ember-basic-dropdown/components/basic-dropdown';
|
import BasicDropdown from 'ember-basic-dropdown/components/basic-dropdown';
|
||||||
import layout from 'ember-basic-dropdown/templates/components/basic-dropdown';
|
import templateLayout from 'ember-basic-dropdown/templates/components/basic-dropdown';
|
||||||
|
import {layout} from '@ember-decorators/component';
|
||||||
import {inject as service} from '@ember/service';
|
import {inject as service} from '@ember/service';
|
||||||
|
|
||||||
export default BasicDropdown.extend({
|
@layout(templateLayout)
|
||||||
dropdown: service(),
|
class GhBasicDropdown extends BasicDropdown {
|
||||||
|
@service dropdown
|
||||||
|
|
||||||
layout,
|
onInit() {
|
||||||
|
|
||||||
didInsertElement() {
|
|
||||||
this._super(...arguments);
|
|
||||||
this.dropdown.on('close', this, this.close);
|
this.dropdown.on('close', this, this.close);
|
||||||
},
|
|
||||||
|
|
||||||
willDestroyElement() {
|
|
||||||
this._super(...arguments);
|
|
||||||
this.dropdown.off('close', this, this.close);
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
willDestroy() {
|
||||||
|
this.dropdown.off('close', this, this.close);
|
||||||
|
super.willDestroyElement(...arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GhBasicDropdown;
|
||||||
|
@ -161,7 +161,8 @@ export default Component.extend({
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
onDateInput: action(function (datepicker, event) {
|
onDateInput: action(function (datepicker, event) {
|
||||||
datepicker.actions.close();
|
let skipFocus = true;
|
||||||
|
datepicker.actions.close(event, skipFocus);
|
||||||
this.set('_scratchDate', event.target.value);
|
this.set('_scratchDate', event.target.value);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
/* global key */
|
/* global key */
|
||||||
import Component from '@ember/component';
|
import Component from '@ember/component';
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
import fallbackIfUndefined from '../utils/computed-fallback-if-undefined';
|
||||||
import {A, isArray} from '@ember/array';
|
import {A, isArray} from '@ember/array';
|
||||||
|
import {action, computed, get} from '@ember/object';
|
||||||
import {
|
import {
|
||||||
advanceSelectableOption,
|
advanceSelectableOption,
|
||||||
defaultMatcher,
|
defaultMatcher,
|
||||||
filterOptions
|
filterOptions
|
||||||
} from 'ember-power-select/utils/group-utils';
|
} from 'ember-power-select/utils/group-utils';
|
||||||
import {computed} from '@ember/object';
|
|
||||||
import {get} from '@ember/object';
|
|
||||||
import {htmlSafe} from '@ember/string';
|
import {htmlSafe} from '@ember/string';
|
||||||
import {isBlank} from '@ember/utils';
|
import {isBlank} from '@ember/utils';
|
||||||
|
import {tagName} from '@ember-decorators/component';
|
||||||
import {task} from 'ember-concurrency';
|
import {task} from 'ember-concurrency';
|
||||||
|
|
||||||
const {Handlebars} = Ember;
|
const {Handlebars} = Ember;
|
||||||
@ -18,126 +19,78 @@ const {Handlebars} = Ember;
|
|||||||
const BACKSPACE = 8;
|
const BACKSPACE = 8;
|
||||||
const TAB = 9;
|
const TAB = 9;
|
||||||
|
|
||||||
export default Component.extend({
|
@tagName('')
|
||||||
|
class GhTokenInput extends Component {
|
||||||
// public attrs
|
// public attrs
|
||||||
allowCreation: true,
|
@fallbackIfUndefined(true) allowCreation
|
||||||
closeOnSelect: false,
|
@fallbackIfUndefined(false) closeOnSelect
|
||||||
labelField: 'name',
|
@fallbackIfUndefined('name') labelField
|
||||||
matcher: defaultMatcher,
|
@fallbackIfUndefined(defaultMatcher) matcher
|
||||||
searchField: 'name',
|
@fallbackIfUndefined('name') searchField
|
||||||
tagName: '',
|
@fallbackIfUndefined('gh-token-input/trigger') triggerComponent
|
||||||
triggerComponent: 'gh-token-input/trigger',
|
@fallbackIfUndefined('power-select-vertical-collection-options') optionsComponent
|
||||||
|
|
||||||
optionsWithoutSelected: computed('options.[]', 'selected.[]', function () {
|
@computed('options.[]', 'selected.[]')
|
||||||
|
get optionsWithoutSelected() {
|
||||||
return this.optionsWithoutSelectedTask.perform();
|
return this.optionsWithoutSelectedTask.perform();
|
||||||
}),
|
}
|
||||||
|
|
||||||
actions: {
|
// actions -----------------------------------------------------------------
|
||||||
handleKeydown(select, event) {
|
|
||||||
// On backspace with empty text, remove the last token but deviate
|
|
||||||
// from default behaviour by not updating search to match last token
|
|
||||||
if (event.keyCode === BACKSPACE && isBlank(event.target.value)) {
|
|
||||||
let lastSelection = select.selected[select.selected.length - 1];
|
|
||||||
|
|
||||||
if (lastSelection) {
|
@action
|
||||||
this.onchange(select.selected.slice(0, -1), select);
|
handleKeydown(select, event) {
|
||||||
select.actions.search('');
|
// On backspace with empty text, remove the last token but deviate
|
||||||
select.actions.open(event);
|
// from default behaviour by not updating search to match last token
|
||||||
}
|
if (event.keyCode === BACKSPACE && isBlank(event.target.value)) {
|
||||||
|
let lastSelection = select.selected[select.selected.length - 1];
|
||||||
|
|
||||||
// prevent default
|
if (lastSelection) {
|
||||||
return false;
|
this.onChange(select.selected.slice(0, -1), select);
|
||||||
|
select.actions.search('');
|
||||||
|
select.actions.open(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tab should work the same as Enter if there's a highlighted option
|
// prevent default
|
||||||
if (event.keyCode === TAB && !isBlank(event.target.value) && select.highlighted) {
|
|
||||||
if (!select.selected || select.selected.indexOf(select.highlighted) === -1) {
|
|
||||||
select.actions.choose(select.highlighted, event);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// fallback to default
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
onfocus() {
|
|
||||||
key.setScope('gh-token-input');
|
|
||||||
|
|
||||||
if (this.onfocus) {
|
|
||||||
this.onfocus(...arguments);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
onblur() {
|
|
||||||
key.setScope('default');
|
|
||||||
|
|
||||||
if (this.onblur) {
|
|
||||||
this.onblur(...arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
optionsWithoutSelectedTask: task(function* () {
|
|
||||||
let options = yield this.options;
|
|
||||||
let selected = yield this.selected;
|
|
||||||
return options.filter(o => !selected.includes(o));
|
|
||||||
}),
|
|
||||||
|
|
||||||
shouldShowCreateOption(term, options) {
|
|
||||||
if (!this.allowCreation) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.showCreateWhen) {
|
// Tab should work the same as Enter if there's a highlighted option
|
||||||
return this.showCreateWhen(term, options);
|
if (event.keyCode === TAB && !isBlank(event.target.value) && select.highlighted) {
|
||||||
} else {
|
if (!select.selected || select.selected.indexOf(select.highlighted) === -1) {
|
||||||
return this.hideCreateOptionOnSameTerm(term, options);
|
select.actions.choose(select.highlighted, event);
|
||||||
|
event.preventDefault(); // keep focus in search
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
hideCreateOptionOnSameTerm(term, options) {
|
// fallback to default
|
||||||
let searchField = this.searchField;
|
return true;
|
||||||
let existingOption = options.findBy(searchField, term);
|
}
|
||||||
return !existingOption;
|
|
||||||
},
|
|
||||||
|
|
||||||
addCreateOption(term, options) {
|
@action
|
||||||
if (this.shouldShowCreateOption(term, options)) {
|
handleFocus() {
|
||||||
options.unshift(this.buildSuggestionForTerm(term));
|
key.setScope('gh-token-input');
|
||||||
|
|
||||||
|
if (this.onFocus) {
|
||||||
|
this.onFocus(...arguments);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
handleBlur() {
|
||||||
|
key.setScope('default');
|
||||||
|
|
||||||
|
if (this.onBlur) {
|
||||||
|
this.onBlur(...arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
searchAndSuggest(term, select) {
|
searchAndSuggest(term, select) {
|
||||||
return this.searchAndSuggestTask.perform(term, select);
|
return this.searchAndSuggestTask.perform(term, select);
|
||||||
},
|
}
|
||||||
|
|
||||||
searchAndSuggestTask: task(function* (term, select) {
|
|
||||||
let newOptions = (yield this.optionsWithoutSelected).toArray();
|
|
||||||
|
|
||||||
if (term.length === 0) {
|
|
||||||
return newOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
let searchAction = this.search;
|
|
||||||
if (searchAction) {
|
|
||||||
let results = yield searchAction(term, select);
|
|
||||||
|
|
||||||
if (results.toArray) {
|
|
||||||
results = results.toArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.addCreateOption(term, results);
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
newOptions = this.filter(A(newOptions), term);
|
|
||||||
this.addCreateOption(term, newOptions);
|
|
||||||
|
|
||||||
return newOptions;
|
|
||||||
}),
|
|
||||||
|
|
||||||
|
@action
|
||||||
selectOrCreate(selection, select, keyboardEvent) {
|
selectOrCreate(selection, select, keyboardEvent) {
|
||||||
// allow tokens to be created with spaces
|
// allow tokens to be created with spaces
|
||||||
if (keyboardEvent && keyboardEvent.code === 'Space') {
|
if (keyboardEvent && keyboardEvent.code === 'Space') {
|
||||||
@ -153,40 +106,51 @@ export default Component.extend({
|
|||||||
let suggestion = selection.find(option => option.__isSuggestion__);
|
let suggestion = selection.find(option => option.__isSuggestion__);
|
||||||
|
|
||||||
if (suggestion) {
|
if (suggestion) {
|
||||||
this.oncreate(suggestion.__value__, select);
|
this.onCreate(suggestion.__value__, select);
|
||||||
} else {
|
} else {
|
||||||
this.onchange(selection, select);
|
this.onChange(selection, select);
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear select search
|
// clear select search
|
||||||
select.actions.search('');
|
select.actions.search('');
|
||||||
},
|
}
|
||||||
|
|
||||||
filter(options, searchText) {
|
// tasks -------------------------------------------------------------------
|
||||||
let matcher;
|
|
||||||
if (this.searchField) {
|
@task(function* () {
|
||||||
matcher = (option, text) => this.matcher(get(option, this.searchField), text);
|
let options = yield this.options;
|
||||||
} else {
|
let selected = yield this.selected;
|
||||||
matcher = (option, text) => this.matcher(option, text);
|
return options.filter(o => !selected.includes(o));
|
||||||
|
})
|
||||||
|
optionsWithoutSelectedTask;
|
||||||
|
|
||||||
|
@task(function* (term, select) {
|
||||||
|
let newOptions = (yield this.optionsWithoutSelected).toArray();
|
||||||
|
|
||||||
|
if (term.length === 0) {
|
||||||
|
return newOptions;
|
||||||
}
|
}
|
||||||
return filterOptions(options || [], searchText, matcher);
|
|
||||||
},
|
|
||||||
|
|
||||||
buildSuggestionForTerm(term) {
|
let searchAction = this.search;
|
||||||
return {
|
if (searchAction) {
|
||||||
__isSuggestion__: true,
|
let results = yield searchAction(term, select);
|
||||||
__value__: term,
|
|
||||||
text: this.buildSuggestionLabel(term)
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
buildSuggestionLabel(term) {
|
if (results.toArray) {
|
||||||
let buildSuggestion = this.buildSuggestion;
|
results = results.toArray();
|
||||||
if (buildSuggestion) {
|
}
|
||||||
return buildSuggestion(term);
|
|
||||||
|
this._addCreateOption(term, results);
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
return htmlSafe(`Add <strong>"${Handlebars.Utils.escapeExpression(term)}"...</strong>`);
|
|
||||||
},
|
newOptions = this._filter(A(newOptions), term);
|
||||||
|
this._addCreateOption(term, newOptions);
|
||||||
|
|
||||||
|
return newOptions;
|
||||||
|
})
|
||||||
|
searchAndSuggestTask;
|
||||||
|
|
||||||
|
// internal ----------------------------------------------------------------
|
||||||
|
|
||||||
// always select the first item in the list that isn't the "Add x" option
|
// always select the first item in the list that isn't the "Add x" option
|
||||||
defaultHighlighted(select) {
|
defaultHighlighted(select) {
|
||||||
@ -200,4 +164,56 @@ export default Component.extend({
|
|||||||
return option;
|
return option;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
// private -----------------------------------------------------------------
|
||||||
|
|
||||||
|
_addCreateOption(term, options) {
|
||||||
|
if (this._shouldShowCreateOption(term, options)) {
|
||||||
|
options.unshift(this._buildSuggestionForTerm(term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_shouldShowCreateOption(term, options) {
|
||||||
|
if (!this.allowCreation) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.showCreateWhen) {
|
||||||
|
return this.showCreateWhen(term, options);
|
||||||
|
} else {
|
||||||
|
return this._hideCreateOptionOnSameTerm(term, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildSuggestionForTerm(term) {
|
||||||
|
return {
|
||||||
|
__isSuggestion__: true,
|
||||||
|
__value__: term,
|
||||||
|
text: this._buildSuggestionLabel(term)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_hideCreateOptionOnSameTerm(term, options) {
|
||||||
|
let searchField = this.searchField;
|
||||||
|
let existingOption = options.findBy(searchField, term);
|
||||||
|
return !existingOption;
|
||||||
|
}
|
||||||
|
|
||||||
|
_filter(options, searchText) {
|
||||||
|
let matcher;
|
||||||
|
if (this.searchField) {
|
||||||
|
matcher = (option, text) => this.matcher(get(option, this.searchField), text);
|
||||||
|
} else {
|
||||||
|
matcher = (option, text) => this.matcher(option, text);
|
||||||
|
}
|
||||||
|
return filterOptions(options || [], searchText, matcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildSuggestionLabel(term) {
|
||||||
|
if (this.buildSuggestion) {
|
||||||
|
return this.buildSuggestion(term);
|
||||||
|
}
|
||||||
|
return htmlSafe(`Add <strong>"${Handlebars.Utils.escapeExpression(term)}"...</strong>`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GhTokenInput;
|
||||||
|
@ -1,45 +1,51 @@
|
|||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import PowerSelectMultiple from 'ember-power-select/components/power-select-multiple';
|
import PowerSelectMultiple from 'ember-power-select/components/power-select-multiple';
|
||||||
|
import templateLayout from '../../templates/components/gh-token-input/select-multiple';
|
||||||
|
import {action} from '@ember/object';
|
||||||
import {bind} from '@ember/runloop';
|
import {bind} from '@ember/runloop';
|
||||||
|
import {layout, tagName} from '@ember-decorators/component';
|
||||||
|
|
||||||
const endActions = 'click.ghToken mouseup.ghToken touchend.ghToken';
|
// TODO: convert from jQuery to native DOM
|
||||||
|
const END_ACTIONS = 'click.ghToken mouseup.ghToken touchend.ghToken';
|
||||||
|
|
||||||
// triggering focus on the search input within ESA's onfocus event breaks the
|
// triggering focus on the search input within ESA's onfocus event breaks the
|
||||||
// drag-n-drop functionality in ember-drag-drop so we watch for events that
|
// drag-n-drop functionality in ember-drag-drop so we watch for events that
|
||||||
// could be the start of a drag and disable the default focus behaviour until
|
// could be the start of a drag and disable the default focus behaviour until
|
||||||
// we get another event signalling the end of a drag
|
// we get another event signalling the end of a drag
|
||||||
|
|
||||||
export default PowerSelectMultiple.extend({
|
export default @tagName('div') @layout(templateLayout) class GhTokenInputSelectMultiple extends PowerSelectMultiple {
|
||||||
|
_canFocus = true;
|
||||||
tagName: 'div',
|
|
||||||
|
|
||||||
_canFocus: true,
|
|
||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
this._super(...arguments);
|
super.willDestroyElement(...arguments);
|
||||||
|
|
||||||
if (this._allowFocusListener) {
|
if (this._allowFocusListener) {
|
||||||
$(window).off(endActions, this._allowFocusListener);
|
$(window).off(END_ACTIONS, this._allowFocusListener);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
actions: {
|
// actions
|
||||||
optionMouseDown(event) {
|
|
||||||
if (event.which === 1 && !event.ctrlKey) {
|
|
||||||
this._denyFocus(event);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
optionTouchStart(event) {
|
@action
|
||||||
|
optionMouseDown(event) {
|
||||||
|
if (event.which === 1 && !event.ctrlKey) {
|
||||||
this._denyFocus(event);
|
this._denyFocus(event);
|
||||||
},
|
|
||||||
|
|
||||||
handleFocus() {
|
|
||||||
if (this._canFocus) {
|
|
||||||
this._super(...arguments);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
optionTouchStart(event) {
|
||||||
|
this._denyFocus(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
handleFocus() {
|
||||||
|
if (this._canFocus) {
|
||||||
|
super.handleFocus(...arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// internal
|
||||||
|
|
||||||
_denyFocus() {
|
_denyFocus() {
|
||||||
if (this._canFocus) {
|
if (this._canFocus) {
|
||||||
@ -47,14 +53,14 @@ export default PowerSelectMultiple.extend({
|
|||||||
|
|
||||||
this._allowFocusListener = bind(this, this._allowFocus);
|
this._allowFocusListener = bind(this, this._allowFocus);
|
||||||
|
|
||||||
$(window).on(endActions, this._allowFocusListener);
|
$(window).on(END_ACTIONS, this._allowFocusListener);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
_allowFocus() {
|
_allowFocus() {
|
||||||
this._canFocus = true;
|
this._canFocus = true;
|
||||||
|
|
||||||
$(window).off(endActions, this._allowFocusListener);
|
$(window).off(END_ACTIONS, this._allowFocusListener);
|
||||||
this._allowFocusListener = null;
|
this._allowFocusListener = null;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
// NOTE: This is only here because we wanted to override the `eventType` attr.
|
|
||||||
// DO NOT add any functionality here, this will hopefully disappear after an
|
|
||||||
// upstream PR
|
|
||||||
|
|
||||||
import PowerSelect from 'ember-power-select/components/power-select';
|
|
||||||
|
|
||||||
export default PowerSelect.extend({
|
|
||||||
|
|
||||||
});
|
|
@ -1,68 +1,66 @@
|
|||||||
import EmberPowerSelectMultipleTrigger from 'ember-power-select/components/power-select-multiple/trigger';
|
import EmberPowerSelectMultipleTrigger from 'ember-power-select/components/power-select-multiple/trigger';
|
||||||
|
import {action, get} from '@ember/object';
|
||||||
import {assert} from '@ember/debug';
|
import {assert} from '@ember/debug';
|
||||||
import {get} from '@ember/object';
|
|
||||||
import {isBlank} from '@ember/utils';
|
import {isBlank} from '@ember/utils';
|
||||||
|
|
||||||
export default EmberPowerSelectMultipleTrigger.extend({
|
export default class Trigger extends EmberPowerSelectMultipleTrigger {
|
||||||
|
@action
|
||||||
actions: {
|
handleOptionMouseDown(event) {
|
||||||
chooseOption(option) {
|
if (!event.target.closest('[data-selected-index]')) {
|
||||||
this.select.actions.choose(option);
|
let optionMouseDown = this.get('extra.optionMouseDown');
|
||||||
},
|
if (optionMouseDown) {
|
||||||
|
return optionMouseDown(event);
|
||||||
handleOptionMouseDown(event) {
|
|
||||||
if (!event.target.closest('[data-selected-index]')) {
|
|
||||||
let action = this.get('extra.optionMouseDown');
|
|
||||||
if (action) {
|
|
||||||
return action(event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
handleOptionTouchStart(event) {
|
return this.chooseOption(event);
|
||||||
let action = this.get('extra.optionTouchStart');
|
}
|
||||||
if (action) {
|
|
||||||
return action(event);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
reorderItems() {
|
@action
|
||||||
// ember-drag-drop's sortable-objects has two-way bindings and will
|
handleOptionTouchStart(event) {
|
||||||
// update EPS' selected value directly. We have to create a copy
|
let optionTouchStart = this.get('extra.optionTouchStart');
|
||||||
// after sorting in order to force the onchange action to be triggered
|
if (optionTouchStart) {
|
||||||
let selectedCopy = this.select.selected.slice();
|
return optionTouchStart(event);
|
||||||
this.select.actions.select(selectedCopy);
|
|
||||||
},
|
|
||||||
|
|
||||||
// copied directly from EPS, the default behaviour of stopping propagation
|
|
||||||
// of keydown events prevents our shortcuts from being triggered
|
|
||||||
onKeydown(e) {
|
|
||||||
let {onKeydown, select} = this;
|
|
||||||
if (onKeydown && onKeydown(e) === false) {
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (e.keyCode === 8) {
|
|
||||||
e.stopPropagation();
|
|
||||||
if (isBlank(e.target.value)) {
|
|
||||||
let lastSelection = select.selected[select.selected.length - 1];
|
|
||||||
if (lastSelection) {
|
|
||||||
select.actions.select(this.buildSelection(lastSelection, select), e);
|
|
||||||
if (typeof lastSelection === 'string') {
|
|
||||||
select.actions.search(lastSelection);
|
|
||||||
} else {
|
|
||||||
let searchField = this.searchField;
|
|
||||||
assert('`{{power-select-multiple}}` requires a `searchField` when the options are not strings to remove options using backspace', searchField);
|
|
||||||
select.actions.search(get(lastSelection, searchField));
|
|
||||||
}
|
|
||||||
select.actions.open(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Disable the propagation cancellation so that our shortcuts still work
|
|
||||||
// } else if (e.keyCode >= 48 && e.keyCode <= 90 || e.keyCode === 32) { // Keys 0-9, a-z or SPACE
|
|
||||||
// e.stopPropagation();
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
@action
|
||||||
|
reorderItems() {
|
||||||
|
// ember-drag-drop's sortable-objects has two-way bindings and will
|
||||||
|
// update EPS' selected value directly. We have to create a copy
|
||||||
|
// after sorting in order to force the onchange action to be triggered
|
||||||
|
let selectedCopy = this.select.selected.slice();
|
||||||
|
this.select.actions.select(selectedCopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
// copied directly from EPS, the default behaviour of stopping propagation
|
||||||
|
// of keydown events prevents our shortcuts from being triggered
|
||||||
|
@action
|
||||||
|
handleKeydown(e) {
|
||||||
|
if (this.onKeydown && this.onKeydown(e) === false) {
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.keyCode === 8) {
|
||||||
|
e.stopPropagation();
|
||||||
|
if (isBlank(e.target.value)) {
|
||||||
|
let lastSelection = this.select.selected[this.select.selected.length - 1];
|
||||||
|
if (lastSelection) {
|
||||||
|
this.select.actions.select(this.get('buildSelection')(lastSelection, this.select), e);
|
||||||
|
if (typeof lastSelection === 'string') {
|
||||||
|
this.select.actions.search(lastSelection);
|
||||||
|
} else {
|
||||||
|
let searchField = this.get('searchField');
|
||||||
|
assert('`{{power-select-multiple}}` requires a `searchField` when the options are not strings to remove options using backspace', searchField);
|
||||||
|
this.select.actions.search(get(lastSelection, searchField));
|
||||||
|
}
|
||||||
|
this.select.actions.open(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Disable the propagation cancellation so that our shortcuts still work
|
||||||
|
// } else if (e.keyCode >= 48 && e.keyCode <= 90 || e.keyCode === 32) { // Keys 0-9, a-z or SPACE
|
||||||
|
// e.stopPropagation();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<div class="gh-date-time-picker">
|
<div class="gh-date-time-picker">
|
||||||
{{#power-datepicker
|
<PowerDatepicker
|
||||||
selected=this._date
|
@selected={{this._date}}
|
||||||
center=this._date
|
@center={{this._date}}
|
||||||
onSelect=(action "setDate" value="date")
|
@onSelect={{action "setDate" value="date"}}
|
||||||
renderInPlace=true
|
@renderInPlace={{true}}
|
||||||
disabled=this.disabled as |dp|
|
@disabled={{this.disabled}} as |dp|
|
||||||
}}
|
>
|
||||||
{{#dp.trigger tabindex="-1" data-test-date-time-picker-datepicker=true}}
|
<dp.Trigger @tabindex="-1" data-test-date-time-picker-datepicker=true>
|
||||||
<div class="gh-date-time-picker-date {{if this.dateError "error"}}">
|
<div class="gh-date-time-picker-date {{if this.dateError "error"}}">
|
||||||
<input type="text"
|
<input type="text"
|
||||||
placeholder={{this.dateFormat}}
|
placeholder={{this.dateFormat}}
|
||||||
@ -18,12 +18,12 @@
|
|||||||
data-test-date-time-picker-date-input>
|
data-test-date-time-picker-date-input>
|
||||||
{{svg-jar "calendar"}}
|
{{svg-jar "calendar"}}
|
||||||
</div>
|
</div>
|
||||||
{{/dp.trigger}}
|
</dp.Trigger>
|
||||||
{{#dp.content class="dropdown-menu"}}
|
<dp.Content class="dropdown-menu">
|
||||||
{{dp.nav}}
|
<dp.Nav />
|
||||||
{{dp.days minDate=this._minDate maxDate=this._maxDate weekdayFormat="min"}}
|
<dp.Days @minDate={{this._minDate}} @maxDate={{this._maxDate}} @weekdayFormat="min" />
|
||||||
{{/dp.content}}
|
</dp.Content>
|
||||||
{{/power-datepicker}}
|
</PowerDatepicker>
|
||||||
|
|
||||||
<div class="gh-date-time-picker-time {{if this.hasError "error"}}">
|
<div class="gh-date-time-picker-time {{if this.hasError "error"}}">
|
||||||
<input
|
<input
|
||||||
|
@ -6,21 +6,21 @@
|
|||||||
<h2 class="f-small ttu midgrey fw5 mb0">Total members</h2>
|
<h2 class="f-small ttu midgrey fw5 mb0">Total members</h2>
|
||||||
<div class="view-actions">
|
<div class="view-actions">
|
||||||
<div class="gh-contentfilter">
|
<div class="gh-contentfilter">
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=selectedRange
|
@selected={{this.selectedRange}}
|
||||||
options=availableRange
|
@options={{this.availableRange}}
|
||||||
searchEnabled=false
|
@searchEnabled=false
|
||||||
onchange=(action "changeDateRange")
|
@onChange={{action "changeDateRange"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-type"
|
@classNames="gh-contentfilter-menu gh-contentfilter-type"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown gh-members-chart-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown gh-members-chart-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth=false
|
||||||
data-test-type-select=true
|
data-test-type-select="true"
|
||||||
as |range|
|
as |range|
|
||||||
}}
|
>
|
||||||
{{range.name}}
|
{{range.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -188,15 +188,15 @@
|
|||||||
{{#gh-form-group class="gh-labs-mailgun-region"}}
|
{{#gh-form-group class="gh-labs-mailgun-region"}}
|
||||||
<label class="fw6 f8">Mailgun region</label>
|
<label class="fw6 f8">Mailgun region</label>
|
||||||
<div class="mt1">
|
<div class="mt1">
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
options=this.mailgunRegions
|
@options={{this.mailgunRegions}}
|
||||||
selected=this.mailgunRegion
|
@selected={{this.mailgunRegion}}
|
||||||
onchange=(action "setBulkEmailRegion")
|
@onChange={{action "setBulkEmailRegion"}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
as |region|
|
as |region|
|
||||||
}}
|
>
|
||||||
{{region.flag}} {{region.name}}
|
{{region.flag}} {{region.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
{{/gh-form-group}}
|
{{/gh-form-group}}
|
||||||
{{#gh-form-group}}
|
{{#gh-form-group}}
|
||||||
|
@ -92,8 +92,8 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="gh-nav-bottom">
|
<div class="gh-nav-bottom">
|
||||||
{{#gh-basic-dropdown horizontalPosition="left" verticalPosition="top" calculatePosition=this.userDropdownPosition as |dropdown|}}
|
<GhBasicDropdown @horizontalPosition="left" @verticalPosition="top" @calculatePosition={{this.userDropdownPosition}} as |dropdown|>
|
||||||
{{#dropdown.trigger tagName="div" class="flex items-center outline-0 pointer space-between pa2 pl4 pr3"}}
|
<dropdown.Trigger class="flex items-center outline-0 pointer space-between pa2 pl4 pr3">
|
||||||
<div class="flex-auto flex items-center">
|
<div class="flex-auto flex items-center">
|
||||||
<div class="gh-user-avatar relative" style={{background-image-style this.session.user.profileImageUrl}}>
|
<div class="gh-user-avatar relative" style={{background-image-style this.session.user.profileImageUrl}}>
|
||||||
{{#if this.whatsNew.hasNew}}<span class="absolute dib bg-blue ba b--white br-100 gh-whats-new-badge-account"></span>{{/if}}
|
{{#if this.whatsNew.hasNew}}<span class="absolute dib bg-blue ba b--white br-100 gh-whats-new-badge-account"></span>{{/if}}
|
||||||
@ -104,9 +104,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{svg-jar "arrow-down" class="w3 mr1 fill-darkgrey"}}
|
{{svg-jar "arrow-down" class="w3 mr1 fill-darkgrey"}}
|
||||||
{{/dropdown.trigger}}
|
</dropdown.Trigger>
|
||||||
|
|
||||||
{{#dropdown.content class="gh-nav-menu-dropdown"}}
|
<dropdown.Content class="gh-nav-menu-dropdown">
|
||||||
<ul class="dropdown-menu dropdown-triangle-top" role="menu" {{action dropdown.actions.close on="click" preventDefault=false}}>
|
<ul class="dropdown-menu dropdown-triangle-top" role="menu" {{action dropdown.actions.close on="click" preventDefault=false}}>
|
||||||
<li role="presentation">
|
<li role="presentation">
|
||||||
{{#link-to "about" classNames="dropdown-item" role="menuitem" tabindex="-1" data-test-nav="about"}}
|
{{#link-to "about" classNames="dropdown-item" role="menuitem" tabindex="-1" data-test-nav="about"}}
|
||||||
@ -167,8 +167,8 @@
|
|||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
{{/dropdown.content}}
|
</dropdown.Content>
|
||||||
{{/gh-basic-dropdown}}
|
</GhBasicDropdown>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{{gh-token-input
|
<GhTokenInput
|
||||||
options=this.availableAuthors
|
@options={{this.availableAuthors}}
|
||||||
selected=this.selectedAuthors
|
@selected={{this.selectedAuthors}}
|
||||||
onchange=(action "updateAuthors")
|
@onChange={{action "updateAuthors"}}
|
||||||
allowCreation=false
|
@allowCreation={{false}}
|
||||||
renderInPlace=true
|
@renderInPlace={{true}}
|
||||||
triggerId=this.triggerId
|
@triggerId={{this.triggerId}}
|
||||||
}}
|
/>
|
@ -1,12 +1,12 @@
|
|||||||
{{gh-token-input
|
<GhTokenInput
|
||||||
extra=(hash
|
@extra={{hash
|
||||||
tokenComponent="gh-token-input/tag-token"
|
tokenComponent="gh-token-input/tag-token"
|
||||||
)
|
}}
|
||||||
onchange=(action "updateTags")
|
@onChange={{action "updateTags"}}
|
||||||
oncreate=(action "createTag")
|
@onCreate={{action "createTag"}}
|
||||||
options=this.availableTags
|
@options={{this.availableTags}}
|
||||||
renderInPlace=true
|
@renderInPlace={{true}}
|
||||||
selected=this.post.tags
|
@selected={{this.post.tags}}
|
||||||
showCreateWhen=(action "hideCreateOptionOnMatchingTag")
|
@showCreateWhen={{action "hideCreateOptionOnMatchingTag"}}
|
||||||
triggerId=this.triggerId
|
@triggerId={{this.triggerId}}
|
||||||
}}
|
/>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{{#basic-dropdown verticalPosition="below" onOpen=(action "open") onClose=(action "close") as |dd|}}
|
<BasicDropdown @verticalPosition="below" @onOpen={{action "open"}} @onClose={{action "close"}} as |dd|>
|
||||||
{{#dd.trigger class="gh-btn gh-btn-outline gh-publishmenu-trigger"}}
|
<dd.Trigger class="gh-btn gh-btn-outline gh-publishmenu-trigger">
|
||||||
<span data-test-publishmenu-trigger>{{this.triggerText}} {{svg-jar "arrow-down"}}</span>
|
<span data-test-publishmenu-trigger>{{this.triggerText}} {{svg-jar "arrow-down"}}</span>
|
||||||
{{/dd.trigger}}
|
</dd.Trigger>
|
||||||
|
|
||||||
{{#dd.content class="gh-publishmenu-dropdown"}}
|
<dd.Content class="gh-publishmenu-dropdown">
|
||||||
{{#if (eq this.displayState "published")}}
|
{{#if (eq this.displayState "published")}}
|
||||||
{{gh-publishmenu-published
|
{{gh-publishmenu-published
|
||||||
post=this.post
|
post=this.post
|
||||||
@ -49,8 +49,8 @@
|
|||||||
data-test-publishmenu-save=true
|
data-test-publishmenu-save=true
|
||||||
/>
|
/>
|
||||||
</footer>
|
</footer>
|
||||||
{{/dd.content}}
|
</dd.Content>
|
||||||
{{/basic-dropdown}}
|
</BasicDropdown>
|
||||||
|
|
||||||
{{#if this.showEmailConfirmationModal}}
|
{{#if this.showEmailConfirmationModal}}
|
||||||
<GhFullscreenModal
|
<GhFullscreenModal
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
{{#power-select
|
<PowerSelect
|
||||||
search=(action "search")
|
@search={{action "search"}}
|
||||||
onchange=(action "openSelected")
|
@onChange={{action "openSelected"}}
|
||||||
placeholder="Search site..."
|
@placeholder="Search site..."
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
triggerComponent="gh-search-input-trigger"
|
@triggerComponent="gh-search-input-trigger"
|
||||||
renderInPlace=true
|
@renderInPlace={{true}}
|
||||||
loadingMessage="Loading"
|
@loadingMessage="Loading"
|
||||||
as |name select|}}
|
as |name select|
|
||||||
|
>
|
||||||
{{highlighted-text name.title select.searchText}}
|
{{highlighted-text name.title select.searchText}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
|
@ -1,55 +1,64 @@
|
|||||||
{{#gh-token-input/select-multiple
|
<GhTokenInput::SelectMultiple
|
||||||
afterOptionsComponent=this.afterOptionsComponent
|
class={{concat "gh-token-input " @class}}
|
||||||
allowClear=this.allowClear
|
@triggerRole={{@triggerRole}}
|
||||||
ariaDescribedBy=this.ariaDescribedBy
|
@ariaDescribedBy={{@ariaDescribedBy}}
|
||||||
ariaInvalid=this.ariaInvalid
|
@ariaInvalid={{@ariaInvalid}}
|
||||||
ariaLabel=this.ariaLabel
|
@ariaLabel={{@ariaLabel}}
|
||||||
ariaLabelledBy=this.ariaLabelledBy
|
@ariaLabelledBy={{@ariaLabelledBy}}
|
||||||
beforeOptionsComponent=this.beforeOptionsComponent
|
@afterOptionsComponent={{@afterOptionsComponent}}
|
||||||
class=(concat "gh-token-input " this.class)
|
@allowClear={{@allowClear}}
|
||||||
closeOnSelect=this.closeOnSelect
|
@beforeOptionsComponent={{@beforeOptionsComponent}}
|
||||||
defaultHighlighted=this.defaultHighlighted
|
@buildSelection={{@buildSelection}}
|
||||||
destination=destination
|
@calculatePosition={{@calculatePosition}}
|
||||||
dir=this.dir
|
@closeOnSelect={{this.closeOnSelect}}
|
||||||
disabled=this.disabled
|
@defaultHighlighted={{this.defaultHighlighted}}
|
||||||
dropdownClass=this.dropdownClass
|
@destination={{@destination}}
|
||||||
extra=this.extra
|
@disabled={{@disabled}}
|
||||||
horizontalPosition=this.horizontalPosition
|
@dropdownClass={{@dropdownClass}}
|
||||||
initiallyOpened=this.initiallyOpened
|
@extra={{@extra}}
|
||||||
loadingMessage=this.loadingMessage
|
@groupComponent={{@groupComponent}}
|
||||||
matcher=this.matcher
|
@horizontalPosition={{@horizontalPosition}}
|
||||||
matchTriggerWidth=this.matchTriggerWidth
|
@initiallyOpened={{@initiallyOpened}}
|
||||||
noMatchesMessage=this.noMatchesMessage
|
@loadingMessage={{@loadingMessage}}
|
||||||
onblur=(action "onblur")
|
@matcher={{this.matcher}}
|
||||||
onchange=(action this.selectOrCreate)
|
@matchTriggerWidth={{@matchTriggerWidth}}
|
||||||
onclose=this.onclose
|
@noMatchesMessage={{@noMatchesMessage}}
|
||||||
onfocus=(action "onfocus")
|
@onBlur={{this.handleBlur}}
|
||||||
oninput=this.oninput
|
@onChange={{this.selectOrCreate}}
|
||||||
onkeydown=(action "handleKeydown")
|
@onClose={{@onClose}}
|
||||||
onopen=this.onopen
|
@onFocus={{this.handleFocus}}
|
||||||
options=this.optionsWithoutSelected
|
@onInput={{@onInput}}
|
||||||
optionsComponent=(or this.optionsComponent "power-select-vertical-collection-options")
|
@onKeydown={{this.handleKeydown}}
|
||||||
placeholder=placeholder
|
@onOpen={{@onOpen}}
|
||||||
registerAPI=this.registerAPI
|
@options={{this.optionsWithoutSelected}}
|
||||||
renderInPlace=this.renderInPlace
|
@optionsComponent={{this.optionsComponent}}
|
||||||
search=(action this.searchAndSuggest)
|
@placeholder={{@placeholder}}
|
||||||
searchEnabled=this.searchEnabled
|
@placeholderComponent={{@placeholderComponent}}
|
||||||
searchField=this.searchField
|
@preventScroll={{@preventScroll}}
|
||||||
searchMessage=this.searchMessage
|
@registerAPI={{@registerAPI}}
|
||||||
searchPlaceholder=this.searchPlaceholder
|
@renderInPlace={{@renderInPlace}}
|
||||||
selected=selected
|
@required={{@required}}
|
||||||
selectedItemComponent=this.selectedItemComponent
|
@scrollTo={{@scrollTo}}
|
||||||
tabindex=this.tabindex
|
@search={{this.searchAndSuggest}}
|
||||||
triggerClass=this.triggerClass
|
@searchEnabled={{true}}
|
||||||
triggerComponent=this.triggerComponent
|
@searchField={{this.searchField}}
|
||||||
triggerId=this.triggerId
|
@searchMessage={{@searchMessage}}
|
||||||
verticalPosition=this.verticalPosition
|
@searchPlaceholder={{@searchPlaceholder}}
|
||||||
data-test-token-input=true
|
@selected={{@selected}}
|
||||||
as |option term|
|
@selectedItemComponent={{@selectedItemComponent}}
|
||||||
}}
|
@eventType={{@eventType}}
|
||||||
|
@title={{@title}}
|
||||||
|
@triggerClass={{@triggerClass}}
|
||||||
|
@triggerComponent={{this.triggerComponent}}
|
||||||
|
@triggerId={{@triggerId}}
|
||||||
|
@verticalPosition={{@verticalPosition}}
|
||||||
|
@tabindex={{@tabindex}}
|
||||||
|
data-test-token-input="true"
|
||||||
|
as |option|
|
||||||
|
>
|
||||||
{{#if option.__isSuggestion__}}
|
{{#if option.__isSuggestion__}}
|
||||||
{{gh-token-input/suggested-option option=option term=term}}
|
<GhTokenInput::SuggestedOption @option={{option}} />
|
||||||
{{else}}
|
{{else}}
|
||||||
{{get option this.labelField}}
|
{{get option this.labelField}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/gh-token-input/select-multiple}}
|
</GhTokenInput::SelectMultiple>
|
@ -1,125 +1,64 @@
|
|||||||
{{!--
|
{{!--
|
||||||
NOTE: changes from ember-power-select:
|
NOTE: changes from ember-power-select template...
|
||||||
- `extra` has our custom drag-tracking actions assigned to it
|
- `extra` has our custom drag-tracking actions assigned to it
|
||||||
--}}
|
--}}
|
||||||
{{#if (hasBlock "inverse")}}
|
<PowerSelect
|
||||||
{{#gh-token-input/select
|
@triggerRole={{@triggerRole}}
|
||||||
afterOptionsComponent=this.afterOptionsComponent
|
@ariaDescribedBy={{@ariaDescribedBy}}
|
||||||
allowClear=this.allowClear
|
@ariaInvalid={{@ariaInvalid}}
|
||||||
ariaDescribedBy=this.ariaDescribedBy
|
@ariaLabel={{@ariaLabel}}
|
||||||
ariaInvalid=this.ariaInvalid
|
@ariaLabelledBy={{@ariaLabelledBy}}
|
||||||
ariaLabel=this.ariaLabel
|
@afterOptionsComponent={{@afterOptionsComponent}}
|
||||||
ariaLabelledBy=this.ariaLabelledBy
|
@allowClear={{@allowClear}}
|
||||||
beforeOptionsComponent=this.beforeOptionsComponent
|
@beforeOptionsComponent={{this.beforeOptionsComponent}}
|
||||||
buildSelection=(action "buildSelection")
|
@buildSelection={{this.buildSelection}}
|
||||||
calculatePosition=this.calculatePosition
|
@calculatePosition={{@calculatePosition}}
|
||||||
class=this.class
|
@closeOnSelect={{@closeOnSelect}}
|
||||||
closeOnSelect=this.closeOnSelect
|
@defaultHighlighted={{@defaultHighlighted}}
|
||||||
defaultHighlighted=this.defaultHighlighted
|
@destination={{@destination}}
|
||||||
destination=destination
|
@disabled={{@disabled}}
|
||||||
dir=this.dir
|
@dropdownClass={{@dropdownClass}}
|
||||||
disabled=this.disabled
|
@extra={{assign @extra (hash
|
||||||
dropdownClass=this.dropdownClass
|
optionMouseDown=this.optionMouseDown
|
||||||
extra=(assign this.extra (hash
|
optionTouchStart=this.optionTouchStart
|
||||||
optionMouseDown=(action "optionMouseDown")
|
)}}
|
||||||
optionTouchStart=(action "optionTouchStart")
|
@groupComponent={{@groupComponent}}
|
||||||
))
|
@horizontalPosition={{@horizontalPosition}}
|
||||||
horizontalPosition=this.horizontalPosition
|
@initiallyOpened={{@initiallyOpened}}
|
||||||
initiallyOpened=this.initiallyOpened
|
@loadingMessage={{@loadingMessage}}
|
||||||
loadingMessage=this.loadingMessage
|
@matcher={{@matcher}}
|
||||||
matcher=this.matcher
|
@matchTriggerWidth={{@matchTriggerWidth}}
|
||||||
matchTriggerWidth=this.matchTriggerWidth
|
@noMatchesMessage={{@noMatchesMessage}}
|
||||||
noMatchesMessage=this.noMatchesMessage
|
@onBlur={{@onBlur}}
|
||||||
onblur=this.onblur
|
@onChange={{@onChange}}
|
||||||
onchange=this.onchange
|
@onClose={{@onClose}}
|
||||||
onclose=this.onclose
|
@onFocus={{this.handleFocus}}
|
||||||
onfocus=(action "handleFocus")
|
@onInput={{@onInput}}
|
||||||
oninput=this.oninput
|
@onKeydown={{this.handleKeydown}}
|
||||||
onkeydown=(action "handleKeydown")
|
@onOpen={{this.handleOpen}}
|
||||||
onopen=(action "handleOpen")
|
@options={{@options}}
|
||||||
options=options
|
@optionsComponent={{@optionsComponent}}
|
||||||
optionsComponent=this.optionsComponent
|
@placeholder={{@placeholder}}
|
||||||
groupComponent=this.groupComponent
|
@placeholderComponent={{@placeholderComponent}}
|
||||||
placeholder=placeholder
|
@preventScroll={{@preventScroll}}
|
||||||
registerAPI=(readonly this.registerAPI)
|
@registerAPI={{@registerAPI}}
|
||||||
renderInPlace=this.renderInPlace
|
@renderInPlace={{@renderInPlace}}
|
||||||
required=this.required
|
@required={{@required}}
|
||||||
scrollTo=this.scrollTo
|
@scrollTo={{@scrollTo}}
|
||||||
search=search
|
@search={{@search}}
|
||||||
searchEnabled=this.searchEnabled
|
@searchEnabled={{@searchEnabled}}
|
||||||
searchField=this.searchField
|
@searchField={{@searchField}}
|
||||||
searchMessage=this.searchMessage
|
@searchMessage={{@searchMessage}}
|
||||||
searchPlaceholder=this.searchPlaceholder
|
@searchPlaceholder={{@searchPlaceholder}}
|
||||||
selected=selected
|
@selected={{@selected}}
|
||||||
selectedItemComponent=this.selectedItemComponent
|
@selectedItemComponent={{@selectedItemComponent}}
|
||||||
tabindex=this.computedTabIndex
|
@eventType={{@eventType}}
|
||||||
tagName=this.tagName
|
@title={{@title}}
|
||||||
triggerClass=this.concatenatedTriggerClass
|
@triggerClass={{this.concatenatedTriggerClass}}
|
||||||
triggerComponent=(component this.triggerComponent tabindex=this.tabindex)
|
@triggerComponent={{component this.triggerComponent tabindex=@tabindex}}
|
||||||
triggerId=this.triggerId
|
@triggerId={{@triggerId}}
|
||||||
verticalPosition=this.verticalPosition
|
@verticalPosition={{@verticalPosition}}
|
||||||
as |option select|}}
|
@tabindex={{this.computedTabIndex}}
|
||||||
|
...attributes as |option select|>
|
||||||
{{yield option select}}
|
{{yield option select}}
|
||||||
{{else}}
|
</PowerSelect>
|
||||||
{{yield to="inverse"}}
|
|
||||||
{{/gh-token-input/select}}
|
|
||||||
{{else}}
|
|
||||||
{{#gh-token-input/select
|
|
||||||
afterOptionsComponent=this.afterOptionsComponent
|
|
||||||
allowClear=this.allowClear
|
|
||||||
ariaDescribedBy=this.ariaDescribedBy
|
|
||||||
ariaInvalid=this.ariaInvalid
|
|
||||||
ariaLabel=this.ariaLabel
|
|
||||||
ariaLabelledBy=this.ariaLabelledBy
|
|
||||||
beforeOptionsComponent=this.beforeOptionsComponent
|
|
||||||
buildSelection=(action "buildSelection")
|
|
||||||
calculatePosition=this.calculatePosition
|
|
||||||
class=this.class
|
|
||||||
closeOnSelect=this.closeOnSelect
|
|
||||||
defaultHighlighted=this.defaultHighlighted
|
|
||||||
destination=destination
|
|
||||||
dir=this.dir
|
|
||||||
disabled=this.disabled
|
|
||||||
dropdownClass=this.dropdownClass
|
|
||||||
extra=(assign this.extra (hash
|
|
||||||
optionMouseDown=(action "optionMouseDown")
|
|
||||||
optionTouchStart=(action "optionTouchStart")
|
|
||||||
))
|
|
||||||
horizontalPosition=this.horizontalPosition
|
|
||||||
initiallyOpened=this.initiallyOpened
|
|
||||||
loadingMessage=this.loadingMessage
|
|
||||||
matcher=this.matcher
|
|
||||||
matchTriggerWidth=this.matchTriggerWidth
|
|
||||||
noMatchesMessage=this.noMatchesMessage
|
|
||||||
onblur=this.onblur
|
|
||||||
onchange=this.onchange
|
|
||||||
onclose=this.onclose
|
|
||||||
onfocus=(action "handleFocus")
|
|
||||||
oninput=this.oninput
|
|
||||||
onkeydown=(action "handleKeydown")
|
|
||||||
onopen=(action "handleOpen")
|
|
||||||
options=options
|
|
||||||
optionsComponent=this.optionsComponent
|
|
||||||
groupComponent=this.groupComponent
|
|
||||||
placeholder=placeholder
|
|
||||||
registerAPI=(readonly this.registerAPI)
|
|
||||||
renderInPlace=this.renderInPlace
|
|
||||||
required=this.required
|
|
||||||
scrollTo=this.scrollTo
|
|
||||||
search=search
|
|
||||||
searchEnabled=this.searchEnabled
|
|
||||||
searchField=this.searchField
|
|
||||||
searchMessage=this.searchMessage
|
|
||||||
searchPlaceholder=this.searchPlaceholder
|
|
||||||
selected=selected
|
|
||||||
selectedItemComponent=this.selectedItemComponent
|
|
||||||
tabindex=this.computedTabIndex
|
|
||||||
tagName=this.tagName
|
|
||||||
triggerClass=this.concatenatedTriggerClass
|
|
||||||
triggerComponent=(component this.triggerComponent tabindex=this.tabindex)
|
|
||||||
triggerId=this.triggerId
|
|
||||||
verticalPosition=this.verticalPosition
|
|
||||||
as |option select|}}
|
|
||||||
{{yield option select}}
|
|
||||||
{{/gh-token-input/select}}
|
|
||||||
{{/if}}
|
|
@ -1,103 +0,0 @@
|
|||||||
{{!--
|
|
||||||
NOTE: the only thing changed here is `eventType="click"` on dropdown.trigger
|
|
||||||
so it doesn't interfere with the drag-n-drop sorting
|
|
||||||
|
|
||||||
When upgrading ember-power-select ensure the full component template is
|
|
||||||
copied across here
|
|
||||||
--}}
|
|
||||||
{{#basic-dropdown
|
|
||||||
classNames=(readonly this.classNames)
|
|
||||||
horizontalPosition=(readonly this.horizontalPosition)
|
|
||||||
calculatePosition=this.calculatePosition
|
|
||||||
destination=(readonly destination)
|
|
||||||
initiallyOpened=(readonly this.initiallyOpened)
|
|
||||||
matchTriggerWidth=(readonly this.matchTriggerWidth)
|
|
||||||
onClose=(action "onClose")
|
|
||||||
onOpen=(action "onOpen")
|
|
||||||
registerAPI=(action "registerAPI")
|
|
||||||
renderInPlace=(readonly this.renderInPlace)
|
|
||||||
verticalPosition=(readonly this.verticalPosition)
|
|
||||||
disabled=(readonly this.disabled)
|
|
||||||
as |dropdown|}}
|
|
||||||
|
|
||||||
{{#dropdown.trigger
|
|
||||||
tagName=(readonly this._triggerTagName)
|
|
||||||
ariaDescribedBy=(readonly this.ariaDescribedBy)
|
|
||||||
ariaInvalid=(readonly this.ariaInvalid)
|
|
||||||
ariaLabel=(readonly this.ariaLabel)
|
|
||||||
ariaLabelledBy=(readonly this.ariaLabelledBy)
|
|
||||||
ariaRequired=(readonly this.required)
|
|
||||||
class=(readonly this.concatenatedTriggerClasses)
|
|
||||||
id=(readonly this.triggerId)
|
|
||||||
eventType="click"
|
|
||||||
onKeyDown=(action "onTriggerKeydown")
|
|
||||||
onFocus=(action "onTriggerFocus")
|
|
||||||
onBlur=(action "onTriggerBlur")
|
|
||||||
tabindex=(readonly this.tabindex)}}
|
|
||||||
{{#component this.triggerComponent
|
|
||||||
allowClear=(readonly this.allowClear)
|
|
||||||
buildSelection=(readonly this.buildSelection)
|
|
||||||
extra=(readonly this.extra)
|
|
||||||
listboxId=(readonly this.optionsId)
|
|
||||||
loadingMessage=(readonly this.loadingMessage)
|
|
||||||
onFocus=(action "onFocus")
|
|
||||||
onBlur=(action "onBlur")
|
|
||||||
onInput=(action "onInput")
|
|
||||||
placeholder=(readonly placeholder)
|
|
||||||
placeholderComponent=(readonly this.placeholderComponent)
|
|
||||||
onKeydown=(action "onKeydown")
|
|
||||||
searchEnabled=(readonly this.searchEnabled)
|
|
||||||
searchField=(readonly this.searchField)
|
|
||||||
select=(readonly this.publicAPI)
|
|
||||||
selectedItemComponent=(readonly this.selectedItemComponent)
|
|
||||||
as |opt term|}}
|
|
||||||
{{yield opt term}}
|
|
||||||
{{/component}}
|
|
||||||
{{/dropdown.trigger}}
|
|
||||||
|
|
||||||
{{#dropdown.content _contentTagName=this._contentTagName class=(readonly this.concatenatedDropdownClasses)}}
|
|
||||||
{{component this.beforeOptionsComponent
|
|
||||||
extra=(readonly this.extra)
|
|
||||||
listboxId=(readonly this.optionsId)
|
|
||||||
onInput=(action "onInput")
|
|
||||||
onKeydown=(action "onKeydown")
|
|
||||||
searchEnabled=(readonly this.searchEnabled)
|
|
||||||
onFocus=(action "onFocus")
|
|
||||||
onBlur=(action "onBlur")
|
|
||||||
placeholder=(readonly placeholder)
|
|
||||||
placeholderComponent=(readonly this.placeholderComponent)
|
|
||||||
searchPlaceholder=(readonly this.searchPlaceholder)
|
|
||||||
select=(readonly this.publicAPI)}}
|
|
||||||
{{#if this.mustShowSearchMessage}}
|
|
||||||
{{component this.searchMessageComponent
|
|
||||||
searchMessage=(readonly this.searchMessage)
|
|
||||||
select=(readonly this.publicAPI)
|
|
||||||
}}
|
|
||||||
{{else if this.mustShowNoMessages}}
|
|
||||||
{{#if (hasBlock "inverse")}}
|
|
||||||
{{yield to="inverse"}}
|
|
||||||
{{else if this.noMatchesMessage}}
|
|
||||||
<ul class="ember-power-select-options" role="listbox">
|
|
||||||
<li class="ember-power-select-option ember-power-select-option--no-matches-message" role="option">
|
|
||||||
{{this.noMatchesMessage}}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
{{/if}}
|
|
||||||
{{else}}
|
|
||||||
{{#component this.optionsComponent
|
|
||||||
class="ember-power-select-options"
|
|
||||||
extra=(readonly this.extra)
|
|
||||||
groupIndex=""
|
|
||||||
loadingMessage=(readonly this.loadingMessage)
|
|
||||||
id=(readonly this.optionsId)
|
|
||||||
options=(readonly this.publicAPI.results)
|
|
||||||
optionsComponent=(readonly this.optionsComponent)
|
|
||||||
groupComponent=(readonly this.groupComponent)
|
|
||||||
select=(readonly this.publicAPI)
|
|
||||||
as |option term|}}
|
|
||||||
{{yield option term}}
|
|
||||||
{{/component}}
|
|
||||||
{{/if}}
|
|
||||||
{{component this.afterOptionsComponent select=(readonly this.publicAPI) extra=(readonly this.extra)}}
|
|
||||||
{{/dropdown.content}}
|
|
||||||
{{/basic-dropdown}}
|
|
@ -39,7 +39,26 @@
|
|||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
||||||
{{#if this.searchEnabled}}
|
{{#if this.searchEnabled}}
|
||||||
<input type="search" class="ember-power-select-trigger-multiple-input" tabindex="0" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" id="ember-power-select-trigger-multiple-input-{{select.uniqueId}}" value={{select.searchText}} aria-controls={{this.listboxId}} style={{this.triggerMultipleInputStyle}} placeholder={{this.maybePlaceholder}} disabled={{select.disabled}} oninput={{action "onInput"}} onFocus={{this.onFocus}} onBlur={{this.onBlur}} tabindex={{this.tabindex}} onkeydown={{action "onKeydown"}}>
|
<input
|
||||||
|
type="search"
|
||||||
|
class="ember-power-select-trigger-multiple-input"
|
||||||
|
autocomplete="off"
|
||||||
|
autocorrect="off"
|
||||||
|
autocapitalize="off"
|
||||||
|
spellcheck="false"
|
||||||
|
id="ember-power-select-trigger-multiple-input-{{@select.uniqueId}}"
|
||||||
|
value={{@select.searchText}}
|
||||||
|
aria-controls={{this.listboxId}}
|
||||||
|
style={{this.triggerMultipleInputStyle}}
|
||||||
|
placeholder={{this.maybePlaceholder}}
|
||||||
|
disabled={{@select.disabled}}
|
||||||
|
tabindex={{@tabindex}}
|
||||||
|
{{on "focus" @onFocus}}
|
||||||
|
{{on "blur" @onBlur}}
|
||||||
|
{{on "input" this.handleInput}}
|
||||||
|
{{on "keydown" this.handleKeydown}}
|
||||||
|
{{did-insert this.storeInputStyles}}
|
||||||
|
>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/sortable-objects}}
|
{{/sortable-objects}}
|
||||||
<span class="ember-power-select-status-icon"></span>
|
<span class="ember-power-select-status-icon"></span>
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
{{#if select.loading}}
|
|
||||||
{{#if this.loadingMessage}}
|
|
||||||
<li class="ember-power-select-option ember-power-select-option--loading-message" role="option">{{this.loadingMessage}}</li>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#vertical-collection options minHeight=30 estimateHeight=6 bufferSize=10 as |opt index|}}
|
<ul role="listbox" aria-controls="ember-power-select-trigger-{{@select.uniqueId}}" {{did-insert this.addHandlers}} ...attributes>
|
||||||
<li class="ember-power-select-option"
|
{{#if @select.loading}}
|
||||||
aria-selected="{{ember-power-select-is-selected opt select.selected}}"
|
{{#if @loadingMessage}}
|
||||||
aria-disabled={{ember-power-select-true-string-if-present opt.disabled}}
|
<li class="ember-power-select-option ember-power-select-option--loading-message" role="option">{{@loadingMessage}}</li>
|
||||||
aria-current="{{eq opt select.highlighted}}"
|
{{/if}}
|
||||||
data-option-index="{{this.groupIndex}}{{index}}"
|
{{/if}}
|
||||||
role="option">
|
|
||||||
{{yield opt select}}
|
{{#vertical-collection options minHeight=30 estimateHeight=6 bufferSize=10 as |opt index|}}
|
||||||
</li>
|
<li class="ember-power-select-option"
|
||||||
{{/vertical-collection}}
|
aria-selected="{{ember-power-select-is-selected opt select.selected}}"
|
||||||
|
aria-disabled={{if opt.disabled "true"}}
|
||||||
|
aria-current="{{eq opt @select.highlighted}}"
|
||||||
|
data-option-index="{{@groupIndex}}{{index}}"
|
||||||
|
role="option">
|
||||||
|
{{yield opt @select}}
|
||||||
|
</li>
|
||||||
|
{{/vertical-collection}}
|
||||||
|
</ul>
|
@ -1,13 +1,14 @@
|
|||||||
{{#if select.selected}}
|
{{#if @select.selected}}
|
||||||
{{#if this.selectedItemComponent}}
|
{{#if @selectedItemComponent}}
|
||||||
{{component this.selectedItemComponent option=(readonly select.selected) select=(readonly select)}}
|
{{component @selectedItemComponent extra=(readonly @extra) option=(readonly @option.selected) select=(readonly @select)}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="ember-power-select-selected-item">{{yield select.selected select}}</span>
|
<span class="ember-power-select-selected-item">{{yield @select.selected select}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (and this.allowClear (not select.disabled))}}
|
{{#if (and @allowClear (not @select.disabled))}}
|
||||||
<span class="ember-power-select-clear-btn" onmousedown={{action "clear"}} ontouchstart={{action "clear"}}>×</span>
|
<span class="ember-power-select-clear-btn" {{on "mousedown" this.clear}} {{on "touchstart" this.clear}}>×</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{component this.placeholderComponent placeholder=placeholder}}
|
{{component @placeholderComponent placeholder=@placeholder}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{!-- this next line is the only difference from original trigger.hbs --}}
|
||||||
{{svg-jar "arrow-down-small"}}
|
{{svg-jar "arrow-down-small"}}
|
||||||
|
@ -4,77 +4,77 @@
|
|||||||
<section class="view-actions">
|
<section class="view-actions">
|
||||||
<div class="gh-contentfilter">
|
<div class="gh-contentfilter">
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedType
|
@selected={{this.selectedType}}
|
||||||
options=this.availableTypes
|
@options={{this.availableTypes}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-type"
|
@classNames="gh-contentfilter-menu gh-contentfilter-type"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-type-select=true
|
data-test-type-select="true"
|
||||||
as |type|
|
as |type|
|
||||||
}}
|
>
|
||||||
{{type.name}}
|
{{type.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isAuthorOrContributor}}
|
{{#unless this.session.user.isAuthorOrContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedAuthor
|
@selected={{this.selectedAuthor}}
|
||||||
options=this.availableAuthors
|
@options={{this.availableAuthors}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-author"
|
@classNames="gh-contentfilter-menu gh-contentfilter-author"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search authors"
|
@searchPlaceholder="Search authors"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-author-select=true
|
data-test-author-select="true"
|
||||||
as |author|
|
as |author|
|
||||||
}}
|
>
|
||||||
{{author.name}}
|
{{author.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedTag
|
@selected={{this.selectedTag}}
|
||||||
options=this.availableTags
|
@options={{this.availableTags}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-tag"
|
@classNames="gh-contentfilter-menu gh-contentfilter-tag"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search tags"
|
@searchPlaceholder="Search tags"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
optionsComponent="power-select-vertical-collection-options"
|
@optionsComponent="power-select-vertical-collection-options"
|
||||||
data-test-tag-select=true
|
data-test-tag-select="true"
|
||||||
as |tag|
|
as |tag|
|
||||||
}}
|
>
|
||||||
{{tag.name}}
|
{{tag.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedOrder
|
@selected={{this.selectedOrder}}
|
||||||
options=this.availableOrders
|
@options={{this.availableOrders}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
@classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-order-select=true
|
data-test-order-select="true"
|
||||||
as |order|
|
as |order|
|
||||||
}}
|
>
|
||||||
{{order.name}}
|
{{order.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#link-to "editor.new" "page" class="gh-btn gh-btn-green" data-test-new-page-button=true}}<span>New page</span>{{/link-to}}
|
{{#link-to "editor.new" "page" class="gh-btn gh-btn-green" data-test-new-page-button=true}}<span>New page</span>{{/link-to}}
|
||||||
|
@ -4,77 +4,77 @@
|
|||||||
<section class="view-actions">
|
<section class="view-actions">
|
||||||
<div class="gh-contentfilter">
|
<div class="gh-contentfilter">
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedType
|
@selected={{this.selectedType}}
|
||||||
options=this.availableTypes
|
@options={{this.availableTypes}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action "changeType")
|
@onChange={{action "changeType"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.typeClassNames
|
@classNames={{this.typeClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-type-select=true
|
data-test-type-select="true"
|
||||||
as |type|
|
as |type|
|
||||||
}}
|
>
|
||||||
{{type.name}}
|
{{type.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isAuthorOrContributor}}
|
{{#unless this.session.user.isAuthorOrContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedAuthor
|
@selected={{this.selectedAuthor}}
|
||||||
options=this.availableAuthors
|
@options={{this.availableAuthors}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action "changeAuthor")
|
@onChange={{action "changeAuthor"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.authorClassNames
|
@classNames={{this.authorClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search authors"
|
@searchPlaceholder="Search authors"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-author-select=true
|
data-test-author-select="true"
|
||||||
as |author|
|
as |author|
|
||||||
}}
|
>
|
||||||
{{author.name}}
|
{{author.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedTag
|
@selected={{this.selectedTag}}
|
||||||
options=this.availableTags
|
@options={{this.availableTags}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action "changeTag")
|
@onChange={{action "changeTag"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.tagClassNames
|
@classNames={{this.tagClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search tags"
|
@searchPlaceholder="Search tags"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
optionsComponent="power-select-vertical-collection-options"
|
@optionsComponent="power-select-vertical-collection-options"
|
||||||
data-test-tag-select=true
|
data-test-tag-select="true"
|
||||||
as |tag|
|
as |tag|
|
||||||
}}
|
>
|
||||||
{{tag.name}}
|
{{tag.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedOrder
|
@selected={{this.selectedOrder}}
|
||||||
options=this.availableOrders
|
@options={{this.availableOrders}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action "changeOrder")
|
@onChange={{action "changeOrder"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
@classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-order-select=true
|
@data-test-order-select="true"
|
||||||
as |order|
|
as |order|
|
||||||
}}
|
>
|
||||||
{{order.name}}
|
{{order.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#link-to "editor.new" "page" class="gh-btn gh-btn-green" data-test-new-page-button=true}}<span>New page</span>{{/link-to}}
|
{{#link-to "editor.new" "page" class="gh-btn gh-btn-green" data-test-new-page-button=true}}<span>New page</span>{{/link-to}}
|
||||||
|
@ -4,77 +4,77 @@
|
|||||||
<section class="view-actions">
|
<section class="view-actions">
|
||||||
<div class="gh-contentfilter">
|
<div class="gh-contentfilter">
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedType
|
@selected={{this.selectedType}}
|
||||||
options=this.availableTypes
|
@options={{this.availableTypes}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-type"
|
@classNames="gh-contentfilter-menu gh-contentfilter-type"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-type-select=true
|
data-test-type-select="true"
|
||||||
as |type|
|
as |type|
|
||||||
}}
|
>
|
||||||
{{type.name}}
|
{{type.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isAuthorOrContributor}}
|
{{#unless this.session.user.isAuthorOrContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedAuthor
|
@selected={{this.selectedAuthor}}
|
||||||
options=this.availableAuthors
|
@options={{this.availableAuthors}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-author"
|
@classNames="gh-contentfilter-menu gh-contentfilter-author"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search authors"
|
@searchPlaceholder="Search authors"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-author-select=true
|
data-test-author-select="true"
|
||||||
as |author|
|
as |author|
|
||||||
}}
|
>
|
||||||
{{author.name}}
|
{{author.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedTag
|
@selected={{this.selectedTag}}
|
||||||
options=this.availableTags
|
@options={{this.availableTags}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-tag"
|
@classNames="gh-contentfilter-menu gh-contentfilter-tag"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search tags"
|
@searchPlaceholder="Search tags"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
optionsComponent="power-select-vertical-collection-options"
|
@optionsComponent="power-select-vertical-collection-options"
|
||||||
data-test-tag-select=true
|
data-test-tag-select="true"
|
||||||
as |tag|
|
as |tag|
|
||||||
}}
|
>
|
||||||
{{tag.name}}
|
{{tag.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedOrder
|
@selected={{this.selectedOrder}}
|
||||||
options=this.availableOrders
|
@options={{this.availableOrders}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action (mut k))
|
@onChange={{action (mut k)}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
@classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-order-select=true
|
data-test-order-select="true"
|
||||||
as |order|
|
as |order|
|
||||||
}}
|
>
|
||||||
{{order.name}}
|
{{order.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#link-to "editor.new" "post" class="gh-btn gh-btn-green" data-test-new-post-button=true}}<span>New post</span>{{/link-to}}
|
{{#link-to "editor.new" "post" class="gh-btn gh-btn-green" data-test-new-post-button=true}}<span>New post</span>{{/link-to}}
|
||||||
|
@ -4,77 +4,77 @@
|
|||||||
<section class="view-actions">
|
<section class="view-actions">
|
||||||
<div class="gh-contentfilter">
|
<div class="gh-contentfilter">
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedType
|
@selected={{this.selectedType}}
|
||||||
options=this.availableTypes
|
@options={{this.availableTypes}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action "changeType")
|
@onChange={{action "changeType"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.typeClassNames
|
@classNames={{this.typeClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-type-select=true
|
data-test-type-select="true"
|
||||||
as |type|
|
as |type|
|
||||||
}}
|
>
|
||||||
{{type.name}}
|
{{type.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isAuthorOrContributor}}
|
{{#unless this.session.user.isAuthorOrContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedAuthor
|
@selected={{this.selectedAuthor}}
|
||||||
options=this.availableAuthors
|
@options={{this.availableAuthors}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action "changeAuthor")
|
@onChange={{action "changeAuthor"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.authorClassNames
|
@classNames={{this.authorClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search authors"
|
@searchPlaceholder="Search authors"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-author-select=true
|
data-test-author-select="true"
|
||||||
as |author|
|
as |author|
|
||||||
}}
|
>
|
||||||
{{author.name}}
|
{{author.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#unless this.session.user.isContributor}}
|
{{#unless this.session.user.isContributor}}
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedTag
|
@selected={{this.selectedTag}}
|
||||||
options=this.availableTags
|
@options={{this.availableTags}}
|
||||||
searchField="name"
|
@searchField="name"
|
||||||
onchange=(action "changeTag")
|
@onChange={{action "changeTag"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames=this.tagClassNames
|
@classNames={{this.tagClassNames}}
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
searchPlaceholder="Search tags"
|
@searchPlaceholder="Search tags"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
optionsComponent="power-select-vertical-collection-options"
|
@optionsComponent="power-select-vertical-collection-options"
|
||||||
data-test-tag-select=true
|
data-test-tag-select="true"
|
||||||
as |tag|
|
as |tag|
|
||||||
}}
|
>
|
||||||
{{tag.name}}
|
{{tag.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#power-select
|
<PowerSelect
|
||||||
selected=this.selectedOrder
|
@selected={{this.selectedOrder}}
|
||||||
options=this.availableOrders
|
@options={{this.availableOrders}}
|
||||||
searchEnabled=false
|
@searchEnabled={{false}}
|
||||||
onchange=(action "changeOrder")
|
@onChange={{action "changeOrder"}}
|
||||||
tagName="div"
|
@tagName="div"
|
||||||
classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
@classNames="gh-contentfilter-menu gh-contentfilter-sort"
|
||||||
triggerClass="gh-contentfilter-menu-trigger"
|
@triggerClass="gh-contentfilter-menu-trigger"
|
||||||
dropdownClass="gh-contentfilter-menu-dropdown"
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
||||||
matchTriggerWidth=false
|
@matchTriggerWidth={{false}}
|
||||||
data-test-order-select=true
|
@data-test-order-select="true"
|
||||||
as |order|
|
as |order|
|
||||||
}}
|
>
|
||||||
{{order.name}}
|
{{order.name}}
|
||||||
{{/power-select}}
|
</PowerSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#link-to "editor.new" "post" class="gh-btn gh-btn-green" data-test-new-post-button=true}}<span>New post</span>{{/link-to}}
|
{{#link-to "editor.new" "post" class="gh-btn gh-btn-green" data-test-new-post-button=true}}<span>New post</span>{{/link-to}}
|
||||||
|
13
ghost/admin/app/utils/computed-fallback-if-undefined.js
Normal file
13
ghost/admin/app/utils/computed-fallback-if-undefined.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import {computed} from '@ember/object';
|
||||||
|
|
||||||
|
export default function computedFallbackIfUndefined(fallback) {
|
||||||
|
return computed({
|
||||||
|
get() {
|
||||||
|
return fallback;
|
||||||
|
},
|
||||||
|
|
||||||
|
set(_, v) {
|
||||||
|
return v === undefined ? fallback : v;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -85,8 +85,8 @@
|
|||||||
"ember-moment": "8.0.0",
|
"ember-moment": "8.0.0",
|
||||||
"ember-one-way-select": "4.0.0",
|
"ember-one-way-select": "4.0.0",
|
||||||
"ember-power-calendar-moment": "0.1.7",
|
"ember-power-calendar-moment": "0.1.7",
|
||||||
"ember-power-datepicker": "0.6.2",
|
"ember-power-datepicker": "0.7.1",
|
||||||
"ember-power-select": "2.3.5",
|
"ember-power-select": "3.0.6",
|
||||||
"ember-resolver": "7.0.0",
|
"ember-resolver": "7.0.0",
|
||||||
"ember-route-action-helper": "2.0.7",
|
"ember-route-action-helper": "2.0.7",
|
||||||
"ember-simple-auth": "2.1.1",
|
"ember-simple-auth": "2.1.1",
|
||||||
|
@ -941,6 +941,21 @@
|
|||||||
ember-cli-typescript "^3.0.0"
|
ember-cli-typescript "^3.0.0"
|
||||||
heimdalljs "^0.3.0"
|
heimdalljs "^0.3.0"
|
||||||
|
|
||||||
|
"@ember-decorators/component@^6.0.0", "@ember-decorators/component@^6.1.0":
|
||||||
|
version "6.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-6.1.1.tgz#b360dc4fa8e576ee1c840879399ef1745fd96e06"
|
||||||
|
integrity sha512-Cj8tY/c0MC/rsipqsiWLh3YVN72DK92edPYamD/HzvftwzC6oDwawWk8RmStiBnG9PG/vntAt41l3S7HSSA+1Q==
|
||||||
|
dependencies:
|
||||||
|
"@ember-decorators/utils" "^6.1.1"
|
||||||
|
ember-cli-babel "^7.1.3"
|
||||||
|
|
||||||
|
"@ember-decorators/utils@^6.1.1":
|
||||||
|
version "6.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-6.1.1.tgz#6b619814942b4fb3747cfa9f540c9f05283d7c5e"
|
||||||
|
integrity sha512-0KqnoeoLKb6AyoSU65TRF5T85wmS4uDn06oARddwNPxxf/lt5jQlh41uX3W7V/fWL9tPu8x1L1Vvpc80MN1+YA==
|
||||||
|
dependencies:
|
||||||
|
ember-cli-babel "^7.1.3"
|
||||||
|
|
||||||
"@ember/edition-utils@^1.1.1", "@ember/edition-utils@^1.2.0":
|
"@ember/edition-utils@^1.1.1", "@ember/edition-utils@^1.2.0":
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
|
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
|
||||||
@ -979,7 +994,7 @@
|
|||||||
ember-cli-babel "^6.16.0"
|
ember-cli-babel "^6.16.0"
|
||||||
ember-compatibility-helpers "^1.1.1"
|
ember-compatibility-helpers "^1.1.1"
|
||||||
|
|
||||||
"@ember/render-modifiers@1.0.2":
|
"@ember/render-modifiers@1.0.2", "@ember/render-modifiers@^1.0.2":
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.2.tgz#2e87c48db49d922ce4850d707215caaac60d8444"
|
resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.2.tgz#2e87c48db49d922ce4850d707215caaac60d8444"
|
||||||
integrity sha512-6tEnHl5+62NTSAG2mwhGMFPhUrJQjoVqV+slsn+rlTknm2Zik+iwxBQEbwaiQOU1FUYxkS8RWcieovRNMR8inQ==
|
integrity sha512-6tEnHl5+62NTSAG2mwhGMFPhUrJQjoVqV+slsn+rlTknm2Zik+iwxBQEbwaiQOU1FUYxkS8RWcieovRNMR8inQ==
|
||||||
@ -4949,14 +4964,18 @@ ember-auto-import@1.5.3, ember-auto-import@^1.2.15, ember-auto-import@^1.2.19:
|
|||||||
walk-sync "^0.3.3"
|
walk-sync "^0.3.3"
|
||||||
webpack "~4.28"
|
webpack "~4.28"
|
||||||
|
|
||||||
ember-basic-dropdown@^1.1.0, ember-basic-dropdown@^1.1.2:
|
ember-basic-dropdown@^2.0.13, ember-basic-dropdown@^2.0.4:
|
||||||
version "1.1.3"
|
version "2.0.13"
|
||||||
resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-1.1.3.tgz#0506045ccc60db4972fc78b963c1324f6415818a"
|
resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-2.0.13.tgz#f081496a9e50f855ad58e614fe96a4abb06cb254"
|
||||||
integrity sha512-zIFk5yzu31L4E5lz3DfXF1IGGMcMAGYssh7hCoemjB7iqkL7Sf1UhUg/yEHcr5aEdfyGc1V3G2s740cRY+VLiQ==
|
integrity sha512-FaUIFjuy/Qg/5r+cev/IRiUabsztVNpMbk7YypsHXYrty8xkfpRNIrRB2DWfzRR0LcpjDiSevyAPvze+S70Xhw==
|
||||||
dependencies:
|
dependencies:
|
||||||
ember-cli-babel "^7.2.0"
|
"@ember-decorators/component" "^6.1.0"
|
||||||
ember-cli-htmlbars "^3.0.1"
|
"@ember/render-modifiers" "^1.0.2"
|
||||||
ember-maybe-in-element "^0.2.0"
|
ember-cli-babel "^7.11.0"
|
||||||
|
ember-cli-htmlbars "^4.0.8"
|
||||||
|
ember-element-helper "^0.2.0"
|
||||||
|
ember-maybe-in-element "^0.4.0"
|
||||||
|
ember-truth-helpers "2.1.0"
|
||||||
|
|
||||||
ember-cli-app-version@3.2.0:
|
ember-cli-app-version@3.2.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
@ -4971,7 +4990,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac"
|
resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac"
|
||||||
integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA==
|
integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA==
|
||||||
|
|
||||||
ember-cli-babel@7.13.2, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.2.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0:
|
ember-cli-babel@7.13.2, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0:
|
||||||
version "7.13.2"
|
version "7.13.2"
|
||||||
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.13.2.tgz#6b6f4d508cc3bb300c5711d3d02c59ba80f0f686"
|
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.13.2.tgz#6b6f4d508cc3bb300c5711d3d02c59ba80f0f686"
|
||||||
integrity sha512-VH2tMXaRFkbQEyVJnxUtAyta5bAKjtcLwJ4lStW/iRk/NIlNFNJh1uOd7uL9H9Vm0f4/xR7Mc0Q7ND9ezKOo+A==
|
integrity sha512-VH2tMXaRFkbQEyVJnxUtAyta5bAKjtcLwJ4lStW/iRk/NIlNFNJh1uOd7uL9H9Vm0f4/xR7Mc0Q7ND9ezKOo+A==
|
||||||
@ -5128,7 +5147,7 @@ ember-cli-htmlbars-inline-precompile@^2.1.0:
|
|||||||
heimdalljs-logger "^0.1.9"
|
heimdalljs-logger "^0.1.9"
|
||||||
silent-error "^1.1.0"
|
silent-error "^1.1.0"
|
||||||
|
|
||||||
ember-cli-htmlbars@4.2.1:
|
ember-cli-htmlbars@4.2.1, ember-cli-htmlbars@^4.0.8:
|
||||||
version "4.2.1"
|
version "4.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.2.1.tgz#c74c5deba6025c8e80d84289a88901073e1ca1f7"
|
resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.2.1.tgz#c74c5deba6025c8e80d84289a88901073e1ca1f7"
|
||||||
integrity sha512-jZ9LYO4R6ieYC5Bcei4RWbK2/SY0LDQ5cUIyt9YQpN/VU7A9G+es9w7FJYfHtDD+TxvaXDKMuXAeBwOz+mZKPA==
|
integrity sha512-jZ9LYO4R6ieYC5Bcei4RWbK2/SY0LDQ5cUIyt9YQpN/VU7A9G+es9w7FJYfHtDD+TxvaXDKMuXAeBwOz+mZKPA==
|
||||||
@ -5507,7 +5526,7 @@ ember-composable-helpers@3.0.3:
|
|||||||
ember-cli-babel "^7.1.0"
|
ember-cli-babel "^7.1.0"
|
||||||
resolve "^1.10.0"
|
resolve "^1.10.0"
|
||||||
|
|
||||||
ember-concurrency@1.1.4, "ember-concurrency@^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0":
|
ember-concurrency@1.1.4, "ember-concurrency@^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0 || ^1.1.0", ember-concurrency@^1.0.0:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.1.4.tgz#ee8eb773e4b426d0d720410e33d1082f3218ac66"
|
resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.1.4.tgz#ee8eb773e4b426d0d720410e33d1082f3218ac66"
|
||||||
integrity sha512-wA5TBTtuEsWnpDXsaC4UIfr0eLyw/mGxAor7eRp4i4uWKPGL3Tf0BWu2Zl19vuX5eCucdsXlpdhjcdd/tR7WKQ==
|
integrity sha512-wA5TBTtuEsWnpDXsaC4UIfr0eLyw/mGxAor7eRp4i4uWKPGL3Tf0BWu2Zl19vuX5eCucdsXlpdhjcdd/tR7WKQ==
|
||||||
@ -5556,6 +5575,13 @@ ember-drag-drop@0.4.8:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ember-cli-babel "^6.6.0"
|
ember-cli-babel "^6.6.0"
|
||||||
|
|
||||||
|
ember-element-helper@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.2.0.tgz#eacdf4d8507d6708812623206e24ad37bad487e7"
|
||||||
|
integrity sha512-/WV0PNLyxDvLX/YETb/8KICFTr719OYqFWXqV5XUkh9YhhBGDU/mr1OtlQaWOlsx+sHm42HD2UAICecqex8ziw==
|
||||||
|
dependencies:
|
||||||
|
ember-cli-babel "^6.16.0"
|
||||||
|
|
||||||
ember-exam@4.0.9:
|
ember-exam@4.0.9:
|
||||||
version "4.0.9"
|
version "4.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/ember-exam/-/ember-exam-4.0.9.tgz#a3a9a85647654549490e73365adb9f64ce9c285f"
|
resolved "https://registry.yarnpkg.com/ember-exam/-/ember-exam-4.0.9.tgz#a3a9a85647654549490e73365adb9f64ce9c285f"
|
||||||
@ -5706,10 +5732,10 @@ ember-maybe-import-regenerator@^0.1.6:
|
|||||||
ember-cli-babel "^6.0.0-beta.4"
|
ember-cli-babel "^6.0.0-beta.4"
|
||||||
regenerator-runtime "^0.9.5"
|
regenerator-runtime "^0.9.5"
|
||||||
|
|
||||||
ember-maybe-in-element@^0.2.0:
|
ember-maybe-in-element@^0.4.0:
|
||||||
version "0.2.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.2.0.tgz#9ac51cbbd9d83d6230ad996c11e33f0eca3032e0"
|
resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.4.0.tgz#fe1994c60ee64527d2b2f3b4479ebf8806928bd8"
|
||||||
integrity sha512-R5e6N8yDbfNbA/3lMZsFs2KEzv/jt80TsATiKMCqdqKuSG82KrD25cRdU5VkaE8dTQbziyBeuJs90bBiqOnakQ==
|
integrity sha512-ADQ9jewz46Y2MWiTAKrheIukHiU6p0QHn3xqz1BBDDOmubW1WdAjSrvtkEWsJQ08DyxIn3RdMuNDzAUo6HN6qw==
|
||||||
dependencies:
|
dependencies:
|
||||||
ember-cli-babel "^7.1.0"
|
ember-cli-babel "^7.1.0"
|
||||||
|
|
||||||
@ -5762,36 +5788,41 @@ ember-power-calendar-moment@0.1.7:
|
|||||||
ember-cli-babel "^7.7.3"
|
ember-cli-babel "^7.7.3"
|
||||||
ember-cli-moment-shim "^3.7.1"
|
ember-cli-moment-shim "^3.7.1"
|
||||||
|
|
||||||
ember-power-calendar@^0.13.3:
|
ember-power-calendar@^0.14.1:
|
||||||
version "0.13.3"
|
version "0.14.5"
|
||||||
resolved "https://registry.yarnpkg.com/ember-power-calendar/-/ember-power-calendar-0.13.3.tgz#daff0f668ffbe65fd59c479aa5569e58c59daafd"
|
resolved "https://registry.yarnpkg.com/ember-power-calendar/-/ember-power-calendar-0.14.5.tgz#6d3ed1cafcbcb3c945ab70bbcebeb875059030bf"
|
||||||
integrity sha512-xgXEHke4yzjZ9VUkQ/Cgd5c/lAUtl8chQilKDx7FMV+1z7/uLi9hxG56e1NHHbwEI9KBUPtO+pimuPqbZ3DzEg==
|
integrity sha512-SbFp8mLpoqxiGphIidZR+q4Za7aqJhMAkuw0piU/qBksC/OtQZDL0i5V1bti4yD90aI2I6IlOuHFyod9LQ7Gkg==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@ember-decorators/component" "^6.0.0"
|
||||||
ember-assign-helper "^0.2.0"
|
ember-assign-helper "^0.2.0"
|
||||||
ember-cli-babel "^7.2.0"
|
ember-cli-babel "^7.7.3"
|
||||||
ember-cli-element-closest-polyfill "^0.0.1"
|
ember-cli-element-closest-polyfill "^0.0.1"
|
||||||
ember-cli-htmlbars "^3.0.1"
|
ember-cli-htmlbars "^3.1.0"
|
||||||
ember-concurrency "^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0"
|
ember-concurrency "^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0 || ^1.1.0"
|
||||||
|
ember-element-helper "^0.2.0"
|
||||||
|
ember-truth-helpers "^2.1.0"
|
||||||
|
|
||||||
ember-power-datepicker@0.6.2:
|
ember-power-datepicker@0.7.1:
|
||||||
version "0.6.2"
|
version "0.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/ember-power-datepicker/-/ember-power-datepicker-0.6.2.tgz#5fd2da3b3871787fee825ac51cdc6d5bf7148607"
|
resolved "https://registry.yarnpkg.com/ember-power-datepicker/-/ember-power-datepicker-0.7.1.tgz#64c2b3a5bde860aea0101e7a0d9317b00930a1d2"
|
||||||
integrity sha512-pE6ntPAQUlQRbymQyLzxrufmQUEwBMUTZ+BMYnihWjIAJWPMaqXagBwhVnfZ65N/KSXF3IylFuLitgsri4lUHg==
|
integrity sha512-vewFUXagd2kFRMV7KAE4ir9iO2IieTHdi6tS1SENyF6s1Vajece0M4ytHxSolixoFCWwblzyDugRFG3nOEN4fg==
|
||||||
dependencies:
|
dependencies:
|
||||||
ember-basic-dropdown "^1.1.2"
|
"@ember-decorators/component" "^6.0.0"
|
||||||
|
ember-basic-dropdown "^2.0.4"
|
||||||
ember-cli-babel "^7.8.0"
|
ember-cli-babel "^7.8.0"
|
||||||
ember-cli-htmlbars "^3.1.0"
|
ember-cli-htmlbars "^3.1.0"
|
||||||
ember-power-calendar "^0.13.3"
|
ember-power-calendar "^0.14.1"
|
||||||
|
|
||||||
ember-power-select@2.3.5:
|
ember-power-select@3.0.6:
|
||||||
version "2.3.5"
|
version "3.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-2.3.5.tgz#c702d5cf5b2c6c2fd422f0a8253e982cecbdd048"
|
resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-3.0.6.tgz#97dcbaf04e6afd9bd4c75cbb150c3a8d5fe50fec"
|
||||||
integrity sha512-75QJklWSthm9gedcbpKC0ZALaQXEfKlIRRy5pb87GsXcykFn0rBgxlnGsITWO+IX9u2V0oojQPorIa/ZYKVd3Q==
|
integrity sha512-osS+fbwfaxPo5RCCKDOWzJfaNc+toMmg3MMGmLz3h73Uqd3burRSUBo3DAkEHyYVHCy+oMas4+eZtRcjUrLWjg==
|
||||||
dependencies:
|
dependencies:
|
||||||
ember-basic-dropdown "^1.1.0"
|
"@ember-decorators/component" "^6.1.0"
|
||||||
ember-cli-babel "^7.7.3"
|
ember-basic-dropdown "^2.0.13"
|
||||||
ember-cli-htmlbars "^3.0.1"
|
ember-cli-babel "^7.11.0"
|
||||||
ember-concurrency "^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0"
|
ember-cli-htmlbars "^3.1.0"
|
||||||
|
ember-concurrency "^1.0.0"
|
||||||
ember-text-measurer "^0.5.0"
|
ember-text-measurer "^0.5.0"
|
||||||
ember-truth-helpers "^2.1.0"
|
ember-truth-helpers "^2.1.0"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user