PageSourceSearch

https://account.moneymarketing.co.uk/JavaScript/mootools/more/Element/Element.Forms.js

js moneymarketing.co.uk collected 2026-09-24 18:36:35 UTC 3,873 bytes, 140 lines download raw bytes

1/*
2---
3
4script: Element.Forms.js
5
6name: Element.Forms
7
8description: Extends the Element native object to include methods useful in managing inputs.
9
10license: MIT-style license
11
12authors:
13  - Aaron Newton
14
15requires:
16  - Core/Element
17  - String.Extras
18  - MooTools.More
19
20provides: [Element.Forms]
21
22...
23*/
24
25Element.implement({
26
27	tidy: function(){
28		this.set('value', this.get('value').tidy());
29	},
30
31	getTextInRange: function(start, end){
32		return this.get('value').substring(start, end);
33	},
34
35	getSelectedText: function(){
36		if (this.setSelectionRange) return this.getTextInRange(this.getSelectionStart(), this.getSelectionEnd());
37		return document.selection.createRange().text;
38	},
39
40	getSelectedRange: function(){
41		if (this.selectionStart != null){
42			return {
43				start: this.selectionStart,
44				end: this.selectionEnd
45			};
46		}
47
48		var pos = {
49			start: 0,
50			end: 0
51		};
52		var range = this.getDocument().selection.createRange();
53		if (!range || range.parentElement() != this) return pos;
54		var duplicate = range.duplicate();
55
56		if (this.type == 'text'){
57			pos.start = 0 - duplicate.moveStart('character', -100000);
58			pos.end = pos.start + range.text.length;
59		} else {
60			var value = this.get('value');
61			var offset = value.length;
62			duplicate.moveToElementText(this);
63			duplicate.setEndPoint('StartToEnd', range);
64			if (duplicate.text.length) offset -= value.match(/[\n\r]*$/)[0].length;
65			pos.end = offset - duplicate.text.length;
66			duplicate.setEndPoint('StartToStart', range);
67			pos.start = offset - duplicate.text.length;
68		}
69		return pos;
70	},
71
72	getSelectionStart: function(){
73		return this.getSelectedRange().start;
74	},
75
76	getSelectionEnd: function(){
77		return this.getSelectedRange().end;
78	},
79
80	setCaretPosition: function(pos){
81		if (pos == 'end') pos = this.get('value').length;
82		this.selectRange(pos, pos);
83		return this;
84	},
85
86	getCaretPosition: function(){
87		return this.getSelectedRange().start;
88	},
89
90	selectRange: function(start, end){
91		if (this.setSelectionRange){
92			this.focus();
93			this.setSelectionRange(start, end);
94		} else {
95			var value = this.get('value');
96			var diff = value.substr(start, end - start).replace(/\r/g, '').length;
97			start = value.substr(0, start).replace(/\r/g, '').length;
98			var range = this.createTextRange();
99			range.collapse(true);
100			range.moveEnd('character', start + diff);
101			range.moveStart('character', start);
102			range.select();
103		}
104		return this;
105	},
106
107	insertAtCursor: function(value, select){
108		var pos = this.getSelectedRange();
109		var text = this.get('value');
110		this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length));
111		if (select !== false) this.selectRange(pos.start, pos.start + value.length);
112		else this.setCaretPosition(pos.start + value.length);
113		return this;
114	},
115
116	insertAroundCursor: function(options, select){
117		options = Object.append({
118			before: '',
119			defaultMiddle: '',
120			after: ''
121		}, options);
122
123		var value = this.getSelectedText() || options.defaultMiddle;
124		var pos = this.getSelectedRange();
125		var text = this.get('value');
126
127		if (pos.start == pos.end){
128			this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length));
129			this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length);
130		} else {
131			var current = text.substring(pos.start, pos.end);
132			this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length));
133			var selStart = pos.start + options.before.length;
134			if (select !== false) this.selectRange(selStart, selStart + current.length);
135			else this.setCaretPosition(selStart + text.length);
136		}
137		return this;
138	}
139
140});

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.