Commit 9cd039e7 authored by Michal Čihař's avatar Michal Čihař

Split views to submodules

- rename usage in urls
- reference URLs by name, this will make further changes less painful
parent 3c0ac1f1
......@@ -4,8 +4,8 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check' name=check.check_id %}">{{ check.name }}</a></li>
<li><a href="{% url 'checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'show_check' name=check.check_id %}">{{ check.name }}</a></li>
{% endblock %}
{% block content %}
......@@ -29,8 +29,8 @@
<tbody>
{% for obj in checks %}
<tr>
<th><a href="{% url 'weblate.trans.views.show_project' project=obj.project__slug %}">{% project_name obj.project__slug %}</a></th>
<td><a href="{% url 'weblate.trans.views.show_check_project' name=check.check_id project=obj.project__slug %}">{{ obj.count }}</a></td>
<th><a href="{% url 'project' project=obj.project__slug %}">{% project_name obj.project__slug %}</a></th>
<td><a href="{% url 'show_check_project' name=check.check_id project=obj.project__slug %}">{{ obj.count }}</a></td>
</tr>
{% endfor %}
</tbody>
......
......@@ -4,9 +4,9 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check' name=check.check_id %}">{{ check.name }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check_project' name=check.check_id project=project.slug %}">{{ project }}</a></li>
<li><a href="{% url 'checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'show_check' name=check.check_id %}">{{ check.name }}</a></li>
<li><a href="{% url 'show_check_project' name=check.check_id project=project.slug %}">{{ project }}</a></li>
{% endblock %}
{% block content %}
......@@ -29,8 +29,8 @@
<tbody>
{% for obj in checks %}
<tr>
<th><a href="{% url 'weblate.trans.views.show_subproject' project=obj.translation__subproject__project__slug subproject=obj.translation__subproject__slug %}">{% subproject_name obj.translation__subproject__project__slug obj.translation__subproject__slug %}</a></th>
<td><a href="{% url 'weblate.trans.views.show_check_subproject' name=check.check_id project=obj.translation__subproject__project__slug subproject=obj.translation__subproject__slug %}">{{ obj.count }}</a></td>
<th><a href="{% url 'subproject' project=obj.translation__subproject__project__slug subproject=obj.translation__subproject__slug %}">{% subproject_name obj.translation__subproject__project__slug obj.translation__subproject__slug %}</a></th>
<td><a href="{% url 'show_check_subproject' name=check.check_id project=obj.translation__subproject__project__slug subproject=obj.translation__subproject__slug %}">{{ obj.count }}</a></td>
</tr>
{% endfor %}
</tbody>
......
......@@ -4,10 +4,10 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check' name=check.check_id %}">{{ check.name }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check_project' name=check.check_id project=subproject.project.slug %}">{{ subproject.project }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_check_subproject' name=check.check_id project=subproject.project.slug subproject=subproject.slug %}">{{ subproject.name }}</a></li>
<li><a href="{% url 'checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'show_check' name=check.check_id %}">{{ check.name }}</a></li>
<li><a href="{% url 'show_check_project' name=check.check_id project=subproject.project.slug %}">{{ subproject.project }}</a></li>
<li><a href="{% url 'show_check_subproject' name=check.check_id project=subproject.project.slug subproject=subproject.slug %}">{{ subproject.name }}</a></li>
{% endblock %}
{% block content %}
......@@ -30,14 +30,14 @@
<tbody>
{% for obj in checks %}
<tr>
<th><a href="{% url 'weblate.trans.views.show_translation' project=subproject.project.slug subproject=subproject.slug lang=obj.translation__language__code %}">{% language_name obj.translation__language__code %}</a></th>
<td><a href="{% url 'weblate.trans.views.translate' project=subproject.project.slug subproject=subproject.slug lang=obj.translation__language__code %}?type={{ check.check_id }}">{{ obj.count }}</a></td>
<th><a href="{% url 'translation' project=subproject.project.slug subproject=subproject.slug lang=obj.translation__language__code %}">{% language_name obj.translation__language__code %}</a></th>
<td><a href="{% url 'translate' project=subproject.project.slug subproject=subproject.slug lang=obj.translation__language__code %}?type={{ check.check_id }}">{{ obj.count }}</a></td>
</tr>
{% endfor %}
{% for count in source_checks %}
<tr>
<th><a href="{% url 'weblate.trans.views.show_source' project=subproject.project.slug subproject=subproject.slug %}">{% trans "Source" %}</a></th>
<td><a href="{% url 'weblate.trans.views.review_source' project=subproject.project.slug subproject=subproject.slug %}?type={{ check.check_id }}">{{ count }}</a></td>
<th><a href="{% url 'show_source' project=subproject.project.slug subproject=subproject.slug %}">{% trans "Source" %}</a></th>
<td><a href="{% url 'review_source' project=subproject.project.slug subproject=subproject.slug %}?type={{ check.check_id }}">{{ count }}</a></td>
</tr>
{% endfor %}
</tbody>
......
......@@ -4,7 +4,7 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_checks' %}">{% trans "checks" %}</a></li>
<li><a href="{% url 'checks' %}">{% trans "checks" %}</a></li>
{% endblock %}
{% block content %}
......@@ -19,7 +19,7 @@
{% for check in checks %}
<tr>
<th><abbr title="{% check_description check.check %}">{% check_name check.check %}</abbr></th>
<td><a href="{% url 'weblate.trans.views.show_check' name=check.check %}">{{ check.count }}</a></td>
<td><a href="{% url 'show_check' name=check.check %}">{{ check.count }}</a></td>
</tr>
{% endfor %}
</tbody>
......
......@@ -3,7 +3,7 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.data_root' %}">{% trans "data" %}</a></li>
<li><a href="{% url 'data_root' %}">{% trans "data" %}</a></li>
{% endblock %}
{% block content %}
......@@ -43,7 +43,7 @@
<ul>
{% for project in projects %}
<li><a href="{% url 'weblate.trans.views.data_project' project=project.slug %}">{{ project.name }}</a></li>
<li><a href="{% url 'data_project' project=project.slug %}">{{ project.name }}</a></li>
{% endfor %}
</ul>
......
......@@ -4,7 +4,7 @@
{% block breadcrumbs %}
<li><a href="{{ object.get_absolute_url }}">{{ object }}</a></li>
<li><a href="{% url 'weblate.trans.views.data_project' project=object.slug %}">{% trans "data" %}</a></li>
<li><a href="{% url 'blate.trans.views.data_project' project=object.slug %}">{% trans "data" %}</a></li>
{% endblock %}
{% block content %}
......
......@@ -5,7 +5,7 @@
{% block breadcrumbs %}
<li><a href="{{ project.get_absolute_url }}">{{ project }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_dictionaries' project=project.slug %}">{% trans "glossaries" %}</a></li>
<li><a href="{% url 'show_dictionaries' project=project.slug %}">{% trans "glossaries" %}</a></li>
{% endblock %}
{% block content %}
......@@ -18,7 +18,7 @@
<tbody>
{% for dict in dicts %}
<tr>
<th><a href="{% url 'weblate.trans.views.show_dictionary' project=project.slug lang=dict.code %}">{{ dict }}</a></th>
<th><a href="{% url 'show_dictionary' project=project.slug lang=dict.code %}">{{ dict }}</a></th>
<td class="number">{% dictionary_count dict project %}</td>
</tr>
{% endfor %}
......
......@@ -4,8 +4,8 @@
{% block breadcrumbs %}
<li><a href="{{ project.get_absolute_url }}">{{ project }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_dictionaries' project=project.slug %}">{% trans "glossaries" %}</a></li>
<li><a href="{% url 'weblate.trans.views.show_dictionary' project=project.slug lang=language.code %}">{{ language }}</a></li>
<li><a href="{% url 'show_dictionaries' project=project.slug %}">{% trans "glossaries" %}</a></li>
<li><a href="{% url 'show_dictionary' project=project.slug lang=language.code %}">{{ language }}</a></li>
{% endblock %}
{% block content %}
......@@ -42,7 +42,7 @@
<td class="translatetext">{{ word.target }}</td>
<td>
{% if perms.trans.change_dictionary %}
<form action="{% url 'weblate.trans.views.edit_dictionary' project=project.slug lang=language.code %}" method="get">
<form action="{% url 'edit_dictionary' project=project.slug lang=language.code %}" method="get">
{% csrf_token %}
<input type="hidden" name="id" value="{{ word.id }}" />
<input type="submit" class="button" value="{% trans "Edit" %}" />
......@@ -51,7 +51,7 @@
</td>
<td>
{% if perms.trans.delete_dictionary %}
<form action="{% url 'weblate.trans.views.delete_dictionary' project=project.slug lang=language.code %}" method="post">
<form action="{% url 'delete_dictionary' project=project.slug lang=language.code %}" method="post">
{% csrf_token %}
<input type="hidden" name="id" value="{{ word.id }}" />
<input type="submit" class="button" value="{% trans "Delete" %}" />
......@@ -98,7 +98,7 @@
<p>{% trans "You can upload any format which is understood by Translate Toolkit (including TBX, CSV or Gettext PO files)." %}</p>
<form action="{% url 'weblate.trans.views.upload_dictionary' project=project.slug lang=language.code %}" method="post" enctype="multipart/form-data">
<form action="{% url 'upload_dictionary' project=project.slug lang=language.code %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ uploadform.as_table }}
......@@ -114,9 +114,9 @@
<p>{% trans "You can download glossary in following formats:" %}</p>
<ul>
<li><a href="{% url 'weblate.trans.views.download_dictionary' project=project.slug lang=language.code %}?format=csv">{% trans "Comma separated values (CSV)" %}</a></li>
<li><a href="{% url 'weblate.trans.views.download_dictionary' project=project.slug lang=language.code %}?format=po">{% trans "Gettext (PO)" %}</a></li>
<li><a href="{% url 'weblate.trans.views.download_dictionary' project=project.slug lang=language.code %}?format=tbx">{% trans "TermBase eXchange (TBX)" %}</a></li>
<li><a href="{% url 'download_dictionary' project=project.slug lang=language.code %}?format=csv">{% trans "Comma separated values (CSV)" %}</a></li>
<li><a href="{% url 'download_dictionary' project=project.slug lang=language.code %}?format=po">{% trans "Gettext (PO)" %}</a></li>
<li><a href="{% url 'download_dictionary' project=project.slug lang=language.code %}?format=tbx">{% trans "TermBase eXchange (TBX)" %}</a></li>
</ul>
{% endblock %}
......@@ -4,8 +4,8 @@
{% block breadcrumbs %}
<li><a href="{{ project.get_absolute_url }}">{{ project }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_dictionaries' project=project.slug %}">{% trans "dictionaries" %}</a></li>
<li><a href="{% url 'weblate.trans.views.show_dictionary' project=project.slug lang=language.code %}">{{ language }}</a></li>
<li><a href="{% url 'show_dictionaries' project=project.slug %}">{% trans "dictionaries" %}</a></li>
<li><a href="{% url 'show_dictionary' project=project.slug lang=language.code %}">{{ language }}</a></li>
{% endblock %}
{% block content %}
......
......@@ -4,8 +4,8 @@
<footer>
<ul id="footer">
<li>{% blocktrans %}Powered by <a href="{{ weblate_url }}">Weblate {{ version }}</a>{% endblocktrans %}</li>
<li><a href="{% url 'weblate.trans.views.about' %}">{% blocktrans %}About Weblate{% endblocktrans %}</a></li>
<li><a href="{% url 'weblate.accounts.views.contact' %}">{% trans "Contact us" %}</a></li>
<li><a href="{% url 'about' %}">{% blocktrans %}About Weblate{% endblocktrans %}</a></li>
<li><a href="{% url 'contact' %}">{% trans "Contact us" %}</a></li>
<li><a href="{% documentation 'usage' %}">{% trans "Documentation" %}</a></li>
</ul>
</footer>
......@@ -113,7 +113,7 @@
<ul>
<li><a href="{% url 'languages' %}">{% trans "Languages summary" %}</a></li>
<li><a href="{% url 'checks' %}">{% trans "Checks overview" %}</a></li>
<li><a href="{% url 'weblate.trans.views.data_root' %}">{% trans "Data export" %}</a></li>
<li><a href="{% url 'data_root' %}">{% trans "Data export" %}</a></li>
<li><a href="{% url 'weblate.trans.widgets.widgets_root' %}">{% trans "Widgets" %}</a></li>
</ul>
</div>
......
......@@ -3,7 +3,7 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_languages' %}">{% trans "languages" %}</a></li>
<li><a href="{% url 'languages' %}">{% trans "languages" %}</a></li>
<li><a href="{{ object.get_absolute_url }}">{{ object }}</a></li>
{% endblock %}
......@@ -32,7 +32,7 @@
<div id="dicts">
<ul>
{% for dict in dicts %}
<li><a href="{% url 'weblate.trans.views.show_dictionary' lang=object.code project=dict.slug %}">{{ dict }}</a></li>
<li><a href="{% url 'show_dictionary' lang=object.code project=dict.slug %}">{{ dict }}</a></li>
{% endfor %}
</ul>
</div>
......
......@@ -3,7 +3,7 @@
{% load url from future %}
{% block breadcrumbs %}
<li><a href="{% url 'weblate.trans.views.show_languages' %}">{% trans "languages" %}</a></li>
<li><a href="{% url 'languages' %}">{% trans "languages" %}</a></li>
{% endblock %}
{% block content %}
......
......@@ -12,7 +12,7 @@
<script src="{% get_media_prefix %}js/jquery.ui.multiprogressbar.js" type="text/javascript"></script>
<script src="{% get_media_prefix %}js/loader.js" type="text/javascript"></script>
<script src="{% url 'django.views.i18n.javascript_catalog' %}" type="text/javascript"></script>
<script src="{% url 'weblate.trans.views.js_config' %}" type="text/javascript"></script>
<script src="{% url 'js_config' %}" type="text/javascript"></script>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
......
......@@ -40,7 +40,7 @@
<li><a href="#changes">{% trans "Recent changes" %}</a></li>
<li><a href="#dicts">{% trans "Glossaries" %}</a></li>
{% if perms.trans.commit_translation or perms.trans.update_translation %}
<li><a href="{% url 'weblate.trans.views.git_status_project' project=object.slug %}">{% trans "Git maintenance" %}</a></li>
<li><a href="{% url 'git_status_project' project=object.slug %}">{% trans "Git maintenance" %}</a></li>
{% endif %}
<li><a href="#share">{% trans "Share" %}</a></li>
<li><a href="{% url 'view_activity_project' project=object.slug %}">{% trans "Activity" %}</a></li>
......@@ -49,9 +49,9 @@
<div id="dicts">
<ul>
{% for dict in dicts %}
<li><a href="{% url 'weblate.trans.views.show_dictionary' project=object.slug lang=dict.code %}">{{ dict }}</a></li>
<li><a href="{% url 'show_dictionary' project=object.slug lang=dict.code %}">{{ dict }}</a></li>
{% endfor %}
<li><a href="{% url 'weblate.trans.views.show_dictionaries' project=object.slug %}">{% trans "Manage all glossaries" %}</a></li>
<li><a href="{% url 'show_dictionaries' project=object.slug %}">{% trans "Manage all glossaries" %}</a></li>
</ul>
</div>
......@@ -60,8 +60,8 @@
</div>
<div id="share">
{% url 'weblate.trans.widgets.widgets' project=object.slug as widgets_url %}
{% url 'weblate.trans.views.data_project' project=object.slug as data_url %}
{% url 'widgets' project=object.slug as widgets_url %}
{% url 'data_project' project=object.slug as data_url %}
{% include 'share.html' %}
</div>
......
......@@ -6,8 +6,8 @@
{% block breadcrumbs %}
<li><a href="{{ object.project.get_absolute_url }}">{{ object.project }}</a></li>
<li><a href="{{ object.get_absolute_url }}">{{ object.name }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_source' project=object.project.slug subproject=object.slug %}">{% trans "source" %}</a></li>
<li><a href="{% url 'weblate.trans.views.review_source' project=object.project.slug subproject=object.slug %}">{% trans "review" %}</a></li>
<li><a href="{% url 'show_source' project=object.project.slug subproject=object.slug %}">{% trans "source" %}</a></li>
<li><a href="{% url 'review_source' project=object.project.slug subproject=object.slug %}">{% trans "review" %}</a></li>
{% endblock %}
{% block content %}
......
......@@ -5,7 +5,7 @@
{% block breadcrumbs %}
<li><a href="{{ object.project.get_absolute_url }}">{{ object.project }}</a></li>
<li><a href="{{ object.get_absolute_url }}">{{ object.name }}</a></li>
<li><a href="{% url 'weblate.trans.views.show_source' project=object.project.slug subproject=object.slug %}">{% trans "source" %}</a></li>
<li><a href="{% url 'show_source' project=object.project.slug subproject=object.slug %}">{% trans "source" %}</a></li>
{% endblock %}
{% block content %}
......
......@@ -30,7 +30,7 @@
<li><a href="#changes">{% trans "Recent changes" %}</a></li>
<li><a href="#new-lang">{% trans "New language" %}</a></li>
{% if perms.trans.commit_translation or perms.trans.update_translation %}
<li><a href="{% url 'weblate.trans.views.git_status_subproject' project=object.project.slug subproject=object.slug %}">{% trans "Git maintenance" %}</a></li>
<li><a href="{% url 'git_status_subproject' project=object.project.slug subproject=object.slug %}">{% trans "Git maintenance" %}</a></li>
{% endif %}
<li><a href="#share">{% trans "Share" %}</a></li>
<li><a href="#source">{% trans "Source" %}</a></li>
......@@ -50,13 +50,13 @@
</div>
<div id="share">
{% url 'weblate.trans.widgets.widgets' project=object.project.slug as widgets_url %}
{% url 'weblate.trans.views.data_project' project=object.project.slug as data_url %}
{% url 'widgets' project=object.project.slug as widgets_url %}
{% url 'data_project' project=object.project.slug as data_url %}
{% include 'share.html' %}
</div>
<div id="source">
<a href="{% url 'weblate.trans.views.show_source' project=object.project.slug subproject=object.slug %}">{% trans "Source strings review" %}</a>
<a href="{% url 'show_source' project=object.project.slug subproject=object.slug %}">{% trans "Source strings review" %}</a>
</div>
</div>
......
......@@ -206,7 +206,7 @@
<th>{% trans "New comment" %}</th>
<td>
{% if perms.trans.add_comment %}
<form method="post" action="{% url 'weblate.trans.views.comment' pk=unit.id %}">
<form method="post" action="{% url 'comment' pk=unit.id %}">
{% csrf_token %}
{{ comment_form.comment }}
<br />
......@@ -238,7 +238,7 @@
<th>{% trans "New comment" %}</th>
<td>
{% if perms.trans.add_comment %}
<form method="post" action="{% url 'weblate.trans.views.comment' pk=unit.id %}">
<form method="post" action="{% url 'comment' pk=unit.id %}">
{% csrf_token %}
<input type="hidden" name="type" value="source" />
{{ comment_form.comment }}
......
......@@ -39,7 +39,7 @@
<li><a href="#auto">{% trans "Automatic translation" %}</a></li>
{% endif %}
{% if perms.trans.commit_translation or perms.trans.update_translation %}
<li><a href="{% url 'weblate.trans.views.git_status_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Git maintenance" %}</a></li>
<li><a href="{% url 'git_status_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Git maintenance" %}</a></li>
{% endif %}
<li><a href="#locking">{% trans "Locking" %}</a></li>
<li><a href="#share">{% trans "Share" %}</a></li>
......@@ -68,7 +68,7 @@
<p>{% trans "Uploaded file will be merged with current translation." %}</p>
{% endif %}
<form action="{% url 'weblate.trans.views.upload_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}" method="post" enctype="multipart/form-data">
<form action="{% url 'upload_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ form.as_table }}
......@@ -99,7 +99,7 @@
{% if autoform %}
<div id="auto">
<p>{% trans "Automatic translation takes existing translations in this project and applies it to the current subproject. It can be used to push translations to a different branch, to fix inconsistent translations or to translate new subproject using translation memory." %}</p>
<form action="{% url 'weblate.trans.views.auto_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}" method="post" enctype="multipart/form-data">
<form action="{% url 'auto_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ autoform.as_table }}
......@@ -119,16 +119,16 @@
{% endif %}
{% if perms.trans.lock_translation %}
{% if object.lock_user == request.user %}
<a class="button" href="{% url 'weblate.trans.views.unlock_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Unlock" %}</a>
<a class="button" href="{% url 'unlock_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Unlock" %}</a>
{% elif not object.is_user_locked %}
<a class="button" href="{% url 'weblate.trans.views.lock_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Lock" %}</a>
<a class="button" href="{% url 'lock_translation' project=object.subproject.project.slug subproject=object.subproject.slug lang=object.language.code %}">{% trans "Lock" %}</a>
{% endif %}
{% endif %}
</div>
<div id="share">
{% url 'weblate.trans.widgets.widgets' project=object.subproject.project.slug as widgets_url %}
{% url 'weblate.trans.views.data_project' project=object.subproject.project.slug as data_url %}
{% url 'widgets' project=object.subproject.project.slug as widgets_url %}
{% url 'data_project' project=object.subproject.project.slug as data_url %}
{% include 'share.html' %}
</div>
......
......@@ -363,7 +363,7 @@ class Language(models.Model):
@models.permalink
def get_absolute_url(self):
return ('weblate.trans.views.show_language', (), {
return ('show_language', (), {
'lang': self.code
})
......
......@@ -207,7 +207,7 @@ class Project(models.Model):
@models.permalink
def get_absolute_url(self):
return ('weblate.trans.views.show_project', (), {
return ('project', (), {
'project': self.slug
})
......@@ -223,25 +223,25 @@ class Project(models.Model):
@models.permalink
def get_commit_url(self):
return ('weblate.trans.views.commit_project', (), {
return ('commit_project', (), {
'project': self.slug
})
@models.permalink
def get_update_url(self):
return ('weblate.trans.views.update_project', (), {
return ('update_project', (), {
'project': self.slug
})
@models.permalink
def get_push_url(self):
return ('weblate.trans.views.push_project', (), {
return ('push_project', (), {
'project': self.slug
})
@models.permalink
def get_reset_url(self):
return ('weblate.trans.views.reset_project', (), {
return ('reset_project', (), {
'project': self.slug
})
......@@ -255,13 +255,13 @@ class Project(models.Model):
@models.permalink
def get_lock_url(self):
return ('weblate.trans.views.lock_project', (), {
return ('lock_project', (), {
'project': self.slug
})
@models.permalink
def get_unlock_url(self):
return ('weblate.trans.views.unlock_project', (), {
return ('unlock_project', (), {
'project': self.slug
})
......@@ -530,7 +530,7 @@ class SubProject(models.Model):
@models.permalink
def get_absolute_url(self):
return ('weblate.trans.views.show_subproject', (), {
return ('subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
......@@ -547,28 +547,28 @@ class SubProject(models.Model):
@models.permalink
def get_commit_url(self):
return ('weblate.trans.views.commit_subproject', (), {
return ('commit_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
@models.permalink
def get_update_url(self):
return ('weblate.trans.views.update_subproject', (), {
return ('update_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
@models.permalink
def get_push_url(self):
return ('weblate.trans.views.push_subproject', (), {
return ('push_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
@models.permalink
def get_reset_url(self):
return ('weblate.trans.views.reset_subproject', (), {
return ('reset_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
......@@ -581,14 +581,14 @@ class SubProject(models.Model):
@models.permalink
def get_lock_url(self):
return ('weblate.trans.views.lock_subproject', (), {
return ('lock_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
@models.permalink
def get_unlock_url(self):
return ('weblate.trans.views.unlock_subproject', (), {
return ('unlock_subproject', (), {
'project': self.project.slug,
'subproject': self.slug
})
......@@ -1476,7 +1476,7 @@ class Translation(models.Model):
@models.permalink
def get_absolute_url(self):
return ('weblate.trans.views.show_translation', (), {
return ('translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1500,7 +1500,7 @@ class Translation(models.Model):
@models.permalink
def get_commit_url(self):
return ('weblate.trans.views.commit_translation', (), {
return ('commit_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1508,7 +1508,7 @@ class Translation(models.Model):
@models.permalink
def get_update_url(self):
return ('weblate.trans.views.update_translation', (), {
return ('update_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1516,7 +1516,7 @@ class Translation(models.Model):
@models.permalink
def get_push_url(self):
return ('weblate.trans.views.push_translation', (), {
return ('push_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1524,7 +1524,7 @@ class Translation(models.Model):
@models.permalink
def get_reset_url(self):
return ('weblate.trans.views.reset_translation', (), {
return ('reset_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1535,7 +1535,7 @@ class Translation(models.Model):
@models.permalink
def get_lock_url(self):
return ('weblate.trans.views.lock_translation', (), {
return ('lock_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1543,7 +1543,7 @@ class Translation(models.Model):
@models.permalink
def get_unlock_url(self):
return ('weblate.trans.views.unlock_translation', (), {
return ('unlock_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1551,7 +1551,7 @@ class Translation(models.Model):
@models.permalink
def get_download_url(self):
return ('weblate.trans.views.download_translation', (), {
return ('download_translation', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1559,7 +1559,7 @@ class Translation(models.Model):
@models.permalink
def get_translate_url(self):
return ('weblate.trans.views.translate', (), {
return ('translate', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
'lang': self.language.code
......@@ -1567,7 +1567,7 @@ class Translation(models.Model):
@models.permalink
def get_source_review_url(self):
return ('weblate.trans.views.review_source', (), {
return ('review_source', (), {
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
})
......
......@@ -63,7 +63,7 @@ class ExportsViewTest(ViewTestCase):
def test_export_stats(self):
response = self.client.get(
reverse('export-stats', kwargs={
reverse('export_stats', kwargs={
'project': self.subproject.project.slug,
'subproject': self.subproject.slug,
})
......
This diff is collapsed.
This diff is collapsed.
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from django.shortcuts import render_to_response, get_object_or_404
from django.utils.translation import ugettext as _
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.contrib import messages
from django.contrib.auth.decorators import (
login_required, permission_required
)
from weblate.trans.models import (
Project, SubProject, Translation, Unit, Suggestion, Check,
)
@login_required
@permission_required('trans.commit_translation')
def commit_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
obj.commit_pending()
messages.info(request, _('All pending translations were committed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.commit_translation')
def commit_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
obj.commit_pending()
messages.info(request, _('All pending translations were committed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.commit_translation')
def commit_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
obj.commit_pending()
messages.info(request, _('All pending translations were committed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.update_translation')
def update_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
if obj.do_update(request):
messages.info(request, _('All repositories were updated.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.update_translation')
def update_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
if obj.do_update(request):
messages.info(request, _('All repositories were updated.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.update_translation')
def update_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if obj.do_update(request):
messages.info(request, _('All repositories were updated.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.push_translation')
def push_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
if obj.do_push(request):
messages.info(request, _('All repositories were pushed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.push_translation')
def push_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
if obj.do_push(request):
messages.info(request, _('All repositories were pushed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.push_translation')
def push_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if obj.do_push(request):
messages.info(request, _('All repositories were pushed.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.reset_translation')
def reset_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
if obj.do_reset(request):
messages.info(request, _('All repositories have been reset.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.reset_translation')
def reset_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
if obj.do_reset(request):
messages.info(request, _('All repositories have been reset.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.reset_translation')
def reset_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if obj.do_reset(request):
messages.info(request, _('All repositories have been reset.'))
return HttpResponseRedirect(obj.get_absolute_url())
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from django.shortcuts import render_to_response, get_object_or_404
from django.views.decorators.cache import cache_page
from weblate.trans import appsettings
from django.utils.translation import ugettext as _
import django.utils.translation
from django.template import RequestContext, loader
from django.http import (
HttpResponse, HttpResponseRedirect, HttpResponseNotFound, Http404
)
from django.contrib import messages
from django.contrib.auth.decorators import (
login_required, permission_required, user_passes_test
)
from django.db.models import Q
from django.core.urlresolvers import reverse
from django.contrib.sites.models import Site
from django.utils.safestring import mark_safe
from weblate.trans.models import (
Project, SubProject, Translation, Unit, Suggestion, Check,
Dictionary, Change, Comment, get_versions
)
from weblate.lang.models import Language
import weblate
from whoosh.analysis import StandardAnalyzer, StemmingAnalyzer
import datetime
import logging
import os.path
import json
import csv
from xml.etree import ElementTree
import urllib2
def get_string(request, checksum):
'''
AJAX handler for getting raw string.
'''
units = Unit.objects.filter(checksum=checksum)
if units.count() == 0:
return HttpResponse('')
units[0].check_acl(request)
return HttpResponse(units[0].get_source_plurals()[0])
def get_similar(request, unit_id):
'''
AJAX handler for getting similar strings.
'''
unit = get_object_or_404(Unit, pk=int(unit_id))
unit.check_acl(request)
similar_units = Unit.objects.similar(unit)
# distinct('target') works with Django 1.4 so let's emulate that
# based on presumption we won't get too many results
targets = {}
res = []
for similar in similar_units:
if similar.target in targets:
continue
targets[similar.target] = 1
res.append(similar)
similar = res
return render_to_response('js/similar.html', RequestContext(request, {
'similar': similar,
}))
def get_other(request, unit_id):
'''
AJAX handler for same strings in other subprojects.
'''
unit = get_object_or_404(Unit, pk=int(unit_id))
unit.check_acl(request)
other = Unit.objects.same(unit)
rqtype, direction, pos, search_query, search_type, search_source, search_target, search_context, search_url = parse_search_url(request)
return render_to_response('js/other.html', RequestContext(request, {
'other': other,
'unit': unit,
'type': rqtype,
'search_url': search_url,
}))
def get_dictionary(request, unit_id):
'''
Lists words from dictionary for current translation.
'''
unit = get_object_or_404(Unit, pk=int(unit_id))
unit.check_acl(request)
words = set()
# Prepare analyzers
# - standard analyzer simply splits words
# - stemming extracts stems, to catch things like plurals
analyzers = (StandardAnalyzer(), StemmingAnalyzer())
# Extract words from all plurals and from context
for text in unit.get_source_plurals() + [unit.context]:
for analyzer in analyzers:
words = words.union([token.text for token in analyzer(text)])
# Grab all words in the dictionary
dictionary = Dictionary.objects.filter(
project = unit.translation.subproject.project,
language = unit.translation.language
)
if len(words) == 0:
# No extracted words, no dictionary
dictionary = dictionary.none()
else:
# Build the query (can not use __in as we want case insensitive lookup)
query = Q()
for word in words:
query |= Q(source__iexact=word)
# Filter dictionary
dictionary = dictionary.filter(query)
return render_to_response('js/dictionary.html', RequestContext(request, {
'dictionary': dictionary,
}))
@login_required
@permission_required('trans.ignore_check')
def ignore_check(request, check_id):
obj = get_object_or_404(Check, pk=int(check_id))
obj.project.check_acl(request)
# Mark check for ignoring
obj.ignore = True
obj.save()
# Invalidate caches
for unit in Unit.objects.filter(checksum=obj.checksum):
unit.translation.invalidate_cache()
# response for AJAX
return HttpResponse('ok')
@user_passes_test(lambda u: u.has_perm('trans.commit_translation') or u.has_perm('trans.update_translation'))
def git_status_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
return render_to_response('js/git-status.html', RequestContext(request, {
'object': obj,
}))
@user_passes_test(lambda u: u.has_perm('trans.commit_translation') or u.has_perm('trans.update_translation'))
def git_status_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
return render_to_response('js/git-status.html', RequestContext(request, {
'object': obj,
}))
@user_passes_test(lambda u: u.has_perm('trans.commit_translation') or u.has_perm('trans.update_translation'))
def git_status_translation(request, project, subproject, lang):
obj = get_object_or_404(Translation, language__code=lang, subproject__slug=subproject, subproject__project__slug=project, enabled=True)
obj.check_acl(request)
return render_to_response('js/git-status.html', RequestContext(request, {
'object': obj,
}))
# Cache this page for one month, it should not really change much
@cache_page(30 * 24 * 3600)
def js_config(request):
'''
Generates settings for javascript. Includes things like
API keys for translaiton services or list of languages they
support.
'''
# Apertium support
if appsettings.MT_APERTIUM_KEY is not None and appsettings.MT_APERTIUM_KEY != '':
try:
listpairs = urllib2.urlopen('http://api.apertium.org/json/listPairs?key=%s' % appsettings.MT_APERTIUM_KEY)
pairs = listpairs.read()
parsed = json.loads(pairs)
apertium_langs = [p['targetLanguage'] for p in parsed['responseData'] if p['sourceLanguage'] == 'en']
except Exception as e:
logger.error('failed to get supported languages from Apertium, using defaults (%s)', str(e))
apertium_langs = ['gl', 'ca', 'es', 'eo']
else:
apertium_langs = None
# Microsoft translator support
if appsettings.MT_MICROSOFT_KEY is not None and appsettings.MT_MICROSOFT_KEY != '':
try:
listpairs = urllib2.urlopen('http://api.microsofttranslator.com/V2/Http.svc/GetLanguagesForTranslate?appID=%s' % appsettings.MT_MICROSOFT_KEY)
data = listpairs.read()
parsed = ElementTree.fromstring(data)
microsoft_langs = [p.text for p in parsed.getchildren()]
except Exception as e:
logger.error('failed to get supported languages from Microsoft, using defaults (%s)', str(e))
microsoft_langs = [
'ar', 'bg', 'ca', 'zh-CHS', 'zh-CHT', 'cs', 'da', 'nl', 'en',
'et', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu',
'id', 'it', 'ja', 'ko', 'lv', 'lt', 'no', 'fa', 'pl', 'pt',
'ro', 'ru', 'sk', 'sl', 'es', 'sv', 'th', 'tr', 'uk', 'vi'
]
else:
microsoft_langs = None
return render_to_response('js/config.js', RequestContext(request, {
'apertium_langs': apertium_langs,
'microsoft_langs': microsoft_langs,
}),
mimetype = 'application/javascript')
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from django.shortcuts import render_to_response, get_object_or_404
from django.utils.translation import ugettext as _
from django.template import RequestContext
from django.http import (
HttpResponse, HttpResponseRedirect
)
from django.contrib import messages
from django.contrib.auth.decorators import (
login_required, permission_required
)
from weblate.trans.models import (
Project, SubProject, Translation, Unit, Suggestion, Check,
Dictionary, Change, Comment, get_versions
)
@login_required
@permission_required('trans.lock_translation')
def lock_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if not obj.is_user_locked(request):
obj.create_lock(request.user, True)
messages.info(request, _('Translation is now locked for you.'))
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
def update_lock(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if not obj.is_user_locked(request):
obj.update_lock_time()
return HttpResponse('ok')
@login_required
@permission_required('trans.lock_translation')
def unlock_translation(request, project, subproject, lang):
obj = get_object_or_404(
Translation,
language__code=lang,
subproject__slug=subproject,
subproject__project__slug=project,
enabled=True
)
obj.check_acl(request)
if not obj.is_user_locked(request):
obj.create_lock(None)
messages.info(
request,
_('Translation is now open for translation updates.')
)
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.lock_subproject')
def lock_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
obj.commit_pending()
obj.locked = True
obj.save()
messages.info(
request,
_('Subproject is now locked for translation updates!')
)
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.lock_subproject')
def unlock_subproject(request, project, subproject):
obj = get_object_or_404(SubProject, slug=subproject, project__slug=project)
obj.check_acl(request)
obj.locked = False
obj.save()
messages.info(
request,
_('Subproject is now open for translation updates.')
)
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.lock_subproject')
def lock_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
obj.commit_pending()
for subproject in obj.subproject_set.all():
subproject.locked = True
subproject.save()
messages.info(
request,
_('All subprojects are now locked for translation updates!')
)
return HttpResponseRedirect(obj.get_absolute_url())
@login_required
@permission_required('trans.lock_subproject')
def unlock_project(request, project):
obj = get_object_or_404(Project, slug=project)
obj.check_acl(request)
for subproject in obj.subproject_set.all():
subproject.locked = False
subproject.save()
messages.info(request, _('Project is now open for translation updates.'))
return HttpResponseRedirect(obj.get_absolute_url())
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment