add townstreet button cell

This commit is contained in:
Frédéric Péters 2021-02-19 14:57:23 +01:00
parent cb5fa09166
commit cb16529ea0
10 changed files with 375 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*.egg-info
__pycache__
*.css
*.css.map

8
MANIFEST.in Normal file
View File

@ -0,0 +1,8 @@
include MANIFEST.in
include COPYING
include README
include VERSION
recursive-include combo_plugin_imio_townstreet/locale *.po *.mo
recursive-include combo_plugin_imio_townstreet/templates *.html
recursive-include combo_plugin_imio_townstreet/static *.css *.scss *.js *.svg *.png *.jpg

View File

@ -0,0 +1,26 @@
# combo-plugin-imio-townstreet - Combo iMio town street plugin
# Copyright (C) 2021 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import django.apps
from django.utils.translation import ugettext_lazy as _
class AppConfig(django.apps.AppConfig):
name = __name__
verbose_name = _('iMio Townstreet')
default_app_config = __name__ + '.AppConfig'

View File

@ -0,0 +1,45 @@
# Generated by Django 2.2.12 on 2021-02-19 13:28
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('data', '0045_link_list_limit'),
]
operations = [
migrations.CreateModel(
name='TownstreetButton',
fields=[
(
'id',
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(blank=True, verbose_name='Slug')),
(
'extra_css_class',
models.CharField(
blank=True, max_length=100, verbose_name='Extra classes for CSS styling'
),
),
('public', models.BooleanField(default=True, verbose_name='Public')),
(
'restricted_to_unlogged',
models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
),
('last_update_timestamp', models.DateTimeField(auto_now=True)),
('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')),
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
],
options={
'verbose_name': 'Townstreet Button',
},
),
]

View File

@ -0,0 +1,39 @@
# combo-plugin-imio-townstreet - Combo iMio town street plugin
# Copyright (C) 2021 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from combo.data.models import CellBase
from combo.data.library import register_cell_class
@register_cell_class
class TownstreetButton(CellBase):
template_name = 'imio_townstreet/button.html'
class Meta:
verbose_name = _('Townstreet Button')
class Media:
css = {
'all': ('imio_townstreet/style.css',),
}
def get_cell_extra_context(self, context):
extra_context = super().get_cell_extra_context(context)
extra_context['url'] = getattr(settings, 'TOWNSTREET_BUTTON_URL', '#')
return extra_context

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
data-iorad-extension="firefox"
id="svg897"
version="1.1"
class="feather feather-map-pin"
stroke-linejoin="round"
stroke-linecap="round"
stroke-width="2"
stroke="currentColor"
fill="none"
viewBox="0 0 24 24"
height="24"
width="24"
color="white">
<script />
<svg:metadata
id="metadata903">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</svg:metadata>
<svg:defs
id="defs901" />
<svg:g
transform="matrix(0.88382385,0,0,0.88382385,43.653256,29.977441)"
id="g1487">
<svg:polygon
transform="matrix(0.64922775,0,0,0.64922775,-42.838374,-26.753477)"
points="8,18 16,22 23,18 23,2 16,6 8,2 1,6 1,22 "
id="polygon879"
style="fill:#c9e661;fill-opacity:1" />
<svg:line
x1="-37.644554"
y1="-25.455023"
x2="-37.644554"
y2="-15.067381"
id="line881"
style="fill:#008080;stroke-width:1.29845548" />
<svg:line
x1="-32.450726"
y1="-22.858112"
x2="-32.450726"
y2="-12.470467"
id="line883"
style="fill:#008080;stroke-width:1.29845548" />
</svg:g>
<svg:g
transform="matrix(0.43097766,0,0,0.43097766,-1.4815228,2.0167839)"
id="g1482">
<svg:path
d="m 29.581822,11.89091 c 0,7 -9,13 -9,13 0,0 -9,-6 -9,-13 a 9,9 0 0 1 18,0 z"
id="path893"
style="fill:#7b6e70;fill-opacity:1" />
<svg:circle
cx="20.58182"
cy="11.89091"
r="3"
id="circle895"
style="fill:#7b6e70;fill-opacity:1" />
</svg:g>
<script />
<script />
</svg:svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,18 @@
div.cell.townstreet-button {
a {
text-decoration: none;
div {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
width: 90%;
background: #e40105;
padding-left: 1em;
border-radius: 5px;
h4 {
color: white;
}
}
}
}

View File

@ -0,0 +1,9 @@
{% load static %}
{% spaceless %}
<a href="{{url}}">
<div>
<img src="{% static 'imio_townstreet/icon.svg' %}" alt="" width="48" height="48">
<h4>Signaler un problème sur lespace public</h4>
</div>
</a>
{% endspaceless %}

152
setup.py Normal file
View File

@ -0,0 +1,152 @@
#! /usr/bin/env python3
import os
import subprocess
import sys
from setuptools.command.install_lib import install_lib as _install_lib
from distutils.command.build import build as _build
from distutils.command.sdist import sdist
from distutils.cmd import Command
from distutils.errors import CompileError
from distutils.spawn import find_executable
from setuptools import setup, find_packages
class eo_sdist(sdist):
def run(self):
if os.path.exists('VERSION'):
os.remove('VERSION')
version = get_version()
with open('VERSION', 'w') as fd:
fd.write(version)
sdist.run(self)
if os.path.exists('VERSION'):
os.remove('VERSION')
def get_version():
if os.path.exists('VERSION'):
with open('VERSION', 'r') as v:
return v.read()
if os.path.exists('.git'):
p = subprocess.Popen(
['git', 'describe', '--dirty=.dirty', '--match=v*'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = p.communicate()[0]
if p.returncode == 0:
result = result.decode('ascii').strip()[1:] # strip spaces/newlines and initial v
if '-' in result: # not a tagged version
real_number, commit_count, commit_hash = result.split('-', 2)
version = '%s.post%s+%s' % (real_number, commit_count, commit_hash)
else:
version = result
return version
else:
return '0.0.post%s' % len(subprocess.check_output(['git', 'rev-list', 'HEAD']).splitlines())
return '0.0'
class compile_translations(Command):
description = 'compile message catalogs to MO files via django compilemessages'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
try:
from django.core.management import call_command
for path, dirs, files in os.walk('combo_plugin_imio_townstreet'):
if 'locale' not in dirs:
continue
curdir = os.getcwd()
os.chdir(os.path.realpath(path))
call_command('compilemessages')
os.chdir(curdir)
except ImportError:
sys.stderr.write('!!! Please install Django >= 1.4 to build translations\n')
class compile_scss(Command):
description = 'compile scss files into css files'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
sass_bin = None
for program in ('sassc', 'sass'):
sass_bin = find_executable(program)
if sass_bin:
break
if not sass_bin:
raise CompileError(
'A sass compiler is required but none was found. See sass-lang.com for choices.'
)
for path, dirnames, filenames in os.walk('combo_plugin_imio_townstreet'):
for filename in filenames:
if not filename.endswith('.scss'):
continue
if filename.startswith('_'):
continue
subprocess.check_call(
[
sass_bin,
'%s/%s' % (path, filename),
'%s/%s' % (path, filename.replace('.scss', '.css')),
]
)
class build(_build):
sub_commands = [('compile_translations', None), ('compile_scss', None)] + _build.sub_commands
class install_lib(_install_lib):
def run(self):
self.run_command('compile_translations')
_install_lib.run(self)
setup(
name='combo_plugin_imio_townstreet',
version=get_version(),
description='Combo iMio townstreet plugin',
author='Frederic Peters',
author_email='fpeters@entrouvert.com',
packages=find_packages(),
include_package_data=True,
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Environment :: Web Environment',
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
],
install_requires=[
'django>=1.11, <2.3',
],
zip_safe=False,
cmdclass={
'build': build,
'compile_scss': compile_scss,
'compile_translations': compile_translations,
'install_lib': install_lib,
'sdist': eo_sdist,
},
)