├── INSTALL
├── LICENSE
├── Makefile
├── README
├── __init__.py
├── aggregator
├── __init__.py
├── admin.py
├── bin
│ ├── mark_defunct_feeds.py
│ └── update_feeds.py
├── feeds.py
├── models.py
└── templatetags
│ ├── __init__.py
│ └── aggregator.py
├── blog
├── __init__.py
├── admin.py
├── feeds.py
├── models.py
├── templatetags
│ ├── __init__.py
│ └── latestblogentry.py
└── urls.py
├── captcha
├── __init__.py
├── fields.py
├── forms.py
├── views.py
└── widgets.py
├── community
├── __init__.py
├── admin.py
├── feeds.py
├── models.py
├── subscriptions.py
├── summary.py
├── urls.py
└── views.py
├── cran
└── update_cran.py
├── forshow
├── __init__.py
├── admin.py
├── models.py
└── views.py
├── manage.py
├── media
├── css
│ └── base.css
└── images
│ ├── bib.png
│ ├── bookmark.png
│ ├── cray_flat_small.png
│ ├── cray_small.png
│ ├── disk.png
│ ├── homepage.png
│ ├── jmlr.jpg
│ ├── mloss.png
│ ├── mloss_flat_small.png
│ ├── mloss_logo_new.jpg
│ ├── mloss_logo_new.png
│ ├── mloss_small.png
│ ├── mloss_transparent_small.png
│ ├── paper.png
│ ├── rlogo.png
│ ├── rss.png
│ ├── stars
│ ├── blank.png
│ ├── half.png
│ ├── quarter.png
│ ├── star.png
│ └── three-quarter.png
│ ├── subscribe.png
│ └── temp-logo.jpg
├── registration
├── __init__.py
├── admin.py
├── auth_urls.py
├── backends
│ ├── __init__.py
│ ├── default
│ │ ├── __init__.py
│ │ └── urls.py
│ └── simple
│ │ ├── __init__.py
│ │ └── urls.py
├── forms.py
├── locale
│ ├── ar
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── bg
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── da
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── de
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── el
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── en
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── es
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── es_AR
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── fr
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── he
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── is
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── it
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── ja
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── ko
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── nl
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── pl
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── pt_BR
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── ru
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── sl
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── sr
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── sv
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ ├── zh_CN
│ │ └── LC_MESSAGES
│ │ │ ├── django.mo
│ │ │ └── django.po
│ └── zh_TW
│ │ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── management
│ ├── __init__.py
│ └── commands
│ │ ├── __init__.py
│ │ └── cleanupregistration.py
├── models.py
├── signals.py
└── views.py
├── revision
├── __init__.py
├── admin.py
├── models.py
├── urls.py
└── views.py
├── scripts
└── fix_jmlr_subs.py
├── settings.py
├── software
├── __init__.py
├── admin.py
├── feeds.py
├── forms.py
├── models.py
├── templatetags
│ ├── __init__.py
│ ├── get_version.py
│ ├── paginator.py
│ ├── permute_items.py
│ ├── safe_markup.py
│ └── show_stars.py
├── urls.py
└── views
│ ├── __init__.py
│ ├── entry.py
│ └── list.py
├── subscriptions
├── __init__.py
├── admin.py
└── models.py
├── subscriptions2
├── __init__.py
├── admin.py
└── models.py
├── templates
├── 404.html
├── 500.html
├── aggregator
│ └── feeditem_list.html
├── author_list.html
├── base.html
├── base_2col.html
├── base_workshop.html
├── blog
│ ├── blogitem_archive_day.html
│ ├── blogitem_archive_month.html
│ ├── blogitem_archive_year.html
│ └── blogitem_detail.html
├── comments
│ ├── form.html
│ ├── posted.html
│ └── preview.html
├── community
│ ├── blog_list.html
│ ├── forum_base.html
│ ├── forum_list.html
│ ├── summary.html
│ ├── thread.html
│ └── thread_list.html
├── faq_index.html
├── flatpages
│ └── default.html
├── news_index.html
├── paginator.html
├── registration
│ ├── activate.html
│ ├── activation_complete.html
│ ├── activation_email.txt
│ ├── activation_email_subject.txt
│ ├── login.html
│ ├── logout.html
│ ├── password_change_done.html
│ ├── password_change_form.html
│ ├── password_reset_complete.html
│ ├── password_reset_confirm.html
│ ├── password_reset_done.html
│ ├── password_reset_email.html
│ ├── password_reset_form.html
│ ├── registration_complete.html
│ └── registration_form.html
├── software
│ ├── author_list.html
│ ├── base_software.html
│ ├── dataformat_list.html
│ ├── language_list.html
│ ├── license_list.html
│ ├── opsys_list.html
│ ├── software_add.html
│ ├── software_contact_author.html
│ ├── software_detail.html
│ ├── software_list.html
│ ├── tag_list.html
│ └── user_list.html
└── users
│ ├── user_change_done.html
│ ├── user_detail.html
│ └── user_list.html
├── templatetags
├── __init__.py
├── get_version.py
├── paginator.py
├── permute_items.py
├── safe_markup.py
└── show_stars.py
├── update_feeds.sh
├── urls.py
├── user
├── __init__.py
├── urls.py
└── views.py
├── utils.py
└── wfwfeed.py
/INSTALL:
--------------------------------------------------------------------------------
1 | svn co http://code.djangoproject.com/svn/django/trunk/ Django
2 |
3 | # sqlite3 is installed on my mac
4 | sudo port install py-sqlite py-pil py-readline
5 |
6 | # start a new project
7 | django-admin.py startproject mloss
8 | cd mloss
9 | python manage.py runserver
10 |
11 | # start a new app
12 | python manage.py startapp
13 | # check whether ok
14 | python manage.py validate
15 |
16 | # list sql commands to CREATE TABLE
17 | python manage.py sqlall
18 | # do CREATE TABLE
19 | python manage.py syncdb
20 | # for SQL freaks
21 | python manage.py dbshell
22 |
23 |
24 | # cab, the app on djangosnippets
25 | svn checkout http://cab.googlecode.com/svn/trunk/ cab
26 | # requires markdown
27 | http://sourceforge.net/project/showfiles.php?group_id=153041
28 | # requires pygments
29 | svn co http://trac.pocoo.org/repos/pygments/trunk pygments
30 | # get registration from googlecode http://code.google.com/p/django-registration/
31 |
32 |
33 | # How to set up a django server
34 | http://www.lethain.com/entry/2007/jul/17/dreamier-dream-server-nginx/
35 |
36 |
37 |
38 | # Some free style sheets
39 | http://www.freecsstemplates.org/
40 |
41 |
42 | # how to update tables
43 | python manage.py dumpdata software > software.json
44 | python manage.py sqlclear software > software_drop.sql
45 | python manage.py dbshell
46 | # -- inside the sqlite shell, paste the commands in software_drop.sql
47 | % -- to exit, type .exit
48 | # -- update your model after getting rid of the tables
49 | python manage.py syncdb
50 | python manage.py loaddata software.json
51 |
52 |
53 |
54 |
55 | # how to export from svn to production
56 | make release
57 |
58 |
59 | # admin script to tidy up orphans
60 | python manage.py shell
61 | from software.models import clean_all
62 | clean_all()
63 |
64 | # sqlite -> mysql conversion
65 | PYTHONPATH=. python ../admintools/db_dump.py dump
66 | now switch to mysql (empty db)
67 | python manage.py syncdb
68 | PYTHONPATH=. python ../admintools/db_dump.py load
69 |
70 | #the manual way below does not work reliably!!!
71 | #
72 | #sqlite3 mloss.db .dump .quit >~/mloss_sqlite.dump
73 | #edit mloss_sqlite.dump
74 | #replace all " with ` ( grave backticks!)
75 | #remove "BEGIN TRANSACTION;"
76 | #remove "COMMIT;"
77 | #-> now switch to mysql
78 | #python manage.py syncdb
79 | #mysql -p mloss mloss/mloss.dump
16 | # ( ssh -p 65514 mloss@zut.tuebingen.mpg.de chmod 700 mysql_to_sqlite.sh \; ./mysql_to_sqlite.sh ) | sqlite3 mloss/mloss.db
17 | # ssh -p 65514 mloss@zut.tuebingen.mpg.de rm -f mysql_to_sqlite.sh
18 | #
19 | release: clean
20 | # svn commit
21 | # svn update
22 | #git pull
23 | rm -rf $(RELEASEDIR)/$(RELEASENAME)
24 | # svn export mloss $(RELEASEDIR)/$(RELEASENAME)
25 | git checkout-index -f -a --prefix=$(RELEASEDIR)/$(RELEASENAME)/
26 | ssh mloss@${HOST} rm -rf $(WEBSITEDIR)/$(RELEASENAME)
27 | tar cjvf - -C releases --exclude 'mloss.db' $(RELEASENAME) | \
28 | ssh mloss@${HOST} \
29 | \( tar -xjvf - -C $(WEBSITEDIR) \; sync \; sync \; sync \; \
30 | sed -i "s#XXXXXXXXX#\`cat /home/mloss/.mysql_password\`#" $(WEBSITEDIR)/$(RELEASENAME)/settings.py \; \
31 | sed -i "s#RECAPTCHAPUBLIC#\`cat /home/mloss/.recaptcha_public\`#" $(WEBSITEDIR)/$(RELEASENAME)/settings.py \; \
32 | sed -i "s#RECAPTCHAPRIVATE#\`cat /home/mloss/.recaptcha_private\`#" $(WEBSITEDIR)/$(RELEASENAME)/settings.py \; \
33 | sed -i '"s/^PRODUCTION = False/PRODUCTION = True/g"' $(WEBSITEDIR)/$(RELEASENAME)/settings.py \; \
34 | sed -i '"s/^VERSION = \"r0000\"/VERSION = \"$(VER)\"/g"' $(WEBSITEDIR)/$(RELEASENAME)/settings.py \; \python -mcompileall $(WEBSITEDIR)/$(RELEASENAME)/ \; \
35 | find $(WEBSITEDIR)/$(RELEASENAME) -type d -exec chmod 755 {} '\;' \; \
36 | find $(WEBSITEDIR)/$(RELEASENAME) -type f -exec chmod 644 {} '\;' \; \
37 | chmod 640 $(WEBSITEDIR)/$(RELEASENAME)/settings.py\* \; \
38 | cp $(WEBSITEDIR)/$(RELEASENAME)/media/css/base.css static/media/css/base.css \; \
39 | chmod 644 static/media/css/base.css \; \
40 | cd $(WEBSITEDIR) \; ln -snf $(RELEASENAME) mloss \; \
41 | chmod 755 /home/mloss/bin/update_*.sh \; \
42 | sudo /etc/init.d/fapws3 restart \
43 | \)
44 | rm -rf $(RELEASEDIR)/$(RELEASENAME)
45 |
46 | tar: clean
47 | rm -rf "$(RELEASEDIR)/$(RELEASENAME)"
48 | svn export mloss $(RELEASEDIR)/$(RELEASENAME)
49 | cd $(RELEASEDIR) && tar cjvf $(RELEASETAR) $(RELEASENAME)
50 | rm -rf "$(RELEASEDIR)/$(RELEASENAME)"
51 |
52 | clean:
53 | find ./ -name '*.pyc' -delete
54 | find ./ -name '*.swp' -delete
55 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | This is the source code of the mloss.org website. It was written by the
2 | mloss team, which currently is (in alphabetical order)
3 |
4 | Mikio Braun
5 | Cheng Soon Ong
6 | Soeren Sonnenburg
7 |
8 |
9 | FEATURES
10 |
11 | The website contains quite a few features and is also quite specific,
12 | so you may or may not find it useful for your means. The features include:
13 |
14 | * a registration system for users of the site
15 | * a database of user submitted software projects
16 | * a rating system for the projects
17 | * a commenting system for the projects
18 | * access-statistics to the projects
19 | * a blog (although articles have to be entered directly through django's
20 | admin interface)
21 | * a forum
22 | * email notifications for tracking projects and the forum
23 | * a tool which automatically extracts projects in the "machine learning"
24 | section from CRAN (a repository for packages for the R programming
25 | language)
26 |
27 | The source code is organized into several sub-directories, so called
28 | "applications". Each directory is organized more or less according to
29 | the django standard, at least containing a definition of the models in
30 | models.py, and of the url mappings in urls.py. If you want to find out
31 | how a specific url is processed, have a look at the urls.py which tell
32 | you which method takes care of the request.
33 |
34 | CHANGELOG
35 |
36 | mloss.org svn-r482-September-2008
37 |
38 | * Several bugfixes and adjustments related to last minute
39 | changes in django 1.0:
40 |
41 | - comments now don't require a password
42 | - search didn't work when returning >10 results
43 | - added #of subscriptions to list view
44 | - better interlinking between forum and blog
45 | - fix comments links in blog and show archive,
46 | - option to filter by published in JMLR
47 | - minor style changes
48 | - change sorting order in forum (new threads first)
49 |
50 | mloss.org svn-r470-August-2008
51 |
52 | * Initial Release
53 |
54 | LICENSE
55 |
56 | The source code is licensed under GPLv3, and incorporates the work of
57 | a number of projects, cf. LICENSE for details.
58 |
59 |
60 | INSTALLING
61 |
62 | This website is built using the django framework
63 | (http://www.djangoproject.com). Refer to that website for general
64 | information about the framework. An online version of a very nice book
65 | on django can be found at http://www.djangobook.com/ .
66 |
67 | Download Django 1.0 or a recent svn snapshot
68 |
69 | svn co http://code.djangoproject.com/svn/django/trunk/ Django
70 |
71 | and install it via the usual python setup.py install.
72 |
73 | To locally test out the mloss.org webpage untar the source and run
74 |
75 | python manage.py migrate
76 | python manage.py runserver
77 |
78 | then open http://127.0.0.1:8000 in a web browser and have fun.
79 |
80 | In case you want to put things live follow the steps described at
81 | http://www.djangoproject.com/documentation/modpython/.
82 |
83 | Sincerely,
84 | your mloss team.
85 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/aggregator/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/aggregator/__init__.py
--------------------------------------------------------------------------------
/aggregator/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from aggregator.models import Feed
3 |
4 | class FeedAdmin(admin.ModelAdmin):
5 | pass
6 |
7 | admin.site.register(Feed, FeedAdmin)
8 |
--------------------------------------------------------------------------------
/aggregator/bin/mark_defunct_feeds.py:
--------------------------------------------------------------------------------
1 | """
2 | Mark people with 404'ing feeds as defunct.
3 | """
4 |
5 | for f in Feed.objects.all():
6 | try:
7 | r = urllib2.urlopen(f.feed_url)
8 | except urllib2.HTTPError, e:
9 | if e.code == 404 or e.code == 500:
10 | print "%s on %s; marking defunct" % f
11 | f.is_defunct = True
12 | f.save()
13 | else:
14 | raise
--------------------------------------------------------------------------------
/aggregator/bin/update_feeds.py:
--------------------------------------------------------------------------------
1 | """
2 | Update feeds for Django community page. Requires Mark Pilgrim's excellent
3 | Universal Feed Parser (http://feedparser.org)
4 | """
5 |
6 | import os
7 | import sys
8 | import time
9 | import optparse
10 | import datetime
11 | import feedparser
12 |
13 | sys.path.insert(0,'/home/mloss/django/')
14 | sys.path.insert(0,'/home/mloss/django/mloss/')
15 |
16 | os.environ['DJANGO_SETTINGS_MODULE'] = 'mloss.settings'
17 |
18 | def update_feeds():
19 | from aggregator.models import Feed, FeedItem
20 | for feed in Feed.objects.filter(is_defunct=False):
21 | parsed_feed = feedparser.parse(feed.feed_url)
22 | print 'Reading ' + feed.title + ' with ' + str(len(parsed_feed.entries)) + ' entries.'
23 | if len(parsed_feed.entries) == 0:
24 | print 'No feed entries found, error is...'
25 | print parsed_feed.bozo_exception
26 | for entry in parsed_feed.entries:
27 | title = entry.title.encode(parsed_feed.encoding, "xmlcharrefreplace")
28 | print 'Updating ' + title
29 | guid = entry.get("id", entry.link).encode(parsed_feed.encoding, "xmlcharrefreplace")
30 | link = entry.link.encode(parsed_feed.encoding, "xmlcharrefreplace")
31 |
32 | if not guid:
33 | guid = link
34 |
35 | if hasattr(entry, "summary"):
36 | content = entry.summary
37 | elif hasattr(entry, "content"):
38 | content = entry.content[0].value
39 | elif hasattr(entry, "description"):
40 | content = entry.description
41 | else:
42 | content = u""
43 | content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
44 |
45 | try:
46 | if entry.has_key('modified_parsed'):
47 | date_modified = datetime.datetime.fromtimestamp(time.mktime(entry.modified_parsed))
48 | elif parsed_feed.feed.has_key('modified_parsed'):
49 | date_modified = datetime.datetime.fromtimestamp(time.mktime(parsed_feed.feed.modified_parsed))
50 | elif parsed_feed.has_key('modified'):
51 | date_modified = datetime.datetime.fromtimestamp(time.mktime(parsed_feed.modified))
52 | else:
53 | date_modified = datetime.datetime.now()
54 | except TypeError:
55 | date_modified = datetime.datetime.now()
56 |
57 | try:
58 | feed.feeditem_set.get(guid=guid)
59 | except FeedItem.DoesNotExist:
60 | feed.feeditem_set.create(title=title[:200], link=link, summary=content, guid=guid, date_modified=date_modified)
61 |
62 | if __name__ == '__main__':
63 | parser = optparse.OptionParser()
64 | parser.add_option('--settings')
65 | options, args = parser.parse_args()
66 | if options.settings:
67 | os.environ["DJANGO_SETTINGS_MODULE"] = options.settings
68 | update_feeds()
69 |
--------------------------------------------------------------------------------
/aggregator/feeds.py:
--------------------------------------------------------------------------------
1 | from django.contrib.syndication.views import Feed
2 | from aggregator.models import FeedItem
3 |
4 | class CommunityAggregatorFeed(Feed):
5 | title = "The mloss.org community aggregator"
6 | link = "http://mloss.org"
7 | description = "Aggregated feeds from the machine learning community."
8 |
9 | def items(self):
10 | return FeedItem.objects.all()[:10]
11 |
--------------------------------------------------------------------------------
/aggregator/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | class Feed(models.Model):
4 | title = models.CharField(max_length=200)
5 | feed_url = models.URLField(unique=True)
6 | public_url = models.URLField()
7 | is_defunct = models.BooleanField()
8 |
9 | class Meta:
10 | db_table = 'aggregator_feeds'
11 |
12 | def __unicode__(self):
13 | return unicode(self.title)
14 |
15 | class FeedItem(models.Model):
16 | feed = models.ForeignKey(Feed)
17 | title = models.CharField(max_length=200)
18 | link = models.URLField()
19 | summary = models.TextField(blank=True)
20 | date_modified = models.DateTimeField()
21 | guid = models.CharField(max_length=200, unique=True, db_index=True)
22 |
23 | class Meta:
24 | db_table = 'aggregator_feeditems'
25 | ordering = ("-date_modified",)
26 |
27 | def __unicode__(self):
28 | return unicode(self.title)
29 |
30 | def get_absolute_url(self):
31 | return self.link
32 |
33 |
--------------------------------------------------------------------------------
/aggregator/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/aggregator/templatetags/__init__.py
--------------------------------------------------------------------------------
/aggregator/templatetags/aggregator.py:
--------------------------------------------------------------------------------
1 | from django import template
2 |
3 |
4 | class FeedListNode(template.Node):
5 | def __init__(self, varname):
6 | self.varname = varname
7 |
8 | def render(self, context):
9 | from aggregator.models import Feed
10 | context[self.varname] = Feed.objects.filter(is_defunct=False)
11 | return ''
12 |
13 | def do_get_feed_list(parser, token):
14 | """
15 | {% get_feed_list as feed_list %}
16 | """
17 | bits = token.contents.split()
18 | if len(bits) != 3:
19 | raise template.TemplateSyntaxError("'%s' tag takes two arguments" % bits[0])
20 |
21 | if bits[1] != "as":
22 | raise template.TemplateSyntaxError("First argument to '%s' tag must be 'as'" % bits[0])
23 |
24 | return FeedListNode(bits[2])
25 |
26 |
27 | register = template.Library()
28 | register.tag('get_feed_list', do_get_feed_list)
29 |
--------------------------------------------------------------------------------
/blog/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/blog/__init__.py
--------------------------------------------------------------------------------
/blog/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from blog.models import BlogItem
3 |
4 | class BlogItemAdmin(admin.ModelAdmin):
5 | list_display = ('pub_date', 'headline', 'author')
6 |
7 |
8 | admin.site.register(BlogItem, BlogItemAdmin)
--------------------------------------------------------------------------------
/blog/feeds.py:
--------------------------------------------------------------------------------
1 | from wfwfeed import WellFormedWebRss
2 | from blog.models import BlogItem
3 | from django.contrib.sites.models import Site
4 | from django.http import HttpResponse
5 | from markdown import markdown
6 |
7 | from community.summary import get_latest_news
8 | from django.views.generic.list import ListView
9 | from django.views.generic.dates import YearArchiveView
10 | from django.views.generic.dates import MonthArchiveView
11 | from django.views.generic.dates import DateDetailView
12 |
13 |
14 | class BlogView(ListView):
15 | context_object_name='latest'
16 |
17 | def get_template_names(self):
18 | return 'community/blog_list.html'
19 |
20 | def get_queryset(self, **kwargs):
21 | return BlogItem.objects.all()
22 |
23 | def get_context_data(self, **kwargs):
24 | context=super(BlogView, self).get_context_data(**kwargs)
25 | context.update(get_latest_news())
26 | return context
27 |
28 | class DetailView(DateDetailView):
29 | queryset=BlogItem.objects.all()
30 | date_field = "pub_date"
31 |
32 | def get_context_data(self, **kwargs):
33 | context=super(DetailView, self).get_context_data(**kwargs)
34 | context.update(get_latest_news())
35 | return context
36 |
37 | class YearView(YearArchiveView):
38 | queryset=BlogItem.objects.all()
39 | date_field = "pub_date"
40 |
41 | def get_context_data(self, **kwargs):
42 | context=super(YearView, self).get_context_data(**kwargs)
43 | context.update(get_latest_news())
44 | return context
45 |
46 | class MonthView(MonthArchiveView):
47 | queryset=BlogItem.objects.all()
48 | date_field = "pub_date"
49 |
50 | def get_context_data(self, **kwargs):
51 | context=super(MonthView, self).get_context_data(**kwargs)
52 | context.update(get_latest_news())
53 | return context
54 |
55 | def RssBlogFeed(request):
56 | try:
57 | object_list = BlogItem.objects.all().order_by('-pub_date')[:10]
58 | except documents.DocumentDoesNotExist:
59 | raise Http404
60 | feed = WellFormedWebRss( u"The mloss.org community blog",
61 | "http://mloss.org/community",
62 | u'Some thoughts about machine learning open source software',
63 | language=u"en")
64 |
65 | for object in object_list:
66 | link = 'http://%s%s' % (Site.objects.get_current().domain, object.get_absolute_url())
67 | #commentlink=u'http://%s/software/rss/comments/%i' % (Site.objects.get_current().domain, object.id)
68 | #comments=commentlink,
69 | feed.add_item( object.headline.encode('utf-8'),
70 | link, markdown(object.body),
71 | author_name=object.author.encode('utf-8'),
72 | pubdate=object.pub_date, unique_id=link)
73 | response = HttpResponse(mimetype='application/xml')
74 | feed.write(response, 'utf-8')
75 | return response
76 |
--------------------------------------------------------------------------------
/blog/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from utils import slugify
3 |
4 | class BlogItem(models.Model):
5 | pub_date = models.DateTimeField()
6 | slug = models.SlugField(unique_for_date='pub_date', editable=True)
7 | headline = models.CharField(max_length=200)
8 | summary = models.TextField(help_text="Use markdown.")
9 | body = models.TextField(help_text="Use markdown.")
10 | author = models.CharField(max_length=100)
11 |
12 | class Meta:
13 | ordering = ('-pub_date',)
14 | get_latest_by = 'pub_date'
15 |
16 | def __unicode__(self):
17 | return unicode(self.headline)
18 |
19 | def get_absolute_url(self):
20 | from django.urls import reverse
21 | return reverse('get_blog', kwargs={'year': int(self.pub_date.strftime("%Y").lower()), 'month': self.pub_date.strftime("%b").lower(), 'day': self.pub_date.strftime("%d").lower(), 'slug': self.slug})
22 |
23 | def get_comment_url(self):
24 | return ("/community/blog/%s/%s/#comments", (self.pub_date.strftime("%Y/%b/%d").lower(), self.slug))
25 |
26 | def save(self):
27 | if not self.id:
28 | self.slug = slugify(self.headline)
29 | super(BlogItem,self).save()
30 |
--------------------------------------------------------------------------------
/blog/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/blog/templatetags/__init__.py
--------------------------------------------------------------------------------
/blog/templatetags/latestblogentry.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from blog.models import BlogItem
3 | import datetime
4 |
5 | class LatestBlogEntriesNode(template.Node):
6 | def __init__(self, num, varname):
7 | self.num, self.varname = num, varname
8 |
9 | def render(self, context):
10 | context[self.varname] = list(BlogItem.objects.filter(pub_date__lte=datetime.datetime.now())[:self.num])
11 | return ''
12 |
13 | def do_get_latest_blog_entries(parser, token):
14 | """
15 | {% get_latest_blog_entries 2 as latest_entries %}
16 | """
17 | bits = token.contents.split()
18 | if len(bits) != 4:
19 | raise template.TemplateSyntaxError, "'%s' tag takes three arguments" % bits[0]
20 | if bits[2] != 'as':
21 | raise template.TemplateSyntaxError, "First argument to '%s' tag must be 'as'" % bits[0]
22 | return LatestBlogEntriesNode(bits[1], bits[3])
23 |
24 | register = template.Library()
25 | register.tag('get_latest_blog_entries', do_get_latest_blog_entries)
26 |
--------------------------------------------------------------------------------
/blog/urls.py:
--------------------------------------------------------------------------------
1 |
2 | from django.conf.urls import url, include
3 |
4 | from blog.models import BlogItem
5 | from blog.feeds import RssBlogFeed
6 | from blog.feeds import BlogView
7 | from blog.feeds import YearView
8 | from blog.feeds import MonthView
9 | from blog.feeds import DetailView
10 |
11 |
12 | urlpatterns = [
13 | url(r'^(?P\d{4})/(?P[a-z]{3})/(?P\w{1,2})/(?P[A-Za-z0-9-_]+)/$', DetailView.as_view(), name='get_blog'),
14 | url(r'^(?P\d{4})/(?P[a-z]{3})/$', MonthView.as_view()),
15 | url(r'^(?P\d{4})/$', YearView.as_view()),
16 | url(r'^rss/latest/$', RssBlogFeed),
17 | ]
18 |
--------------------------------------------------------------------------------
/captcha/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/captcha/__init__.py
--------------------------------------------------------------------------------
/captcha/fields.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 | from django import forms
3 | from django.utils.encoding import smart_unicode
4 | from django.utils.translation import ugettext_lazy as _
5 |
6 | from captcha.widgets import ReCaptcha
7 | from recaptcha.client import captcha
8 |
9 | class ReCaptchaField(forms.CharField):
10 | default_error_messages = {
11 | 'captcha_invalid': _(u'Invalid captcha')
12 | }
13 |
14 | def __init__(self, *args, **kwargs):
15 | self.widget = ReCaptcha
16 | self.required = True
17 | super(ReCaptchaField, self).__init__(*args, **kwargs)
18 |
19 | def clean(self, values):
20 | super(ReCaptchaField, self).clean(values[1])
21 | recaptcha_challenge_value = smart_unicode(values[0])
22 | recaptcha_response_value = smart_unicode(values[1])
23 | check_captcha = captcha.submit(recaptcha_challenge_value,
24 | recaptcha_response_value, settings.RECAPTCHA_PRIVATE_KEY, {})
25 | if not check_captcha.is_valid:
26 | raise forms.util.ValidationError(self.error_messages['captcha_invalid'])
27 | return values[0]
--------------------------------------------------------------------------------
/captcha/forms.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 | from registration.forms import RegistrationFormTermsOfService
3 | from captcha.fields import ReCaptchaField
4 | from django.conf import settings
5 | from django.utils.encoding import smart_unicode, force_unicode
6 | from django.utils.translation import ugettext_lazy as _
7 | from django.forms.forms import BoundField
8 | from django.utils.html import conditional_escape
9 | from django.utils.safestring import mark_safe
10 | from snowpenguin.django.recaptcha2.fields import ReCaptchaField
11 | from snowpenguin.django.recaptcha2.widgets import ReCaptchaWidget
12 |
13 | class RegistrationFormCaptcha(RegistrationFormTermsOfService):
14 | captcha = ReCaptchaField(widget=ReCaptchaWidget())
15 |
--------------------------------------------------------------------------------
/captcha/widgets.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 | from django.utils.safestring import mark_safe
3 | from django.conf import settings
4 | from recaptcha.client import captcha
5 |
6 | class ReCaptcha(forms.widgets.Widget):
7 | recaptcha_challenge_name = 'recaptcha_challenge_field'
8 | recaptcha_response_name = 'recaptcha_response_field'
9 |
10 |
11 | def render(self, name, value, attrs=None):
12 | return mark_safe(u'%s' % captcha.displayhtml(settings.RECAPTCHA_PUBLIC_KEY, use_ssl=True))
13 |
14 | def value_from_datadict(self, data, files, name):
15 | return [data.get(self.recaptcha_challenge_name, None),
16 | data.get(self.recaptcha_response_name, None)]
17 |
--------------------------------------------------------------------------------
/community/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/community/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from community.models import Forum, Thread, Post
3 |
4 | class ForumAdmin(admin.ModelAdmin):
5 | pass
6 |
7 | class ThreadAdmin(admin.ModelAdmin):
8 | pass
9 |
10 | class PostAdmin(admin.ModelAdmin):
11 | pass
12 |
13 |
14 | admin.site.register(Forum, ForumAdmin)
15 | admin.site.register(Thread, ThreadAdmin)
16 | admin.site.register(Post, PostAdmin)
17 |
18 |
--------------------------------------------------------------------------------
/community/feeds.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import get_object_or_404
2 | from django.contrib.sites.models import Site
3 | from django.http import HttpResponse, Http404
4 | from django.utils.xmlutils import SimplerXMLGenerator
5 | from community.models import Forum,Thread,Post
6 | from markdown2 import markdown
7 | from wfwfeed import WellFormedWebRss
8 |
9 | def ForumFeed(request, forum):
10 | f = get_object_or_404(Forum, slug=forum)
11 | try:
12 | object_list = f.thread_set.all()
13 | except documents.DocumentDoesNotExist:
14 | raise Http404
15 | feed = WellFormedWebRss( u"mloss.org community forum %s" % f.title.encode('utf-8'),
16 | "http://mloss.org",
17 | u'Updates to mloss.org forum %s' % f.title.encode('utf-8'),
18 | language=u"en")
19 |
20 | for thread in object_list:
21 | link = u'http://%s%s' % (Site.objects.get_current().domain, thread.get_absolute_url())
22 | commentlink=u'http://%s%s' % (Site.objects.get_current().domain, thread.get_absolute_url())
23 | commentrss=u'http://%s/community/rss/thread/%i' % (Site.objects.get_current().domain, thread.id)
24 | feed.add_item( thread.title.encode('utf-8'),
25 | commentlink, None,
26 | comments=commentlink,
27 | pubdate=thread.thread_latest_post.time, unique_id=link)
28 | feed.add_commentRss(commentrss)
29 |
30 | response = HttpResponse(mimetype='application/xml')
31 | feed.write(response, 'utf-8')
32 | return response
33 |
34 | def ThreadFeed(request, forum, thread):
35 | thread = get_object_or_404(Thread, pk=thread)
36 |
37 | feed = WellFormedWebRss( u"mloss.org community forum",
38 | "http://mloss.org",
39 | u'Updates to mloss.org thread %s' % thread.title.encode('utf-8'),
40 | language=u"en")
41 |
42 | for post in thread.post_set.all().order_by('time'):
43 | link = u'http://%s%s' % (Site.objects.get_current().domain, post.get_absolute_url())
44 | feed.add_item(u'By: %s on: %s ' % (post.author.username, post.time.strftime("%Y-%m-%d %H:%M")),
45 | link, markdown(post.body),
46 | author_name=post.author.username,
47 | pubdate=post.time, unique_id=link)
48 |
49 | response = HttpResponse(mimetype='application/xml')
50 | feed.write(response, 'utf-8')
51 | return response
52 |
--------------------------------------------------------------------------------
/community/subscriptions.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import get_object_or_404
2 | from django.contrib.sites.models import Site
3 | from django.http import HttpResponse, HttpResponseRedirect, Http404
4 | from models import Forum, Thread, Post
5 |
6 | def SubscribeForum(request, forum, bookmark=False):
7 | if not request.user.is_authenticated():
8 | return HttpResponseRedirect('/accounts/login?next=%s' % request.path)
9 | entry = get_object_or_404(Forum, slug=forum)
10 | entry.subscribe(request.user, bookmark)
11 | return HttpResponseRedirect("/user/view/" + str(request.user.id) + "/")
12 |
13 | def UnsubscribeForum(request, forum, bookmark=False):
14 | if not request.user.is_authenticated():
15 | return HttpResponseRedirect('/accounts/login?next=%s' % request.path)
16 | entry = get_object_or_404(Forum, slug=forum)
17 | entry.unsubscribe(request.user, bookmark)
18 |
19 | return HttpResponseRedirect("/user/view/" + str(request.user.id) + "/")
20 |
21 | def BookmarkForum(request, forum):
22 | return SubscribeForum(request, forum, bookmark=True)
23 | def RemoveBookmarkForum(request, forum):
24 | return UnsubscribeForum(request, forum, bookmark=True)
25 |
26 | def SubscribeThread(request, forum, thread, bookmark=False):
27 | if not request.user.is_authenticated():
28 | return HttpResponseRedirect('/accounts/login?next=%s' % request.path)
29 | entry = get_object_or_404(Thread, pk=thread)
30 | entry.subscribe(request.user, bookmark)
31 | return HttpResponseRedirect("/user/view/" + str(request.user.id) + "/")
32 |
33 | def BookmarkThread(request, forum, thread):
34 | return SubscribeThread(request, forum, thread, bookmark=True)
35 |
36 | def UnsubscribeThread(request, forum, thread, bookmark=False):
37 | if not request.user.is_authenticated():
38 | return HttpResponseRedirect('/accounts/login?next=%s' % request.path)
39 | entry = get_object_or_404(Thread, pk=thread)
40 | entry.unsubscribe(request.user, bookmark)
41 |
42 | return HttpResponseRedirect("/user/view/" + str(request.user.id) + "/")
43 |
44 | def RemoveBookmarkThread(request, forum, thread):
45 | return UnsubscribeThread(request, forum, thread, bookmark=True)
46 |
--------------------------------------------------------------------------------
/community/summary.py:
--------------------------------------------------------------------------------
1 | from community.models import Forum,Thread,Post
2 | from django.template import RequestContext
3 | from aggregator.models import Feed, FeedItem
4 | from blog.models import BlogItem
5 |
6 | class ForumSummary():
7 | """
8 | Summarises latest forum posts
9 | """
10 | title = ''
11 | url = ''
12 | body = ''
13 | author = ''
14 | time = ''
15 | thread = ''
16 |
17 | class FeedSummary():
18 | """
19 | Summarises the latest feeds from external sites
20 | """
21 | title = ''
22 | url = ''
23 | items = []
24 |
25 |
26 | def get_latest_posts():
27 | """
28 | For each Forum, get the latest post
29 | """
30 | latest_posts = []
31 | all_forums = Forum.objects.all()
32 | for forum in all_forums:
33 | summary = ForumSummary()
34 | summary.title = forum.title
35 | post = forum.forum_latest_post
36 | if post:
37 | summary.body = post.body
38 | summary.url = post.get_absolute_url()
39 | summary.author = post.author
40 | summary.pub_date = post.time
41 | if post.thread:
42 | summary.thread = post.thread.title
43 | latest_posts.append(summary)
44 | return latest_posts
45 |
46 | def get_latest_feeds():
47 | """
48 | For each feed from an external site, get the latest post title
49 | """
50 | all_feeds = Feed.objects.all()
51 |
52 | latest_feeds = []
53 | for feed in all_feeds:
54 | cur_feed = FeedSummary()
55 | cur_feed.title = feed.title
56 | cur_feed.url = feed.public_url
57 | items = FeedItem.objects.filter(feed__title=feed.title).order_by('-date_modified')
58 | cur_feed.items = items[:3]
59 |
60 | latest_feeds.append(cur_feed)
61 |
62 | return latest_feeds
63 |
64 | def get_latest_news(extra=None):
65 | if extra is None:
66 | extra=dict()
67 |
68 | latest_posts = get_latest_posts()
69 | latest_feeds = get_latest_feeds()
70 | blog_entries = BlogItem.objects.order_by('-pub_date')[:10]
71 | extra['latest_posts']=latest_posts
72 | extra['latest_feeds']=latest_feeds
73 | extra['blog_entries']=blog_entries
74 | extra['blog_years']=BlogItem.objects.dates('pub_date', 'year')
75 | return extra
76 |
--------------------------------------------------------------------------------
/community/urls.py:
--------------------------------------------------------------------------------
1 | """
2 | URLConf for Django-Forum.
3 |
4 | django-forum assumes that the forum application is living under
5 | /forum/.
6 |
7 | Usage in your base urls.py:
8 | (r'^forum/', include('community.urls')),
9 | """
10 |
11 | from django.conf.urls import url, include
12 |
13 | from blog.feeds import BlogView
14 |
15 | urlpatterns = [
16 | url(r'^$', BlogView.as_view()),
17 | url(r'^blog/', include('blog.urls')),
18 | ]
19 |
--------------------------------------------------------------------------------
/forshow/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/forshow/__init__.py
--------------------------------------------------------------------------------
/forshow/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from forshow.models import News, Faq
3 |
4 | class NewsAdmin(admin.ModelAdmin):
5 | list_display = ('headline', 'publication_date')
6 |
7 | class FaqAdmin(admin.ModelAdmin):
8 | list_display = ('question', 'answer')
9 | fieldsets = (
10 | (None, {'fields': ('question','answer')}),
11 | )
12 |
13 |
14 | admin.site.register(News, NewsAdmin)
15 | admin.site.register(Faq, FaqAdmin)
16 |
--------------------------------------------------------------------------------
/forshow/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.contrib.auth.models import User
3 |
4 | # Create your models here.
5 | class News(models.Model):
6 | headline = models.CharField(max_length=200)
7 | author = models.ManyToManyField(User)
8 | publication_date = models.DateField()
9 | article = models.TextField()
10 |
11 | class Meta:
12 | ordering = ('-publication_date',)
13 |
14 | class Faq(models.Model):
15 | question = models.TextField()
16 | answer = models.TextField()
17 |
18 |
--------------------------------------------------------------------------------
/forshow/views.py:
--------------------------------------------------------------------------------
1 | # Create your views here.
2 | from django.shortcuts import render_to_response
3 | from django.shortcuts import render
4 | from forshow.models import News
5 | from forshow.models import Faq
6 | from django.template import RequestContext
7 |
8 | def newsindex(request):
9 | """
10 | List of all news items
11 | """
12 | all_news_items = News.objects.all().order_by('-publication_date')
13 | return render(request, 'news_index.html',
14 | {'all_news_items': all_news_items})
15 |
16 |
17 | def faqindex(request):
18 | """
19 | List of all FAQ items
20 | """
21 | all_faq_items = Faq.objects.all().order_by('question')
22 | return render(request, 'faq_index.html',
23 | {'all_faq_items': all_faq_items})
24 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 |
2 | #!/usr/bin/env python
3 | import os, sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
7 |
8 | from django.core.management import execute_from_command_line
9 |
10 | execute_from_command_line(sys.argv)
11 |
--------------------------------------------------------------------------------
/media/images/bib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/bib.png
--------------------------------------------------------------------------------
/media/images/bookmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/bookmark.png
--------------------------------------------------------------------------------
/media/images/cray_flat_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/cray_flat_small.png
--------------------------------------------------------------------------------
/media/images/cray_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/cray_small.png
--------------------------------------------------------------------------------
/media/images/disk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/disk.png
--------------------------------------------------------------------------------
/media/images/homepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/homepage.png
--------------------------------------------------------------------------------
/media/images/jmlr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/jmlr.jpg
--------------------------------------------------------------------------------
/media/images/mloss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss.png
--------------------------------------------------------------------------------
/media/images/mloss_flat_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss_flat_small.png
--------------------------------------------------------------------------------
/media/images/mloss_logo_new.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss_logo_new.jpg
--------------------------------------------------------------------------------
/media/images/mloss_logo_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss_logo_new.png
--------------------------------------------------------------------------------
/media/images/mloss_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss_small.png
--------------------------------------------------------------------------------
/media/images/mloss_transparent_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/mloss_transparent_small.png
--------------------------------------------------------------------------------
/media/images/paper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/paper.png
--------------------------------------------------------------------------------
/media/images/rlogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/rlogo.png
--------------------------------------------------------------------------------
/media/images/rss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/rss.png
--------------------------------------------------------------------------------
/media/images/stars/blank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/stars/blank.png
--------------------------------------------------------------------------------
/media/images/stars/half.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/stars/half.png
--------------------------------------------------------------------------------
/media/images/stars/quarter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/stars/quarter.png
--------------------------------------------------------------------------------
/media/images/stars/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/stars/star.png
--------------------------------------------------------------------------------
/media/images/stars/three-quarter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/stars/three-quarter.png
--------------------------------------------------------------------------------
/media/images/subscribe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/subscribe.png
--------------------------------------------------------------------------------
/media/images/temp-logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/media/images/temp-logo.jpg
--------------------------------------------------------------------------------
/registration/__init__.py:
--------------------------------------------------------------------------------
1 | VERSION = (0, 8, 0, 'alpha', 1)
2 |
3 | def get_version():
4 | version = '%s.%s' % (VERSION[0], VERSION[1])
5 | if VERSION[2]:
6 | version = '%s.%s' % (version, VERSION[2])
7 | if VERSION[3:] == ('alpha', 0):
8 | version = '%s pre-alpha' % version
9 | else:
10 | if VERSION[3] != 'final':
11 | version = "%s %s" % (version, VERSION[3])
12 | if VERSION[4] != 0:
13 | version = '%s %s' % (version, VERSION[4])
14 | return version
15 |
--------------------------------------------------------------------------------
/registration/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from django.contrib.sites.requests import RequestSite
3 | from django.contrib.sites.models import Site
4 | from django.utils.translation import ugettext_lazy as _
5 |
6 | from registration.models import RegistrationProfile
7 |
8 |
9 | class RegistrationAdmin(admin.ModelAdmin):
10 | actions = ['activate_users', 'resend_activation_email']
11 | list_display = ('user', 'activation_key_expired')
12 | raw_id_fields = ['user']
13 | search_fields = ('user__username', 'user__first_name')
14 |
15 | def activate_users(self, request, queryset):
16 | """
17 | Activates the selected users, if they are not alrady
18 | activated.
19 |
20 | """
21 | for profile in queryset:
22 | RegistrationProfile.objects.activate_user(profile.activation_key)
23 | activate_users.short_description = _("Activate users")
24 |
25 | def resend_activation_email(self, request, queryset):
26 | """
27 | Re-sends activation emails for the selected users.
28 |
29 | Note that this will *only* send activation emails for users
30 | who are eligible to activate; emails will not be sent to users
31 | whose activation keys have expired or who have already
32 | activated.
33 |
34 | """
35 | if Site._meta.installed:
36 | site = Site.objects.get_current()
37 | else:
38 | site = RequestSite(request)
39 |
40 | for profile in queryset:
41 | if not profile.activation_key_expired():
42 | profile.send_activation_email(site)
43 | resend_activation_email.short_description = _("Re-send activation emails")
44 |
45 |
46 | admin.site.register(RegistrationProfile, RegistrationAdmin)
47 |
--------------------------------------------------------------------------------
/registration/auth_urls.py:
--------------------------------------------------------------------------------
1 | """
2 | URL patterns for the views included in ``django.contrib.auth``.
3 |
4 | Including these URLs (via the ``include()`` directive) will set up the
5 | following patterns based at whatever URL prefix they are included
6 | under:
7 |
8 | * User login at ``login/``.
9 |
10 | * User logout at ``logout/``.
11 |
12 | * The two-step password change at ``password/change/`` and
13 | ``password/change/done/``.
14 |
15 | * The four-step password reset at ``password/reset/``,
16 | ``password/reset/confirm/``, ``password/reset/complete/`` and
17 | ``password/reset/done/``.
18 |
19 | The default registration backend already has an ``include()`` for
20 | these URLs, so under the default setup it is not necessary to manually
21 | include these views. Other backends may or may not include them;
22 | consult a specific backend's documentation for details.
23 |
24 | """
25 |
26 | from django.conf.urls import url, include
27 |
28 | from django.contrib.auth.views import (login,
29 | logout,
30 | password_reset,
31 | password_reset_done,
32 | password_reset_confirm,
33 | )
34 |
35 | from django.contrib.auth import views as auth_views
36 |
37 |
38 | urlpatterns = [
39 | url(r'^login/$',
40 | auth_views.login,
41 | {'template_name': 'registration/login.html'},
42 | name='login'),
43 | url(r'^logout/$',
44 | auth_views.logout,
45 | {'template_name': 'registration/logout.html'},
46 | name='logout'),
47 | url(r'^password/change/$',
48 | auth_views.password_change,
49 | name='password_change'),
50 | url(r'^password/change/done/$',
51 | auth_views.password_change_done,
52 | name='password_change_done'),
53 | url(r'^password/reset/$',
54 | auth_views.password_reset,
55 | name='password_reset'),
56 | url(r'^password/reset/confirm/(?P[0-9A-Za-z]+)-(?P.+)/$',
57 | auth_views.password_reset_confirm,
58 | name='password_reset_confirm'),
59 | url(r'^password/reset/complete/$',
60 | auth_views.password_reset_complete,
61 | name='password_reset_complete'),
62 | url(r'^password/reset/done/$',
63 | auth_views.password_reset_done,
64 | name='password_reset_done'),
65 | ]
66 |
--------------------------------------------------------------------------------
/registration/backends/__init__.py:
--------------------------------------------------------------------------------
1 | from django.core.exceptions import ImproperlyConfigured
2 |
3 |
4 | # Python 2.7 has an importlib with import_module; for older Pythons,
5 | # Django's bundled copy provides it.
6 | try:
7 | from importlib import import_module
8 | except ImportError:
9 | from django.utils.importlib import import_module
10 |
11 | def get_backend(path):
12 | """
13 | Return an instance of a registration backend, given the dotted
14 | Python import path (as a string) to the backend class.
15 |
16 | If the backend cannot be located (e.g., because no such module
17 | exists, or because the module does not contain a class of the
18 | appropriate name), ``django.core.exceptions.ImproperlyConfigured``
19 | is raised.
20 |
21 | """
22 | i = path.rfind('.')
23 | module, attr = path[:i], path[i+1:]
24 | try:
25 | mod = import_module(module)
26 | except ImportError, e:
27 | raise ImproperlyConfigured('Error loading registration backend %s: "%s"' % (module, e))
28 | try:
29 | backend_class = getattr(mod, attr)
30 | except AttributeError:
31 | raise ImproperlyConfigured('Module "%s" does not define a registration backend named "%s"' % (module, attr))
32 | return backend_class()
33 |
--------------------------------------------------------------------------------
/registration/backends/default/urls.py:
--------------------------------------------------------------------------------
1 | """
2 | URLconf for registration and activation, using django-registration's
3 | default backend.
4 |
5 | If the default behavior of these views is acceptable to you, simply
6 | use a line like this in your root URLconf to set up the default URLs
7 | for registration::
8 |
9 | (r'^accounts/', include('registration.backends.default.urls')),
10 |
11 | This will also automatically set up the views in
12 | ``django.contrib.auth`` at sensible default locations.
13 |
14 | If you'd like to customize the behavior (e.g., by passing extra
15 | arguments to the various views) or split up the URLs, feel free to set
16 | up your own URL patterns for these views instead.
17 |
18 | """
19 |
20 |
21 |
22 | from django.conf.urls import url, include
23 | from django.views.generic import TemplateView
24 |
25 | from registration.views import activate
26 | from registration.views import register
27 |
28 | from captcha.forms import RegistrationFormCaptcha
29 |
30 | urlpatterns = [
31 | url(r'^activate/complete/$',
32 | TemplateView.as_view(template_name='registration/activation_complete.html'),
33 | name='registration_activation_complete'),
34 | # Activation keys get matched by \w+ instead of the more specific
35 | # [a-fA-F0-9]{40} because a bad activation key should still get to the view;
36 | # that way it can return a sensible "invalid key" message instead of a
37 | # confusing 404.
38 | url(r'^activate/(?P\w+)/$',
39 | activate,
40 | {'backend': 'registration.backends.default.DefaultBackend'},
41 | name='registration_activate'),
42 | url(r'^register/$',
43 | register,
44 | {'backend': 'registration.backends.default.DefaultBackend',
45 | 'form_class': RegistrationFormCaptcha},
46 | name='registration_register'),
47 | url(r'^register/complete/$',
48 | TemplateView.as_view(template_name='registration/registration_complete.html'),
49 | name='registration_complete'),
50 | url(r'^register/closed/$',
51 | TemplateView.as_view(template_name='registration/registration_closed.html'),
52 | name='registration_disallowed'),
53 | url(r'', include('registration.auth_urls')),
54 | ]
55 |
--------------------------------------------------------------------------------
/registration/backends/simple/__init__.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 | from django.contrib.auth import authenticate
3 | from django.contrib.auth import login
4 | from django.contrib.auth.models import User
5 |
6 | from registration import signals
7 | from registration.forms import RegistrationForm
8 |
9 |
10 | class SimpleBackend(object):
11 | """
12 | A registration backend which implements the simplest possible
13 | workflow: a user supplies a username, email address and password
14 | (the bare minimum for a useful account), and is immediately signed
15 | up and logged in.
16 |
17 | """
18 | def register(self, request, **kwargs):
19 | """
20 | Create and immediately log in a new user.
21 |
22 | """
23 | username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
24 | User.objects.create_user(username, email, password)
25 |
26 | # authenticate() always has to be called before login(), and
27 | # will return the user we just created.
28 | new_user = authenticate(username=username, password=password)
29 | login(request, new_user)
30 | signals.user_registered.send(sender=self.__class__,
31 | user=new_user,
32 | request=request)
33 | return new_user
34 |
35 | def activate(self, **kwargs):
36 | raise NotImplementedError
37 |
38 | def registration_allowed(self, request):
39 | """
40 | Indicate whether account registration is currently permitted,
41 | based on the value of the setting ``REGISTRATION_OPEN``. This
42 | is determined as follows:
43 |
44 | * If ``REGISTRATION_OPEN`` is not specified in settings, or is
45 | set to ``True``, registration is permitted.
46 |
47 | * If ``REGISTRATION_OPEN`` is both specified and set to
48 | ``False``, registration is not permitted.
49 |
50 | """
51 | return getattr(settings, 'REGISTRATION_OPEN', True)
52 |
53 | def get_form_class(self, request):
54 | return RegistrationForm
55 |
56 | def post_registration_redirect(self, request, user):
57 | """
58 | After registration, redirect to the user's account page.
59 |
60 | """
61 | return (user.get_absolute_url(), (), {})
62 |
63 | def post_activation_redirect(self, request, user):
64 | raise NotImplementedError
65 |
--------------------------------------------------------------------------------
/registration/backends/simple/urls.py:
--------------------------------------------------------------------------------
1 | """
2 | URLconf for registration and activation, using django-registration's
3 | one-step backend.
4 |
5 | If the default behavior of these views is acceptable to you, simply
6 | use a line like this in your root URLconf to set up the default URLs
7 | for registration::
8 |
9 | (r'^accounts/', include('registration.backends.simple.urls')),
10 |
11 | This will also automatically set up the views in
12 | ``django.contrib.auth`` at sensible default locations.
13 |
14 | If you'd like to customize the behavior (e.g., by passing extra
15 | arguments to the various views) or split up the URLs, feel free to set
16 | up your own URL patterns for these views instead.
17 |
18 | """
19 |
20 |
21 |
22 | from django.conf.urls import url, include
23 | from django.views.generic import TemplateView
24 |
25 |
26 | from registration.views import activate
27 | from registration.views import register
28 |
29 |
30 | urlpatterns = [
31 | url(r'^register/$',
32 | register,
33 | {'backend': 'registration.backends.simple.SimpleBackend'},
34 | name='registration_register'),
35 | url(r'^register/closed/$',
36 | TemplateView.as_view(template_name='registration/registration_closed.html'),
37 | name='registration_disallowed'),
38 | url(r'', include('registration.auth_urls')),
39 | ]
40 |
--------------------------------------------------------------------------------
/registration/locale/ar/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/ar/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/ar/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "اسم المستخدم"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "عنوان البريد الالكتروني"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "كلمة المرور"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "تأكيد كلمة المرور"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "يمكن أن يحتوي اسم المستخدم على احرف، ارقام وشرطات سطرية فقط"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "اسم المستخدم مسجل مسبقا. يرجى اختيار اسم اخر."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "يجب ادخال كلمة المرور مطابقة كل مرة"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "أقر بقراءة والموافقة على شروط الخدمة"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "يجب الموافقة على الشروط للتسجيل"
54 |
55 | #: forms.py:124
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "عنوان البريد الالكتروني مسجل مسبقا. يرجى تزويد عنوان بريد الكتروني مختلف."
60 |
61 | #: forms.py:149
62 | msgid ""
63 | "Registration using free email addresses is prohibited. Please supply a "
64 | "different email address."
65 | msgstr "يمنع التسجيل باستخدام عناوين بريد الكترونية مجانية. يرجى تزويد عنوان بريد الكتروني مختلف."
66 |
67 | #: models.py:188
68 | msgid "user"
69 | msgstr "مستخدم"
70 |
71 | #: models.py:189
72 | msgid "activation key"
73 | msgstr "رمز التفعيل"
74 |
75 | #: models.py:194
76 | msgid "registration profile"
77 | msgstr "ملف التسجيل الشخصي"
78 |
79 | #: models.py:195
80 | msgid "registration profiles"
81 | msgstr "ملفات التسجيل الشخصية"
82 |
--------------------------------------------------------------------------------
/registration/locale/bg/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/bg/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/bg/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: PACKAGE VERSION\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
11 | "PO-Revision-Date: 2008-03-05 12:37+0200\n"
12 | "Last-Translator: Vladislav \n"
13 | "Language-Team: LANGUAGE \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Poedit-Bookmarks: -1,-1,-1,-1,10,-1,-1,-1,-1,-1\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "Потребителско име "
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "Електронна поща"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "Парола"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "Парола (проверка)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Потребителските имена могат да съдържат букви, цифри и подчертавки"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Потребителското име е заето. Моля изберето друго."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "Грешка при проверка на паролата."
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "Прочел съм и съм съгласен с условията за експлоатация"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "Трябва да сте съгласни с условията за да се регистрирате."
54 |
55 | #: forms.py:124
56 | msgid "This email address is already in use. Please supply a different email address."
57 | msgstr "Адреса на електронната поща е използван. Моля въведете друг адрес."
58 |
59 | #: forms.py:149
60 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
61 | msgstr "Регистрациите с безплатни адреси е забранен. Моля въведете различен адрес за електронна поща"
62 |
63 | #: models.py:188
64 | msgid "user"
65 | msgstr "Потребител"
66 |
67 | #: models.py:189
68 | msgid "activation key"
69 | msgstr "Ключ за активация"
70 |
71 | #: models.py:194
72 | msgid "registration profile"
73 | msgstr "регистрационен профил"
74 |
75 | #: models.py:195
76 | msgid "registration profiles"
77 | msgstr "регистрационни профили"
78 |
79 |
--------------------------------------------------------------------------------
/registration/locale/da/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/da/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/da/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Rune Bromer , 2007-2009.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: django-registration 0.8 \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: \n"
12 | "PO-Revision-Date: \n"
13 | "Last-Translator: Rune Bromer \n"
14 | "Language-Team: \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: admin.py:23
20 | msgid "Activate users"
21 | msgstr "Aktiver brugere"
22 |
23 | #: admin.py:43
24 | msgid "Re-send activation emails"
25 | msgstr "Gensend aktiveringsemails"
26 |
27 | #: forms.py:35
28 | msgid "Username"
29 | msgstr "Brugernavn"
30 |
31 | #: forms.py:36
32 | msgid "This value must contain only letters, numbers and underscores."
33 | msgstr "V¾rdien m kun indeholde bogstaver, tal og underscore."
34 |
35 | #: forms.py:39
36 | msgid "Email address"
37 | msgstr "E-mailadresse"
38 |
39 | #: forms.py:41
40 | msgid "Password"
41 | msgstr "Password"
42 |
43 | #: forms.py:43
44 | msgid "Password (again)"
45 | msgstr "Password (gentag)"
46 |
47 | #: forms.py:55
48 | msgid "A user with that username already exists."
49 | msgstr "Der findes allerede en bruger med dette brugernavn."
50 |
51 | #: forms.py:67
52 | msgid "The two password fields didn't match."
53 | msgstr "De 2 passwordfelter er ikke ens."
54 |
55 | #: forms.py:78
56 | msgid "I have read and agree to the Terms of Service"
57 | msgstr "I har l¾st og accepterer betingelserne."
58 |
59 | #: forms.py:79
60 | msgid "You must agree to the terms to register"
61 | msgstr "Du skal acceptere betingelserne for at registere"
62 |
63 | #: forms.py:95
64 | msgid ""
65 | "This email address is already in use. Please supply a different email "
66 | "address."
67 | msgstr ""
68 | "Denne emailadresse er allerede i brug. Benyt venligst en anden. "
69 |
70 | #: forms.py:122
71 | msgid ""
72 | "Registration using free email addresses is prohibited. Please supply a "
73 | "different email address."
74 | msgstr ""
75 | "Registrering med gratis emailadresser er ikke muligt. V¾lg venligst en "
76 | "anden emailadresse"
77 |
78 | #: models.py:165
79 | msgid "user"
80 | msgstr "bruger"
81 |
82 | #: models.py:166
83 | msgid "activation key"
84 | msgstr "Aktiveringsn¿gle"
85 |
86 | #: models.py:171
87 | msgid "registration profile"
88 | msgstr "Registreringsprofil"
89 |
90 | #: models.py:172
91 | msgid "registration profiles"
92 | msgstr "Registreringprofiler"
93 |
--------------------------------------------------------------------------------
/registration/locale/de/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/de/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/de/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Jannis Leidel , 2007-2009.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: django-registration 0.8 \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2009-10-18 21:32+0200\n"
12 | "PO-Revision-Date: 2007-09-29 16:50+0200\n"
13 | "Last-Translator: Jannis Leidel \n"
14 | "Language-Team: Deutsch \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: admin.py:23
20 | msgid "Activate users"
21 | msgstr "Benutzer aktivieren"
22 |
23 | #: admin.py:43
24 | msgid "Re-send activation emails"
25 | msgstr "Aktivierungs-E-Mail erneut senden"
26 |
27 | #: forms.py:35
28 | msgid "Username"
29 | msgstr "Benutzername"
30 |
31 | #: forms.py:36
32 | msgid "This value must contain only letters, numbers and underscores."
33 | msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
34 |
35 | #: forms.py:39
36 | msgid "Email address"
37 | msgstr "E-Mail-Adresse"
38 |
39 | #: forms.py:41
40 | msgid "Password"
41 | msgstr "Passwort"
42 |
43 | #: forms.py:43
44 | msgid "Password (again)"
45 | msgstr "Passwort (wiederholen)"
46 |
47 | #: forms.py:55
48 | msgid "A user with that username already exists."
49 | msgstr "Dieser Benutzername ist bereits vergeben."
50 |
51 | #: forms.py:67
52 | msgid "The two password fields didn't match."
53 | msgstr "Die beiden Passwörter sind nicht identisch."
54 |
55 | #: forms.py:78
56 | msgid "I have read and agree to the Terms of Service"
57 | msgstr "Ich habe die Nutzungsvereinbarung gelesen und stimme ihr zu"
58 |
59 | #: forms.py:79
60 | msgid "You must agree to the terms to register"
61 | msgstr "Sie müssen der Nutzungsvereinbarung zustimmen, um sich zu registrieren"
62 |
63 | #: forms.py:95
64 | msgid ""
65 | "This email address is already in use. Please supply a different email "
66 | "address."
67 | msgstr ""
68 | "Diese E-Mail-Adresse wird schon genutzt. Bitte geben Sie eine andere E-Mail-"
69 | "Adresse an."
70 |
71 | #: forms.py:122
72 | msgid ""
73 | "Registration using free email addresses is prohibited. Please supply a "
74 | "different email address."
75 | msgstr ""
76 | "Die Registrierung mit einer kostenlosen E-Mail-Adresse ist untersagt. Bitte "
77 | "geben Sie eine andere E-Mail-Adresse an."
78 |
79 | #: models.py:165
80 | msgid "user"
81 | msgstr "Benutzer"
82 |
83 | #: models.py:166
84 | msgid "activation key"
85 | msgstr "Aktivierungsschlüssel"
86 |
87 | #: models.py:171
88 | msgid "registration profile"
89 | msgstr "Registrierungsprofil"
90 |
91 | #: models.py:172
92 | msgid "registration profiles"
93 | msgstr "Registrierungsprofile"
94 |
--------------------------------------------------------------------------------
/registration/locale/el/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/el/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/el/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Panos Laganakos , 2007.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: 2007-11-14 21:50+0200\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "όνομα χρήστη"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "διεύθυνση ηλεκτρονικού ταχυδρομείου"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "συνθηματικό"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "συνθηματικό (ξανά)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Τα ονόματα χρηστών μπορούν να περιλαμβάνουν μόνο γράμματα, αριθμούς και υπογραμμίσεις"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Αυτό το όνομα χρήστη χρησιμοποίειται ήδη. Παρακαλώ διαλέξτε ένα άλλο."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "Πρέπει να εισάγετε το ίδιο συνθηματικό κάθε φορά"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "Διάβασα και συμφωνώ με τους Όρους της Υπηρεσίας"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "Πρέπει να συμφωνείται με τους όρους για να εγγραφείτε"
54 |
55 | #: forms.py:124
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr ""
60 | "Η συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου χρησιμοποιείται ήδη. "
61 | "Παρακαλώ δώστε κάποια άλλη."
62 |
63 | #: forms.py:149
64 | msgid ""
65 | "Registration using free email addresses is prohibited. Please supply a "
66 | "different email address."
67 | msgstr ""
68 | "Η εγγραφή μέσω δωρεάν διευθύνσεων ηλεκτρονικού ταχυδρομείου απαγορεύεται. ""Παρακαλώ δώστε κάποια άλλη."
69 |
70 | #: models.py:188
71 | msgid "user"
72 | msgstr "χρήστης"
73 |
74 | #: models.py:189
75 | msgid "activation key"
76 | msgstr "κλειδί ενεργοποίησης"
77 |
78 | #: models.py:194
79 | msgid "registration profile"
80 | msgstr "προφίλ εγγραφής"
81 |
82 | #: models.py:195
83 | msgid "registration profiles"
84 | msgstr "προφίλ εγγραφών"
85 |
--------------------------------------------------------------------------------
/registration/locale/en/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/en/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/en/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2009-10-12 14:09-0500\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: admin.py:23
20 | msgid "Activate users"
21 | msgstr ""
22 |
23 | #: admin.py:43
24 | msgid "Re-send activation emails"
25 | msgstr ""
26 |
27 | #: forms.py:35
28 | msgid "username"
29 | msgstr ""
30 |
31 | #: forms.py:36
32 | msgid "This value must contain only letters, numbers and underscores."
33 | msgstr ""
34 |
35 | #: forms.py:39
36 | msgid "Email address"
37 | msgstr ""
38 |
39 | #: forms.py:41
40 | msgid "Password"
41 | msgstr ""
42 |
43 | #: forms.py:43
44 | msgid "Password (again)"
45 | msgstr ""
46 |
47 | #: forms.py:55
48 | msgid "A user with that username already exists."
49 | msgstr ""
50 |
51 | #: forms.py:67
52 | msgid "The two password fields didn't match."
53 | msgstr ""
54 |
55 | #: forms.py:78
56 | msgid "I have read and agree to the Terms of Service"
57 | msgstr ""
58 |
59 | #: forms.py:79
60 | msgid "You must agree to the terms to register"
61 | msgstr ""
62 |
63 | #: forms.py:95
64 | msgid ""
65 | "This email address is already in use. Please supply a different email "
66 | "address."
67 | msgstr ""
68 |
69 | #: forms.py:122
70 | msgid ""
71 | "Registration using free email addresses is prohibited. Please supply a "
72 | "different email address."
73 | msgstr ""
74 |
75 | #: models.py:165
76 | msgid "user"
77 | msgstr ""
78 |
79 | #: models.py:166
80 | msgid "activation key"
81 | msgstr ""
82 |
83 | #: models.py:171
84 | msgid "registration profile"
85 | msgstr ""
86 |
87 | #: models.py:172
88 | msgid "registration profiles"
89 | msgstr ""
90 |
--------------------------------------------------------------------------------
/registration/locale/es/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/es/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/es/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # Spanish translation for django-registration.
2 | # Copyright (C) 2007, James Bennet
3 | # This file is distributed under the same license as the registration package.
4 | # Ernesto Rico Schmidt , 2008.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: django-registration 0.3 \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2008-03-11 00:19-0400\n"
12 | "PO-Revision-Date: 2008-03-11 00:19-0400\n"
13 | "Last-Translator: Ernesto Rico Schmidt \n"
14 | "Language-Team: Español \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "nombre de usuario"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "dirección de coreo electrónico"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "contraseña"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "contraseña (otra vez)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Los nombres de usuarios sólo pueden contener letras, números y guiones bajos"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Este nombre de usuario ya está ocupado. Por favor escoge otro"
42 |
43 | #: forms.py:71
44 | msgid "You must type the same password each time"
45 | msgstr "Tienes que introducir la misma contraseña cada vez"
46 |
47 | #: forms.py:100
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "He leído y acepto los términos de servicio"
50 |
51 | #: forms.py:109
52 | msgid "You must agree to the terms to register"
53 | msgstr "Tienes que aceptar los términos para registrarte"
54 |
55 | #: forms.py:128
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr ""
60 | "La dirección de correo electrónico ya está siendo usada. Por favor"
61 | "proporciona otra dirección."
62 |
63 | #: forms.py:153
64 | msgid ""
65 | "Registration using free email addresses is prohibited. Please supply a "
66 | "different email address."
67 | msgstr ""
68 | "El registro usando una dirección de correo electrónico gratis está prohibido."
69 | "Por favor proporciona otra dirección."
70 |
71 | #: models.py:188
72 | msgid "user"
73 | msgstr "usuario"
74 |
75 | #: models.py:189
76 | msgid "activation key"
77 | msgstr "clave de activación"
78 |
79 | #: models.py:194
80 | msgid "registration profile"
81 | msgstr "perfil de registro"
82 |
83 | #: models.py:195
84 | msgid "registration profiles"
85 | msgstr "perfiles de registro"
86 |
--------------------------------------------------------------------------------
/registration/locale/es_AR/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/es_AR/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/es_AR/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) 2008 Leonardo Manuel Rocha
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "nombre de usuario"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "dirección de e-mail"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "contraseña"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "contraseña (nuevamente)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "El nombre de usuario solo puede contener letras, números y guiones bajos"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Ese nombre de usuario ya está asignado. Por favor elija otro."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "Debe tipear la misma contraseña cada vez"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "He leído y estoy de acuerdo con las Condiciones de Servicio"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "Debe estar de acuerdo con las Condiciones para poder registrarse"
54 |
55 | #: forms.py:124
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "Esa dirección de e-mail ya está en uso. Por favor provea otra "
60 | "dirección."
61 |
62 | #: forms.py:149
63 | msgid ""
64 | "Registration using free email addresses is prohibited. Please supply a "
65 | "different email address."
66 | msgstr "La registración con un e-mail gratuito está prohibida. Por favor "
67 | "de una dirección de e-mail diferente."
68 |
69 | #: models.py:188
70 | msgid "user"
71 | msgstr "usuario"
72 |
73 | #: models.py:189
74 | msgid "activation key"
75 | msgstr "clave de activación"
76 |
77 | #: models.py:194
78 | msgid "registration profile"
79 | msgstr "perfil de registro"
80 |
81 | #: models.py:195
82 | msgid "registration profiles"
83 | msgstr "perfiles de registro"
84 |
--------------------------------------------------------------------------------
/registration/locale/fr/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/fr/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/fr/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Samuel Adam , 2007.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: django-registration 0.3 \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: 2007-09-20 10:30+0100\n"
13 | "Last-Translator: Samuel Adam \n"
14 | "Language-Team: Français \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "pseudo"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "adresse email"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "mot de passe"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "mot de passe (vérification)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Le pseudo ne peut contenir que des lettres, chiffres et le caractère souligné."
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Ce pseudo est déjà utilisé. Veuillez en choisir un autre."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "Veuillez indiquer le même mot de passe dans les deux champs"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "J'ai lu et accepté les Conditions Générales d'Utilisation"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "Vous devez accepter les conditions d'utilisation pour vous inscrire"
54 |
55 | #: forms.py:124
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "Cette adresse email est déjà utilisée. Veuillez en indiquer une autre."
60 |
61 | #: forms.py:149
62 | msgid ""
63 | "Registration using free email addresses is prohibited. Please supply a "
64 | "different email address."
65 | msgstr "L'inscription avec une adresse email d'un compte gratuit est interdite. Veuillez en indiquer une autre."
66 |
67 | #: models.py:188
68 | msgid "user"
69 | msgstr "utilisateur"
70 |
71 | #: models.py:189
72 | msgid "activation key"
73 | msgstr "clé d'activation"
74 |
75 | #: models.py:194
76 | msgid "registration profile"
77 | msgstr "profil d'inscription"
78 |
79 | #: models.py:195
80 | msgid "registration profiles"
81 | msgstr "profils d'inscription"
82 |
--------------------------------------------------------------------------------
/registration/locale/he/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/he/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/he/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # translation of registration.
2 | # Copyright (C) 2008 THE registration'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the registration package.
4 | # <>, 2008.
5 | # , fuzzy
6 | # <>, 2008.
7 | #
8 | #
9 | msgid ""
10 | msgstr ""
11 | "Project-Id-Version: registration\n"
12 | "Report-Msgid-Bugs-To: \n"
13 | "POT-Creation-Date: 2008-02-10 02:01+0200\n"
14 | "PO-Revision-Date: 2008-02-10 02:05+0200\n"
15 | "Last-Translator: Meir Kriheli \n"
16 | "Language-Team: Hebrew\n"
17 | "MIME-Version: 1.0\n"
18 | "Content-Type: text/plain; charset=UTF-8\n"
19 | "Content-Transfer-Encoding: 8bit"
20 |
21 | #: forms.py:38
22 | msgid "username"
23 | msgstr "שם משתמש"
24 |
25 | #: forms.py:41
26 | msgid "email address"
27 | msgstr "דואר אלקטרוני"
28 |
29 | #: forms.py:43
30 | msgid "password"
31 | msgstr "סיסמה"
32 |
33 | #: forms.py:45
34 | msgid "password (again)"
35 | msgstr "סיסמה (שוב)"
36 |
37 | #: forms.py:54
38 | msgid "Usernames can only contain letters, numbers and underscores"
39 | msgstr "שמות משתמש יכולים להכיל רק אותיות, ספרות וקווים תחתונים"
40 |
41 | #: forms.py:59
42 | msgid "This username is already taken. Please choose another."
43 | msgstr "שם המשתמש תפוס כבר. נא לבחור אחר."
44 |
45 | #: forms.py:64
46 | msgid "You must type the same password each time"
47 | msgstr "יש להקליד את אותה הסיסמה פעמיים"
48 |
49 | #: forms.py:93
50 | msgid "I have read and agree to the Terms of Service"
51 | msgstr "קראתי והסכמתי לתנאי השימוש"
52 |
53 | #: forms.py:102
54 | msgid "You must agree to the terms to register"
55 | msgstr "עליך להסכים לתנאי השימוש"
56 |
57 | #: forms.py:121
58 | msgid ""
59 | "This email address is already in use. Please supply a different email "
60 | "address."
61 | msgstr ""
62 | "כתובת הדואר האלקטרוני תפוסה כבר. נא לספק כתובת דואר אחרת."
63 |
64 | #: forms.py:146
65 | msgid ""
66 | "Registration using free email addresses is prohibited. Please supply a "
67 | "different email address."
68 | msgstr ""
69 | "הרישום בעזרת תיבת דואר אלקטרוני חינמית אסור. נא לספק כתובת אחרת."
70 |
71 | #: models.py:188
72 | msgid "user"
73 | msgstr "משתמש"
74 |
75 | #: models.py:189
76 | msgid "activation key"
77 | msgstr "מפתח הפעלה"
78 |
79 | #: models.py:194
80 | msgid "registration profile"
81 | msgstr "פרופיל רישום"
82 |
83 | #: models.py:195
84 | msgid "registration profiles"
85 | msgstr "פרופילי רישום"
86 |
87 |
--------------------------------------------------------------------------------
/registration/locale/is/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/is/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/is/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # Icelandic translation of django-registration
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the django-registration
4 | # package.
5 | # Björn Kristinsson , 2009.
6 | #
7 | #, fuzzy
8 | msgid ""
9 | msgstr ""
10 | "Project-Id-Version: PACKAGE VERSION\n"
11 | "Report-Msgid-Bugs-To: \n"
12 | "POT-Creation-Date: 2009-01-22 12:49+0100\n"
13 | "PO-Revision-Date: 2009-01-22 12:49+0100\n"
14 | "Last-Translator: Björn Kristinsson \n"
15 | "Language-Team: Icelandic\n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 |
20 | #: forms.py:36
21 | msgid "username"
22 | msgstr "notandanafn"
23 |
24 | #: forms.py:39
25 | msgid "email address"
26 | msgstr "netfang"
27 |
28 | #: forms.py:41
29 | msgid "password"
30 | msgstr "lykilorð"
31 |
32 | #: forms.py:43
33 | msgid "password (again)"
34 | msgstr "lykilorð (aftur)"
35 |
36 | #: forms.py:55
37 | msgid "This username is already taken. Please choose another."
38 | msgstr "Þetta notendanafn er þegar á skrá. Vinsamlega reyndu annað."
39 |
40 | #: forms.py:67
41 | msgid "You must type the same password each time"
42 | msgstr "Lykilorðin verða að vera eins "
43 |
44 | #: forms.py:90
45 | msgid "I have read and agree to the Terms of Service"
46 | msgstr "Ég hef lesið og samþykki skilmálana"
47 |
48 | #: forms.py:107
49 | msgid ""
50 | "This email address is already in use. Please supply a different email "
51 | "address."
52 | msgstr "Þetta netfang er þegar á skrá. Vinsamlegast notaðu annað netfang."
53 |
54 | #: forms.py:133
55 | msgid ""
56 | "Registration using free email addresses is prohibited. Please supply a "
57 | "different email address."
58 | msgstr "Óheimilt er að nota ókeypis netföng. Vinsamlegast notaðu annað netfang."
59 |
60 | #: models.py:218
61 | msgid "user"
62 | msgstr "notandi"
63 |
64 | #: models.py:219
65 | msgid "activation key"
66 | msgstr "einkennislykill"
67 |
68 | #: models.py:224
69 | msgid "registration profile"
70 | msgstr "skráningarprófíll"
71 |
72 | #: models.py:225
73 | msgid "registration profiles"
74 | msgstr "skráningarprófílar"
75 |
--------------------------------------------------------------------------------
/registration/locale/it/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/it/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/it/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # translation of django.po to Italiano
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | #
5 | # Nicola Larosa , 2008.
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: django\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
11 | "PO-Revision-Date: 2008-05-27 15:05+0200\n"
12 | "Last-Translator: Nicola Larosa \n"
13 | "Language-Team: Italiano\n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Generator: KBabel 1.11.4\n"
18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19 |
20 | #: forms.py:38
21 | msgid "username"
22 | msgstr "nome utente"
23 |
24 | #: forms.py:41
25 | msgid "email address"
26 | msgstr "indirizzo email"
27 |
28 | #: forms.py:43
29 | msgid "password"
30 | msgstr "password"
31 |
32 | #: forms.py:45
33 | msgid "password (again)"
34 | msgstr "password (di nuovo)"
35 |
36 | #: forms.py:54
37 | msgid "Usernames can only contain letters, numbers and underscores"
38 | msgstr "I nomi utente possono contenere solo lettere, numeri e sottolineature"
39 |
40 | #: forms.py:59
41 | msgid "This username is already taken. Please choose another."
42 | msgstr "Questo nome utente è già usato. Scegline un altro."
43 |
44 | #: forms.py:68
45 | msgid "You must type the same password each time"
46 | msgstr "Bisogna inserire la stessa password ogni volta"
47 |
48 | #: forms.py:96
49 | msgid "I have read and agree to the Terms of Service"
50 | msgstr "Dichiaro di aver letto e di approvare le Condizioni di Servizio"
51 |
52 | #: forms.py:105
53 | msgid "You must agree to the terms to register"
54 | msgstr "Per registrarsi bisogna approvare le condizioni"
55 |
56 | #: forms.py:124
57 | msgid "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "Questo indirizzo email è già in uso. Inserisci un altro indirizzo email."
60 |
61 | #: forms.py:149
62 | msgid "Registration using free email addresses is prohibited. Please supply a "
63 | "different email address."
64 | msgstr "La registrazione con indirizzi email gratis non è permessa. "
65 | "Inserisci un altro indirizzo email."
66 |
67 | #: models.py:188
68 | msgid "user"
69 | msgstr "utente"
70 |
71 | #: models.py:189
72 | msgid "activation key"
73 | msgstr "chiave di attivazione"
74 |
75 | #: models.py:194
76 | msgid "registration profile"
77 | msgstr "profilo di registrazione"
78 |
79 | #: models.py:195
80 | msgid "registration profiles"
81 | msgstr "profili di registrazione"
82 |
83 |
--------------------------------------------------------------------------------
/registration/locale/ja/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/ja/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/ja/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Shinya Okano , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: django-registration 0.4 \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: 2008-01-31 10:20+0900\n"
13 | "Last-Translator: Shinya Okano \n"
14 | "Language-Team: Japanese \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "ユーザ名"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "メールアドレス"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "パスワード"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "パスワード (確認)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "ユーザ名には半角英数とアンダースコアのみが使用できます。"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "このユーザ名は既に使用されています。他のユーザ名を指定してください。"
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "同じパスワードを入力する必要があります。"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "サービス利用規約を読み、同意します。"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "登録するためには規約に同意する必要があります。"
54 |
55 | #: forms.py:124
56 | msgid "This email address is already in use. Please supply a different email address."
57 | msgstr "このメールアドレスは既に使用されています。他のメールアドレスを指定して下さい。"
58 |
59 | #: forms.py:149
60 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
61 | msgstr "自由なメールアドレスを使用した登録は禁止されています。他のメールアドレスを指定してください。"
62 |
63 | #: models.py:188
64 | msgid "user"
65 | msgstr "ユーザ"
66 |
67 | #: models.py:189
68 | msgid "activation key"
69 | msgstr "アクティベーションキー"
70 |
71 | #: models.py:194
72 | msgid "registration profile"
73 | msgstr "登録プロファイル"
74 |
75 | #: models.py:195
76 | msgid "registration profiles"
77 | msgstr "登録プロファイル"
78 |
79 |
--------------------------------------------------------------------------------
/registration/locale/ko/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/ko/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/ko/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Young Gyu Park , 2009.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2009-10-12 14:09-0500\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: Young Gyu Park \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: admin.py:23
20 | msgid "Activate users"
21 | msgstr "활동 사용자"
22 |
23 | #: admin.py:43
24 | msgid "Re-send activation emails"
25 | msgstr "이 메일 제 전송"
26 |
27 | #: forms.py:35
28 | msgid "username"
29 | msgstr "사용자 아이디"
30 |
31 | #: forms.py:36
32 | msgid "This value must contain only letters, numbers and underscores."
33 | msgstr "이 곳에는 숫자, _, 영문 글자만 가능합니다."
34 |
35 | #: forms.py:39
36 | msgid "Email address"
37 | msgstr "이메일 주소"
38 |
39 | #: forms.py:41
40 | msgid "Password"
41 | msgstr "사용자 패스워드"
42 |
43 | #: forms.py:43
44 | msgid "Password (again)"
45 | msgstr "패스워드 (재입력)"
46 |
47 | #: forms.py:55
48 | msgid "A user with that username already exists."
49 | msgstr "이미 같은 아이디로 사용자가 등록되어 있습니다."
50 |
51 | #: forms.py:67
52 | msgid "The two password fields didn't match."
53 | msgstr "패스워드가 서로 일치하지 않습니다."
54 |
55 | #: forms.py:78
56 | msgid "I have read and agree to the Terms of Service"
57 | msgstr "약관을 읽었고 그 내용에 동의합니다."
58 |
59 | #: forms.py:79
60 | msgid "You must agree to the terms to register"
61 | msgstr "약관에 동의 하셔야만 합니다."
62 |
63 | #: forms.py:95
64 | msgid ""
65 | "This email address is already in use. Please supply a different email "
66 | "address."
67 | msgstr "이메일이 이미 사용중입니다. 다른 이메일을 등록해 주세요."
68 |
69 | #: forms.py:122
70 | msgid ""
71 | "Registration using free email addresses is prohibited. Please supply a "
72 | "different email address."
73 | msgstr "무료 이메일 계정으로 등록하실 수 없습니다. 다른 이메일을 등록해 주세요"
74 |
75 | #: models.py:165
76 | msgid "user"
77 | msgstr "사용자"
78 |
79 | #: models.py:166
80 | msgid "activation key"
81 | msgstr "활성화 키"
82 |
83 | #: models.py:171
84 | msgid "registration profile"
85 | msgstr "등록 프로파일"
86 |
87 | #: models.py:172
88 | msgid "registration profiles"
89 | msgstr "등록 프로파일"
90 |
--------------------------------------------------------------------------------
/registration/locale/nl/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/nl/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/nl/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: registration\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2008-08-14 13:25+0200\n"
11 | "PO-Revision-Date: 2008-08-14 13:25+0200\n"
12 | "Last-Translator: Joost Cassee \n"
13 | "Language-Team: LANGUAGE \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "gebruikersnaam"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "e-mail adres"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "wachtwoord"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "wachtwoord (opnieuw)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Gebruikersnamen kunnen alleen letters, nummer en liggende streepjes bevatten."
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Deze gebruikersnaam is reeds in gebruik. Kiest u alstublieft een andere gebruikersnaam."
42 |
43 | #: forms.py:71
44 | msgid "You must type the same password each time"
45 | msgstr "U moet twee maal hetzelfde wachtwoord typen."
46 |
47 | #: forms.py:100
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "Ik heb de servicevoorwaarden gelezen en ga akkoord."
50 |
51 | #: forms.py:109
52 | msgid "You must agree to the terms to register"
53 | msgstr "U moet akkoord gaan met de servicevoorwaarden om u te registreren."
54 |
55 | #: forms.py:125
56 | msgid "This email address is already in use. Please supply a different email address."
57 | msgstr "Dit e-mail adres is reeds in gebruik. Kiest u alstublieft een ander e-mail adres."
58 |
59 | #: forms.py:151
60 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
61 | msgstr "U kunt u niet registreren met een gratis e-mail adres. Kiest u alstublieft een ander e-mail adres."
62 |
63 | #: models.py:191
64 | msgid "user"
65 | msgstr "gebruiker"
66 |
67 | #: models.py:192
68 | msgid "activation key"
69 | msgstr "activatiecode"
70 |
71 | #: models.py:197
72 | msgid "registration profile"
73 | msgstr "registratieprofiel"
74 |
75 | #: models.py:198
76 | msgid "registration profiles"
77 | msgstr "registratieprofielen"
78 |
--------------------------------------------------------------------------------
/registration/locale/pl/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/pl/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/pl/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # Polish translation for django-registration.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the django-registration package.
4 | # Jarek Zgoda , 2007.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: 0.4\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: 2007-12-15 12:45+0100\n"
13 | "Last-Translator: Jarek Zgoda \n"
14 | "Language-Team: Polish \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "nazwa użytkownika"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "adres email"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr "hasło"
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "hasło (ponownie)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr ""
38 | "Nazwa użytkownika może zawierać tylko litery, cyfry i znaki podkreślenia"
39 |
40 | #: forms.py:59
41 | msgid "This username is already taken. Please choose another."
42 | msgstr "Ta nazwa użytkownika jest już zajęta. Wybierz inną."
43 |
44 | #: forms.py:68
45 | msgid "You must type the same password each time"
46 | msgstr "Musisz wpisać to samo hasło w obu polach"
47 |
48 | #: forms.py:96
49 | msgid "I have read and agree to the Terms of Service"
50 | msgstr "Przeczytałem regulamin i akceptuję go"
51 |
52 | #: forms.py:105
53 | msgid "You must agree to the terms to register"
54 | msgstr "Musisz zaakceptować regulamin, aby się zarejestrować"
55 |
56 | #: forms.py:124
57 | msgid ""
58 | "This email address is already in use. Please supply a different email "
59 | "address."
60 | msgstr "Ten adres email jest już używany. Użyj innego adresu email."
61 |
62 | #: forms.py:149
63 | msgid ""
64 | "Registration using free email addresses is prohibited. Please supply a "
65 | "different email address."
66 | msgstr ""
67 | "Nie ma możliwości rejestracji przy użyciu darmowego adresu email. Użyj "
68 | "innego adresu email."
69 |
70 | #: models.py:188
71 | msgid "user"
72 | msgstr "użytkownik"
73 |
74 | #: models.py:189
75 | msgid "activation key"
76 | msgstr "klucz aktywacyjny"
77 |
78 | #: models.py:194
79 | msgid "registration profile"
80 | msgstr "profil rejestracji"
81 |
82 | #: models.py:195
83 | msgid "registration profiles"
84 | msgstr "profile rejestracji"
85 |
--------------------------------------------------------------------------------
/registration/locale/pt_BR/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/pt_BR/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/pt_BR/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: forms.py:38
20 | msgid "username"
21 | msgstr "usuário"
22 |
23 | #: forms.py:41
24 | msgid "email address"
25 | msgstr "endereço de email"
26 |
27 | #: forms.py:43
28 | msgid "password"
29 | msgstr ""
30 |
31 | #: forms.py:45
32 | msgid "password (again)"
33 | msgstr "senha (novamente)"
34 |
35 | #: forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Nomes de usuário apenas podem conter letras, números, e underscore"
38 |
39 | #: forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Este nome de usuário já existe. Por favor, escolha outro."
42 |
43 | #: forms.py:68
44 | msgid "You must type the same password each time"
45 | msgstr "Você deve escrever a mesma senha nos dois campos"
46 |
47 | #: forms.py:96
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "Eu lí e concordo com os Termos de Uso do serviço"
50 |
51 | #: forms.py:105
52 | msgid "You must agree to the terms to register"
53 | msgstr "Você deve concordar com os termos para registrar-se"
54 |
55 | #: forms.py:124
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "Este endereço de email já está em uso. Por favor, informe um endereço de email diferente."
60 |
61 | #: forms.py:149
62 | msgid ""
63 | "Registration using free email addresses is prohibited. Please supply a "
64 | "different email address."
65 | msgstr "Registrar-se com contas de email gratuitos está proibido. Por favor, informe um endereço de email diferente."
66 |
67 | #: models.py:188
68 | msgid "user"
69 | msgstr "usuário"
70 |
71 | #: models.py:189
72 | msgid "activation key"
73 | msgstr "chave de ativação"
74 |
75 | #: models.py:194
76 | msgid "registration profile"
77 | msgstr "profile de registro"
78 |
79 | #: models.py:195
80 | msgid "registration profiles"
81 | msgstr "profiles de registro"
82 |
--------------------------------------------------------------------------------
/registration/locale/ru/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/ru/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/ru/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: PACKAGE VERSION\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2009-10-21 20:12+0600\n"
11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 | "Last-Translator: FULL NAME \n"
13 | "Language-Team: LANGUAGE \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 |
18 | #: admin.py:23
19 | msgid "Activate users"
20 | msgstr "Активировать учетные записи"
21 |
22 | #: admin.py:43
23 | msgid "Re-send activation emails"
24 | msgstr "Выслать ключи активации заново"
25 |
26 | #: forms.py:35
27 | msgid "Username"
28 | msgstr "Имя пользователя"
29 |
30 | #: forms.py:36
31 | msgid "This value must contain only letters, numbers and underscores."
32 | msgstr "Это поле может содержать только буквы, цифры и подчеркивания"
33 |
34 | #: forms.py:39
35 | msgid "Email address"
36 | msgstr "Адрес электронной почты"
37 |
38 | #: forms.py:41
39 | msgid "Password"
40 | msgstr "Пароль"
41 |
42 | #: forms.py:43
43 | msgid "Password (again)"
44 | msgstr "Пароль (снова)"
45 |
46 | #: forms.py:55
47 | msgid "A user with that username already exists."
48 | msgstr "Пользователь с таким именем уже существует."
49 |
50 | #: forms.py:67
51 | msgid "The two password fields didn't match."
52 | msgstr "Введенные пароли не совпадают."
53 |
54 | #: forms.py:78
55 | msgid "I have read and agree to the Terms of Service"
56 | msgstr "Я прочитал Правила Использования и согласен с ними"
57 |
58 | #: forms.py:79
59 | msgid "You must agree to the terms to register"
60 | msgstr "Для регистрации Вы должны согласиться с Правилами"
61 |
62 | #: forms.py:95
63 | msgid ""
64 | "This email address is already in use. Please supply a different email "
65 | "address."
66 | msgstr ""
67 | "Этот адрес электронной почты уже используется. Пожалуйста, введите другой "
68 | "адрес."
69 |
70 | #: forms.py:122
71 | msgid ""
72 | "Registration using free email addresses is prohibited. Please supply a "
73 | "different email address."
74 | msgstr ""
75 | "Регистрация с использованием свободных почтовых серверов запрещена. "
76 | "Пожалуйста, введите другой адрес электронной почты."
77 |
78 | #: models.py:165
79 | msgid "user"
80 | msgstr "пользователь"
81 |
82 | #: models.py:166
83 | msgid "activation key"
84 | msgstr "ключ активации"
85 |
86 | #: models.py:171
87 | msgid "registration profile"
88 | msgstr "карточка регистрации"
89 |
90 | #: models.py:172
91 | msgid "registration profiles"
92 | msgstr "карточки регистрации"
93 |
--------------------------------------------------------------------------------
/registration/locale/sl/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/sl/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/sl/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: 0.8.1beta\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2009-10-12 14:09-0500\n"
11 | "PO-Revision-Date: 2009-10-23 15:49+0100\n"
12 | "Last-Translator: Domen Kožar \n"
13 | "Language-Team: Slovenian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=utf-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Poedit-Language: Slovenian\n"
18 | "X-Poedit-Country: SLOVENIA\n"
19 |
20 | #: admin.py:23
21 | msgid "Activate users"
22 | msgstr "Aktiviraj uporabnike"
23 |
24 | #: admin.py:43
25 | msgid "Re-send activation emails"
26 | msgstr "Ponovno pošlju aktivacijske emaile"
27 |
28 | #: forms.py:35
29 | msgid "username"
30 | msgstr "uporabniško ime"
31 |
32 | #: forms.py:36
33 | msgid "This value must contain only letters, numbers and underscores."
34 | msgstr "Vrednost lahko vsebuje samo črke, cifre in podčrtaje."
35 |
36 | #: forms.py:39
37 | msgid "Email address"
38 | msgstr "Elektronska pošta"
39 |
40 | #: forms.py:41
41 | msgid "Password"
42 | msgstr "Geslo"
43 |
44 | #: forms.py:43
45 | msgid "Password (again)"
46 | msgstr "Geslo (ponovno)"
47 |
48 | #: forms.py:55
49 | msgid "A user with that username already exists."
50 | msgstr "Uporabnik z tem uporabniškim imenom že obstaja."
51 |
52 | #: forms.py:67
53 | msgid "The two password fields didn't match."
54 | msgstr "Polji z gesli se ne ujemata."
55 |
56 | #: forms.py:78
57 | msgid "I have read and agree to the Terms of Service"
58 | msgstr "Strinjam se z pogoji uporable"
59 |
60 | #: forms.py:79
61 | msgid "You must agree to the terms to register"
62 | msgstr "Za registracijo se morate strinjati z pogoji uporabe"
63 |
64 | #: forms.py:95
65 | msgid "This email address is already in use. Please supply a different email address."
66 | msgstr "Email je že v uporabi, prosimo vnesite drugega."
67 |
68 | #: forms.py:122
69 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
70 | msgstr "Registracija ni mogoča z brezplačnimi email naslovi. Prosimo vnesite drug email naslov."
71 |
72 | #: models.py:165
73 | msgid "user"
74 | msgstr "Uporabnik"
75 |
76 | #: models.py:166
77 | msgid "activation key"
78 | msgstr "Aktivacijski ključ"
79 |
80 | #: models.py:171
81 | msgid "registration profile"
82 | msgstr "Registracijski profil"
83 |
84 | #: models.py:172
85 | msgid "registration profiles"
86 | msgstr "Registracijski profili"
87 |
88 |
--------------------------------------------------------------------------------
/registration/locale/sr/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/sr/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/sr/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: django-registration trunk\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2008-04-05 13:51+0200\n"
11 | "PO-Revision-Date: 2008-04-05 14:00+0100\n"
12 | "Last-Translator: Nebojsa Djordjevic \n"
13 | "Language-Team: \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18 | "X-Poedit-Language: Serbian\n"
19 | "X-Poedit-Country: YUGOSLAVIA\n"
20 |
21 | #: forms.py:38
22 | msgid "username"
23 | msgstr "korisničko ime"
24 |
25 | #: forms.py:41
26 | msgid "email address"
27 | msgstr "email adresa"
28 |
29 | #: forms.py:43
30 | msgid "password"
31 | msgstr "šifra"
32 |
33 | #: forms.py:45
34 | msgid "password (again)"
35 | msgstr "šifra (ponovo)"
36 |
37 | #: forms.py:54
38 | msgid "Usernames can only contain letters, numbers and underscores"
39 | msgstr "Korisničko ime može da se sastoji samo od slova, brojeva i donje crte (\"_\")"
40 |
41 | #: forms.py:59
42 | msgid "This username is already taken. Please choose another."
43 | msgstr "Korisničko ime je već zauzeto. Izaberite drugo."
44 |
45 | #: forms.py:71
46 | msgid "You must type the same password each time"
47 | msgstr "Unete šifre se ne slažu"
48 |
49 | #: forms.py:100
50 | msgid "I have read and agree to the Terms of Service"
51 | msgstr "Pročitao sam i slažem se sa uslovima korišćenja"
52 |
53 | #: forms.py:109
54 | msgid "You must agree to the terms to register"
55 | msgstr "Morate se složiti sa uslovima korišćenja da bi ste se registrovali"
56 |
57 | #: forms.py:128
58 | msgid "This email address is already in use. Please supply a different email address."
59 | msgstr "Ova e-mail adresa je već u upotrebi. Morate koristiti drugu e-mail adresu."
60 |
61 | #: forms.py:153
62 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
63 | msgstr "Registracija korišćenjem besplatnig e-mail adresa je zabranjena. Morate uneti drugu e-mail adresu."
64 |
65 | #: models.py:188
66 | msgid "user"
67 | msgstr "korisnik"
68 |
69 | #: models.py:189
70 | msgid "activation key"
71 | msgstr "aktivacioni ključ"
72 |
73 | #: models.py:194
74 | msgid "registration profile"
75 | msgstr "registracioni profil"
76 |
77 | #: models.py:195
78 | msgid "registration profiles"
79 | msgstr "registracioni profili"
80 |
81 |
--------------------------------------------------------------------------------
/registration/locale/sv/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/sv/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/sv/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2008-03-23 18:59+0100\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: Emil Stenström \n"
14 | "Language-Team: LANGUAGE \n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: .\forms.py:38
20 | msgid "username"
21 | msgstr "Användarnamn"
22 |
23 | #: .\forms.py:41
24 | msgid "email address"
25 | msgstr "E-postadress"
26 |
27 | #: .\forms.py:43
28 | msgid "password"
29 | msgstr "Lösenord"
30 |
31 | #: .\forms.py:45
32 | msgid "password (again)"
33 | msgstr "Lösenord (igen)"
34 |
35 | #: .\forms.py:54
36 | msgid "Usernames can only contain letters, numbers and underscores"
37 | msgstr "Användarnamn får bara innehålla bokstäver, siffror och understreck"
38 |
39 | #: .\forms.py:59
40 | msgid "This username is already taken. Please choose another."
41 | msgstr "Det användarnamnet är upptaget. Prova ett annat."
42 |
43 | #: .\forms.py:71
44 | msgid "You must type the same password each time"
45 | msgstr "Båda lösenord måste vara lika"
46 |
47 | #: .\forms.py:100
48 | msgid "I have read and agree to the Terms of Service"
49 | msgstr "Jag har läst och accepterar avtalet"
50 |
51 | #: .\forms.py:109
52 | msgid "You must agree to the terms to register"
53 | msgstr "Du måste acceptera avtalet för att registrera dig"
54 |
55 | #: .\forms.py:128
56 | msgid ""
57 | "This email address is already in use. Please supply a different email "
58 | "address."
59 | msgstr "Den e-postadressen är upptagen, använd an annan adress."
60 |
61 | #: .\forms.py:153
62 | msgid ""
63 | "Registration using free email addresses is prohibited. Please supply a "
64 | "different email address."
65 | msgstr "Gratis e-postadresser är inte tillåtna, använd en annan adress."
66 |
67 | #: .\models.py:188
68 | msgid "user"
69 | msgstr "Användare"
70 |
71 | #: .\models.py:189
72 | msgid "activation key"
73 | msgstr "Aktiveringsnyckel"
74 |
75 | #: .\models.py:194
76 | msgid "registration profile"
77 | msgstr "Profil"
78 |
79 | #: .\models.py:195
80 | msgid "registration profiles"
81 | msgstr "Profiler"
82 |
--------------------------------------------------------------------------------
/registration/locale/zh_CN/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/zh_CN/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/zh_CN/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: PACKAGE VERSION\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
11 | "PO-Revision-Date: 2008-03-20 23:22+0800\n"
12 | "Last-Translator: hutuworm \n"
13 | "Language-Team: LANGUAGE \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 |
18 | #: forms.py:38
19 | msgid "username"
20 | msgstr "用户名"
21 |
22 | #: forms.py:41
23 | msgid "email address"
24 | msgstr "Email 地址"
25 |
26 | #: forms.py:43
27 | msgid "password"
28 | msgstr "密码"
29 |
30 | #: forms.py:45
31 | msgid "password (again)"
32 | msgstr "密码(重复)"
33 |
34 | #: forms.py:54
35 | msgid "Usernames can only contain letters, numbers and underscores"
36 | msgstr "用户名只能包含字母、数字和下划线"
37 |
38 | #: forms.py:59
39 | msgid "This username is already taken. Please choose another."
40 | msgstr "该用户名已被占用,请另选一个。"
41 |
42 | #: forms.py:68
43 | msgid "You must type the same password each time"
44 | msgstr "您必须输入两遍同样的密码"
45 |
46 | #: forms.py:96
47 | msgid "I have read and agree to the Terms of Service"
48 | msgstr "我已阅读并同意该服务条款"
49 |
50 | #: forms.py:105
51 | msgid "You must agree to the terms to register"
52 | msgstr "您必须同意注册条款"
53 |
54 | #: forms.py:124
55 | msgid "This email address is already in use. Please supply a different email address."
56 | msgstr "该 Email 地址已有人使用,请提供一个另外的 Email 地址。"
57 |
58 | #: forms.py:149
59 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
60 | msgstr "禁止使用免费 Email 地址注册,请提供一个另外的 Email 地址。"
61 |
62 | #: models.py:188
63 | msgid "user"
64 | msgstr "用户"
65 |
66 | #: models.py:189
67 | msgid "activation key"
68 | msgstr "激活密钥"
69 |
70 | #: models.py:194
71 | msgid "registration profile"
72 | msgstr "注册信息"
73 |
74 | #: models.py:195
75 | msgid "registration profiles"
76 | msgstr "注册信息"
77 |
78 |
--------------------------------------------------------------------------------
/registration/locale/zh_TW/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/locale/zh_TW/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/registration/locale/zh_TW/LC_MESSAGES/django.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: PACKAGE VERSION\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2007-09-19 19:30-0500\n"
11 | "PO-Revision-Date: 2008-03-20 23:22+0800\n"
12 | "Last-Translator: hutuworm \n"
13 | "Language-Team: LANGUAGE \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 |
18 | #: forms.py:38
19 | msgid "username"
20 | msgstr "用戶名"
21 |
22 | #: forms.py:41
23 | msgid "email address"
24 | msgstr "Email 地址"
25 |
26 | #: forms.py:43
27 | msgid "password"
28 | msgstr "密碼"
29 |
30 | #: forms.py:45
31 | msgid "password (again)"
32 | msgstr "密碼(重復)"
33 |
34 | #: forms.py:54
35 | msgid "Usernames can only contain letters, numbers and underscores"
36 | msgstr "用戶名只能包含字母、數字和下劃線"
37 |
38 | #: forms.py:59
39 | msgid "This username is already taken. Please choose another."
40 | msgstr "該用戶名已被佔用,請另選一個。"
41 |
42 | #: forms.py:68
43 | msgid "You must type the same password each time"
44 | msgstr "您必須輸入兩遍同樣的密碼"
45 |
46 | #: forms.py:96
47 | msgid "I have read and agree to the Terms of Service"
48 | msgstr "我已閱讀並同意該服務條款"
49 |
50 | #: forms.py:105
51 | msgid "You must agree to the terms to register"
52 | msgstr "您必須同意注冊條款"
53 |
54 | #: forms.py:124
55 | msgid "This email address is already in use. Please supply a different email address."
56 | msgstr "該 Email 地址已有人使用,請提供一個另外的 Email 地址。"
57 |
58 | #: forms.py:149
59 | msgid "Registration using free email addresses is prohibited. Please supply a different email address."
60 | msgstr "禁止使用免費 Email 地址注冊,請提供一個另外的 Email 地址。"
61 |
62 | #: models.py:188
63 | msgid "user"
64 | msgstr "用戶"
65 |
66 | #: models.py:189
67 | msgid "activation key"
68 | msgstr "激活密鑰"
69 |
70 | #: models.py:194
71 | msgid "registration profile"
72 | msgstr "注冊信息"
73 |
74 | #: models.py:195
75 | msgid "registration profiles"
76 | msgstr "注冊信息"
77 |
78 |
--------------------------------------------------------------------------------
/registration/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/management/__init__.py
--------------------------------------------------------------------------------
/registration/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/registration/management/commands/__init__.py
--------------------------------------------------------------------------------
/registration/management/commands/cleanupregistration.py:
--------------------------------------------------------------------------------
1 | """
2 | A management command which deletes expired accounts (e.g.,
3 | accounts which signed up but never activated) from the database.
4 |
5 | Calls ``RegistrationProfile.objects.delete_expired_users()``, which
6 | contains the actual logic for determining which accounts are deleted.
7 |
8 | """
9 |
10 | from django.core.management.base import NoArgsCommand
11 |
12 | from registration.models import RegistrationProfile
13 |
14 |
15 | class Command(NoArgsCommand):
16 | help = "Delete expired user registrations from the database"
17 |
18 | def handle_noargs(self, **options):
19 | RegistrationProfile.objects.delete_expired_users()
20 |
--------------------------------------------------------------------------------
/registration/signals.py:
--------------------------------------------------------------------------------
1 | from django.dispatch import Signal
2 |
3 |
4 | # A new user has registered.
5 | user_registered = Signal(providing_args=["user", "request"])
6 |
7 | # A user has activated his or her account.
8 | user_activated = Signal(providing_args=["user", "request"])
9 |
--------------------------------------------------------------------------------
/revision/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/revision/__init__.py
--------------------------------------------------------------------------------
/revision/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from revision.models import Revision
3 | from revision.models import Author,Tag,License,Language,OpSys
4 |
5 | class RevisionAdmin(admin.ModelAdmin):
6 | fieldsets = (
7 | ('Metadata', {
8 | 'fields': ('software', 'version', 'authors')}),
9 | ('None', {
10 | 'fields': ( 'contact', 'short_description', 'description', 'changes',
11 | 'project_url', 'jmlr_mloss_url', 'tags', 'language', 'os_license',
12 | 'revision', 'updated_date', 'tarball', 'thumbnail', 'screenshot',
13 | 'operating_systems', 'dataformats', 'paper_bib')}),
14 | )
15 | list_filter = ['pub_date', 'revision']
16 | date_hierarchy = 'pub_date'
17 | search_fields = ['software']
18 | list_display = ['software', 'version', 'changes', 'revision']
19 |
20 |
21 | class AuthorAdmin(admin.ModelAdmin):
22 | pass
23 |
24 | class TagAdmin(admin.ModelAdmin):
25 | pass
26 |
27 | class LicenseAdmin(admin.ModelAdmin):
28 | pass
29 |
30 | class LanguageAdmin(admin.ModelAdmin):
31 | pass
32 |
33 | class OpSysAdmin(admin.ModelAdmin):
34 | pass
35 |
36 | admin.site.register(Revision, RevisionAdmin)
37 | admin.site.register(Author, AuthorAdmin)
38 | admin.site.register(Tag, TagAdmin)
39 | admin.site.register(License, LicenseAdmin)
40 | admin.site.register(Language, LanguageAdmin)
41 | admin.site.register(OpSys, OpSysAdmin)
42 |
--------------------------------------------------------------------------------
/revision/urls.py:
--------------------------------------------------------------------------------
1 | """
2 | URLConf for revision.
3 |
4 | Recommended usage is to use a call to ``include("revision.urls")`` in your project's
5 | root URLConf to include this URLConf for any URL beginning with
6 | '/browse/'.
7 |
8 | """
9 |
10 |
11 | from django.conf.urls import url, include
12 |
13 | from revision.views import revision_detail
14 | from revision.views import view_homepage
15 | from revision.views import view_jmlr_homepage
16 | from revision.views import download_revision
17 | from revision.views import get_bibitem
18 | from revision.views import get_paperbibitem
19 |
20 |
21 | # General revision views.
22 | urlpatterns = [
23 | url(r'^view/(?P\d+)/$', revision_detail, name='revision_detail'),
24 | url(r'^homepage/(?P\d+)/$', view_homepage, name='view_homepage'),
25 | url(r'^jmlrhomepage/(?P\d+)/$', view_jmlr_homepage, name='view_jmlr_homepage'),
26 | url(r'^download/(?P\d+)/$', download_revision, name='download_revision'),
27 | url(r'^bib/(?P\d+)/$', get_bibitem, name='get_bibitem'),
28 | url(r'^paperbib/(?P\d+)/$', get_paperbibitem, name='get_paperbibitem'),
29 | ]
30 |
31 |
--------------------------------------------------------------------------------
/revision/views.py:
--------------------------------------------------------------------------------
1 | from django.http import HttpResponse, HttpResponseRedirect, Http404
2 | from django.shortcuts import get_object_or_404, render
3 | from django.template import RequestContext
4 | from django.contrib.sites.models import Site
5 |
6 | from revision.models import Revision
7 | from software.models import Software, SoftwareRating
8 | from software.forms import RatingForm
9 |
10 | def revision_detail(request, revision_id):
11 | revision = get_object_or_404(Revision, pk=revision_id)
12 | software = revision.software
13 | revisions = Revision.objects.filter(software=software)
14 | todays_stats = software.update_views()
15 |
16 | if revisions.count() <= 1:
17 | revisions = None
18 |
19 | ratingform = None
20 |
21 | if request.user.is_authenticated() and not request.user == software.user:
22 | try:
23 | r = SoftwareRating.objects.get(user__id=request.user.id, software=software)
24 | ratingform= RatingForm({'features': r.features,
25 | 'usability': r.usability,
26 | 'documentation': r.documentation})
27 |
28 | except SoftwareRating.DoesNotExist:
29 | ratingform = RatingForm()
30 |
31 | return render(request, 'software/software_detail.html', {'object' : revision})
32 |
33 |
34 | def download_revision(request, revision_id):
35 | entry = get_object_or_404(Revision, pk=revision_id)
36 | sw = get_object_or_404(Software, pk=entry.software.pk)
37 | sw.update_downloads()
38 |
39 | if entry.download_url:
40 | return HttpResponseRedirect(entry.download_url)
41 | elif entry.tarball:
42 | return HttpResponseRedirect('/media/' + entry.tarball.name)
43 | else:
44 | raise Http404
45 |
46 | def view_homepage(request, revision_id):
47 | entry = get_object_or_404(Revision, pk=revision_id)
48 | sw = get_object_or_404(Software, pk=entry.software.pk)
49 | sw.update_views()
50 | return HttpResponseRedirect(entry.project_url)
51 |
52 | def view_jmlr_homepage(request, revision_id):
53 | entry = get_object_or_404(Revision, pk=revision_id)
54 | sw = get_object_or_404(Software, pk=entry.software.pk)
55 | sw.update_views()
56 | return HttpResponseRedirect(entry.jmlr_mloss_url)
57 |
58 | def get_bibitem(request, revision_id):
59 | entry = get_object_or_404(Revision, pk=revision_id)
60 | sw = get_object_or_404(Software, pk=entry.software.pk)
61 | sw.update_views()
62 | key=''
63 | authors=''
64 | author_list = entry.authors.split(',')
65 | for i in xrange(len(author_list)):
66 | a=author_list[i]
67 | key+=a.split(' ')[-1][:3]
68 | authors+=a.strip()
69 | if iComment by %s on %s' % (object.name, object.submit_date.strftime("%Y-%m-%d %H:%M")),
59 | link, markdown(object.comment),
60 | author_name=object.name,
61 | pubdate=object.submit_date, unique_id=link,)
62 | response = HttpResponse(mimetype='application/xml')
63 | feed.write(response, 'utf-8')
64 | return response
65 |
66 | def RssCommentsFeed(request, software_id):
67 | sw = get_object_or_404(Software, pk=software_id)
68 | ctype = ContentType.objects.get_for_model(sw)
69 | object_list = Comment.objects.filter(content_type=ctype, object_pk=sw.pk).order_by('submit_date')
70 |
71 | feed = WellFormedWebRss( u'mloss.org ' + sw.title.encode('utf-8'),
72 | "http://mloss.org",
73 | u'Updates and additions to ' + sw.title.encode('utf-8'),
74 | language=u"en")
75 |
76 | for object in object_list:
77 | link = 'http://%s%s' % (Site.objects.get_current().domain, object.get_absolute_url())
78 | feed.add_item(u'By: %s on: %s ' % (object.name, object.submit_date.strftime("%Y-%m-%d %H:%M")),
79 | link, markdown(object.comment),
80 | author_name=object.name,
81 | pubdate=object.submit_date, unique_id=link,)
82 | response = HttpResponse(mimetype='application/xml')
83 | feed.write(response, 'utf-8')
84 | return response
85 |
--------------------------------------------------------------------------------
/software/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/software/templatetags/__init__.py
--------------------------------------------------------------------------------
/software/templatetags/get_version.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from django.conf import settings
3 |
4 | register = template.Library()
5 |
6 | @register.simple_tag
7 | def get_version():
8 | return settings.VERSION
9 |
--------------------------------------------------------------------------------
/software/templatetags/paginator.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from urllib import quote
3 |
4 | register = template.Library()
5 | @register.inclusion_tag('paginator.html', takes_context=True)
6 |
7 | def paginator(context, adjacent_pages=2):
8 | """
9 | To be used in conjunction with the object_list generic view.
10 |
11 | Adds pagination context variables for use in displaying first, adjacent and
12 | last page links in addition to those created by the object_list generic
13 | view.
14 |
15 | """
16 |
17 | if context.has_key('is_paginated'):
18 | page_obj=context['page_obj']
19 | paginator=page_obj.paginator
20 | page_numbers = [n for n in \
21 | range(page_obj.number - adjacent_pages, page_obj.number + adjacent_pages + 1) \
22 | if n > 0 and n <= paginator.num_pages]
23 | results_this_page = context['object_list'].count()
24 | range_base = ((page_obj.number - 1) * paginator.per_page)
25 | if len(page_numbers)<=1:
26 | page_numbers=[]
27 |
28 | r= {
29 | 'hits': paginator.count,
30 | 'results_per_page': paginator.per_page,
31 | 'results_this_page': results_this_page,
32 | 'first_this_page': range_base + 1,
33 | 'last_this_page': range_base + results_this_page,
34 | 'page': page_obj.number,
35 | 'pages': paginator.num_pages,
36 | 'page_numbers': page_numbers,
37 | 'next': page_obj.next_page_number,
38 | 'previous': page_obj.previous_page_number,
39 | 'has_next': page_obj.has_next(),
40 | 'has_previous': page_obj.has_previous(),
41 | 'show_first': 1 not in page_numbers,
42 | 'show_last': paginator.num_pages not in page_numbers,
43 | }
44 |
45 | if context.has_key('search_term'):
46 | r['search_term']=quote(context['search_term'],'')
47 |
48 | return r
49 |
--------------------------------------------------------------------------------
/software/templatetags/permute_items.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | import random
3 |
4 | register = template.Library()
5 |
6 | class Permutator(template.Node):
7 | def __init__(self, context_var):
8 | self.context_var = context_var
9 |
10 | def render(self, context):
11 | return self.context_var
12 |
13 | def permute_items(parser, token):
14 | items = token.contents[13:].split('|')
15 | random.shuffle(items)
16 | return Permutator(", ".join(items))
17 |
18 | register.tag('permute_items', permute_items)
19 |
--------------------------------------------------------------------------------
/software/templatetags/safe_markup.py:
--------------------------------------------------------------------------------
1 | """
2 | Implementation of a Markdown filter which supports safe mode and
3 | extensions.
4 |
5 | """
6 |
7 | from django import template
8 | from django.conf import settings
9 |
10 | register = template.Library()
11 |
12 | def safe_markdown(value, arg=''):
13 | """
14 | Runs Markdown over a given value, optionally using various
15 | extensions python-markdown supports.
16 |
17 | Syntax::
18 |
19 | {{ value|markdown:"extension1_name,extension2_name..." }}
20 |
21 | To enable safe mode, which strips raw HTML and only returns HTML
22 | generated by actual Markdown syntax, pass "safe" as the first
23 | extension in the list.
24 |
25 | If the version of Markdown in use does not support extensions,
26 | they will be silently ignored.
27 |
28 | """
29 | try:
30 | import markdown
31 | except ImportError:
32 | if settings.DEBUG:
33 | raise template.TemplateSyntaxError('Error in markdown filter: Markdown could not be imported.')
34 | else:
35 | # Try to salvage this; whatever we do, we shouldn't
36 | # return potentially unsafe HTML.
37 | from django.utils.html import escape, linebreaks
38 | return linebreaks(escape(value))
39 | else:
40 | extensions=arg.split(",")
41 | if len(extensions) > 0 and extensions[0] == "safe":
42 | extensions = extensions[1:]
43 | safe_mode = True
44 | else:
45 | safe_mode = False
46 | if len(extensions) > 0 and extensions[0].startswith("cut"):
47 | cutoff = int(extensions[0][extensions[0].rfind("=")+1:])
48 | extensions = extensions[1:]
49 | if len(value)>cutoff:
50 | p = value[:cutoff].find("\n")
51 | append=""
52 | if p == -1:
53 | append=" [...]"
54 | p = value[:cutoff-1].rfind(" ")
55 | if p >= 0:
56 | cutoff = p
57 | else:
58 | cutoff = p
59 |
60 | value = value[:cutoff] + append
61 | return markdown.markdown(value, extensions, safe_mode=safe_mode)
62 |
63 |
64 | def firstwords(value, arg=''):
65 | """
66 | Return the first paragraph of a string,
67 | or up to number of characters defined by keyword cut
68 | """
69 | extensions=arg.split(",")
70 | if len(extensions) > 0 and extensions[0].startswith("cut"):
71 | cutoff = int(extensions[0][extensions[0].rfind("=")+1:])
72 | else:
73 | cutoff = 200
74 |
75 | if len(value)>cutoff:
76 | p = value[:cutoff].find("\n")
77 | append=""
78 | if p == -1:
79 | append=" [...]"
80 | p = value[:cutoff-1].rfind(" ")
81 | if p >= 0:
82 | cutoff = p
83 | else:
84 | cutoff = p
85 | value = value[:cutoff] + append
86 | return value
87 |
88 | register.filter('firstwords',firstwords)
89 |
90 | register.filter('safe_markdown', safe_markdown)
91 |
--------------------------------------------------------------------------------
/software/templatetags/show_stars.py:
--------------------------------------------------------------------------------
1 | import math
2 |
3 | from django.template import Library, Node, TemplateSyntaxError, VariableDoesNotExist, Variable
4 | from django.conf import settings
5 |
6 | register = Library()
7 |
8 | IMG_TEMPLATE = ' '
9 |
10 | PATH_TO_WHOLE_STAR = IMG_TEMPLATE % (settings.STATIC_URL + 'images/stars/star.png', "Whole Star")
11 | PATH_TO_THREE_QUARTER_STAR = IMG_TEMPLATE % (settings.STATIC_URL + 'images/stars/three-quarter.png', "3/4 Star")
12 | PATH_TO_HALF_STAR = IMG_TEMPLATE % (settings.STATIC_URL + 'images/stars/half.png', "1/2 Star")
13 | PATH_TO_QUARTER_STAR = IMG_TEMPLATE % (settings.STATIC_URL + 'images/stars/quarter.png', "1/4 Star")
14 | PATH_TO_BLANK_STAR = IMG_TEMPLATE % (settings.STATIC_URL + 'images/stars/blank.png', "Empty Star")
15 |
16 | class ShowStarsNode(Node):
17 | """ Default rounding is to the whole unit """
18 | def __init__(self, context_var, total_stars, round_to):
19 | self.context_var = context_var
20 | self.total_stars = int(total_stars)
21 | self.round_to = round_to.lower()
22 |
23 | def render(self, context):
24 | try:
25 | stars = Variable(self.context_var).resolve(context)
26 | #stars = resolve_variable(self.context_var, context)
27 | except VariableDoesNotExist:
28 | return ''
29 |
30 | if self.round_to == "half":
31 | stars = round(stars*2)/2
32 | elif self.round_to == "quarter":
33 | stars = round(stars*4)/4
34 | else:
35 | stars = round(stars)
36 |
37 | fraction, integer = math.modf(stars)
38 | integer = int(integer)
39 | output = []
40 |
41 | for whole_star in range(integer):
42 | output.append(PATH_TO_WHOLE_STAR)
43 | if self.round_to == 'half' and fraction == .5:
44 | output.append(PATH_TO_HALF_STAR)
45 | elif self.round_to == 'quarter':
46 | if fraction == .25:
47 | output.append(PATH_TO_QUARTER_STAR)
48 | elif fraction == .5:
49 | output.append(PATH_TO_HALF_STAR)
50 | elif fraction == .75:
51 | output.append(PATH_TO_THREE_QUARTER_STAR)
52 |
53 | if fraction:
54 | integer += 1
55 |
56 | blanks = int(self.total_stars - integer)
57 |
58 | for blank_star in range(blanks):
59 | output.append(PATH_TO_BLANK_STAR)
60 |
61 | return "".join(output)
62 |
63 | """ show_stars context_var of 5 round to half """
64 | def do_show_stars(parser, token):
65 | args = token.contents.split()
66 | if len(args) != 7:
67 | raise TemplateSyntaxError('%s tag requires exactly six arguments' % args[0])
68 | if args[2] != 'of':
69 | raise TemplateSyntaxError("second argument to '%s' tag must be 'of'" % args[0])
70 | if args[4] != 'round':
71 | raise TemplateSyntaxError("fourth argument to '%s' tag must be 'round'" % args[0])
72 | if args[5] != 'to':
73 | raise TemplateSyntaxError("fourth argument to '%s' tag must be 'to'" % args[0])
74 | return ShowStarsNode(args[1], args[3], args[6])
75 |
76 | register.tag('show_stars', do_show_stars)
77 |
--------------------------------------------------------------------------------
/software/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/software/views/__init__.py
--------------------------------------------------------------------------------
/subscriptions/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/subscriptions/__init__.py
--------------------------------------------------------------------------------
/subscriptions/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from subscriptions.models import Subscriptions
3 |
4 | class SubscriptionsAdmin(admin.ModelAdmin):
5 | list_display = ('user', 'title', 'last_updated', 'subscribed_date', 'url',
6 | 'object_id', 'content_type', 'bookmark')
7 |
8 | admin.site.register(Subscriptions, SubscriptionsAdmin)
9 |
10 |
--------------------------------------------------------------------------------
/subscriptions/models.py:
--------------------------------------------------------------------------------
1 | from markdown import markdown
2 | from django.contrib.auth.models import User
3 | from django.contrib.contenttypes.models import ContentType
4 | from django.contrib.contenttypes import generic
5 | from django.db import models
6 |
7 | class Subscriptions(models.Model):
8 | """
9 | Email subscriptions on various events
10 |
11 | * software authors should be notified when someone posts a comment to their software package
12 | * people sending comments to a sw should be notified on answers
13 | * people should be able to subscribe to threads in the forum
14 | * email reminder to users, once per quarter of the year, that they are subscribed and which
15 | software packages are new since their last logon
16 | * people should see a list of subscriptions on their user page (with unsubscribe option)
17 | """
18 |
19 | # user, title, url
20 | user = models.ForeignKey(User)
21 | title = models.CharField(max_length=200)
22 | url = models.URLField(verify_exists=False)
23 | # if bookmark == true don't send out notifications
24 | bookmark = models.BooleanField(default=False)
25 |
26 | # software/posting object etc - this is handled via generic content types
27 | content_type = models.ForeignKey(ContentType)
28 | object_id = models.PositiveIntegerField()
29 | content_object = generic.GenericForeignKey()
30 | last_updated = models.DateTimeField(auto_now_add=True)
31 | subscribed_date = models.DateTimeField(auto_now_add=True)
32 |
33 | def get_unsubscribe_url(self):
34 | if self.title.startswith("Software"):
35 | return "/software/unsubscribe/%d" % self.object_id
36 | elif self.title.startswith("Forum"):
37 | c=self.content_type.get_object_for_this_type(id=self.object_id)
38 | return "/community/unsubscribe/%s" % c.slug
39 | elif self.title.startswith("Thread"):
40 | c=self.content_type.get_object_for_this_type(id=self.object_id)
41 | return "/community/unsubscribe/%s/%d" % (c.forum.slug, self.object_id)
42 |
43 | def get_rmbookmark_url(self):
44 | if self.title.startswith("Software"):
45 | return "/software/rmbookmark/%d" % self.object_id
46 | elif self.title.startswith("Forum"):
47 | c=self.content_type.get_object_for_this_type(id=self.object_id)
48 | return "/community/rmbookmark/%s" % c.slug
49 | elif self.title.startswith("Thread"):
50 | c=self.content_type.get_object_for_this_type(id=self.object_id)
51 | return "/community/rmbookmark/%s/%d" % (c.forum.slug, self.object_id)
52 |
53 |
--------------------------------------------------------------------------------
/subscriptions2/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/subscriptions2/__init__.py
--------------------------------------------------------------------------------
/subscriptions2/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from subscriptions2.models import Subscriptions
3 | class SubscriptionsAdmin(admin.ModelAdmin):
4 | list_display = ('user', 'title', 'last_updated', 'subscribed_date', 'url',
5 | 'object_id', 'content_type', 'bookmark')
6 |
7 | admin.site.register(Subscriptions, SubscriptionsAdmin)
8 |
9 |
--------------------------------------------------------------------------------
/subscriptions2/models.py:
--------------------------------------------------------------------------------
1 | from markdown2 import markdown
2 | from django.contrib.auth.models import User
3 | from django.contrib.contenttypes.models import ContentType
4 | from django.contrib.contenttypes import fields
5 | from django.db import models
6 |
7 | class Subscriptions(models.Model):
8 | """
9 | Email subscriptions on various events
10 |
11 | * software authors should be notified when someone posts a comment to their software package
12 | * people sending comments to a sw should be notified on answers
13 | * people should be able to subscribe to threads in the forum
14 | * email reminder to users, once per quarter of the year, that they are subscribed and which
15 | software packages are new since their last logon
16 | * people should see a list of subscriptions on their user page (with unsubscribe option)
17 | """
18 |
19 | # user, title, url
20 | user = models.ForeignKey(User)
21 | title = models.CharField(max_length=200)
22 | url = models.URLField()
23 | # if bookmark == true don't send out notifications
24 | bookmark = models.BooleanField(default=False)
25 |
26 | # software/posting object etc - this is handled via generic content types
27 | content_type = models.ForeignKey(ContentType)
28 | object_id = models.PositiveIntegerField()
29 | content_object = fields.GenericForeignKey()
30 | last_updated = models.DateTimeField(auto_now_add=True)
31 | subscribed_date = models.DateTimeField(auto_now_add=True)
32 |
33 | def get_unsubscribe_url(self):
34 | if self.title.startswith("Software"):
35 | return "/software/unsubscribe/%d" % self.object_id
36 | elif self.title.startswith("Forum"):
37 | c=self.content_type.get_object_for_this_type(id=self.object_id)
38 | return "/community/unsubscribe/%s" % c.slug
39 | elif self.title.startswith("Thread"):
40 | c=self.content_type.get_object_for_this_type(id=self.object_id)
41 | return "/community/unsubscribe/%s/%d" % (c.forum.slug, self.object_id)
42 |
43 | def get_rmbookmark_url(self):
44 | if self.title.startswith("Software"):
45 | return "/software/rmbookmark/%d" % self.object_id
46 | elif self.title.startswith("Forum"):
47 | c=self.content_type.get_object_for_this_type(id=self.object_id)
48 | return "/community/rmbookmark/%s" % c.slug
49 | elif self.title.startswith("Thread"):
50 | c=self.content_type.get_object_for_this_type(id=self.object_id)
51 | return "/community/rmbookmark/%s/%d" % (c.forum.slug, self.object_id)
52 |
53 |
--------------------------------------------------------------------------------
/templates/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block title %}Page not found{% endblock %}
4 |
5 | {% block content %}
6 |
7 | Page not found
8 |
9 | Looks like you followed a bad link. If you think it's our fault,
10 | please let us
11 | know .
12 |
13 | Here's a link to the homepage . You know, just in case.
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/500.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block title %}Page unavailable{% endblock %}
4 |
5 | {% block content %}
6 |
7 | Page unavailable
8 |
9 | We're sorry, but the requested page is currently unavailable.
10 |
11 | We're messing around with things internally, and the server had a bit of a hiccup.
12 |
13 | Please try again later.
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/aggregator/feeditem_list.html:
--------------------------------------------------------------------------------
1 | {% extends "base_community.html" %}
2 |
3 | {% block extrahead %}
4 |
5 | {% endblock %}
6 |
7 | {% block content %}
8 |
9 | Community
10 | This page, updated every day, aggregates blog entries by people who are
11 | writing about Machine Learning.
12 |
13 | {% for item in object_list %}
14 |
15 |
16 | Posted on {{ item.date_modified|date:"F j, Y" }}
17 | at {{ item.date_modified|date:"g:i A" }}
18 | by {{ item.feed.title }}
19 |
20 |
21 | {{ item.summary }}
22 |
23 | Read this post in context »
24 | {% endfor %}
25 |
26 |
27 | {% if has_next %}
Earlier posts {% endif %}
28 |
29 |
30 | {% endblock %}
31 |
--------------------------------------------------------------------------------
/templates/author_list.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block title %}All Authors{% endblock %}
4 |
5 | All users
6 |
7 | {% block content-main %}
8 |
13 |
14 |
23 | {% endblock %}
24 |
25 | {% block content-related %}
26 | Here is a list of all the authors
27 | {% endblock %}
28 |
29 |
--------------------------------------------------------------------------------
/templates/base.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 | mloss | {% block title %}Machine Learning Open Source Software{% endblock %}
9 |
10 |
11 |
12 |
13 |
15 |
16 |
17 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {% block extrahead %}{% endblock %}
31 |
32 |
33 |
34 |
35 |
62 |
63 |
{% block billboard %}{% endblock %}
64 |
65 | {% block columnwrap %}
66 |
67 | {% endblock %}
68 |
69 |
70 | {% block footer %}
71 |
72 | {% endblock %}
73 |
74 |
75 |
79 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/templates/base_2col.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block columnwrap %}
4 |
8 |
9 |
10 | {% block content %}
11 | {% endblock %}
12 |
13 |
14 | {% endblock %}
15 |
16 | {% block footer %}
17 | {% load get_version %}
18 | {% load permute_items %}
19 |
24 | {% endblock %}
25 |
--------------------------------------------------------------------------------
/templates/base_workshop.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col" %}
2 |
3 | {% block sectionid %}workshop{% endblock %}
4 |
5 | {% block title %}Workshop{% endblock %}
6 |
7 | {% block billboard %}Workshop{% endblock %}
8 |
9 | {% block content-related %}
10 |
14 | {% endblock %}
15 |
16 |
--------------------------------------------------------------------------------
/templates/blog/blogitem_archive_day.html:
--------------------------------------------------------------------------------
1 | {% extends "community/blog_list.html" %}
2 |
3 | {% block title %}Weblog | {{ day|date:"F j" }}{% endblock %}
4 |
5 | {% block content %}
6 | {% load safe_markup %}
7 | {{ day|date:"F j Y" }} archive
8 |
9 | {% for object in object_list %}
10 |
11 | {{ object.pub_date|date:"F j, Y" }}
12 | {{ object.body|safe_markdown:"safe" }}
13 |
14 | {% endfor %}
15 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/templates/blog/blogitem_archive_month.html:
--------------------------------------------------------------------------------
1 | {% extends "community/blog_list.html" %}
2 |
3 | {% block title %}Weblog | {{ month|date:"F" }}{% endblock %}
4 |
5 | {% block content %}
6 | {% load markup %}
7 | {{ month|date:"F Y" }} archive
8 |
9 | {% for object in object_list %}
10 |
11 | {{ object.pub_date|date:"F j, Y" }}
12 | {{ object.body|markdown:"safe" }}
13 |
14 | {% endfor %}
15 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/templates/blog/blogitem_archive_year.html:
--------------------------------------------------------------------------------
1 | {% extends "community/blog_list.html" %}
2 |
3 | {% block title %}Weblog | {{ year }}{% endblock %}
4 |
5 | {% block content %}
6 |
7 | {{ year|date:"Y" }} archive
8 |
9 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/blog/blogitem_detail.html:
--------------------------------------------------------------------------------
1 | {% extends "community/blog_list.html" %}
2 |
3 | {% block title %}Weblog | {{ object.headline|escape }}{% endblock %}
4 |
5 | {% block content %}
6 | {% load markup %}
7 | {{ object.headline }}
8 | Posted by {{ object.author }} on {{ object.pub_date|date:"F j, Y" }}
9 | {{ object.body|markdown:"safe" }}
10 |
11 | {% load comments %}
12 | {% get_comment_list for blog.blogitem object.id as comment_list %}
13 |
14 |
15 |
16 |
17 | {% if comment_list %}
18 | {% for comment in comment_list %}
19 |
20 |
26 |
27 | {% endfor %}
28 | {% else %}
29 |
30 | No one has posted any comments yet. Perhaps you'd like to be the first?
31 |
32 | {% endif %}
33 |
34 |
Leave a comment
35 | {% if user.is_authenticated %}
36 | {% render_comment_form for blog.blogitem object.id %}
37 | {% else %}
38 |
39 | You must be logged in to post comments.
40 |
41 | {% endif %}
42 |
43 | {% endblock %}
44 |
--------------------------------------------------------------------------------
/templates/comments/form.html:
--------------------------------------------------------------------------------
1 | {% load comments %}
2 |
3 |
31 |
--------------------------------------------------------------------------------
/templates/comments/posted.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}browse{% endblock %}
4 |
5 | {% block title %}Comment posted{% endblock %}
6 |
7 | {% block billboard %}Title:{{ object.title }}{% endblock %}
8 |
9 |
10 | {% block content %}
11 |
12 | Comment posted successfully
13 |
14 | Thanks for contributing.
15 |
16 | {% if object %}
17 |
20 | {% endif %}
21 |
22 | {% endblock %}
23 |
--------------------------------------------------------------------------------
/templates/comments/preview.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 | {% block sectionid %}browse{% endblock %}
3 |
4 | {% block title %}Preview your comment submission{% endblock %}
5 |
6 | {% block billboard %}Preview your comment submission{% endblock %}
7 |
8 | {% block content %}
9 | {% load comments %}
10 | {% load markup %}
11 | {% load safe_markup %}
12 |
13 |
75 |
76 | {% endblock %}
77 |
--------------------------------------------------------------------------------
/templates/community/blog_list.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}blog{% endblock %}
4 |
5 | {% block title %}Open Thoughts{% endblock %}
6 |
7 | {% block billboard %}Open Thoughts{% endblock %}
8 |
9 | {% load safe_markup %}
10 | {% load markup %}
11 |
12 | {% block content-related %}
13 | {% if blog_entries %}
14 | Latest Thoughts
15 |
16 |
26 |
27 | {% endif %}
28 |
29 | {% if blog_years %}
30 | Archive
31 |
32 |
33 | {% for year in blog_years %}
34 |
35 |
36 |
37 | {% endfor %}
38 |
39 |
40 | {% endif %}
41 |
42 | {% if latest_posts %}
43 | Recent forum posts
44 |
45 |
58 |
59 | {% else %}
60 | No forum yet.
61 | {% endif %}
62 |
63 |
65 |
66 |
67 | {% endblock %}
68 |
69 | {% block content %}
70 |
71 |
72 | {% if latest %}
73 | {% for object in latest %}
74 |
75 | Posted by
76 | {{ object.author }}
77 | on {{ object.pub_date|date:"F j, Y" }}
78 |
79 | {{ object.body|markdown:"safe" }}
80 | {% endfor %}
81 | {% else %}
82 | No blogs yet
83 | {% endif %}
84 |
85 | {% endblock %}
86 |
--------------------------------------------------------------------------------
/templates/community/forum_base.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}forum{% endblock %}
4 |
5 | {% block title %}Discussion Forum{% endblock %}
6 |
7 | {% block billboard %}Discussion Forum{% endblock %}
8 |
9 | {% block content %}
10 | Home »
Forums
11 | {% block breadcrumbs %}{% endblock %}
12 |
13 | {% endblock %}
14 |
--------------------------------------------------------------------------------
/templates/community/forum_list.html:
--------------------------------------------------------------------------------
1 | {% extends "community/forum_base.html" %}
2 |
3 | {% block content %}
4 |
5 |
6 | Forum
7 | Last Post
8 |
9 | {% for forum in object_list %}
10 |
11 | {{ forum.title }} {{ forum.threads }} thread{{ forum.threads|pluralize }}, {{ forum.posts }} post{{ forum.posts|pluralize }}
12 | {% if user.is_authenticated %}[ ]{% endif %}
13 |
14 | {{ forum.description }}
15 | {% if forum.forum_latest_post %}{{ forum.forum_latest_post.time|timesince }} ago by {{ forum.forum_latest_post.author }} (view ){% else %}No Posts{% endif %}
16 |
17 | {% endfor %}
18 |
19 | {% endblock %}
20 |
21 | {% load safe_markup %}
22 | {% load markup %}
23 |
24 | {% block content-related %}
25 | Use ...
26 |
27 | the discussion forums to inform us about problems with this site, missing features.
28 | Or just discuss general MLOSS issues.
29 |
30 |
31 | {% endblock %}
32 |
--------------------------------------------------------------------------------
/templates/community/summary.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}blog{% endblock %}
4 |
5 | {% block title %}Open Thoughts{% endblock %}
6 |
7 | {% block billboard %}Open Thoughts{% endblock %}
8 |
9 | {% block content-related %}
10 |
11 | {% load safe_markup %}
12 | {% load markup %}
13 |
14 | {% if blog_entries %}
15 | Latest Thoughts
16 |
17 |
27 |
28 | {% endif %}
29 |
30 | {% if blog_years %}
31 | Archive
32 |
33 |
34 | {% for year in blog_years %}
35 |
36 |
37 |
38 | {% endfor %}
39 |
40 |
41 | {% endif %}
42 |
43 | {% if latest_posts %}
44 | Recent forum posts
45 |
46 |
59 |
60 | {% else %}
61 | No forum yet.
62 | {% endif %}
63 |
64 | {% if latest_feeds %}
65 | Recent posts from external sites
66 |
67 |
68 | {% for feed in latest_feeds %}
69 |
70 |
75 |
76 | {% endfor %}
77 |
78 |
79 | {% else %}
80 | No forum yet.
81 | {% endif %}
82 |
83 |
84 |
85 |
86 |
87 | {% endblock %}
88 |
89 | {% block content %}
90 | {% if blog_entries %}
91 | {% for latest_blog in blog_entries %}
92 |
93 |
94 | by
95 | {{ latest_blog.author }}
96 | on {{ latest_blog.pub_date|date:"F j, Y" }}
97 |
98 | {% load comments %}
99 | {% get_comment_list for blog.blogitem latest_blog.id as comment_list %}
100 | {% if comment_list %}
101 | {% get_comment_count for blog.blogitem latest_blog.id as comment_count %}
102 | ({{ comment_count }} comment{{ comment_count|pluralize }} )
103 | {% else %}
104 | (0 comments)
105 | {% endif %}
106 |
107 |
108 |
109 | {{ latest_blog.body|markdown:"safe" }}
110 |
111 |
112 | {% if not forloop.last %}
113 |
114 | {% endif %}
115 | {% endfor %}
116 | {% endif %}
117 | {% endblock %}
118 |
--------------------------------------------------------------------------------
/templates/community/thread.html:
--------------------------------------------------------------------------------
1 | {% extends "community/forum_base.html" %}
2 |
3 | {% load paginator %}
4 | {% load markup %}
5 |
6 | {% block title %}{{ thread.title }} ({{ forum.title }}){% endblock %}
7 | {% block billboard %}Thread: {{ thread.title }} ({{ forum.title }}){% endblock %}
8 |
9 | {% block pagetitle %}{{ forum.title }} » {{ thread.title }}{% endblock %}
10 |
11 |
12 | {% block breadcrumbs %}» {{ forum.title }} » {{ thread.title }} ({{ thread.object_list }} post{{ thread.object_list|pluralize }}){% endblock %}
13 |
14 | {% block content %}
15 |
16 | {% paginator 5 %}
17 |
18 |
19 | {% for post in object_list %}
20 |
21 |
22 |
23 |
24 |
25 |
26 | {{ post.author }} ( on {{ post.time|date:"F j, Y, H:i:s" }} )
27 | {{ post.body|markdown:"safe" }}
28 |
29 |
30 |
31 |
32 |
33 |
34 | {% endfor %}
35 |
36 |
37 |
38 | {% paginator 5 %}
39 |
40 | {% if posting %}
41 | Preview
42 |
43 |
{{ posting.author }} ( on {{ posting.time|date:"F j, Y, H:i:s" }} )
44 | {{ posting.body|markdown:"safe" }}
45 |
46 | {% endif %}
47 |
48 | {% if not has_next %}
49 | Post a Reply
50 | {% if thread.closed %}
51 | Sorry, this thread is closed. No further replies are permitted.
52 | {% else %}
53 |
86 | {% endif %}
87 | {% endif %}
88 | {% endblock %}
89 |
90 | {% block content-related %}
91 | You are in Forum {{ forum.title }} looking at thread {{ thread.title }} .
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | {% endblock %}
100 |
--------------------------------------------------------------------------------
/templates/faq_index.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}faq{% endblock %}
4 |
5 | {% block title %}Frequently Asked Questions{% endblock %}
6 |
7 | {% block billboard %}Frequently Asked Questions{% endblock %}
8 |
9 | {% block content-related %}
10 |
11 | To browse the currently listed software projects or to submit your own,
12 | click on the Software tab.
13 | You will need to register to be able to submit new projects.
14 | {% endblock %}
15 |
16 | {% block content %}
17 | {% load markup %}
18 | {% if all_faq_items %}
19 |
20 | {% for nitem in all_faq_items %}
21 |
22 | {{ nitem.question|markdown }}
23 | {{ nitem.answer|markdown }}
24 |
25 | {% endfor %}
26 |
27 | {% else %}
28 | No faq items
29 | {% endif %}
30 | {% endblock %}
31 |
--------------------------------------------------------------------------------
/templates/flatpages/default.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 | {% block title %}{{ flatpage.title }}{% endblock %}
3 |
4 | {% block sectionid %}{{ flatpage.title }}{% endblock %}
5 |
6 | {% block billboard %}{{ flatpage.title }}{% endblock %}
7 |
8 | {% block content-related %}
9 |
10 | To browse the currently listed software projects or to submit your own,
11 | click on the Software tab.
12 | You will need to register to be able to submit new projects.
13 | {% endblock %}
14 |
15 | {% block content %}
16 | {{ flatpage.content }}
17 | {% endblock %}
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/templates/news_index.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}news{% endblock %}
4 |
5 | {% block title %}News Items{% endblock %}
6 |
7 | {% block billboard %}News Items{% endblock %}
8 |
9 | {% block content-related %}
10 | {% if all_news_items %}
11 |
12 | {% for nitem in all_news_items %}
13 | {{ nitem.headline }}
14 | {% endfor %}
15 | {% else %}
16 | No news items
17 | {% endif %}
18 | {% endblock %}
19 |
20 | {% block content %}
21 | {% if all_news_items %}
22 |
23 | {% for nitem in all_news_items %}
24 |
25 | {{ nitem.headline }} ({{ nitem.publication_date }})
26 | {{ nitem.article }}
27 |
28 | {% endfor %}
29 |
30 | {% else %}
31 | No news items
32 | {% endif %}
33 | {% endblock %}
34 |
--------------------------------------------------------------------------------
/templates/paginator.html:
--------------------------------------------------------------------------------
1 | {% if page_numbers %}
2 |
3 |
4 | Showing Items {{ first_this_page }}-{{ last_this_page }} of {{ hits }} on page {{ page }} of {{ pages }}:
5 | {% if show_first %}
6 | {% if search_term %}
7 | First
8 | {% else %}
9 | First
10 | {% endif %}
11 | {% endif %}
12 |
13 | {% if has_previous %}
14 | {% if search_term %}
15 | Previous
16 | {% else %}
17 | Previous
18 | {% endif %}
19 | {% endif %}
20 |
21 | {% for pg in page_numbers %}
22 | {% ifequal pg page %}
23 | {{ pg }}
24 | {% else %}
25 | {% if search_term %}
26 | {{ pg }}
27 | {% else %}
28 | {{ pg }}
29 | {% endif %}
30 | {% endifequal %}
31 | {% endfor %}
32 |
33 | {% if has_next %}
34 | {% if search_term %}
35 | Next
36 | {% else %}
37 | Next
38 | {% endif %}
39 | {% endif %}
40 |
41 | {% if show_last %}
42 | {% if search_term %}
43 | Last
44 | {% else %}
45 | Last
46 | {% endif %}
47 | {% endif %}
48 |
49 |
50 | {% else %}
51 |
52 | {% endif %}
53 |
--------------------------------------------------------------------------------
/templates/registration/activate.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Account activation{% endblock %}
6 |
7 | {% block billboard %}Account activation{% endblock %}
8 |
9 | {% block content %}
10 | {% load humanize %}
11 | Either your activation key ({{ activation_key }}) was incorrect, or the activation key for your account has expired.
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/templates/registration/activation_complete.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Account activation{% endblock %}
6 |
7 | {% block billboard %}Account activation{% endblock %}
8 |
9 | {% block content %}
10 | {% load humanize %}
11 | Thanks for signing up! Now you can log in and start contributing!
12 | {% endblock %}
13 |
14 |
--------------------------------------------------------------------------------
/templates/registration/activation_email.txt:
--------------------------------------------------------------------------------
1 | {% load humanize %}
2 | Someone, hopefully you, signed up for a new account at {{ site_url }} using this email address. If it was you, and you'd like to activate and use your account, click the link below or copy and paste it into your web browser's address bar:
3 |
4 | http://{{ site.domain }}{% url 'registration_activate' activation_key=activation_key %}
5 |
6 | If you didn't request this, you don't need to do anything; you won't receive any
7 | more email from us, and the account will expire automatically in {{ expiration_days|apnumber }} day{{expiration_days|apnumber|pluralize}}.
8 |
--------------------------------------------------------------------------------
/templates/registration/activation_email_subject.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}{% trans "Account activation on" %} {{ site.name }}
2 |
--------------------------------------------------------------------------------
/templates/registration/login.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Log in{% endblock %}
6 |
7 | {% block billboard %}Log in{% endblock %}
8 |
9 | {% block content-related %}
10 | If you don't have an account, you can sign up for one; it's free, and you'll be able to add content to this site.
11 | Forgotten your password? Then click here to receive an e-mail with a new one.
12 | {% endblock %}
13 |
14 | {% block content %}
15 |
16 | {% if form.errors %}
17 | Please correct the errors below:
18 | Your username and password didn't match. Please try again.
19 | {% endif %}
20 |
21 | Login
22 |
31 |
32 | {% endblock %}
33 |
34 |
--------------------------------------------------------------------------------
/templates/registration/logout.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Logged out{% endblock %}
6 |
7 | {% block billboard %}Logout{% endblock %}
8 |
9 | {% block content %}
10 | You've been logged out.
11 | {% endblock %}
12 |
13 | {% block content-related %}
14 | Thanks for stopping by; when you come back, don't forget to log in again.
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/registration/password_change_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password change successful{% endblock %}
6 |
7 | {% block billboard %}Password change successful{% endblock %}
8 |
9 | {% block content %}
10 |
11 | Password change successful
12 |
13 | Your password was changed.
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/registration/password_change_form.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password change{% endblock %}
6 |
7 | {% block billboard %}Password change{% endblock %}
8 |
9 | {% block content %}
10 |
11 | Please enter your old password, for security's sake, and then
12 | enter your new password twice so we can verify you typed it in correctly.
13 |
14 |
25 |
26 | {% endblock %}
27 |
--------------------------------------------------------------------------------
/templates/registration/password_reset_complete.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password reset complete{% endblock %}
6 |
7 | {% block billboard %}Password reset complete{% endblock %}
8 |
9 | {% block content-related %}
10 | Password reset.
11 | {% endblock %}
12 |
13 | {% block content %}
14 | Password reset complete
15 |
16 | Your password has been set. You may go ahead and log in now.
17 |
18 | 'Log in'
19 | {% endblock %}
20 |
--------------------------------------------------------------------------------
/templates/registration/password_reset_confirm.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password reset{% endblock %}
6 |
7 | {% block billboard %}Password reset{% endblock %}
8 |
9 | {% block content %}
10 |
11 | {% if validlink %}
12 |
13 | Enter new password
14 | Please enter your new password twice so we can verify you typed it in correctly.
15 |
16 |
25 |
26 | {% else %}
27 |
28 | Password reset unsuccessful
29 |
30 | The password reset link was invalid, possibly because it has already been used.
31 | Please request a new password reset.
32 |
33 | {% endif %}
34 |
35 | {% endblock %}
36 |
--------------------------------------------------------------------------------
/templates/registration/password_reset_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password reset successful{% endblock %}
6 |
7 | {% block billboard %}Password reset successful{% endblock %}
8 |
9 | {% block content-related %}
10 | Password reset.
11 | {% endblock %}
12 |
13 | {% block content %}
14 | Password reset successful
15 | We've e-mailed you instructions for setting your password
16 | to the e-mail address you submitted. You should be receiving it shortly.
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/templates/registration/password_reset_email.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% autoescape off %}
3 | {% blocktrans %}You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}
4 |
5 | {% trans "Please go to the following page and choose a new password:" %}
6 | {% block reset_link %}
7 | https://{{ domain }}{% url 'password_reset_confirm' uidb36=uid token=token %}
8 | {% endblock %}
9 | {% trans "Your username, in case you've forgotten:" %} {{ user.username }}
10 |
11 | {% trans "Thanks for using our site!" %}
12 |
13 | {% blocktrans %}The {{ site_name }} team{% endblocktrans %}
14 |
15 | {% endautoescape %}
16 |
--------------------------------------------------------------------------------
/templates/registration/password_reset_form.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Password reset{% endblock %}
6 |
7 | {% block billboard %}Password reset{% endblock %}
8 |
9 | {% block content-related %}
10 | Forgotten your password? Enter your e-mail address, and we'll reset your password and e-mail the new one to you.
11 | {% endblock %}
12 |
13 | {% block content %}
14 |
15 | Password reset
16 |
17 |
22 |
23 | {% endblock %}
24 |
25 |
--------------------------------------------------------------------------------
/templates/registration/registration_complete.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Registration complete{% endblock %}
6 |
7 | {% block billboard %}Registration complete{% endblock %}
8 |
9 | {% block content %}
10 | {% load humanize %}
11 | An activation link has been sent to the email address you supplied, along with instructions for activating your account.
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/templates/registration/registration_form.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}Sign up{% endblock %}
6 |
7 | {% block billboard %}Sign up{% endblock %}
8 |
9 | {% block content-related %}
10 | Fill out the form to the right (all fields are required), and your account will be created; you'll be sent an email with instructions on how to finish your registration.
11 | {% endblock %}
12 |
13 | {% block content %}
14 |
15 | {% if form.errors %}
16 | Please correct the errors below:
17 | {% endif %}
18 |
19 |
40 | {% endblock %}
41 |
--------------------------------------------------------------------------------
/templates/software/author_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 | {% block title %}Authors{% endblock %}
4 |
5 | {% block billboard %}Authors{% endblock %}
6 |
7 | {% block content %}
8 | {% paginator 5 %}
9 |
16 | {% paginator 5 %}
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/templates/software/base_software.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 | {% load paginator %}
3 |
4 | {% block sectionid %}browse{% endblock %}
5 |
6 | {% block title %}All entries{% endblock %}
7 |
8 | {% block billboard %}All entries{% endblock %}
9 |
10 | {% block content %}
11 | {% endblock %}
12 |
13 | {% block content-related %}
14 | Search
15 |
16 |
20 |
21 |
22 | Manage
23 |
30 | Sort by
31 |
39 | Filter by
40 |
50 |
51 | {% if blog_entries %}
52 |
53 |
Latest Thoughts
54 |
55 |
65 |
66 |
67 | {% endif %}
68 |
69 | {% load safe_markup %}
70 | {% load markup %}
71 | {% if latest_posts %}
72 | Recent forum posts
73 |
74 |
87 |
88 | {% else %}
89 | No forum yet.
90 | {% endif %}
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 | {% endblock %}
102 |
103 |
104 |
--------------------------------------------------------------------------------
/templates/software/dataformat_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 |
4 | {% block title %}Data Formats{% endblock %}
5 |
6 | {% block billboard %}Data Formats{% endblock %}
7 |
8 | {% block content %}
9 | {% paginator 5 %}
10 |
17 | {% paginator 5 %}
18 | {% endblock %}
19 |
--------------------------------------------------------------------------------
/templates/software/language_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 | {% block title %}Programming Languages{% endblock %}
4 |
5 | {% block billboard %}Programming Languages{% endblock %}
6 |
7 | {% block content %}
8 | {% paginator 5 %}
9 |
16 | {% paginator 5 %}
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/templates/software/license_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 | {% block title %}Software Licenses{% endblock %}
4 |
5 | {% block billboard %}Software Licenses{% endblock %}
6 |
7 | {% block content %}
8 | {% paginator 5 %}
9 |
16 | {% paginator 5 %}
17 | {% endblock %}
18 |
19 |
--------------------------------------------------------------------------------
/templates/software/opsys_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 |
4 | {% block title %}Operating Systems{% endblock %}
5 |
6 | {% block billboard %}Operating Systems{% endblock %}
7 |
8 | {% block content %}
9 | {% paginator 5 %}
10 |
17 | {% paginator 5 %}
18 | {% endblock %}
19 |
--------------------------------------------------------------------------------
/templates/software/software_contact_author.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block title %}Contact the authors of a package.{% endblock %}
4 | {% block billboard %}Contact the authors of a package.{% endblock %}
5 | {% block sectionid %}contact{% endblock %}
6 | {% block content %}
7 |
8 | {% if form.errors %}
9 | Please correct the errors below:
10 | {% endif %}
11 |
12 |
23 | {% endblock %}
24 |
--------------------------------------------------------------------------------
/templates/software/tag_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 | {% block title %}Tags{% endblock %}
4 |
5 | {% block billboard %}Tags{% endblock %}
6 |
7 | {% block content %}
8 | {% paginator 5 %}
9 |
16 | {% paginator 5 %}
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/templates/software/user_list.html:
--------------------------------------------------------------------------------
1 | {% extends "software/base_software.html" %}
2 | {% load paginator %}
3 |
4 | {% block title %}Users who have software projects{% endblock %}
5 |
6 | {% block billboard %}Users who have software projects{% endblock %}
7 |
8 | {% block content %}
9 | {% paginator 5 %}
10 |
11 | {% for curuser in object_list %}
12 |
13 | {{ curuser.username }}
14 | {% if curuser.get_full_name %}
15 | ({{ curuser.get_full_name }})
16 | {% endif %}
17 |
18 | {% endfor %}
19 |
20 | {% paginator 5 %}
21 | {% endblock %}
22 |
--------------------------------------------------------------------------------
/templates/users/user_change_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 |
3 | {% block sectionid %}login{% endblock %}
4 |
5 | {% block title %}User details updated successfully.{% endblock %}
6 |
7 | {% block billboard %}User details updated successfully.{% endblock %}
8 |
9 | {% block content %}
10 |
11 | User details change change successful
12 |
13 | Your user details were successfully updated. Click here to return to your user page.
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/users/user_list.html:
--------------------------------------------------------------------------------
1 | {% extends "base_2col.html" %}
2 | {% load paginator %}
3 |
4 | {% block sectionid %}browse{% endblock %}
5 |
6 | {% block title %}User List{% endblock %}
7 |
8 | {% block billboard %}User List{% endblock %}
9 |
10 | {% block content %}
11 | {% paginator 5 %}
12 |
13 | {% for curuser in object_list %}
14 |
15 | {{ curuser.username }}
16 | {{curuser.get_full_name}}
17 | {{ curuser.email }}
18 |
19 | {% endfor %}
20 |
21 | {% paginator 5 %}
22 | {% endblock %}
23 |
24 | {% block content-related %}
25 | Viewing List of Users.
26 | {% endblock %}
27 |
28 |
--------------------------------------------------------------------------------
/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/templatetags/__init__.py
--------------------------------------------------------------------------------
/templatetags/get_version.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from django.conf import settings
3 |
4 | register = template.Library()
5 |
6 | @register.simple_tag
7 | def get_version():
8 | return settings.VERSION
9 |
--------------------------------------------------------------------------------
/templatetags/paginator.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from urllib import quote
3 |
4 | register = template.Library()
5 | @register.inclusion_tag('paginator.html', takes_context=True)
6 |
7 | def paginator(context, adjacent_pages=2):
8 | """
9 | To be used in conjunction with the object_list generic view.
10 |
11 | Adds pagination context variables for use in displaying first, adjacent and
12 | last page links in addition to those created by the object_list generic
13 | view.
14 |
15 | """
16 |
17 | if context.has_key('is_paginated'):
18 | page_numbers = [n for n in \
19 | range(context['page'] - adjacent_pages, context['page'] + adjacent_pages + 1) \
20 | if n > 0 and n <= context['pages']]
21 | results_this_page = context['object_list'].count()
22 | range_base = ((context['page'] - 1) * context['results_per_page'])
23 | if len(page_numbers)<=1:
24 | page_numbers=[]
25 |
26 | r= {
27 | 'hits': context['hits'],
28 | 'results_per_page': context['results_per_page'],
29 | 'results_this_page': results_this_page,
30 | 'first_this_page': range_base + 1,
31 | 'last_this_page': range_base + results_this_page,
32 | 'page': context['page'],
33 | 'pages': context['pages'],
34 | 'page_numbers': page_numbers,
35 | 'next': context['next'],
36 | 'previous': context['previous'],
37 | 'has_next': context['has_next'],
38 | 'has_previous': context['has_previous'],
39 | 'show_first': 1 not in page_numbers,
40 | 'show_last': context['pages'] not in page_numbers,
41 | }
42 |
43 | if context.has_key('search_term'):
44 | r['search_term']=quote(context['search_term'],'')
45 |
46 | return r
47 |
--------------------------------------------------------------------------------
/templatetags/permute_items.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | import random
3 |
4 | register = template.Library()
5 |
6 | class Permutator(template.Node):
7 | def __init__(self, context_var):
8 | self.context_var = context_var
9 |
10 | def render(self, context):
11 | return self.context_var
12 |
13 | def permute_items(parser, token):
14 | items = token.contents[13:].split('|')
15 | random.shuffle(items)
16 | return Permutator(", ".join(items))
17 |
18 | register.tag('permute_items', permute_items)
19 |
--------------------------------------------------------------------------------
/templatetags/safe_markup.py:
--------------------------------------------------------------------------------
1 | """
2 | Implementation of a Markdown filter which supports safe mode and
3 | extensions.
4 |
5 | """
6 |
7 | from django import template
8 | from django.conf import settings
9 |
10 | register = template.Library()
11 |
12 | def safe_markdown(value, arg=''):
13 | """
14 | Runs Markdown over a given value, optionally using various
15 | extensions python-markdown supports.
16 |
17 | Syntax::
18 |
19 | {{ value|markdown:"extension1_name,extension2_name..." }}
20 |
21 | To enable safe mode, which strips raw HTML and only returns HTML
22 | generated by actual Markdown syntax, pass "safe" as the first
23 | extension in the list.
24 |
25 | If the version of Markdown in use does not support extensions,
26 | they will be silently ignored.
27 |
28 | """
29 | try:
30 | import markdown
31 | except ImportError:
32 | if settings.DEBUG:
33 | raise template.TemplateSyntaxError('Error in markdown filter: Markdown could not be imported.')
34 | else:
35 | # Try to salvage this; whatever we do, we shouldn't
36 | # return potentially unsafe HTML.
37 | from django.utils.html import escape, linebreaks
38 | return linebreaks(escape(value))
39 | else:
40 | extensions=arg.split(",")
41 | if len(extensions) > 0 and extensions[0] == "safe":
42 | extensions = extensions[1:]
43 | safe_mode = True
44 | else:
45 | safe_mode = False
46 | if len(extensions) > 0 and extensions[0].startswith("cut"):
47 | cutoff = int(extensions[0][extensions[0].rfind("=")+1:])
48 | extensions = extensions[1:]
49 | if len(value)>cutoff:
50 | p = value[:cutoff].find("\n")
51 | append=""
52 | if p == -1:
53 | append=" [...]"
54 | p = value[:cutoff-1].rfind(" ")
55 | if p >= 0:
56 | cutoff = p
57 | else:
58 | cutoff = p
59 |
60 | value = value[:cutoff] + append
61 | return markdown.markdown(value, extensions, safe_mode=safe_mode)
62 |
63 |
64 | def firstwords(value, arg=''):
65 | """
66 | Return the first paragraph of a string,
67 | or up to number of characters defined by keyword cut
68 | """
69 | extensions=arg.split(",")
70 | if len(extensions) > 0 and extensions[0].startswith("cut"):
71 | cutoff = int(extensions[0][extensions[0].rfind("=")+1:])
72 | else:
73 | cutoff = 200
74 |
75 | if len(value)>cutoff:
76 | p = value[:cutoff].find("\n")
77 | append=""
78 | if p == -1:
79 | append=" [...]"
80 | p = value[:cutoff-1].rfind(" ")
81 | if p >= 0:
82 | cutoff = p
83 | else:
84 | cutoff = p
85 | value = value[:cutoff] + append
86 | return value
87 |
88 | register.filter('firstwords',firstwords)
89 |
90 | register.filter('safe_markdown', safe_markdown)
91 |
--------------------------------------------------------------------------------
/templatetags/show_stars.py:
--------------------------------------------------------------------------------
1 | import math
2 |
3 | from django.template import Library, Node, TemplateSyntaxError, VariableDoesNotExist, resolve_variable
4 | from django.conf import settings
5 |
6 | register = Library()
7 |
8 | IMG_TEMPLATE = ' '
9 |
10 | PATH_TO_WHOLE_STAR = IMG_TEMPLATE % (settings.MEDIA_URL + 'images/stars/star.png', "Whole Star")
11 | PATH_TO_THREE_QUARTER_STAR = IMG_TEMPLATE % (settings.MEDIA_URL + 'images/stars/three-quarter.png', "3/4 Star")
12 | PATH_TO_HALF_STAR = IMG_TEMPLATE % (settings.MEDIA_URL + 'images/stars/half.png', "1/2 Star")
13 | PATH_TO_QUARTER_STAR = IMG_TEMPLATE % (settings.MEDIA_URL + 'images/stars/quarter.png', "1/4 Star")
14 | PATH_TO_BLANK_STAR = IMG_TEMPLATE % (settings.MEDIA_URL + 'images/stars/blank.png', "Empty Star")
15 |
16 | class ShowStarsNode(Node):
17 | """ Default rounding is to the whole unit """
18 | def __init__(self, context_var, total_stars, round_to):
19 | self.context_var = context_var
20 | self.total_stars = int(total_stars)
21 | self.round_to = round_to.lower()
22 |
23 | def render(self, context):
24 | try:
25 | stars = resolve_variable(self.context_var, context)
26 | except VariableDoesNotExist:
27 | return ''
28 |
29 | if self.round_to == "half":
30 | stars = round(stars*2)/2
31 | elif self.round_to == "quarter":
32 | stars = round(stars*4)/4
33 | else:
34 | stars = round(stars)
35 |
36 | fraction, integer = math.modf(stars)
37 | integer = int(integer)
38 | output = []
39 |
40 | for whole_star in range(integer):
41 | output.append(PATH_TO_WHOLE_STAR)
42 | if self.round_to == 'half' and fraction == .5:
43 | output.append(PATH_TO_HALF_STAR)
44 | elif self.round_to == 'quarter':
45 | if fraction == .25:
46 | output.append(PATH_TO_QUARTER_STAR)
47 | elif fraction == .5:
48 | output.append(PATH_TO_HALF_STAR)
49 | elif fraction == .75:
50 | output.append(PATH_TO_THREE_QUARTER_STAR)
51 |
52 | if fraction:
53 | integer += 1
54 |
55 | blanks = int(self.total_stars - integer)
56 |
57 | for blank_star in range(blanks):
58 | output.append(PATH_TO_BLANK_STAR)
59 |
60 | return "".join(output)
61 |
62 | """ show_stars context_var of 5 round to half """
63 | def do_show_stars(parser, token):
64 | args = token.contents.split()
65 | if len(args) != 7:
66 | raise TemplateSyntaxError('%s tag requires exactly six arguments' % args[0])
67 | if args[2] != 'of':
68 | raise TemplateSyntaxError("second argument to '%s' tag must be 'of'" % args[0])
69 | if args[4] != 'round':
70 | raise TemplateSyntaxError("fourth argument to '%s' tag must be 'round'" % args[0])
71 | if args[5] != 'to':
72 | raise TemplateSyntaxError("fourth argument to '%s' tag must be 'to'" % args[0])
73 | return ShowStarsNode(args[1], args[3], args[6])
74 |
75 | register.tag('show_stars', do_show_stars)
76 |
--------------------------------------------------------------------------------
/update_feeds.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | logfile="/home/mloss/tmp/update_feeds.log"
4 | cp /dev/null $logfile
5 | echo "This is a message from update_feeds.sh `date`" >> $logfile
6 | cd ~/django/mloss
7 | export PYTHONPATH=/home/mloss/django:
8 | python update_feeds.py --settings='mloss.settings' >> $logfile 2>&1
9 |
--------------------------------------------------------------------------------
/urls.py:
--------------------------------------------------------------------------------
1 | from django.views.static import serve
2 | from django.conf.urls import url, include
3 | from django.conf import settings
4 | from django.contrib.auth.models import User
5 | from django.contrib import admin
6 | from django.views.generic.list import ListView
7 | from django.views.generic import TemplateView
8 | from django.views.generic import RedirectView
9 |
10 | from forshow.views import newsindex
11 | from forshow.views import faqindex
12 |
13 | admin.autodiscover()
14 |
15 | urlpatterns = [
16 | # administration
17 | url(r'^admin/', include(admin.site.urls)),
18 |
19 | # software and revision
20 | url(r'^software/', include('software.urls')),
21 | url(r'^revision/', include('revision.urls')),
22 |
23 | # Using registration
24 | url(r'^accounts/', include('registration.backends.default.urls')),
25 | url(r'^accounts/', include('registration.backends.simple.urls')),
26 | url(r'^community/', include('community.urls')),
27 | url(r'^user/', include('user.urls')),
28 |
29 |
30 | # Display News and FAQ- simplest possible dynamic page
31 | url(r'^news/', newsindex),
32 | url(r'^faq/', faqindex),
33 |
34 | # redirect the root to news
35 | url(r'^$', RedirectView.as_view(url='/software/')),
36 |
37 | # Enable comments
38 | url(r'^comments/', include('django_comments.urls')),
39 | ]
40 |
41 | if settings.DEBUG and not settings.PRODUCTION:
42 | urlpatterns += [url(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT}),]
43 |
--------------------------------------------------------------------------------
/user/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/open-machine-learning/mloss/61d929f2066752c81c669c639025a3931af4a138/user/__init__.py
--------------------------------------------------------------------------------
/user/urls.py:
--------------------------------------------------------------------------------
1 |
2 | from django.conf.urls import url, include
3 |
4 | from user.views import ShowUserList
5 | from user.views import show_user
6 | from user.views import update_user
7 |
8 | # General softwares views.
9 | urlpatterns = [
10 | url(r'^$', ShowUserList.as_view()),
11 | url(r'^view/(?P\d+)/$', show_user),
12 | url(r'^update/(?P\d+)/$', update_user),
13 | ]
14 |
--------------------------------------------------------------------------------
/wfwfeed.py:
--------------------------------------------------------------------------------
1 | from django.contrib.sites.models import Site
2 | from django.contrib.syndication.views import Feed
3 | from django.utils.feedgenerator import rfc2822_date, SyndicationFeed
4 | from django.utils.xmlutils import SimplerXMLGenerator
5 |
6 | class WellFormedWebRss(SyndicationFeed):
7 | mime_type = 'application/rss+xml'
8 | def write(self, outfile, encoding):
9 | handler = SimplerXMLGenerator(outfile, encoding)
10 | handler.startDocument()
11 | handler.startElement(u"rss", {u"version": self._version, u"xmlns:wfw": u"http://wellformedweb.org/CommentAPI/"})
12 | handler.startElement(u"channel", {})
13 | handler.addQuickElement(u"title", self.feed['title'])
14 | handler.addQuickElement(u"link", self.feed['link'])
15 | handler.addQuickElement(u"description", self.feed['description'])
16 | if self.feed['language'] is not None:
17 | handler.addQuickElement(u"language", self.feed['language'])
18 | for cat in self.feed['categories']:
19 | handler.addQuickElement(u"category", cat)
20 | if self.feed['feed_copyright'] is not None:
21 | handler.addQuickElement(u"copyright", self.feed['feed_copyright'])
22 | handler.addQuickElement(u"lastBuildDate", rfc2822_date(self.latest_post_date()).decode('ascii'))
23 | self.write_items(handler)
24 | self.endChannelElement(handler)
25 | handler.endElement(u"rss")
26 |
27 | def endChannelElement(self, handler):
28 | handler.endElement(u"channel")
29 |
30 | _version = u"2.0"
31 | def write_items(self, handler):
32 | for item in self.items:
33 | handler.startElement(u"item", {})
34 | handler.addQuickElement(u"title", item['title'])
35 | handler.addQuickElement(u"link", item['link'])
36 | if item['description'] is not None:
37 | handler.addQuickElement(u"description", item['description'])
38 |
39 | # Author information.
40 | if item["author_name"] and item["author_email"]:
41 | handler.addQuickElement(u"author", "%s (%s)" % \
42 | (item['author_email'], item['author_name']))
43 | elif item["author_email"]:
44 | handler.addQuickElement(u"author", item["author_email"])
45 | elif item["author_name"]:
46 | handler.addQuickElement(u"dc:creator", item["author_name"], {"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
47 |
48 | if item['pubdate'] is not None:
49 | handler.addQuickElement(u"pubDate", rfc2822_date(item['pubdate']).decode('ascii'))
50 | if item['comments'] is not None:
51 | handler.addQuickElement(u"comments", item['comments'])
52 | if item.has_key('wfw_commentRss') and item['wfw_commentRss'] is not None:
53 | handler.addQuickElement(u"wfw:commentRss", item['wfw_commentRss'])
54 | if item['unique_id'] is not None:
55 | handler.addQuickElement(u"guid", item['unique_id'])
56 |
57 | # Enclosure.
58 | if item['enclosure'] is not None:
59 | handler.addQuickElement(u"enclosure", '',
60 | {u"url": item['enclosure'].url, u"length": item['enclosure'].length,
61 | u"type": item['enclosure'].mime_type})
62 |
63 | # Categories.
64 | for cat in item['categories']:
65 | handler.addQuickElement(u"category", cat)
66 |
67 | handler.endElement(u"item")
68 |
69 | def add_commentRss(self, c):
70 | self.items[-1]['wfw_commentRss']=c
71 |
--------------------------------------------------------------------------------
22 |- {{ comment.name }} (on {{ comment.submit_date|date:"F j, Y, H:i:s" }})
23 | - {{ comment.comment|markdown:"safe" }}
24 |
25 |