JavaScript/pre2textarea のバックアップの現在との差分(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- JavaScript/pre2textarea へ行く。
- 1 (2012-07-24 (火) 18:09:17)
- 2 (2012-08-03 (金) 17:32:54)
- 3 (2012-08-05 (日) 01:03:49)
- 4 (2012-08-06 (月) 18:39:27)
- 5 (2012-08-28 (火) 15:38:17)
- 6 (2012-08-30 (木) 12:18:01)
- 7 (2012-08-30 (木) 14:49:01)
- 8 (2012-08-31 (金) 10:38:05)
- 9 (2012-09-10 (月) 17:00:10)
- 10 (2012-09-11 (火) 12:21:34)
- 11 (2012-09-11 (火) 15:29:41)
- 12 (2012-09-14 (金) 10:18:12)
- 13 (2012-09-19 (水) 12:20:24)
- 14 (2012-10-05 (金) 16:41:26)
- 15 (2013-04-23 (火) 14:54:19)
- 16 (2014-06-04 (水) 00:58:00)
- 17 (2014-09-04 (木) 01:35:22)
- 18 (2014-09-04 (木) 05:40:19)
- 19 (2014-09-26 (金) 19:15:27)
- 20 (2014-11-08 (土) 01:41:12)
- 21 (2014-11-19 (水) 19:37:34)
- 22 (2014-12-10 (水) 17:34:25)
- 23 (2015-04-14 (火) 17:22:27)
- 24 (2017-02-21 (火) 16:49:54)
- 25 (2017-04-13 (木) 12:02:17)
- 26 (2017-10-27 (金) 16:26:13)
- 27 (2019-03-12 (火) 18:16:47)
- 28 (2019-05-22 (水) 19:34:28)
- 29 (2021-11-18 (木) 12:46:32)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JavaScriptでpreタグで囲まれたソースコードをtextareaにコピーする #navi(../) RIGHT:Posted by [[aterai]] at 2012-07-25 * JavaScriptでpreタグで囲まれたソースコードをtextareaにコピーする [#c270c144] --- title: JavaScriptでpreタグで囲まれたソースコードをtextareaにコピーする author: aterai pubdate: 2012-07-24T18:09:17+09:00 description: JavaScriptを使用して、preタグで囲まれたソースコードを簡単にコピーするためのBookmarkletを作成する --- #contents ** 概要 [#f8b8ce13] 以下、Opera 12.50で、Clipboard API を使い、preタグで囲まれたソースコードを簡単にコピーする方法のテスト。 * 概要 [#summary] `pre`タグで囲まれたソースコードを簡単にコピーする - ユーザーJavaScriptフォルダにコピー - pre要素をダブルクリックすると、内容がtextareaに変換される - Clipboard API が使用できる Opera 12.50 の場合、コピー、カットすると元のpreに戻る - オリジナルは、[http://sybian99.googlepages.com/preToTextarea.user.js pre to textarea for Greasemonkey] -- `pre`タグをtextareaにして簡単にコピーできるようにする - [https://ateraimemo.com/data/javascript/pre2textarea.user.js pre2textarea.user.js] - `pre`要素をダブルクリックすると、内容が`textarea`に変換される - ダウンロード用のリンクを作成(`Java`のソースコードの場合は自動的にファイル名を取得)し、保存ダイアログを開く -- [[JavaScriptでソースコードからJavaのファイル名を取得する>JavaScript/JavaFileName]] ** ソースコード [#v391264a] * ソースコード [#sourcecode] #gist(5441120) * Bookmarklet版 [#bookmarklet] - 名前 -- `pre2textarea` - アドレス(`YUI Compressor` で圧縮) (function(){window.URL=window.URL||window.webkitURL;function h(l,k,m){var j=new Blob([l],{type:k+";charset=UTF-8"}),i=document.createElement("a");i.innerHTML="Download: "+m;i.setAttribute("download",m);i.href=window.URL.createObjectURL(j);return i}function d(j){var i=j.match(/public(?:\s|final)+(?:class|interface|enum)\s+([^<{\s]+)/m);return(i?i[1]:"Unknown")+".java"}function e(i){var j=document.createElement("div");j.innerHTML=i.innerHTML.replace(/<br[ \/]*>/gi,"\n").replace(/<.*?>/gm,"");return j.childNodes[0].nodeValue.replace(/\xA0/g," ")}function c(j){var i=j.downloadLink;j.parentNode.replaceChild(j.originalPre,j);if(i!=null&&i.parentNode){window.URL.revokeObjectURL(i.href);i.parentNode.removeChild(i)}}var f=function(l){var k=function(m){switch(m.type){case"keydown":if(m.key==="Escape"){c(this)}break;case"dblclick":c(this)}},j=this.getBoundingClientRect(),i=document.createElement("textarea");i.addEventListener("keydown",k,false);i.addEventListener("dblclick",k,false);i.style.width=j.width+"px";i.style.height=(j.height>240?240:j.height)+"px";i.originalPre=this;i.value=e(this);this.tx=i;this.parentNode.replaceChild(this.tx,this);this.tx.focus();this.tx.select();i.downloadLink=h(i.value,"text/plain",d(i.value));i.parentNode.insertBefore(i.downloadLink,i.nextSibling);i.downloadLink.click()},g=document.getElementsByTagName("pre"),b=0,a=g.length;for(;b<a;b++){g[b].addEventListener("dblclick",f,false)}}()); * メモ: ローカルにドロップして保存(ファイル名付き) [#ua1c0148] - [http://blog.futuresoftware.jp/?p=101 FutureSoftware開発日誌 Ver2.0 » HTML5のドラッグ&ドロップによるファイル保存] -- `Chrome`でのみ動作 -- ファイルとしてダウンロード可能 #code{{ (function() { var listener = function(e) { var tx = document.createElement("textarea"), div = document.createElement("div"), closeListener = function(e) { switch(e.type) { case 'copy': case 'cut': var dataTransfer = e.clipboardData; dataTransfer.items.add(this.innerText, 'text/plain'); this.parentNode.replaceChild(this.originalPre, this); e.preventDefault(); break; } }; function makeDraggableDownloadLink(text, mimeType, fileName) { var blob = new Blob([text], {type: mimeType}), a = document.createElement('a'); a.appendChild(document.createTextNode("download")); a.setAttribute('download', fileName); window.URL = window.URL || window.webkitURL; a.href = window.URL.createObjectURL(blob); a.addEventListener("dragstart", function(e) { e.dataTransfer.setData("DownloadURL", [mimeType,fileName,this.href].join(':')); }, false); return a; } }} tx.style.width = parseInt(getComputedStyle(this,"").width).toString()+"px"; tx.style.height = "240px"; tx.originalPre = this; * メモ: 直接クリップボードにコピー [#baa5f2ba] - [http://javascripter.hatenablog.com/entry/20091230/1262191418 クリップボードにコピー - 素人がプログラミングを勉強していたブログ] - [http://fukayatsu.github.com/blog/2012/07/22/markdown-linker-for-chrome/ markdown形式でリンクをクリップボードにコピーするchrome-extension作った - fukayatsu.dev()] // ctrl-c 無しでコピーできるかもと思ったけど… // var event = new ClipboardEvent('copy', { bubbles: true, cancelable: true } ); // var dataTransfer = event.clipboardData; // dataTransfer.items.add("aaaaaaaaaaaaaaaaaaaaaaa", "text/plain"); // //this.parentNode.replaceChild(this.originalPre, this); // document.dispatchEvent(event); // //event.preventDefault(); //ie, chrome-extension??? document.execCommand("copy"); tx.addEventListener("keydown", function(e) { if(e.keyCode=="27") { // ESC this.parentNode.replaceChild(this.originalPre, this); * メモ: Clipboard API [#q55b37f8] - `Clipboard API`が使用できる`Chrome`や`Opera 12.50`の場合、コピー、カットすると自動的に元の`pre`に戻すことが可能 #code{{ var listener = function(e) { var tx = document.createElement("textarea"), rect = this.getBoundingClientRect(), name, ret, closeListener = function(e) { switch(e.type) { case 'copy': case 'cut': var dataTransfer = e.clipboardData; dataTransfer.items.add(this.innerText, 'text/plain'); cleanup(this); e.preventDefault(); break; case 'keydown': if(e.key==="Escape") { cleanup(this); } }, false); tx.addEventListener("dblclick", function(e) { this.parentNode.replaceChild(this.originalPre, this); }, false); div.innerHTML = this.innerHTML.replace(/<br[ \/]*>/ig, "\n").replace(/<.*?>/mg, ""); tx.value = div.childNodes[0].nodeValue.replace(/\xA0/g, ' '); this.tx = tx; this.parentNode.replaceChild(this.tx, this); this.tx.focus(); this.tx.select(); tx.addEventListener('copy', closeListener, false); tx.addEventListener('cut', closeListener, false); }, pre = document.getElementsByTagName("pre"), i = 0, len = pre.length; for(; i<len; i++) { pre[i].addEventListener("dblclick", listener, false); } }()); break; case 'dblclick': cleanup(this); } }; tx.addEventListener('copy', closeListener, false); tx.addEventListener('cut', closeListener, false); tx.addEventListener("keydown", closeListener, false); tx.addEventListener("dblclick", closeListener, false); // ... }} ** 参考リンク [#led8cfb3] - [http://sybian99.googlepages.com/preToTextarea.user.js] - %%[http://d.hatena.ne.jp/Sybian/20070815/p2:title=preをtextareaに - Sybianの日記]%% -- %%via: [http://kawatarou.info/note/opera/opera_userjs.htm:title=Shishimushi - User JavaScript]%% - [http://d.hatena.ne.jp/aterai/20080725/1216954636 preタグで囲まれたソースコードを簡単にコピーする方法 - てんぷらメモ@はてな] * 参考リンク [#reference] - [http://sybian99.googlepages.com/preToTextarea.user.js pre to textarea for Greasemonkey] - [http://www.w3.org/TR/clipboard-apis/ Clipboard API and events] - [http://my.opera.com/desktopteam/blog/2012/07/06/marlin-1250-swim Opera Desktop Team - First bite of 12.50 ‘Marlin’: Clipboard API, redesigned key event handling, -webkit- CSS, and Notification Center] - [http://domes.lingua.heliohost.org/webapi/intro-webplatform1.html#section-1-3 クリップボード API - Introduction to the Web Platform - DOM ECMAScripting] ** コメント [#vf0fac74] * コメント [#comment] #comment #comment