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
|
( function ( mw, uw, $, OO ) {
var NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category;
/**
* A categories field in UploadWizard's "Details" step form.
*
* @extends uw.DetailsWidget
*/
uw.CategoriesDetailsWidget = function UWCategoriesDetailsWidget() {
var categories, catDetails = this;
uw.CategoriesDetailsWidget.parent.call( this );
this.categoriesWidget = new mw.widgets.CategoryMultiselectWidget();
this.categoriesWidget.createItemWidget = function ( data ) {
var widget = this.constructor.prototype.createItemWidget.call( this, data );
if ( !widget ) {
return null;
}
widget.setMissing = function ( missing ) {
this.constructor.prototype.setMissing.call( this, missing );
// Aggregate 'change' event
catDetails.emit( 'change' );
};
return widget;
};
categories = ( mw.UploadWizard.config.defaults.categories || [] ).filter( function ( cat ) {
// Keep only valid titles
return !!mw.Title.makeTitle( NS_CATEGORY, cat );
} );
this.categoriesWidget.setItemsFromData( categories );
this.$element.addClass( 'mwe-upwiz-categoriesDetailsWidget' );
this.$element.append( this.categoriesWidget.$element );
// Aggregate 'change' event
this.categoriesWidget.connect( this, { change: [ 'emit', 'change' ] } );
};
OO.inheritClass( uw.CategoriesDetailsWidget, uw.DetailsWidget );
/**
* @inheritdoc
*/
uw.CategoriesDetailsWidget.prototype.getErrors = function () {
return $.Deferred().resolve( [] ).promise();
};
/**
* @inheritdoc
*/
uw.CategoriesDetailsWidget.prototype.getWarnings = function () {
var warnings = [];
if ( mw.UploadWizard.config.enableCategoryCheck && this.categoriesWidget.getItemsData().length === 0 ) {
warnings.push( mw.message( 'mwe-upwiz-warning-categories-missing' ) );
}
if ( this.categoriesWidget.getItems().some( function ( item ) { return item.missing; } ) ) {
warnings.push( mw.message( 'mwe-upwiz-categories-missing' ) );
}
return $.Deferred().resolve( warnings ).promise();
};
/**
* @inheritdoc
*/
uw.CategoriesDetailsWidget.prototype.getWikiText = function () {
var hiddenCats, missingCatsWikiText, categories, wikiText;
hiddenCats = [];
if ( mw.UploadWizard.config.autoAdd.categories ) {
hiddenCats = hiddenCats.concat( mw.UploadWizard.config.autoAdd.categories );
}
if ( mw.UploadWizard.config.trackingCategory ) {
if ( mw.UploadWizard.config.trackingCategory.all ) {
hiddenCats.push( mw.UploadWizard.config.trackingCategory.all );
}
if ( mw.UploadWizard.config.trackingCategory.campaign ) {
hiddenCats.push( mw.UploadWizard.config.trackingCategory.campaign );
}
}
hiddenCats = hiddenCats.filter( function ( cat ) {
// Keep only valid titles
return !!mw.Title.makeTitle( NS_CATEGORY, cat );
} );
missingCatsWikiText = null;
if (
typeof mw.UploadWizard.config.missingCategoriesWikiText === 'string' &&
mw.UploadWizard.config.missingCategoriesWikiText.length > 0
) {
missingCatsWikiText = mw.UploadWizard.config.missingCategoriesWikiText;
}
categories = this.categoriesWidget.getItemsData();
// add all categories
wikiText = categories.concat( hiddenCats )
.map( function ( cat ) {
return '[[' + mw.Title.makeTitle( NS_CATEGORY, cat ).getPrefixedText() + ']]';
} )
.join( '\n' );
// if so configured, and there are no user-visible categories, add warning
if ( missingCatsWikiText !== null && categories.length === 0 ) {
wikiText += '\n\n' + missingCatsWikiText;
}
return wikiText;
};
/**
* @inheritdoc
* @return {Object} See #setSerialized
*/
uw.CategoriesDetailsWidget.prototype.getSerialized = function () {
return {
value: this.categoriesWidget.getItemsData()
};
};
/**
* @inheritdoc
* @param {Object} serialized
* @param {string[]} serialized.value List of categories
*/
uw.CategoriesDetailsWidget.prototype.setSerialized = function ( serialized ) {
this.categoriesWidget.setItemsFromData( serialized.value );
};
}( mediaWiki, mediaWiki.uploadWizard, jQuery, OO ) );
|