Remove magic flags from files_external backend params

This commit is contained in:
Robin Appelman 2016-02-01 17:44:58 +01:00
parent 2d1d89ee29
commit f4e1a1677b
4 changed files with 83 additions and 47 deletions

View File

@ -587,6 +587,19 @@ MountOptionsDropdown.prototype = {
var MountConfigListView = function($el, options) { var MountConfigListView = function($el, options) {
this.initialize($el, options); this.initialize($el, options);
}; };
MountConfigListView.ParameterFlags = {
OPTIONAL: 1,
USER_PROVIDED: 2
};
MountConfigListView.ParameterTypes = {
TEXT: 0,
BOOLEAN: 1,
PASSWORD: 2,
HIDDEN: 3
};
/** /**
* @memberOf OCA.External.Settings * @memberOf OCA.External.Settings
*/ */
@ -961,16 +974,15 @@ MountConfigListView.prototype = _.extend({
*/ */
writeParameterInput: function($td, parameter, placeholder, classes) { writeParameterInput: function($td, parameter, placeholder, classes) {
var hasFlag = function(flag) { var hasFlag = function(flag) {
return placeholder.indexOf(flag) !== -1; return (placeholder.flags & flag) === flag;
}; };
classes = $.isArray(classes) ? classes : []; classes = $.isArray(classes) ? classes : [];
classes.push('added'); classes.push('added');
if (placeholder.indexOf('&') === 0) { if (hasFlag(MountConfigListView.ParameterFlags.OPTIONAL)) {
classes.push('optional'); classes.push('optional');
placeholder = placeholder.substring(1);
} }
if (hasFlag('@')) { if (hasFlag(MountConfigListView.ParameterFlags.USER_PROVIDED)) {
if (this._isPersonal) { if (this._isPersonal) {
classes.push('user_provided'); classes.push('user_provided');
} else { } else {
@ -980,17 +992,13 @@ MountConfigListView.prototype = _.extend({
var newElement; var newElement;
var trimmedPlaceholder = placeholder; var trimmedPlaceholder = placeholder.value;
var flags = ['@', '*', '!', '#', '&']; // used to determine what kind of parameter if (placeholder.type === MountConfigListView.ParameterTypes.PASSWORD) {
while(flags.indexOf(trimmedPlaceholder[0]) !== -1) {
trimmedPlaceholder = trimmedPlaceholder.substr(1);
}
if (hasFlag('*')) {
newElement = $('<input type="password" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" placeholder="'+ trimmedPlaceholder+'" />'); newElement = $('<input type="password" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" placeholder="'+ trimmedPlaceholder+'" />');
} else if (hasFlag('!')) { } else if (placeholder.type === MountConfigListView.ParameterTypes.BOOLEAN) {
var checkboxId = _.uniqueId('checkbox_'); var checkboxId = _.uniqueId('checkbox_');
newElement = $('<input type="checkbox" id="'+checkboxId+'" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" /><label for="'+checkboxId+'">'+ trimmedPlaceholder+'</label>'); newElement = $('<input type="checkbox" id="'+checkboxId+'" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" /><label for="'+checkboxId+'">'+ trimmedPlaceholder+'</label>');
} else if (hasFlag('#')) { } else if (placeholder.type === MountConfigListView.ParameterTypes.HIDDEN) {
newElement = $('<input type="hidden" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" />'); newElement = $('<input type="hidden" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" />');
} else { } else {
newElement = $('<input type="text" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" placeholder="'+ trimmedPlaceholder+'" />'); newElement = $('<input type="text" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" placeholder="'+ trimmedPlaceholder+'" />');

View File

@ -131,27 +131,11 @@ class DefinitionParameter implements \JsonSerializable {
* @return string * @return string
*/ */
public function jsonSerialize() { public function jsonSerialize() {
$prefix = ''; return [
switch ($this->getType()) { 'value' => $this->getText(),
case self::VALUE_BOOLEAN: 'flags' => $this->getFlags(),
$prefix = '!'; 'type' => $this->getType()
break; ];
case self::VALUE_PASSWORD:
$prefix = '*';
break;
case self::VALUE_HIDDEN:
$prefix = '#';
break;
}
if ($this->isFlagSet(self::FLAG_OPTIONAL)) {
$prefix = '&' . $prefix;
}
if ($this->isFlagSet(self::FLAG_USER_PROVIDED)) {
$prefix = '@' . $prefix;
}
return $prefix . $this->getText();
} }
public function isOptional() { public function isOptional() {

View File

@ -27,18 +27,34 @@ class DefinitionParameterTest extends \Test\TestCase {
public function testJsonSerialization() { public function testJsonSerialization() {
$param = new Param('foo', 'bar'); $param = new Param('foo', 'bar');
$this->assertEquals('bar', $param->jsonSerialize()); $this->assertEquals([
'value' => 'bar',
'flags' => 0,
'type' => 0
], $param->jsonSerialize());
$param->setType(Param::VALUE_BOOLEAN); $param->setType(Param::VALUE_BOOLEAN);
$this->assertEquals('!bar', $param->jsonSerialize()); $this->assertEquals([
'value' => 'bar',
'flags' => 0,
'type' => Param::VALUE_BOOLEAN
], $param->jsonSerialize());
$param->setType(Param::VALUE_PASSWORD); $param->setType(Param::VALUE_PASSWORD);
$param->setFlag(Param::FLAG_OPTIONAL); $param->setFlag(Param::FLAG_OPTIONAL);
$this->assertEquals('&*bar', $param->jsonSerialize()); $this->assertEquals([
'value' => 'bar',
'flags' => Param::FLAG_OPTIONAL,
'type' => Param::VALUE_PASSWORD
], $param->jsonSerialize());
$param->setType(Param::VALUE_HIDDEN); $param->setType(Param::VALUE_HIDDEN);
$param->setFlags(Param::FLAG_NONE); $param->setFlags(Param::FLAG_NONE);
$this->assertEquals('#bar', $param->jsonSerialize()); $this->assertEquals([
'value' => 'bar',
'flags' => Param::FLAG_NONE,
'type' => Param::VALUE_HIDDEN
], $param->jsonSerialize());
} }
public function validateValueProvider() { public function validateValueProvider() {

View File

@ -58,8 +58,13 @@ describe('OCA.External.Settings tests', function() {
'identifier': '\\OC\\TestBackend', 'identifier': '\\OC\\TestBackend',
'name': 'Test Backend', 'name': 'Test Backend',
'configuration': { 'configuration': {
'field1': 'Display Name 1', 'field1': {
'field2': '&Display Name 2' 'value': 'Display Name 1'
},
'field2': {
'value': 'Display Name 2',
'flags': 1
}
}, },
'authSchemes': { 'authSchemes': {
'builtin': true, 'builtin': true,
@ -70,8 +75,13 @@ describe('OCA.External.Settings tests', function() {
'identifier': '\\OC\\AnotherTestBackend', 'identifier': '\\OC\\AnotherTestBackend',
'name': 'Another Test Backend', 'name': 'Another Test Backend',
'configuration': { 'configuration': {
'field1': 'Display Name 1', 'field1': {
'field2': '&Display Name 2' 'value': 'Display Name 1'
},
'field2': {
'value': 'Display Name 2',
'flags': 1
}
}, },
'authSchemes': { 'authSchemes': {
'builtin': true, 'builtin': true,
@ -82,12 +92,30 @@ describe('OCA.External.Settings tests', function() {
'identifier': '\\OC\\InputsTestBackend', 'identifier': '\\OC\\InputsTestBackend',
'name': 'Inputs test backend', 'name': 'Inputs test backend',
'configuration': { 'configuration': {
'field_text': 'Text field', 'field_text': {
'field_password': '*Password field', 'value': 'Text field'
'field_bool': '!Boolean field', },
'field_hidden': '#Hidden field', 'field_password': {
'field_text_optional': '&Text field optional', 'value': ',Password field',
'field_password_optional': '&*Password field optional' 'type': 2
},
'field_bool': {
'value': 'Boolean field',
'type': 1
},
'field_hidden': {
'value': 'Hidden field',
'type': 3
},
'field_text_optional': {
'value': 'Text field optional',
'flags': 1
},
'field_password_optional': {
'value': 'Password field optional',
'flags': 1,
'type': 2
}
}, },
'authSchemes': { 'authSchemes': {
'builtin': true, 'builtin': true,