diff --git a/js/models/WidgetModel.js b/js/models/WidgetModel.js
index d62b4f4..2c299d9 100644
--- a/js/models/WidgetModel.js
+++ b/js/models/WidgetModel.js
@@ -31,6 +31,11 @@
*/
defaultValue: '_none',
+ /**
+ * The new item that was created.
+ */
+ createValue: null,
+
/**
* Position of widget in app.
*
diff --git a/js/views/AppView.js b/js/views/AppView.js
index 8693214..dfed10a 100644
--- a/js/views/AppView.js
+++ b/js/views/AppView.js
@@ -65,9 +65,6 @@
parents: parents
}));
});
-// $.each(app.getConfig('parents'), function (index, item) {
-// // Add WidgetModel for each parent.
-// });
app.collection.trigger('initialize:shs');
@@ -127,6 +124,19 @@
// Use value of parent widget (which is the id of the model ;)).
value = widgetModel.get('id');
}
+ else if (widgetModel.get('createValue')) {
+ // Add the created item to the original select item.
+ var options = $("option", app.$el).map(function () {
+ return $(this).val();
+ }).get();
+ if ($.inArray(value, options) === -1) {
+ var item = widgetModel.get('createValue');
+ app.$el.append($("").val(item.tid).text(item.name));
+ // We can now reset our widget model to the new tid.
+ widgetModel.set('createValue', null);
+ widgetModel.set('defaultValue', item.tid);
+ }
+ }
}
// Set the updated value.
app.$el.val(value).trigger({
diff --git a/js/views/ContainerView.js b/js/views/ContainerView.js
index 2ec8218..8e6a25c 100644
--- a/js/views/ContainerView.js
+++ b/js/views/ContainerView.js
@@ -42,7 +42,7 @@
}
this.collection = new Drupal.shs.WidgetCollection({
- url: Drupal.url(this.app.getConfig('baseUrl') + '/' + this.app.getConfig('fieldName') + '/' + this.app.getConfig('bundle'))
+ url: Drupal.url.toAbsolute(this.app.getConfig('baseUrl') + '/' + this.app.getConfig('fieldName') + '/' + this.app.getConfig('bundle'))
});
this.collection.reset();
@@ -119,13 +119,21 @@
container.collection.remove(models);
var anyValue = container.app.getSetting('anyValue');
- if (value !== anyValue) {
+ var createValue = container.app.getSetting('createValue');
+
+ if (value === createValue && widgetModel.get('createValue')) {
+ var item = widgetModel.get('createValue');
+ value = item.tid;
+ }
+
+ if ((value !== anyValue) && (value !== createValue)) {
// Add new model with current selection.
container.collection.add(new Drupal.shs.classes[container.app.getConfig('fieldName')].models.widget({
id: value,
level: widgetModel.get('level') + 1
}));
}
+
if (value === anyValue && widgetModel.get('level') > 0) {
// Use value of parent widget (which is the id of the model ;)).
value = widgetModel.get('id');
diff --git a/js/views/WidgetView.js b/js/views/WidgetView.js
index da6ac0a..364551f 100644
--- a/js/views/WidgetView.js
+++ b/js/views/WidgetView.js
@@ -62,10 +62,10 @@
render: function () {
var widget = this;
widget.$el.prop('id', widget.container.app.$el.prop('id') + '-shs-' + widget.container.model.get('delta') + '-' + widget.model.get('level'))
- .addClass('shs-select')
- // Add core class to apply default styles to the element.
- .addClass('form-select')
- .hide();
+ .addClass('shs-select')
+ // Add core class to apply default styles to the element.
+ .addClass('form-select')
+ .hide();
if (widget.model.get('dataLoaded')) {
widget.$el.show();
}
@@ -120,9 +120,9 @@
var label = false;
if (labels.hasOwnProperty(widget.model.get('level')) && (label = labels[widget.model.get('level')]) !== false) {
$('