Skip to content

Commit

Permalink
Put groups/tabs logic in its own .js file
Browse files Browse the repository at this point in the history
  • Loading branch information
raboof committed May 11, 2017
1 parent 637831b commit 7f55c0c
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 169 deletions.
171 changes: 171 additions & 0 deletions themes/generic/src/main/assets/js/groups.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
groupChangeListeners = [];

window.groupChanged = function(callback) {
groupChangeListeners.push(callback);
}

$(function() {

// Groups (like 'java' and 'scala') represent groups of 'switchable' content, either in tabs or in regular text.
// The catalog of groups can be defined in the sbt parameters to initialize the group.

var groupCookie = "paradoxGroups";
var cookieTg = getCookie(groupCookie);
var currentGroups = {};

var catalog = {}
var supergroupByGroup = {};


if(cookieTg != "")
currentGroups = JSON.parse(cookieTg);

// http://www.w3schools.com/js/js_cookies.asp
function setCookie(cname,cvalue,exdays) {
if(!exdays) exdays = 365;
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

// http://www.w3schools.com/js/js_cookies.asp
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

$("dl").has("dd > pre").each(function() {
var dl = $(this);
dl.addClass("tabbed");
var dts = dl.find("dt");
dts.each(function(i) {
var dt = $(this);
dt.html("<a href=\"#tab" + i + "\">" + dt.text() + "</a>");
});
var dds = dl.find("dd");
dds.each(function(i) {
var dd = $(this);
dd.hide();
if (dd.find("blockquote").length) {
dd.addClass("has-note");
}
});

// Default to the first tab, for grouped tabs switch again later
switchToTab(dts.first());

dts.first().addClass("first");
dts.last().addClass("last");
});

$(".supergroup").each(function() {
var supergroup = $(this).attr('name').toLowerCase();
var groups = $(this).find(".group");

var current = currentGroups[supergroup];
if (!current) {
current = "group-" + groups.first().text().toLowerCase();
currentGroups[supergroup] = current;
}

catalog[supergroup] = [];

groups.each(function() {
var group = "group-" + $(this).text().toLowerCase();
catalog[supergroup].push(group);
supergroupByGroup[group] = supergroup;
});

switchToGroup(supergroup, current);

$(this).on("change", function() {
switchToGroup(supergroup, this.value);
});
});

$("dl.tabbed dt a").click(function(e){
e.preventDefault();
var currentDt = $(this).parent("dt");
var currentDl = currentDt.parent("dl");

var currentGroup = groupOf(currentDt);

var supergroup = supergroupByGroup[currentGroup]
if (supergroup) {
switchToGroup(supergroup, currentGroup);
} else {
switchToTab(currentDt);
}
});

function switchToGroup(supergroup, group) {
currentGroups[supergroup] = group;
setCookie(groupCookie, JSON.stringify(currentGroups));

// Dropdown switcher:
$("select")
.has("option[value=" + group +"]")
.val(group);

// Inline snippets:
for (var i = 0; i < catalog[supergroup].length; i++) {
var peer = catalog[supergroup][i];
if (peer == group) {
$("span." + group).show();
} else {
$("span." + peer).hide();
}
}

// Tabbed snippets:
$("dl.tabbed").each(function() {
var dl = $(this);
dl.find("dt").each(function() {
var dt = $(this);
if(groupOf(dt) == group) {
switchToTab(dt);
}
});
});

for (var i = 0; i < groupChangeListeners.length; i++) {
groupChangeListeners[i](group, supergroup, catalog);
}
}

function switchToTab(dt) {
var dl = dt.parent("dl");
dl.find(".current").removeClass("current").next("dd").removeClass("current").hide();
dt.addClass("current");
var currentContent = dt.next("dd").addClass("current").show();
dl.css("height", dt.height() + currentContent.height());
}

function groupOf(elem) {
var classAttribute = elem.next("dd").find("pre").attr("class");
if (classAttribute) {
var currentClasses = classAttribute.split(' ');
var regex = new RegExp("^group-.*");
for(var i = 0; i < currentClasses.length; i++) {
if(regex.test(currentClasses[i])) {
return currentClasses[i];
}
}
}

// No class found? Then use the tab title
return "group-" + elem.find('a').text().toLowerCase();
}
});
169 changes: 0 additions & 169 deletions themes/generic/src/main/assets/js/page.js
Original file line number Diff line number Diff line change
@@ -1,171 +1,2 @@
groupChangeListeners = [];

window.groupChanged = function(callback) {
groupChangeListeners.push(callback);
}

$(function() {

// Groups (like 'java' and 'scala') represent groups of 'switchable' content, either in tabs or in regular text.
// The catalog of groups can be defined in the sbt parameters to initialize the group.

var groupCookie = "paradoxGroups";
var cookieTg = getCookie(groupCookie);
var currentGroups = {};

var catalog = {}
var supergroupByGroup = {};


if(cookieTg != "")
currentGroups = JSON.parse(cookieTg);

// http://www.w3schools.com/js/js_cookies.asp
function setCookie(cname,cvalue,exdays) {
if(!exdays) exdays = 365;
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

// http://www.w3schools.com/js/js_cookies.asp
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

$("dl").has("dd > pre").each(function() {
var dl = $(this);
dl.addClass("tabbed");
var dts = dl.find("dt");
dts.each(function(i) {
var dt = $(this);
dt.html("<a href=\"#tab" + i + "\">" + dt.text() + "</a>");
});
var dds = dl.find("dd");
dds.each(function(i) {
var dd = $(this);
dd.hide();
if (dd.find("blockquote").length) {
dd.addClass("has-note");
}
});

// Default to the first tab, for grouped tabs switch again later
switchToTab(dts.first());

dts.first().addClass("first");
dts.last().addClass("last");
});

$(".supergroup").each(function() {
var supergroup = $(this).attr('name').toLowerCase();
var groups = $(this).find(".group");

var current = currentGroups[supergroup];
if (!current) {
current = "group-" + groups.first().text().toLowerCase();
currentGroups[supergroup] = current;
}

catalog[supergroup] = [];

groups.each(function() {
var group = "group-" + $(this).text().toLowerCase();
catalog[supergroup].push(group);
supergroupByGroup[group] = supergroup;
});

switchToGroup(supergroup, current);

$(this).on("change", function() {
switchToGroup(supergroup, this.value);
});
});

$("dl.tabbed dt a").click(function(e){
e.preventDefault();
var currentDt = $(this).parent("dt");
var currentDl = currentDt.parent("dl");

var currentGroup = groupOf(currentDt);

var supergroup = supergroupByGroup[currentGroup]
if (supergroup) {
switchToGroup(supergroup, currentGroup);
} else {
switchToTab(currentDt);
}
});

function switchToGroup(supergroup, group) {
currentGroups[supergroup] = group;
setCookie(groupCookie, JSON.stringify(currentGroups));

// Dropdown switcher:
$("select")
.has("option[value=" + group +"]")
.val(group);

// Inline snippets:
for (var i = 0; i < catalog[supergroup].length; i++) {
var peer = catalog[supergroup][i];
if (peer == group) {
$("span." + group).show();
} else {
$("span." + peer).hide();
}
}

// Tabbed snippets:
$("dl.tabbed").each(function() {
var dl = $(this);
dl.find("dt").each(function() {
var dt = $(this);
if(groupOf(dt) == group) {
switchToTab(dt);
}
});
});

for (var i = 0; i < groupChangeListeners.length; i++) {
groupChangeListeners[i](group, supergroup, catalog);
}
}

function switchToTab(dt) {
var dl = dt.parent("dl");
dl.find(".current").removeClass("current").next("dd").removeClass("current").hide();
dt.addClass("current");
var currentContent = dt.next("dd").addClass("current").show();
dl.css("height", dt.height() + currentContent.height());
}

function groupOf(elem) {
var classAttribute = elem.next("dd").find("pre").attr("class");
if (classAttribute) {
var currentClasses = classAttribute.split(' ');
var regex = new RegExp("^group-.*");
for(var i = 0; i < currentClasses.length; i++) {
if(regex.test(currentClasses[i])) {
return currentClasses[i];
}
}
}

// No class found? Then use the tab title
return "group-" + elem.find('a').text().toLowerCase();
}
});
1 change: 1 addition & 0 deletions themes/generic/src/main/assets/page.st
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<link href="https://fonts.googleapis.com/css?family=Roboto:100normal,100italic,300normal,300italic,400normal,400italic,500normal,500italic,700normal,700italic,900normal,900italicc" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$page.base$lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="$page.base$js/page.js"></script>
<script type="text/javascript" src="$page.base$js/groups.js"></script>
<link rel="stylesheet" type="text/css" href="$page.base$lib/normalize.css/normalize.css"/>
<link rel="stylesheet" type="text/css" href="$page.base$lib/foundation/dist/foundation.min.css"/>
<link rel="stylesheet" type="text/css" href="$page.base$css/page.css"/>
Expand Down

0 comments on commit 7f55c0c

Please sign in to comment.