diff options
author | Code Raguet <ignacio.code@gmail.com> | 2013-07-26 17:03:26 (GMT) |
---|---|---|
committer | Code Raguet <ignacio.code@gmail.com> | 2013-07-26 17:03:26 (GMT) |
commit | 7d5efa895780a5ad18d792f84716aa1a70b31ffb (patch) | |
tree | b68fc1bc9799b5f9e7006dcbe272d9c8fa5064d9 | |
parent | 6afdf12f096bcb0d6a1acdbed26d137f6d540a45 (diff) |
Refactor: move factoryField from dynamic_structure to his own file.
-rw-r--r-- | webapp/js_tests/files.json | 1 | ||||
-rw-r--r-- | webapp/polls/templates/tags/structure.html | 1 | ||||
-rw-r--r-- | webapp/webapp/static/js/dynamic_structure.js | 171 | ||||
-rw-r--r-- | webapp/webapp/static/js/factoryField.js | 171 |
4 files changed, 173 insertions, 171 deletions
diff --git a/webapp/js_tests/files.json b/webapp/js_tests/files.json index f7e5203..b0e9f4f 100644 --- a/webapp/js_tests/files.json +++ b/webapp/js_tests/files.json @@ -4,6 +4,7 @@ "/static/js/jquery.min.js", "/static/js/jquery-ui.js", "/static/js/mustache-0.7.0.js", + "/static/js/factoryField.js", "/static/js/dynamic_structure.js" ], "media_files": [ diff --git a/webapp/polls/templates/tags/structure.html b/webapp/polls/templates/tags/structure.html index 7f4c0d9..efe46d9 100644 --- a/webapp/polls/templates/tags/structure.html +++ b/webapp/polls/templates/tags/structure.html @@ -49,6 +49,7 @@ <!-- Dynamic structure methods --> +<script src="{{ STATIC_URL }}js/factoryField.js"></script> <script src="{{ STATIC_URL }}js/dynamic_structure.js"></script> diff --git a/webapp/webapp/static/js/dynamic_structure.js b/webapp/webapp/static/js/dynamic_structure.js index 1773100..9a6aef9 100644 --- a/webapp/webapp/static/js/dynamic_structure.js +++ b/webapp/webapp/static/js/dynamic_structure.js @@ -433,177 +433,6 @@ var change_dependence_form = function(widget, field_widget) { _parentesis.show(); } -var factoryField = function(order, value) { - // Get field.widget_type - var widget_type = value['widget_type'], - group_order = value['group_order'], - errors = []; - - // If errors, prepare it - if (value.hasOwnProperty('errors')){ - $.each(value['errors'], function(i, error){ - errors.push({'error': error}); - }); - } - - // Preparing values for render widget type select box - var widget_types = [].concat(WIDGET_TYPES); - widget_types = $.each(widget_types, function(i, v){ - if (widget_type == v['key']) { - $.extend(v, {"selected": true}); - } else { - // TODO: ver como pasar por copia valores en javascript - delete v.selected; - } - }), - dependence_forms = [ - {'key': "4", 'value': "Sin parentesis" }, - {'key': "1", 'value': "( ID o/y ID ) o/y ( ID o/y ID )"}, - {'key': "2", 'value': "( ID o/y ID o/y ID ) o/y ID"}, - {'key': "3", 'value': "( ID o/y ID ) o/y ID o/y ID"} - ], - dependence_forms = $.each(dependence_forms, function(i, v){ - if (value.hasOwnProperty('dependence')){ - if (value['dependence'].form == v['key']) { - $.extend(v, {"selected": true}); - } - } - }), - with_dependence_form = group_order != 0 || ( group_order == 0 && order != 0 ); - - var field_widget = $( - Mustache.render(TEMPLATES['field'], { - "order": order, - "group_order": group_order, - "name": value['name'], - "dependence": value['dependence'], - "errors": errors, - "visible_errors": errors.length, - "WIDGET_TYPES": widget_types, - "dependence_forms": dependence_forms, - }) - ) - - // Get remove field button and bind remove field widget envent - var remove_button = field_widget.find('.WField_remove'); - bindFieldRemoveButton(remove_button); - - var add_option_button = field_widget.find('.WFieldOptions_add_button'); - bindFieldAddOptionButton(add_option_button); - - var add_option_none_button = field_widget.find('.WFieldOptionsNone_add_button'); - bindFieldAddOptionButton(add_option_none_button); - - // Bind change widget type event - var widget_types_select_box = field_widget.find('.WFieldWidgetType'); - bindFieldWidgetTypeSelectBox(widget_types_select_box); - - // Adding add_option button if is needed - buttons_container = field_widget.find('.WFieldAddOptionButton_container'); - if (widget_type && $.inArray(widget_type, WITH_OPTIONS) != -1) { - var add_option_button = $(Mustache.render(TEMPLATES['field_add_option_button'], {})); - buttons_container.append(add_option_button); - bindFieldAddOptionButton(add_option_button); - } - if (widget_type && $.inArray(widget_type, ["MultipleCheckBox", "ImageCheckBox"]) != -1) { - var add_option_none_button = $(Mustache.render(TEMPLATES['field_add_option_none_button'], {})); - buttons_container.append(add_option_none_button); - bindFieldAddOptionButton(add_option_none_button, {none: 'True'}); - } - - // Render options - if ($.inArray(widget_type, WITH_OPTIONS) != -1){ - if ($.inArray(widget_type, WITH_IMAGES) == -1){ - // Basic option - $.each(value['options'] || [], function(id, opt_value){ - options_container = field_widget.find('.WFieldOptions_container'); - factoryOption(id, opt_value, options_container, group_order, order); - }); - } else { - // Image option - $.each(value['options'] || [], function(id, opt_value){ - options_container = field_widget.find('.WFieldOptions_container'); - if (opt_value.hasOwnProperty('img_name')){ - factoryImageOptionThumbnail(id, opt_value, options_container, group_order, order); - } else { - factoryImageOptionUpload(id, opt_value, options_container, group_order, order); - } - }); - } - } else { - if (value['options'] && Object.keys(value['options']).length){ - $.each(value['options'] || [], function(id, opt_value){ - factoryOptionDefault(group_order, field_widget, id, opt_value['text']); - }); - } else { - factoryOptionDefault(group_order, field_widget, undefined, undefined); - } - } - - // Show dependences - var values = [], - dependence_container = field_widget.find(".dependence"), - widget; - - if (value['dependence']) - values = value['dependence'].values; - - for (var i=values.length; i < 7; i++) - values[i] = ''; - factoryDependences(dependence_container, values, order, group_order); - - var dependences = field_widget.find('[name*=".dependence.values"]'); - $.each(dependences, function(index, dependence){ - if ($(dependence).attr("value") != '') - $(dependence).addClass("ui-state-highlight"); - }); - - var parentesis_open = field_widget.find("._parentesis_open"); - if (parentesis_open.length == 8) { - $(parentesis_open[0]).addClass('1 2 3'); - $(parentesis_open[4]).addClass('1'); - } - - var parentesis_close = field_widget.find("._parentesis_close"); - if (parentesis_close.length == 8) { - $(parentesis_close[3]).addClass('1 3'); - $(parentesis_close[5]).addClass('2'); - $(parentesis_close[7]).addClass('1'); - } - - var widget_selected_dependence_form = field_widget.find('.dependence_form'); - $(widget_selected_dependence_form).on('change', function(event){ - change_dependence_form(this, null); - }); - - change_dependence_form(widget_selected_dependence_form[0], field_widget); - - if (!with_dependence_form) { - $(field_widget).find(".dependence_form").remove(); - $(field_widget).find(".dependence_form_label").remove(); - $(field_widget).find(".dependence").remove(); - $(field_widget).find(".dependence_label").remove(); - } - - var droppable = field_widget.find(".droppable"); - droppable.droppable({ - drop: function( event, ui ) { - var value = ui.draggable[0]['innerText']; - $(this) - .addClass("ui-state-highlight") - .attr("value", value); - } - }); - droppable.focusout(function(){ - if ($(this).attr('value') == ""){ - $(this).removeClass("ui-state-highlight"); - } - }); - - // Show the field widget - var container = value['container']; - container.append(field_widget); -}; /// METHODS FOR GROUPS /// diff --git a/webapp/webapp/static/js/factoryField.js b/webapp/webapp/static/js/factoryField.js new file mode 100644 index 0000000..3073c89 --- /dev/null +++ b/webapp/webapp/static/js/factoryField.js @@ -0,0 +1,171 @@ +function factoryField(order, value) { + // Get field.widget_type + var widget_type = value['widget_type'], + group_order = value['group_order'], + errors = []; + + // If errors, prepare it + if (value.hasOwnProperty('errors')){ + $.each(value['errors'], function(i, error){ + errors.push({'error': error}); + }); + } + + // Preparing values for render widget type select box + var widget_types = [].concat(WIDGET_TYPES); + widget_types = $.each(widget_types, function(i, v){ + if (widget_type == v['key']) { + $.extend(v, {"selected": true}); + } else { + // TODO: ver como pasar por copia valores en javascript + delete v.selected; + } + }), + dependence_forms = [ + {'key': "4", 'value': "Sin parentesis" }, + {'key': "1", 'value': "( ID o/y ID ) o/y ( ID o/y ID )"}, + {'key': "2", 'value': "( ID o/y ID o/y ID ) o/y ID"}, + {'key': "3", 'value': "( ID o/y ID ) o/y ID o/y ID"} + ], + dependence_forms = $.each(dependence_forms, function(i, v){ + if (value.hasOwnProperty('dependence')){ + if (value['dependence'].form == v['key']) { + $.extend(v, {"selected": true}); + } + } + }), + with_dependence_form = group_order != 0 || ( group_order == 0 && order != 0 ); + + var field_widget = $( + Mustache.render(TEMPLATES['field'], { + "order": order, + "group_order": group_order, + "name": value['name'], + "dependence": value['dependence'], + "errors": errors, + "visible_errors": errors.length, + "WIDGET_TYPES": widget_types, + "dependence_forms": dependence_forms, + }) + ) + + // Get remove field button and bind remove field widget envent + var remove_button = field_widget.find('.WField_remove'); + bindFieldRemoveButton(remove_button); + + var add_option_button = field_widget.find('.WFieldOptions_add_button'); + bindFieldAddOptionButton(add_option_button); + + var add_option_none_button = field_widget.find('.WFieldOptionsNone_add_button'); + bindFieldAddOptionButton(add_option_none_button); + + // Bind change widget type event + var widget_types_select_box = field_widget.find('.WFieldWidgetType'); + bindFieldWidgetTypeSelectBox(widget_types_select_box); + + // Adding add_option button if is needed + buttons_container = field_widget.find('.WFieldAddOptionButton_container'); + if (widget_type && $.inArray(widget_type, WITH_OPTIONS) != -1) { + var add_option_button = $(Mustache.render(TEMPLATES['field_add_option_button'], {})); + buttons_container.append(add_option_button); + bindFieldAddOptionButton(add_option_button); + } + if (widget_type && $.inArray(widget_type, ["MultipleCheckBox", "ImageCheckBox"]) != -1) { + var add_option_none_button = $(Mustache.render(TEMPLATES['field_add_option_none_button'], {})); + buttons_container.append(add_option_none_button); + bindFieldAddOptionButton(add_option_none_button, {none: 'True'}); + } + + // Render options + if ($.inArray(widget_type, WITH_OPTIONS) != -1){ + if ($.inArray(widget_type, WITH_IMAGES) == -1){ + // Basic option + $.each(value['options'] || [], function(id, opt_value){ + options_container = field_widget.find('.WFieldOptions_container'); + factoryOption(id, opt_value, options_container, group_order, order); + }); + } else { + // Image option + $.each(value['options'] || [], function(id, opt_value){ + options_container = field_widget.find('.WFieldOptions_container'); + if (opt_value.hasOwnProperty('img_name')){ + factoryImageOptionThumbnail(id, opt_value, options_container, group_order, order); + } else { + factoryImageOptionUpload(id, opt_value, options_container, group_order, order); + } + }); + } + } else { + if (value['options'] && Object.keys(value['options']).length){ + $.each(value['options'] || [], function(id, opt_value){ + factoryOptionDefault(group_order, field_widget, id, opt_value['text']); + }); + } else { + factoryOptionDefault(group_order, field_widget, undefined, undefined); + } + } + + // Show dependences + var values = [], + dependence_container = field_widget.find(".dependence"), + widget; + + if (value['dependence']) + values = value['dependence'].values; + + for (var i=values.length; i < 7; i++) + values[i] = ''; + factoryDependences(dependence_container, values, order, group_order); + + var dependences = field_widget.find('[name*=".dependence.values"]'); + $.each(dependences, function(index, dependence){ + if ($(dependence).attr("value") != '') + $(dependence).addClass("ui-state-highlight"); + }); + + var parentesis_open = field_widget.find("._parentesis_open"); + if (parentesis_open.length == 8) { + $(parentesis_open[0]).addClass('1 2 3'); + $(parentesis_open[4]).addClass('1'); + } + + var parentesis_close = field_widget.find("._parentesis_close"); + if (parentesis_close.length == 8) { + $(parentesis_close[3]).addClass('1 3'); + $(parentesis_close[5]).addClass('2'); + $(parentesis_close[7]).addClass('1'); + } + + var widget_selected_dependence_form = field_widget.find('.dependence_form'); + $(widget_selected_dependence_form).on('change', function(event){ + change_dependence_form(this, null); + }); + + change_dependence_form(widget_selected_dependence_form[0], field_widget); + + if (!with_dependence_form) { + $(field_widget).find(".dependence_form").remove(); + $(field_widget).find(".dependence_form_label").remove(); + $(field_widget).find(".dependence").remove(); + $(field_widget).find(".dependence_label").remove(); + } + + var droppable = field_widget.find(".droppable"); + droppable.droppable({ + drop: function( event, ui ) { + var value = ui.draggable[0]['innerText']; + $(this) + .addClass("ui-state-highlight") + .attr("value", value); + } + }); + droppable.focusout(function(){ + if ($(this).attr('value') == ""){ + $(this).removeClass("ui-state-highlight"); + } + }); + + // Show the field widget + var container = value['container']; + container.append(field_widget); +};
\ No newline at end of file |