def get_icon_kwargs(name, *args, **kwargs): """ Build the kwargs for the icon function based on args and kwargs of the template tag """ # Get kwargs from settings, name will always be set icon_kwargs = get_icon_kwargs_from_settings(name) # Remember the name, we do not allow this to be overwritten remember_name = icon_kwargs["name"] # Update with kwargs icon_kwargs.update(kwargs) # Merge args with extra_classes extra_classes = merge_css_list(args, kwargs.get("extra_classes", "")) if extra_classes: icon_kwargs["extra_classes"] = extra_classes # Check the name assert (icon_kwargs["name"] == remember_name ), "Overwriting the icon name is not allowed" # Return the dict return icon_kwargs
def test_merge_css_list(self): # No arguments results in an empty list self.assertEqual(merge_css_list(), []) # Falsy arguments are ignores self.assertEqual(merge_css_list(None, False, ""), []) # Spaces don't matter without any other results self.assertEqual(merge_css_list(" "), []) # Spaces don't matter with other classes self.assertEqual(merge_css_list(" foo "), ["foo"]) # Spaces don't matter with other classes self.assertEqual(merge_css_list(" foo ", "bar"), ["foo", "bar"]) # Space separated classes are split self.assertEqual(merge_css_list("foo bar"), ["foo", "bar"]) # Nested lists are fine self.assertEqual(merge_css_list(["foo", "bar"], "end"), ["foo", "bar", "end"]) # Duplicates are removed and first time class is encountered determines order self.assertEqual(merge_css_list(["foo", "bar"], "foo"), ["foo", "bar"]) # Tabs and newlines are valid whitespace self.assertEqual(merge_css_list("foo\nbar\tend"), ["foo", "bar", "end"]) # Let's go crazy self.assertEqual( merge_css_list( "foo\nbar\tend", ["foo", ["bar", "bar", ["foo bar end"]]], "\n\t foo Foo", [[], [], [["Foo-Bar-End"]]], ("end", "bar", "foo", "Foo"), ), ["foo", "bar", "end", "Foo", "Foo-Bar-End"], ) self.assertEqual( merge_css_text( "foo\nbar\tend", ["foo", ["bar", "bar", ["foo bar end"]]], "\n\t foo Foo", [[], [], [["Foo-Bar-End"]]], ("end", "bar", "foo", "Foo"), ), "foo bar end Foo Foo-Bar-End", )
def test_merge_css_list(self): # No arguments results in an empty list self.assertEqual( merge_css_list(), [], ) # Falsy arguments are ignores self.assertEqual( merge_css_list(None, False, ''), [], ) # Spaces don't matter without any other results self.assertEqual( merge_css_list(' '), [], ) # Spaces don't matter with other classes self.assertEqual( merge_css_list(' foo '), ['foo'], ) # Spaces don't matter with other classes self.assertEqual( merge_css_list(' foo ', 'bar'), ['foo', 'bar'], ) # Space separated classes are split self.assertEqual( merge_css_list('foo bar'), ['foo', 'bar'], ) # Nested lists are fine self.assertEqual( merge_css_list(['foo', 'bar'], 'end'), ['foo', 'bar', 'end'], ) # Duplicates are removed and first time class is encountered determines order self.assertEqual( merge_css_list(['foo', 'bar'], 'foo'), ['foo', 'bar'], ) # Tabs and newlines are valid whitespace self.assertEqual( merge_css_list('foo\nbar\tend'), ['foo', 'bar', 'end'], ) # Let's go crazy self.assertEqual( merge_css_list( 'foo\nbar\tend', ['foo', ['bar', 'bar', ['foo bar end']]], '\n\t foo Foo', [[], [], [['Foo-Bar-End']]], ('end', 'bar', 'foo', 'Foo'), ), ['foo', 'bar', 'end', 'Foo', 'Foo-Bar-End'], ) self.assertEqual( merge_css_text( 'foo\nbar\tend', ['foo', ['bar', 'bar', ['foo bar end']]], '\n\t foo Foo', [[], [], [['Foo-Bar-End']]], ('end', 'bar', 'foo', 'Foo'), ), 'foo bar end Foo Foo-Bar-End', )
def get_css_classes(self): """Return list of all CSS classes for this icon.""" return merge_css_list(self.get_class(), self.get_extra_classes())
def get_extra_classes(self): """Return list of other classes for this icon.""" return merge_css_list(self.kwargs.get("extra_classes", None))
def get_css_classes(self): """ List of class and extra classes """ return merge_css_list(self.get_class(), self.get_extra_classes())
def get_extra_classes(self): """ List of other classes """ return merge_css_list(self.kwargs.get("extra_classes", None))