Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 67 additions & 68 deletions _app/_js/utils/sidebar.js
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
//Guides sidebar
function isGuide(){
function isGuide() {
var guideElement = document.getElementsByClassName("docs-guide");
return (guideElement.length > 0);
}

function isSupport(){
function isSupport() {
var supportElement = document.getElementsByClassName("docs-support");
return (supportElement.length > 0);
}

function isReference(){
function isReference() {
var referenceElement = document.getElementsByClassName("docs-reference");
return (referenceElement.length > 0);
}

function isOverview(){
function isOverview() {
var overviewElement = document.getElementsByClassName("docs-overview");
return (overviewElement.length > 0);
}

function isReferenceImported(){
function isReferenceImported() {
var referenceElement = document.getElementsByClassName("content-reference-imported");
return (referenceElement.length > 0);
}

function getSidebar(){
function getSidebar() {
var sidebar = document.getElementsByClassName("js-sidebar");
return sidebar[0];
}

function getSidebarInner(){
function getSidebarInner() {
var sidebar = document.getElementsByClassName("js-sidebar-inner");
return sidebar[0];
}

function getSelectedElement(){
function getSelectedElement() {
var selectedElement = getSidebar().getElementsByClassName("js-selectedElement");
return selectedElement[0];
}

function createLinkElement(classes, linkURL, text){
function createLinkElement(classes, linkURL, text) {
var element = document.createElement("A");
element.className = classes;
element.href = linkURL;
Expand All @@ -49,44 +49,44 @@ function createLinkElement(classes, linkURL, text){
return element;
}

function createListElement(child){
function createListElement(child) {
var element = document.createElement("LI");
element.classList.add("one-line--ellipsis")
element.appendChild(child);
return element;
}

function generateSubtitles(tag){
function generateSubtitles(tag) {
var subtitles = document.getElementsByTagName(tag);
var ulSubtitles = document.createElement("UL");
for(i=0; i < subtitles.length; i++){
for (i = 0; i < subtitles.length; i++) {
var link = createLinkElement("text is-small is-txtBaseGrey u-lspace--16 js-listElement", "#" + subtitles[i].id, subtitles[i].textContent);
var listElement = createListElement(link);
ulSubtitles.appendChild(listElement);
}
return ulSubtitles;
}

function addSubelementsSideBar(){
function addSubelementsSideBar() {
var subtitlesList = generateSubtitles("h3");
var list = getSelectedElement().parentElement;
list.appendChild(subtitlesList);
}

function removeClassFromElements(elements, className){
for(i = 0; i < elements.length; i++){
function removeClassFromElements(elements, className) {
for (i = 0; i < elements.length; i++) {
elements[i].classList.remove(className);
}
}

function currentSection(selectors){
function currentSection(selectors) {
var subtitles = getSubtitles(selectors);
var elem = null;
for(i = 0; i < subtitles.length; i++){
for (i = 0; i < subtitles.length; i++) {
elem = subtitles[i];
if(subtitles[i].getBoundingClientRect().top > 200){
if(i > 0)
elem = subtitles[i-1];
if (subtitles[i].getBoundingClientRect().top > 200) {
if (i > 0)
elem = subtitles[i - 1];
else
elem = subtitles[0];
break;
Expand All @@ -95,14 +95,14 @@ function currentSection(selectors){
return elem;
}

function selectElement(selectors){
function selectElement(selectors) {
var section = currentSection(selectors);
if(!section)
if (!section)
return null;
var elemToBold = document.querySelectorAll("a[href='#" + section.id + "']");
if(!elemToBold[0])
if (!elemToBold[0])
return null;
if(!elemToBold[0].classList.contains("is-semibold-selected")){
if (!elemToBold[0].classList.contains("is-semibold-selected")) {
elements = document.getElementsByClassName("js-listElement");
removeClassFromElements(elements, "is-semibold-selected");
}
Expand All @@ -111,38 +111,38 @@ function selectElement(selectors){

function getSubtitles(selectors) {
var subtitles = [];
for(i = 0; i < selectors.length; i++){
for (i = 0; i < selectors.length; i++) {
subtitles.push(getArrayFromSelector(selectors[i]))
}
return [].concat.apply([], subtitles)
}

function getArrayFromSelector(selector) {
//get the NodeList and transform it into an array
return Array.prototype.slice.call(document.querySelectorAll(selector));
//get the NodeList and transform it into an array
return Array.prototype.slice.call(document.querySelectorAll(selector));
}

function syncronizeSidebarScroll(element) {
if (element) {
var topPos = element.offsetTop - 200 ;
var sidebarInner$ = getSidebarInner();
if (sidebarInner$) {
sidebarInner$.scrollTop = topPos;
}
var topPos = element.offsetTop - 200;
var sidebarInner$ = getSidebarInner();

if (sidebarInner$) {
sidebarInner$.scrollTop = topPos;
}
}
}

// Open collapsed block when hash or when clicking sidebar item
function openReferenceBlock(hash) {
var selectedBlock = document.getElementById(hash.replace('#',''));
elements = document.getElementsByClassName("wrap-block");
removeClassFromElements(elements, "is-active");
selectedBlock.closest('.wrap-block').classList.add("is-active")
var selectedBlock = document.getElementById(hash.replace('#', ''));
elements = document.getElementsByClassName("wrap-block");
removeClassFromElements(elements, "is-active");
selectedBlock.closest('.wrap-block').classList.add("is-active")
}

//Fixed Sidebar
if (isGuide() || isSupport() || isReference()){
if (isGuide() ||  isSupport() || isReference()) {
window.addEventListener('scroll', function(e) {
var sidebar = getSidebar();
if (isReference() && !isReferenceImported()) {
Expand All @@ -151,14 +151,13 @@ if (isGuide() || isSupport() || isReference()){
selectElement(["h3"]);
}

if(sidebar) {
if(sidebar.getBoundingClientRect().top < 0) {
if (sidebar) {
if (sidebar.getBoundingClientRect().top < 0) {
sidebar.firstElementChild.classList.add('fixed-top');
sidebar.firstElementChild.style.top = (sidebar.getBoundingClientRect().bottom < window.innerHeight + 64)
? (sidebar.getBoundingClientRect().bottom - window.innerHeight) + 'px'
: '';
}
else {
sidebar.firstElementChild.style.top = (sidebar.getBoundingClientRect().bottom < window.innerHeight + 64) ?
(sidebar.getBoundingClientRect().bottom - window.innerHeight) + 'px' :
'';
} else {
sidebar.firstElementChild.classList.remove('fixed-top');
}
}
Expand All @@ -176,9 +175,9 @@ if (isReference() && !isReferenceImported()) {

//Open collapsed block when clicking sidebar item
var listElements = document.getElementsByClassName('js-listElement');
for(var i =0; i < listElements.length; i++) {
listElements[i].onclick = function() {
openReferenceBlock(this.getAttribute('href'));
for (var i = 0; i < listElements.length; i++) {
listElements[i].onclick = function() {
openReferenceBlock(this.getAttribute('href'));
};
}
//Open collapsed block when hash
Expand All @@ -190,48 +189,48 @@ if (isReference() && !isReferenceImported()) {
}

//Add tip classes
function getStrongElementsByText(text){
function getStrongElementsByText(text) {
var strong = document.getElementsByTagName("strong");
var tipStrong = [];
for(i = 0; i < strong.length; i++){
if(strong[i].textContent == text){
for (i = 0; i < strong.length; i++) {
if (strong[i].textContent == text) {
tipStrong.push(strong[i]);
}
}
return tipStrong;
}

function addTipClass(strongElement, classToAdd){
function addTipClass(strongElement, classToAdd) {
strongElement.parentElement.classList.add(classToAdd);
strongElement.parentElement.removeChild(strongElement);
}

function addClassByText(textToFind, classToAdd){
function addClassByText(textToFind, classToAdd) {
var tips = getStrongElementsByText(textToFind);
for(i = 0; i < tips.length; i++){
for (i = 0; i < tips.length; i++) {
addTipClass(tips[i], classToAdd);
}
}

if(isGuide() || isSupport() || isOverview()){
if (isGuide() || isSupport() || isOverview()) {
addClassByText("Tip:", "Content-tip");
addClassByText("Note:", "Content-note");
addClassByText("Warning:", "Content-warning");
addClassByText("Warning:", "Content-alert");
if(!isOverview()) {
if (!isOverview()) {
addSubelementsSideBar();
}
}

//Examples selected item

function putActiveElement(){
function putActiveElement() {
var selectedElement = document.querySelectorAll(".js-exampletab[href='" + window.location.hash + "']");
if(selectedElement.length > 0)
if (selectedElement.length > 0)
selectedElement[0].classList.add("is-semibold");
}

window.addEventListener("hashchange", function(e){
window.addEventListener("hashchange", function(e) {
var elements = document.getElementsByClassName("js-exampletab");
removeClassFromElements(elements, "is-semibold");
putActiveElement()
Expand All @@ -241,16 +240,16 @@ putActiveElement()

//Fixes tables

function addDivChildsWrapper(element){
function addDivChildsWrapper(element) {
var kids = element.innerHTML;
var wrapper = '<div class="u-horizontal-scroll">' + kids + "</div>";
element.innerHTML = wrapper;
}

function wrapElementInDiv(element){
function wrapElementInDiv(element) {
var parent = element.parentElement;
var newDiv = document.createElement("div");
newDiv.classList.add("u-horizontal-scroll");
newDiv.classList.add("u-horizontal-scroll", "u-vertical-scroll");
var clone = element.cloneNode(true);
newDiv.appendChild(clone);
parent.insertBefore(newDiv, element);
Expand All @@ -259,17 +258,17 @@ function wrapElementInDiv(element){

var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

if(isFirefox && isGuide()){
if (isFirefox && isGuide()) {
var td = document.getElementsByTagName("td");
for(i=0; i<td.length; i++){
if(td[i].getElementsByTagName("code").length > 0)
for (i = 0; i < td.length; i++) {
if (td[i].getElementsByTagName("code").length > 0)
addDivChildsWrapper(td[i]);
}
}

if(isGuide()){
if (isGuide()) {
var tables = document.getElementsByTagName("table");
for(i=0; i<tables.length; i++){
for (i = 0; i < tables.length; i++) {
wrapElementInDiv(tables[i]);
}
}
}
2 changes: 1 addition & 1 deletion grunt-tasks/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ module.exports = {
data: '/_data',
path: '/cartoframes',
tag: 'v1.0b5',
branch: '',
branch: 'discovery_financial',
releases: ['v1.0b5', 'v0.10.1'],
version: '' // empty if current
},
Expand Down