mirror of https://github.com/rancher/ui.git
88 lines
1.8 KiB
JavaScript
88 lines
1.8 KiB
JavaScript
import { isArray } from '@ember/array';
|
|
import TextField from '@ember/component/text-field';
|
|
import ShellQuote from 'npm:shell-quote'
|
|
import layout from './template';
|
|
|
|
export const OPS = ['||','&&',';;','|&','&',';','(',')','|','<','>'];
|
|
export function reop(xs) {
|
|
return xs.map(function(s) {
|
|
if ( OPS.includes(s) ) {
|
|
return {op: s};
|
|
} else {
|
|
return s;
|
|
}
|
|
});
|
|
}
|
|
|
|
export function unparse(xs) {
|
|
return xs.map(function (s) {
|
|
if (s && typeof s === 'object') {
|
|
if (s.hasOwnProperty('pattern')) {
|
|
return '"' + s.pattern + '"';
|
|
} else {
|
|
return s.op;
|
|
}
|
|
}
|
|
else if (/["\s]/.test(s) && !/'/.test(s)) {
|
|
return "'" + s.replace(/(['\\])/g, '\\$1') + "'";
|
|
}
|
|
else if (/["'\s]/.test(s)) {
|
|
return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
|
|
}
|
|
else {
|
|
return String(s).replace(/([\\$`()!#&*|])/g, '\\$1');
|
|
}
|
|
}).join(' ');
|
|
}
|
|
|
|
|
|
export default TextField.extend({
|
|
layout,
|
|
type: 'text',
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
let initial = this.get('initialValue')||'';
|
|
if ( isArray(initial) )
|
|
{
|
|
this.set('value', unparse(reop(initial)));
|
|
}
|
|
else
|
|
{
|
|
this.set('value', initial);
|
|
}
|
|
},
|
|
|
|
valueChanged: function() {
|
|
let out = ShellQuote.parse(this.get('value')||'').map(function(piece) {
|
|
if ( typeof piece === 'object' && piece )
|
|
{
|
|
if ( piece.pattern )
|
|
{
|
|
return piece.pattern;
|
|
}
|
|
else if ( piece.op )
|
|
{
|
|
return piece.op;
|
|
}
|
|
else
|
|
{
|
|
return '';
|
|
}
|
|
}
|
|
|
|
return piece;
|
|
});
|
|
|
|
if ( out.length )
|
|
{
|
|
this.sendAction('changed', out);
|
|
}
|
|
else
|
|
{
|
|
this.sendAction('changed', null);
|
|
}
|
|
}.observes('value'),
|
|
});
|