Added smallscreen navigation.
This commit is contained in:
parent
532a126289
commit
2ab6c09339
@ -73,94 +73,96 @@
|
||||
{$admin_vars.out.footer}
|
||||
{else}
|
||||
{if NOT $admin_vars.no_sidebar}
|
||||
<nav id="main_menu">
|
||||
<h2 class="visuallyhidden">Main menu</h2> {* i18n *}
|
||||
<div class="smallscreen">
|
||||
<nav id="main_menu">
|
||||
<h2 class="visuallyhidden">Main menu</h2> {* i18n *}
|
||||
|
||||
<ul>
|
||||
{if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
|
||||
<li><h3>Content</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'adminEntries'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&serendipity[adminAction]=new">{$CONST.NEW_ENTRY}</a></li>
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&serendipity[adminAction]=editSelect">{$CONST.EDIT_ENTRIES}</a></li>
|
||||
{/if}
|
||||
{if 'adminCategories'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=category&serendipity[adminAction]=view">{$CONST.CATEGORIES}</a></li>
|
||||
{/if}
|
||||
<ul class="clearfix">
|
||||
{if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_entries" hookAll="true"}
|
||||
<li><h3>Content</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'adminEntries'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&serendipity[adminAction]=new">{$CONST.NEW_ENTRY}</a></li>
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&serendipity[adminAction]=editSelect">{$CONST.EDIT_ENTRIES}</a></li>
|
||||
{/if}
|
||||
{if 'adminCategories'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=category&serendipity[adminAction]=view">{$CONST.CATEGORIES}</a></li>
|
||||
{/if}
|
||||
{if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_entries" hookAll="true"}
|
||||
{/if}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
{if 'adminImages'|checkPermission}
|
||||
<li><h3>{$CONST.MEDIA}</h3>
|
||||
<ul>
|
||||
{if 'adminImagesAdd'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=addSelect">{$CONST.ADD_MEDIA}</a></li>
|
||||
{if 'adminImages'|checkPermission}
|
||||
<li><h3>{$CONST.MEDIA}</h3>
|
||||
<ul>
|
||||
{if 'adminImagesAdd'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=addSelect">{$CONST.ADD_MEDIA}</a></li>
|
||||
{/if}
|
||||
{if 'adminImagesView'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media">{$CONST.MEDIA_LIBRARY}</a></li>
|
||||
{/if}
|
||||
{if 'adminImagesDirectories'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=directorySelect">{$CONST.MANAGE_DIRECTORIES}</a></li>
|
||||
{/if}
|
||||
{if 'adminImagesSync'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=sync">{$CONST.CREATE_THUMBS}</a></li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_entries_images" hookAll="true"}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
{if 'adminImagesView'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media">{$CONST.MEDIA_LIBRARY}</a></li>
|
||||
{/if}
|
||||
{if 'adminImagesDirectories'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=directorySelect">{$CONST.MANAGE_DIRECTORIES}</a></li>
|
||||
{/if}
|
||||
{if 'adminImagesSync'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&serendipity[adminAction]=sync">{$CONST.CREATE_THUMBS}</a></li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_entries_images" hookAll="true"}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
{if 'adminComments'|checkPermission}
|
||||
<li><h3>Reactions</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'adminComments'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=comments">{$CONST.COMMENTS}</a></li>
|
||||
<li><h3>Reactions</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'adminComments'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=comments">{$CONST.COMMENTS}</a></li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_admin_appearance" hookAll="true"}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_admin_appearance" hookAll="true"}
|
||||
{if 'adminUsersGroups'|checkPermission OR 'adminImport'|checkPermission OR 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission OR 'adminUsers'|checkPermission OR 'adminTemplates'|checkPermission OR 'adminPlugins'|checkPermission}
|
||||
<li><h3>Settings</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=configuration">{$CONST.CONFIGURATION}</a></li>
|
||||
{/if}
|
||||
{if 'adminTemplates'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=templates">{$CONST.MANAGE_STYLES}</a></li>
|
||||
{/if}
|
||||
{if 'adminPlugins'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=plugins">{$CONST.CONFIGURE_PLUGINS}</a></li>
|
||||
{/if}
|
||||
{if 'adminUsers'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=users">{$CONST.MANAGE_USERS}</a></li>
|
||||
{/if}
|
||||
{if 'adminUsersGroups'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=groups">{$CONST.MANAGE_GROUPS}</a></li>
|
||||
{/if}
|
||||
{if 'adminImport'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=import">{$CONST.IMPORT_ENTRIES}</a></li>
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=export">{$CONST.EXPORT_ENTRIES}</a></li>
|
||||
{/if}
|
||||
{if 'siteConfiguration'|checkPermission || 'blogConfiguration'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=integrity">{$CONST.INTEGRITY}</a></li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_admin" hookAll="true"}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
{if 'adminUsersGroups'|checkPermission OR 'adminImport'|checkPermission OR 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission OR 'adminUsers'|checkPermission OR 'adminTemplates'|checkPermission OR 'adminPlugins'|checkPermission}
|
||||
<li><h3>Settings</h3> {* i18n *}
|
||||
<ul>
|
||||
{if 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=configuration">{$CONST.CONFIGURATION}</a></li>
|
||||
{/if}
|
||||
{if 'adminTemplates'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=templates">{$CONST.MANAGE_STYLES}</a></li>
|
||||
{/if}
|
||||
{if 'adminPlugins'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=plugins">{$CONST.CONFIGURE_PLUGINS}</a></li>
|
||||
{/if}
|
||||
{if 'adminUsers'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=users">{$CONST.MANAGE_USERS}</a></li>
|
||||
{/if}
|
||||
{if 'adminUsersGroups'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=groups">{$CONST.MANAGE_GROUPS}</a></li>
|
||||
{/if}
|
||||
{if 'adminImport'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=import">{$CONST.IMPORT_ENTRIES}</a></li>
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=export">{$CONST.EXPORT_ENTRIES}</a></li>
|
||||
{/if}
|
||||
{if 'siteConfiguration'|checkPermission || 'blogConfiguration'|checkPermission}
|
||||
<li><a href="serendipity_admin.php?serendipity[adminModule]=integrity">{$CONST.INTEGRITY}</a></li>
|
||||
{/if}
|
||||
{if $admin_vars.no_create !== true}
|
||||
{serendipity_hookPlugin hook="backend_sidebar_admin" hookAll="true"}
|
||||
{/if}
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</nav>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{/if}
|
||||
<div id="content" class="clearfix">
|
||||
{$admin_vars.main_content}
|
||||
|
@ -652,6 +652,420 @@ window.log = function f(){ log.history = log.history || []; log.history.push(arg
|
||||
footer: '#meta'
|
||||
});
|
||||
|
||||
// Source: https://github.com/viljamis/responsive-nav.js
|
||||
var responsiveNav = (function (window, document) {
|
||||
|
||||
var computed = !!window.getComputedStyle;
|
||||
|
||||
// getComputedStyle polyfill
|
||||
if (!window.getComputedStyle) {
|
||||
window.getComputedStyle = function(el) {
|
||||
this.el = el;
|
||||
this.getPropertyValue = function(prop) {
|
||||
var re = /(\-([a-z]){1})/g;
|
||||
if (prop === "float") {
|
||||
prop = "styleFloat";
|
||||
}
|
||||
if (re.test(prop)) {
|
||||
prop = prop.replace(re, function () {
|
||||
return arguments[2].toUpperCase();
|
||||
});
|
||||
}
|
||||
return el.currentStyle[prop] ? el.currentStyle[prop] : null;
|
||||
};
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
var nav,
|
||||
opts,
|
||||
navToggle,
|
||||
docEl = document.documentElement,
|
||||
head = document.getElementsByTagName("head")[0],
|
||||
styleElement = document.createElement("style"),
|
||||
navOpen = false,
|
||||
|
||||
// fn arg can be an object or a function, thanks to handleEvent
|
||||
// read more at: http://www.thecssninja.com/javascript/handleevent
|
||||
addEvent = function (el, evt, fn, bubble) {
|
||||
if ("addEventListener" in el) {
|
||||
// BBOS6 doesn't support handleEvent, catch and polyfill
|
||||
try {
|
||||
el.addEventListener(evt, fn, bubble);
|
||||
} catch (e) {
|
||||
if (typeof fn === "object" && fn.handleEvent) {
|
||||
el.addEventListener(evt, function (e) {
|
||||
// Bind fn as this and set first arg as event object
|
||||
fn.handleEvent.call(fn, e);
|
||||
}, bubble);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
} else if ("attachEvent" in el) {
|
||||
// check if the callback is an object and contains handleEvent
|
||||
if (typeof fn === "object" && fn.handleEvent) {
|
||||
el.attachEvent("on" + evt, function () {
|
||||
// Bind fn as this
|
||||
fn.handleEvent.call(fn);
|
||||
});
|
||||
} else {
|
||||
el.attachEvent("on" + evt, fn);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
removeEvent = function (el, evt, fn, bubble) {
|
||||
if ("removeEventListener" in el) {
|
||||
try {
|
||||
el.removeEventListener(evt, fn, bubble);
|
||||
} catch (e) {
|
||||
if (typeof fn === "object" && fn.handleEvent) {
|
||||
el.removeEventListener(evt, function (e) {
|
||||
fn.handleEvent.call(fn, e);
|
||||
}, bubble);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
} else if ("detachEvent" in el) {
|
||||
if (typeof fn === "object" && fn.handleEvent) {
|
||||
el.detachEvent("on" + evt, function () {
|
||||
fn.handleEvent.call(fn);
|
||||
});
|
||||
} else {
|
||||
el.detachEvent("on" + evt, fn);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
getFirstChild = function (e) {
|
||||
var firstChild = e.firstChild;
|
||||
// skip TextNodes
|
||||
while (firstChild !== null && firstChild.nodeType !== 1) {
|
||||
firstChild = firstChild.nextSibling;
|
||||
}
|
||||
return firstChild;
|
||||
},
|
||||
|
||||
setAttributes = function (el, attrs) {
|
||||
for (var key in attrs) {
|
||||
el.setAttribute(key, attrs[key]);
|
||||
}
|
||||
},
|
||||
|
||||
addClass = function (el, cls) {
|
||||
el.className += " " + cls;
|
||||
el.className = el.className.replace(/(^\s*)|(\s*$)/g,"");
|
||||
},
|
||||
|
||||
removeClass = function (el, cls) {
|
||||
var reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
|
||||
el.className = el.className.replace(reg, " ").replace(/(^\s*)|(\s*$)/g,"");
|
||||
},
|
||||
|
||||
ResponsiveNav = function (el, options) {
|
||||
var i;
|
||||
|
||||
// Default options
|
||||
this.options = {
|
||||
animate: true, // Boolean: Use CSS3 transitions, true or false
|
||||
transition: 400, // Integer: Speed of the transition, in milliseconds
|
||||
label: "Menu", // String: Label for the navigation toggle
|
||||
insert: "after", // String: Insert the toggle before or after the navigation
|
||||
customToggle: "", // Selector: Specify the ID of a custom toggle
|
||||
openPos: "relative", // String: Position of the opened nav, relative or static
|
||||
jsClass: "js", // String: 'JS enabled' class which is added to <html> el
|
||||
init: function() { } ,// Function: Init callback
|
||||
open: function() { } ,// Function: Open callback
|
||||
close: function() { } // Function: Close callback
|
||||
};
|
||||
|
||||
// User defined options
|
||||
for (i in options) {
|
||||
this.options[i] = options[i];
|
||||
}
|
||||
|
||||
// Adds "js" class for <html>
|
||||
addClass(docEl, this.options.jsClass);
|
||||
|
||||
// Wrapper
|
||||
this.wrapperEl = el.replace("#", "");
|
||||
if (document.getElementById(this.wrapperEl)) {
|
||||
this.wrapper = document.getElementById(this.wrapperEl);
|
||||
} else {
|
||||
// If el doesn't exists, stop here.
|
||||
throw new Error("The nav element you are trying to select doesn't exist");
|
||||
}
|
||||
|
||||
// Inner wrapper
|
||||
this.wrapper.inner = getFirstChild(this.wrapper);
|
||||
|
||||
// For minification
|
||||
opts = this.options;
|
||||
nav = this.wrapper;
|
||||
|
||||
// Init
|
||||
this._init(this);
|
||||
};
|
||||
|
||||
ResponsiveNav.prototype = {
|
||||
// Public methods
|
||||
destroy: function () {
|
||||
this._removeStyles();
|
||||
removeClass(nav, "closed");
|
||||
removeClass(nav, "opened");
|
||||
nav.removeAttribute("style");
|
||||
nav.removeAttribute("aria-hidden");
|
||||
nav = null;
|
||||
_instance = null;
|
||||
|
||||
removeEvent(window, "load", this, false);
|
||||
removeEvent(window, "resize", this, false);
|
||||
removeEvent(navToggle, "mousedown", this, false);
|
||||
removeEvent(navToggle, "touchstart", this, false);
|
||||
removeEvent(navToggle, "touchend", this, false);
|
||||
removeEvent(navToggle, "keyup", this, false);
|
||||
removeEvent(navToggle, "click", this, false);
|
||||
|
||||
if (!opts.customToggle) {
|
||||
navToggle.parentNode.removeChild(navToggle);
|
||||
} else {
|
||||
navToggle.removeAttribute("aria-hidden");
|
||||
}
|
||||
},
|
||||
|
||||
toggle: function () {
|
||||
if (!navOpen) {
|
||||
removeClass(nav, "closed");
|
||||
addClass(nav, "opened");
|
||||
nav.style.position = opts.openPos;
|
||||
setAttributes(nav, { "aria-hidden": "false" });
|
||||
|
||||
navOpen = true;
|
||||
opts.open();
|
||||
} else {
|
||||
removeClass(nav, "opened");
|
||||
addClass(nav, "closed");
|
||||
setAttributes(nav, { "aria-hidden": "true" });
|
||||
|
||||
if (opts.animate) {
|
||||
setTimeout(function () {
|
||||
nav.style.position = "absolute";
|
||||
}, opts.transition + 10);
|
||||
} else {
|
||||
nav.style.position = "absolute";
|
||||
}
|
||||
|
||||
navOpen = false;
|
||||
opts.close();
|
||||
}
|
||||
},
|
||||
|
||||
handleEvent: function (e) {
|
||||
var evt = e || window.event;
|
||||
|
||||
switch (evt.type) {
|
||||
case "mousedown":
|
||||
this._onmousedown(evt);
|
||||
break;
|
||||
case "touchstart":
|
||||
this._ontouchstart(evt);
|
||||
break;
|
||||
case "touchend":
|
||||
this._ontouchend(evt);
|
||||
break;
|
||||
case "keyup":
|
||||
this._onkeyup(evt);
|
||||
break;
|
||||
case "click":
|
||||
this._onclick(evt);
|
||||
break;
|
||||
case "load":
|
||||
this._transitions(evt);
|
||||
this._resize(evt);
|
||||
break;
|
||||
case "resize":
|
||||
this._resize(evt);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
// Private methods
|
||||
_init: function () {
|
||||
addClass(nav, "closed");
|
||||
this._createToggle();
|
||||
|
||||
addEvent(window, "load", this, false);
|
||||
addEvent(window, "resize", this, false);
|
||||
addEvent(navToggle, "mousedown", this, false);
|
||||
addEvent(navToggle, "touchstart", this, false);
|
||||
addEvent(navToggle, "touchend", this, false);
|
||||
addEvent(navToggle, "keyup", this, false);
|
||||
addEvent(navToggle, "click", this, false);
|
||||
},
|
||||
|
||||
_createStyles: function () {
|
||||
if (!styleElement.parentNode) {
|
||||
head.appendChild(styleElement);
|
||||
}
|
||||
},
|
||||
|
||||
_removeStyles: function () {
|
||||
if (styleElement.parentNode) {
|
||||
styleElement.parentNode.removeChild(styleElement);
|
||||
}
|
||||
},
|
||||
|
||||
_createToggle: function () {
|
||||
if (!opts.customToggle) {
|
||||
var toggle = document.createElement("a");
|
||||
toggle.innerHTML = opts.label;
|
||||
setAttributes(toggle, {
|
||||
"href": "#",
|
||||
"id": "nav-toggle"
|
||||
});
|
||||
|
||||
if (opts.insert === "after") {
|
||||
nav.parentNode.insertBefore(toggle, nav.nextSibling);
|
||||
} else {
|
||||
nav.parentNode.insertBefore(toggle, nav);
|
||||
}
|
||||
|
||||
navToggle = document.getElementById("nav-toggle");
|
||||
} else {
|
||||
var toggleEl = opts.customToggle.replace("#", "");
|
||||
|
||||
if (document.getElementById(toggleEl)) {
|
||||
navToggle = document.getElementById(toggleEl);
|
||||
} else {
|
||||
throw new Error("The custom nav toggle you are trying to select doesn't exist");
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_preventDefault: function(e) {
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
} else {
|
||||
e.returnValue = false;
|
||||
}
|
||||
},
|
||||
|
||||
_onmousedown: function (e) {
|
||||
var evt = e || window.event;
|
||||
// If the user isn't right clicking:
|
||||
if (!(evt.which === 3 || evt.button === 2)) {
|
||||
this._preventDefault(e);
|
||||
this.toggle(e);
|
||||
}
|
||||
},
|
||||
|
||||
_ontouchstart: function (e) {
|
||||
// Touchstart event fires before
|
||||
// the mousedown and can wipe it
|
||||
navToggle.onmousedown = null;
|
||||
this._preventDefault(e);
|
||||
this.toggle(e);
|
||||
},
|
||||
|
||||
_ontouchend: function () {
|
||||
// Prevents ghost click from happening on some Android browsers
|
||||
var that = this;
|
||||
nav.addEventListener("click", that._preventDefault, true);
|
||||
setTimeout(function () {
|
||||
nav.removeEventListener("click", that._preventDefault, true);
|
||||
}, opts.transition);
|
||||
},
|
||||
|
||||
_onkeyup: function (e) {
|
||||
var evt = e || window.event;
|
||||
if (evt.keyCode === 13) {
|
||||
this.toggle(e);
|
||||
}
|
||||
},
|
||||
|
||||
_onclick: function (e) {
|
||||
// For older browsers (looking at IE)
|
||||
this._preventDefault(e);
|
||||
},
|
||||
|
||||
_transitions: function () {
|
||||
if (opts.animate) {
|
||||
var objStyle = nav.style,
|
||||
transition = "max-height " + opts.transition + "ms";
|
||||
|
||||
objStyle.WebkitTransition = transition;
|
||||
objStyle.MozTransition = transition;
|
||||
objStyle.OTransition = transition;
|
||||
objStyle.transition = transition;
|
||||
}
|
||||
},
|
||||
|
||||
_calcHeight: function () {
|
||||
var savedHeight = nav.inner.offsetHeight,
|
||||
innerStyles = "#" + this.wrapperEl + ".opened{ max-height:" + savedHeight + "px }";
|
||||
|
||||
// Hide from old IE
|
||||
if (computed) {
|
||||
styleElement.innerHTML = innerStyles;
|
||||
innerStyles = "";
|
||||
}
|
||||
},
|
||||
|
||||
_resize: function () {
|
||||
if (window.getComputedStyle(navToggle, null).getPropertyValue("display") !== "none") {
|
||||
setAttributes(navToggle, { "aria-hidden": "false" });
|
||||
|
||||
// If the navigation is hidden
|
||||
if (nav.className.match(/(^|\s)closed(\s|$)/)) {
|
||||
setAttributes(nav, { "aria-hidden": "true" });
|
||||
nav.style.position = "absolute";
|
||||
}
|
||||
|
||||
this._createStyles();
|
||||
this._calcHeight();
|
||||
} else {
|
||||
setAttributes(navToggle, { "aria-hidden": "true" });
|
||||
setAttributes(nav, { "aria-hidden": "false" });
|
||||
nav.style.position = opts.openPos;
|
||||
this._removeStyles();
|
||||
}
|
||||
|
||||
// Init callback
|
||||
opts.init();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var _instance;
|
||||
function rn (el, options) {
|
||||
if (!_instance) {
|
||||
_instance = new ResponsiveNav(el, options);
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
return rn;
|
||||
})(window, document);
|
||||
|
||||
// Fire responsive nav
|
||||
var navigation = responsiveNav('#main_menu', {
|
||||
animate: true, // Boolean: Use CSS3 transitions, true or false
|
||||
transition: 250, // Integer: Speed of the transition, in milliseconds
|
||||
// String: Label for the navigation toggle
|
||||
label: "<span class='icon-menu'></span><span class='visuallyhidden'> Navigation</span>",
|
||||
insert: "before", // String: Insert the toggle before or after the navigation
|
||||
customToggle: "", // Selector: Specify the ID of a custom toggle
|
||||
openPos: "relative", // String: Position of the opened nav, relative or static
|
||||
jsClass: "js", // String: 'JS enabled' class which is added to <html> el
|
||||
debug: false, // Boolean: Log debug messages to console, true or false
|
||||
init: function() { } , // Function: Init callback
|
||||
open: function() { } , // Function: Open callback
|
||||
close: function() { } // Function: Close callback
|
||||
});
|
||||
|
||||
// Fire WYSIWYG editor(s)
|
||||
serendipity.spawn();
|
||||
|
||||
|
@ -1220,10 +1220,60 @@ summary {
|
||||
}
|
||||
|
||||
|
||||
/* NAVIGATION
|
||||
----------------------------------------------------------------- */
|
||||
.smallscreen {
|
||||
background: #ccdde7;
|
||||
}
|
||||
|
||||
#main_menu {
|
||||
padding-bottom: .75em;
|
||||
}
|
||||
|
||||
|
||||
.js #main_menu {
|
||||
clip: rect(0 0 0 0);
|
||||
display: block;
|
||||
max-height: 0;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
zoom: 1;
|
||||
}
|
||||
|
||||
.js #main_menu.opened {
|
||||
max-height: 9999px;
|
||||
}
|
||||
|
||||
#main_menu h3 {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#main_menu li > ul > li {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#main_menu a {
|
||||
display: inline-block;
|
||||
padding: .2125em 0;
|
||||
}
|
||||
|
||||
#main_menu a,
|
||||
#main_menu a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#nav-toggle {
|
||||
display: inline-block;
|
||||
font-size: 1.5em;
|
||||
margin: .25em .5em;
|
||||
}
|
||||
|
||||
|
||||
/* CONTENT
|
||||
----------------------------------------------------------------- */
|
||||
#content,
|
||||
#main_menu {
|
||||
#content {
|
||||
padding-bottom: 1.5em;
|
||||
}
|
||||
|
||||
@ -1865,6 +1915,10 @@ input[name="serendipity[filter][fileCategory]"] {
|
||||
margin: 1.71429em 0;
|
||||
}
|
||||
|
||||
#main_menu li > ul > li {
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
#further_links li {
|
||||
display: inline-block;
|
||||
margin-right: 1em;
|
||||
@ -2020,6 +2074,45 @@ input[name="serendipity[filter][fileCategory]"] {
|
||||
width: 96%;
|
||||
}
|
||||
|
||||
.smallscreen {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#main_menu {
|
||||
padding-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.js #main_menu {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.js #main_menu.closed {
|
||||
max-height: none;
|
||||
}
|
||||
|
||||
#main_menu h3 {
|
||||
display: block;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#main_menu li > ul > li {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#main_menu a {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#main_menu a,
|
||||
#main_menu a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#nav-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#main_menu > ul > li {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user