Skip to content

Commit 564c03b

Browse files
committed
main sources, modules requiring
1 parent f52307a commit 564c03b

File tree

2 files changed

+11
-1154
lines changed

2 files changed

+11
-1154
lines changed

src/ui-scroll-jqlite.js

Lines changed: 6 additions & 259 deletions
Original file line numberDiff line numberDiff line change
@@ -1,265 +1,12 @@
1+
import jqLiteExtrasRegister from './modules/jqlite-extras-register';
2+
13
angular.module('ui.scroll.jqlite', ['ui.scroll'])
2-
.service('jqLiteExtras', [
3-
'$log',
4-
'$window',
5-
(console, window) => {
4+
.service('jqLiteExtras', () => {
65
return {
7-
registerFor: (element) => {
8-
var convertToPx, css, getStyle, isWindow;
9-
// angular implementation blows up if elem is the window
10-
css = angular.element.prototype.css;
11-
12-
element.prototype.css = function (name, value) {
13-
let self = this;
14-
let elem = self[0];
15-
if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {
16-
return css.call(self, name, value);
17-
}
18-
};
19-
20-
// as defined in angularjs v1.0.5
21-
isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;
22-
23-
function scrollTo(self, direction, value) {
24-
let elem = self[0];
25-
let [method, prop, preserve] = {
26-
top: [
27-
'scrollTop',
28-
'pageYOffset',
29-
'scrollLeft'
30-
],
31-
left: [
32-
'scrollLeft',
33-
'pageXOffset',
34-
'scrollTop'
35-
]
36-
}[direction];
37-
38-
if (isWindow(elem)) {
39-
if (angular.isDefined(value)) {
40-
return elem.scrollTo(self[preserve].call(self), value);
41-
}
42-
43-
return (prop in elem) ? elem[prop] : elem.document.documentElement[method];
44-
} else {
45-
if (angular.isDefined(value)) {
46-
elem[method] = value;
47-
}
48-
49-
return elem[method];
50-
}
51-
}
52-
53-
if (window.getComputedStyle) {
54-
getStyle = (elem) => window.getComputedStyle(elem, null);
55-
convertToPx = (elem, value) => parseFloat(value);
56-
} else {
57-
getStyle = (elem) => elem.currentStyle;
58-
convertToPx = (elem, value) => {
59-
let left, result, rs, rsLeft, style;
60-
let core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
61-
let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');
62-
63-
if (!rnumnonpx.test(value)) {
64-
return parseFloat(value);
65-
}
66-
67-
// ported from JQuery
68-
style = elem.style;
69-
left = style.left;
70-
rs = elem.runtimeStyle;
71-
rsLeft = rs && rs.left;
72-
if (rs) {
73-
rs.left = style.left;
74-
}
75-
// put in the new values to get a computed style out
76-
style.left = value;
77-
result = style.pixelLeft;
78-
style.left = left;
79-
if (rsLeft) {
80-
rs.left = rsLeft;
81-
}
82-
return result;
83-
};
84-
}
85-
86-
function getMeasurements(elem, measure) {
87-
let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;
88-
89-
if (isWindow(elem)) {
90-
base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];
91-
92-
return {
93-
base: base,
94-
padding: 0,
95-
border: 0,
96-
margin: 0
97-
};
98-
}
99-
100-
// Start with offset property
101-
[
102-
base,
103-
dirA,
104-
dirB
105-
] = {
106-
width: [
107-
elem.offsetWidth,
108-
'Left',
109-
'Right'
110-
],
111-
height: [
112-
elem.offsetHeight,
113-
'Top',
114-
'Bottom'
115-
]
116-
}[measure];
117-
118-
computedStyle = getStyle(elem);
119-
paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;
120-
paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;
121-
borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;
122-
borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;
123-
computedMarginA = computedStyle['margin' + dirA];
124-
computedMarginB = computedStyle['margin' + dirB];
125-
126-
// I do not care for width for now, so this hack is irrelevant
127-
// if ( !supportsPercentMargin )
128-
// computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )
129-
// computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )
130-
marginA = convertToPx(elem, computedMarginA) || 0;
131-
marginB = convertToPx(elem, computedMarginB) || 0;
132-
133-
return {
134-
base: base,
135-
padding: paddingA + paddingB,
136-
border: borderA + borderB,
137-
margin: marginA + marginB
138-
};
139-
}
140-
141-
function getWidthHeight(elem, direction, measure) {
142-
let computedStyle, result;
143-
144-
let measurements = getMeasurements(elem, direction);
145-
146-
if (measurements.base > 0) {
147-
return {
148-
base: measurements.base - measurements.padding - measurements.border,
149-
outer: measurements.base,
150-
outerfull: measurements.base + measurements.margin
151-
}[measure];
152-
}
153-
154-
// Fall back to computed then uncomputed css if necessary
155-
computedStyle = getStyle(elem);
156-
result = computedStyle[direction];
157-
158-
if (result < 0 || result === null) {
159-
result = elem.style[direction] || 0;
160-
}
161-
162-
// Normalize "", auto, and prepare for extra
163-
result = parseFloat(result) || 0;
164-
165-
return {
166-
base: result - measurements.padding - measurements.border,
167-
outer: result,
168-
outerfull: result + measurements.padding + measurements.border + measurements.margin
169-
}[measure];
170-
}
171-
172-
// define missing methods
173-
return angular.forEach({
174-
before(newElem) {
175-
var children, elem, i, j, parent, ref, self;
176-
self = this;
177-
elem = self[0];
178-
parent = self.parent();
179-
children = parent.contents();
180-
if (children[0] === elem) {
181-
return parent.prepend(newElem);
182-
} else {
183-
for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
184-
if (children[i] === elem) {
185-
angular.element(children[i - 1]).after(newElem);
186-
return;
187-
}
188-
}
189-
throw new Error('invalid DOM structure ' + elem.outerHTML);
190-
}
191-
},
192-
height (value){
193-
var self;
194-
self = this;
195-
if (angular.isDefined(value)) {
196-
if (angular.isNumber(value)) {
197-
value = value + 'px';
198-
}
199-
return css.call(self, 'height', value);
200-
} else {
201-
return getWidthHeight(this[0], 'height', 'base');
202-
}
203-
},
204-
outerHeight(option) {
205-
return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');
206-
},
207-
208-
/*
209-
The offset setter method is not implemented
210-
*/
211-
offset(value) {
212-
let docElem, win;
213-
let self = this;
214-
let box = {
215-
top: 0,
216-
left: 0
217-
};
218-
let elem = self[0];
219-
let doc = elem && elem.ownerDocument;
220-
221-
if (arguments.length) {
222-
if (value === undefined) {
223-
return self;
224-
}
225-
// TODO: implement setter
226-
throw new Error('offset setter method is not implemented');
227-
}
228-
229-
if (!doc) {
230-
return;
231-
}
232-
233-
docElem = doc.documentElement;
234-
235-
// TODO: Make sure it's not a disconnected DOM node
236-
237-
if (elem.getBoundingClientRect != null) {
238-
box = elem.getBoundingClientRect();
239-
}
240-
241-
win = doc.defaultView || doc.parentWindow;
242-
243-
return {
244-
top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),
245-
left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)
246-
};
247-
},
248-
scrollTop(value) {
249-
return scrollTo(this, 'top', value);
250-
},
251-
scrollLeft(value) {
252-
return scrollTo(this, 'left', value);
253-
}
254-
}, (value, key) => {
255-
if (!element.prototype[key]) {
256-
return element.prototype[key] = value;
257-
}
258-
});
259-
}
6+
registerFor: jqLiteExtrasRegister
2607
};
2618
}
262-
])
9+
)
26310
.run([
26411
'$log',
26512
'$window',
@@ -269,4 +16,4 @@ angular.module('ui.scroll.jqlite', ['ui.scroll'])
26916
return jqLiteExtras.registerFor(angular.element);
27017
}
27118
}
272-
]);
19+
]);

0 commit comments

Comments
 (0)