Remoto - VFS: widgetFactory.js Source File
Remoto - VFS
widgetFactory.js
Go to the documentation of this file.
1 
2 define( [
3  'require',
4  'remoto!stdlib:js/include/preferences.js',
5  'remoto!stdlib:js/include/validator.js',
6  'remoto!stdlib:js/widgets/widget.js',
7  'remoto!stdlib:js/widgets/widgetLoader.js',
8  'remoto!stdlib:js/widgets/widgets/breakWidget.js',
9  'remoto!stdlib:js/widgets/widgets/booleanWidget.js',
10  'remoto!stdlib:js/widgets/widgets/buttonWidget.js',
11  // 'remoto!stdlib:js/widgets/widgets/colorWidget.js',
12  'remoto!stdlib:js/widgets/widgets/headerWidget.js',
13  // 'remoto!stdlib:js/widgets/widgets/hiddenWidget.js',
14  'remoto!stdlib:js/widgets/widgets/numberWidget.js',
15  // 'remoto!stdlib:js/widgets/widgets/selectWidget.js',
16  // 'remoto!stdlib:js/widgets/widgets/textAreaWidget.js',
17  // 'remoto!stdlib:js/widgets/widgets/groupWidget.js',
18  // 'remoto!stdlib:js/widgets/widgets/metadataWidget.js',
19  ],
20  function(require,preferences,validator,widget,widgetLoader,breakWidget,booleanWidget,buttonWidget,/*colorWidget,*/headerWidget,/*hiddenWidget,*/numberWidget,/*selectWidget,*//*textAreaWidget,*//*groupWidget*//*,metadataWidget*/)
21  {
22  'use strict';
23 
24  var _widgets = {
25 
26  };
27 
49  function widgetFactory(d)
50  {
51  var w = null;
52 
53  d.options = d.options || {};
54 
55  //console.log(d);
56  d.options.enabled = (!d.options.hasOwnProperty("enabled") || (d.options.enabled === true)) ? true : false;
57 
58  switch(d.type)
59  {
60  // case "group": w = new groupWidget( d ); break;
61  case "button": w = new buttonWidget( d ); break;
62  case "header": w = new headerWidget( d ); break;
63  case "break": w = new breakWidget( d ); break;
64  // case "hidden": w = new hiddenWidget( d ); break;
65  // case "metadata": w = new metadataWidget( d ); break;
66  // case "textarea": w = new textareaWidget( d ); break;
67  // case "select": w = new selectWidget( d ); break;
68  case "text": w = new widget( d ); break;
69 
70  case "checkbox":
71  case "bool":
72  case "boolean":
73  w = new booleanWidget( d ); break;
74 
75  //add // case "color4f":
76  // case "color": w = new colorWidget( d ); break;
77 
78  case "int":
79  case "float":
80  case "number":
81  w = new numberWidget( d ); break;
82 
83  case "id":
84  case "url":
85  case "email":
86  case "phone":
87  d.options.spellcheck = false; //no break!
88  w = new widget( d ); break;
89 
90  //add // case "time": ... break;
91 
92  default: //console.log("New "+d.type+"!");
93  if (d.type)
94  { if (d.type in _widgets)
95  {
96  w = new _widgets[d.type](d);
97  }
98  else
99  {
100  var t = d.type;
101  if (d.type.indexOf(":") === -1)
102  { d.type = "stdlib:js/widgets/widgets/"+d.type;
103  if (!d.type.endsWith("Widget.js"))
104  d.type += "Widget.js";
105  }
106 
107  w = new widgetLoader( d );
108  require( ['remoto!'+d.type], loadedWidget.bind(null,t,d,w) );
109  }
110  }
111  else
112  {
113  if (preferences.fetch('reportFormErrors')===true)
114  {
115  console.log("Unknown or no type: "+d.type,d);
116  }
117  return null;
118  }
119  }
120 
121  if (w)
122  switch (d.type)
123  {
124  // case "textarea": w.validator = validator.text; break;
125  case "email": w.validator = d.validator || validator.email; break;
126  case "phone": w.validator = d.validator || validator.phone; break;
127  case "time": w.validator = d.validator || validator.time; break;
128  case "url": w.validator = d.validator || validator.url; break;
129  case "text": w.validator = d.validator || validator.text; break;
130  }
131 
132  if (w) w._variable = d.variable;
133 
134  return w;
135  }
136 
153  function loadedWidget( type, d, loader, newWidget )
154  {
155  //console.log(arguments);
156 
157  //_widgets[d.type] = newWidget;
158  _widgets[type] = newWidget;
159 
160  var w = new newWidget(d);
161  loader.widget = w;
162  }
163 
164  /*
165  widgetFactory.__defineSetter__( "postMessage", function(m)
166  {
167  widget.prototype.postMessage = m;
168  } );
169  */
170 
171  //groupWidget.widgetFactory = widgetFactory;
172 
173  return widgetFactory;
174  }
175 );
176 
A checkbox/boolean widget.
A callback object for when a widgetLoader has finished loading.
loadedWidget(type, d, loader, newWidget)
Register the new widget type, and create an instance of it.
setter widget
a setter DOCME
setter type
a setter DOCME
The numberWidget is a form field for numerical input.
numberWidget(d)
This is usually called by the widgetFactory.
fetch(v, _default)
time(value, options)
url(value, options)
email(value, options)
text(value, options)
phone(value, options)
widgetFactory(d)
Create a widget, if possible, or return a widgetLoader.
Base class for GUI form widgets.