2011年12月23日金曜日

sencha touchのtoolbar

今日はあさから、youtubeのmp4データをjavascriptだけで抜けないかずっとやってました。
結果的には、URLは解析できたんですが、IPアドレス制限にひっかかりましたね。音楽を再生するwebアプリはできないっぽい。中継サーバーたてればいいのですが、それやるとjasracに目を付けられそうだし・・・うーん残念。

さて、sencha touchについて、しばらくまとめようと思います。
今回の記事は一発目、とりいそぎ、toolbarの挙動についてです。

サンプルで作ったwebアプリはこちら。
http://taktodtools.appspot.com/toolbarApp.html
ソースコードに何ができるか等、記述してあります。

要点は。

  • 親要素のdockedItemsにいれればつかえるが、itemsにいれてもOK
  • iconClsによるアイコンの追加はできない。
  • textは無視される。
  • titleは有効で中央に表示される。
  • title内では、htmlタグが有効、ただしaタグ貼ってもリンクにはできない。
  • 子要素のdockedItemsは無視される。
  • 子要素のitemsはボタン風になる。
  • 子要素のitems内では、uiでback forward action等追加スタイルを設定できる。
  • 子要素のitems内では、spacerを挟むと反対側(右側)にアイコンがならぶようになるが、追加はすべて右向き
といった感じでした。

2011年12月19日月曜日

sencha touchのテキストエリア

iPhoneのwebアプリをsencha touchでつくっていて、非常にこまったのが、テキストエリアの取り扱い。

普通にtextareaを置くだけなら、デフォルト動作が発動するので、問題はないのですが、sencha-touchをつかってつくっているといろいろと動作不具合がでてきます。
問題点は

  • テキストエリアの中で行数がふえすぎると、テキストエリアの内部をスクロールさせるすべがない。
  • テキストエリアがおおきく、スクロールして、テキストエリアのトップが上部にはみ出している場合に、文字入力しようとするとアドレスバーがはいってきて、編集できない。
といった問題があります。

というわけで、僕の対処の仕方です。
まず、前者の問題行数が増えすぎて、はみ出るとスクロールできない。
→よって行数がふえたら、テキストエリアを大きくしてやればよい。
textareaでkeyup eventを監視して、行数が増えた場合は大きくしてやればいい。

sencha touchで追加したコンポーネントは直接IDを取得したりする方法がないので、textareaの大きさ変更はtextareaのスタイルシートを書き換えることで実施しています。
テキストエリアのcss設定
textarea {
  height: 100;
}
// cssの要素の大きさを変更するjavascript関数
function changeTextareaHeight(value) {
  var css_list = document.styleSheets;
  if(css_list) for (var i = 0;i < css_list.length;i ++) {
    var rule_list = (css_list[i].cssRules) ? css_list[i].cssRules : css_list[i].rules;
    if(rule_list == null) {
      continue;
    }
    for(var ii = 0;ii < rule_list.length;ii ++) {
      if(rule_list[ii].selectorText == 'textarea') {
        with(rule_list[ii].style) {
          // fontSize = "50%";
          height = value + "px";
        }
      }
    }
  }
}

// keyupのイベント
keyup: function(target, event) {
  // 入力文字の文字列数を確認して、改行にあわせて、パネルのサイズを変更する
  var data = target.getValue();
  var matches = data.match(/[\n|\r\n]/g);
  var num = 0;
  if(matches instanceof Array) {
    num = matches.length;
  }
  if(this.lineNum == num) {
    return;
  }
  this.lineNum = num;
  // パネルの高さx2+文字の高さx改行
  // これをtextareaのサイズにして調整すればOK
  changeTextareaHeight(App.views.viewport.height + num * 24);
}

これで行数がふえればそのままテキストエリアがどんどん大きくなっていきます。
一応問題点もあり、文字が長過ぎて改行文字抜きに改行されてしまった場合。
上記の正規表現からすると、改行とカウントされないのでずれが発生します。

さて2つ目の問題、アドレスバー等がはいってきて困る問題の対処です。
アドレスバーがでてきてしまう問題は、テキストエリアにフォーカスがあたったときに、テキストエリアのちょうど上部の端までwindowをスクロールしてやれば大丈夫みたいです。
よってfocusのイベントでwindow.scrollToを実行します。
focus: function(target, event) {
  var toolbar = Ext.getCmp('editToolbar');
  this.toolbarHeight = toolbar.getHeight();
  window.scrollTo(0,this.toolbarHeight);
},

今回のwebアプリのサンプル(chrome safari iphoneにて動作確認済み)

ではでは〜

2011年12月17日土曜日

sencha touchを解析中。

iPhone用のWebアプリをつくるのに、始めはjqtouchをつかってやろうと思っていたのですが、formのパーツをいれてフォーカスを移動させると動作がおかしくなったり、タイトルバーをださないとボタンが動作しなかったりとちょっと癖が多そうなので、はやめに見切りをつけました。

というわけで、sencha touchを使おうと思っています。
ぱっとみ、kitchensinkというアプリ これが非常に優秀なので、これを参考にプログラムをするつもりです。

というわけで、kitchensinkの構造がどうなっているか、自分用のメモを書いておきます。
プログラム構造
index.html
+ CodeBox.js(ソースコード表示する小窓のデータ:コードの要素解析を実施して、色をつけたりしてる。)
+ index.js(動作の中央部)
+ structure.js(アイテムリストを保持している)

 CodeBoxは要素解析とかいった部分のデータなのでいらないです。
というかiPhoneの選択は、タグを超えて動作しにくいみたいなので、むしろ邪魔。
 indexは動作の中央部。見た目的にNestedListをつかってるだけに見えますが、kitchensinkでは、通常のコンポーネントの組み合わせでNestedListっぽく動作させているようです。
これ、めちゃくちゃはまりました。だって、NestedListだけでつくれると勘違いしてしまったんですから・・・orz
 structureは各リストの内容用の部分です。

Webアプリをつくるwebアプリをつくってみた。

iPhoneを入手しました。
いろいろできて便利ですが、やっぱりこういうデバイスをでたら、それようのアプリを開発したくなります。

ちょっと思いついたら電車の中で、ぱぱっとアプリを書いてみたい・・・
とおもったので、WebアプリをつくるWebアプリをかいてみました。
jqtとはいっていますが、JQtouchのフレームワークをつかってつくってみました。



JQtouchは、フォームの部品があると動作がおかしくなったりするバグがあるしSave,Load,Runのメニューのところむりやりcssを解除してるので妙な動作しますね^^;

jqtouchはさわって3日目ですが、すでにあきてて同じアプリをsenchatouchでつくって、senchatouchのアプリ開発ができるような編集アプリをつくりたいと考えてます。
ではでは〜

2011年12月4日日曜日

ロガーのレベルの振り分け方、個人メモ

最近やってるロガーの振り分け方。

FATAL 全体をとめないといけないような危険な状況。要通知
ERROR 現在の動作ユーザーの処理が続行できない。要通知?
WARN 好ましくない状況が発生、でも動作はする。
INFO 動作段階のメモ
DEBUG 動作中の変数状況のDumpなど

こんな感じが最近のマイブーム。
FATAL、ERRORについては、メールやSyslog、Nagiosに検知を飛ばす等する。
これで想定内の動作のバグ等については、ばっちりかなとおもってるw