mirror of
https://scm.univ-tours.fr/22107988t/rappaurio-sae501_502.git
synced 2025-08-29 08:45:58 +02:00
525 lines
24 KiB
JavaScript
525 lines
24 KiB
JavaScript
|
||
/**
|
||
* @name CeL function for API
|
||
* @fileoverview
|
||
* 本檔案包含了 include API 專用的 functions。
|
||
* @since 2010/6/20 13:28:50
|
||
*/
|
||
|
||
/*
|
||
|
||
*/
|
||
|
||
'use strict';
|
||
if (typeof CeL === 'function')
|
||
CeL.run({name:'data.code.API',
|
||
code:function(library_namespace) {
|
||
|
||
|
||
// nothing required
|
||
|
||
|
||
/**
|
||
* null module constructor
|
||
* @class 相容性 test 專用的 functions
|
||
*/
|
||
var _// JSDT:_module_
|
||
= function() {
|
||
// null module constructor
|
||
};
|
||
|
||
/**
|
||
* for JSDT: 有 prototype 才會將之當作 Class
|
||
*/
|
||
_// JSDT:_module_
|
||
.prototype = {
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
/* 2008/5/29 20:6:23-6/4 2:10:21
|
||
7/3 13:34 showNeighbor: 可拖曳 loc->name/address, 有資料的提高優先權, bug fix: 有些太遠的還是會被列入, 有些近的可能因為不是住址而不會被列入
|
||
7/9 13:9:15 context menu
|
||
7/9 21:12:3 getLocations
|
||
2009/7/20 20:27:58 稍作修正
|
||
|
||
|
||
bug:
|
||
名稱相同時會出現被覆蓋的情況!
|
||
|
||
|
||
TO TEST:
|
||
|
||
|
||
showClass.setRepository('_ev_');
|
||
|
||
sC=showClass.showOnScope;
|
||
|
||
sC('mp',GLog.write);
|
||
|
||
sC('Fb','mp');
|
||
|
||
sC('y','Fb');
|
||
|
||
sC('A','y');
|
||
|
||
|
||
to use:
|
||
|
||
<script type="text/javascript" src="map.js"></script>
|
||
<script type="text/javascript">//<![CDATA[
|
||
wAPIcode('Gmap');
|
||
//]]></script>
|
||
|
||
|
||
TODO:
|
||
分類(Categories)&分顏色顯示
|
||
Auto Zoom Out http://esa.ilmari.googlepages.com/sorry.htm
|
||
search data only
|
||
preload map & markers
|
||
GDirections
|
||
圈選
|
||
用經緯度查詢
|
||
|
||
c.f. http://jmaps.digitalspaghetti.me.uk/
|
||
|
||
http://www.ascc.sinica.edu.tw/nl/90/1706/02.txt
|
||
臺灣地區地名網站
|
||
http://tgnis.ascc.net
|
||
http://placesearch.moi.gov.tw/index_tw.php
|
||
|
||
地名學名詞解釋彙編
|
||
http://webgis.sinica.edu.tw/geo/Termquery.asp
|
||
|
||
臺灣地區地名相關文獻查詢系統
|
||
http://webgis.sinica.edu.tw/geo/reference.html
|
||
|
||
經濟部中央地質調查所-地質資料整合查詢
|
||
http://datawarehouse.moeacgs.gov.tw/geo/index/GISSearch/MSDefault.htm
|
||
|
||
|
||
http://gissrv3.sinica.edu.tw/tgnis_query/link.php?cid=1
|
||
http://www.edu.geo.ntnu.edu.tw/modules/wordpress/2008/06/08/yxaewaweaeobmh/
|
||
|
||
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=1&d_database=25k_2002
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=1085&d_database=5000_1
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=01663&d_database=chen_quo
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=1663&d_database=chen_jen
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=11880&d_database=tw_fort
|
||
http://gissrv3.sinica.edu.tw/search/left2_detail.php?d_number=02713&d_database=ching
|
||
|
||
http://gissrv3.sinica.edu.tw/input/detail.php?input_id=45875
|
||
|
||
資料庫 編號 類型(類別) 名稱 地理座標(經緯度) 所屬縣市鄉鎮(所屬行政區,地點) 別稱 註記(所在圖號) 意義(說明)
|
||
|
||
|
||
|
||
http://www.isp.tw/zip.php
|
||
|
||
小工具
|
||
|
||
1.溫度轉換
|
||
2.進位換算
|
||
3.BMI值及熱量需求計算
|
||
4.角度徑度換算
|
||
5.度量衡計算
|
||
6.區碼國碼查詢
|
||
7.郵遞區號查詢
|
||
8.金融機構代號查詢
|
||
9.色彩表示法查詢
|
||
10.摩斯密碼及字母述語
|
||
11.生肖星座查詢
|
||
12.婦女安全期計算
|
||
13.花言花語查詢
|
||
14.常用機關電話查詢
|
||
15.航空公司機場代碼查詢
|
||
16.簡易匯率換算
|
||
17.國曆農曆換算
|
||
18.急救及疾病忌口寶典
|
||
19.尺碼對照表
|
||
20.自訂公式計算
|
||
21.股票投資組合管理
|
||
|
||
|
||
*/
|
||
|
||
|
||
|
||
|
||
/* 初始化 Google Gears
|
||
http://code.google.com/apis/gears/gears_init.js
|
||
http://blog.ericsk.org/archives/978
|
||
http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!1063.entry
|
||
|
||
Google Gears退休: Gears功能正被整合到HTML5規格中
|
||
we expect developers to use HTML5 for these features moving forward as it's a standards-based approach that will be available across all browsers.
|
||
http://it.solidot.org/article.pl?sid=09/12/03/0539248
|
||
*/
|
||
function init_Google_Gears() {
|
||
// 檢查是否已經定義 Google Gear
|
||
if (window.google && google.gears)
|
||
return;
|
||
|
||
var factory = null;
|
||
// 依據不同的瀏覽器,採用不同方式產生 GearFactory
|
||
if (typeof GearsFactory != 'undefined')
|
||
// Firefox
|
||
factory = new GearsFactory();
|
||
else
|
||
try {
|
||
// IE
|
||
factory = new ActiveXObject('Gears.Factory');
|
||
// privateSetGlobalObject is only required and supported on WinCE.
|
||
if (factory.getBuildInfo().indexOf('ie_mobile') != -1)
|
||
factory.privateSetGlobalObject(this);
|
||
} catch (e) {
|
||
// Safari
|
||
if (typeof navigator.mimeTypes != 'undefined'
|
||
&& navigator.mimeTypes["application/x-googlegears"]) {
|
||
factory = document.createElement("object");
|
||
factory.style.display = "none";
|
||
factory.width = factory.height = 0;
|
||
factory.type = "application/x-googlegears";
|
||
document.documentElement.appendChild(factory);
|
||
}
|
||
}
|
||
if (!factory)
|
||
return 1;
|
||
|
||
if (!window.google)
|
||
window.google = {};
|
||
if (!google.gears)
|
||
google.gears = {
|
||
factory : factory
|
||
};
|
||
|
||
}
|
||
|
||
|
||
/*
|
||
f={catch:true/false/update, restore:false/true.}
|
||
*/
|
||
catchFile.ls=0; // localServer
|
||
catchFile.sn='catch-files'; // storeName: 定義 Managed Store 的名稱,這個名稱可用於 createManagedStore, removeManagedStore 和 openManagedStore 三個 API
|
||
catchFile.s=0; // managed store
|
||
//
|
||
catchFile.f=function(url,success,captureId){};
|
||
catchFile.fL=[location.pathname]; // file list
|
||
catchFile.doCache=1;
|
||
catchFile.noAsk=1;
|
||
function catchFile(fList, f) {
|
||
var _f = arguments.callee;
|
||
if (!_f.doCache)
|
||
return;
|
||
|
||
if (window.location.protocol == 'file:') {
|
||
sl('catchFile: Google Gears 不能在本機上執行或測試!');
|
||
return 0;
|
||
}
|
||
|
||
if (init_Google_Gears()) {
|
||
if (_f.answered)
|
||
return 0;
|
||
_f.answered = 1;
|
||
if (!_f.noAsk && confirm('使用本功能必須安裝 Google Gears,請問您要安裝嗎?'))
|
||
// ?action=install&message=加入你的訊息&return=安裝後要導回的網址
|
||
window.location.href = 'http://gears.google.com/';
|
||
else
|
||
sl('<em>catchFile: 若不安裝 Google Gears 則將無法使用本功能!</em>');
|
||
return 1;
|
||
}
|
||
|
||
if (!_f.ls)
|
||
try {
|
||
// 建立 Local Server
|
||
_f.ls = window.google.gears.factory.create('beta.localserver',
|
||
'1.0');
|
||
} catch (e) {
|
||
sl('catchFile: Could not create local server: ['
|
||
+ (e.number & 0xFFFF) + '] ' + e.message);
|
||
return 2;
|
||
}
|
||
|
||
if (!_f.s)
|
||
try {
|
||
// 建立儲存空間
|
||
_f.s = _f.ls.createManagedStore(_f.sn);
|
||
_f.s = _f.ls.createStore(_f.sn);
|
||
} catch (e) {
|
||
if (window.location.protocol == 'file:')
|
||
sl('Google Gears 不能在本機上執行測試!');
|
||
else
|
||
sl('catchFile: Could not create managed store: ['
|
||
+ (e.number & 0xFFFF) + '] ' + e.message);
|
||
return 3;
|
||
}
|
||
|
||
if ((fList instanceof String) && fList) {
|
||
// TODO: untested!!
|
||
// 指定 json 的 url
|
||
_f.s.manifestUrl(fList);
|
||
// 開始確定版本及同步
|
||
_f.s.checkForUpdate();
|
||
|
||
// 為了確認是否同步結束了,可以加入下列的 timer 來檢查:
|
||
var timer = google.gears.factory.create('beta.timer');
|
||
// 每 500ms 檢查一下
|
||
var timerId = timer.setInterval(function() {
|
||
// 同步完成
|
||
if (store.currentVersion) {
|
||
timer.clearInterval(timerId);
|
||
sl('同步完成');
|
||
}
|
||
}, 500);
|
||
} else {
|
||
//_f.fL.append(fList);
|
||
if (fList && fList.length) {
|
||
_f.fL = _f.fL.concat(fList);
|
||
}
|
||
}
|
||
|
||
// If the store already exists, it will be opened
|
||
if (_f.s)
|
||
try {
|
||
_f.s.capture(_f.fL, _f.f);
|
||
} catch (e) {
|
||
if (e.message == 'Url is not from the same origin')
|
||
sl('需要在同樣的 domain!');
|
||
else
|
||
sl('catchFile: Could not capture file: [' + (e.number & 0xFFFF)
|
||
+ '] ' + e.message);
|
||
return 4;
|
||
}
|
||
|
||
/*
|
||
// uncapture
|
||
for ( var i = 0; i < fList.length; i++) {
|
||
_f.s.remove(fList[i]);
|
||
}
|
||
// removeStore
|
||
if (localServer.openStore(storeName)) {
|
||
localServer.removeStore(storeName);
|
||
_f.s = null;
|
||
}
|
||
*/
|
||
|
||
};
|
||
|
||
|
||
|
||
/* http://blog.wctang.info/2007/07/use-google-map-api-without-api-key.html
|
||
驗證的程式叫 GValidateKey,是定義在 main.js,但呼叫的動作是寫在 maps.js 裡
|
||
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* 自動挑選 domain
|
||
* @param API API name
|
||
* @param callback null: do NOT load
|
||
* @return [ API url, API key ]
|
||
* @since 2010/6/20 22:12:23
|
||
* @see
|
||
*
|
||
*/
|
||
use_API = function(API, callback) {
|
||
var _s = _.use_API,
|
||
url_set = _s.API_URL, url = window.location,
|
||
key_set = _s.API_keys || (_s.API_keys = library_namespace.data.code.API_keys), API_keys;
|
||
if (!key_set) {
|
||
throw 'MUST including or setup CeL.data.code.API_keys first!';
|
||
}
|
||
|
||
if ( !Array.isArray(url_set = url_set[API]) || typeof url_set[1] !== 'function' ||
|
||
!library_namespace.is_Object(key_set = key_set[url_set[0]])
|
||
){
|
||
CeL.error(url = 'use_API: The kind of API [' + API + '] is not included in the code pool!');
|
||
throw new Error(url);
|
||
}
|
||
|
||
if (url.protocol === 'file:')
|
||
// 取得任何 legal key
|
||
for (url in key_set){
|
||
if (typeof key_set[url] === 'string')
|
||
break;
|
||
}
|
||
|
||
// this is for domain + path
|
||
//else if ((url = url.href.replace(/[^\/]+$/, '')) in key_set) ;
|
||
|
||
// this is for domain. 不能用 .pathname: IE 會作特殊處置
|
||
else if (!(url = url.href.match(/^([a-z-]+:\/\/[^\/]+\/)/)) || !((url = url[1]) in key_set)){
|
||
CeL.error(url = 'use_API: This domain [' + url + '] is not included in ' + url_set[0] + ' code pool!');
|
||
throw new Error(url);
|
||
}
|
||
|
||
//library_namespace.debug('[' + url + ']\n' + key_set[url] + '\n' + location.href + '\n' + location.pathname);
|
||
|
||
url = url_set[1](API_keys = key_set[url] || '', _s.language || '');
|
||
|
||
if (callback !== null){
|
||
library_namespace.run(url, callback);
|
||
library_namespace.debug('load [' + url_set[0] + '] ' + API + ': [<a href="' + url + '">' + url + '</a>].');
|
||
}
|
||
|
||
return [ url, API_keys ];
|
||
};
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* 語系. e.g., zh-TW, ja, en
|
||
*/
|
||
use_API.language = 'zh-TW';
|
||
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
use_API.API_URL = {
|
||
Gmap : [
|
||
'Google',
|
||
function(k, l) {
|
||
return 'http://maps.google.com/maps?file=api&v=2&hl=' + l + '&key=' + k;
|
||
} ],
|
||
GAPI : [ 'Google', function(k, l) {
|
||
return 'http://www.google.com/jsapi?hl=' + l + '&key=' + k;
|
||
} ],
|
||
|
||
YMap : [ 'Yahoo', function(k) {
|
||
return 'http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=' + k;
|
||
} ],
|
||
twYMap : [ 'Yahoo', function(k) {
|
||
return 'http://tw.api.maps.yahoo.com/ajaxymap?v=3.8&appid=' + k;
|
||
} ],
|
||
|
||
Bing: [ 'Microsoft', function(k) {
|
||
return 'http://api.microsofttranslator.com/V1/Ajax.svc/Embed?appId=' + k;
|
||
} ]
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* 為 Microsoft Translator 設置
|
||
* @param text test to translate
|
||
* @param callback callback(from text,to text)
|
||
* @param [from_enc]
|
||
* @param [to_enc]
|
||
* @return
|
||
* @see
|
||
* <a href="http://msdn.microsoft.com/en-us/library/ff512406.aspx" accessdate="2010/7/12 20:22">Translate Method</a>,
|
||
* <a href="http://www.west-wind.com/Weblog/posts/107136.aspx" accessdate="2010/7/12 20:22">JSONP for cross-site Callbacks - Rick Strahl's Web Log</a>
|
||
*/
|
||
add_Microsoft_translate = function(text, callback, from_enc, to_enc) {
|
||
if (!text || !callback)
|
||
return;
|
||
|
||
var _s = _.add_Microsoft_translate, url = _s.url, name = _s.reference_name, count;
|
||
// 初始化 initialization
|
||
if (!url)
|
||
_s.url = url = 'http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=' +
|
||
_.use_API('Bing', null)[1];
|
||
|
||
//library_namespace.debug('<a href="' + url + encodeURIComponent(text) + '">' + url + encodeURIComponent(text) + '</a>');
|
||
|
||
_s.buffer[count = _s.counter++] = [ text, callback ];
|
||
// response, count, function name of add_Microsoft_translate
|
||
_s['c' + count] = new Function('r',
|
||
name + '.callback(r,' + count + ',"' + name + '");'
|
||
);
|
||
library_namespace.run(
|
||
url
|
||
+ '&from=' + (from_enc || _s.from)
|
||
+ '&to=' + (to_enc || _s.to)
|
||
+ '&text=' + encodeURIComponent(text)
|
||
+ '&oncomplete=' + name + '.c' + count
|
||
);
|
||
};
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
add_Microsoft_translate.from = 'en';
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
add_Microsoft_translate.to = 'zh-cht';
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
add_Microsoft_translate.reference_name = library_namespace.Class + '.add_Microsoft_translate';
|
||
|
||
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* @inner
|
||
* @private
|
||
*/
|
||
add_Microsoft_translate.counter = 0;
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* @inner
|
||
* @private
|
||
*/
|
||
add_Microsoft_translate.buffer = [];
|
||
|
||
var ELEMENT_NODE = 1;
|
||
|
||
_// JSDT:_module_
|
||
.
|
||
/**
|
||
* @inner
|
||
* @private
|
||
*/
|
||
add_Microsoft_translate.callback = function(response, count, name) {
|
||
try{
|
||
var _s = library_namespace.get_various(name),
|
||
origin = _s.buffer[count],
|
||
callback = origin[1];
|
||
origin = origin[0];
|
||
delete _s.buffer[count];
|
||
delete _s['c' + count];
|
||
if (typeof callback === 'function') {
|
||
callback(response, origin);
|
||
} else {
|
||
if (typeof callback === 'string')
|
||
callback = document.getElementById(callback);
|
||
if (typeof callback === 'object'
|
||
&& callback.nodeType === ELEMENT_NODE)
|
||
callback.appendChild(document.createTextNode(response));
|
||
}
|
||
}catch (e) {
|
||
library_namespace.warn('add_Microsoft_translate.callback: '+name+': error!');
|
||
}
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
return (
|
||
_// JSDT:_module_
|
||
);
|
||
}
|
||
|
||
|
||
});
|
||
|