Merge branch 'MDL-56341-master' of git://github.com/damyon/moodle
[moodle.git] / lib / amd / src / templates.js
index 0899444..dcf52bf 100644 (file)
@@ -532,6 +532,47 @@ define(['core/mustache',
         return deferred.promise();
     };
 
+    /**
+     * Prepend some HTML to a node and trigger events and fire javascript.
+     *
+     * @method domPrepend
+     * @private
+     * @param {jQuery|String} element - Element or selector to prepend HTML to
+     * @param {String} html - HTML to prepend
+     * @param {String} js - Javascript to run after we prepend the html
+     */
+    var domPrepend = function(element, html, js) {
+        var node = $(element);
+        if (node.length) {
+            // Prepend the html.
+            node.prepend(html);
+            // Run any javascript associated with the new HTML.
+            runTemplateJS(js);
+            // Notify all filters about the new content.
+            event.notifyFilterContentUpdated(node);
+        }
+    };
+
+    /**
+     * Append some HTML to a node and trigger events and fire javascript.
+     *
+     * @method domAppend
+     * @private
+     * @param {jQuery|String} element - Element or selector to append HTML to
+     * @param {String} html - HTML to append
+     * @param {String} js - Javascript to run after we append the html
+     */
+    var domAppend = function(element, html, js) {
+        var node = $(element);
+        if (node.length) {
+            // Append the html.
+            node.append(html);
+            // Run any javascript associated with the new HTML.
+            runTemplateJS(js);
+            // Notify all filters about the new content.
+            event.notifyFilterContentUpdated(node);
+        }
+    };
 
     return /** @alias module:core/templates */ {
         // Public variables and functions.
@@ -584,6 +625,30 @@ define(['core/mustache',
          */
         replaceNode: function(element, newHTML, newJS) {
             domReplace(element, newHTML, newJS, false);
+        },
+
+        /**
+         * Prepend some HTML to a node and trigger events and fire javascript.
+         *
+         * @method prependNodeContents
+         * @param {jQuery|String} element - Element or selector to prepend HTML to
+         * @param {String} html - HTML to prepend
+         * @param {String} js - Javascript to run after we prepend the html
+         */
+        prependNodeContents: function(element, html, js) {
+            domPrepend(element, html, js);
+        },
+
+        /**
+         * Append some HTML to a node and trigger events and fire javascript.
+         *
+         * @method appendNodeContents
+         * @param {jQuery|String} element - Element or selector to append HTML to
+         * @param {String} html - HTML to append
+         * @param {String} js - Javascript to run after we append the html
+         */
+        appendNodeContents: function(element, html, js) {
+            domAppend(element, html, js);
         }
     };
 });