From 4e4cdf6348749e14983834e966cc76c5050cf3e0 Mon Sep 17 00:00:00 2001 From: Alvin Chow Date: Sun, 27 Sep 2015 21:57:56 -0700 Subject: [PATCH] Get delete page feature working --- realms/modules/search/hooks.py | 9 +++++++++ realms/modules/wiki/models.py | 5 ++++- realms/modules/wiki/tests.py | 5 +++++ realms/modules/wiki/views.py | 4 ++-- realms/static/js/editor.js | 23 ++++++++++++++++++++++- setup.py | 2 +- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/realms/modules/search/hooks.py b/realms/modules/search/hooks.py index b31acf2..25a7d12 100644 --- a/realms/modules/search/hooks.py +++ b/realms/modules/search/hooks.py @@ -24,3 +24,12 @@ def wiki_rename_page(old_name, *args, **kwargs): return return search.delete_wiki(old_name) + + +@Wiki.after('delete_page') +def wiki_delete_page(name, *args, **kwargs): + + if not hasattr(search, 'index_wiki'): + return + + return search.delete_wiki(name) diff --git a/realms/modules/wiki/models.py b/realms/modules/wiki/models.py index 8d7a310..e5abff7 100644 --- a/realms/modules/wiki/models.py +++ b/realms/modules/wiki/models.py @@ -156,11 +156,14 @@ class Wiki(HookMixin): message = "Deleted %s" % name filename = cname_to_filename(name) + + # gittle.rm won't actually remove the file, have to do it ourselves + os.remove(os.path.join(self.path, filename)) self.gittle.rm(filename) commit = self.gittle.commit(name=username, email=email, message=message, - files=[str(filename)]) + files=[filename]) cache.delete_many(name) return commit diff --git a/realms/modules/wiki/tests.py b/realms/modules/wiki/tests.py index b405103..83db594 100644 --- a/realms/modules/wiki/tests.py +++ b/realms/modules/wiki/tests.py @@ -52,6 +52,11 @@ class WikiTest(WikiBaseTest): self.assert_403(self.client.delete(url_for('wiki.page_write', name='test'))) self.app.config['WIKI_LOCKED_PAGES'] = [] + # Create page, check it exists + self.create_page('test', message='test message', content='testing') + self.assert_200(self.client.get(url_for('wiki.page', name='test'))) + + # Delete page self.assert_200(self.client.delete(url_for('wiki.page_write', name='test'))) rv = self.client.get(url_for('wiki.page', name='test')) diff --git a/realms/modules/wiki/views.py b/realms/modules/wiki/views.py index 3fda3cb..b65aef7 100644 --- a/realms/modules/wiki/views.py +++ b/realms/modules/wiki/views.py @@ -151,12 +151,12 @@ def page_write(name): return dict(sha=sha) - else: + elif request.method == 'DELETE': # DELETE if cname in current_app.config.get('WIKI_LOCKED_PAGES'): return dict(error=True, message="Page is locked"), 403 - sha = g.current_wiki.delete_page(name, + sha = g.current_wiki.delete_page(cname, username=current_user.username, email=current_user.email) diff --git a/realms/static/js/editor.js b/realms/static/js/editor.js index 08d7e6b..8097d17 100644 --- a/realms/static/js/editor.js +++ b/realms/static/js/editor.js @@ -58,10 +58,31 @@ $(function(){ }); $("#delete-page-btn").click(function() { - bootbox.alert("Not Done Yet! Sorry"); + bootbox.confirm('Are you sure you want to delete this page?', function(result) { + if (result) { + deletePage(); + } + }); }); }); +var deletePage = function() { + var pageName = $page_name.val(); + var path = Config['RELATIVE_PATH'] + '/' + pageName; + + $.ajax({ + type: 'DELETE', + url: path, + }).done(function(data) { + var msg = 'Deleted page: ' + pageName; + bootbox.alert(msg, function() { + location.href = '/'; + }); + }).fail(function(data, status, error) { + bootbox.alert('Error deleting page!'); + }); +}; + var aced = new Aced({ editor: $('#entry-markdown-content').find('.editor').attr('id'), renderer: function(md) { return MDR.convert(md) }, diff --git a/setup.py b/setup.py index 1812098..53aea35 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ setup(name='realms-wiki', 'click==3.3', 'gevent==1.0.2', 'ghdiff==0.4', - 'gittle==0.4.0', + 'gittle==0.5.0', 'gunicorn==19.3', 'itsdangerous==0.24', 'markdown2==2.3.0',