Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRogelio Mita <rogeliomita@activitycentral.com>2013-07-19 20:24:33 (GMT)
committer Rogelio Mita <rogeliomita@activitycentral.com>2013-07-19 20:24:33 (GMT)
commita13ffdb8f916c1f1505141426fefc536e3cd133c (patch)
treec8748750ff20cedc7da7721e98502a7ac04f5255
parent1dc347f70b01f41d8ac65f3cef532679013e1406 (diff)
Adding order to Option class. Increment order when click in add option button.
-rw-r--r--webapp/js_tests/fixtures/container.html1
-rw-r--r--webapp/js_tests/spec/DynamicStructureSpec.js74
-rw-r--r--webapp/polls/models.py1
-rw-r--r--webapp/polls/templates/mustache/option.html6
-rw-r--r--webapp/polls/tests/option_tests.py7
-rw-r--r--webapp/webapp/static/js/dynamic_structure.js17
6 files changed, 100 insertions, 6 deletions
diff --git a/webapp/js_tests/fixtures/container.html b/webapp/js_tests/fixtures/container.html
index 321a865..1037a46 100644
--- a/webapp/js_tests/fixtures/container.html
+++ b/webapp/js_tests/fixtures/container.html
@@ -9,4 +9,5 @@
WIDGET_TYPES = [{'0': {'key': 'TextInput', 'value': 'Respuesta de texto'}}],
WITH_OPTIONS = ["MultipleCheckBox", "DropDownList", "RadioButton"],
OFFSET_OPTION_ID = 1;
+ WITH_IMAGES = [];
</script> \ No newline at end of file
diff --git a/webapp/js_tests/spec/DynamicStructureSpec.js b/webapp/js_tests/spec/DynamicStructureSpec.js
index ed09af0..dc5af32 100644
--- a/webapp/js_tests/spec/DynamicStructureSpec.js
+++ b/webapp/js_tests/spec/DynamicStructureSpec.js
@@ -166,13 +166,21 @@ describe("", function() {
jasmine.getFixtures().fixturesPath = "fixtures/";
loadFixtures("container.html");
- var group_mustache_template = $.ajax({
+ var field_mustache_template = $.ajax({
type: "GET",
url: '/jasmine/mustache_templates/field.html',
cache: false,
async: false
}).responseText;
- $("#jasmine-fixtures").append(group_mustache_template);
+ $("#jasmine-fixtures").append(field_mustache_template);
+
+ var option_mustache_template = $.ajax({
+ type: "GET",
+ url: '/jasmine/mustache_templates/option.html',
+ cache: false,
+ async: false
+ }).responseText;
+ $("#jasmine-fixtures").append(option_mustache_template);
Mustache.tags = ['[[', ']]'];
@@ -199,6 +207,68 @@ describe("", function() {
expect(field_template.find('.WFieldOptions_container')).toExist();
});
+ it("Second option must has greater order than firt option", function() {
+
+ factoryField("0", {"container": container, "widget_type": "MultipleCheckBox"});
+
+ var field_widget = container.children();
+ var field_add_option_button = $(field_widget.find('.WFieldOptions_add_button'));
+ field_add_option_button = field_add_option_button.find('button');
+ field_add_option_button.click();
+ var first_option = $(field_widget.find(".WFieldOptions_container .row-fluid")[0]);
+
+ var field_widget = container.children();
+ var field_add_option_button = $(field_widget.find('.WFieldOptions_add_button'));
+ field_add_option_button = field_add_option_button.find('button');
+ field_add_option_button.click();
+ var second_option = $(field_widget.find(".WFieldOptions_container .row-fluid")[1]);
+
+ var first_option_order = $(first_option.find("[name*='.order']")[0]).val();
+ var second_option_order = $(second_option.find("[name*='.order']")[0]).val();
+
+ expect( first_option_order ).toBeLessThan( second_option_order );
+
+ });
+
+ describe("Options", function() {
+
+ beforeEach(function() {
+
+ jasmine.getFixtures().fixturesPath = "fixtures/";
+ loadFixtures("container.html");
+
+ var option_mustache_template = $.ajax({
+ type: "GET",
+ url: '/jasmine/mustache_templates/option.html',
+ cache: false,
+ async: false
+ }).responseText;
+ $("#jasmine-fixtures").append(option_mustache_template);
+
+ Mustache.tags = ['[[', ']]'];
+
+ // Preparing mustache TEMPLATES
+ $('script[type="text/x-mustache-template"]').each(function(i, obj){
+ TEMPLATES[$(obj).attr('name')] = $(obj).text();
+ });
+
+ });
+
+ it("option widget has an order", function() {
+
+ factoryOption("1", "", container, "0", "0");
+
+ options = container.children();
+
+ option_1_order = options.find(
+ "[name='groups.0.fields.0.options.1.order']")[0];
+
+ expect(option_1_order).not.toBeUndefined();
+
+ });
+
+ });
+
});
}); \ No newline at end of file
diff --git a/webapp/polls/models.py b/webapp/polls/models.py
index c0c58e2..bc1ad41 100644
--- a/webapp/polls/models.py
+++ b/webapp/polls/models.py
@@ -443,6 +443,7 @@ class Option(AbstractObject, ComponentStructure):
self.text = data.get('text', None)
self.img = data.get('img', None)
self.img_name = data.get('img_name', None)
+ self.order = data.get('order', None)
weight = data.get('weight', None)
self.weight = int(weight) if weight else weight
diff --git a/webapp/polls/templates/mustache/option.html b/webapp/polls/templates/mustache/option.html
index 0527f05..c303a0c 100644
--- a/webapp/polls/templates/mustache/option.html
+++ b/webapp/polls/templates/mustache/option.html
@@ -16,6 +16,12 @@
name="groups.[[ group_order ]].fields.[[ field_order ]].options.[[ id ]].weight"
value="[[ weight ]]"
placeholder="peso" />
+ <input
+ class="input-small"
+ type="hidden"
+ name="groups.[[ group_order ]].fields.[[ field_order ]].options.[[ id ]].order"
+ value="[[ order ]]"
+ placeholder="order" />
<button class="WFieldOptions_remove btn btn-danger">
<i class="icon-trash icon-white"></i>
</button>
diff --git a/webapp/polls/tests/option_tests.py b/webapp/polls/tests/option_tests.py
index cbfbbb1..5a92150 100644
--- a/webapp/polls/tests/option_tests.py
+++ b/webapp/polls/tests/option_tests.py
@@ -153,3 +153,10 @@ class OptionTests(MongoTestCase):
option.text = "some text"
self.assertEqual(default_option_expected, option.to_python())
+
+ def test_option_order(self):
+ option_1 = Option(data={"order": 0})
+ option_2 = Option(data={"order": 1})
+
+ self.assertEqual(0, option_1.order)
+ self.assertEqual(1, option_2.order)
diff --git a/webapp/webapp/static/js/dynamic_structure.js b/webapp/webapp/static/js/dynamic_structure.js
index 4779445..373c9ed 100644
--- a/webapp/webapp/static/js/dynamic_structure.js
+++ b/webapp/webapp/static/js/dynamic_structure.js
@@ -171,15 +171,15 @@ var factoryImageOptionThumbnail = function(id, value, container, group_order, fi
};
-var factoryOption = function(id, value, container, group_order, field_order) {
-
+var factoryOption = function(id, value, container, group_order, field_order, order) {
var option = $(
Mustache.render(TEMPLATES['field_option'], {
"id": id,
"value": value['text'],
"weight": value['weight'],
"group_order": group_order,
- "field_order": field_order
+ "field_order": field_order,
+ "order": order
})
);
@@ -278,7 +278,16 @@ var bindFieldAddOptionButton = function(add_option_button) {
var current_widget_type = field_widget.find(".WFieldWidgetType").attr('value');
if ($.inArray(current_widget_type, WITH_IMAGES) == -1){
- factoryOption(OFFSET_OPTION_ID, empty_option_widget, options_container, group_order, field_order );
+ var order;
+ var options_container = $(field_widget.find('.WFieldOptions_container')[0]);
+ var prev_option = $(options_container).children().last();
+ var prev_order = $(prev_option.find("[name*='.order']")[0]).val();
+ if (prev_order == null){
+ order = 0
+ } else {
+ order = parseInt(prev_order) + 1;
+ }
+ factoryOption(OFFSET_OPTION_ID, empty_option_widget, options_container, group_order, field_order, order);
} else {
factoryImageOptionUpload(OFFSET_OPTION_ID, empty_option_widget, options_container, group_order, field_order );
}