added set_css_class extension

This commit is contained in:
Mario Voigt 2021-10-23 21:49:30 +02:00
parent 3901479ab2
commit b7ac64c308
4 changed files with 82 additions and 1 deletions

View File

@ -34,7 +34,9 @@
<effect>
<object-type>all</object-type>
<effects-menu>
<submenu name="Laser Tools" />
<submenu name="FabLab Chemnitz">
<submenu name="Finger-jointed/Tabbed Boxes"/>
</submenu>
</effects-menu>
</effect>
<script>

View File

@ -0,0 +1,20 @@
[
{
"name": "Set CSS Class On Elements",
"id": "fablabchemnitz.de.set_css_class",
"path": "set_css_class",
"original_name": "Set CSS class on elements",
"original_id": "org.inkscape.stylesheet.set",
"license": "GNU GPL",
"license_url": "https://github.com/monomon/inkscape-set-css-class/blob/master/set_css_class.py",
"comment": "",
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/set_css_class",
"fork_url": "https://github.com/monomon/inkscape-set-css-class",
"documentation_url": "https://stadtfabrikanten.org/display/IFM/Set+CSS+Class+On+Elements",
"inkscape_gallery_url": null,
"main_authors": [
"github.com/monomon",
"github.com/vmario89"
]
}
]

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Set CSS Class On Elements</name>
<id>fablabchemnitz.de.set_css_class</id>
<label>Set a CSS class on the selected elements. Their current inline styles will be removed.</label>
<param name="name" type="string" gui-text="CSS class name:">class1</param>
<param name="clear_styles" type="bool" gui-text="clear inline styling">true</param>
<effect needs-live-preview="false">
<object-type>all</object-type>
<effects-menu>
<submenu name="FabLab Chemnitz">
<submenu name="Various"/>
</submenu>
</effects-menu>
</effect>
<script>
<command location="inx" interpreter="python">set_css_class.py</command>
</script>
</inkscape-extension>

View File

@ -0,0 +1,40 @@
#!/usr/bin/env python3
"""
Sets a css class on selected elements, while optionally removing the elements' styling.
If inline styles are not removed, the css class might not have effect.
Inspired by MergeStyles (and best used together with it).
"""
__author__ = "Mois Moshev"
__email__ = "mois@monomon.me"
__copyright__ = "Copyright (C) 2017 Mois Moshev"
__license__ = "GPL"
import inkex
import sys
class SetCSSClass(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument("--name", help="Name of css class to apply")
pars.add_argument("--clear_styles", type=inkex.Boolean, default=True, help="Name of css class to apply")
def effect(self):
newclass = self.options.name
elements = self.svg.selected.values()
for el in elements:
current_classes = el.attrib.has_key("class") and el.attrib["class"].split() or []
if newclass not in current_classes:
current_classes.append(newclass)
if self.options.clear_styles:
el.attrib["style"] = ""
el.attrib["class"] = " ".join(current_classes)
if __name__ == "__main__":
SetCSSClass().run()