diff --git a/ui/ui.js b/ui/ui.js index 94503f6d..902fbe3d 100755 --- a/ui/ui.js +++ b/ui/ui.js @@ -446,33 +446,39 @@ var FIELD_TYPES = { type: 'text', text: null, default: '', - html: '
'+ + html: '
'+ ''+ ''+ '
', - setter: function(field){ + test: function(val){ + return typeof(val) == typeof('abc') + }, + set: function(field){ $(field).find('.value').attr('value', this.default) }, - getter: function(field){ + get: function(field){ return $(field).find('.value').attr('value') }, }, bool: { - type: 'text', + type: 'bool', text: null, default: false, - html: '
'+ + html: '
'+ ''+ ''+ '
', - setter: function(field){ - if(this.default){ + test: function(val){ + return val === true || val === false + }, + set: function(field, value){ + if(value){ $(field).find('.value').attr('checked', '') } else { $(field).find('.value').removeAttr('checked') } }, - getter: function(field){ + get: function(field){ return $(field).find('.value').attr('value') }, }, @@ -512,6 +518,62 @@ var FIELD_TYPES = { // // XXX find a better name... function promptPlus(message, config, btn){ + var form = $('
') + var data = {} + var res = $.Deferred() + + // XXX handle message and btn... + // XXX + + // build the form... + for(var t in config){ + var did_handling = false + for(var f in FIELD_TYPES){ + if(FIELD_TYPES[f].test(config[t])){ + var field = FIELD_TYPES[f] + var html = $(field.html) + + html.find('.text').text(t) + field.set(html, config[t]) + + html.on('resolve', function(){ + data[t] = field.get(html) + }) + + form.append(html) + + did_handling = true + continue + } + } + + // handle unresolved fields... + if(!did_handling){ + // XXX skipping field... + // XXX + } + } + + var root = $('.viewer') + + showInOverlay(root, form) + .addClass('prompt dialog') + .on('accept', function(){ + form.find('.field').each(function(_, e){ + $(e).trigger('resolve') + }) + + // XXX test if all required stuff is filled... + res.resolve(data) + + hideOverlay(root) + }) + .on('close', function(){ + res.reject() + hideOverlay(root) + }) + + return res }