Skip to content
Snippets Groups Projects
Commit d7610bde authored by Sébastien Helleu's avatar Sébastien Helleu
Browse files

Rename "plugins" to "scripts"

parent cbcb95af
No related branches found
No related tags found
No related merge requests found
Showing
with 3300 additions and 3300 deletions
.pluginaction {
.scriptaction {
margin-top: 30px;
font-size: 1em;
}
 
.pluginaction table td {
.scriptaction table td {
padding-right: 30px;
font-size: 1em;
}
 
.pluginsearch {
.scriptsearch {
border: 1px solid #e0e0e0;
border-radius: 4px;
margin-top: 15px;
background: #fafafa;
}
 
.pluginsearch .search {
.scriptsearch .search {
padding: 6px;
}
 
.pluginsearch .links {
.scriptsearch .links {
float: right;
}
 
.pluginsearch .filters {
.scriptsearch .filters {
padding: 6px;
border-top: 1px dotted #d5d5d5;
}
 
.pluginsearch .one_filter {
.scriptsearch .one_filter {
padding: 6px 6px 6px 20px;
}
 
.pluginsearch .search input {
.scriptsearch .search input {
border: 1px solid #d0d0d0;
background: #f0f8f0;
font-size: .9em;
}
 
.pluginsearch .search small {
.scriptsearch .search small {
color: #888;
font-size: .8em;
}
 
.pluginlist {
.scriptlist {
margin: 10px 0 5px 0;
color: #333;
font-size: 1em;
}
 
.pluginlist .notfound {
.scriptlist .notfound {
margin-top: 10px;
color: #b00;
font-size: 1.1em;
font-weight: bold;
}
 
.pluginlist table {
.scriptlist table {
width: 100%;
}
 
.pluginlist table th {
.scriptlist table th {
padding: .2em;
border: 1px solid #eaeaff;
background: #f8f8f8;
}
 
.pluginlist table td {
.scriptlist table td {
padding: .4em;
border: 1px solid #f2f2ff;
}
 
.pluginlist .row1 {
.scriptlist .row1 {
background: #fff;
}
 
.pluginlist .row1:hover {
.scriptlist .row1:hover {
background: #ffd;
}
 
.pluginlist .row2 {
.scriptlist .row2 {
background: #f9f9ff;
}
 
.pluginlist .row2:hover {
.scriptlist .row2:hover {
background: #ffd;
}
 
.pluginlist .tags {
.scriptlist .tags {
float: right;
margin-left: 8px;
color: #888;
font-size: .9em;
}
 
.pluginlist .requirements {
.scriptlist .requirements {
color: #777;
font-size: .9em;
font-style: italic;
}
 
.pluginlist .popular {
.scriptlist .popular {
width: 10px;
min-width: 10px;
float: left;
margin-right: 2px;
}
 
.pluginlist .name {
.scriptlist .name {
text-align: left;
white-space: nowrap;
}
 
.pluginlist .description {
.scriptlist .description {
}
 
.pluginlist .approval {
.scriptlist .approval {
}
 
.pluginlist .version, .pluginlist .language, .pluginlist .license,
.pluginlist .min_max, .pluginlist .author {
.scriptlist .version, .scriptlist .language, .scriptlist .license,
.scriptlist .min_max, .scriptlist .author {
font-size: .9em;
text-align: center;
}
 
.pluginlist td.name {
.scriptlist td.name {
padding-right: 10px;
}
 
.pluginlist .name .ext {
.scriptlist .name .ext {
margin-left: .1em;
color: #4a8ec1;
font-size: .9em;
}
 
.pluginlist .name img {
.scriptlist .name img {
margin-right: .35em;
}
 
.pluginlist .desc, .pluginlist .approval {
.scriptlist .desc, .scriptlist .approval {
text-align: left;
}
 
.pluginlist .date {
.scriptlist .date {
font-size: .9em;
text-align: center;
white-space: nowrap;
}
 
.plugininfo {
.scriptinfo {
padding: 1em;
border: 1px solid #e0e0e0;
border-radius: 4px;
Loading
Loading
@@ -156,18 +156,18 @@
background: #fafafa;
}
 
.plugininfo .download {
.scriptinfo .download {
float: right;
margin-left: 1.5em;
}
 
.plugininfo .requirements {
.scriptinfo .requirements {
margin-left: 1em;
color: #aaa;
font-size: .9em;
}
 
.plugininfo .extra {
.scriptinfo .extra {
margin-top: .4em;
color: #888;
font-size: .9em;
Loading
Loading
Loading
Loading
@@ -190,7 +190,7 @@ hr {
}
 
#nav1-home .nav-home, #nav1-about .nav-about, #nav1-doc .nav-doc,
#nav1-download .nav-download, #nav1-plugins .nav-plugins, #nav1-themes .nav-themes,
#nav1-download .nav-download, #nav1-scripts .nav-scripts, #nav1-themes .nav-themes,
#nav1-dev .nav-dev {
background: #6792c5;
background: -moz-linear-gradient(#8db8db, #2d588b);
Loading
Loading
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File moved
Loading
Loading
@@ -3,7 +3,7 @@
 
from django.utils.translation import gettext_lazy
 
_i18n_plugins_plugins = [
_i18n_scripts_scripts = [
# Translators: description for script "weerock.pl" (0.3.0+)
gettext_lazy("A \"now playing\" script for several music players."),
# Translators: description for script "urlbuf.py" (0.3.0+)
Loading
Loading
Loading
Loading
@@ -22,13 +22,13 @@
 
from django.contrib import admin
 
from weechat.plugins.models import Plugin
from weechat.scripts.models import Script
 
 
# pylint: disable=too-many-public-methods
class PluginAdmin(admin.ModelAdmin):
class ScriptAdmin(admin.ModelAdmin):
"""Display all scripts on the same page."""
list_per_page = 10000
 
 
admin.site.register(Plugin, PluginAdmin)
admin.site.register(Script, ScriptAdmin)
Loading
Loading
@@ -68,7 +68,7 @@ def get_language_from_extension(ext):
if value[0] == ext), None)
 
 
class Plugin(models.Model):
class Script(models.Model):
"""A WeeChat script."""
visible = models.BooleanField(default=False)
popularity = models.IntegerField()
Loading
Loading
@@ -191,9 +191,9 @@ class NameField(forms.CharField):
if not re.search('^[a-z0-9_]+$', value):
raise forms.ValidationError(
gettext_lazy('This name is invalid.'))
plugins = Plugin.objects.exclude(max_weechat='0.2.6') \
scripts = Script.objects.exclude(max_weechat='0.2.6') \
.filter(name=value)
if plugins:
if scripts:
raise forms.ValidationError(
gettext_lazy('This name already exists, please choose another '
'name (update script content accordingly).'))
Loading
Loading
@@ -236,7 +236,7 @@ def get_min_max_choices():
return []
 
 
class PluginFormAdd(forms.Form):
class ScriptFormAdd(forms.Form):
"""Form to add a script."""
languages = (
('python', 'Python (.py)'),
Loading
Loading
@@ -316,7 +316,7 @@ class PluginFormAdd(forms.Form):
)
 
def __init__(self, *args, **kwargs):
super(PluginFormAdd, self).__init__(*args, **kwargs)
super(ScriptFormAdd, self).__init__(*args, **kwargs)
self.fields['min_max'].choices = get_min_max_choices()
self.fields['name'].help_text = gettext_lazy(
'short name of script (max {max_chars} chars, '
Loading
Loading
@@ -324,26 +324,26 @@ class PluginFormAdd(forms.Form):
max_chars=MAX_LENGTH_NAME)
 
 
def get_plugin_choices():
def get_script_choices():
"""Get list of scripts for update form."""
try:
plugin_list = Plugin.objects.exclude(max_weechat='0.2.6') \
script_list = Script.objects.exclude(max_weechat='0.2.6') \
.filter(visible=1).order_by('name')
plugin_choices = []
plugin_choices.append(('', gettext_lazy('Choose...')))
for plugin in plugin_list:
name = '%s - v%s (%s)' % (plugin.name_with_extension(),
plugin.version, plugin.version_weechat())
plugin_choices.append((plugin.id, name))
return plugin_choices
script_choices = []
script_choices.append(('', gettext_lazy('Choose...')))
for script in script_list:
name = '%s - v%s (%s)' % (script.name_with_extension(),
script.version, script.version_weechat())
script_choices.append((script.id, name))
return script_choices
except: # noqa: E722
return []
 
 
class PluginFormUpdate(forms.Form):
class ScriptFormUpdate(forms.Form):
"""Form to update a script."""
required_css_class = 'required'
plugin = forms.ChoiceField(
script = forms.ChoiceField(
choices=[],
label=gettext_lazy('Script'),
widget=forms.Select(attrs={'autofocus': True}),
Loading
Loading
@@ -382,8 +382,8 @@ class PluginFormUpdate(forms.Form):
)
 
def __init__(self, *args, **kwargs):
super(PluginFormUpdate, self).__init__(*args, **kwargs)
self.fields['plugin'].choices = get_plugin_choices()
super(ScriptFormUpdate, self).__init__(*args, **kwargs)
self.fields['script'].choices = get_script_choices()
 
 
def getxmlline(key, value):
Loading
Loading
@@ -400,18 +400,18 @@ def getjsonline(key, value):
key, strvalue.replace('"', '\\"').replace("'", "\\'"))
 
 
def handler_plugin_changed(sender, **kwargs):
def handler_script_changed(sender, **kwargs):
"""Build files plugins.{xml,json}(.gz) after update/delete of a script."""
xml = '<?xml version="1.0" encoding="utf-8"?>\n'
xml += '<plugins>\n'
json = '[\n'
strings = []
for plugin in Plugin.objects.filter(visible=1).order_by('id'):
if plugin.visible:
xml += ' <plugin id="%s">\n' % plugin.id
for script in Script.objects.filter(visible=1).order_by('id'):
if script.visible:
xml += ' <plugin id="%s">\n' % script.id
json += ' {\n'
json += ' "id": "%s",\n' % plugin.id
for key, value in plugin.__dict__.items():
json += ' "id": "%s",\n' % script.id
for key, value in script.__dict__.items():
value_i18n = {}
if key not in ['_state', 'id', 'visible', 'approval']:
if value is None:
Loading
Loading
@@ -421,12 +421,12 @@ def handler_plugin_changed(sender, **kwargs):
# FIXME: use the "Host" from request, but...
# request is not available in this handler!
value = ('https://weechat.org/%s' %
plugin.build_url()[1:])
script.build_url()[1:])
elif key == 'mail':
value = value.replace('@', ' [at] ')
value = value.replace('.', ' [dot] ')
elif key == 'md5sum':
value = plugin.md5()
value = script.md5()
elif key.startswith('desc'):
if key == 'desc_en':
for lang, locale in \
Loading
Loading
@@ -446,10 +446,10 @@ def handler_plugin_changed(sender, **kwargs):
json = json[:-2] + '\n },\n'
strings.append(
(
plugin.desc_en,
script.desc_en,
'description for script "%s" (%s)' % (
plugin.name_with_extension(),
plugin.version_weechat()),
script.name_with_extension(),
script.version_weechat()),
))
xml += '</plugins>\n'
json = json[:-2] + '\n]\n'
Loading
Loading
@@ -476,9 +476,9 @@ def handler_plugin_changed(sender, **kwargs):
_f_out.writelines(_f_in)
_f_out.close()
 
# create _i18n_plugins.py
i18n_autogen('plugins', 'plugins', strings)
# create _i18n_scripts.py
i18n_autogen('scripts', 'scripts', strings)
 
 
post_save.connect(handler_plugin_changed, sender=Plugin)
post_delete.connect(handler_plugin_changed, sender=Plugin)
post_save.connect(handler_script_changed, sender=Script)
post_delete.connect(handler_script_changed, sender=Script)
Loading
Loading
@@ -25,7 +25,7 @@
from django.conf.urls import url
from django.views.generic.base import TemplateView
 
from weechat.plugins.views import (
from weechat.scripts.views import (
scripts as view_scripts,
script_source as view_script_source,
form_add as view_form_add,
Loading
Loading
@@ -59,11 +59,11 @@ urlpatterns = [
url(r'^update/$', view_form_update, name='scripts_update'),
url(r'^pending/$', view_pending, name='scripts_pending'),
url(r'^addok/$',
TemplateView.as_view(template_name='plugins/add_ok.html')),
TemplateView.as_view(template_name='scripts/add_ok.html')),
url(r'^adderror/$',
TemplateView.as_view(template_name='plugins/add_error.html')),
TemplateView.as_view(template_name='scripts/add_error.html')),
url(r'^updateok/$',
TemplateView.as_view(template_name='plugins/update_ok.html')),
TemplateView.as_view(template_name='scripts/update_ok.html')),
url(r'^updateerror/$',
TemplateView.as_view(template_name='plugins/update_error.html')),
TemplateView.as_view(template_name='scripts/update_error.html')),
]
Loading
Loading
@@ -31,7 +31,7 @@ from django.http import HttpResponseRedirect
from django.shortcuts import render
 
from weechat.common.path import files_path_join
from weechat.plugins.models import Plugin, PluginFormAdd, PluginFormUpdate, \
from weechat.scripts.models import Script, ScriptFormAdd, ScriptFormUpdate, \
get_language_from_extension
 
API_OLD = '0.2.6'
Loading
Loading
@@ -83,29 +83,29 @@ def scripts(request, api='stable', sort_key='popularity', filter_name='',
return item[0].lower()
 
if api == 'legacy':
plugin_list = Plugin.objects.filter(visible=1) \
script_list = Script.objects.filter(visible=1) \
.filter(max_weechat=API_OLD).order_by(*get_sort_key(sort_key))
else:
plugin_list = Plugin.objects.filter(visible=1) \
script_list = Script.objects.filter(visible=1) \
.filter(min_weechat__gte=API_STABLE) \
.order_by(*get_sort_key(sort_key))
if filter_name == 'tag':
plugin_list = plugin_list \
script_list = script_list \
.filter(tags__regex=r'(^|,)%s($|,)' % filter_value)
elif filter_name == 'language':
plugin_list = plugin_list.filter(language=filter_value)
script_list = script_list.filter(language=filter_value)
elif filter_name == 'license':
plugin_list = plugin_list.filter(license=filter_value)
script_list = script_list.filter(license=filter_value)
elif filter_name == 'author':
plugin_list = plugin_list.filter(author=filter_value)
script_list = script_list.filter(author=filter_value)
languages = {}
licenses = {}
tags = {}
for plugin in plugin_list:
languages[plugin.language] = languages.get(plugin.language, 0) + 1
licenses[plugin.license] = licenses.get(plugin.license, 0) + 1
if plugin.tags:
for tag in plugin.tagslist():
for script in script_list:
languages[script.language] = languages.get(script.language, 0) + 1
licenses[script.license] = licenses.get(script.license, 0) + 1
if script.tags:
for tag in script.tagslist():
tags[tag] = tags.get(tag, 0) + 1
if request.COOKIES.get('script_filters_sort', '') == 'popularity':
sort_function = sort_by_popularity
Loading
Loading
@@ -115,9 +115,9 @@ def scripts(request, api='stable', sort_key='popularity', filter_name='',
request.COOKIES.get('script_filters', '0_name').split('_'))
return render(
request,
'plugins/list.html',
'scripts/list.html',
{
'plugin_list': plugin_list,
'script_list': script_list,
'api': api,
'sort_key': sort_key,
'filter_name': filter_name,
Loading
Loading
@@ -133,15 +133,15 @@ def scripts(request, api='stable', sort_key='popularity', filter_name='',
 
def script_source(request, api='stable', scriptid='', scriptname=''):
"""Page with source of a script."""
plugin = ''
script = ''
if scriptid:
try:
plugin = Plugin.objects.get(id=scriptid)
with open(files_path_join(plugin.path(),
plugin.name_with_extension()),
script = Script.objects.get(id=scriptid)
with open(files_path_join(script.path(),
script.name_with_extension()),
'rb') as _file:
htmlsource = get_highlighted_source(_file.read(),
plugin.language)
script.language)
except: # noqa: E722
htmlsource = ''
else:
Loading
Loading
@@ -153,17 +153,17 @@ def script_source(request, api='stable', scriptid='', scriptname=''):
sname = sname[0:pos]
try:
if api == 'legacy':
plugin = Plugin.objects.get(
script = Script.objects.get(
name=sname,
language=get_language_from_extension(sext),
max_weechat=API_OLD)
else:
plugin = Plugin.objects.get(
script = Script.objects.get(
name=sname,
language=get_language_from_extension(sext),
min_weechat__gte=API_STABLE)
with open(files_path_join(plugin.path(),
plugin.name_with_extension()),
with open(files_path_join(script.path(),
script.name_with_extension()),
'rb') as _file:
htmlsource = get_highlighted_source(_file.read(),
PYGMENTS_LEXER[sext])
Loading
Loading
@@ -171,9 +171,9 @@ def script_source(request, api='stable', scriptid='', scriptname=''):
htmlsource = ''
return render(
request,
'plugins/source.html',
'scripts/source.html',
{
'plugin': plugin,
'script': script,
'htmlsource': htmlsource,
},
)
Loading
Loading
@@ -182,7 +182,7 @@ def script_source(request, api='stable', scriptid='', scriptname=''):
def form_add(request):
"""Page with form to add a script."""
if request.method == 'POST':
form = PluginFormAdd(request.POST, request.FILES)
form = ScriptFormAdd(request.POST, request.FILES)
if form.is_valid():
scriptfile = request.FILES['file']
min_max = form.cleaned_data['min_max'].split(':')
Loading
Loading
@@ -193,7 +193,7 @@ def form_add(request):
 
# add script in database
now = datetime.now()
plugin = Plugin(visible=False,
script = Script(visible=False,
popularity=0,
name=form.cleaned_data['name'],
version=form.cleaned_data['version'],
Loading
Loading
@@ -211,14 +211,14 @@ def form_add(request):
 
# write script in pending directory
filename = files_path_join('scripts', 'pending1',
plugin.name_with_extension())
script.name_with_extension())
with open(filename, 'w') as _file:
_file.write(scriptfile.read().replace('\r\n', '\n'))
 
# send e-mail
try:
subject = ('WeeChat: new script %s' %
plugin.name_with_extension())
script.name_with_extension())
body = (''
'Script : %s\n'
'Version : %s\n'
Loading
Loading
@@ -252,14 +252,14 @@ def form_add(request):
return HttpResponseRedirect('/scripts/adderror/')
 
# save script in database
plugin.save()
script.save()
 
return HttpResponseRedirect('/scripts/addok/')
else:
form = PluginFormAdd()
form = ScriptFormAdd()
return render(
request,
'plugins/add.html',
'scripts/add.html',
{
'form': form,
},
Loading
Loading
@@ -269,23 +269,23 @@ def form_add(request):
def form_update(request):
"""Page with form to update a script."""
if request.method == 'POST':
form = PluginFormUpdate(request.POST, request.FILES)
form = ScriptFormUpdate(request.POST, request.FILES)
if form.is_valid():
scriptfile = request.FILES['file']
plugin = Plugin.objects.get(id=form.cleaned_data['plugin'])
script = Script.objects.get(id=form.cleaned_data['script'])
 
# send e-mail
try:
subject = ('WeeChat: new release for script %s' %
plugin.name_with_extension())
script.name_with_extension())
body = (''
'Script : %s (%s)\n'
'New version: %s\n'
'Author : %s <%s>\n'
'\n'
'Comment:\n%s\n' %
(plugin.name_with_extension(),
plugin.version_weechat(),
(script.name_with_extension(),
script.version_weechat(),
form.cleaned_data['version'],
form.cleaned_data['author'],
form.cleaned_data['mail'],
Loading
Loading
@@ -294,7 +294,7 @@ def form_update(request):
form.cleaned_data['mail'])
email = EmailMessage(subject, body, sender,
settings.SCRIPTS_MAILTO)
email.attach(plugin.name_with_extension(),
email.attach(script.name_with_extension(),
scriptfile.read().replace('\r\n', '\n'),
'text/plain')
email.send()
Loading
Loading
@@ -303,10 +303,10 @@ def form_update(request):
 
return HttpResponseRedirect('/scripts/updateok/')
else:
form = PluginFormUpdate()
form = ScriptFormUpdate()
return render(
request,
'plugins/update.html',
'scripts/update.html',
{
'form': form,
},
Loading
Loading
@@ -315,12 +315,12 @@ def form_update(request):
 
def pending(request):
"""Page with scripts pending for approval."""
plugin_list = Plugin.objects.filter(visible=0) \
script_list = Script.objects.filter(visible=0) \
.filter(min_weechat__gte=API_STABLE).order_by('-added')
return render(
request,
'plugins/pending.html',
'scripts/pending.html',
{
'plugin_list': plugin_list,
'script_list': script_list,
},
)
Loading
Loading
@@ -167,7 +167,7 @@ INSTALLED_APPS = (
'weechat.doc',
'weechat.download',
'weechat.debian',
'weechat.plugins',
'weechat.scripts',
'weechat.themes',
'weechat.dev',
)
Loading
Loading
Loading
Loading
@@ -35,7 +35,7 @@
<li><a href="{% url 'download_security' %}">{% trans "Security issues" %}</a></li>
</ul>
</li>
<li class="nav-plugins">
<li class="nav-scripts">
<a href="{% url 'scripts' %}">{% trans "Scripts" %}</a>
<ul>
<li><a href="{% url 'scripts' %}">{% trans "Browse scripts" %}</a></li>
Loading
Loading
{% extends "plugins/plugins.html" %}
{% extends "scripts/scripts.html" %}
 
{% load i18n %}
 
Loading
Loading
{% extends "plugins/plugins.html" %}
{% extends "scripts/scripts.html" %}
 
{% load i18n %}
 
Loading
Loading
{% extends "plugins/plugins.html" %}
{% extends "scripts/scripts.html" %}
 
{% load i18n %}
 
Loading
Loading
{% extends "plugins/plugins.html" %}
{% extends "scripts/scripts.html" %}
 
{% load i18n %}
 
Loading
Loading
@@ -10,7 +10,7 @@
 
{{ block.super }}
 
{% if plugin_list %}
{% if script_list %}
<div class="infobox">
{% trans "<strong>Important:</strong> these scripts are written by external contributors, therefore WeeChat developers are <strong>NOT RESPONSIBLE</strong> for problems caused by one of these scripts." %}
<br>
Loading
Loading
@@ -21,7 +21,7 @@
{% trans "WARNING: the legacy API is deprecated and these scripts runs only on WeeChat 0.2.x, which is OBSOLETE. You MUST NOT load these scripts with latest stable version of WeeChat!" %}
</div>
{% endif %}
<div class="pluginsearch">
<div class="scriptsearch">
<div class="search">
<span class="links">
{% if api == "legacy" %}
Loading
Loading
@@ -40,7 +40,7 @@
{% else %}
{% trans "no filter" %},
{% endif %}
<strong>{{ plugin_list|length }}</strong> {% trans "scripts" %}.
<strong>{{ script_list|length }}</strong> {% trans "scripts" %}.
</div>
<div id="script_filters_0" class="filters" style="{% if script_filters_displayed %}display: none{% endif %}">
<a href="#" onclick="toggle('script_filters_0', 'none'); toggle('script_filters_1', 'block'); set_cookie('script_filters', '1_{{ script_filters_sort }}', '/scripts', 30)">&#9654; {% if script_filters_sort == "popularity" %}{% trans "Filters by popularity" %}{% else %}{% trans "Filters by name" %}{% endif %}</a>
Loading
Loading
@@ -76,7 +76,7 @@
</div>
</div>
 
<div class="pluginlist">
<div class="scriptlist">
<table class="table">
<tr>
<th class="name">
Loading
Loading
@@ -137,27 +137,27 @@
{% endif %}
</th>
</tr>
{% for plugin in plugin_list %}
{% for script in script_list %}
<tr class="{% cycle 'row1' 'row2' %}">
<td class="name">
<div class="popular">{{ plugin.popularity_img|safe }}</div><a href="{% if api == 'legacy' %}{% url 'scripts_source_api_name_html' api plugin.name_with_extension %}{% else %}{% url 'scripts_source_name_html' plugin.name_with_extension %}{% endif %}">{{ plugin.name }}<span class="ext">.{{ plugin.extension }}</span></a>
<div class="popular">{{ script.popularity_img|safe }}</div><a href="{% if api == 'legacy' %}{% url 'scripts_source_api_name_html' api script.name_with_extension %}{% else %}{% url 'scripts_source_name_html' script.name_with_extension %}{% endif %}">{{ script.name }}<span class="ext">.{{ script.extension }}</span></a>
</td>
<td class="description">
<div class="tags">
[{% for tag in plugin.tagslist %}<a href="{% url 'scripts_api_filter' api 'tag' tag %}" title="{% trans "Tag:" %} {{ tag }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}]
[{% for tag in script.tagslist %}<a href="{% url 'scripts_api_filter' api 'tag' tag %}" title="{% trans "Tag:" %} {{ tag }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}]
</div>
{{ plugin.desc_i18n }}
{% if plugin.requirements %}
<span class="requirements"> ({% trans "requires" %}: {{ plugin.requirements }})</span>
{{ script.desc_i18n }}
{% if script.requirements %}
<span class="requirements"> ({% trans "requires" %}: {{ script.requirements }})</span>
{% endif %}
</td>
<td class="version">{{ plugin.version }}</td>
<td class="license"><a href="{% url 'scripts_api_filter' api 'license' plugin.license %}" title="{% trans "License:" %} {{ plugin.license }}">{{ plugin.license }}</a></td>
<td class="min_max">{{ plugin.min_weechat }}</td>
<td class="min_max">{{ plugin.max_weechat }}</td>
<td class="author"><a href="{% url 'scripts_api_filter' api 'author' plugin.author %}" title="{% trans "Author:" %} {{ plugin.author }}">{{ plugin.author }}</a></td>
<td class="date">{% if plugin.added %}{{ plugin.added|date:"Y-m-d" }}{% endif %}</td>
<td class="date">{% if plugin.updated %}{% if plugin.added != plugin.updated %}{{ plugin.updated|date:"Y-m-d" }}{% endif %}{% endif %}</td>
<td class="version">{{ script.version }}</td>
<td class="license"><a href="{% url 'scripts_api_filter' api 'license' script.license %}" title="{% trans "License:" %} {{ script.license }}">{{ script.license }}</a></td>
<td class="min_max">{{ script.min_weechat }}</td>
<td class="min_max">{{ script.max_weechat }}</td>
<td class="author"><a href="{% url 'scripts_api_filter' api 'author' script.author %}" title="{% trans "Author:" %} {{ script.author }}">{{ script.author }}</a></td>
<td class="date">{% if script.added %}{{ script.added|date:"Y-m-d" }}{% endif %}</td>
<td class="date">{% if script.updated %}{% if script.added != script.updated %}{{ script.updated|date:"Y-m-d" }}{% endif %}{% endif %}</td>
</tr>
{% endfor %}
</table>
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment