DOMUrl

4 篇文章 0 订阅

/**************************************************************/
   ======String Function For Domino Web Using==Start=======

     ------By FangZeYu  2003.10.28
     ------Secondly 2005.05.14

 Location.HREF/URL Analysys
 Functions For DOMINO Web Development
 As String.prototype.Function
 
 允许http://或者https://这样的url,其余的协议表达,不属于本函数群针对范围。
 以下约定,以便于函数处理:
 ①、lcase;②、/或者其escapeString向/的转换不在这里进行;
 ③、不承认其它任何的异常状态,预期的url是完全合法的,
 
 本函数群属于一个对象类:DOMUrl,出于使用便利的目的,同时将这些做在String.prototype下,
  对象应该拥有static Function,DOMUrl.fun1(s1 , pars)
  等效于:(new DOMUrl(s1)).fun1(pars);
  等效于:s1.fun1(pars);
 
 以下内容引自于Domino Designer Help中的相关章节:
 Domino URL commands have the syntax:
 http://Host/DominoObject?Action&Arguments
 Where
 Host = a DNS entry or an IP address
 DominoObject = a Domino construct (for example, a database, view, document, form, navigator, agent, and so on). URL  commands for accessing DominoObjects use the following syntax:  http://Host/Database/DominoObject?Action&Arguments where Database = the database in which the DominoObject resides.
 Action = the desired operation on the specified DominoObject (For example, ?OpenDatabase, ?OpenView, ?OpenDocument, ?EditDocument, ?OpenForm, and so on).
 Arguments = a qualifier of the action (for example, Count = 10 combined with the ?OpenView action limits the number of rows displayed in a view to 10).
 
 一般的来说,基本domino web url有以下的格式(http和https等同):
 打开数据库:http://server_host:port/dbpath/dbname?opendatabase
 打开视图: http://server_host:port/dbpath/dbname/viewname?(openview|readViewEntries)
 打开文档: http://server_host:port/dbpath/dbname/viewname/unid?(opendocument|editdocument)
 创建文档: http://server_host:port/dbpath/dbname/formname?(openform|createdocument)
 代理:  http://server_host:port/dbpath/dbname/agentName?openagent
 导航:  http://server_host:port/dbpath/dbname/navigatorName?opennavagitor
 帧:  
 domino服务器自身的“定位”方式有非一般的情况,需要注意的地方有:
 支持内容方式:
 ①、path信息中,可能包含有连续的两个“/”的路径,这个是合法的,在本函数群中,支持该情况,但是强烈建议避免该情况。
 ②、任何一个内部的设计元素,view、form、page、agent、navagitor等等,除了name或者alias以外,还可以用id、unid来定位
 ③、对于document,在视图检索的时候,还可以支持key方式;
 ④、视图本身的名称中,可能就是一个多层次的表现:如视图名称为folder1/sub2,url表现就是folder1/sub2。一般情况下请不要使用这样的名称。
 非支持内容方式: !注意!
 ①、一般的来说,数据库定位是dbpath/dbname=dbfilename这个方式,但是也可以通过副本id,或者还有别的方式,!不支持!
 ②、action是implicict的。在no pars的情况下。
  
domGetServerName: 获取server信息,server 的hostName or ipAddress
 domGetSName
domGetServer:  获取http://**..com.cn这样的内容
domGetScheme:  获取协议名称,http or https
domGetPort:   port信息,返回一个代表正整数的字符串或者空字符串,注意:后面的情况可能是为空,也可能是出错
domGetServerFull: 获取整个的server和port信息,http://**.com.cn:port这样的内容,如果没有port信息,则和domGetServer一样
 domGetFullServer
domGetDatabase:  获取http://**.com.cn/path/example1.nsf这部分信息
domGetDBName:  获取数据库名称,不包含目录信息
domGetDBPath:  获取数据库的路径信息。 !注意!本信息原本应该有根目录标志“/”作为开头字符,出于外部程序处理的便利,将其丢弃。下同。
domGetPathName:  获取数据库的全路径信息DBPath+DBName
domGetView:   获取url中一直到指定viewname信息的部分
domGetViewName:  获取viewname信息
 domGetVName
domGetAction:  获取action
domGetObject:  获取url中到?之前的部分 
domGetObjectName: 获取object的名称,不包括前面的信息。对于数据库,则等同于DBName,数据库内元素则是该元素的名称或者id
 domGetOName:
domGetParameter: 获取par值,对于无参数或者开关参数,返回空字符串,这样的情况下,如果必要,请用domHasPar来辅助
 domGetPar
domHasParameter: 检测是否存在参数,一般情况下,对于开关参数使用该方法
 domHasPar
domGetAllPars:  返回所有的参数,以list的格式,注意,开关参数,在这里返回的是pars[parTag]=null,这样的情况下,对于四种值可以分开:
 domGetAllParameters   ①、par="value",一般值 ②、par=,空字符串 ③、par,开关值开,返回null ④、无,开关值关,返回的是undefined
domGetAllParTags: 返回所有的参数的names,以数组的格式。
 domGetAllParNames

/**************************************************************/

function DOMUrl(sDomUrl){
 this._url=sDomUrl;
}
_p=DOMUrl.prototype;
_p.toString=function(){
 return this._url;
}
function DOMUrl._doRegCheck(s1 , reg1){
 try{
  var arr1=reg1.exec(s1);
  if(!arr1) return "";
  return arr1[1];
 }
 catch(e1){
  throw(e1);
 }
}

_p.domGetServer=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^(https?://[^/:]+)" , "i"));
}
_p.domGetServerName=_p.domGetSName=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://([^/:]+)(?::|/)" , "i"));
}
_p.domGetScheme=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^(http|https):" , "i"));
}
_p.domGetPort=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://[^/:]+:([//d]+)/" , "i"));
}
_p.domGetServerFull=_p.domGetFullServer=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^(https?://[^/]+)/" , "i"));
}
_p.domGetDatabase=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^(https?://[^/]+(?:/[^/]*)*/[^/]+//.nsf)(?://?|/)" , "i"));
}
_p.domGetDBName=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://[^/]+(?:/[^/]*)*/([^/]+//.nsf)(?://?|/)" , "i"));
}
_p.domGetDBPath=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://[^/]+((?:/[^/]*)*)/[^/]+//.nsf(?://?|/)" , "i")).substr(1);
}
_p.domGetPathName=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://[^/]+((?:/[^/]*)*/[^/]+//.nsf)(?://?|/)" , "i")).substr(1);
}
_p.domGetView=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^(https?://[^/]+(?:/[^/]*)*/[^/]+//.nsf(?:/[^/]+)+)(?://?openview|//?readviewentries|/[^//?]+//?)" , "i"));
}
_p.domGetViewName=_p.domGetVName=function(){
 return DOMUrl._doRegCheck(this , new RegExp("^https?://[^/]+(?:/[^/]*)*/[^/]+//.nsf((?:/[^/]+)+)(?://?openview|//?readviewentries|/[^//?]+//?)" , "i")).substr(1);;
}
_p.domGetAction=function(){
 return DOMUrl._doRegCheck(this , /^https?:[^/?]+/?([^&]+)/i);
}
_p.domGetParameter=_p.domGetPar=function(sTag){
 return DOMUrl._doRegCheck(this , new RegExp("&"+sTag+"=([^&]+)" , "i"));
}
_p.domHasParameter=_p.domHasPar=function(sTag){
 return (new RegExp("&"+sTag+"(=|&|//b)" , "i")).exec(this)!=null ;
}
_p.domGetObject=function(){
 return DOMUrl._doRegCheck(this , /^(https?:[^/?]+)/?[^&]+/i);
}
_p.domGetObjectName=_p.domGetOName=function(){
 return DOMUrl._doRegCheck(this , /^https?:[^/?]+//([^//]+)/?[^&]+/i);
}
_p.domGetAllPars=_p.domGetAllParameters=function(){
 var ret1={};
 var sAP=DOMUrl._doRegCheck(this , new RegExp("https?://[^//?]+//?(.*)" , "i"));
 var arr1=sAP.split("&");
 for (var i=1 ; i<arr1.length; i++){
  var arr2=arr1[i].split("=");
  if(!arr2[1]) arr2[1]=null;
  ret1[arr2[0]]=arr2[1];
 }
 return ret1;
}
_p.domGetAllParNames=_p.domGetAllParTags=function(){
 var ret1=new Array();
 var sAP=DOMUrl._doRegCheck(this , new RegExp("https?://[^//?]+//?(.*)" , "i"));
 var arr1=sAP.split("&");
 for (var i=1 ; i<arr1.length; i++)
  ret1[i-1]=arr1[i].split("=")[0];
 return ret1;
}

// 做prototype函数的static格式
function _drawStatic(_cName , _pFunName){
 var ss="";
 ss+=_cName+"."+_pFunName;
 ss+="=function(){";
 ss+=" var s1=arguments[0];"
 ss+=" var _funName='"+_pFunName+"';"
 ss+=" var _o=new "+_cName+"(s1);"
 ss+=' var ss=_funName+"( ";'
 ss+=' for (var i=1 ; i<arguments.length; i++)'
 ss+='  ss+="arguments["+i+"] ,";'
 ss+=' ss=ss.substr(0 , ss.length-1)+")";'
 ss+=' return eval("_o."+ss);'
 ss+="};"
 eval(ss);
}
function DOMUrl._doPrototypes(_c){
 var reg1=new RegExp("^function[//s]+([//S]+)[//s]?//(" , "i");
 var arr1=reg1.exec(_c.toString());
 var _cName=arr1[1];
 for (sTag in _c.prototype){
  if ("toString valueOf".indexOf(sTag)>-1) continue;
  if (typeof(_c.prototype[sTag])!="function") continue;
  eval("String.prototype."+sTag+"="+_cName+".prototype."+sTag);
  _drawStatic(_cName , sTag);
 }
}
DOMUrl._doPrototypes(DOMUrl);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值