2014年1月23日木曜日

開発環境

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本( Michael Morrison (著), 豊福 剛 (翻訳)、オライリージャパン)の3章(ブラウザを調べる)、自分で考えてみよう(p.127)をDartで解いてみる。

その他参考書籍

自分で考えてみよう(p.127)

コード

cookie.dart

library cookie;

import 'dart:html';

void writeCookie(String name, String value, num days){
  var expires = '';
  if(days > 0){
    var d = new DateTime.now();
    d = d.add(new Duration(days: days));
    expires = '; expires=$d';
  }
  document.cookie = '$name=$value$expires; path=/';
}

String readCookie(String name){
  var search_name = '$name=';
  var cookies = document.cookie.split(';');
  for(String c in cookies){
    c = c.trim();
    if(c.startsWith(search_name)){
      return c.substring(search_name.length, c.length);
    }
  }
  return null;
}

void eraseCookie(name){
  writeCookie(name, '', -1);
}

sample.dart

import 'dart:html';
import 'dart:js' as js;
import 'dart:async' as async;
import 'cookie.dart';

void main(){
  smile_img.onClick.listen((MouseEvent ) => touchSmile());
  resizeSmile();
  greetUser();
  body.onResize.listen((var event) => resizeSmile());
}

ImageElement smile_img = querySelector('#smile_img');
BodyElement body = querySelector('body');
String user_name = '';

void greetUser(){
  if(window.navigator.cookieEnabled){
    user_name = readCookie('smile_user_name');
  }
  if(user_name != '' && user_name != null){
    window.alert('こんにちは、' + user_name + 'さん。');
  } else {
    window.alert('こんにちは、私は SMILE です。');
  }
}

void touchSmile(){
  if(user_name != '' && user_name != null){
    window.alert('$user_nameさん、声をかけてくれてありがとう。');
  } else {
    user_name = js.context.callMethod('prompt', ['あなたのお名前は?']);
    if(user_name != '' && user_name != null){
     window.alert('はじめまして、$user_nameさん。');
     if(window.navigator.cookieEnabled){
       writeCookie('smile_user_name', user_name, 5 * 365);
     } else {
       window.alert('お使いのブラウザはクッキーが使えないように設定されています');
     }
    }
  }
  smile_img.src = 'http://farm4.staticflickr.com/3799/12008611555_9737b8ac4b_o.png';
  var t = new async.Timer(new Duration(seconds:10),
      () => smile_img.src =
      'http://farm8.staticflickr.com/7455/12009424956_d02b583696_o.png');
}

void resizeSmile(){
  smile_img.style.height = '${(body.clientHeight - 100) * 0.9}px';
}

完成ページ

0 コメント:

コメントを投稿