├── Gemfile ├── LICENSE ├── lib ├── peeker.rb └── peeker │ ├── version.rb │ └── engine.rb ├── .gitignore ├── Rakefile ├── CHANGELOG.md ├── app └── assets │ ├── stylesheet │ └── peeker.scss │ └── javascripts │ └── peeker.js ├── peeker.gemspec └── README.md /Gemfile: -------------------------------------------------------------------------------- 1 | source "http://rubygems.org" 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2015 Polydice, Inc. All Rights Reserved. 2 | -------------------------------------------------------------------------------- /lib/peeker.rb: -------------------------------------------------------------------------------- 1 | require "peeker/engine" 2 | require "peeker/version" 3 | -------------------------------------------------------------------------------- /lib/peeker/version.rb: -------------------------------------------------------------------------------- 1 | module Peeker 2 | VERSION = "0.1.6" 3 | end 4 | -------------------------------------------------------------------------------- /lib/peeker/engine.rb: -------------------------------------------------------------------------------- 1 | module Peeker 2 | class Engine < ::Rails::Engine 3 | isolate_namespace Peeker 4 | engine_name :peeker 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Gemfile.lock 2 | .bundle/ 3 | log/*.log 4 | pkg/ 5 | spec/dummy/db/*.sqlite3 6 | spec/dummy/log/*.log 7 | spec/dummy/tmp/ 8 | spec/dummy/.sass-cache 9 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | begin 2 | require 'bundler/setup' 3 | rescue LoadError 4 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 5 | end 6 | 7 | Bundler::GemHelper.install_tasks 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 0.1.1 2 | ----- 3 | - Modify Javascript syntax 4 | 5 | 0.1.0 6 | ----- 7 | - Squash commits 8 | 9 | 0.0.4 10 | ----- 11 | - Bug fix 12 | 13 | 0.0.3 14 | ----- 15 | - Bug fix 16 | 17 | 0.0.2 18 | ----- 19 | - Bug fix 20 | 21 | 0.0.1 22 | ----- 23 | - First release 24 | -------------------------------------------------------------------------------- /app/assets/stylesheet/peeker.scss: -------------------------------------------------------------------------------- 1 | #peek { 2 | .wrapper { 3 | text-align: center; 4 | width: 100% !important; 5 | 6 | div { 7 | display: inline-block; 8 | } 9 | 10 | .view { 11 | float: none; 12 | } 13 | } 14 | } 15 | 16 | @media only screen and (max-width: 991px) { 17 | #peek { 18 | display: none !important; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /peeker.gemspec: -------------------------------------------------------------------------------- 1 | $:.push File.expand_path("../lib", __FILE__) 2 | 3 | require "peeker/version" 4 | 5 | Gem::Specification.new do |s| 6 | s.name = "peeker" 7 | s.version = Peeker::VERSION 8 | s.authors = ["frozenfung"] 9 | s.email = ["fung@thepolydice.com"] 10 | s.homepage = "https://github.com/polydice/peeker" 11 | s.summary = "Enhance peek's elasticity." 12 | s.description = "A Javascript and CSS plugin to enhance peek." 13 | 14 | s.files = `git ls-files`.split("\n") 15 | end 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Peeker 2 | 3 | A simple library to enhance [peek](https://github.com/peek/peek). 4 | 5 | ## Installation 6 | 7 | To integrate `peeker` to your project, please following the steps behind 8 | 9 | Firstly, add few lines to your `Gemfile` 10 | 11 | ``` 12 | gem 'peeker' 13 | ``` 14 | 15 | And then in `application.js` 16 | 17 | `//=require peeker` 18 | 19 | Finally, add this line to your `application.scss` 20 | 21 | `@import "peeker";` 22 | 23 | ## Usage 24 | 25 | Let peek bar fade in and out with typing "peek". 26 | -------------------------------------------------------------------------------- /app/assets/javascripts/peeker.js: -------------------------------------------------------------------------------- 1 | (function (window, document, undefined) { 2 | 3 | // Find peek element 4 | var peekElement = document.querySelector("#peek"); 5 | 6 | // Check existence of peek element 7 | if (!peekElement) 8 | return false; 9 | 10 | // Build event 11 | var event = document.createEvent('Event'); 12 | event.initEvent('peek', true, true); 13 | 14 | // Listener Class 15 | var Listener = function (target, handler) { 16 | this.target = new RegExp(target, "i"); 17 | this.queue = ""; 18 | this.handler = handler; 19 | this.compare = function () { 20 | if (this.queue.match(this.target)) { 21 | this.queue = ""; 22 | this.handler(); 23 | } 24 | }; 25 | }; 26 | 27 | // Target 28 | var target = "peek"; 29 | 30 | // Handler 31 | var handler = function () { 32 | peekElement.style.display = (localStorage.getItem("peekStatus") == "none") ? "block" : "none"; 33 | localStorage.setItem("peekStatus", peekElement.style.display); 34 | window.dispatchEvent(event); 35 | }; 36 | 37 | // Set peekStatus with localStorage 38 | if (!localStorage.getItem("peekStatus")) 39 | localStorage.setItem("peekStatus", "none"); 40 | 41 | // Give born to a Listener object 42 | var peekListener = new Listener(target, handler); 43 | peekElement.style.display = localStorage.getItem("peekStatus"); 44 | 45 | // Hook listener on window 46 | window.addEventListener("keydown", function (e) { 47 | peekListener.queue = peekListener.queue.concat(String.fromCharCode(e.keyCode)); 48 | peekListener.compare(); 49 | }); 50 | 51 | })(window, document); 52 | --------------------------------------------------------------------------------