add options object to HtmlHelpers »parseResponse«
This commit is contained in:
parent
39da7d40ec
commit
0f1abf6cd1
@ -3,27 +3,44 @@
|
|||||||
|
|
||||||
window.HtmlHelpers = (function() {
|
window.HtmlHelpers = (function() {
|
||||||
|
|
||||||
function _prefixIds(element) {
|
// `parseResponse` takes a raw HttpClient response and an options object.
|
||||||
var idPrefix = Math.floor(Math.random() * 100000);
|
// Returns an object with `element` being an contextual fragment of the
|
||||||
|
// HTML in the response and `ifPrefix` being the prefix that was used to
|
||||||
|
// "unique-ify" the ids of the received HTML.
|
||||||
|
// Original Response IDs can optionally be kept by adding `originalIds: true`
|
||||||
|
// to the `options` object.
|
||||||
|
function parseResponse(response, options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
return response.text().then(function (responseText) {
|
||||||
|
var docFrag = document.createRange().createContextualFragment(responseText);
|
||||||
|
var idPrefix;
|
||||||
|
if (!options.originalIds) {
|
||||||
|
idPrefix = _getIdPrefix();
|
||||||
|
_prefixIds(docFrag, idPrefix);
|
||||||
|
}
|
||||||
|
return Promise.resolve({ idPrefix: idPrefix, element: docFrag });
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}).catch(function (error) { console.error(error); });
|
||||||
|
}
|
||||||
|
|
||||||
|
function _prefixIds(element, idPrefix) {
|
||||||
var idAttrs = ['id', 'for', 'data-conditional-input', 'data-modal-trigger'];
|
var idAttrs = ['id', 'for', 'data-conditional-input', 'data-modal-trigger'];
|
||||||
|
|
||||||
idAttrs.forEach(function(attr) {
|
idAttrs.forEach(function(attr) {
|
||||||
Array.from(element.querySelectorAll('[' + attr + ']')).forEach(function(input) {
|
Array.from(element.querySelectorAll('[' + attr + ']')).forEach(function(input) {
|
||||||
var value = idPrefix + '__' + input.getAttribute(attr);
|
var value = idPrefix + input.getAttribute(attr);
|
||||||
input.setAttribute(attr, value);
|
input.setAttribute(attr, value);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseResponse(response) {
|
function _getIdPrefix() {
|
||||||
return response.text().then(function (responseText) {
|
// leading 'r'(andom) to overcome the fact that IDs
|
||||||
var docFrag = document.createRange().createContextualFragment(responseText);
|
// starting with a numeric value are not valid in CSS
|
||||||
_prefixIds(docFrag);
|
return 'r' + Math.floor(Math.random() * 100000) + '__';
|
||||||
return Promise.resolve(docFrag);
|
|
||||||
},
|
|
||||||
function (error) {
|
|
||||||
return Promise.reject(error);
|
|
||||||
}).catch(function (error) { console.error(error); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -324,14 +324,14 @@
|
|||||||
headers: headers,
|
headers: headers,
|
||||||
accept: HttpClient.ACCEPT.TEXT_HTML,
|
accept: HttpClient.ACCEPT.TEXT_HTML,
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
return HtmlHelpers.parseResponse(response);
|
return HtmlHelpers.parseResponse(response, { originalIds: true });
|
||||||
}).then(function(responseElement) {
|
}).then(function(response) {
|
||||||
setLocalStorageParameter('currentTableUrl', url.href);
|
setLocalStorageParameter('currentTableUrl', url.href);
|
||||||
// reset table
|
// reset table
|
||||||
removeListeners();
|
removeListeners();
|
||||||
element.classList.remove(ASYNC_TABLE_INITIALIZED_CLASS);
|
element.classList.remove(ASYNC_TABLE_INITIALIZED_CLASS);
|
||||||
// update table with new
|
// update table with new
|
||||||
updateWrapperContents(responseElement);
|
updateWrapperContents(response);
|
||||||
|
|
||||||
if (callback && typeof callback === 'function') {
|
if (callback && typeof callback === 'function') {
|
||||||
callback(element);
|
callback(element);
|
||||||
@ -344,10 +344,10 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateWrapperContents(newHtmlElement) {
|
function updateWrapperContents(response) {
|
||||||
var newPage = document.createElement('div');
|
var newPage = document.createElement('div');
|
||||||
newPage.appendChild(newHtmlElement);
|
newPage.appendChild(response.element);
|
||||||
var newWrapperContents = newPage.querySelector('#' + element.id + '__' + element.id);
|
var newWrapperContents = newPage.querySelector('#' + element.id);
|
||||||
element.innerHTML = newWrapperContents.innerHTML;
|
element.innerHTML = newWrapperContents.innerHTML;
|
||||||
|
|
||||||
if (UtilRegistry) {
|
if (UtilRegistry) {
|
||||||
|
|||||||
@ -128,8 +128,8 @@
|
|||||||
accept: HttpClient.ACCEPT.TEXT_HTML,
|
accept: HttpClient.ACCEPT.TEXT_HTML,
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
return HtmlHelpers.parseResponse(response);
|
return HtmlHelpers.parseResponse(response);
|
||||||
}).then(function(responseElement) {
|
}).then(function(response) {
|
||||||
processResponse(responseElement);
|
processResponse(response.element);
|
||||||
if (isAddCell) {
|
if (isAddCell) {
|
||||||
reFocusAddCell();
|
reFocusAddCell();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -173,8 +173,10 @@
|
|||||||
headers: MODAL_HEADERS,
|
headers: MODAL_HEADERS,
|
||||||
accept: HttpClient.ACCEPT.TEXT_HTML,
|
accept: HttpClient.ACCEPT.TEXT_HTML,
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
return HtmlHelpers.parseResponse(response, element.id);
|
return HtmlHelpers.parseResponse(response);
|
||||||
}).then(processResponse);
|
}).then(function(response) {
|
||||||
|
processResponse(response.element);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function processResponse(responseElement) {
|
function processResponse(responseElement) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user