mirror of
https://github.com/ansible/awx.git
synced 2026-02-21 21:20:08 -03:30
87 lines
3.4 KiB
JavaScript
87 lines
3.4 KiB
JavaScript
/*********************************************
|
|
* Copyright (c) 2014 AnsibleWorks, Inc.
|
|
*
|
|
* ParseHelper
|
|
*/
|
|
/**
|
|
* @ngdoc function
|
|
* @name helpers.function:Parse
|
|
* @description
|
|
* Show the CodeMirror variable editor and allow
|
|
* toggle between JSON and YAML
|
|
*
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
angular.module('ParseHelper', ['Utilities', 'AngularCodeMirrorModule'])
|
|
.factory('ParseTypeChange', ['Alert', 'AngularCodeMirror', function (Alert, AngularCodeMirror) {
|
|
return function (params) {
|
|
|
|
var scope = params.scope,
|
|
field_id = params.field_id,
|
|
fld = (params.variable) ? params.variable : 'variables',
|
|
pfld = (params.parse_variable) ? params.parse_variable : 'parseType',
|
|
onReady = params.onReady,
|
|
onChange = params.onChange;
|
|
|
|
function removeField() {
|
|
//set our model to the last change in CodeMirror and then destroy CodeMirror
|
|
scope[fld] = scope.codeMirror.getValue();
|
|
scope.codeMirror.destroy();
|
|
}
|
|
|
|
function createField(onChange, onReady) {
|
|
//hide the textarea and show a fresh CodeMirror with the current mode (json or yaml)
|
|
scope.codeMirror = AngularCodeMirror();
|
|
scope.codeMirror.addModes($AnsibleConfig.variable_edit_modes);
|
|
scope.codeMirror.showTextArea({ scope: scope, model: fld, element: field_id, mode: scope[pfld], onReady: onReady, onChange: onChange });
|
|
}
|
|
|
|
// Hide the textarea and show a CodeMirror editor
|
|
createField(onChange, onReady);
|
|
|
|
|
|
// Toggle displayed variable string between JSON and YAML
|
|
scope.parseTypeChange = function() {
|
|
var json_obj;
|
|
if (scope[pfld] === 'json') {
|
|
// converting yaml to json
|
|
try {
|
|
removeField();
|
|
json_obj = jsyaml.load(scope[fld]);
|
|
if ($.isEmptyObject(json_obj)) {
|
|
scope[fld] = "{}";
|
|
}
|
|
else {
|
|
scope[fld] = JSON.stringify(json_obj, null, " ");
|
|
}
|
|
createField();
|
|
}
|
|
catch (e) {
|
|
Alert('Parse Error', 'Failed to parse valid YAML. ' + e.message);
|
|
setTimeout( function() { scope.$apply( function() { scope[pfld] = 'yaml'; createField(); }); }, 500);
|
|
}
|
|
}
|
|
else {
|
|
// convert json to yaml
|
|
try {
|
|
removeField();
|
|
json_obj = JSON.parse(scope[fld]);
|
|
if ($.isEmptyObject(json_obj)) {
|
|
scope[fld] = '---';
|
|
}
|
|
else {
|
|
scope[fld] = jsyaml.safeDump(json_obj);
|
|
}
|
|
createField();
|
|
}
|
|
catch (e) {
|
|
Alert('Parse Error', 'Failed to parse valid JSON. ' + e.message);
|
|
setTimeout( function() { scope.$apply( function() { scope[pfld] = 'json'; createField(); }); }, 500 );
|
|
}
|
|
}
|
|
};
|
|
};
|
|
}
|
|
]); |