Files
awx/awx/ui/client/lib/components/input/textarea-secret.directive.js
gconsidine 727568c80d Add translation for components and credentials
* Add typeahead feature of the Lookup component
2017-06-29 17:34:43 -04:00

120 lines
3.4 KiB
JavaScript

function atInputTextareaSecretLink (scope, element, attrs, controllers) {
let formController = controllers[0];
let inputController = controllers[1];
if (scope.tab === '1') {
element.find('textarea')[0].focus();
}
inputController.init(scope, element, formController);
}
function AtInputTextareaSecretController (baseInputController, eventService) {
let vm = this || {};
let scope;
let textarea;
let container;
let input;
vm.init = (_scope_, element, form) => {
baseInputController.call(vm, 'input', _scope_, element, form);
scope = _scope_;
textarea = element.find('textarea')[0];
container = element[0];
if (scope.state.format === 'ssh_private_key') {
scope.ssh = true;
scope.state._hint = scope.state._hint || vm.strings.components.textarea.SSH_KEY_HINT;
input = element.find('input')[0];
}
if (scope.state._value) {
scope.state._buttonText = vm.strings.components.REPLACE;
scope.state._placeholder = vm.strings.components.ENCRYPTED;
} else {
if (scope.state.format === 'ssh_private_key') {
vm.listeners = vm.setFileListeners(textarea, input);
scope.state._displayHint = true;
}
}
vm.check();
};
vm.toggle = () => {
vm.toggleRevertReplace();
if (scope.state._isBeingReplaced) {
scope.state._placeholder = '';
scope.state._displayHint = true;
vm.listeners = vm.setFileListeners(textarea, input);
} else {
scope.state._displayHint = false;
scope.state._placeholder = vm.strings.components.ENCRYPTED;
eventService.remove(vm.listeners);
}
};
vm.setFileListeners = (textarea, input) => {
return eventService.addListeners([
[textarea, 'dragenter', event => {
event.stopPropagation();
event.preventDefault();
scope.$apply(() => scope.drag = true);
}],
[input, 'dragleave', event => {
event.stopPropagation();
event.preventDefault();
scope.$apply(() => scope.drag = false);
}],
[input, 'change', event => {
let reader = new FileReader();
reader.onload = () => vm.readFile(reader, event);
reader.readAsText(input.files[0]);
}]
]);
};
vm.readFile = (reader, event) => {
scope.$apply(() => {
scope.state._value = reader.result;
vm.check();
scope.drag = false
input.value = '';
});
};
}
AtInputTextareaSecretController.$inject = [
'BaseInputController',
'EventService',
'ComponentsStrings'
];
function atInputTextareaSecret (pathService) {
return {
restrict: 'E',
transclude: true,
replace: true,
require: ['^^atForm', 'atInputTextareaSecret'],
templateUrl: pathService.getPartialPath('components/input/textarea-secret'),
controller: AtInputTextareaSecretController,
controllerAs: 'vm',
link: atInputTextareaSecretLink,
scope: {
state: '=',
col: '@',
tab: '@'
}
};
}
atInputTextareaSecret.$inject = ['PathService'];
export default atInputTextareaSecret;