コード例 #1
0
def preview(request):
    if request.method == 'POST':
        content = request.POST.get('content', '')
        article_content = ArticleContent(content=content)
        html = article_content.get_html_content()
        return JsonResponse(html)
    return JsonResponse({'error': 'Method not allowed'})
コード例 #2
0
ファイル: views.py プロジェクト: stianjensen/wikipendium.no
def preview(request):
    if request.method == 'POST':
        content = request.POST.get('content', '')
        article_content = ArticleContent(content=content)
        html = article_content.get_html_content()
        return JsonResponse(html)
    return JsonResponse({'error': 'Method not allowed'})
コード例 #3
0
ファイル: views.py プロジェクト: tOgg1/wikipendium.no
def preview(request):
    if request.method == "POST":
        content = request.POST.get("content", "")
        articleContent = ArticleContent(content=content)
        html = articleContent.get_html_content()
        return JsonResponse(html)
    return JsonResponse({"error": "Method not allowed"})
コード例 #4
0
ファイル: tests.py プロジェクト: aleksanb/wikipendium.no
class ArticleTest(TestCase):

    def setUp(self):
        self.u1 = User(username='******')
        self.u2 = User(username='******')
        self.u1.save()
        self.u2.save()
        self.article = Article(slug="TDT4100")
        self.article.save()
        self.ac1 = ArticleContent(article=self.article,
                                  updated=datetime.datetime(2012, 1, 1))
        self.ac2 = ArticleContent(article=self.article,
                                  updated=datetime.datetime(2013, 1, 1),
                                  title='per')
        self.ac1.edited_by = self.u1
        self.ac2.edited_by = self.u2
        self.ac1.save()
        self.ac2.save()

    def test_slug_should_uppercase_when_saved(self):
        article = Article()
        article.slug = "lowercase"
        article.save()
        self.assertEqual(article.slug, "LOWERCASE")

    def test_slug_should_strip_whitespace_when_saved(self):
        article = Article()
        article.slug = "   PADDED\v\t \n"
        article.save()
        self.assertEqual(article.slug, "PADDED")

    def test_slug_cannot_contain_slashes(self):
        article = Article()
        article.slug = "TDT/4100"
        try:
            article.save()
            self.assertEqual(1, 2)  # this should not be reached
        except ValidationError:
            self.assertEqual(1, 1)  # correct error was raised

    def test_get_contributors(self):
        self.assertEquals(self.article.get_contributors(),
                          set([self.u1, self.u2]))

    def test_get_newest_content(self):
        self.assertEquals(self.article.get_newest_content(), self.ac2)

    def test_get_available_languages(self):
        self.assertEquals(self.article.get_available_languages(),
                          [('English', self.ac2)])

    def test_get_absolute_url(self):
        self.assertEquals(self.article.get_absolute_url(), "/TDT4100_per")
コード例 #5
0
def edit(request, slug, lang='en'):
    article = get_object_or_404(Article, slug=slug)
    article_content = article.get_newest_content(lang)

    if request.method == 'POST':
        new_article_content = ArticleContent(article=article, lang=lang)
        form = EditArticleForm(request.POST, instance=new_article_content)
        if form.is_valid():
            new_article_content.article = article
            new_article_content.edited_by = request.user
            new_article_content.parent = article_content
            new_article_content.save()

            article_content.child = new_article_content
            article_content.save(change_updated_time=False)

            return HttpResponseRedirect(new_article_content.get_absolute_url())
    else:
        form = EditArticleForm(instance=article_content)

    available_languages = article.get_available_languages(article_content)
    language_list = map(lambda x: (x[0], x[1].get_edit_url),
                        available_languages or [])

    return render(request, 'edit.html', {
        'mathjax': True,
        'language_list': language_list,
        'articleContent': article_content,
        'form': form,
        'title': 'Edit: ' + article.slug,
    })
コード例 #6
0
ファイル: tests.py プロジェクト: emilte/wikipendium.no
 def setUp(self):
     self.u1 = User(username='******')
     self.u2 = User(username='******')
     self.u1.save()
     self.u2.save()
     self.article1 = Article(slug=u'TDT4100')
     self.article1.save()
     self.article2 = Article(slug=u'TIØ4258')
     self.article2.save()
     self.ac1 = ArticleContent(article=self.article1,
                               updated=datetime.datetime(2012, 1, 1))
     self.ac2 = ArticleContent(article=self.article1,
                               updated=datetime.datetime(2013, 1, 1),
                               title='per')
     self.ac3 = ArticleContent(article=self.article2,
                               updated=datetime.datetime(2001, 3, 7))
     self.ac4 = ArticleContent(article=self.article2,
                               updated=datetime.datetime(2001, 3, 8),
                               lang='nb')
     self.ac1.edited_by = self.u1
     self.ac2.edited_by = self.u2
     self.ac3.edited_by = self.u1
     self.ac4.edited_by = self.u2
     self.ac1.save()
     self.ac2.save()
     self.ac3.save()
     self.ac4.save()
コード例 #7
0
ファイル: tests.py プロジェクト: emilte/wikipendium.no
 def setUp(self):
     self.article1 = Article(slug=u'TDT4100')
     self.article1.save()
     self.ac1 = ArticleContent(article=self.article1,
                               updated=datetime.datetime(2012, 1, 1),
                               title='Cooking and baking',
                               lang='fr',
                               content='# Title')
     self.ac2 = ArticleContent(article=self.article1,
                               updated=datetime.datetime(2014, 1, 1),
                               title='Cooking and baking',
                               lang='fr')
     self.ac1.save()
     self.ac2.save()
コード例 #8
0
def new(request, slug=None):
    if request.POST:
        form = NewArticleForm(request.POST)
        if form.is_valid():
            slug = request.POST.get('slug')
            article = Article(slug=slug)
            article.save()

            article_content = form.save(commit=False)
            article_content.article = article
            article_content.edited_by = request.user
            article_content.save()
            return HttpResponseRedirect(article_content.get_absolute_url())
    else:
        article_content = None
        if slug:
            slug = slug.upper()
            article_content = ArticleContent(article=Article(slug=slug),
                                             lang=None)
        form = NewArticleForm(instance=article_content)

    return render(request, 'edit.html', {
        'mathjax': True,
        'form': form,
        'title': 'Create compendium',
    })
コード例 #9
0
ファイル: tests.py プロジェクト: aleksanb/wikipendium.no
 def setUp(self):
     self.u1 = User(username='******')
     self.u2 = User(username='******')
     self.u1.save()
     self.u2.save()
     self.article = Article(slug="TDT4100")
     self.article.save()
     self.ac1 = ArticleContent(article=self.article,
                               updated=datetime.datetime(2012, 1, 1))
     self.ac2 = ArticleContent(article=self.article,
                               updated=datetime.datetime(2013, 1, 1),
                               title='per')
     self.ac1.edited_by = self.u1
     self.ac2.edited_by = self.u2
     self.ac1.save()
     self.ac2.save()
コード例 #10
0
ファイル: views.py プロジェクト: peterhgombos/wikipendium.no
def edit(request, slug, lang='en'):
    article = get_object_or_404(Article, slug=slug)
    articleContent = article.get_newest_content(lang)

    if request.method == 'POST':
        new_articleContent = ArticleContent(article=article, lang=lang)
        form = EditArticleForm(request.POST, instance=new_articleContent)
        if form.is_valid():
            new_articleContent.article = article
            new_articleContent.edited_by = request.user
            new_articleContent.parent = articleContent
            new_articleContent.save()

            articleContent.child = new_articleContent
            articleContent.save(change_updated_time=False)

            return HttpResponseRedirect(new_articleContent.get_absolute_url())
    else:
        form = EditArticleForm(instance=articleContent)

    available_languages = article.get_available_languages(articleContent)
    language_list = map(lambda x: (x[0], x[1].get_edit_url),
                        available_languages or [])

    return render(request, 'edit.html', {
        "mathjax": True,
        "language_list": language_list,
        "articleContent": articleContent,
        "form": form,
        "title": "Edit: " + article.slug,
    })
コード例 #11
0
ファイル: forms.py プロジェクト: emilte/wikipendium.no
    def merge_contents_if_needed(self):
        parent_id = self.cleaned_data['parent_id']
        article = None
        articleContent = None
        slug = self.cleaned_data['slug']
        lang = self.cleaned_data['lang']
        try:
            article = Article.objects.get(slug=slug)
        except:
            article = Article(slug=slug)

        articleContent = article.get_newest_content(lang)
        if articleContent is None:
            articleContent = ArticleContent(article=article, lang=lang)

        if parent_id and parent_id != articleContent.pk:
            parent = ArticleContent.objects.get(id=parent_id)
            a = parent
            b = articleContent
            ancestors = set()
            commonAncestor = None
            while True:
                if a and a.pk in ancestors:
                    commonAncestor = a
                    break
                if b and b.pk in ancestors:
                    commonAncestor = b
                    break
                ancestors.add(a.pk)
                ancestors.add(b.pk)
                a = a.parent
                b = b.parent
                if a and a.parent is None and b and b.parent is None:
                    break

            try:
                merged = merge(self.cleaned_data['content'],
                               commonAncestor.content, articleContent.content)
                self.cleaned_data['content'] = merged
            except MergeError as e:
                raise ValidationError('Merge conflict.',
                                      params={'diff': e.diff})

        return True
コード例 #12
0
ファイル: tests.py プロジェクト: emilte/wikipendium.no
class ArticleTest(TestCase):

    def setUp(self):
        self.u1 = User(username='******')
        self.u2 = User(username='******')
        self.u1.save()
        self.u2.save()
        self.article1 = Article(slug=u'TDT4100')
        self.article1.save()
        self.article2 = Article(slug=u'TIØ4258')
        self.article2.save()
        self.ac1 = ArticleContent(article=self.article1,
                                  updated=datetime.datetime(2012, 1, 1))
        self.ac2 = ArticleContent(article=self.article1,
                                  updated=datetime.datetime(2013, 1, 1),
                                  title='per')
        self.ac3 = ArticleContent(article=self.article2,
                                  updated=datetime.datetime(2001, 3, 7))
        self.ac4 = ArticleContent(article=self.article2,
                                  updated=datetime.datetime(2001, 3, 8),
                                  lang='nb')
        self.ac1.edited_by = self.u1
        self.ac2.edited_by = self.u2
        self.ac3.edited_by = self.u1
        self.ac4.edited_by = self.u2
        self.ac1.save()
        self.ac2.save()
        self.ac3.save()
        self.ac4.save()

    def test_slug_should_uppercase_when_saved(self):
        article = Article()
        article.slug = u'lowercase'
        article.save()
        self.assertEqual(article.slug, u'LOWERCASE')

    def test_slug_should_strip_whitespace_when_saved(self):
        article = Article()
        article.slug = u'   PADDED\v\t \n'
        article.save()
        self.assertEqual(article.slug, u'PADDED')

    def test_slug_cannot_contain_slashes(self):
        article = Article()
        article.slug = u'TDT/4100'
        try:
            article.save()
            self.assertEqual(1, 2)  # this should not be reached
        except ValidationError:
            self.assertEqual(1, 1)  # correct error was raised

    def test_get_contributors(self):
        self.assertEquals(self.article1.get_contributors(),
                          set([self.u1, self.u2]))

    def test_get_newest_content(self):
        self.assertEquals(self.article1.get_newest_content(), self.ac2)

    def test_get_available_languages(self):
        self.assertEquals(self.article1.get_available_languages(),
                          [('English', self.ac2)])
        result = self.article2.get_available_languages()
        expected_result = [('English', self.ac3),
                           ('Norwegian', self.ac4)]
        self.assertEquals(expected_result, result)

    def test_get_absolute_url(self):
        self.assertEquals(self.article1.get_absolute_url(), '/TDT4100_per')

    def test_get_all_article_content(self):
        result = Article.get_all_article_content()
        expected_result = [[self.ac2], [self.ac3, self.ac4]]
        self.assertEquals(expected_result, result)

    def test_get_all_newest_contents(self):
        result = Article.get_all_newest_contents()
        expected_result = [self.ac2, self.ac4]
        self.assertEquals(expected_result, result)

    def test_get_all_newest_contents_all_languages(self):
        result = Article.get_all_newest_contents_all_languages()
        expected_result = [self.ac4, self.ac3, self.ac2]
        self.assertEquals(expected_result, result)

    def test___unicode__(self):
        self.assertEquals(u'TIØ4258', unicode(self.article2))
        self.assertEquals(unicode, type(unicode(self.article2)))

    def test_get_sorted_contents(self):
        result = list(self.article1.get_sorted_contents())
        expected_result = [self.ac2, self.ac1]
        self.assertEquals(expected_result, result)

        result = list(self.article2.get_sorted_contents())
        expected_result = [self.ac3]
        self.assertEquals(expected_result, result)

        result = list(self.article2.get_sorted_contents(lang='nb'))
        expected_result = [self.ac4]
        self.assertEquals(expected_result, result)

    def test_get_available_language_codes(self):
        result = self.article2.get_available_language_codes()
        expected_result = ['en', 'nb']
        self.assertEquals(expected_result, result)

    def test_get_slug(self):
        self.assertEquals(u'TIØ4258', self.article2.get_slug())
コード例 #13
0
ファイル: tests.py プロジェクト: emilte/wikipendium.no
 def test_title_cannot_contain_slashes(self):
     ac = ArticleContent()
     ac.title = 'asdf/sdfi'
     ac.article = self.article1
     with self.assertRaises(ValidationError):
         ac.save()
コード例 #14
0
ファイル: tests.py プロジェクト: emilte/wikipendium.no
class ArticleContentTest(TestCase):

    def setUp(self):
        self.article1 = Article(slug=u'TDT4100')
        self.article1.save()
        self.ac1 = ArticleContent(article=self.article1,
                                  updated=datetime.datetime(2012, 1, 1),
                                  title='Cooking and baking',
                                  lang='fr',
                                  content='# Title')
        self.ac2 = ArticleContent(article=self.article1,
                                  updated=datetime.datetime(2014, 1, 1),
                                  title='Cooking and baking',
                                  lang='fr')
        self.ac1.save()
        self.ac2.save()

    def test_title_cannot_contain_slashes(self):
        ac = ArticleContent()
        ac.title = 'asdf/sdfi'
        ac.article = self.article1
        with self.assertRaises(ValidationError):
            ac.save()

    def test_get_full_title(self):
        self.assertEquals('TDT4100: Cooking and baking',
                          self.ac1.get_full_title())

    def test_get_last_descendant(self):
        self.assertEquals(self.ac2,
                          self.ac1.get_last_descendant())

    def test_get_absolute_url(self):
        self.assertEquals('/TDT4100_Cooking_and_baking/fr/',
                          self.ac1.get_absolute_url())

    def test_get_edit_url(self):
        self.assertEquals('/TDT4100_Cooking_and_baking/fr/edit/',
                          self.ac1.get_edit_url())

    def test_get_add_language_url(self):
        self.assertEquals('/TDT4100/add_language/',
                          self.ac1.get_add_language_url())

    def test_get_history_url(self):
        self.assertEquals('/TDT4100_Cooking_and_baking/fr/history/',
                          self.ac1.get_history_url())

    def test_get_history_single_url(self):
        self.assertEquals('/TDT4100_Cooking_and_baking/fr/history/%s/' % (
                          self.ac1.pk), self.ac1.get_history_single_url())

    def test_get_html_content(self):
        self.assertTrue('<h1>' in self.ac1.get_html_content()['html'])

    def test___unicode__(self):
        self.assertEquals(u'[1] Cooking and baking',
                          unicode(self.ac1))

    def test_line_endings(self):
        ac = ArticleContent.objects.create(
            article=self.article1,
            content=u'Test\r\nnext line.'
        )
        saved_ac = ArticleContent.objects.get(pk=ac.pk)
        self.assertEquals(u'Test\nnext line.',
                          saved_ac.content)