cambrient.fragments = {}; // cache for fragments // private function to set fragments cambrient._setFragment = function(element, fragment, chainFunction, appendFragment) { // unescape text areas fragment = fragment.replace(/text_area/gi, "textarea"); if (element != null) { if (appendFragment) element.innerHTML += fragment; else element.innerHTML = fragment; } if (chainFunction != null && isFunction(chainFunction)) { if (element == null) chainFunction(fragment); else chainFunction(element, fragment); } } /** * Load a fragment using Ajax. A chainFunction can be passed, which will get called after the fragment loads successfully. * The fragments must be stored in a "/fragments" sub-directory */ cambrient.loadFragment = function(elementId, fragment, chainFunction, appendFragment) { var element = null; if (!isObject(elementId)) { element = document.getElementById(elementId); } if (cambrient.fragments[fragment] == null) { cambrient.ajax.request( fragment + '.html', function(reply) { cambrient.fragments[fragment] = reply.responseText; cambrient._setFragment(element, cambrient.fragments[fragment], chainFunction, appendFragment); } ); } else { cambrient._setFragment(element, cambrient.fragments[fragment], chainFunction, appendFragment); } } // Loads a fragment into a variable rather than an element cambrient.loadFragmentVar = function(fragment, chainFunction, appendFragment) { return cambrient.loadFragment(null, fragment, chainFunction, appendFragment); } /** * Append a fragment using Ajax. A chainFunction can be passed, which will get called after the fragment loads successfully. * The fragments must be stored in a "/fragments" sub-directory */ cambrient.appendFragment = function(elementId, fragment, chainFunction){ cambrient.loadFragment(elementId, fragment, chainFunction, true); } /** * Takes a string template and processes it using the provided data, with the Trimpath Template engine. */ cambrient.processTemplate = function(templateString, data) { try { var tpl = TrimPath.parseTemplate(templateString); return tpl.process(data); } catch (e) { cambrient.userMessaging.error(e); } } /** * Converts the ajax reply to a data object, and checks for errors. * @param {Object} ajaxReply */ cambrient.getData = function(ajaxReply) { try { var data = ajaxReply.responseText.evalJSON() ; if (data.error) { throw data.message; } return data; } catch (e) { cambrient.userMessaging.error(e); } return null; } cambrient.unescapeHTML = function(html) { if (navigator.userAgent.toLowerCase().indexOf("chrome") == -1) { var htmlNode = document.createElement("DIV"); htmlNode.innerHTML = html; if (htmlNode.innerText) return htmlNode.innerText; // IE return htmlNode.textContent; // FF } else { return html; //Chrome } }