PageSourceSearch

https://jxtx.fccs.com/xiaoqu/js/purl.js

js fccs.com collected 2026-09-24 19:04:55 UTC 3,954 bytes, 167 lines download raw bytes

1//Powerful URL Tools
2
3$.ajaxSettings.contentType = "application/x-www-form-urlencoded;charset=UTF-8";
4jQuery.purl = function() {
5	var segments = {};
6	var parsed = {};
7	var options = {
8		url : window.location,
9		strictMode : false,
10		key : [ "source", "protocol", "authority", "userInfo", "user",
11				"password", "host", "port", "relative", "path", "directory",
12				"file", "query", "anchor" ],
13		q : {
14			name : "queryKey",
15			parser : /(?:^|&)([^&=]*)=?([^&]*)/g
16		},
17		parser : {
18			strict : /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
19			loose : /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
20		}
21	};
22	var parseUri = function() {
23		str = options.url;
24//		str = decodeURI(options.url);
25		var m = options.parser[options.strictMode ? "strict" : "loose"]
26				.exec(str);
27		var uri = {};
28		var i = 14;
29		while (i--) {
30			uri[options.key[i]] = m[i] || ""
31		}
32		uri[options.q.name] = {};
33		uri[options.key[12]].replace(options.q.parser, function($0, $1, $2) {
34			if ($1) {
35				uri[options.q.name][$1] = $2
36			}
37		});
38		for(var i in parsed.queryKey){
39			try{
40				parsed.queryKey[i] = decodeURIComponent(parsed.queryKey[i]);
41			}catch(err){
42			}
43		}
44		
45		return uri
46	};
47	var key = function(key) {
48		if (!parsed.length) {
49			setUp()
50		}
51		if (key == "base") {
52			if (parsed.port !== null && parsed.port !== "") {
53				return parsed.protocol + "://" + parsed.host + ":"
54						+ parsed.port + "/"
55			} else {
56				return parsed.protocol + "://" + parsed.host + "/"
57			}
58		}
59		return (parsed[key] === "") ? null : parsed[key]
60	};
61	var param = function(item) {
62		if (!parsed.length) {
63			setUp()
64		}
65		return (parsed.queryKey[item] === null) ? null : parsed.queryKey[item]
66	};
67	
68	var params = function(){
69		if (!parsed.length) {
70			setUp()
71		}
72		return parsed.queryKey;
73	};
74	
75	var setUp = function() {
76		parsed = parseUri();
77		getSegments()
78	};
79	
80	var getSegments = function() {
81		var p = parsed.path;
82		segments = [];
83		segments = parsed.path.length == 1 ? {}
84				: (p.charAt(p.length - 1) == "/" ? p.substring(1, p.length - 1)
85						: path = p.substring(1)).split("/")
86	};
87	
88	return {
89		setMode : function(mode) {
90			strictMode = mode == "strict" ? true : false;
91			return this
92		},
93		setUrl : function(newUri) {
94			options.url = newUri === undefined ? window.location : newUri;
95			setUp();
96			return this
97		},
98		segment : function(pos) {
99			if (!parsed.length) {
100				setUp()
101			}
102			if (pos === undefined) {
103				return segments.length
104			}
105			return (segments[pos] === "" || segments[pos] === undefined) ? null
106					: segments[pos]
107		},
108		attr : key,
109		param : param,
110		params : params,
111		submit : function(action,data,method){
112			if(method == null || method == "")
113				method = "GET";
114			
115			var fm = document.createElement('form');
116			fm.method = method;
117			fm.action = action;
118			$("body").append(fm);
119			for(var i in data){
120				var fd = document.createElement("input");
121				fd.type = "hidden";
122				fd.name = i;
123				fd.value = data[i];
124				fm.appendChild(fd);
125			}
126			fm.submit();
127		},
128		
129		query : function(params){
130			var query = "";
131			var first = true;
132			for(var i in params){
133				var p = params[i];
134				try{
135					p = decodeURIComponent(p);
136					p = encodeURIComponent(p);
137				}catch(err){
138				}
139				
140				if(first){
141					first = false;
142					query += i + "=" + params[i];
143				}else{
144					query += "&" + i + "=" +  params[i];
145				}
146			}
147			return query;
148		},
149		
150		/**
151		 * var options
152		 */
153		submit: function(path,params){
154	
155			$("body").append("<form id='purl-goto' action='"+path+"' ></form>");
156				
157			for(var i in params){
158				if(params[i]){
159					$("#purl-goto").append("<input type='hidden' name='"+i+"' value='"+params[i]+"' />");
160				}
161			}
162				
163			$("#purl-goto").submit();
164			$("#purl-goto").remove();
165		}
166	}
167}();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.