開発環境
- 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 コメント:
コメントを投稿