UNPKG

savvy-js

Version:

Savvy - Style sheet documentation tool

227 lines (188 loc) 5.59 kB
(function(){ 'use strict'; function getLink(entity){ var text ='', href = '', type = '', link = '<a href="#'; text = entity.class || entity.name; if(entity.module){ href += entity.module; } if(entity.submodule){ href += href ? '/' : ''; href += entity.submodule; } if(entity.class){ href += href ? '/' : ''; href += entity.class; href += '?t=class'; } if(entity.name){ type = href ? '?t=submodule' : '?t=module'; href += href ? '/' : ''; href += entity.name; href += type; } link += href; link += '">' + text + '</a>'; return link; } function searchClass(name, moduleName, submoduleName){ var result, submodule, module; function findClass(parent){ if(!parent.classes){ return; } parent.classes.every(function(classObject){ if(classObject.class === name){ result = classObject; return false; } return true; }); } if(submoduleName){ submodule = searchSubmodules(submoduleName, moduleName); if(submodule) { findClass(submodule); } } if(!result && moduleName){ module = searchModule(moduleName); if(module) { findClass(module); } } if(!result && data.classes){ findClass(data); } if(!result){ data.modules.every(function(module){ findClass(module); if(!result && module.submodules) { module.submodules.every(function (submodule) { findClass(submodule); if(result){ return false; } }); } else{ return false; } }); } return result; } function searchSubmodules(name, moduleName){ var result, module; function findSubmodule(parent){ parent.submodules.every(function(submodule){ if(submodule.name === name){ result = submodule; return false; } }); } if(moduleName){ module = searchModule(moduleName); if(module) { findSubmodule(module); } } if(!result){ data.module.every(function(module){ findSubmodule(module); if(result){ return false; } }); } return result; } function searchModule(name){ var result; if(data.modules){ data.modules.every(function(module){ if(module.name === name){ result = module; return false; } }); } return result; } function navigate(hash){ var query, entity, className, moduleName, submoduleName; if(hash[0] === '#'){ hash = hash.substr(1); } query = hash.split('?'); if(query.length > 1){ hash = query[0]; query = query[1]; }else{ query = null; } if(query === 't=class'){ hash = hash.split('/'); if(hash.length === 1){ className = hash[0]; } else if(hash.length === 2){ className = hash[1]; moduleName = hash[0]; } else if(hash.length === 3){ className = hash[2]; moduleName = hash[0]; submoduleName = hash[1]; } entity = searchClass(className, moduleName, submoduleName); if(entity) { app.view.renderClass(entity); } } if(query === 't=submodule'){ hash = hash.split('/'); if(hash.length === 1){ submoduleName = hash[0]; } else if(hash.length === 2){ submoduleName = hash[1]; moduleName = hash[0]; } entity = searchSubmodules(submoduleName, moduleName); if(entity) { app.view.renderSubmodule(entity); } } if(query === 't=module'){ moduleName = hash; entity = searchModule(moduleName); if(entity) { app.view.renderModule(entity); } } } function initNavigation(){ $(window).on('hashchange', function() { navigate(window.location.hash); }); if(window.location.hash){ navigate(window.location.hash); } } app.navigation = { init : initNavigation, getLink : getLink }; }());