From b7531e1ab47653f963027c36e48763467d3d1cc2 Mon Sep 17 00:00:00 2001 From: Michael Huang Date: Thu, 30 May 2013 16:21:10 -0700 Subject: [PATCH] implemented new button with appropriate callbacks etc --- deme_django/cms/forms.py | 8 ++++--- deme_django/cms/templates/item/new_bare.html | 3 +++ .../cms/templates/item/new_embed_return.html | 15 +++++++++++++ deme_django/cms/views.py | 7 ++++++ .../deme/ajax-model-choice-widget-ck.js | 2 +- .../deme/ajax-model-choice-widget.js | 22 ++++++++++++++----- 6 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 deme_django/cms/templates/item/new_embed_return.html diff --git a/deme_django/cms/forms.py b/deme_django/cms/forms.py index 87ee6b1f..4b34a6f3 100644 --- a/deme_django/cms/forms.py +++ b/deme_django/cms/forms.py @@ -47,12 +47,14 @@ def render(self, name, value, attrs=None): if attrs is None: attrs = {} ajax_query_string = '&'.join('ability=' + urlquote(ability) for ability in self.required_abilities) ajax_url = reverse('item_type_url', kwargs={'viewer': model.__name__.lower(), 'format': 'json'}) + '?' + ajax_query_string + new_modal_query_string = '?modal=1&id=' + attrs.get('id', '') + new_modal_url = reverse('item_type_url', kwargs={'viewer': model.__name__.lower(), 'action': 'new'}) + new_modal_query_string result = """
- - + +
- """ % {'name': name, 'value': value, 'id': attrs.get('id', ''), 'ajax_url': ajax_url, 'initial_search': initial_search, 'model_name': model.__name__.lower()} + """ % {'name': name, 'value': value, 'id': attrs.get('id', ''), 'ajax_url': ajax_url, 'initial_search': initial_search, 'model_name': model.__name__.lower(), 'new_modal_url': new_modal_url} # see /javascripts/deme/ajax-model-choice-widget.js for implementation #TODO fail in more obvious way if attrs['id'] is not set return result diff --git a/deme_django/cms/templates/item/new_bare.html b/deme_django/cms/templates/item/new_bare.html index 2e0fc5f0..6e2bf722 100644 --- a/deme_django/cms/templates/item/new_bare.html +++ b/deme_django/cms/templates/item/new_bare.html @@ -49,6 +49,9 @@ {% new_item_permission_editor item %} + {% if receiver_input_id %} + + {% endif %} {% else %} You do not have permission to create {{ accepted_item_type_name_plural }}. diff --git a/deme_django/cms/templates/item/new_embed_return.html b/deme_django/cms/templates/item/new_embed_return.html new file mode 100644 index 00000000..92109875 --- /dev/null +++ b/deme_django/cms/templates/item/new_embed_return.html @@ -0,0 +1,15 @@ +{% load item_tags %} + + Created... + + + + + \ No newline at end of file diff --git a/deme_django/cms/views.py b/deme_django/cms/views.py index d41fb020..4d39624f 100644 --- a/deme_django/cms/views.py +++ b/deme_django/cms/views.py @@ -379,6 +379,7 @@ def type_new_html(self, form=None): self.context['item_types'] = item_types is_true = lambda value: bool(value) and value.lower() not in ('false', '0') if (is_true(self.request.GET.get('modal'))): + self.context['receiver_input_id'] = self.request.GET.get('id') # the name of the field that expects a response template = loader.get_template('item/new_embed.html') else: template = loader.get_template('item/new.html') @@ -399,6 +400,12 @@ def type_create_html(self): membership_permissions = [OneToOnePermission(source=self.cur_agent, ability='do_anything', is_allowed=True)] new_membership.save_versioned(action_agent=self.cur_agent, initial_permissions=membership_permissions) redirect = self.request.GET.get('redirect', new_item.get_absolute_url()) + receiver_input_id = self.request.POST.get('receiver_input_id') + if receiver_input_id: + template = loader.get_template('item/new_embed_return.html') + self.context['receiver_input_id'] = receiver_input_id + self.context['new_item'] = new_item + return HttpResponse(template.render(self.context)) return HttpResponseRedirect(redirect) else: return self.type_new_html(form) diff --git a/deme_django/static/javascripts/deme/ajax-model-choice-widget-ck.js b/deme_django/static/javascripts/deme/ajax-model-choice-widget-ck.js index 00333309..30639bd4 100644 --- a/deme_django/static/javascripts/deme/ajax-model-choice-widget-ck.js +++ b/deme_django/static/javascripts/deme/ajax-model-choice-widget-ck.js @@ -1 +1 @@ -$(function(){$(".ajax-model-choice-widget").each(function(){var e=$(this).attr("data-input-id"),t=$(this).attr("data-ajax-url"),n=$("#"+e),r=$(this),i={},s;n.autocomplete({minLength:0,select:function(e,t){n[0].value=t.item.value;r[0].value=t.item.id;return!1},source:function(e,n){var r=e.term;if(r in i){n(i[r]);return}s=$.getJSON(t,{q:r},function(e,t,s){var o=$.map(e,function(e){return{value:e[0],id:e[1]}});o.splice(0,0,{value:"[None]",id:""});i[r]=o;n(o)})}});var o=$('').insertAfter(n);o.click(function(e){e.preventDefault()})})}); \ No newline at end of file +$(function(){function e(e,t){var n=t.id,r=t.name,i=$("#"+e),s=$('[data-input-id="'+e+'"]');s.val(n);i.val(r)}$(".ajax-model-choice-widget").each(function(){var e=$(this),t=e.attr("data-input-id"),n=e.attr("data-ajax-url"),r=$("#"+t),i={},s;r.autocomplete({minLength:0,select:function(t,n){r[0].value=n.item.value;e[0].value=n.item.id;return!1},source:function(e,t){var r=e.term;if(r in i){t(i[r]);return}s=$.getJSON(n,{q:r},function(e,n,s){var o=$.map(e,function(e){return{value:e[0],id:e[1]}});o.splice(0,0,{value:"[None]",id:""});i[r]=o;t(o)})}});var o=$('New').insertAfter(r);o.find("a").click(function(t){t.preventDefault();var n=e.attr("data-new-modal-url");window.open(n,"embedform","width=400,toolbar=1,resizable=1,scrollbars=yes,height=400,top=100,left=100")})});window.ajaxModelChoiceWidgetUpdateValue=e}); \ No newline at end of file diff --git a/deme_django/static/javascripts/deme/ajax-model-choice-widget.js b/deme_django/static/javascripts/deme/ajax-model-choice-widget.js index f294d9e7..194d2d0f 100644 --- a/deme_django/static/javascripts/deme/ajax-model-choice-widget.js +++ b/deme_django/static/javascripts/deme/ajax-model-choice-widget.js @@ -1,9 +1,9 @@ $(function() { $('.ajax-model-choice-widget').each(function(){ - var id = $(this).attr('data-input-id'); - var ajax_url = $(this).attr('data-ajax-url'); - var search_input = $("#"+id); var hidden_input = $(this); + var id = hidden_input.attr('data-input-id'); + var ajax_url = hidden_input.attr('data-ajax-url'); + var search_input = $("#"+id); var cache = {}; var last_xhr; search_input.autocomplete({ @@ -29,9 +29,21 @@ $(function() { }); // set up new button - var newbtn = $('').insertAfter(search_input); - newbtn.click(function(e){ + var newbtn = $('New').insertAfter(search_input); + newbtn.find('a').click(function(e){ e.preventDefault(); + var new_modal_url = hidden_input.attr('data-new-modal-url'); + window.open(new_modal_url, 'embedform', 'width=400,toolbar=1,resizable=1,scrollbars=yes,height=400,top=100,left=100'); }) }); + + function ajaxModelChoiceWidgetUpdateValue(id, dict) { + var itemid = dict['id']; + var itemname = dict['name']; + var input = $('#' + id); + var hidden_input = $('[data-input-id="'+id+'"]'); + hidden_input.val(itemid); + input.val(itemname); + } + window.ajaxModelChoiceWidgetUpdateValue = ajaxModelChoiceWidgetUpdateValue; });