MDL 38508 JavaScript: Split out AJAX and non-AJAX help
[moodle.git] / lib / yui / src / tooltip / js / tooltip.js
index 10e9121..fb8c891 100644 (file)
@@ -188,6 +188,19 @@ ATTRS.footerhandler = {
     value: null
 };
 
+/**
+ * The function which handles modifying the URL that was clicked on.
+ *
+ * The default function rewrites '.php' to '_ajax.php'.
+ *
+ * @attribute urlmodifier
+ * @type Function|String|null
+ * @default null
+ */
+ATTRS.urlmodifier = {
+    value: null
+};
+
 /**
  * Set the Y.Cache object to use.
  *
@@ -245,6 +258,9 @@ Y.extend(TOOLTIP, M.core.dialogue, {
         if (!this.get('footerhandler')) {
             this.set('footerhandler', function() {});
         }
+        if (!this.get('urlmodifier')) {
+            this.set('urlmodifier', this.modify_url);
+        }
 
         // Set up the dialogue with initial content.
         this.setAttrs({
@@ -288,7 +304,7 @@ Y.extend(TOOLTIP, M.core.dialogue, {
     /**
      * Display the tooltip for the clicked link.
      *
-     * The anchor for the clicked link is used, additionally appending ajax=1 to the parameters.
+     * The anchor for the clicked link is used.
      *
      * @method display_panel
      * @param {EventFacade} e The event from the clicked link. This is used to determine the clicked URL.
@@ -330,7 +346,8 @@ Y.extend(TOOLTIP, M.core.dialogue, {
         thisevent = this.bb.on('mousedownoutside', this.close_panel, this);
         this.listenevents.push(thisevent);
 
-        ajaxurl = clickedlink.get('href');
+        // Modify the URL as required.
+        ajaxurl = Y.bind(this.get('urlmodifier'), this, clickedlink.get('href'))();
 
         cacheentry = this.get('textcache').retrieve(ajaxurl);
         if (cacheentry) {
@@ -342,10 +359,6 @@ Y.extend(TOOLTIP, M.core.dialogue, {
                 method: 'get',
                 context: this,
                 sync: false,
-                data: {
-                    // We use a slightly different AJAX URL to the one on the anchor to allow non-JS fallback.
-                    ajax: 1
-                },
                 on: {
                     complete: function(tid, response) {
                         this._set_panel_contents(response.responseText, ajaxurl);
@@ -353,7 +366,7 @@ Y.extend(TOOLTIP, M.core.dialogue, {
                 }
             };
 
-            Y.io(clickedlink.get('href'), config);
+            Y.io(ajaxurl, config);
         }
     },
 
@@ -369,10 +382,7 @@ Y.extend(TOOLTIP, M.core.dialogue, {
             }
         } catch (error) {
             this.close_panel();
-            return new M.core.exception({
-                name: error.name,
-                message: "Unable to retrieve the requested content. The following error was returned: " + error.message
-            });
+            return new M.core.exception(error);
         }
 
         // Set the contents using various handlers.
@@ -401,6 +411,10 @@ Y.extend(TOOLTIP, M.core.dialogue, {
         this.set('bodyContent', bodycontent);
     },
 
+    modify_url: function(url) {
+        return url.replace(/\.php\?/, '_ajax.php?');
+    },
+
     close_panel: function(e) {
         // Hide the panel first.
         this.hide();