Browse Source

Add a bookmarklet

The bookmarklet lets you quickly open the Add page
with the URL already populated in the URLs box.
Adam Wolf 5 years ago
parent
commit
8d3295458c
2 changed files with 17 additions and 0 deletions
  1. 11 0
      archivebox/core/views.py
  2. 6 0
      archivebox/themes/default/add_links.html

+ 11 - 0
archivebox/core/views.py

@@ -114,12 +114,23 @@ class AddView(UserPassesTestMixin, FormView):
     template_name = "add_links.html"
     form_class = AddLinkForm
 
+    def get_initial(self):
+        """Prefill the AddLinkForm with the 'url' GET parameter"""
+        if self.request.method == 'GET':
+            url = self.request.GET.get('url', None)
+            if url:
+                return {'url': url}
+        else:
+            return super().get_initial()
+
     def test_func(self):
         return PUBLIC_ADD_VIEW or self.request.user.is_authenticated
 
     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
         context["title"] = "Add URLs"
+        # We can't just call request.build_absolute_uri in the template, because it would include query parameters
+        context["absolute_add_path"] = self.request.build_absolute_uri(self.request.path)
         return context
 
     def form_valid(self, form):

+ 6 - 0
archivebox/themes/default/add_links.html

@@ -49,6 +49,12 @@
                     <small>(it's safe to leave this page, adding will continue in the background)</small>
                 </div>
             </center>
+            {% if absolute_add_path %}
+            <center id="bookmarklet">
+              <p>Bookmark this link to quickly add to your archive:
+                <a href="javascript:void(window.open('{{ absolute_add_path }}?url='+document.location.href));">Add to ArchiveBox</a></p>
+            </center>
+            {% endif %}
             <script>
                 document.getElementById('add-form').addEventListener('submit', function(event) {
                     setTimeout(function() {