mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-04 08:54:36 +03:00
bf599cef74
closes https://github.com/TryGhost/Ghost/issues/9147 - change the keymaster scope when the unsplash search input has focus so the route's registered shortcuts aren't accidentally triggered
103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
/* global key */
|
|
import Component from '@ember/component';
|
|
import ShortcutsMixin from 'ghost-admin/mixins/shortcuts';
|
|
import {bind} from '@ember/runloop';
|
|
import {or} from '@ember/object/computed';
|
|
import {inject as service} from '@ember/service';
|
|
|
|
const ONE_COLUMN_WIDTH = 540;
|
|
const TWO_COLUMN_WIDTH = 940;
|
|
|
|
export default Component.extend(ShortcutsMixin, {
|
|
resizeDetector: service(),
|
|
unsplash: service(),
|
|
ui: service(),
|
|
|
|
shortcuts: null,
|
|
tagName: '',
|
|
zoomedPhoto: null,
|
|
|
|
// closure actions
|
|
close() {},
|
|
insert() {},
|
|
|
|
sideNavHidden: or('ui.{autoNav,isFullScreen,showMobileMenu}'),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
this.shortcuts = {
|
|
escape: {action: 'handleEscape', scope: 'all'}
|
|
};
|
|
},
|
|
|
|
didInsertElement() {
|
|
this._super(...arguments);
|
|
this._resizeCallback = bind(this, this._handleResize);
|
|
this.get('resizeDetector').setup('.gh-unsplash', this._resizeCallback);
|
|
this.registerShortcuts();
|
|
},
|
|
|
|
willDestroyElement() {
|
|
this.get('resizeDetector').teardown('.gh-unsplash', this._resizeCallback);
|
|
this.removeShortcuts();
|
|
this.send('resetKeyScope');
|
|
this._super(...arguments);
|
|
},
|
|
|
|
actions: {
|
|
loadNextPage() {
|
|
this.get('unsplash').loadNextPage();
|
|
},
|
|
|
|
zoomPhoto(photo) {
|
|
this.set('zoomedPhoto', photo);
|
|
},
|
|
|
|
closeZoom() {
|
|
this.set('zoomedPhoto', null);
|
|
},
|
|
|
|
insert(photo) {
|
|
this.get('unsplash').triggerDownload(photo);
|
|
this.insert(photo);
|
|
this.close();
|
|
},
|
|
|
|
close() {
|
|
this.close();
|
|
},
|
|
|
|
retry() {
|
|
this.get('unsplash').retryLastRequest();
|
|
},
|
|
|
|
setKeyScope() {
|
|
key.setScope('unsplash');
|
|
},
|
|
|
|
resetKeyScope() {
|
|
key.setScope('default');
|
|
},
|
|
|
|
handleEscape() {
|
|
if (!this.get('zoomedPhoto')) {
|
|
this.close();
|
|
}
|
|
}
|
|
},
|
|
|
|
_handleResize(element) {
|
|
let width = element.clientWidth;
|
|
let columns = 3;
|
|
|
|
if (width <= ONE_COLUMN_WIDTH) {
|
|
columns = 1;
|
|
} else if (width <= TWO_COLUMN_WIDTH) {
|
|
columns = 2;
|
|
}
|
|
|
|
this.get('unsplash').changeColumnCount(columns);
|
|
}
|
|
});
|