diff options
author | Rogelio Mita <rogeliomita@activitycentral.com> | 2013-07-19 20:24:33 (GMT) |
---|---|---|
committer | Rogelio Mita <rogeliomita@activitycentral.com> | 2013-07-19 20:24:33 (GMT) |
commit | a13ffdb8f916c1f1505141426fefc536e3cd133c (patch) | |
tree | c8748750ff20cedc7da7721e98502a7ac04f5255 | |
parent | 1dc347f70b01f41d8ac65f3cef532679013e1406 (diff) |
Adding order to Option class. Increment order when click in add option button.
-rw-r--r-- | webapp/js_tests/fixtures/container.html | 1 | ||||
-rw-r--r-- | webapp/js_tests/spec/DynamicStructureSpec.js | 74 | ||||
-rw-r--r-- | webapp/polls/models.py | 1 | ||||
-rw-r--r-- | webapp/polls/templates/mustache/option.html | 6 | ||||
-rw-r--r-- | webapp/polls/tests/option_tests.py | 7 | ||||
-rw-r--r-- | webapp/webapp/static/js/dynamic_structure.js | 17 |
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 ); } |