diff --git a/paste/forms.py b/paste/forms.py index 219cd09..ff11bc0 100644 --- a/paste/forms.py +++ b/paste/forms.py @@ -55,10 +55,13 @@ class SnippetForm(forms.ModelForm): 'rows': 15, 'class': 'input-xxlarge' })) + parent = forms.ModelChoiceField(widget=forms.widgets.HiddenInput(), + queryset=Snippet.objects.all(), + empty_label="(None)", required=False) class Meta: model = Snippet - fields = ('title', 'content', 'private') + fields = ('title', 'content', 'private', 'parent',) def save(self, *args, **kwargs): # Add expire datestamp diff --git a/paste/migrations/0003_auto__add_field_snippet_parent.py b/paste/migrations/0003_auto__add_field_snippet_parent.py new file mode 100644 index 0000000..fd66160 --- /dev/null +++ b/paste/migrations/0003_auto__add_field_snippet_parent.py @@ -0,0 +1,72 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Snippet.parent' + db.add_column('paste_snippet', 'parent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paste.Snippet'], null=True, blank=True), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Snippet.parent' + db.delete_column('paste_snippet', 'parent_id') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 2, 15, 0, 24, 9, 357823)'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 2, 15, 0, 24, 9, 357747)'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'paste.snippet': { + 'Meta': {'object_name': 'Snippet'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paste.Snippet']", 'null': 'True', 'blank': 'True'}), + 'private': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'published': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + } + } + + complete_apps = ['paste'] diff --git a/paste/models.py b/paste/models.py index 61ab0ec..4b7a6b0 100644 --- a/paste/models.py +++ b/paste/models.py @@ -26,6 +26,7 @@ class Snippet(models.Model): private = models.BooleanField(default=True) published = models.DateTimeField(blank=True) expires = models.DateTimeField(blank=True, null=True) + parent = models.ForeignKey('Snippet', blank=True, null=True) objects = SnippetManager() diff --git a/paste/templates/paste/paste.html b/paste/templates/paste/paste.html index ea36990..9ba1c65 100644 --- a/paste/templates/paste/paste.html +++ b/paste/templates/paste/paste.html @@ -10,17 +10,21 @@

New Snippet

{% csrf_token %}
{% for field in form %} -
- -
- {{ field }} - {% if field.help_text %} -

{{ field.help_text }}

- {% endif %} + {% if not field.is_hidden %} +
+ +
+ {{ field }} + {% if field.help_text %} +

{{ field.help_text }}

+ {% endif %} +
-
+ {% else %} + {{ field }} + {% endif %} {% endfor %}
diff --git a/paste/views.py b/paste/views.py index 8e41ee2..bc82994 100644 --- a/paste/views.py +++ b/paste/views.py @@ -100,6 +100,7 @@ def get_form(self, form_class): raise Http404('No snippet named {}'.format(slug)) form.fields['content'].initial = object.content + form.fields['parent'].initial = object lexer_name = get_lexer(self.request, ['fork']) if lexer_name: diff --git a/pasteapp/urls.py b/pasteapp/urls.py index 2ab0f40..0d85d6e 100644 --- a/pasteapp/urls.py +++ b/pasteapp/urls.py @@ -13,7 +13,7 @@ url('^paste/$', AddSnippetView.as_view()), url('^syntax/$', SyntaxView.as_view()), url('^(?P[\w\d]+)/delete/$', DeleteSnippetView.as_view()), - url('^(?P[\w\d]+)\.\.\.(?P[\w\d]+)$', DiffView.as_view()), + url('^(?P[\w\d]+)\.\.\.?(?P[\w\d]+)/?$', DiffView.as_view()), url('^$', IndexView.as_view()), url('^u/(?P[\w\d]+)/$', UserView.as_view()), url(r'^browserid/', include('django_browserid.urls')),