Merge branch 'MDL-56341-master' of git://github.com/damyon/moodle
authorAndrew Nicols <andrew@nicols.co.uk>
Mon, 24 Oct 2016 02:11:20 +0000 (10:11 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Mon, 24 Oct 2016 02:11:20 +0000 (10:11 +0800)
1  2 
lib/amd/build/templates.min.js
lib/amd/src/templates.js

index 35733c1,e13f81b..7e4fd5c
Binary files differ
diff --combined lib/amd/src/templates.js
@@@ -237,7 -237,9 +237,9 @@@ define(['core/mustache'
  
          var index = this.requiredStrings.length;
          this.requiredStrings.push({key: key, component: component, param: param});
-         return '{{_s' + index + '}}';
+         // The placeholder must not use {{}} as those can be misinterpreted by the engine.
+         return '[[_s' + index + ']]';
      };
  
      /**
       * @return {String} The treated content.
       */
      Renderer.prototype.treatStringsInContent = function(content, strings) {
-         var pattern = /{{_s\d+}}/,
+         var pattern = /\[\[_s\d+\]\]/,
              treated,
              index,
              strIndex,
                  treated += content.substring(0, index);
                  content = content.substr(index);
                  strIndex = '';
-                 walker = 4;  // 4 is the length of '{{_s'.
+                 walker = 4;  // 4 is the length of '[[_s'.
  
                  // Walk the characters to manually extract the index of the string from the placeholder.
                  char = content.substr(walker, 1);
                      strIndex += char;
                      walker++;
                      char = content.substr(walker, 1);
-                 } while (char != '}');
+                 } while (char != ']');
  
                  // Get the string, add it to the treated result, and remove the placeholder from the content to treat.
                  strFinal = strings[parseInt(strIndex, 10)];
                  if (typeof strFinal === 'undefined') {
-                     Log.debug('Could not find string for pattern {{_s' + strIndex + '}}.');
+                     Log.debug('Could not find string for pattern [[_s' + strIndex + ']].');
                      strFinal = '';
                  }
                  treated += strFinal;
-                 content = content.substr(6 + strIndex.length);  // 6 is the length of the placeholder without the index: '{{_s}}'.
+                 content = content.substr(6 + strIndex.length);  // 6 is the length of the placeholder without the index: '[[_s]]'.
  
                  // Find the next placeholder.
                  index = content.search(pattern);
          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.
           */
          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);
          }
      };
  });