miのJavaScriptモードを作った
mi.app用のJavaScriptモードを作ってみた。miはコード補完機能が標準でついてないので、そこのところを補完することを第一目標として作成した。詳しい機能などはGithubの方に書いておいたので、そちらも参照のこと。
スクリーンショット
主な機能
- JavaScriptの主要なプロパティ名/メソッド名をキーワードとして登録。
- 関数・オブジェクト・変数名を自動的に見だしリストに追加し、かつキーワードとして登録。
- キーワードに登録されたものは、コード入力中にescまたはCtrl+Spaceを押すことでコードの補完候補に現れるようになるので、入力の負荷が大幅に削減される。
- function/if/for/whileなどのあとで自動的にインデントを一段深くする機能を搭載
- ツールとして、JSDocのコメントをカーソルの位置に挿入する機能と、JSDoc Toolkitで表示中のファイルのドキュメントを作成する機能を搭載
インストール
Githubからダウンロード(ページ上の「ZIP」ボタンからzipでまとめてダウンロードできる)して、「JavaScript」フォルダをLibrary/Application Support/mi/mode/のなかに放り込めばインストールは完了です。
Tagged as: JavaScript, development
BogosortをJavaScriptで実装してみた
暇でWikipedia見てたらボゴソートとかいうのを見つけた。JavaScriptでの実装例があまりないようだったので、どうせだからと実装してみることにした。
ちなみに、ボゴソートとは「要素をシャッフル→ソートされてたら処理終了、されてなければまたシャッフル」を繰り返す、非常に効率の悪いアルゴリズムである。
function isSorted(aArray){ for(var i=0,l=aArray.length-1;i<l;i++){ if(! (aArray[i] <= aArray[i+1])) return false; } return true; } function shuffle(aArray){ return aArray.sort(function(){ return Math.random()*100 <= 50; }); } function bogoSort(aArray){ while(!isSorted(aArray)){ shuffle(aArray); } }
追記。sortでシャッフルすると偏るらしいです。
「タブを隠す」メニューを追加するuserChrome.jsスクリプト
他人に見られたくないサイトを見ているようなときに使えるかも?
隠されたタブは、タブバーからは見えなくなるので、タブ一覧のメニューから選択するようにして下さい。 また、隠されたタブを選択している状態で、「Show Selected Tab」を実行すると、普通のタブに戻ります。
Tagged as: Product, development, JavaScript, userChrome.js
adblock#.uc.js
匿名で開発していたものも公開することにした。これはそのうちの一つ。
個人的に、Adblock Plusとかが重かったので、非力なPCでもそれなりのスピードで動くようにすることを目指して開発した。 詳しい使い方などは、Read Me.txtを見ていただければ分かると思う。Tagged as: Product, development, JavaScript, userChrome.js, Firefox, adblock
IEのDOMがおかしい
導入したie6-upgrade-warningが実はうまく動いていなかったので、原因を探っていたら、IEのバグらしきものに遭遇した。
具体的には、以下のような感じ。
var input = document.createElement('input'); input.id = "test_i_1"; input.type = "checkbox"; document.body.appendChild(input); //きちんとチェックボックスが追加される var input = document.createElement('input'); input.id = "test_i_2"; document.body.appendChild(input); var i = document.getElementById('test_i_2'); i.type = "checkbox"; //エラーがでる
なぜか、getElementByIdしたやつだとDOMがうまく動かないみたい。ちなみに、i.setAttribute("type", "checkbox")
でも
結果は同じだった。
やはりIEのDOMはよく分からん...
Tagged as: development, JavaScript, ie