alpaca
Version:
Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide
138 lines (116 loc) • 3.68 kB
JavaScript
(function($) {
var Alpaca = $.alpaca;
Alpaca.Fields.FileField = Alpaca.Fields.TextField.extend(
/**
* @lends Alpaca.Fields.FileField.prototype
*/
{
/**
* @see Alpaca.ControlField#getFieldType
*/
getFieldType: function()
{
return "file";
},
/**
* @see Alpaca.Fields.TextField#setValue
*/
setValue: function(value)
{
this.data = value;
this.updateObservable();
this.triggerUpdate();
},
/**
* @see Alpaca.Fields.ControlField#getControlValue
*/
getControlValue: function()
{
return this.data;
},
onChange: function(e)
{
this.base(e);
if (this.options.selectionHandler)
{
this.processSelectionHandler(e.target.files);
}
},
processSelectionHandler: function(files)
{
if (files && files.length > 0)
{
// if the browser supports HTML5 FileReader, we can pull in the stream for preview
if (typeof(FileReader) !== "undefined")
{
// clear out previous loaded data
var loadedData = [];
var loadCount = 0;
var fileReader = new FileReader();
fileReader.onload = (function() {
var field = this;
return function(event)
{
var dataUri = event.target.result;
loadedData.push(dataUri);
loadCount++;
if (loadCount === files.length)
{
field.options.selectionHandler.call(field, files, loadedData);
}
};
}).call(this);
for (var i = 0; i < files.length; i++)
{
fileReader.readAsDataURL(files[i]);
}
}
}
}
/* builder_helpers */
,
/**
* @see Alpaca.Fields.TextField#getTitle
*/
getTitle: function() {
return "File Field";
},
/**
* @see Alpaca.Fields.TextField#getDescription
*/
getDescription: function() {
return "Field for uploading files.";
},
/**
* @private
* @see Alpaca.ControlField#getSchemaOfOptions
*/
getSchemaOfOptions: function() {
return Alpaca.merge(this.base(), {
"properties": {
"selectionHandler": {
"title": "Selection Handler",
"description": "Function that should be called when files are selected. Requires HTML5.",
"type": "boolean",
"default": false
}
}
});
},
/**
* @private
* @see Alpaca.ControlField#getOptionsForOptions
*/
getOptionsForOptions: function() {
return Alpaca.merge(this.base(), {
"fields": {
"selectionHandler": {
"type": "checkbox"
}
}
});
}
/* end_builder_helpers */
});
Alpaca.registerFieldClass("file", Alpaca.Fields.FileField);
})(jQuery);