summaryrefslogtreecommitdiff
path: root/lib/extensions/apply_attribute.py
blob: 0d3e30e66fdf6d5c0b089c57164f6326046bf748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Authors: see git history
#
# Copyright (c) 2025 Authors
# Licensed under the GNU GPL version 3.0 or later.  See the file LICENSE for details.

from inkex import Boolean, errormsg

from ..i18n import _
from .base import InkstitchExtension


class ApplyAttribute(InkstitchExtension):
    '''
    Applies a given attribute to all selected elements
    '''
    def __init__(self, *args, **kwargs):
        InkstitchExtension.__init__(self, *args, **kwargs)
        self.arg_parser.add_argument("--notebook")
        self.arg_parser.add_argument("-n", "--namespace", dest="namespace", type=str, default='inkstitch')
        self.arg_parser.add_argument("-k", "--key", dest="key", type=str, default='')
        self.arg_parser.add_argument("-v", "--value", dest="value", type=str, default='')
        self.arg_parser.add_argument("-r", "--remove", dest="remove", type=Boolean, default=False)

    def effect(self):
        self.get_elements()
        if not self.elements:
            errormsg(_("Please select at least one element."))
            return

        if not self.options.key:
            errormsg(_("Please enter the attribute name."))
            return

        key = ''
        if self.options.namespace:
            key = f'{self.options.namespace}:'
        key += self.options.key

        if self.options.remove:
            for element in self.elements:
                element.node.pop(key)
        else:
            if not self.options.value:
                errormsg(_("Please enter a value."))
                return
            for element in self.elements:
                element.node.set(key, self.options.value)