| 1 | <!DOCTYPE html> |
|---|
| 2 | <html> |
|---|
| 3 | <head> |
|---|
| 4 | <meta charset=utf-8> |
|---|
| 5 | <title>プログラミングを道具として使おう! - セキュリティ&プログラミングキャンプ JavaScript 入門講座資料</title> |
|---|
| 6 | <style type="text/css"> |
|---|
| 7 | strong { |
|---|
| 8 | font-weight: bold; |
|---|
| 9 | color: #008; |
|---|
| 10 | } |
|---|
| 11 | |
|---|
| 12 | body { |
|---|
| 13 | line-height: 1.5; |
|---|
| 14 | } |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | p, address { |
|---|
| 18 | margin: 1em; |
|---|
| 19 | } |
|---|
| 20 | |
|---|
| 21 | pre { |
|---|
| 22 | margin: 1em; |
|---|
| 23 | font-family: monospace; |
|---|
| 24 | padding: 1em; |
|---|
| 25 | border: gray 5px solid; |
|---|
| 26 | background: #ddd; |
|---|
| 27 | } |
|---|
| 28 | |
|---|
| 29 | blockquote { |
|---|
| 30 | margin: 0.5em; |
|---|
| 31 | padding: 1em; |
|---|
| 32 | background: #ddd; |
|---|
| 33 | } |
|---|
| 34 | |
|---|
| 35 | h1 { |
|---|
| 36 | font-size: 4em; |
|---|
| 37 | color: #008; |
|---|
| 38 | } |
|---|
| 39 | |
|---|
| 40 | @media print { |
|---|
| 41 | strong { |
|---|
| 42 | text-decoration: underline; |
|---|
| 43 | } |
|---|
| 44 | } |
|---|
| 45 | |
|---|
| 46 | h2, h3, h4, h5, h6 { |
|---|
| 47 | page-break-before: always; |
|---|
| 48 | margin-top: 2em; |
|---|
| 49 | padding-left: 0.4em; |
|---|
| 50 | border-bottom: 2px #008 solid; |
|---|
| 51 | border-left: 0.5em #008 solid; |
|---|
| 52 | } |
|---|
| 53 | </style> |
|---|
| 54 | <script type="text/javascript"> |
|---|
| 55 | // <![CDATA[ |
|---|
| 56 | |
|---|
| 57 | function html(elm) { |
|---|
| 58 | elm = elm.parentNode; |
|---|
| 59 | while (elm = elm.previousSibling) { |
|---|
| 60 | if (elm.nodeName.toLowerCase() == 'pre') { |
|---|
| 61 | var code = elm.textContent || elm.innerText; |
|---|
| 62 | var d = window.open().document; |
|---|
| 63 | d.write(code); |
|---|
| 64 | d.close(); |
|---|
| 65 | break; |
|---|
| 66 | } |
|---|
| 67 | } |
|---|
| 68 | } |
|---|
| 69 | function js(elm) { |
|---|
| 70 | elm = elm.parentNode; |
|---|
| 71 | while (elm = elm.previousSibling) { |
|---|
| 72 | if (elm.nodeName.toLowerCase() == 'pre') { |
|---|
| 73 | var code = elm.textContent || elm.innerText; |
|---|
| 74 | var div = document.createElement('div'); |
|---|
| 75 | div.appendChild(document.createTextNode(code)); |
|---|
| 76 | var codeEscaped = div.innerHTML; |
|---|
| 77 | |
|---|
| 78 | var d = window.open().document; |
|---|
| 79 | d.write('\ |
|---|
| 80 | <!DOCTYPE html>\n\ |
|---|
| 81 | <html>\n\ |
|---|
| 82 | <head>\n\ |
|---|
| 83 | <meta charset=utf-8>\n\ |
|---|
| 84 | <title>Sample</title>\n\ |
|---|
| 85 | </head>\n\ |
|---|
| 86 | <body>\n\ |
|---|
| 87 | \n\ |
|---|
| 88 | <pre>\n\ |
|---|
| 89 | ' + codeEscaped + '\n\ |
|---|
| 90 | </pre>\n\ |
|---|
| 91 | \n\ |
|---|
| 92 | <script type="text/javascript">\n\ |
|---|
| 93 | ' + code + '\n\ |
|---|
| 94 | </s'+'cript>\n\ |
|---|
| 95 | \n\ |
|---|
| 96 | </body>\n\ |
|---|
| 97 | </html>'); |
|---|
| 98 | d.close(); |
|---|
| 99 | break; |
|---|
| 100 | } |
|---|
| 101 | } |
|---|
| 102 | } |
|---|
| 103 | window.onload = function() { |
|---|
| 104 | var elmNav = document.getElementById('nav'); |
|---|
| 105 | var elmSection = document.getElementById('article'); |
|---|
| 106 | |
|---|
| 107 | (function(elmSection, elmList, id) { |
|---|
| 108 | var count = 1; |
|---|
| 109 | var child = elmSection.firstChild; |
|---|
| 110 | var elmSubList = document.createElement('ul'); |
|---|
| 111 | elmList.appendChild(elmSubList); |
|---|
| 112 | do { |
|---|
| 113 | var tagName = child.nodeName.toLowerCase(); |
|---|
| 114 | if (tagName == 'div') { |
|---|
| 115 | child.id = id + '.' + (count++); |
|---|
| 116 | var elmLi = document.createElement('li'); |
|---|
| 117 | elmSubList.appendChild(elmLi); |
|---|
| 118 | var elmA = document.createElement('a'); |
|---|
| 119 | elmLi.appendChild(elmA); |
|---|
| 120 | elmA.href="#" + child.id; |
|---|
| 121 | var headerTagNames = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; |
|---|
| 122 | for (var i = 0; i < headerTagNames.length; i ++) { |
|---|
| 123 | var elmsHeader = child.getElementsByTagName(headerTagNames[i]); |
|---|
| 124 | if (elmsHeader.length) { |
|---|
| 125 | var elmHeader = elmsHeader[0]; |
|---|
| 126 | |
|---|
| 127 | var elmPToc = document.createElement('p') |
|---|
| 128 | var elmAToc = document.createElement('a'); |
|---|
| 129 | elmAToc.innerHTML = '目次へ戻る'; |
|---|
| 130 | elmAToc.href = "#nav"; |
|---|
| 131 | elmPToc.appendChild(elmAToc); |
|---|
| 132 | elmHeader.parentNode.parentNode.insertBefore(elmPToc, elmHeader.parentNode); |
|---|
| 133 | |
|---|
| 134 | elmA.appendChild(document.createTextNode(child.id.replace(/^section\./, '') + ' ')); |
|---|
| 135 | elmA.appendChild(document.createTextNode(elmHeader.firstChild.nodeValue)); |
|---|
| 136 | elmHeader.insertBefore(document.createTextNode(child.id.replace(/^section\./, '') + ' '), elmHeader.firstChild); |
|---|
| 137 | break; |
|---|
| 138 | } |
|---|
| 139 | } |
|---|
| 140 | arguments.callee(child, elmSubList, child.id); |
|---|
| 141 | } |
|---|
| 142 | } while(child = child.nextSibling); |
|---|
| 143 | })(elmSection, elmNav, 'section'); |
|---|
| 144 | }; |
|---|
| 145 | // ]]> |
|---|
| 146 | </script> |
|---|
| 147 | </head> |
|---|
| 148 | <body> |
|---|
| 149 | <div id="header"> |
|---|
| 150 | <h1>プログラミングを道具として使おう!</h1> |
|---|
| 151 | <address> |
|---|
| 152 | Author: amachang <<a href="mailto:seijro@gmail.com">seijro@gmail.com</a>><br /> |
|---|
| 153 | Weblog: <a href="http://d.hatena.ne.jp/amachang/">http://d.hatena.ne.jp/amachang/</a> |
|---|
| 154 | </address> |
|---|
| 155 | </div> |
|---|
| 156 | |
|---|
| 157 | <div id="nav"> |
|---|
| 158 | <h2>目次</h2> |
|---|
| 159 | <!-- Auto generation --> |
|---|
| 160 | </div> |
|---|
| 161 | |
|---|
| 162 | <div id="article"> |
|---|
| 163 | |
|---|
| 164 | <div> |
|---|
| 165 | <h2>Firebug や Bookmarklet を生かして毎日を便利にする</h2> |
|---|
| 166 | <p> |
|---|
| 167 | プログラミングが出来ると<strong>小さなコード</strong>を使って日々の行動を便利に変えることができます! |
|---|
| 168 | 今日は、小さな JavaScript のコードをすぐ実行するための、 2 つ環境についてちょっと話したいと思います。 |
|---|
| 169 | </p> |
|---|
| 170 | <ul> |
|---|
| 171 | <li>Firebug</li> |
|---|
| 172 | <li>Bookmarklet</li> |
|---|
| 173 | </ul> |
|---|
| 174 | </div> |
|---|
| 175 | |
|---|
| 176 | <div> |
|---|
| 177 | <h2>Firebug とは</h2> |
|---|
| 178 | <p> |
|---|
| 179 | Firebug とは、 JavaScript や CSS や HTML を書くためのツールです。 |
|---|
| 180 | C 言語でいうところの gdb や cscope などのツールにあたります。 |
|---|
| 181 | </p> |
|---|
| 182 | <p> |
|---|
| 183 | では、さっそくインストールしてみましょう! |
|---|
| 184 | </p> |
|---|
| 185 | <p> |
|---|
| 186 | <a href="http://getfirebug.com/jp.html">Firebug - Web Development Evolved</a> |
|---|
| 187 | </p> |
|---|
| 188 | </div> |
|---|
| 189 | |
|---|
| 190 | <div> |
|---|
| 191 | <h2>Bookmarklet とは</h2> |
|---|
| 192 | <p> |
|---|
| 193 | JavaScript のコード自体をブックマークして、好きな時にそのコードを実行することが出来ます。 |
|---|
| 194 | そのブックマークに入った JavaScript のコードを Bookmarklet といいます。 |
|---|
| 195 | </p> |
|---|
| 196 | <p> |
|---|
| 197 | <a href="javascript:document.body.style.background='rgb(0, 0, 64)';void(0);">たとえばココをクリック</a> |
|---|
| 198 | </p> |
|---|
| 199 | </div> |
|---|
| 200 | |
|---|
| 201 | <div> |
|---|
| 202 | <h2>Firebug を使ってみよう</h2> |
|---|
| 203 | <p> |
|---|
| 204 | <a href="http://b.hatena.ne.jp/">ここに行って</a> |
|---|
| 205 | </p> |
|---|
| 206 | <pre><code>Array.filter(document.getElementsByClassName('bookmark'), function(_,i) i < 5).forEach(open); |
|---|
| 207 | </code></pre> |
|---|
| 208 | </div> |
|---|
| 209 | |
|---|
| 210 | <div> |
|---|
| 211 | <h2>Bookmarklet 化しよう!</h2> |
|---|
| 212 | <p> |
|---|
| 213 | Firebug で作った機能を Bookmarklet 化しよう! |
|---|
| 214 | </p> |
|---|
| 215 | </div> |
|---|
| 216 | |
|---|
| 217 | </div> |
|---|
| 218 | <div id="footer"> |
|---|
| 219 | <p>This document is in the public domain.</p> |
|---|
| 220 | </div> |
|---|
| 221 | </body> |
|---|
| 222 | </html> |
|---|