diff --git a/.gitignore b/.gitignore index 6027191..6bdc814 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.swp /dist /gadjo.egg-info +/gadjo/static/css/icons diff --git a/README.txt b/README.txt index 8cddabf..9061672 100644 --- a/README.txt +++ b/README.txt @@ -72,7 +72,7 @@ Licence Python, Javascript and CSS files are published under the GNU AFFERO GENERAL PUBLIC LICENSE (see the COPYING file for the complete text). -gadjo/static/images/info-icon.png is a derived work of the -dialog-information-symbolic.svg from gnome-icon-theme-symbolic, published under -the Creative Commons Attribution-Share Alike 3.0 United States License by the -GNOME Project, see http://www.gnome.org/. +gadjo/static/images/info-icon.png and icons/*.svg are derived work of icons +from gnome-icon-theme-symbolic, published under the Creative Commons +Attribution-Share Alike 3.0 United States License by the GNOME Project, see +http://www.gnome.org/. diff --git a/debian/control b/debian/control index 2912223..7d03592 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: gadjo Maintainer: Frederic Peters Section: python Priority: optional -Build-Depends: python-setuptools (>= 0.6b3), python-all (>= 2.6.6-3), debhelper (>= 7), python-django +Build-Depends: python-setuptools (>= 0.6b3), python-all (>= 2.6.6-3), debhelper (>= 7), python-django, inkscape Standards-Version: 3.9.1 Package: python-gadjo diff --git a/gadjo/static/css/gadjo.css b/gadjo/static/css/gadjo.css index ce9ea73..47ea3b1 100644 --- a/gadjo/static/css/gadjo.css +++ b/gadjo/static/css/gadjo.css @@ -667,11 +667,69 @@ ul#sidepage-menu li a { transform: scale(0.4, 0.707) rotate(45deg); } -ul#sidepage-menu li a.icon-management { background-image: url(small-icon-management.png); } -ul#sidepage-menu li a.icon-submission { background-image: url(small-icon-submission.png); } -ul#sidepage-menu li a.icon-categories { background-image: url(small-icon-categories.png); } -ul#sidepage-menu li a.icon-workflows { background-image: url(small-icon-workflows.png); } -ul#sidepage-menu li a.icon-forms { background-image: url(small-icon-forms.png); } -ul#sidepage-menu li a.icon-roles { background-image: url(small-icon-roles.png); } -ul#sidepage-menu li a.icon-users { background-image: url(small-icon-users.png); } -ul#sidepage-menu li a.icon-settings { background-image: url(small-icon-settings.png); } +ul#sidepage-menu li a.icon-add { background-image: url(icons/add.small.png); } +ul#sidepage-menu li a.icon-calendar { background-image: url(icons/calendar.small.png); } +ul#sidepage-menu li a.icon-categories { background-image: url(icons/categories.small.png); } +ul#sidepage-menu li a.icon-clock { background-image: url(icons/clock.small.png); } +ul#sidepage-menu li a.icon-facturier { background-image: url(icons/facturier.small.png); } +ul#sidepage-menu li a.icon-forms { background-image: url(icons/forms.small.png); } +ul#sidepage-menu li a.icon-gis { background-image: url(icons/gis.small.png); } +ul#sidepage-menu li a.icon-grid { background-image: url(icons/grid.small.png); } +ul#sidepage-menu li a.icon-home { background-image: url(icons/home.small.png); } +ul#sidepage-menu li a.icon-management { background-image: url(icons/management.small.png); } +ul#sidepage-menu li a.icon-organizational-units { background-image: url(icons/organizational-units.small.png); } +ul#sidepage-menu li a.icon-password { background-image: url(icons/password.small.png); } +ul#sidepage-menu li a.icon-phone { background-image: url(icons/phone.small.png); } +ul#sidepage-menu li a.icon-portal { background-image: url(icons/portal.small.png); } +ul#sidepage-menu li a.icon-porte-doc { background-image: url(icons/porte-doc.small.png); } +ul#sidepage-menu li a.icon-roles { background-image: url(icons/roles.small.png); } +ul#sidepage-menu li a.icon-security { background-image: url(icons/security.small.png); } +ul#sidepage-menu li a.icon-services { background-image: url(icons/services.small.png); } +ul#sidepage-menu li a.icon-settings { background-image: url(icons/settings.small.png); } +ul#sidepage-menu li a.icon-submission { background-image: url(icons/submission.small.png); } +ul#sidepage-menu li a.icon-users { background-image: url(icons/users.small.png); } +ul#sidepage-menu li a.icon-workflows { background-image: url(icons/workflows.small.png); } +ul.apps #add a { background-image: url(icons/add.large.png); } +ul.apps #add a:hover { background-image: url(icons/add.large-hover.png); } +ul.apps #calendar a { background-image: url(icons/calendar.large.png); } +ul.apps #calendar a:hover { background-image: url(icons/calendar.large-hover.png); } +ul.apps #categories a { background-image: url(icons/categories.large.png); } +ul.apps #categories a:hover { background-image: url(icons/categories.large-hover.png); } +ul.apps #clock a { background-image: url(icons/clock.large.png); } +ul.apps #clock a:hover { background-image: url(icons/clock.large-hover.png); } +ul.apps #facturier a { background-image: url(icons/facturier.large.png); } +ul.apps #facturier a:hover { background-image: url(icons/facturier.large-hover.png); } +ul.apps #forms a { background-image: url(icons/forms.large.png); } +ul.apps #forms a:hover { background-image: url(icons/forms.large-hover.png); } +ul.apps #gis a { background-image: url(icons/gis.large.png); } +ul.apps #gis a:hover { background-image: url(icons/gis.large-hover.png); } +ul.apps #grid a { background-image: url(icons/grid.large.png); } +ul.apps #grid a:hover { background-image: url(icons/grid.large-hover.png); } +ul.apps #home a { background-image: url(icons/home.large.png); } +ul.apps #home a:hover { background-image: url(icons/home.large-hover.png); } +ul.apps #management a { background-image: url(icons/management.large.png); } +ul.apps #management a:hover { background-image: url(icons/management.large-hover.png); } +ul.apps #organizational-units a { background-image: url(icons/organizational-units.large.png); } +ul.apps #organizational-units a:hover { background-image: url(icons/organizational-units.large-hover.png); } +ul.apps #password a { background-image: url(icons/password.large.png); } +ul.apps #password a:hover { background-image: url(icons/password.large-hover.png); } +ul.apps #phone a { background-image: url(icons/phone.large.png); } +ul.apps #phone a:hover { background-image: url(icons/phone.large-hover.png); } +ul.apps #portal a { background-image: url(icons/portal.large.png); } +ul.apps #portal a:hover { background-image: url(icons/portal.large-hover.png); } +ul.apps #porte-doc a { background-image: url(icons/porte-doc.large.png); } +ul.apps #porte-doc a:hover { background-image: url(icons/porte-doc.large-hover.png); } +ul.apps #roles a { background-image: url(icons/roles.large.png); } +ul.apps #roles a:hover { background-image: url(icons/roles.large-hover.png); } +ul.apps #security a { background-image: url(icons/security.large.png); } +ul.apps #security a:hover { background-image: url(icons/security.large-hover.png); } +ul.apps #services a { background-image: url(icons/services.large.png); } +ul.apps #services a:hover { background-image: url(icons/services.large-hover.png); } +ul.apps #settings a { background-image: url(icons/settings.large.png); } +ul.apps #settings a:hover { background-image: url(icons/settings.large-hover.png); } +ul.apps #submission a { background-image: url(icons/submission.large.png); } +ul.apps #submission a:hover { background-image: url(icons/submission.large-hover.png); } +ul.apps #users a { background-image: url(icons/users.large.png); } +ul.apps #users a:hover { background-image: url(icons/users.large-hover.png); } +ul.apps #workflows a { background-image: url(icons/workflows.large.png); } +ul.apps #workflows a:hover { background-image: url(icons/workflows.large-hover.png); } diff --git a/gadjo/static/css/small-icon-categories-hover.png b/gadjo/static/css/small-icon-categories-hover.png deleted file mode 100644 index 6469f77..0000000 Binary files a/gadjo/static/css/small-icon-categories-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-categories.png b/gadjo/static/css/small-icon-categories.png deleted file mode 100644 index 4793373..0000000 Binary files a/gadjo/static/css/small-icon-categories.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-forms-hover.png b/gadjo/static/css/small-icon-forms-hover.png deleted file mode 100644 index 15307c7..0000000 Binary files a/gadjo/static/css/small-icon-forms-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-forms.png b/gadjo/static/css/small-icon-forms.png deleted file mode 100644 index 7f6c8cb..0000000 Binary files a/gadjo/static/css/small-icon-forms.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-home-hover.png b/gadjo/static/css/small-icon-home-hover.png deleted file mode 100644 index 62ff302..0000000 Binary files a/gadjo/static/css/small-icon-home-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-home.png b/gadjo/static/css/small-icon-home.png deleted file mode 100644 index 6321a23..0000000 Binary files a/gadjo/static/css/small-icon-home.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-management-hover.png b/gadjo/static/css/small-icon-management-hover.png deleted file mode 100644 index 9dc0d77..0000000 Binary files a/gadjo/static/css/small-icon-management-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-management.png b/gadjo/static/css/small-icon-management.png deleted file mode 100644 index 5494b30..0000000 Binary files a/gadjo/static/css/small-icon-management.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-roles-hover.png b/gadjo/static/css/small-icon-roles-hover.png deleted file mode 100644 index 8f1200b..0000000 Binary files a/gadjo/static/css/small-icon-roles-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-roles.png b/gadjo/static/css/small-icon-roles.png deleted file mode 100644 index 1b12101..0000000 Binary files a/gadjo/static/css/small-icon-roles.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-settings-hover.png b/gadjo/static/css/small-icon-settings-hover.png deleted file mode 100644 index 8ed8c68..0000000 Binary files a/gadjo/static/css/small-icon-settings-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-settings.png b/gadjo/static/css/small-icon-settings.png deleted file mode 100644 index d2b551d..0000000 Binary files a/gadjo/static/css/small-icon-settings.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-submission-hover.png b/gadjo/static/css/small-icon-submission-hover.png deleted file mode 100644 index 211cffa..0000000 Binary files a/gadjo/static/css/small-icon-submission-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-submission.png b/gadjo/static/css/small-icon-submission.png deleted file mode 100644 index 1d4f087..0000000 Binary files a/gadjo/static/css/small-icon-submission.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-users-hover.png b/gadjo/static/css/small-icon-users-hover.png deleted file mode 100644 index 5221589..0000000 Binary files a/gadjo/static/css/small-icon-users-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-users.png b/gadjo/static/css/small-icon-users.png deleted file mode 100644 index a951404..0000000 Binary files a/gadjo/static/css/small-icon-users.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-workflows-hover.png b/gadjo/static/css/small-icon-workflows-hover.png deleted file mode 100644 index 0e772ca..0000000 Binary files a/gadjo/static/css/small-icon-workflows-hover.png and /dev/null differ diff --git a/gadjo/static/css/small-icon-workflows.png b/gadjo/static/css/small-icon-workflows.png deleted file mode 100644 index c39100e..0000000 Binary files a/gadjo/static/css/small-icon-workflows.png and /dev/null differ diff --git a/icons/add.svg b/icons/add.svg new file mode 100644 index 0000000..2a93cdb --- /dev/null +++ b/icons/add.svg @@ -0,0 +1,81 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/icons/calendar.svg b/icons/calendar.svg new file mode 100644 index 0000000..24ffe7f --- /dev/null +++ b/icons/calendar.svg @@ -0,0 +1,82 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/categories.svg b/icons/categories.svg new file mode 100644 index 0000000..a5ed124 --- /dev/null +++ b/icons/categories.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/icons/clock.svg b/icons/clock.svg new file mode 100644 index 0000000..f9e1dce --- /dev/null +++ b/icons/clock.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/icons/facturier.svg b/icons/facturier.svg new file mode 100644 index 0000000..33874fc --- /dev/null +++ b/icons/facturier.svg @@ -0,0 +1,134 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/forms.svg b/icons/forms.svg new file mode 100644 index 0000000..84d51ef --- /dev/null +++ b/icons/forms.svg @@ -0,0 +1,90 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/gis.svg b/icons/gis.svg new file mode 100644 index 0000000..33156ac --- /dev/null +++ b/icons/gis.svg @@ -0,0 +1,82 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/icons/grid.svg b/icons/grid.svg new file mode 100644 index 0000000..6f4709d --- /dev/null +++ b/icons/grid.svg @@ -0,0 +1,156 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/icons/home.svg b/icons/home.svg new file mode 100644 index 0000000..89d0ab4 --- /dev/null +++ b/icons/home.svg @@ -0,0 +1,144 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + go-home + + + + + + + + + + + + + + + + + + diff --git a/icons/management.svg b/icons/management.svg new file mode 100644 index 0000000..107e240 --- /dev/null +++ b/icons/management.svg @@ -0,0 +1,93 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/organizational-units.svg b/icons/organizational-units.svg new file mode 100644 index 0000000..bb48701 --- /dev/null +++ b/icons/organizational-units.svg @@ -0,0 +1,99 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/icons/password.svg b/icons/password.svg new file mode 100644 index 0000000..71d07f8 --- /dev/null +++ b/icons/password.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/phone.svg b/icons/phone.svg new file mode 100644 index 0000000..c8269f2 --- /dev/null +++ b/icons/phone.svg @@ -0,0 +1,85 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/portal.svg b/icons/portal.svg new file mode 100644 index 0000000..ec3328a --- /dev/null +++ b/icons/portal.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/porte-doc.svg b/icons/porte-doc.svg new file mode 100644 index 0000000..0416acc --- /dev/null +++ b/icons/porte-doc.svg @@ -0,0 +1,132 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/icons/roles.svg b/icons/roles.svg new file mode 100644 index 0000000..84f72fe --- /dev/null +++ b/icons/roles.svg @@ -0,0 +1,111 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/security.svg b/icons/security.svg new file mode 100644 index 0000000..d78c6e9 --- /dev/null +++ b/icons/security.svg @@ -0,0 +1,86 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/services.svg b/icons/services.svg new file mode 100644 index 0000000..627bdf1 --- /dev/null +++ b/icons/services.svg @@ -0,0 +1,86 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/settings.svg b/icons/settings.svg new file mode 100644 index 0000000..78d54d4 --- /dev/null +++ b/icons/settings.svg @@ -0,0 +1,85 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/submission.svg b/icons/submission.svg new file mode 100644 index 0000000..b4df0ac --- /dev/null +++ b/icons/submission.svg @@ -0,0 +1,122 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/users.svg b/icons/users.svg new file mode 100644 index 0000000..5595dae --- /dev/null +++ b/icons/users.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/icons/workflows.svg b/icons/workflows.svg new file mode 100644 index 0000000..7cd2d4e --- /dev/null +++ b/icons/workflows.svg @@ -0,0 +1,86 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/setup.py b/setup.py index cf496be..0479aa8 100644 --- a/setup.py +++ b/setup.py @@ -6,6 +6,12 @@ import glob import re import sys import subprocess +import tempfile + +import xml.etree.ElementTree as ET +import re +from PIL import Image +from PIL import PngImagePlugin from distutils.cmd import Command from setuptools.command.install_lib import install_lib as _install_lib @@ -72,8 +78,79 @@ class compile_translations(Command): sys.stderr.write('!!! Please install Django >= 1.4 to build translations\n') +class build_icons(Command): + description = 'build icons' + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + destpath = 'gadjo/static/css/icons/' + if not os.path.exists(destpath): + os.mkdir(destpath) + variants = { + 'small': {'colour': 'e7e7e7', 'width': '20', + 'css': 'ul#sidepage-menu li a.icon-%(name)s { background-image: url(icons/%(filename)s); }'}, + 'large': {'colour': 'e7e7e7', 'width': '80', + 'css': 'ul.apps #%(name)s a { background-image: url(icons/%(filename)s); }'}, + 'large-hover': {'colour': 'bebebe', 'width': '80', + 'css': 'ul.apps #%(name)s a:hover { background-image: url(icons/%(filename)s); }'}, + } + css_rules = [] + for basepath, dirnames, filenames in os.walk('icons'): + for filename in filenames: + basename = os.path.splitext(filename)[0] + for variant in variants: + dest_filename = '%s.%s.png' % (basename, variant) + destname = os.path.join(destpath, dest_filename) + self.generate(os.path.join(basepath, filename), destname, + **variants.get(variant)) + css = variants.get(variant).get('css') + if css: + css_rules.append(css % {'name': basename, 'filename': dest_filename}) + #print '\n'.join(sorted(css_rules)) + + def generate(self, src, dest, colour, width, **kwargs): + # default values + author = 'GNOME Project' + license = 'Creative Commons Attribution-Share Alike 3.0' + + tree = ET.fromstring(open(src).read().replace('#000000', '#%s' % colour)) + for elem in tree.findall('*'): + if not elem.attrib.get('style'): + elem.attrib['style'] = 'fill:#%s' % colour + for elem in tree.getchildren(): + if elem.tag == '{http://www.w3.org/2000/svg}text' and elem.text.startswith('Created by'): + author = elem.text[len('Created by')+1:] + tree.remove(elem) + for elem in tree.getchildren(): + if elem.tag == '{http://www.w3.org/2000/svg}text' and 'Noun Project' in elem.text: + tree.remove(elem) + f = tempfile.NamedTemporaryFile(suffix='.svg', delete=False) + f.write(ET.tostring(tree)) + f.close() + + subprocess.call(['inkscape', '--without-gui', + '--file', f.name, + '--export-area-drawing', + '--export-area-snap', + '--export-png', dest, + '--export-width', width]) + + # write down licensing info in the png file + meta = PngImagePlugin.PngInfo() + meta.add_text('Licence', license, 0) + png_file = Image.open(dest) + png_file.save(dest, 'PNG', pnginfo=meta) + + class build(_build): - sub_commands = [('compile_translations', None)] + _build.sub_commands + sub_commands = [('compile_translations', None), + ('build_icons', None)] + _build.sub_commands class install_lib(_install_lib): @@ -109,6 +186,7 @@ setup( zip_safe=False, cmdclass={ 'build': build, + 'build_icons': build_icons, 'compile_translations': compile_translations, 'install_lib': install_lib, 'sdist': eo_sdist