JavaScript

EmscriptenでRustをJavaScriptへコンパイルする

以前のエントリではうまくいかなかった、RustのJavaScriptへのコンパイルですが、 gifnksm.hatenablog.jp 先日フォーラムに投稿されていたやり方をまねるだけで簡単にできるようになっていました。 internals.rust-lang.org Rust本体にEmscripten対応が取り…

EmscriptenでRustをJSへコンパイルする (コンパイルできてない)

2016/3/8追記 うまくいきました。エントリ書きました。 gifnksm.hatenablog.jp RustでEmscriptenを使う方法を調べたのでメモ。2015年12月28日時点でなんとか動作させるための手順です。今後オフィシャルにEmscriptenサポートが入るなどすると、もっと簡単な…

TextNodeにも使えるgetBoundingClientRect

JavaScript(というかDOM? CSSOM?)には getBoundingClientRect という便利なメソッドが用意されています。これを使えば,ある要素のviewport上の座標,つまりブラウザ画面の左上を原点とした座標上での要素の位置を取得することができます。これまでは d:id…

ECMAScript5時代のクラス定義

Firefox4でES5のプロパティ定義がサポートされるようなので,実際に使うときに備えて覚え書きしてみる。 これまでこんな感じで書いてたJavaScriptのクラス定義。 // クラス const Hoge = function(prop) { this._prop = prop; }; Hoge.prototype = { _prop: …

KeySnailでタブを操作するプラグイン 「TabSnail」 を作った

以前公開した,ツリー型タブをKeySnailから操作するコマンド群をKeySnailプラグイン化してみました。インストールすると,タブ操作用の各種エクステ (コマンド)が利用できるようになります。ツリー型タブがインストールされていると,ツリー操作用のエクステ…

ツリー型タブをKeySnailから操作する

ツリー型タブでツリー表示されたタブを,KeySnailから操作するためのスクリプトを(半年ほど?前に)書きました。「暇な時にタブ移動のコマンドとか追加してKeySnailプラグインにしよう!」と思い立ってからかなり時間がたってしまいましたが,未だにプラグイ…

選択範囲のリンクを開いたり保存したりするJetpack

表題のJetpackスクリプトを作ったので公開しました。 The Jetpack Gallery’s Final Flight | Mozilla Add-ons Blog スクリプト自体は結構前に作っていたのですが,せっかくなので公開してみました。

let式とlet宣言の微妙な差異

ちょっとだけハマったのでメモ。let式内で複数の変数を定義するとき,同時に定義した他の変数は参照出来ない,というお話。 varの場合,同時に定義した変数xの値を参照することができる。 var x = "a", y = x + "b"; alert(y); // => "ab" let"宣言"の場合も…

JavaScriptでParsecっぽいものを作った

車輪の再発明してみた。Rhinoでしか動作確認してないけど多くのブラウザで動作するんじゃないかな。jsparsec.js この辺参考にしてます→inforno :: Javascriptでパーサジェネレータを書いてみた 関数名は基本的にParsecのものと合わせています。Parsec.Combin…

JavaScriptでcurry化

一昔前に流行ったネタでいろんな人がコードを書いていたと思うんだけど,3引数以上の関数をきちんとcurry化できる例 (「「「「関数を返す関数」を返す関数」を返す関数」…」に変換する) を見つけられなかったので,自分で書いてみた。 function curry(fun) {…

JavaScript基礎文法最速マスター

続々と増え続ける基礎文法最速マスターシリーズ(あまりにも増えてきたので他の言語記事へのリンクは別の記事に移しました)。 JavaScript 版は誰も書いていなかったようなので書いてみます。こういう解説記事的なものを書くのは初めてなので変なところがあっ…

カード配り問題

なんかいろんな場所で見かけたのでやってみた。 10分でコーディング|プログラミングに自信があるやつこい!! var Cards = function() {}; Cards.prototype = { deal: function(numPlayers, deck) { var len = (deck.length / numPlayers) >>> 0; var res…

JavaScriptの文法

JavaScriptでこんな書き方ができる,という例 var num = 1/2; var Field = { a: num*=2, b: num*=2, c: num*=2 }; // => Field = {a: 1, b: 2, c: 4}; ビットフィールドを書くときなんかに便利そうだけどなんか気持ち悪いなぁ…

XMLなページ用document.write

if(window.DOMParser) { document.getCurrentScript = function() { var ss = document.getElementsByTagName('script'); for(var i = ss.length-1; i >= 0; i--) if(ss[i].id.search('_firebug') != 0) return ss[i]; }; parser = new DOMParser(); documen…

自分自身が所属するscript要素を取得する (Firebug対応版)

Firebugが有効になっている環境でid:amachangのスクリプト(とてもシンプルに自分自身が属する script 要素を取得 - IT戦記)が動作しなかったので,書き換えてみました。 document.getCurrentScript = function() { var ss = document.getElementsByTagName('…

DOMNodeRemovedFromDocumentが効いていない?

こんなコードを書いた。elemにはdocumentツリー内の適当な要素が代入されている。 elem.addEventListener('DOMNodeRemoved', function() { alert('removed.'); }, false); elem.addEventListener('DOMNodeRemovedFromDocument', function() { alert('removed…

大学からメモ

後で詳しく書く。 document.addEventListener('keypress', function(e) console.log(document.activeElement), false); 家に帰ってきた リンクがフォーカスを得たとき,ポップアップを表示,てのがやりたかった。 mouseoverの時と同じようにdocument.addEven…

ぐりもん関係の思いつきメモ

スタイル周りの話 今回の 「nicovideo Thumbinfo popup」 のように,不特定多数のサイトで何かを表示するようなスクリプトは,そのサイトに元々指定されていたスタイルの影響を受けてしまう。 スタイルを全解除するようなCSSを書いてもいいが,それは面倒だ…

はてなしりとり2カンニングスクリプト

要Firebug&Autopagerize 1文字目を推測する - はてなキーワードから該当する文字へ飛ぶ。カテゴリを絞るとなお良し。 Autopagerizeでページを限界まで継ぎ足す Firebugのコンソールで以下のスクリプトを実行する。(よみがな6文字,漢字4文字の場合) 頑張る …

正規表現と反復

正規表現でマッチした部分について連続で何か処理を行うとき,今までは面倒だったからこんな風に書いていた。 str.replace(regexp, func); 置換後の文字列が生成されるなど,メモリと処理時間を無駄使いしてしまう書き方だ。楽だけど。 そこで,手軽さを保ち…

Javascript1.8

Firefox3 + Greasemonkey ならJavascript1.8の一部の新機能が使えるってことを今知った。 <script type="application/javascript;version=1.8"> この指定が必要なのは新しく追加されたキーワードを使う機能だけだとか。だから式クロージャは使い放題。 Array.prototype.include = function(x0) this.some(functi…

謎の挙動の差

リンクのクリックイベントにイベントリスナを追加して,中クリックをハンドリングしたい。以下,きちんと動くソースと,なぜか動かないソース。 動く例 document.addEventListener('click', function(e) { var link = e.target; // クリックイベントを取得し…

preventDefaultで範囲選択をキャンセル出来ない?

nicovideo Tag Edit Helperでは,span要素のmouseupイベントを検知してタグの選択ボタンを作っているのですが, あるボタンをクリック 別のボタンをShift+クリック という手順で操作したとき,ボタンの間のテキストが選択されてしまいます。 とりあえずpreve…

DOM functions v.s. innerHTML v.s. cloneNode

JavascriptでDOM要素を生成するにはいろいろなやり方があるけど,どれが一番速いのか気になっていた。漠然と,cloneNode速そうだなーと思ってそれを使っていた。 思い込みで速度を語るのはよくない!と思ったので,Firefox3 RC1 + Firebug 1.2.0b1 で軽くベ…

classNameを追加したり削除したりトグルしたり。

本当はHTMLElement.prototypeにプロパティを追加したいんだけど,Greasemonkeyがそれを許してくれないようだ。だから関数として定義してみた。 function equalTo(x) { return function (y) { return x == y;} } function notEqualTo(x) { return function (y…

IEのbehaviourがあれば

IEのbehaviourみたいなのがFirefoxにもあればNicovideo thumbinfo Checkみたいなのは手軽に作れるようになるんじゃないかな,と妄想。Autopagerizeで継ぎ足されたページにサムネイルを出すのも,Autopagerizeを意識することなく可能になると。 XPathやDOMと…

Firefox のJSメモ

var $ = document.getElementById; $('hoge'); これはFirefox 3だと意図した通りに動くが,Firefox 2だとエラーが出る。Firefox 2のバグが3で直った,ということなのだろうか。ちょっと釈然としないけど,DOM関係の関数は普通の関数と違う挙動を示すことがあ…

Minibufferの$Xと$Nを勝手に拡張

まずは$X。 const Single = {}; function $exp(exp, ownerDocument) { if(!ownerDocument) ownerDocument = document; var resolver = document.createNSResolver(ownerDocument); var def = (document.contentType == 'application/xhtml+xml') ? 'http://w…