mirror of
https://github.com/ansible/awx.git
synced 2026-02-25 23:16:01 -03:30
Add support for drag/drop to key formatted textareas
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.at-Input-button {
|
.at-Input-button {
|
||||||
width: @at-input-button-width;
|
min-width: @at-input-button-width;
|
||||||
display: block;
|
display: block;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
@@ -56,7 +56,6 @@
|
|||||||
z-index: 3;
|
z-index: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.at-InputGroup {
|
.at-InputGroup {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
@@ -16,7 +16,9 @@
|
|||||||
ng-attr-tabindex="{{ tab || undefined }}"
|
ng-attr-tabindex="{{ tab || undefined }}"
|
||||||
ng-disabled="state._disabled || form.disabled"
|
ng-disabled="state._disabled || form.disabled"
|
||||||
ng-change="vm.updateDisplayModel()"
|
ng-change="vm.updateDisplayModel()"
|
||||||
ng-options="{{ state._exp }}"></select>
|
ng-options="{{ state._exp }}">
|
||||||
|
<option style="display:none"></option>
|
||||||
|
</select>
|
||||||
|
|
||||||
<i class="fa" ng-class="{ 'fa-chevron-down': !open, 'fa-chevron-up': open }"></i>
|
<i class="fa" ng-class="{ 'fa-chevron-down': !open, 'fa-chevron-up': open }"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ function AtInputTextareaSecretController (baseInputController, eventService) {
|
|||||||
|
|
||||||
let scope;
|
let scope;
|
||||||
let textarea;
|
let textarea;
|
||||||
|
let container;
|
||||||
let input;
|
let input;
|
||||||
|
|
||||||
vm.init = (_scope_, element, form) => {
|
vm.init = (_scope_, element, form) => {
|
||||||
@@ -23,60 +24,63 @@ function AtInputTextareaSecretController (baseInputController, eventService) {
|
|||||||
|
|
||||||
scope = _scope_;
|
scope = _scope_;
|
||||||
textarea = element.find('textarea')[0];
|
textarea = element.find('textarea')[0];
|
||||||
|
container = element[0];
|
||||||
|
|
||||||
|
scope.pre = {};
|
||||||
|
scope.state._edit = true;
|
||||||
|
|
||||||
if (scope.state.format === 'ssh_private_key') {
|
if (scope.state.format === 'ssh_private_key') {
|
||||||
scope.ssh = true;
|
scope.ssh = true;
|
||||||
scope.state._hint = scope.state._hint || DEFAULT_HINT;
|
scope.state._hint = scope.state._hint || DEFAULT_HINT;
|
||||||
input = element.find('input')[0];
|
input = element.find('input')[0];
|
||||||
vm.setFileListeners(textarea, input);
|
vm.setFileListeners(textarea, input);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (scope.state._edit) {
|
||||||
|
scope.edit = true;
|
||||||
scope.isShown = true;
|
scope.isShown = true;
|
||||||
scope.buttonText = 'HIDE';
|
scope.buttonText = 'REPLACE';
|
||||||
}
|
}
|
||||||
|
|
||||||
vm.check();
|
vm.check();
|
||||||
};
|
};
|
||||||
|
|
||||||
vm.setFileListeners = (textarea, input) => {
|
vm.setFileListeners = (textarea, input) => {
|
||||||
textarea
|
|
||||||
let eventNames = [
|
|
||||||
'drag',
|
|
||||||
'dragstart',
|
|
||||||
'dragend',
|
|
||||||
'dragover',
|
|
||||||
'dragenter',
|
|
||||||
'dragleave',
|
|
||||||
'drop'
|
|
||||||
];
|
|
||||||
|
|
||||||
eventService.addListener(textarea, 'dragenter', event => {
|
eventService.addListener(textarea, 'dragenter', event => {
|
||||||
console.log('enter');
|
|
||||||
scope.drag = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
eventService.addListener(input, ['dragleave', 'dragover'], event => {
|
|
||||||
console.log('exit');
|
|
||||||
scope.drag = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
eventService.addListener(input, 'drop', event => {
|
|
||||||
vm.readFile(event.originalEvent.dataTransfer.files);
|
|
||||||
});
|
|
||||||
|
|
||||||
eventService.addListener(input, eventNames, event => {
|
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
event.preventDefault();
|
||||||
|
scope.$apply(() => scope.drag = true);
|
||||||
|
});
|
||||||
|
|
||||||
|
eventService.addListener(input, 'dragleave', event => {
|
||||||
|
event.stopPropagation();
|
||||||
|
event.preventDefault();
|
||||||
|
scope.$apply(() => scope.drag = false);
|
||||||
|
});
|
||||||
|
|
||||||
|
eventService.addListener(input, 'change', event => {
|
||||||
|
let reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = () => vm.readFile(reader, event);
|
||||||
|
reader.readAsText(input.files[0]);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
vm.readFile = () => {
|
vm.readFile = (reader, event) => {
|
||||||
console.log(file);
|
scope.$apply(() => {
|
||||||
|
scope.state._value = reader.result;
|
||||||
|
scope.drag = false
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
vm.toggle = () => {
|
vm.toggle = () => {
|
||||||
if (scope.isShown) {
|
if (scope.isShown) {
|
||||||
scope.buttonText = 'SHOW';
|
scope.buttonText = 'REVERT';
|
||||||
|
scope.pre.value = scope.state._value;
|
||||||
|
scope.state._value = undefined;
|
||||||
} else {
|
} else {
|
||||||
scope.buttonText = 'HIDE';
|
scope.state._value = scope.pre.value;
|
||||||
|
scope.buttonText = 'REPLACE';
|
||||||
}
|
}
|
||||||
|
|
||||||
scope.isShown = !scope.isShown;
|
scope.isShown = !scope.isShown;
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
<div class="form-group at-u-flat">
|
<div class="form-group at-u-flat">
|
||||||
<at-input-label></at-input-label>
|
<at-input-label></at-input-label>
|
||||||
|
|
||||||
<div class="input-group">
|
<div ng-class="{ 'input-group': edit }">
|
||||||
<span class="input-group-btn at-InputGroup-button">
|
<span ng-if="edit" class="input-group-btn at-InputGroup-button">
|
||||||
<button class="btn at-ButtonHollow--white at-Input-button"
|
<button ng-if="edit"
|
||||||
|
class="btn at-ButtonHollow--white at-Input-button"
|
||||||
ng-disabled="state._disabled || form.disabled"
|
ng-disabled="state._disabled || form.disabled"
|
||||||
ng-click="vm.toggle()">
|
ng-click="vm.toggle()">
|
||||||
{{ buttonText }}
|
{{ buttonText }}
|
||||||
|
|||||||
Reference in New Issue
Block a user