-
Notifications
You must be signed in to change notification settings - Fork 0
/
ff.json
1 lines (1 loc) · 6.12 KB
/
ff.json
1
"function ffSelector() {\nvar ff = {};\n\n/* Shortcuts code */\nff.defineShortcut = function(key, value) {\n\n var DEFINE = function(constant, value) {\n if(window[constant]===undefined) {\n window[constant] = value\n } else {\n throw new ReferenceError(constant + \" already defined\");\n }\n }\n\n DEFINE(key, value);\n};\n\nff.activateShortcuts = function() {\n var wrapQS=function(selector) {\n return document.querySelector(selector)\n }\n\n var wrapQSA=function(selector) {\n return document.querySelectorAll(selector)\n }\n\n var wrapAEL=function(elemnt, event, value) {\n elemnt.addEventListener(event, value);\n }\n\n ff.defineShortcut(\"$\", wrapQS);\n ff.defineShortcut(\"$$\", wrapQSA);\n ff.defineShortcut(\"ael\", wrapAEL);\n\n ff.activatedShortcuts = true;\n return true;\n};\n/* End Shortcuts Code ***/\n\n\n\n\n\n/*** Router code */\nff.router = {};\nff.routes = {};\n\nfunction detectInitialUrl() {\n if(window.location.hash) {\n var route = window.location.hash.substr(1);\n var routeFound = false;\n for(var i = 0; i < ff.routes.amount; ++i) {\n if (route == ff.routes[\"route\"+(i+1)].name) {\n routeFound = true;\n\t(ff.routes[\"route\"+(i+1)].action)();\n }\n }\n if (!routeFound) {\n (ff.routes.routeDefault.action)();\n }\n }\n}\n\nfunction changeRoute(e) {\n var route = window.location.hash.substr(1);\n var routeFound = false;\n\n for(var i = 0; i < ff.routes.amount; ++i) {\n if (route == ff.routes[\"route\"+(i+1)].name) {\n routeFound = true;\n (ff.routes[\"route\"+(i+1)].action)();\n }\n }\n \n if (!routeFound) {\n (ff.routes.routeDefault.action)();\n }\n}\n\n\nff.router.start = function() {\n detectInitialUrl();\n window.addEventListener(\"popstate\", function(e) { \n changeRoute(e);\n });\n};\n/* End Router Code */\n\n\n\n\n\n/* Mustache Sintax */\nff.mustache = {};\nff.getMustacheSintax = function() {\n\n function htmlEntities(string) {\n var a = document.createTextNode(string);\n var b = document.createElement('pre');\n b.appendChild(a);\n return b.innerHTML;\n }\n\n function removeSpaces(text) {\n while(/\\ /gim.test(text)) {\n text = text.replace(/\\ /, \"\");\n }\n return text;\n }\n\n function tokenizer(tag) {\n var tokens = [];\n for(var i = 0, tmp = \"\", tmp2 = \"\", tmp3 = \"\"; i < tag.length; ++i) {\n\tif(tag[i] != \" \") {\n\t if(tag[i] == \"{\") {\n tmp += \"{\";\n\t } else if (tag[i] == \"}\") {\n\t tmp3 += \"}\";\n\t } else {\n\t tmp2 += tag[i];\n\t }\n\t}\n }\n tokens.push(tmp);\n tokens.push(tmp2);\n tokens.push(tmp3);\n return tokens;\n }\n\t\n\n var all = document.querySelector(\"html\");\n var mustache = [];\n var tmp = all.innerHTML.match(/{{*\\s*\\w+\\s*}}*/g);\n \n mustache = (tmp + \"\").split(\",\");\n \n for(var i = 0; i < mustache.length; ++i) {\n var aux = tokenizer(mustache[i]);\n \n if (ff.mustache[aux[1]]) {\n\tif (aux[0].length > 2) {\n\t var tmpReg = new RegExp(\"{{{\\\\s*\" + aux[1] + \"\\\\s*}}}\", \"\");\n\t all.innerHTML = all.innerHTML.replace(tmpReg, ff.mustache[aux[1]]);\n \n\t} else {\n var tmpReg = new RegExp(\"{{\\\\s*\" + aux[1] + \"\\\\s*}}\", \"\");\n\t all.innerHTML = all.innerHTML.replace(tmpReg, htmlEntities(ff.mustache[aux[1]]));\n\t}\n }\n }\n }\n\n/* End Mustache Sintax ***/\n\n\n\n\n\n\n/*** Unknown Tags Code */\nff.getUnknownTags = function() {\n var unknownTags = {};\n ff._getUnknownTags = function() {\n var all = document.querySelectorAll(\"*\");\n for(var i = 0; i < all.length; ++i) {\n if(/unknown/gim.test(all[i])) {\n var elementName = all[i].outerHTML.substr(1, all[i].outerHTML.indexOf(\">\")-1);\n unknownTags[elementName+\"\"] = all[i];\n }\n }\n\n var userTemplates = Object.keys(ff.customTags);\n var userTags = Object.keys(unknownTags);\n for(var i = 0; i < userTags.length; ++i) { \n for(var j = 0; j < userTemplates.length; ++j) {\n\tif (userTags[i].toUpperCase() == userTemplates[j].toUpperCase()) {\n\t var docTags = document.querySelectorAll(userTags[i]);\n\t for(var k = 0; k < docTags.length; ++k) {\n\t if(/<!--preserveInner-->/.test(ff.customTags[userTemplates[j]])) {\n var inner = docTags[k].innerHTML;\n\t docTags[k].innerHTML = ff.customTags[userTemplates[j]].replace(/<!--preserveInner-->/, inner);\n\t } else {\n docTags[k].innerHTML = ff.customTags[userTemplates[j]];\n\t }\n\t }\n\t}\n }\n }\n }\n ff._getUnknownTags();\n}\n/* End Unknown Tags Code ***/\n\n\n/*** Utils Code */\nff._GET = function(url, callback) {\n var peticion = new XMLHttpRequest();\n peticion.open(\"GET\", url , true);\n peticion.send();\n peticion.onreadystatechange = function() {\n if (peticion.readyState == 4) {\n if (peticion.status == 0 || peticion.status == 200) {\n callback(peticion.responseText);\n }\n }\n } \n}\n/* End Utils Code ***/\n\n\nff._insertHTML = function(element, attribute, code) { \n element[attribute] = code; \n var scripts = element.querySelectorAll(\"script\"); \n for(var i = 0; i < scripts.length; ++i) { \n eval(scripts[i].text); \n }\n} \n\n\n/*** Custom Tags Code */\nff.getCustomTags = function() {\n\n var customTags = {};\n ff._getCustomTags = function() {\n var all = document.querySelectorAll(\"*\");\n for(var i = 0; i < all.length; ++i) {\n if(/object\\ htmlelement/gim.test(all[i])) {\n var elementName = all[i].outerHTML.substr(1, all[i].outerHTML.indexOf(\">\")-1);\n\tif(/\\-/.test(elementName)) {\n customTags[elementName+\"\"] = all[i];\n\t}\n }\n }\n }\n ff._getCustomTags();\n\n var userTags = Object.keys(customTags);\n userTags.forEach(function(element) {\n ff._GET(\"./\"+element.replace(\"-\",\"\")+\".ff\", function(resp) {\n var currentTag = document.querySelectorAll(element);\n for(var i = 0; i < currentTag.length; ++i) {\n ff._insertHTML(currentTag[i], \"innerHTML\", resp);\n\tgetMustacheSintax();\n }\n });\n });\n}\n/* End Custom Tags Code ***/\nreturn ff;\n}"