開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本( Michael Morrison (著), 豊福 剛 (翻訳)、オライリージャパン)の3章(ブラウザを調べる)、自分で考えてみよう(p.127)をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
自分で考えてみよう(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 コメント:
コメントを投稿