From f7f7fb6c2b301fc145bf78687261f89e446e89ae Mon Sep 17 00:00:00 2001
From: Andreas Gohr <gohr@cosmocode.de>
Date: Mon, 22 Feb 2016 17:01:24 +0100
Subject: [PATCH] make reuse of mediamanager popup easier

This introduces a mechanism to override what happens when a media item
is selected in the media manager popup by providing a callback name in
the URL. The default implementation just does what
dw_mediamanager.insert did before and calls insertTags()
---
 lib/scripts/media.js | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index 2995addfd..c52226eaa 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -214,14 +214,12 @@ var dw_mediamanager = {
      * @author Pierre Spring <pierre.spring@caillou.ch>
      */
     insert: function (id) {
-        var opts, alignleft, alignright, edid, s;
+        var opts, cb, edid, s;
 
         // set syntax options
         dw_mediamanager.$popup.dialog('close');
 
         opts = '';
-        alignleft = '';
-        alignright = '';
 
         if ({img: 1, swf: 1}[dw_mediamanager.ext] === 1) {
 
@@ -254,16 +252,14 @@ var dw_mediamanager = {
                         }
                     }
                 }
-                if (dw_mediamanager.align !== '1') {
-                    alignleft = dw_mediamanager.align === '2' ? '' : ' ';
-                    alignright = dw_mediamanager.align === '4' ? '' : ' ';
-                }
             }
         }
         edid = String.prototype.match.call(document.location, /&edid=([^&]+)/);
-        opener.insertTags(edid ? edid[1] : 'wiki__text',
-                          '{{'+alignleft+id+opts+alignright+'|','}}','');
+        edid = edid ? edid[1] : 'wiki__text';
+        cb   = String.prototype.match.call(document.location, /&onselect=([^&]+)/);
+        cb   = cb ? cb[1] : 'dw_mediamanager_item_select';
 
+        opener[cb](edid, id, opts, dw_mediamanager.align);
         if(!dw_mediamanager.keepopen) {
             window.close();
         }
@@ -271,6 +267,8 @@ var dw_mediamanager = {
         return false;
     },
 
+
+
     /**
      * Prefills the wikiname.
      *
@@ -921,4 +919,25 @@ var dw_mediamanager = {
     }
 };
 
+/**
+ * Default implementation for the media manager's select action
+ *
+ * Can be overriden with the onselect URL parameter. Is called on the opener context
+ *
+ * @param {string} edid
+ * @param {string} mediaid
+ * @param {string} opts
+ * @param {string} align [none, left, center, right]
+ */
+function dw_mediamanager_item_select(edid, mediaid, opts, align) {
+    var alignleft = '';
+    var alignright = '';
+    if (align !== '1') {
+        alignleft = align === '2' ? '' : ' ';
+        alignright = align === '4' ? '' : ' ';
+    }
+
+    insertTags(edid, '{{' + alignleft + mediaid + opts + alignright + '|', '}}', '');
+}
+
 jQuery(dw_mediamanager.init);
-- 
GitLab