From d39458d53bf34d938a1c2236e592fb95ebd8e315 Mon Sep 17 00:00:00 2001 From: Justin Georgi Date: Sun, 17 May 2026 11:16:19 -0700 Subject: [PATCH] Create basic content function Signed-off-by: Justin Georgi --- extension.json | 26 ++++--- includes/AnatImageHandler.php | 63 --------------- includes/AnatImageHooks.php | 77 ------------------- includes/AnnotationContent.php | 32 ++++++++ ...nsformOutput.php => AnnotationHandler.php} | 76 +++++++++--------- includes/AnnotationHooks.php | 33 ++++++++ 6 files changed, 115 insertions(+), 192 deletions(-) delete mode 100644 includes/AnatImageHandler.php delete mode 100644 includes/AnatImageHooks.php create mode 100644 includes/AnnotationContent.php rename includes/{AnatImageTransformOutput.php => AnnotationHandler.php} (63%) create mode 100644 includes/AnnotationHooks.php diff --git a/extension.json b/extension.json index 6505292..5dda34f 100644 --- a/extension.json +++ b/extension.json @@ -1,8 +1,8 @@ { - "name": "AnatImageViewer", + "name": "AnnotatedImages", "author": "Justin Georgi", "url": "https://gitea.azgeorgis.net/jgeorgi/AnatImageViewer", - "description": "This extension allows the creation of .an pages in the Files namespace which will be annotated images.", + "description": "This extension allows the creation of pages in the Annotation namespace which will create annotated images.", "version": "0.0.1", "license-name": "MIT", "type": "media", @@ -12,23 +12,27 @@ "id": 2218, "constant": "NS_AV_ANNOT", "name": "Annotation", - "protection": "annotations-edit" - }, + "protection": "annotations-edit", + "subpages": false, + "content": true, + "defaultcontentmodel": "annotation" + }, { "id": 2219, "constant": "NS_AV_ANNOT_TALK", - "name": "Annotation_talk" - } + "name": "Annotation_talk", + "subpages": true, + "content": false, + "defaultcontentmodel": "wikitext" + } ], + "callback": "MediaWiki\\Extension\\AnatImageViewer\\AnnotationHooks::registrationCallback", "AutoloadNamespaces": { "MediaWiki\\Extension\\AnatImageViewer\\": "includes/" }, - "MediaHandlers": { - "image/annotation": "MediaWiki\\Extension\\AnatImageViewer\\AnatImageHandler" + "ContentHandlers": { + "annotation": "MediaWiki\\Extension\\AnatImageViewer\\AnnotationHandler" }, "Hooks": { - "MimeMagicInit": "MediaWiki\\Extension\\AnatImageViewer\\AnatImageHooks::onMimeMagicInit", - "MimeMagicImproveFromExtension": "MediaWiki\\Extension\\AnatImageViewer\\AnatImageHooks::onMimeMagicImproveFromExtension", - "ParserFirstCallInit": "MediaWiki\\Extension\\AnatImageViewer\\AnatImageHooks::onParserFirstCallInit" } } \ No newline at end of file diff --git a/includes/AnatImageHandler.php b/includes/AnatImageHandler.php deleted file mode 100644 index 6c9eb32..0000000 --- a/includes/AnatImageHandler.php +++ /dev/null @@ -1,63 +0,0 @@ -validateParam() - * @param int $flags A bitfield, may contain self::TRANSFORM_LATER - * @return MediaTransformOutput - */ - public function doTransform($image, $dstPath, $dstUrl, $params, $flags = 0) { - return new AnatImageTransformOutput($image, $params); - } - - /** - * Small helper function to display information on the browser console - * - * Usage: - * echo ''; - * - * @param $data information to display - * @param bool $add_script_tags true to put information is inside complete script tag - */ - public static function console_log($data, $add_script_tags = false) { - $command = 'console.log('. json_encode($data, JSON_HEX_TAG).');'; - if ($add_script_tags) { - $command = ''; - } - echo $command; - } -} \ No newline at end of file diff --git a/includes/AnatImageHooks.php b/includes/AnatImageHooks.php deleted file mode 100644 index 58a5197..0000000 --- a/includes/AnatImageHooks.php +++ /dev/null @@ -1,77 +0,0 @@ -addExtraTypes('image/annotation an'); - $mime->addExtraInfo('image/annotation [METAIMAGE]'); - } - - /** - * MWHook: Make sure that an files (fake) get the proper mime assignement on upload - * - * @see https://www.mediawiki.org/wiki/Manual:Hooks/MimeMagicImproveFromExtension - * - * @param MimeAnalyzer $mimeAnalyzer Instance of MW MimeAnalyzer object - * @param string $ext extention of upload file - * @param string &$mime current assigned mime type - */ - public static function onMimeMagicImproveFromExtension( $mimeAnalyzer, $ext, &$mime ) { - if ( $mime !== 'image/annotation' && in_array( $ext, ['an'] ) ) { - $mime = 'image/annotation'; - } - } - - /** - * MWHook: Called when the parser initializes for the first time - * - * @param Parser $parser: Parser object being initialized - */ - static function onParserFirstCallInit( $parser ) { - $parser->setHook('anconfig', array( __CLASS__, 'renderConfigTag')); - } - - /** - * Render the config toml in a
 tag
-     * 
-     * @param $input The text inside the custom tag
-     * @param array $args Any attributes given in the tag
-     * @param Parser $parser The parser object
-     * @param PPFrame $frame The parent frame calling the parser
-     * @return string HTML string of output
-     */
-    static function renderConfigTag( $input, array $args, $parser, $frame ) {
-		return '
' . $input . '
'; - } - - /** - * Small helper function to display information on the browser console - * - * Usage: - * echo ''; - * - * @param $data information to display - * @param bool $add_script_tags true to put information is inside complete script tag - */ - public static function console_log($data, $add_script_tags = false) { - $command = 'console.log('. json_encode($data, JSON_HEX_TAG).');'; - if ($add_script_tags) { - $command = ''; - } - echo $command; - } -} \ No newline at end of file diff --git a/includes/AnnotationContent.php b/includes/AnnotationContent.php new file mode 100644 index 0000000..ae8f492 --- /dev/null +++ b/includes/AnnotationContent.php @@ -0,0 +1,32 @@ +file = $file; - $this->parameters = $parameters; - self::console_log($parameters, true); +class AnnotationHandler extends TextContentHandler { + private const ANNOT_VERSION = '0.1'; + + public function __construct( $modelId = 'annotation' ) { + parent::__construct( $modelId, [ CONTENT_FORMAT_TEXT ] ); } - /** - * Fetch HTML for this transform output - * - * @access public - * @param array $options Associative array of options. Boolean options - * should be indicated with a value of true for true, and false or - * absent for false. - * alt Alternate text or caption - * desc-link Boolean, show a description link - * file-link Boolean, show a file download link - * custom-url-link Custom URL to link to - * custom-title-link Custom Title object to link to - * valign vertical-align property, if the output is an inline element - * img-class Class applied to the "" tag, if there is such a tag - * preview Boolean, render is being called from a preview page - * - * @return string HTML - */ - public function toHtml($options = []) { - $descriptText = $this->file->getDescriptionText(); - preg_match('/
([\S\s]*?)<\/pre>/',$descriptText,$annotDescript);
-        $metadata = toml_decode($annotDescript[1], true);
+    /*
+	public function serializeContent( Content $content, $format = null ) {
+	}
+
+	public function unserializeContent( $blob, $format = null ) {
+	}
+    */
+    
+	public function makeEmptyContent() {
+		return new AnnotationContent();
+	}
+
+	public function supportsDirectEditing() {
+		return true;
+	}
+
+    protected function fillParserOutput( Content $content, ContentParseParams $cpoParams, ParserOutput &$output	) {
+		// define $html somewhere
+		// e.g. $output->setText( $html );
+
+        self::console_log($content, true);
+
+        $metadata = toml_decode($content->getNativeData(), true);
 
         if (isset($metadata['baseImage'])) {
-            $baseImage = MediaWikiServices::getInstance()->getRepoGroup()->findFile(`File:` . $metadata['baseImage']);
+            $baseImage = MediaWikiServices::getInstance()->getRepoGroup()->findFile('File:' . $metadata['baseImage']);
         } else {
             $baseImage = false;
         }
 
-        return self::buildSvg($metadata,$baseImage);
-	}
+        $output->setText( self::buildSvg($metadata,$baseImage) );
+    }
 
     /**
      * Build annotated SVG from TOML metadata
diff --git a/includes/AnnotationHooks.php b/includes/AnnotationHooks.php
new file mode 100644
index 0000000..bbb1e8a
--- /dev/null
+++ b/includes/AnnotationHooks.php
@@ -0,0 +1,33 @@
+';
+     * self::console_log('logged string');
+     * echo '';
+     * 
+     * @param $data information to display
+     * @param bool $add_script_tags true to put information is inside complete script tag
+     */
+    public static function console_log($data, $add_script_tags = false) {
+        $command = 'console.log('. json_encode($data, JSON_HEX_TAG).');';
+        if ($add_script_tags) {
+            $command = '';
+        }
+        echo $command;
+    }
+}
\ No newline at end of file