Files
rappaurio-sae501_502/app/node_modules/cejs/data/code/API.js
2023-09-25 13:27:24 +02:00

525 lines
24 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.


/**
* @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_
);
}
});