chiark / gitweb /
m.images: add outer <div> with all classes if the image has a target.
authorVladimír Vondruš <mosra@centrum.cz>
Mon, 11 Sep 2017 15:18:30 +0000 (17:18 +0200)
committerVladimír Vondruš <mosra@centrum.cz>
Thu, 14 Sep 2017 22:11:11 +0000 (00:11 +0200)
To match the expectations of m.css.

pelican-plugins/m/images.py

index fe9d1c2837ceb101daeb3ad542ea8186767867e0..db12467d45ed77973d0d7ea0a593559da93daef0 100644 (file)
@@ -30,6 +30,8 @@ class Image(Directive):
     -   the align, scale, width, height options removed (handled better by
         m.css)
     -   .m-image CSS class added
+    -   adding a outer container for clickable image to make the clickable area
+        cover only the image
     """
 
     required_arguments = 1
@@ -40,6 +42,8 @@ class Image(Directive):
                    'class': directives.class_option,
                    'target': directives.unchanged_required}
 
+    image_class = 'm-image'
+
     def run(self):
         messages = []
         reference = directives.uri(self.arguments[0])
@@ -63,16 +67,26 @@ class Image(Directive):
                 messages.append(data)       # data is a system message
             del self.options['target']
 
-        # Add some sane default class to the image
+        # Remove the classes from the image element, will be added either to it
+        # or to the wrapping element later
         set_classes(self.options)
-        self.options.setdefault('classes', []).append('m-image')
-
+        classes = self.options.get('classes', [])
+        if 'classes' in self.options: del self.options['classes']
         image_node = nodes.image(self.block_text, **self.options)
+
         self.add_name(image_node)
         if reference_node:
-            reference_node += image_node
-            return messages + [reference_node]
+            if self.image_class:
+                container_node = nodes.container()
+                container_node['classes'] += [self.image_class] + classes
+                reference_node += image_node
+                container_node += reference_node
+                return messages + [container_node]
+            else:
+                reference_node += image_node
+                return messages + [reference_node]
         else:
+            if self.image_class: image_node['classes'] += [self.image_class] + classes
             return messages + [image_node]
 
 class ImageGrid(rst.Directive):