Permalink
Please sign in to comment.
Showing
with
451 additions
and 0 deletions.
- +54 −0 README.md
- +88 −0 index.html
- +59 −0 jquery.dropdown.css
- +250 −0 jquery.dropdown.js
| @@ -0,0 +1,54 @@ | ||
| +# Dropdown.js | ||
| + | ||
| +Finally a dropdown plugin that transforms select inputs in nice dropdowns and does not drive you crazy. | ||
| + | ||
| +I've always wondered why the most famous plugins (Chosen and Selectize) are so huge and full of useless/pointless features? | ||
| +What do you need from a dropdown plugin? | ||
| + | ||
| +### Initialize it | ||
| + | ||
| +Nice! I've found `<your_fav_plugin_here>` and I want to use it to style all my select inputs! But wha happens if I dinamically add a new element? I must init it manually.. Doh! | ||
| + | ||
| +Dropdown.js get rid of this problem, in fact you just need to run the plugin **one time** and it will take care of every new input which matches your rules. | ||
| + | ||
| + // Init any existing .select element and then watch for new .select elements | ||
| + // added dinamically by some black magic casted by a evil wizard | ||
| + $(".select").dropdown({ "autoinit" : ".select" }); | ||
| + | ||
| +Now what happens? We want our dropdowns to act like a boss.. emh like a standard select input. If it's a single select you want first element, or the selected one, already selected. | ||
| +We want even keyboard support, so if we press tab, it get opened and with tab you can select the options etc etc... | ||
| + | ||
| +### Style it | ||
| + | ||
| +What else? Maybe we want to be able to style our dropdown with our own classes so that we don't have to hack the plugin to make it looks good? | ||
| + | ||
| + $(".select").dropdown({ "dropdownClass": "my-dropdown", "optionClass": "my-option awesome" }); | ||
| + | ||
| +With this command we init every `.select` element (yes they are initialized always in the same way) and the `my-dropdown` class will be applied to the dropdown wrapper (ex: `<select>`) and `my-option awesome` will be applied to the options (ex: `<option>`). | ||
| + | ||
| +### Please don't fill my DOM with thousand of DIVs!!! | ||
| + | ||
| +Don't worry friend, this is the markup used by Dropdown.js: | ||
| + | ||
| + <div class="dropdownjs"> | ||
| + <input type="text" readonly placeholder="This is a placeholder"> | ||
| + <ul> | ||
| + <li value="foobar" tabindex="0">My foobar...</li> | ||
| + <li value="great" selected class="selected" tabindex="0">...is great!</li> | ||
| + </ul> | ||
| + </div> | ||
| + | ||
| +### Callbacks | ||
| + | ||
| +Psstt, ya need some callback? | ||
| +**Dropdown.js** supports callbacks, they are called on each element initialized, here an example: | ||
| + | ||
| + $(".select").dropdown({ "callback": function($dropdown) { | ||
| + // $dropdown is the shiny new generated dropdown element! | ||
| + $dropdown.fadeIn("slow"); | ||
| + }); | ||
| + | ||
| +### Dropdown position | ||
| + | ||
| +Dropdowns are placed in the best position, if a select input is placed on bottom of the page, the dropdown will open above it. | ||
| + |
88
index.html
| @@ -0,0 +1,88 @@ | ||
| +<!DOCTYPE html> | ||
| +<html> | ||
| + <head> | ||
| + <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> | ||
| + <link href="https://rawgit.com/FezVrasta/bootstrap-material-design/master/dist/css/material-wfont.min.css" rel="stylesheet"> | ||
| + <link href="https://rawgit.com/FezVrasta/bootstrap-material-design/master/dist/css/ripples.min.css" rel="stylesheet"> | ||
| + | ||
| + <link href="jquery.dropdown.css" rel="stylesheet"> | ||
| + </head> | ||
| + <body> | ||
| + | ||
| + <button>Click</button> | ||
| + | ||
| + <select multiple class="select form-control floating-label" placeholder="This is a placeholder"> | ||
| + <option></option> | ||
| + <option selected>Foobar</option> | ||
| + <option selected>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option selected>Foobar</option> | ||
| + <option selected>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option selected>Foobar</option> | ||
| + <option selected>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option selected>Foobar</option> | ||
| + <option selected>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option selected>Foobar</option> | ||
| + <option selected>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + <option>Foobar</option> | ||
| + <option>Is great</option> | ||
| + </select> | ||
| + | ||
| + <br><br><br> | ||
| + <br><br><br> | ||
| + <br><br><br> | ||
| + <select class="select" placeholder="This is a placeholder"> | ||
| + <option></option> | ||
| + <option>Foobar</option> | ||
| + <option value="hi..." selected>Is great</option> | ||
| + </select> | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> | ||
| + <script src="https://rawgit.com/FezVrasta/bootstrap-material-design/master/dist/js/material.min.js"></script> | ||
| + <script src="https://rawgit.com/FezVrasta/bootstrap-material-design/master/dist/js/ripples.min.js"></script> | ||
| + | ||
| + <script src="jquery.dropdown.js"></script> | ||
| + <script> | ||
| + $.material.init(); | ||
| + | ||
| + $(document).ready(function() { | ||
| + $(".select").dropdown({"optionClass": "withripple"}); | ||
| + }); | ||
| + | ||
| + $("button").click(function() { | ||
| + $("body").append("<select class=select><option>hey</option></select>"); | ||
| + }); | ||
| + | ||
| + </script> | ||
| + | ||
| + | ||
| + <style> | ||
| + body { | ||
| + width: 200px; | ||
| + margin: 100px; | ||
| + } | ||
| + </style> | ||
| + | ||
| + </body> | ||
| +</html> | ||
| + |
| @@ -0,0 +1,59 @@ | ||
| +.dropdownjs { | ||
| + position: relative; | ||
| +} | ||
| +.dropdownjs * { | ||
| + box-sizing: border-box; | ||
| +} | ||
| +.dropdownjs > input { | ||
| + width: 100%; | ||
| + cursor: pointer !important; | ||
| +} | ||
| +.dropdownjs > input.focus ~ ul { | ||
| + transform: scale(1); | ||
| +} | ||
| +.dropdownjs > ul { | ||
| + position: absolute; | ||
| + padding: 0; | ||
| + margin: 0; | ||
| + min-width: 200px; | ||
| + transform: scale(0); | ||
| + z-index: 10000; | ||
| +} | ||
| +.dropdownjs > ul[placement=top-left] { | ||
| + transform-origin: bottom left; | ||
| + bottom: 0; | ||
| + left: 0; | ||
| +} | ||
| +.dropdownjs > ul[placement=bottom-left] { | ||
| + transform-origin: top left; | ||
| + top: 0; | ||
| + left: 0; | ||
| +} | ||
| +.dropdownjs > ul > li { | ||
| + list-style: none; | ||
| + padding: 10px 20px; | ||
| +} | ||
| + | ||
| + | ||
| +/* Theme */ | ||
| +.dropdownjs > input { | ||
| + cursor: pointer; | ||
| +} | ||
| +.dropdownjs > ul { | ||
| + background: #FFF; | ||
| + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 6px rgba(0, 0, 0, 0.12); | ||
| + transition: transform 0.2s ease-out; | ||
| + padding: 10px; | ||
| + overflow: auto; | ||
| +} | ||
| +.dropdownjs > ul > li { | ||
| + cursor: pointer; | ||
| +} | ||
| +.dropdownjs > ul > li.selected, | ||
| +.dropdownjs > ul > li:active { | ||
| + background-color: #eaeaea; | ||
| +} | ||
| +.dropdownjs > ul > li:focus { | ||
| + outline: 0; | ||
| + background-color: #d4d4d4; | ||
| +} |
Oops, something went wrong.
0 comments on commit
21b2bb0