From abed9a80283ed07531ebb2ef8d054f5991a7be5b Mon Sep 17 00:00:00 2001 From: Branson Stephens <stephenb@uwm.edu> Date: Fri, 12 Jul 2013 10:53:15 -0500 Subject: [PATCH] implemented delete button --- gracedb/views.py | 24 ++++++++++++++- templates/gracedb/event_detail.html | 48 ++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git a/gracedb/views.py b/gracedb/views.py index b924cb3d1..56ef1d638 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -1076,6 +1076,7 @@ def latest(request): #----------------------------------------------------------------------------------- # For tags. A new view function. We need this because the API one would want users # to have certs stored in their browser. +# XXX Get rid of this and use apiweb views instead? #----------------------------------------------------------------------------------- def taglogentry(request, graceid, num, tagname): @@ -1116,8 +1117,29 @@ def taglogentry(request, graceid, num, tagname): msg = msg + str(e) + '\n' msg = "The tag itself, however, is saved." return HttpResponse(msg, content_type="text") + elif request.method == "DELETE": + try: + # Has this tag-eventlog relationship already been created? + tag = eventlog.tag_set.filter(name=tagname)[0] + tag.eventlogs.remove(eventlog) + except: + msg = "Attempted to delete tag that doesn't exist." + return HttpResponseBadRequest(msg) + + # Create a log entry to document the tag deletion. + msg = "Removed tag %s for message %s. " % (tagname, num) + logentry = EventLog(event=event, + issuer=request.user, + comment=msg) + try: + logentry.save() + except Exception as e: + # Since the tag creation was successful, we'll return 200. + return HttpResponse("Tag removed, but failed to create log entry: %s" % str(e), + content_type="text") + + return HttpResponse(msg, content_type="text") else: - # We will only allow PUT here. Anything else is a bad request: 400 return HttpResponseBadRequest # Hopefully, this will only ever be called form inside a script. Just in case... diff --git a/templates/gracedb/event_detail.html b/templates/gracedb/event_detail.html index 94b1afe6c..137d9a166 100644 --- a/templates/gracedb/event_detail.html +++ b/templates/gracedb/event_detail.html @@ -47,7 +47,7 @@ dc += ' </td> \n'; dc += ' </tr> \n'; dc += ' <tr> \n'; - dc += ' <td> {{log.comment|sanitize}} \n'; + dc += ' <td> {{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} dc += ' <a href="{{log.fileurl}}">{{log.filename}}.</a> \n'; {% endif %} @@ -78,9 +78,9 @@ {% if not log.hasImage %} dc += ' <tr class="{% cycle 'odd' 'even'%}"> \n'; dc += ' <td>{{log.N}}</td> \n'; - dc += ' <td>{{log.created|multiTime:"logtime"}}</td> \n'; + dc += ' <td>{{log.created|multiTime:"logtime"|escapejs}}</td> \n'; dc += ' <td>{{log.issuer.first_name}} {{log.issuer.last_name}}</td> \n'; - dc += ' <td>{{log.comment|sanitize}} \n'; + dc += ' <td>{{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} dc += ' <a href="{{log.fileurl}}">{{log.filename}}</a> \n'; {% endif %} @@ -137,10 +137,44 @@ ret += ' <table> \n'; {%for tag in log.tag_set.all %} ret += ' <tr> <td> \n'; - ret += ' <button type="button" id="table_button" data-dojo-type="dijit/form/Button"> \n'; - ret += ' <span>Click me!</span> \n'; + ret += ' <button type="button" data-dojo-type="dijit/form/Button"> \n'; + ret += ' <span>{{tag.name}}</span> \n'; ret += ' <script type="dojo/on" data-dojo-event="click"> \n'; - ret += ' console.log("I was clicked!"); \n'; +/* ret += ' console.log("I was clicked."); \n'; */ + ret += ' require(["dojo/dom", \n'; + ret += ' "dojo/request", \n'; + ret += ' "dojo/dom-construct", \n'; + ret += ' "dijit/Dialog", \n'; + ret += ' "dijit/form/Button"], function(dom,request,domConstruct,Dialog,Button) { \n'; + ret += ' var n = {{ log.N }} \n'; + ret += ' var tagName = "{{ tag.name }}" \n'; + ret += ' var tagUrl = "{% url taglogentry object.graceid "000" "temp" %}" \n'; + ret += ' tagUrl = tagUrl.replace("000",n); \n'; + ret += ' tagUrl = tagUrl.replace("temp",tagName); \n'; + ret += ' var tagResultDialog = new Dialog({ style: "width: 300px" }); \n'; + ret += ' var actionBar = domConstruct.create("div", { "class": "dijitDialogPaneActionBar" }); \n'; + ret += ' var tbnode = domConstruct.create("div", { \n'; + ret += ' style: "margin: 0px auto 0px auto; text-align: center;" \n'; + ret += ' }, actionBar); \n'; + ret += ' var tagButton = new Button({ \n'; + ret += ' label: "Ok", \n'; + ret += ' onClick: function(){ \n'; + ret += ' tagResultDialog.hide(); \n'; + ret += ' }}).placeAt(tbnode); \n'; + ret += ' request.del(tagUrl).then( \n'; + ret += ' function(text){ \n'; + ret += ' tagResultDialog.set("content", text); \n'; + ret += ' domConstruct.place(actionBar, tagResultDialog.containerNode); \n'; + ret += ' tagResultDialog.show(); \n'; + ret += ' //location.reload(true); \n'; + ret += ' }, \n'; + ret += ' function(error){ \n'; + ret += ' tagResultDialog.set("content", "Error: " + error); \n'; + ret += ' domConstruct.place(actionBar, tagResultDialog.containerNode); \n'; + ret += ' tagResultDialog.show(); \n'; + ret += ' } \n'; + ret += ' ); \n'; + ret += ' }); \n'; ret += ' <\/script>\n'; ret += ' </button> \n'; ret += ' </td> </tr> \n'; @@ -148,7 +182,7 @@ ret += ' </table> \n'; ret += ' </td> \n'; {% endif %} - ret += ' <td>{{log.comment|sanitize}} \n'; + ret += ' <td>{{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} ret += ' <a href="{{log.fileurl}}">{{log.filename}}</a> \n'; {% endif %} -- GitLab