aboutsummaryrefslogtreecommitdiffstats
path: root/test/unit/offset.js
blob: 08b90c3b8a8d925cf17d31a5032bdd63267cfbd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
(function() {

if ( !jQuery.fn.offset ) {
	return;
}

var supportsScroll, supportsFixedPosition,
	forceScroll = jQuery("<div/>").css({ width: 2000, height: 2000 }),
	checkSupport = function() {
		// Only run once
		checkSupport = false;

		var checkFixed = jQuery("<div/>").css({ position: "fixed", top: "20px" }).appendTo("#qunit-fixture");

		// Must append to body because #qunit-fixture is hidden and elements inside it don't have a scrollTop
		forceScroll.appendTo("body");
		window.scrollTo( 200, 200 );
		supportsScroll = document.documentElement.scrollTop || document.body.scrollTop;
		forceScroll.detach();

		// Safari subtracts parent border width here (which is 5px)
		supportsFixedPosition = checkFixed[0].offsetTop === 20 || checkFixed[0].offsetTop === 15;
		checkFixed.remove();
	};

module("offset", { setup: function(){
	if ( typeof checkSupport === "function" ) {
		checkSupport();
	}

	// Force a scroll value on the main window to ensure incorrect results
	// if offset is using the scroll offset of the parent window
	forceScroll.appendTo("body");
	window.scrollTo( 1, 1 );
	forceScroll.detach();
}, teardown: moduleTeardown });

/*
	Closure-compiler will roll static methods off of the jQuery object and so they will
	not be passed with the jQuery object across the windows. To differentiate this, the
	testIframe callbacks use the "$" symbol to refer to the jQuery object passed from
	the iframe window and the "jQuery" symbol is used to access any static methods.
*/

test("empty set", function() {
	expect(2);
	strictEqual( jQuery().offset(), undefined, "offset() returns undefined for empty set (#11962)" );
	strictEqual( jQuery().position(), undefined, "position() returns undefined for empty set (#11962)" );
});

test("object without getBoundingClientRect", function() {
	expect(2);

	// Simulates a browser without gBCR on elements, we just want to return 0,0
	var result = jQuery({ ownerDocument: document }).offset();
	equal( result.top, 0, "Check top" );
	equal( result.left, 0, "Check left" );
});

test("disconnected node", function() {
	expect(2);

	var result = jQuery( document.createElement("div") ).offset();

	equal( result.top, 0, "Check top" );
	equal( result.left, 0, "Check left" );
});

testIframe("offset/absolute", "absolute", function($, iframe) {
	expect(4);

	var doc = iframe.document,
			tests;

	// get offset
	tests = [
		{ "id": "#absolute-1", "top": 1, "left": 1 }
	];
	jQuery.each( tests, function() {
		equal( jQuery( this["id"], doc ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset().top" );
		equal( jQuery( this["id"], doc ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset().left" );
	});


	// get position
	tests = [
		{ "id": "#absolute-1", "top": 0, "left": 0 }
	];
	jQuery.each( tests, function() {
		equal( jQuery( this["id"], doc ).position().top,  this["top"],  "jQuery('" + this["id"] + "').position().top" );
		equal( jQuery( this["id"], doc ).position().left, this["left"], "jQuery('" + this["id"] + "').position().left" );
	});
});

testIframe("offset/absolute", "absolute", function( $ ) {
	expect(178);

	// get offset tests
	var tests = [
		{ "id": "#absolute-1",     "top":  1, "left":  1 },
		{ "id": "#absolute-1-1",   "top":  5, "left":  5 },
		{ "id": "#absolute-1-1-1", "top":  9, "left":  9 },
		{ "id": "#absolute-2",     "top": 20, "left": 20 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset().top" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset().left" );
	});


	// get position
	tests = [
		{ "id": "#absolute-1",     "top":  0, "left":  0 },
		{ "id": "#absolute-1-1",   "top":  1, "left":  1 },
		{ "id": "#absolute-1-1-1", "top":  1, "left":  1 },
		{ "id": "#absolute-2",     "top": 19, "left": 19 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).position().top,  this["top"],  "jQuery('" + this["id"] + "').position().top" );
		equal( $( this["id"] ).position().left, this["left"], "jQuery('" + this["id"] + "').position().left" );
	});

	// test #5781
	var offset = $( "#positionTest" ).offset({ "top": 10, "left": 10 }).offset();
	equal( offset.top,  10, "Setting offset on element with position absolute but 'auto' values." );
	equal( offset.left, 10, "Setting offset on element with position absolute but 'auto' values." );


	// set offset
	tests = [
		{ "id": "#absolute-2",     "top": 30, "left": 30 },
		{ "id": "#absolute-2",     "top": 10, "left": 10 },
		{ "id": "#absolute-2",     "top": -1, "left": -1 },
		{ "id": "#absolute-2",     "top": 19, "left": 19 },
		{ "id": "#absolute-1-1-1", "top": 15, "left": 15 },
		{ "id": "#absolute-1-1-1", "top":  5, "left":  5 },
		{ "id": "#absolute-1-1-1", "top": -1, "left": -1 },
		{ "id": "#absolute-1-1-1", "top":  9, "left":  9 },
		{ "id": "#absolute-1-1",   "top": 10, "left": 10 },
		{ "id": "#absolute-1-1",   "top":  0, "left":  0 },
		{ "id": "#absolute-1-1",   "top": -1, "left": -1 },
		{ "id": "#absolute-1-1",   "top":  5, "left":  5 },
		{ "id": "#absolute-1",     "top":  2, "left":  2 },
		{ "id": "#absolute-1",     "top":  0, "left":  0 },
		{ "id": "#absolute-1",     "top": -1, "left": -1 },
		{ "id": "#absolute-1",     "top":  1, "left":  1 }
	];
	jQuery.each( tests, function() {
		$( this["id"] ).offset({ "top": this["top"], "left": this["left"] });
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset({ top: "  + this["top"]  + " })" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset({ left: " + this["left"] + " })" );

		var top = this["top"], left = this["left"];

		$( this["id"] ).offset(function(i, val){
			equal( val.top, top, "Verify incoming top position." );
			equal( val.left, left, "Verify incoming top position." );
			return { "top": top + 1, "left": left + 1 };
		});
		equal( $( this["id"] ).offset().top,  this["top"]  + 1, "jQuery('" + this["id"] + "').offset({ top: "  + (this["top"]  + 1) + " })" );
		equal( $( this["id"] ).offset().left, this["left"] + 1, "jQuery('" + this["id"] + "').offset({ left: " + (this["left"] + 1) + " })" );

		$( this["id"] )
			.offset({ "left": this["left"] + 2 })
			.offset({ "top":  this["top"]  + 2 });
		equal( $( this["id"] ).offset().top,  this["top"]  + 2, "Setting one property at a time." );
		equal( $( this["id"] ).offset().left, this["left"] + 2, "Setting one property at a time." );

		$( this["id"] ).offset({ "top": this["top"], "left": this["left"], "using": function( props ) {
			$( this ).css({
				"top":  props.top  + 1,
				"left": props.left + 1
			});
		}});
		equal( $( this["id"] ).offset().top,  this["top"]  + 1, "jQuery('" + this["id"] + "').offset({ top: "  + (this["top"]  + 1) + ", using: fn })" );
		equal( $( this["id"] ).offset().left, this["left"] + 1, "jQuery('" + this["id"] + "').offset({ left: " + (this["left"] + 1) + ", using: fn })" );
	});
});

testIframe("offset/relative", "relative", function( $ ) {
	expect(60);

	// IE is collapsing the top margin of 1px; detect and adjust accordingly
	var ie = $("#relative-1").offset().top === 6;

	// get offset
	var tests = [
		{ "id": "#relative-1",   "top": ie ?   6 :   7, "left":  7 },
		{ "id": "#relative-1-1", "top": ie ?  13 :  15, "left": 15 },
		{ "id": "#relative-2",   "top": ie ? 141 : 142, "left": 27 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset().top" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset().left" );
	});


	// get position
	tests = [
		{ "id": "#relative-1",   "top": ie ?   5 :   6, "left":  6 },
		{ "id": "#relative-1-1", "top": ie ?   4 :   5, "left":  5 },
		{ "id": "#relative-2",   "top": ie ? 140 : 141, "left": 26 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).position().top,  this["top"],  "jQuery('" + this["id"] + "').position().top" );
		equal( $( this["id"] ).position().left, this["left"], "jQuery('" + this["id"] + "').position().left" );
	});


	// set offset
	tests = [
		{ "id": "#relative-2",   "top": 200, "left":  50 },
		{ "id": "#relative-2",   "top": 100, "left":  10 },
		{ "id": "#relative-2",   "top":  -5, "left":  -5 },
		{ "id": "#relative-2",   "top": 142, "left":  27 },
		{ "id": "#relative-1-1", "top": 100, "left": 100 },
		{ "id": "#relative-1-1", "top":   5, "left":   5 },
		{ "id": "#relative-1-1", "top":  -1, "left":  -1 },
		{ "id": "#relative-1-1", "top":  15, "left":  15 },
		{ "id": "#relative-1",   "top": 100, "left": 100 },
		{ "id": "#relative-1",   "top":   0, "left":   0 },
		{ "id": "#relative-1",   "top":  -1, "left":  -1 },
		{ "id": "#relative-1",   "top":   7, "left":   7 }
	];
	jQuery.each( tests, function() {
		$( this["id"] ).offset({ "top": this["top"], "left": this["left"] });
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset({ top: "  + this["top"]  + " })" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset({ left: " + this["left"] + " })" );

		$( this["id"] ).offset({ "top": this["top"], "left": this["left"], "using": function( props ) {
			$( this ).css({
				"top":  props.top  + 1,
				"left": props.left + 1
			});
		}});
		equal( $( this["id"] ).offset().top,  this["top"]  + 1, "jQuery('" + this["id"] + "').offset({ top: "  + (this["top"]  + 1) + ", using: fn })" );
		equal( $( this["id"] ).offset().left, this["left"] + 1, "jQuery('" + this["id"] + "').offset({ left: " + (this["left"] + 1) + ", using: fn })" );
	});
});

testIframe("offset/static", "static", function( $ ) {

	// IE is collapsing the top margin of 1px; detect and adjust accordingly
	var ie = $("#static-1").offset().top === 6;

	expect( 80 );

	// get offset
	var tests = [
		{ "id": "#static-1",     "top": ie ?   6 :   7, "left":  7 },
		{ "id": "#static-1-1",   "top": ie ?  13 :  15, "left": 15 },
		{ "id": "#static-1-1-1", "top": ie ?  20 :  23, "left": 23 },
		{ "id": "#static-2", "top": ie ? 121 : 122, left: 7 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset().top" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset().left" );
	});


	// get position
	tests = [
		{ "id": "#static-1",     "top": ie ?   5 :   6, "left":  6 },
		{ "id": "#static-1-1",   "top": ie ?  12 :  14, "left": 14 },
		{ "id": "#static-1-1-1", "top": ie ?  19 :  22, "left": 22 },
		{ "id": "#static-2", "top": ie ? 120 : 121, "left": 6 }
	];
	jQuery.each( tests, function() {
		equal( $( this["id"] ).position().top,  this["top"],  "jQuery('" + this["top"]  + "').position().top" );
		equal( $( this["id"] ).position().left, this["left"], "jQuery('" + this["left"] +"').position().left" );
	});


	// set offset
	tests = [
		{ "id": "#static-2",     "top": 200, "left": 200 },
		{ "id": "#static-2",     "top": 100, "left": 100 },
		{ "id": "#static-2",     "top":  -2, "left":  -2 },
		{ "id": "#static-2",     "top": 121, "left":   6 },
		{ "id": "#static-1-1-1", "top":  50, "left":  50 },
		{ "id": "#static-1-1-1", "top":  10, "left":  10 },
		{ "id": "#static-1-1-1", "top":  -1, "left":  -1 },
		{ "id": "#static-1-1-1", "top":  22, "left":  22 },
		{ "id": "#static-1-1",   "top":  25, "left":  25 },
		{ "id": "#static-1-1",   "top":  10, "left":  10 },
		{ "id": "#static-1-1",   "top":  -3, "left":  -3 },
		{ "id": "#static-1-1",   "top":  14, "left":  14 },
		{ "id": "#static-1",     "top":  30, "left":  30 },
		{ "id": "#static-1",     "top":   2, "left":   2 },
		{ "id": "#static-1",     "top":  -2, "left":  -2 },
		{ "id": "#static-1",     "top":   7, "left":   7 }
	];
	jQuery.each( tests, function() {
		$( this["id"] ).offset({ "top": this["top"], "left": this["left"] });
		equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset({ top: "  + this["top"]  + " })" );
		equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset({ left: " + this["left"] + " })" );

		$( this["id"] ).offset({ "top": this["top"], "left": this["left"], "using": function( props ) {
			$( this ).css({
				"top":  props.top  + 1,
				"left": props.left + 1
			});
		}});
		equal( $( this["id"] ).offset().top,  this["top"]  + 1, "jQuery('" + this["id"] + "').offset({ top: "  + (this["top"]  + 1) + ", using: fn })" );
		equal( $( this["id"] ).offset().left, this["left"] + 1, "jQuery('" + this["id"] + "').offset({ left: " + (this["left"] + 1) + ", using: fn })" );
	});
});

testIframe("offset/fixed", "fixed", function( $ ) {
	// IE is collapsing the top margin of 1px; detect and adjust accordingly
	var ie = $("#fixed-1").position().top === 2;

	expect(34);

	var tests = [
		{
			"id": "#fixed-1",
			"offsetTop": 1001,
			"offsetLeft": 1001,
			"positionTop": ie ? 2 : 0,
			"positionLeft": ie ? 2 : 0
		},
		{
			"id": "#fixed-2",
			"offsetTop": 1021,
			"offsetLeft": 1021,
			"positionTop": ie ? 22 : 20,
			"positionLeft": ie ? 22 : 20
		}
	];

	jQuery.each( tests, function() {
		if ( !window.supportsScroll ) {
			ok( true, "Browser doesn't support scroll position." );
			ok( true, "Browser doesn't support scroll position." );
			ok( true, "Browser doesn't support scroll position." );
			ok( true, "Browser doesn't support scroll position." );

		} else if ( window.supportsFixedPosition ) {
			equal( $( this["id"] ).offset().top,  this["offsetTop"],  "jQuery('" + this["id"] + "').offset().top" );
			equal( $( this["id"] ).position().top,  this["positionTop"],  "jQuery('" + this["id"] + "').position().top" );
			equal( $( this["id"] ).offset().left, this["offsetLeft"], "jQuery('" + this["id"] + "').offset().left" );
			equal( $( this["id"] ).position().left,  this["positionLeft"],  "jQuery('" + this["id"] + "').position().left" );
		} else {
			// need to have same number of assertions
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
		}
	});

	tests = [
		{ "id": "#fixed-1", "top": 100, "left": 100 },
		{ "id": "#fixed-1", "top":   0, "left":   0 },
		{ "id": "#fixed-1", "top":  -4, "left":  -4 },
		{ "id": "#fixed-2", "top": 200, "left": 200 },
		{ "id": "#fixed-2", "top":   0, "left":   0 },
		{ "id": "#fixed-2", "top":  -5, "left":  -5 }
	];

	jQuery.each( tests, function() {
		if ( window.supportsFixedPosition ) {
			$( this["id"] ).offset({ "top": this["top"], "left": this["left"] });
			equal( $( this["id"] ).offset().top,  this["top"],  "jQuery('" + this["id"] + "').offset({ top: "  + this["top"]  + " })" );
			equal( $( this["id"] ).offset().left, this["left"], "jQuery('" + this["id"] + "').offset({ left: " + this["left"] + " })" );

			$( this["id"] ).offset({ "top": this["top"], "left": this["left"], "using": function( props ) {
				$( this ).css({
					"top":  props.top  + 1,
					"left": props.left + 1
				});
			}});
			equal( $( this["id"] ).offset().top,  this["top"]  + 1, "jQuery('" + this["id"] + "').offset({ top: "  + (this["top"]  + 1) + ", using: fn })" );
			equal( $( this["id"] ).offset().left, this["left"] + 1, "jQuery('" + this["id"] + "').offset({ left: " + (this["left"] + 1) + ", using: fn })" );
		} else {
			// need to have same number of assertions
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
			ok( true, "Fixed position is not supported" );
		}
	});

	// Bug 8316
	var $noTopLeft = $("#fixed-no-top-left");
	if ( window.supportsFixedPosition ) {
		equal( $noTopLeft.offset().top,  1007,  "Check offset top for fixed element with no top set" );
		equal( $noTopLeft.offset().left, 1007, "Check offset left for fixed element with no left set" );
	} else {
		// need to have same number of assertions
		ok( true, "Fixed position is not supported" );
		ok( true, "Fixed position is not supported" );
	}
});

testIframe("offset/table", "table", function( $ ) {
	expect(4);

	equal( $("#table-1").offset().top, 6, "jQuery('#table-1').offset().top" );
	equal( $("#table-1").offset().left, 6, "jQuery('#table-1').offset().left" );

	equal( $("#th-1").offset().top, 10, "jQuery('#th-1').offset().top" );
	equal( $("#th-1").offset().left, 10, "jQuery('#th-1').offset().left" );
});

testIframe("offset/scroll", "scroll", function( $, win ) {
	expect(24);

	// If we're going to bastardize the tests, let's just DO it
	var ie = /msie [678]/i.test( navigator.userAgent );

	if ( ie ) {
		ok( true, "TestSwarm's iframe has hosed this test in oldIE, we surrender" );
	} else {
		equal( $("#scroll-1").offset().top, 7, "jQuery('#scroll-1').offset().top" );
	}
	equal( $("#scroll-1").offset().left, 7, "jQuery('#scroll-1').offset().left" );

	if ( ie ) {
		ok( true, "TestSwarm's iframe has hosed this test in oldIE, we surrender" );
	} else {
		equal( $("#scroll-1-1").offset().top, 11, "jQuery('#scroll-1-1').offset().top" );
	}
	equal( $("#scroll-1-1").offset().left, 11, "jQuery('#scroll-1-1').offset().left" );

	// scroll offset tests .scrollTop/Left
	equal( $("#scroll-1").scrollTop(), 5, "jQuery('#scroll-1').scrollTop()" );
	equal( $("#scroll-1").scrollLeft(), 5, "jQuery('#scroll-1').scrollLeft()" );

	equal( $("#scroll-1-1").scrollTop(), 0, "jQuery('#scroll-1-1').scrollTop()" );
	equal( $("#scroll-1-1").scrollLeft(), 0, "jQuery('#scroll-1-1').scrollLeft()" );

	// scroll method chaining
	equal( $("#scroll-1").scrollTop(undefined).scrollTop(), 5, ".scrollTop(undefined) is chainable (#5571)" );
	equal( $("#scroll-1").scrollLeft(undefined).scrollLeft(), 5, ".scrollLeft(undefined) is chainable (#5571)" );

	win.name = "test";

	if ( !window.supportsScroll ) {
		ok( true, "Browser doesn't support scroll position." );
		ok( true, "Browser doesn't support scroll position." );

		ok( true, "Browser doesn't support scroll position." );
		ok( true, "Browser doesn't support scroll position." );
	} else {
		equal( $(win).scrollTop(), 1000, "jQuery(window).scrollTop()" );
		equal( $(win).scrollLeft(), 1000, "jQuery(window).scrollLeft()" );

		equal( $(win.document).scrollTop(), 1000, "jQuery(document).scrollTop()" );
		equal( $(win.document).scrollLeft(), 1000, "jQuery(document).scrollLeft()" );
	}

	// test jQuery using parent window/document
	// jQuery reference here is in the iframe
	window.scrollTo(0,0);
	equal( $(window).scrollTop(), 0, "jQuery(window).scrollTop() other window" );
	equal( $(window).scrollLeft(), 0, "jQuery(window).scrollLeft() other window" );
	equal( $(document).scrollTop(), 0, "jQuery(window).scrollTop() other document" );
	equal( $(document).scrollLeft(), 0, "jQuery(window).scrollLeft() other document" );

	// Tests scrollTop/Left with empty jquery objects
	notEqual( $().scrollTop(100), null, "jQuery().scrollTop(100) testing setter on empty jquery object" );
	notEqual( $().scrollLeft(100), null, "jQuery().scrollLeft(100) testing setter on empty jquery object" );
	notEqual( $().scrollTop(null), null, "jQuery().scrollTop(null) testing setter on empty jquery object" );
	notEqual( $().scrollLeft(null), null, "jQuery().scrollLeft(null) testing setter on empty jquery object" );
	strictEqual( $().scrollTop(), null, "jQuery().scrollTop(100) testing setter on empty jquery object" );
	strictEqual( $().scrollLeft(), null, "jQuery().scrollLeft(100) testing setter on empty jquery object" );
});

testIframe("offset/body", "body", function( $ ) {
	expect(4);

	equal( $("body").offset().top, 1, "jQuery('#body').offset().top" );
	equal( $("body").offset().left, 1, "jQuery('#body').offset().left" );
	equal( $("#firstElement").position().left, 5, "$('#firstElement').position().left" );
	equal( $("#firstElement").position().top, 5, "$('#firstElement').position().top" );
});

test("chaining", function() {
	expect(3);
	var coords = { "top":  1, "left":  1 };
	equal( jQuery("#absolute-1").offset(coords).selector, "#absolute-1", "offset(coords) returns jQuery object" );
	equal( jQuery("#non-existent").offset(coords).selector, "#non-existent", "offset(coords) with empty jQuery set returns jQuery object" );
	equal( jQuery("#absolute-1").offset(undefined).selector, "#absolute-1", "offset(undefined) returns jQuery object (#5571)" );
});

test("offsetParent", function(){
	expect(13);

	var body = jQuery("body").offsetParent();
	equal( body.length, 1, "Only one offsetParent found." );
	equal( body[0], document.documentElement, "The html element is the offsetParent of the body." );

	var header = jQuery("#qunit").offsetParent();
	equal( header.length, 1, "Only one offsetParent found." );
	equal( header[0], document.documentElement, "The html element is the offsetParent of #qunit." );

	var div = jQuery("#nothiddendivchild").offsetParent();
	equal( div.length, 1, "Only one offsetParent found." );
	equal( div[0], document.getElementById("qunit-fixture"), "The #qunit-fixture is the offsetParent of #nothiddendivchild." );

	jQuery("#nothiddendiv").css("position", "relative");

	div = jQuery("#nothiddendivchild").offsetParent();
	equal( div.length, 1, "Only one offsetParent found." );
	equal( div[0], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );

	div = jQuery("body, #nothiddendivchild").offsetParent();
	equal( div.length, 2, "Two offsetParent found." );
	equal( div[0], document.documentElement, "The html element is the offsetParent of the body." );
	equal( div[1], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );

	var area = jQuery("#imgmap area").offsetParent();
	equal( area[0], document.documentElement, "The html element is the offsetParent of the body." );

	div = jQuery("<div>").css({ "position": "absolute" }).appendTo("body");
	equal( div.offsetParent()[0], document.documentElement, "Absolutely positioned div returns html as offset parent, see #12139" );

	div.remove();
});

test("fractions (see #7730 and #7885)", function() {
	expect(2);

	jQuery("body").append("<div id='fractions'/>");

	var expected = { "top": 1000, "left": 1000 };
	var div = jQuery("#fractions");

	div.css({
		"position": "absolute",
		"left": "1000.7432222px",
		"top": "1000.532325px",
		"width": 100,
		"height": 100
	});

	div.offset(expected);

	var result = div.offset();

	equal( result.top, expected.top, "Check top" );
	equal( result.left, expected.left, "Check left" );

	div.remove();
});

})();
Gat ekki sent endurstillingu í tölvupósti. Hafðu samband við kerfisstjóra.", "Password can not be changed. Please contact your administrator." : "Ekki er hægt að breyta lykilorði. Hafðu samband við kerfisstjóra.", "Back to login" : "Til baka í innskráningu", "New password" : "Nýtt lykilorð", "Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Það er engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt. Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. Viltu halda áfram?", "I know what I'm doing" : "Ég veit hvað ég er að gera", "Resetting password" : "Endurstilli lykilorð", "Recommended apps" : "Ráðlögð forrit", "Cancel" : "Hætta við", "Forgot password?" : "Gleymdirðu lykilorði?", "Settings" : "Stillingar", "Could not load your contacts" : "Gat ekki hlaðið inn tengiliðalistanum þínum", "Search contacts …" : "Leita í tengiliðum ", "No contacts found" : "Engir tengiliðir fundust", "Show all contacts …" : "Birta alla tengiliði ...", "Install the Contacts app" : "Setja upp tengiliðaforritið", "Loading your contacts …" : "Hleð inn tengiliðalistum ...", "Looking for {term} …" : "Leita að {term} …", "No" : "Nei", "Yes" : "Já", "No files in here" : "Engar skrár hér", "New folder" : "Ný mappa", "No more subfolders in here" : "Engar fleiri undirmöppur hér", "Name" : "Nafn", "Size" : "Stærð", "Modified" : "Breytt", "\"{name}\" is an invalid file name." : "\"{name}\" er ógilt skráarheiti.", "File name cannot be empty." : "Heiti skráar má ekki vera tómt", "\"/\" is not allowed inside a file name." : "\"/\" er er ekki leyfilegt innan í skráarheiti.", "\"{name}\" is not an allowed filetype" : "\"{name}\" er ógild skráartegund", "{newName} already exists" : "{newName} er þegar til", "Choose" : "Veldu", "Copy" : "Afrita", "Move" : "Færa", "Error loading file picker template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skráaveljara: {error}", "OK" : "Í lagi", "Error loading message template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skilaboð: {error}", "read-only" : "skrifvarið", "_{count} file conflict_::_{count} file conflicts_" : ["{count} árekstur skráa","{count} árekstrar skráa"], "One file conflict" : "Einn árekstur skráa", "New Files" : "Nýjar skrár", "Already existing files" : "Skrá er nú þegar til", "Which files do you want to keep?" : "Hvaða skrám vilt þú vilt halda eftir?", "If you select both versions, the copied file will have a number added to its name." : "Ef þú velur báðar útgáfur, þá mun verða bætt tölustaf aftan við heiti afrituðu skrárinnar.", "Continue" : "Halda áfram", "(all selected)" : "(allt valið)", "({count} selected)" : "({count} valið)", "Error loading file exists template" : "Villa við að hlaða inn sniðmáti fyrir skrá-er-til", "Pending" : "Í bið", "Copy to {folder}" : "Afrita í {folder}", "Move to {folder}" : "Færa í {folder}", "Saving …" : "Vista …", "Authentication required" : "Auðkenningar krafist", "This action requires you to confirm your password" : "Þessi aðgerð krefst þess að þú staðfestir lykilorðið þitt", "Confirm" : "Staðfesta", "Failed to authenticate, try again" : "Tókst ekki að auðkenna, prófaðu aftur", "seconds ago" : "sekúndum síðan", "Connection to server lost" : "Tenging við miðlara rofnaði", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndu","Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndur"], "Add to a project" : "Bæta við verkefni", "Show details" : "Birta nánari upplýsingar", "Hide details" : "Fela nánari upplýsingar", "Rename project" : "Endurnefna verkefni", "Failed to rename the project" : "Mistókst að endurnefna verkefnið", "Failed to create a project" : "Mistókst að útbúa verkefni", "Failed to add the item to the project" : "Mistókst að bæta atriðinu í verkefnið", "New in" : "Nýtt í", "View changelog" : "Skoða breytingaannál", "Very weak password" : "Mjög veikt lykilorð", "Weak password" : "Veikt lykilorð", "So-so password" : "Miðlungs lykilorð", "Good password" : "Gott lykilorð", "Strong password" : "Sterkt lykilorð", "No action available" : "Engin aðgerð tiltæk", "Error fetching contact actions" : "Villa við að sækja aðgerðir tengiliða", "Personal" : "Einka", "Users" : "Notendur", "Apps" : "Forrit", "Admin" : "Stjórnun", "Help" : "Hjálp", "Access forbidden" : "Aðgangur bannaður", "File not found" : "Skrá finnst ekki", "The document could not be found on the server. Maybe the share was deleted or has expired?" : "Skjalið fannst ekki á þjóninum. Hugsanlega hefur sameigninni verið eytt eða sé útrunnin?", "Back to %s" : "Til baka í %s", "Error" : "Villa", "Internal Server Error" : "Innri villa", "The server was unable to complete your request." : "Þjóninum tókst ekki að afgreiða beiðnina þína.", "If this happens again, please send the technical details below to the server administrator." : "Ef þetta gerist aftur, sendu tæknilegu lýsinguna hér fyrir neðan til kerfisstjóra þjónsins.", "More details can be found in the server log." : "Nánari upplýsingar er að finna í atburðaskrá (annál) þjónsins.", "Technical details" : "Tæknilegar upplýsingar", "Remote Address: %s" : "fjartengt vistfang: %s", "Request ID: %s" : "Beiðni um auðkenni: %s", "Type: %s" : "Tegund: %s", "Code: %s" : "Kóði: %s", "Message: %s" : "Skilaboð: %s", "File: %s" : "Skrá: %s", "Line: %s" : "Lína: %s", "Trace" : "Rekja", "Security warning" : "Öryggisviðvörun", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Gagnamappan og skrárnar eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlarann almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">hjálparskjölin</a>.", "Create an <strong>admin account</strong>" : "Útbúa <strong>kerfisstjóraaðgang</strong>", "Username" : "Notandanafn", "Storage & database" : "Geymsla & gagnagrunnur", "Data folder" : "Gagnamappa", "Configure the database" : "Stilla gagnagrunninn", "Only %s is available." : "Aðeins %s eru laus.", "Install and activate additional PHP modules to choose other database types." : "Setja upp og virkja viðbótar PHP-einingar til að geta valið aðrar tegundir gagnagrunna.", "For more details check out the documentation." : "Frekari upplýsingar eru í hjálparskjölum.", "Database user" : "Notandi gagnagrunns", "Database password" : "Lykilorð gagnagrunns", "Database name" : "Heiti gagnagrunns", "Database tablespace" : "Töflusvæði gagnagrunns", "Database host" : "Netþjónn gagnagrunns", "Please specify the port number along with the host name (e.g., localhost:5432)." : "Taktu fram númer gáttar ásamt nafni hýsilvélar (t.d., localhost:5432).", "Performance warning" : "Afkastaviðvörun", "You chose SQLite as database." : "Þú valdir SQLite sem gagnagrunn.", "SQLite should only be used for minimal and development instances. For production we recommend a different database backend." : "SQLite ætti aðeins að nota fyrir lágmarksuppsetningar og til prófana. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.", "If you use clients for file syncing, the use of SQLite is highly discouraged." : "Ef verið er að nota biðlaraforrit til að samstilla skrár, þá er ekki mælt með notkun SQLite.", "Install recommended apps" : "Setja upp ráðlögð forrit", "Finish setup" : "Ljúka uppsetningu", "Finishing …" : "Að klára ...", "Need help?" : "Þarftu hjálp?", "See the documentation" : "Sjá hjálparskjölin", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.", "Get your own free account" : "Fáðu þér eigin ókeypis aðgang", "Skip to main content" : "Sleppa og fara í meginefni", "Skip to navigation of app" : "Hlaupa yfir í flakk innan forrits", "More apps" : "Fleiri forrit", "More" : "Meira", "More apps menu" : "Valmynd með fleiri forrit", "Search" : "Leita", "Reset search" : "Núllstilla leit", "Contacts" : "Tengiliðir", "Contacts menu" : "Tengiliðavalmynd", "Settings menu" : "Stillingavalmynd", "Confirm your password" : "Staðfestu lykilorðið þitt", "Connect to your account" : "Tengdu við notandaaðganginn þinn", "Please log in before granting %1$s access to your %2$s account." : "Skráði þig inn áður en þú leyfir %1$s aðgang að %2$s notandaaðgangnum þínum.", "App token" : "Teikn forrits", "Grant access" : "Veita aðgengi", "Alternative log in using app token" : "Önnur innskráning með forritsteikni", "Account access" : "Aðgangur að notandaaðgangi", "You are about to grant %1$s access to your %2$s account." : "Þú ert að fara að leyfa \"%1$s\" aðgang að %2$s notandaaðgangnum þínum.", "Account connected" : "Aðgangur er tengdur", "Your client should now be connected!" : "Biðlaraforritið þitt ætti núna að vera tengt!", "You can close this window." : "Þú mátt loka þessum glugga.", "This share is password-protected" : "Þessi sameign er varin með lykilorði", "The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.", "Two-factor authentication" : "Tveggja-þrepa auðkenning", "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu aukaþrep til auðkenningar:", "Could not load at least one of your enabled two-factor auth methods. Please contact your admin." : "Gat ekki hlaðið inn a.m.k. einni af virkum tveggja-þrepa auðkenningaraðferðunum þínum. Hafðu samband við kerfisstjóra.", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", "Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnum þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", "Set up two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", "Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Notaðu einn af öryggisafritunarkóðunum þínum til að skrá þig inn, eða hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", "Use backup code" : "Nota öryggisafritskóða", "Cancel login" : "Hætta við innskráningu", "Setup two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", "Enhanced security is enforced for your account. Choose which provider to set up:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu hvaða auðkenningarveitu eigi að nota til auðkenningar:", "Error while validating your second factor" : "Villa við að sannreyna seinna þrepið", "Access through untrusted domain" : "Tenging frá ótreystu léni", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í config/config.sample.php.", "Further information how to configure this can be found in the %1$sdocumentation%2$s." : "Frekari upplýsingar um hvernig hægt er að stilla þetta má finna í %1$shjálparskjölunum%2$s.", "App update required" : "App þarfnast uppfærslu ", "%1$s will be updated to version %2$s" : "%1$s verður uppfært í útgáfu %2$s.", "These apps will be updated:" : "Eftirfarandi öpp verða uppfærð:", "These incompatible apps will be disabled:" : "Eftirfarandi forrit eru ósamhæfð og verið gerð óvirk: %s", "The theme %s has been disabled." : "Þema %s hefur verið gert óvirkt.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Gakktu úr skugga um að gagnagrunnurinn, config mappan og gagnamappan hafi verið öryggisafritaðar áður en lengra er haldið.", "Start update" : "Hefja uppfærslu", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Til að forðast að falla á tímamörkum með stærri uppsetningar, getur þú í staðinn keyrt eftirfarandi skipun úr uppsetningarmöppunni:", "Detailed logs" : "Ítarlegar atvikaskrár", "Update needed" : "Þarfnast uppfærslu", "Please use the command line updater because you have a big instance with more than 50 users." : "Endilega notaðu uppfærslutólið af skipanalínu, því þú ert með mjög stóra uppsetningu með fleiri en 50 notendum.", "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "Til að fá hjálp er best að skoða fyrst <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">hjálparskjölin</a>.", "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Ég veit að ef ég held uppfærslunni áfram í gegnum vefviðmótið, þá er sú áhætta fyrir hendi að beiðnin falli á tímamörkum, sem aftur gæti valdið gagnatapi - en ég á öryggisafrit og veit hvernig ég get endurheimt uppsetninguna mína ef aðgerðin misferst.", "Upgrade via web on my own risk" : "Uppfæra með vefviðmóti á mína eigin ábyrgð", "Maintenance mode" : "Viðhaldshamur", "This %s instance is currently in maintenance mode, which may take a while." : "Þessi %s er nú í viðhaldsham, sem getur tekið smá stund.", "This page will refresh itself when the instance is available again." : "Þessi síða mun uppfæra sig þegar tilvikið er í boði á ný.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Hafðu samband við kerfisstjóra ef þessi skilaboð eru viðvarandi eða birtust óvænt.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti því það er ekkert gilt tölvupóstfang fyrir þennan notanda. Hafðu samband við kerfisstjóra.", "Couldn't send reset email. Please make sure your username is correct." : "Gat ekki sent endurstillingu í tölvupósti. Gakktu úr skugga um að notandanafn þitt sé rétt.", "We have send a password reset e-mail to the e-mail address known to us for this account. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Tengillinn til að endurstilla lykilorðið þitt hefur verið sendur á netfangið þitt. Ef þú færð ekki póstinn innan hæfilegs tíma, athugaðu þá ruslpóstmöppuna.<br>Ef hann er ekki þar, spurðu þá kerfisstjórann þinn.", "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Það er engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?", "Sending email …" : "Sendi tölvupóst ...", "You are currently running PHP 5.6. The current major version of Nextcloud is the last that is supported on PHP 5.6. It is recommended to upgrade the PHP version to 7.0+ to be able to upgrade to Nextcloud 14." : "Þú ert núna að keyra PHP 5.6. Núverandi aðalútgáfa Nextcloud er sú síðasta sem mun virka á PHP 5.6. Mælt er með því að uppfæra PHP í útgáfu 7.0+ til að eiga möguleika á að uppfæra í Nextcloud 14.", "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum okkar ↗</a>.", "Shared" : "Deilt", "Shared with" : "Deilt með", "Shared by" : "Deilt af", "Choose a password for the public link" : "Veldu þér lykilorð fyrir almenningstengil", "Choose a password for the public link or press the \"Enter\" key" : "Veldu þér lykilorð fyrir opinbera tengilinn eða ýttu á \"Ente\" lykilinn", "Copied!" : "Afritað!", "Copy link" : "Afrita tengil", "Not supported!" : "Óstutt!", "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", "Unable to create a link share" : "Gat ekki búið til sameignartengil", "Unable to toggle this option" : "Tekst ekki að víxla þessum valkosti af/á", "Resharing is not allowed" : "Endurdeiling er ekki leyfð", "Link" : "Tengill", "Hide download" : "Fela niðurhal", "Password protection enforced" : "Gerði verndun með lykilorði nauðsynlega", "Password protect" : "Verja með lykilorði", "Allow editing" : "Leyfa breytingar", "Email link to person" : "Senda veftengil í tölvupósti til notanda", "Send" : "Senda", "Allow upload and editing" : "Leyfa innsendingu og breytingar", "Read only" : "Skrifvarið", "File drop (upload only)" : "Slepping skráa (einungis innsending)", "Expiration date enforced" : "Gerði gildistíma nauðsynlegan", "Set expiration date" : "Setja gildistíma", "Expiration" : "Rennur út", "Expiration date" : "Gildir til", "Note to recipient" : "Minnispunktur til viðtakanda", "Unshare" : "Hætta deilingu", "Delete share link" : "Eyða tengli á sameign", "Add another link" : "Bæta við öðrum tengli", "Password protection for links is mandatory" : "Verndun tengla með lykilorði er skylda", "Share to {name}" : "Deila til {name}", "Share link" : "Deila tengli", "New share link" : "Nýr tengill á sameign", "Created on {time}" : "Búið til {time}", "Password protect by Talk" : "Verja með lykilorði í gegnum Talk", "Could not unshare" : "Gat ekki hætt deilingu", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you and {circle} by {owner}" : "Deilt með þér og {circle} af {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Deilt með þér og samtalinu {conversation} af {owner}", "Shared with you in a conversation by {owner}" : "Deilt með þér í samtali af {owner}", "Shared with you by {owner}" : "Deilt með þér af {owner}", "Choose a password for the mail share" : "Veldu lykilorð fyrir póstsameign", "group" : "hópur", "remote" : "fjartengt", "remote group" : "fjartengdur hópur", "email" : "tölvupóstur", "conversation" : "samtal", "shared by {sharer}" : "deilt af {sharer}", "Can reshare" : "Getur endurdeilt", "Can edit" : "Getur breytt", "Can create" : "Getur búið til", "Can change" : "Getur skipt um", "Can delete" : "Getur eytt", "Access control" : "Aðgangsstýring", "{shareInitiatorDisplayName} shared via link" : "{shareInitiatorDisplayName} deildi með tengli", "Error while sharing" : "Villa við deilingu", "Share details could not be loaded for this item." : "Ekki tókst að hlaða inn upplýsingum um sameign varðandi þetta atriði.", "Search globally" : "Leita allstaðar", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Það þarf a.m.k. {count} staf til að sjálfvirk útfylling virki","Það þarf a.m.k. {count} stafi til að sjálfvirk útfylling virki"], "This list is maybe truncated - please refine your search term to see more results." : "Þessi listi gæti verið stytt útgáfa - þrengdu leitarskilyrðin til að sjá fleiri niðurstöður.", "No users or groups found for {search}" : "Engir notendur eða hópar fundust í {search}", "No users found for {search}" : "Engir notendur fundust með {search}", "An error occurred (\"{message}\"). Please try again" : "Villa kom upp (\"{message}\"). Endilega reyndu aftur", "An error occurred. Please try again" : "Villa kom upp. Endilega reyndu aftur", "Home" : "Heima", "Work" : "Vinna", "Other" : "Annað", "{sharee} (remote group)" : "{sharee} (fjartengdur hópur)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Deila", "Name or email address..." : "Nafn eða tölvupóstfang...", "Name or federated cloud ID..." : "Nafn eða skýjasambandsauðkenni (Federated Cloud ID)...", "Name, federated cloud ID or email address..." : "Nafn, skýjasambandsauðkenni eða tölvupóstfang...", "Name..." : "Nafn...", "Error removing share" : "Villa við að fjarlægja sameign", "Saving..." : "Er að vista ...", "Dismiss" : "Hafna", "Your client should now be connected! You can close this window." : "Biðlaraforritið þitt ætti núna að vera tengt! Þú mátt loka þessum glugga.", "New Password" : "Nýtt lykilorð", "Cancel log in" : "Hætta við innskráningu" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }