[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Keyboard-launch\nSimple and useful, one key to launch, so beautiful.\n\n简单与实用，一键直达，很是优雅。\n\nhttp://i.huguotao.com\n\n感谢 [ldong](https://github.com/ldong) 将其发布至 Chrome webstore ，下载连接：[Keyboard-launch](https://chrome.google.com/webstore/detail/keyboard-launch/oocaffggffdbbefcmjbgkpbgehpnbadh) \n"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-Hans-CN\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"/main.css\" />\n        <title>新标签页</title>\n    </head>\n    <body tabindex=\"2\">\n    <input id=\"search\" type=\"text\" placeholder=\"Tab 键切换至搜索框 输入设置打开设置\" tabindex=\"1\">\n    <div id=\"keyboard\">\n        <ul>\n            <li data-key=\"49\"><span>1</span></li>\n            <li data-key=\"50\"><span>2</span></li>\n            <li data-key=\"51\"><span>3</span></li>\n            <li data-key=\"52\"><span>4</span></li>\n            <li data-key=\"53\"><span>5</span></li>\n            <li data-key=\"54\"><span>6</span></li>\n            <li data-key=\"55\"><span>7</span></li>\n            <li data-key=\"56\"><span>8</span></li>\n            <li data-key=\"57\"><span>9</span></li>\n            <li data-key=\"48\"><span>0</span></li>\n        </ul>\n        <ul>\n            <li data-key=\"81\"><span>Q</span></li>\n            <li data-key=\"87\"><span>W</span></li>\n            <li data-key=\"69\"><span>E</span></li>\n            <li data-key=\"82\"><span>R</span></li>\n            <li data-key=\"84\"><span>T</span></li>\n            <li data-key=\"89\"><span>Y</span></li>\n            <li data-key=\"85\"><span>U</span></li>\n            <li data-key=\"73\"><span>I</span></li>\n            <li data-key=\"79\"><span>O</span></li>\n            <li data-key=\"80\"><span>P</span></li>\n        </ul>\n        <ul>\n            <li data-key=\"65\"><span>A</span></li>\n            <li data-key=\"83\"><span>S</span></li>\n            <li data-key=\"68\"><span>D</span></li>\n            <li data-key=\"70\"><span>F</span></li>\n            <li data-key=\"71\"><span>G</span></li>\n            <li data-key=\"72\"><span>H</span></li>\n            <li data-key=\"74\"><span>J</span></li>\n            <li data-key=\"75\"><span>K</span></li>\n            <li data-key=\"76\"><span>L</span></li>\n        </ul>\n        <ul>\n            <li data-key=\"90\"><span>Z</span></li>\n            <li data-key=\"88\"><span>X</span></li>\n            <li data-key=\"67\"><span>C</span></li>\n            <li data-key=\"86\"><span>V</span></li>\n            <li data-key=\"66\"><span>B</span></li>\n            <li data-key=\"78\"><span>N</span></li>\n            <li data-key=\"77\"><span>M</span></li>\n        </ul>\n    </div>\n    <div id=\"setting\">\n        <div align=\"right\"><span class=\"close\">ㄨ</span></div>\n        <table>\n            <tr>\n                <td>新窗口打开网页</td>\n                <td><span id=\"newWindow\" class=\"slideSwitch\"></span></td>\n            </tr>\n            <tr>\n                <td>搜索引擎</td>\n                <td>\n                    <select id=\"searchEngine\">\n                        <option value=\"https://www.google.com/search?q=\">Google</option>\n                        <option value=\"https://www.baidu.com/s?wd=\">Baidu</option>\n                        <option value=\"https://www.bing.com/search?q=\">Bing</option>\n                    </select>\n                </td>\n            </tr>\n            <tr>\n                <td>默认设置</td>\n                <td><input type=\"button\" value=\"恢复\" onclick=\"localStorage.clear() || location.reload()\"></td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" style=\"text-align:center\">鼠标点击按键即可设置对应网址</td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" style=\"text-align:center\"><a href=\"https://huguotao.com\">SCIOOGA</a><a> ∙ </a><a href=\"https://github.com/sciooga/Keyboard-launch\">GITHUB</a></td>\n            </tr>\n        </table>\n    </div>\n    <script src=\"/main.js\"></script>\n    </body>\n</html>\n"
  },
  {
    "path": "web/main.css",
    "content": "body {\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n    background-color: #f2f2f2;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    font-family: Sans-serif;\n}\n\n/*-----------SEARCH-----------*/\n\n#search {\n    height: 40px;\n    width: 500px;\n    font-size: 1em;\n    padding: 0 10px;\n    position: absolute;\n    top: 20%;\n    left: 50%;\n    margin-left: -250px;\n    box-sizing: border-box;\n}\n\n#search:focus {\n    outline: 1px solid #eee;\n}\n\n#search::-ms-input-placeholder {\n    text-align: center;\n}\n\n#search::-webkit-input-placeholder {\n    text-align: center;\n} \n\n/*-----------KEYBOARD-----------*/\n\n#keyboard {\n    width: 860px;\n    position: absolute;\n    bottom: 20%;\n    left: 50%;\n    margin-left: -430px;\n}\n\n#keyboard ul {\n    padding: 0px;\n    margin: 16px;\n    height: 50px;\n    text-align: center;\n    display: block;\n}\n\n#keyboard ul li {\n    cursor: pointer;\n    position: relative;\n    display: inline-block;\n    margin: 0 4px;\n    height: 54px;\n    border-radius: 10px;\n    -webkit-box-shadow: inset 0 0 1px 0px #eee;\n    -moz-box-shadow: inset 0 0 1px 0px #eee;\n    box-shadow: inset 0 0 1px 0px #eee;\n}\n\n#keyboard ul span {\n    height: 16px;\n    width: 16px;\n    margin: 0px 2px;\n    padding: 16px 22px;\n    background: #999;\n    color: #333;\n    border-radius: 8px;\n    display: inline-block;\n    list-style: none;\n    border-top: 1px solid #fff;\n    background: #fff;\n    -webkit-box-shadow: inset 0 0 36px #ddd, 0 3px 0 #ddd, 0 4px 2px #666;\n    -moz-box-shadow: inset 0 0 36px #ddd, 0 3px 0 #ddd, 0 4px 2px #666;\n    box-shadow: inset 0 0 36px #ddd, 0 3px 0 #ddd, 0 4px 2px #666;\n}\n\n#keyboard ul li:hover, #keyboard ul li.keyDownLi {\n    margin: 0px 5px;\n    border-bottom: 3px solid #fff;\n    box-shadow: inset 0 0px 8px #333;\n    -moz-box-shadow: inset 0 0px 8px #333;\n    -webkit-box-shadow: inset 0 0px 8px #333;\n}\n\n#keyboard ul li:hover span, #keyboard ul li span.keyDownSpan {\n    padding: 15px 20px 16px;\n    margin: 1px 3px 0px;\n    border-top: 1px solid #fafafa;\n    -webkit-box-shadow: inset 0 0 28px 5px #d2d2d2;\n    -moz-box-shadow: inset 0 0 28px 5px #d2d2d2;\n    box-shadow: inset 0 0 28px 5px #d2d2d2;\n\n    -webkit-transform: scale(.98);\n    -moz-transform: scale(.98);\n    -o-transform: scale(.98);\n}\n\n.fav {\n    width: 16px;\n    height: 16px;\n    position: absolute;\n    left: 8px;\n    bottom: 8px;\n    opacity: .4;\n}\n\n/*-----------KEYBOARD-----------*/\n\n#setting {\n    position: absolute;\n    bottom: -320px;\n    height: 320px;\n    width: 100%;\n    box-sizing: border-box;\n    padding: 20px 20%;\n    color: #666;\n    background: #fff;\n    box-shadow: 0 0 12px #ccc;\n    transition: bottom .3s;\n}\n\n#setting .slideSwitch {\n    display: inline-block;\n    vertical-align: bottom;\n    background: #e4e4e4;\n    height: 20px;\n    width: 38px;\n    border-radius: 10px;\n    cursor: pointer;\n}\n\n#setting .slideSwitch:after {\n    content: \"\";\n    display: block;\n    position: relative;\n    top: 2px;\n    left: 2px;\n    background: #fff;\n    height: 16px;\n    width: 16px;\n    border-radius: 8px;\n    transition: all .2s;\n    box-shadow: 0 2px 1px rgba(0,0,0,0.4);\n}\n\n#setting .slideSwitch.active {\n    background: #4bd863;\n}\n\n#setting .slideSwitch.active:after {\n    left: 20px;\n}\n\n#setting .close {\n    display: inline-block;\n    text-align: center;\n    border: 1px solid #ccc;\n    line-height: 40px;\n    height: 40px;\n    width: 40px;\n    border-radius: 40px;\n    cursor: pointer;\n}\n\n#setting .close:hover {\n    border: 1px solid #999;\n    color: #222;\n}\n\n#setting table {\n    width: 100%;\n}\n\n#setting table td {\n    width: 50%;\n    padding: 10px 22px;\n}\n\n#setting table td:first-child {\n    text-align: right;\n}\n\n#setting a {\n    font-size: 12px;\n    color: #999;\n    text-decoration: none;\n}\n\n"
  },
  {
    "path": "web/main.js",
    "content": ";(function() {\n    var version = '1.0.0',\n        keys = {},\n        $search = document.querySelector('#search'),\n        $keyboard = document.querySelector('#keyboard'),\n        $keys = document.querySelectorAll('#keyboard li'),\n        $setting = document.querySelector('#setting'),\n        $close = document.querySelector('.close'),\n        $newWindow = document.querySelector('#newWindow'),\n        $searchEngine = document.querySelector('#searchEngine')\n\n    // init\n    if (localStorage.version != version) {\n        localStorage.version = version\n        localStorage.newWindow = 0\n        localStorage.searchEngine = 'https://www.baidu.com/s?wd='\n        localStorage[67] = 'https://www.coding.net'\n        localStorage[72] = 'https://huguotao.com'\n        localStorage[84] = 'https://www.taobao.com'\n        localStorage[86] = 'https://www.v2ex.com'\n        localStorage[87] = 'https://www.weibo.com'\n    }\n\n    for (var i in $keys) {\n        if (!$keys.hasOwnProperty(i)) continue\n\n        keys[$keys[i].dataset.key] = {\n            'li': $keys[i],\n            'span': $keys[i].firstElementChild\n        }\n    }\n\n    // set favicon\n    for (var i = 48; i < 91; i++) {\n        var url = localStorage[i]\n        if (url) addFavicon(keys[i]['li'], getFavicon(url))\n    }\n\n    // read settings\n    if (~~localStorage.newWindow) {\n        $newWindow.classList.add('active')\n    } else {\n        $newWindow.classList.remove('active')\n    }\n    $searchEngine.value = localStorage.searchEngine\n\n    function getFavicon(url) {\n        return url.split('/').slice(0,3).join('/') + \"/favicon.ico\"\n    }\n\n    function addFavicon($li, src) {\n        var img = document.createElement('img')\n        img.src = src\n        img.className = 'fav'\n        $li.appendChild(img)\n    }\n\n    function keyDown(key) {\n        if (!key) return\n        keys[key]['span'].classList.add('keyDownSpan')\n        keys[key]['li'].classList.add('keyDownLi')\n    }\n\n    function keyUp(key) {\n        if (!key) return\n        keys[key]['span'].classList.remove('keyDownSpan')\n        keys[key]['li'].classList.remove('keyDownLi')\n    }\n\n    function openUrl(url) {\n        if (~~localStorage.newWindow) {\n            window.open(url)\n        } else {\n            location.href = url\n        }\n    }\n\n    $search.onkeyup = function(e) {\n        if (e.target.value == '设置') return $setting.style.bottom = 0\n        var key = e.which || e.keyCode || 0;\n        if (key == 13) openUrl(localStorage.searchEngine + e.target.value)\n    }\n\n    $close.onclick = function() {\n        $setting.style.bottom = '-320px'\n    }\n\n    var keyCache = 0\n    document.onkeydown = function(e) {\n        var key = e.which || e.keyCode || 0\n        keyCache = key\n        if (key == 9) {\n            window.event ? window.event.returnValue = false : e.preventDefault()\n            if (document.activeElement == $search) {\n                $search.blur()\n            } else {\n                $search.focus()\n            }\n        }\n        keyDown(key)\n    }\n\n    document.onkeyup = function(e) {\n        var key = e.which || e.keyCode || 0,\n            url = localStorage[key]\n        keyUp(key)\n\n        if (url && key == keyCache && document.activeElement != $search) openUrl(url)\n        keyCache = 0\n    }\n\n    $keyboard.onclick = function(e) {\n        if (e.target.tagName != 'SPAN') return\n        var name = e.target.innerText,\n            key = e.target.parentElement.dataset.key || 0,\n            url = prompt(\"请输入按键 \" + name + \" 对应的网址\", localStorage[key] || '')\n        if (url === null) return\n        if (url && url.indexOf('http') != 0) url = 'http://' + url\n        localStorage[key] = url\n        location.reload()        \n    }\n\n    $newWindow.onclick = function() {\n        this.classList.toggle('active')\n        localStorage.newWindow = +!!!~~localStorage.newWindow\n    }\n\n    $searchEngine.onchange = function(e) {\n        localStorage.searchEngine = e.target.value\n    }\n})()\n\n"
  }
]