mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 21:58:34 +08:00
72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
|
import { ajax } from 'discourse/lib/ajax';
|
|
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
|
import { observes } from 'ember-addons/ember-computed-decorators';
|
|
|
|
export default Ember.Controller.extend(ModalFunctionality, {
|
|
local: Ember.computed.equal('selection', 'local'),
|
|
remote: Ember.computed.equal('selection', 'remote'),
|
|
selection: 'local',
|
|
adminCustomizeThemes: Ember.inject.controller(),
|
|
loading: false,
|
|
keyGenUrl: '/admin/themes/generate_key_pair',
|
|
importUrl: '/admin/themes/import',
|
|
|
|
checkPrivate: Ember.computed.match('uploadUrl', /^git/),
|
|
|
|
@observes('privateChecked')
|
|
privateWasChecked() {
|
|
const checked = this.get('privateChecked');
|
|
if (checked && !this._keyLoading) {
|
|
this._keyLoading = true;
|
|
ajax(this.get('keyGenUrl'), {method: 'POST'})
|
|
.then(pair => {
|
|
this.set('privateKey', pair.private_key);
|
|
this.set('publicKey', pair.public_key);
|
|
})
|
|
.catch(popupAjaxError)
|
|
.finally(()=>{
|
|
this._keyLoading = false;
|
|
});
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
importTheme() {
|
|
|
|
let options = {
|
|
type: 'POST'
|
|
};
|
|
|
|
if (this.get('local')) {
|
|
options.processData = false;
|
|
options.contentType = false;
|
|
options.data = new FormData();
|
|
options.data.append('theme', $('#file-input')[0].files[0]);
|
|
} else {
|
|
options.data = {
|
|
remote: this.get('uploadUrl')
|
|
};
|
|
|
|
if (this.get('privateChecked')){
|
|
options.data.private_key = this.get('privateKey');
|
|
}
|
|
}
|
|
|
|
this.set('loading', true);
|
|
ajax(this.get('importUrl'), options).then(result=>{
|
|
const theme = this.store.createRecord('theme',result.theme);
|
|
this.get('adminCustomizeThemes').send('addTheme', theme);
|
|
this.send('closeModal');
|
|
})
|
|
.then(()=>{
|
|
this.set('privateKey', null);
|
|
this.set('publicKey', null);
|
|
})
|
|
.catch(popupAjaxError)
|
|
.finally(() => this.set('loading', false));
|
|
|
|
}
|
|
}
|
|
});
|