Skip to content

Commit

Permalink
use json to dynamically build multi selection tree
Browse files Browse the repository at this point in the history
  • Loading branch information
peterorlowsky committed Apr 23, 2018
1 parent f9c701c commit 310aa1b
Show file tree
Hide file tree
Showing 3 changed files with 3,848 additions and 98 deletions.
79 changes: 2 additions & 77 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,80 +1,5 @@
<ul class="nav site-nav" id="level0">
<li><a href=#>Lorem</a></li><!--
-->
<li><a href=#>Ipsum</a></li><!--
-->
<li class=flyout>

<a class=item href=#>Dolor</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id="level1">
<li><a href=#>Foo Bar</a></li>
<li><a href=#>Bar Baz</a></li>
<li class="flyout-alt">

<a href=#>Baz Foo</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id="level2">
<li><a href=#>Foo Bar</a></li>
<li class="flyout-alt">

<a href=#>Baz Foo</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id=level3>
<li class="flyout-alt">

<a href=#>Foo Bar</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id="level4">
<li><a href=#>Bar Baz</a></li>
<li class="flyout-alt">

<a href=#>Baz Foo</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id="level5">
<li><a href=#>Bar Baz</a></li>
<li><a href=#>Baz Foo</a></li>
<li><a href=#>Foo Bar</a></li>
</ul>

</li>
<li><a href=#>Foo Bar</a></li>
<li><a href=#>Foo Bar</a></li>
</ul>

</li>
<li><a href=#>Bar Baz</a></li>
<li class="flyout-alt">

<a href=#>Baz Foo</a>

<!-- Flyout -->
<ul class="flyout-content nav stacked" id="level4">
<li><a href=#>Bar Baz</a></li>
<li><a href=#>Baz Foo</a></li>
</ul>

</li>
</ul>

</li>
<li><a href=#>Bar Baz</a></li>
</ul>

</li>
</ul>

</li><!--
-->
<li><a href=#>Sit</a></li><!--
-->
<li><a href=#>Amet</a></li>
</ul>
<div id="ms-wrapper"></div>
<button disabled onclick="alert(selectedId)">show Table</button>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js"></script>
<link rel="stylesheet" href="styles.css">
Expand Down
84 changes: 63 additions & 21 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,67 @@
order = []
anchors = $$('a')
anchors.addClass('test')
$$('a').addEvent('click', function(event){
recursiveRemoveClass(event.target.parentElement.parentElement, 'clicked')
event.target.parentElement.addClass('clicked')
level = Number(event.target.parentElement.parentElement.id.replace('level', ''))
addProperty(level, event.target.innerHTML)
console.log('your Order: ' + order)
});
function addProperty(level, item){
order[level] = item
//slice the last part of the array
if(level < order.length-1) {
order = order.slice(0, level+1)
}
const locale = 'de'; // 'set to 'en' for english localisation
let selectedId = '';
// run into CORS while serving .json local on Chrome - run in firefox for developent
const jsonRequest = new Request.JSON({
url: 'navigation.json',
headers: {'Access-Control-Allow-Headers': ' X-Requested-With'},
onSuccess: function(navigation){
buildMultiSelection(navigation, '.nav.site-nav', '.flyout').inject('ms-wrapper')
}}).send();

function buildMultiSelection(navigation, ulClasses, liClasses) {
let multiSelection = new Element('ul' + ulClasses);
navigation.forEach(function(selectable) {
let listElement = new Element('li' + liClasses).grab(
new Element('a',{
text: locale === 'de'? selectable.titleDe: selectable.titleEn,
href: '#',
events: {
click: function (event) {
recursiveRemoveClass(event.target.parentElement.parentElement, 'clicked');
event.target.parentElement.addClass('clicked');
selectedId = selectable.id;
enableSearch(selectable.executable);
}
}
})
);
if(selectable.children != null){
listElement.grab(buildMultiSelection(selectable.children, '.flyout-content.nav.stacked', '.flyout-alt'));
}
multiSelection.grab(listElement);
});
return multiSelection;
}
function enableSearch(executable){
$$('button').setProperties({
disabled: !executable
})
}

function recursiveRemoveClass(element, className) {
if(element.children) {
for (var i = 0; i < element.children.length; i++) {
recursiveRemoveClass(element.children[i], className)
if (element.children) {
for (let i = 0; i < element.children.length; i++) {
recursiveRemoveClass(element.children[i], className);
}
}
element.removeClass(className)
}
element.removeClass(className);
}

// function loadJSON(callback) {
// var xobj = new XMLHttpRequest();
// xobj.overrideMimeType("application/json");
// xobj.open('GET', 'navigation.json', true);
// xobj.onreadystatechange = function () {
// if (xobj.readyState == 4 && xobj.status == "200") {
// // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
// callback(xobj.responseText);
// }
// };
// xobj.send(null);
// }

// loadJSON(res => {
// navigation = JSON.parse(res)
// console.log(navigation)
// buildMultiSelection(navigation)
// })
Loading

0 comments on commit 310aa1b

Please sign in to comment.