(position, args)
| 188 | } |
| 189 | |
| 190 | var insertHTML = function(position, args) { |
| 191 | var argsLen = args.length |
| 192 | var contents = args |
| 193 | |
| 194 | // reverse argument list for afterbegin and afterend |
| 195 | if (argsLen > 1 && position.indexOf("after") > -1) { |
| 196 | contents = [] |
| 197 | var i = argsLen |
| 198 | while (i--) { |
| 199 | contents.push(args[i]) |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | for (var i = 0; i < argsLen; i++) { |
| 204 | var content = contents[i] |
| 205 | if (typeof content == "string" || typeof content == "number") { |
| 206 | this.each(function() { |
| 207 | this.insertAdjacentHTML(position, content) |
| 208 | }) |
| 209 | } |
| 210 | else if (typeof content == "function") { |
| 211 | this.each(function(index) { |
| 212 | var callbackValue = content.call(this, index, this.innerHTML) |
| 213 | insertHTML.call(Sprint(this), position, [callbackValue]) |
| 214 | }) |
| 215 | } |
| 216 | else { |
| 217 | var isSprintObj = content instanceof Init |
| 218 | var clonedElements = [] |
| 219 | var elementsToInsert = (function() { |
| 220 | if (isSprintObj) { |
| 221 | return content.get() |
| 222 | } |
| 223 | if (Array.isArray(content)) { |
| 224 | return sanitize(content, true, true) |
| 225 | } |
| 226 | // DOM node |
| 227 | if (content.nodeType) { |
| 228 | return [content] |
| 229 | } |
| 230 | // getElementsByTagName, getElementsByClassName, querySelectorAll |
| 231 | return toArray(content) |
| 232 | }()) |
| 233 | var elementsToInsertLen = elementsToInsert.length |
| 234 | |
| 235 | this.each(function(index) { |
| 236 | /* |
| 237 | * The fragment serves multiple purposes: |
| 238 | * 1) It significantly boosts perf when multiple elements are added. |
| 239 | * 2) It avoids the need for elementsToInsert.reverse() for afterbegin and afterend |
| 240 | * 3) It removes an element from its original position before adding it back, which is |
| 241 | * especially useful for elements not part of the DOM tree. That means it's important even |
| 242 | * when elementsToInsertLen == 1. |
| 243 | */ |
| 244 | var fragment = document.createDocumentFragment() |
| 245 | for (var i = 0; i < elementsToInsertLen; i++) { |
| 246 | var element = elementsToInsert[i] |
| 247 | var elementToInsert |
nothing calls this directly
no test coverage detected