diff options
author | Code Raguet <ignacio.code@gmail.com> | 2013-07-26 18:40:27 (GMT) |
---|---|---|
committer | Code Raguet <ignacio.code@gmail.com> | 2013-07-26 18:40:27 (GMT) |
commit | 688a5c1f463bd187b878d2de6b56ac580dc7391c (patch) | |
tree | b3e45c499c59ce85457a2166a69323fd65f688ed | |
parent | 7d5efa895780a5ad18d792f84716aa1a70b31ffb (diff) |
Refactor: factoryField is now compiled using coffee
-rw-r--r-- | webapp/coffee/factoryField.coffee | 173 | ||||
-rw-r--r-- | webapp/webapp/static/js/factoryField.js | 12 |
2 files changed, 183 insertions, 2 deletions
diff --git a/webapp/coffee/factoryField.coffee b/webapp/coffee/factoryField.coffee new file mode 100644 index 0000000..993724f --- /dev/null +++ b/webapp/coffee/factoryField.coffee @@ -0,0 +1,173 @@ +factoryField = `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); +};` + +window.factoryField = factoryField
\ No newline at end of file diff --git a/webapp/webapp/static/js/factoryField.js b/webapp/webapp/static/js/factoryField.js index 3073c89..0fb86ca 100644 --- a/webapp/webapp/static/js/factoryField.js +++ b/webapp/webapp/static/js/factoryField.js @@ -1,4 +1,8 @@ -function factoryField(order, value) { +// Generated by CoffeeScript 1.6.3 +(function() { + var factoryField; + + factoryField = function factoryField(order, value) { // Get field.widget_type var widget_type = value['widget_type'], group_order = value['group_order'], @@ -168,4 +172,8 @@ function factoryField(order, value) { // Show the field widget var container = value['container']; container.append(field_widget); -};
\ No newline at end of file +};; + + window.factoryField = factoryField; + +}).call(this); |