Skip to content

Commit 61e7b77

Browse files
committed
Merge pull request #12 from wmde/sitelink
Updated SiteLink support
2 parents 306fd59 + bfba4af commit 61e7b77

File tree

5 files changed

+101
-10
lines changed

5 files changed

+101
-10
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@ at the heart of the [Wikibase software](http://wikiba.se/).
66

77
## Release notes
88

9-
### 0.3.1 (dev)
9+
### 0.3.2 (2014-08-19)
1010

1111
* Added wikibase.datamodel.SiteLink.
12+
* Added wikibase.datamodel.Item.getSiteLinks().
13+
14+
### 0.3.1 (2014-08-14)
15+
1216
* Remove ResourceLoader dependencies on jquery and mediawiki (bug 69468)
1317

1418
### 0.3.0 (2014-07-10)

init.mw.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
$GLOBALS['wgExtensionCredits']['wikibase'][] = array(
44
'path' => __FILE__,
55
'name' => 'Wikibase DataModel JavaScript',
6-
'version' => '0.3.1-alpha',
6+
'version' => '0.3.2',
77
'author' => array(
88
'[https://www.mediawiki.org/wiki/User:Danwe Daniel Werner]',
99
'[http://www.snater.com H. Snater]',

src/Item.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@
1818
* @param {Object} data
1919
*/
2020
var SELF = wb.datamodel.Item = util.inherit( 'WbItem', PARENT, {
21-
// TODO: implement sitelinks related getter/setter
21+
/**
22+
* @since 0.3
23+
* @return {wikibase.datamodel.SiteLink[]}
24+
*/
25+
getSiteLinks: function() {
26+
return this._data.sitelinks || [];
27+
}
2228
} );
2329

2430
/**

src/SiteLink.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,34 @@ $.extend( SELF.prototype, {
6868
*/
6969
getBadges: function() {
7070
return this._badges;
71+
},
72+
73+
/**
74+
* @param {*} siteLink
75+
* @return {boolean}
76+
*/
77+
equals: function( siteLink ) {
78+
if( !( siteLink instanceof SELF ) ) {
79+
return false;
80+
}
81+
82+
var otherBadges = siteLink.getBadges();
83+
84+
if(
85+
this._siteId !== siteLink.getSiteId()
86+
|| this._pageName !== siteLink.getPageName()
87+
|| this._badges.length !== otherBadges.length
88+
) {
89+
return false;
90+
}
91+
92+
for( var i = 0; i < this._badges.length; i++ ) {
93+
if( $.inArray( this._badges[i], otherBadges ) === -1 ) {
94+
return false;
95+
}
96+
}
97+
98+
return true;
7199
}
72100

73101
} );

tests/SiteLink.tests.js

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@
66
( function( wb, $, QUnit ) {
77
'use strict';
88

9-
var siteId = 'test-id',
10-
pageName = 'test-page';
11-
129
QUnit.module( 'wikibase.datamodel.SiteLink', QUnit.newMwEnvironment() );
1310

1411
QUnit.test( 'Basic tests', function( assert ) {
15-
var siteLink = new wb.datamodel.SiteLink( siteId, pageName );
12+
var siteLink = new wb.datamodel.SiteLink( 'test-id', 'test-name' );
1613

1714
assert.equal(
1815
siteLink.getSiteId(),
@@ -22,13 +19,13 @@ QUnit.test( 'Basic tests', function( assert ) {
2219

2320
assert.equal(
2421
siteLink.getPageName(),
25-
pageName,
22+
'test-name',
2623
'Verified page name.'
2724
);
2825
} );
2926

3027
QUnit.test( 'Badges', function( assert ) {
31-
var siteLink = new wb.datamodel.SiteLink( siteId, pageName ),
28+
var siteLink = new wb.datamodel.SiteLink( 'test-id', 'test-page' ),
3229
badges = ['Q123', 'Q456'];
3330

3431
assert.equal(
@@ -53,7 +50,7 @@ QUnit.test( 'Badges', function( assert ) {
5350
'Removed badges.'
5451
);
5552

56-
siteLink = new wb.datamodel.SiteLink( siteId, pageName, badges );
53+
siteLink = new wb.datamodel.SiteLink( 'test-id', 'test-page', badges );
5754

5855
assert.equal(
5956
badges.join( ',' ),
@@ -62,4 +59,60 @@ QUnit.test( 'Badges', function( assert ) {
6259
);
6360
} );
6461

62+
QUnit.test( 'equals()', function( assert ) {
63+
var testSet = [
64+
['siteId', 'pageName', []],
65+
['anotherSiteId', 'pageName', []],
66+
['siteId', 'anotherPageName', []],
67+
['anotherSiteId', 'anotherPageName', []],
68+
['siteId', 'pageName', ['badgeId']],
69+
['siteId', 'pageName', ['badgeId', 'anotherBadgeId']]
70+
];
71+
72+
var invalid = [
73+
'plain string',
74+
1,
75+
0,
76+
false,
77+
true,
78+
['siteId', 'pageName', []]
79+
];
80+
81+
for( var i = 0; i < testSet.length; i++ ) {
82+
var siteLink1 = new wb.datamodel.SiteLink(
83+
testSet[i][0],
84+
testSet[i][1],
85+
testSet[i][2]
86+
);
87+
88+
for( var j = 0; j < invalid.length; j++ ) {
89+
assert.ok(
90+
!siteLink1.equals( invalid[j] ),
91+
'Test set #' + i + ' is not equal to invalid set #' + j + '.'
92+
);
93+
}
94+
95+
for( j = 0; j < testSet.length; j++ ) {
96+
var siteLink2 = new wb.datamodel.SiteLink(
97+
testSet[j][0],
98+
testSet[j][1],
99+
testSet[j][2]
100+
);
101+
102+
if( i === j ) {
103+
assert.ok(
104+
siteLink1.equals( siteLink2 ),
105+
'Test set #' + i + ' equals.'
106+
);
107+
} else {
108+
assert.ok(
109+
!siteLink1.equals( siteLink2 ),
110+
'Test set #' + j + ' is not equal to test set #' + i + '.'
111+
);
112+
}
113+
}
114+
}
115+
116+
} );
117+
65118
}( wikibase, jQuery, QUnit ) );

0 commit comments

Comments
 (0)