Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Meny

A three dimensional and space effecient menu. Meny works best in browsers with support for CSS 3D transforms, although it falls back on 2D animation for older browsers. Supports touch events for mobile devices.

Check out the demo page.

Instructions

1. Download

Add meny.js to your project. The meny.js file is the only thing required, but you could optionally clone the repository if you want to get the default styles.

2. Markup

Meny requires two HTML elements to work: a menu and the page contents. The class names are not used by the library so chose anything you want.

<body><divclass="meny"><!-- your menu items --></div><divclass="contents"><!-- your page contents --></div></body>

Some rules, notes and best practices to keep in mind in terms of markup and styling:

  • The menu and contents should have the same parent element.
  • The background which appears behind the contents when Meny is open is not added by the library. You need to set your desired background to the parent element. The default style can be found in demo.css.
  • The arrow which appears when Meny is closed is also not added by the library, if you want it you can easily copy the styles from the demo.css.
  • The menu container will be automatically resized by the library according to configuration options.
  • Meny works on scrolling pages as the menu itself is fixed.

3. Initialize

Next you need create an instance of Meny and tell it which HTML elements to use. This should be done after the meny.min.js is included on your page. Example using the HTML above:

varmeny=Meny.create({// The element that will be animated in from off screenmenuElement: document.querySelector('.meny'),// The contents that gets pushed aside while Meny is activecontentsElement: document.querySelector('.contents'),// The alignment of the menu (top/right/bottom/left)position: 'left',// The height of the menu (when using top/bottom position)height: 200,// The width of the menu (when using left/right position)width: 260,// The angle at which the contents will rotate to.angle: 30,// The mouse distance from menu position which can trigger menu to open.threshold: 40,// Width(in px) of the thin line you see on screen when menu is in closed position.overlap: 6,// The total time taken by menu animation.transitionDuration: '0.5s',// Transition style for menu animationstransitionEasing: 'ease',// Gradient overlay for the contentsgradient: 'rgba(0,0,0,0.20) 0%, rgba(0,0,0,0.65) 100%)',// Use mouse movement to automatically open/closemouse: true,// Use touch swipe events to open/closetouch: true});

4. API & Events

A few handy methods API methods are included, you call these on the instance returned by Meny.create (see above).

meny.configure({mouse: false});// change settings after initializationmeny.open();meny.close();meny.isOpen();// true/falsemeny.destroy();// revert original DOM state, unbind events

The wrapper element (parent of the menu and contents) is decorated with classes based on its state:

.meny-active
.meny-top
.meny-right
.meny-bottom
.meny-left

Instances of Meny dispatch events to notify you of their state:

varmeny=Meny.create( ... )// see 3. Initializemeny.addEventListener('open',function(){// do something on open});meny.addEventListener('close',function(){// do something on close});meny.addEventListener('opened',function(){// do something right after meny is opened and transitions finished});meny.addEventListener('closed',function(){// do something right after meny is closed and transitions finished});

History

1.4.0

  • Adds opened and closed events
  • Adds destroy API method

1.3.0

  • Add touch and mouse config options
  • Fix error with tap to close when meny is on the left
  • Add configure API method for changing settings at runtime

1.2.0

  • Improvements to touch interaction
  • Setting threshold to 0 disables hover/touch-to-open

1.1.0

  • Instances of Meny now dispatch 'open'/'close' events

1.0.0

  • 2D animation fallback (works in IE8+)

0.9.0

  • Rewrote the JavaScript
  • All core styles/transforms are set via JavaScript
  • Made many options available at initialization
  • New JavaScript fallback using internal animation method

0.3.0

  • Fallback mode that doesn't rely on transforms

0.2.0

  • Cleaned up CSS
  • Fix bug where original events for taps on anchors were blocked
  • It's now possible to reach the meny via tapping as well as swiping

0.1.0

  • Initial release

License

MIT licensed

Copyright (C) 2014 Hakim El Hattab, http://hakim.se

About

A three dimensional and space effecient menu

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors