環境
- OS: FreeBSD 9.0 STABLE
PATHのコロン区切り展開が sed なあたりが特に苦しまぎれだが、 スマートな解決はあるだろうか。
Java FX2 を動かしてみたというのはもののついでで、 gistをBloggerに貼れるかどうか試したかったがためにできた記事。
<div id="scriptArea"> <script type="text/javascript" src="http://www.google.com/jsapi"></script> </div>
// Maps API読み込み状態を管理するdeferredオブジェクトを作っておく。
_maps_loaded: $.Deferred()
// 地図の読み込み終了直後に行う初期化処理を登録しておく。
this._maps_loaded.done(this.initialize_map);
// 読み込み開始、完了時にDeferredを完了状態にする。
google.load('maps', '3', {
other_params: 'sensor=false',
callback: function(){
that._maps_loaded.resolve();
}});
$('#map_canvas').css('width', $(document).width());
$('#map_canvas').css('height', $(document).height());
// ↓は実機では未検証。
// 画面回転についていくなら、orientationchangeメソッドについていけばよい(はず)。
$(window).on('orientationchange',function(e){
});
var store_map_page = {
_maps_loaded: $.Deferred(),
_map_options: {},
geos: {},
map_obj: {},
map_info_window: {},
_lazy_loaded: function(){
this.geos = {
station: new google.maps.LatLng(34.810538,135.494923),
yamada: new google.maps.LatLng(34.812141,135.494709),
oasis: new google.maps.LatLng(34.811155,135.494473)
};
var map_options = {
zoom: 17,
center: this.geos['station'],
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.map_obj = new google.maps.Map(document.getElementById('store_map_canvas'), map_options);
this.map_info_window = new google.maps.InfoWindow(this.map_obj);
_map_options = map_options;
},
_initialize: function (){
var that = this;
this._maps_loaded.done(this.map_resize, this._lazy_loaded);
google.load('maps', '3', {
other_params: 'sensor=false',
callback: function(){
that._maps_loaded.resolve();
}});
},
map_resize: function(){
$('#store_map_canvas').css('width', $(document).width());
$('#store_map_canvas').css('height', $(document).height());
},
orientation_changed: function(e){
this.map_resize();
if(e.orientation =='portrait'){
} else {
}
}
};
$('body').on('pageshow', function(){
store_map_page._initialize.apply(store_map_page);
});
$(window).on('orientationchange',function(e){
store_map_page.orientation_changed.call(store_map_page, e);
});
$(window).resize(store_map_page.map_resize);
$(function(){
function TestCondition(recordLength, recordNumber){
this.isCalculated = false;
this.recordLength = recordLength;
this.recordNumber = recordNumber;
this.spentTime = {
constructJsObject: 0,
serialize: 0,
deserialize: 0
};
}
TestCondition.prototype = {
execute: function(){
var recordString = "";
for(var i=0; i<this.recordLength; i++){
recordString += "X";
}
var rawJsObject = {};
var startTime = new Date();
for(var i=0; i<this.recordNumber; i++){
rawJsObject[i] = new String(recordString);
}
this.spentTime.constructJsObject = new Date() - startTime;
startTime = new Date();
var serialized = $.toJSON(rawJsObject, null)
this.spentTime.serialize = new Date() - startTime;
startTime = new Date();
var deserialized = $.parseJSON(serialized);
var deserialize = new Date() - startTime;
this.spentTime.deserialize = new Date() - startTime;
this.isCalculated = true;
},
writeResult: function(){
var resultTable = $('#resultTable');
var resultRecord = $('<tr></tr>');
resultRecord.append('<td>' + this.recordLength + '</td>');
resultRecord.append('<td>' + this.recordNumber + '</td>');
resultRecord.append('<td>' + this.spentTime.constructJsObject + '</td>');
resultRecord.append('<td>' + this.spentTime.serialize + '</td>');
resultRecord.append('<td>' + this.spentTime.deserialize + '</td>');
resultTable.append(resultRecord);
}
};
for(var i=1; i<11; i++){
for(var j=0; j<20; j++){
var test = new TestCondition(i, Math.pow(2, j));
test.execute();
test.writeResult();
}
}
});
#参照設定 作成 ~projB$ svn propset svn:externals 'resources http://localhost/svn/projA/resources' . property 'svn:externals' set on '.' ~projB$ svn up Fetching external item into 'resources' A foo A bar Updated external to revision 2. #参照設定 削除 ~projB$ svn propdel svn:externals ./resources
libB/resources$ svn propset svn:externals '^/repo/trunk/libA/resources/shared_file.txt shared_copy.txt' . libB/resources$ svn uplibB/resources/shared_copy.txtを編集してコミットすれば、libA/resources/shared_file.txt更新時に反映される。
// keypressイベントで発火させた後のコード
// @param event {Object} eventObject
// @return {Boolean} true:「文字入力」は行われていない、false:「文字入力」が行われた。
// キーコードの取得
var code = event.which ? event.which : event.keyCode ? event.keyCode : event.charCode ? event.charCode : 0 ;
//
if( (navigator.userAgent.indexOf('Gecko')) || (navigator.userAgent.indexOf('Presto')) ){
// Firefox and Opera send a code of special key whe user press it.
// below statements avoid prevented some codes sended.(arrows, delete, home, end, backspace, tab)
if( (code==37) || (code==38) ||(code==39) ||(code==40) ||(code==46) ||(code==36) ||(code==35) ||(code==8) ||(code==9) ){
return true;
}
}
if( (!code) || (code < 32)) ) {
event.preventDefault();
return false;
}
日本語変換を検知するのは無理か。 Enter確定やスペース確定を拾うとそれっぽい気がするしたけど でも、普通目的のEnterと変換のためのEnterを分離しきれる気がしない。 あと、日本語IMEをデフォルトから変更されたりしたらお手上げじゃない?
ペーストについては、pasteイベント拾いそうなものだが、 こいつは入力確定前でかつ、何が入力されようとしているかは検知できない。 なにやら、Flashを埋め込んで連携することで可能になるようだが。 まぁ、ブラウザでWeb閲覧するごときでクリップボードの内容なんか引っこ抜かれちゃ困る。 世の中に何人かはパスワード入力でコピペってる人がいるんじゃない?
理想的には、「ペースト操作が完了してブラウザが文字列受取」 ~ 「文字列をテキストボックスに描画」の間がとれればと思うけど、 それが可能な仕組みになってるのかどうかすらわからん。
$('#numeric').inplim({regexStr:'[0-9]', jp:true});
$('#alphabet').inplim({regexStr:'[a-zA-Z]', jp:true});
$('#alphanumeric').inplim({regexStr:'[a-zA-Z0-9]', jp:true});
$('#mail').inplim({regexStr:'[a-zA-Z0-9-_\.@]', jp:true});