ItSpiderman has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/405869 )
Change subject: Add PageExport dialog
......................................................................
Add PageExport dialog
This dialog allows exporting pages to wiki-list when provided with array
of page names
Needs cherry-picking to REL1_27
Change-Id: Iaf35731368370175e1754c0f732c5c7aee85a57b
ERM: #8210
---
M extension.json
M i18n/extjs/de.json
M i18n/extjs/en.json
M i18n/extjs/qqq.json
A resources/bluespice.extjs/BS/dialog/PageExport.js
5 files changed, 316 insertions(+), 4 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceFoundation
refs/changes/69/405869/1
diff --git a/extension.json b/extension.json
index 75005a6..534fcd9 100644
--- a/extension.json
+++ b/extension.json
@@ -164,7 +164,19 @@
"bs-extjs-filter-date-after",
"bs-extjs-filter-date-before",
"bs-extjs-filter-date-on",
- "bs-extjs-filter-date-filter"
+ "bs-extjs-filter-date-filter",
+ "bs-extjs-pageexport-dialog-title",
+ "bs-extjs-pageexport-list-name-label",
+ "bs-extjs-pageexport-list-format-label",
+ "bs-extjs-pageexport-list-format-plain-label",
+ "bs-extjs-pageexport-list-format-link-label",
+ "bs-extjs-pageexport-overwrite-label",
+ "bs-extjs-pageexport-general-error",
+ "bs-extjs-pageexport-pagecollection-prefix",
+ "bs-extjs-pageexport-success",
+ "bs-extjs-pageexport-success-text",
+ "bs-extjs-pageexport-required-text",
+ "bs-extjs-export-search-summary-text"
],
"dependencies": [
"ext.bluespice.extjs.theme.ux",
diff --git a/i18n/extjs/de.json b/i18n/extjs/de.json
index a45a3b7..226b3cd 100644
--- a/i18n/extjs/de.json
+++ b/i18n/extjs/de.json
@@ -54,5 +54,6 @@
"bs-extjs-filter-date-after": "Nach",
"bs-extjs-filter-date-before": "Vor",
"bs-extjs-filter-date-on": "Am",
- "bs-extjs-filter-date-filter": "Filtern"
+ "bs-extjs-filter-date-filter": "Filtern",
+ "bs-extjs-pageexport-pagecollection-prefix": "Seitensammlung_"
}
diff --git a/i18n/extjs/en.json b/i18n/extjs/en.json
index aa47deb..3f24144 100644
--- a/i18n/extjs/en.json
+++ b/i18n/extjs/en.json
@@ -52,6 +52,18 @@
"bs-extjs-filter-date-after": "After",
"bs-extjs-filter-date-before": "Before",
"bs-extjs-filter-date-on": "On",
- "bs-extjs-filter-date-filter": "Filter"
+ "bs-extjs-filter-date-filter": "Filter",
+ "bs-extjs-pageexport-pageexportdialog-title": "Export pages",
+ "bs-extjs-pageexport-list-name-label": "List name",
+ "bs-extjs-pageexport-list-format-label": "List format",
+ "bs-extjs-pageexport-list-format-plain-label": "Plain text",
+ "bs-extjs-pageexport-list-format-link-label": "Link",
+ "bs-extjs-pageexport-overwrite-label": "Overwrite",
+ "bs-extjs-pageexport-general-error": "Export error",
+ "bs-extjs-pageexport-pagecollection-prefix": "Page_collection_",
+ "bs-extjs-pageexport-success": "Export successful",
+ "bs-extjs-pageexport-success-text": "Page collection exported to <a
href='$1'>$2</a>",
+ "bs-extjs-pageexport-required-text": "List name cannot be empty and at
least one page must be selected",
+ "bs-extjs-export-search-summary-text": "Generated by PageExport"
}
diff --git a/i18n/extjs/qqq.json b/i18n/extjs/qqq.json
index f1b02f2..179566f 100644
--- a/i18n/extjs/qqq.json
+++ b/i18n/extjs/qqq.json
@@ -57,5 +57,17 @@
"bs-extjs-filter-date-after": "Label for a filter option that filters
for datasets where date in the field is later than the entered
date\n{{Identical|After}}",
"bs-extjs-filter-date-before": "Label for a filter option that filters
for datasets where date in the field is earlier than the the entered
date\n{{Identical|Before}}",
"bs-extjs-filter-date-on": "Label for a filter option that filters for
datasets where date in the field is the same as the entered
date\n{{Identical|On}}",
- "bs-extjs-filter-date-filter": "Label for a button invoking the
filter\n{{Identical|Filter}}"
+ "bs-extjs-filter-date-filter": "Label for a button invoking the
filter\n{{Identical|Filter}}",
+ "bs-extjs-pageexport-pageexportdialog-title": "Title for the export
dialog",
+ "bs-extjs-pageexport-list-name-label": "Title for the export dialog",
+ "bs-extjs-pageexport-list-format-label": "Label text for choosing
export list format",
+ "bs-extjs-pageexport-list-format-plain-label": "Label text indicating
plain text format for export list",
+ "bs-extjs-pageexport-list-format-link-label": "Label text indicating
link format for export list",
+ "bs-extjs-pageexport-overwrite-label": "Label text indicating link
format for export list",
+ "bs-extjs-pageexport-general-error": "Text for general error in export
process",
+ "bs-extjs-pageexport-pagecollection-prefix": "Prefix for naming page
collections created by exporting search results",
+ "bs-extjs-pageexport-success": "Dialog title when export was sucessful",
+ "bs-extjs-pageexport-success-text": "Content of dialog when export was
sucessful",
+ "bs-extjs-pageexport-required-text": "Dialog text when required fields
are not filled",
+ "bs-extjs-export-search-summary-text": "Text for summary message for
page edit on export"
}
diff --git a/resources/bluespice.extjs/BS/dialog/PageExport.js
b/resources/bluespice.extjs/BS/dialog/PageExport.js
new file mode 100644
index 0000000..35ff890
--- /dev/null
+++ b/resources/bluespice.extjs/BS/dialog/PageExport.js
@@ -0,0 +1,275 @@
+Ext.define( 'BS.dialog.PageExport', {
+ extend: 'BS.Window',
+ requires: [],
+ width: 350,
+ title: mw.message( 'bs-extjs-pageexport-dialog-title' ).plain(),
+ pages: [],
+ defaultName: '',
+ targetTitle: null,
+ targetPageContent: '',
+ formattedExportContent: '',
+
+ afterInitComponent: function() {
+ this.tbName = Ext.create( 'Ext.form.field.Text', {
+ fieldLabel: mw.message(
'bs-extjs-pageexport-list-name-label' ).plain(),
+ labelAlign: 'right',
+ value: this.defaultName
+ });
+ this.rgFormat = Ext.create('Ext.form.RadioGroup', {
+ value: 'plain',
+ flex: 1,
+ items: [{
+ boxLabel: mw.message(
'bs-extjs-pageexport-list-format-plain-label' ).plain(),
+ id: 'export-format-plain',
+ name: 'export-format',
+ inputValue: 'plain',
+ checked: true
+ },
+ {
+ boxLabel:
mw.message('bs-extjs-pageexport-list-format-link-label').plain(),
+ id: 'export-format-link',
+ name: 'export-format',
+ inputValue: 'link'
+ }
+ ]
+ });
+
+ this.cbxOverwrite = Ext.create( 'Ext.form.field.Checkbox', {
+ value: '0',
+ fieldLabel: mw.message(
'bs-extjs-pageexport-overwrite-label' ).plain(),
+ labelAlign: 'right'
+ });
+
+ this.preparePages();
+ this.makePagesStore();
+ this.makePagesGrid();
+
+ this.items = [
+ this.tbName,
+ {
+ xtype: 'fieldcontainer',
+ fieldLabel: mw.message(
'bs-extjs-pageexport-list-format-label' ).plain(),
+ labelAlign: 'right',
+ layout: 'hbox',
+ items: [
+ this.rgFormat
+ ]
+ },
+ this.cbxOverwrite,
+ this.gdPages
+ ]
+ this.callParent(arguments);
+ },
+
+ preparePages: function() {
+ var finalPages = [];
+ $.each( this.pages, function( idx, page ) {
+ finalPages.push({
+ included: true,
+ pageTitle: page
+ })
+ });
+ this.pages = finalPages;
+ },
+
+ makePagesStore: function() {
+ this.store = Ext.create( 'Ext.data.Store', {
+ fields: [ 'included', 'pageTitle' ],
+ data: { 'pages': this.pages },
+ proxy: {
+ type: 'memory',
+ reader: {
+ type: 'json',
+ root: 'pages'
+ }
+ }
+ } );
+ },
+
+ makePagesGrid: function() {
+ this.gdPages = Ext.create( 'Ext.grid.Panel', {
+ store: this.store,
+ columns: [
+ {
+ header: '',
+ dataIndex: 'included',
+ xtype: 'checkcolumn',
+ width: 40,
+ resizeable: false,
+ groupable: false,
+ sortable: false
+ },
+ {
+ header: 'Page title',
+ dataIndex: 'pageTitle',
+ width: 300
+ }
+ ]
+ } );
+ },
+
+ onBtnOKClick: function () {
+ var me = this;
+
+ me.data = me.getData();
+ if( me.data.name === '' || me.data.pages.length === 0 ) {
+ bs.util.alert(
+ 'bs-pageexport-alert-required',
+ {
+ text: mw.message(
'bs-extjs-pageexport-required-text').plain()
+ }
+ );
+ return;
+ }
+
+ me.setLoading( true );
+
+ me.setTargetTitle();
+ var exportPromise = me.doExport();
+
+ exportPromise.fail( function( code, errResponse ) {
+ me.setLoading( false );
+ bs.util.alert(
+ 'bs-pageexport-alert-fail',
+ {
+ titleMsg:
'bs-extjs-pageexport-general-error',
+ text: errResponse.error.info
+ }
+ );
+ me.close();
+ } );
+
+ exportPromise.done( function( response ) {
+ me.setLoading( false );
+ bs.util.alert(
+ 'bs-pageexport-alert-success',
+ {
+ titleMsg: 'bs-extjs-pageexport-success',
+ text: mw.message(
+
'bs-extjs-pageexport-success-text',
+ me.targetTitle.getUrl(),
+ me.targetTitle.getPrefixedText()
+ ).plain()
+ }
+ );
+ me.close();
+ } );
+ },
+
+ setTargetTitle: function() {
+ var ns = mw.config.get( 'wgNamespaceIds' )['mediawiki'];
+ var text = mw.message(
'bs-extjs-pageexport-pagecollection-prefix' ).plain();
+ text += this.data.name;
+ this.targetTitle = mw.Title.newFromText( text, ns );
+ },
+
+ doExport: function() {
+ var me = this,
+ getTargetPageInfoAPI = new mw.Api(),
+ dfd = $.Deferred();
+
+ getTargetPageInfoAPI.get( {
+ action: 'query',
+ titles: me.targetTitle.getPrefixedText(),
+ prop: 'revisions',
+ rvprop: 'content',
+ indexpageids : ''
+ } )
+ .fail( function( code, errResp ) {
+ dfd.reject( code, errResp );
+ } )
+ .done( function( response ) {
+ var pageId = response.query.pageids[0];
+ var pageInfo = response.query.pages[pageId];
+ if( !pageInfo.missing && pageInfo.revisions &&
pageInfo.revisions[0] ) {
+ me.targetPageContent =
pageInfo.revisions[0]['*'];
+ }
+
+ var savePromise = me.savePage();
+ savePromise.fail( function( code, error ) {
+ dfd.reject( code, error );
+ });
+ savePromise.done( function( response ){
+ dfd.resolve( response );
+ });
+ } );
+
+ return dfd.promise();
+ },
+
+ savePage: function() {
+ var me = this,
+ savePageAPI = new mw.Api(),
+ dfd = $.Deferred();
+
+ me.formatExportContent();
+
+ if( me.data.overwrite == false ) {
+ me.formattedExportContent =
+ me.targetPageContent + "\n" +
me.formattedExportContent;
+ }
+
+ savePageAPI.postWithToken( 'edit', {
+ action: 'edit',
+ title: me.targetTitle.getPrefixedText(),
+ summary: mw.message(
'bs-extjs-pageexport-edit-summary-text' ).plain(),
+ text: me.formattedExportContent
+ } ).done( function( response ) {
+ dfd.resolve( response );
+ } ).fail( function( code, err ) {
+ dfd.reject( code, err );
+ } );
+
+ return dfd.promise();
+ },
+
+ formatExportContent: function() {
+ var me = this;
+ if( me.data.pages.length === 0 ) {
+ return;
+ }
+ me.formattedExportContent = '';
+
+ $.each( me.data.pages, function( idx, page ){
+ var exportLine = '* ';
+ if( me.data.link ) {
+ exportLine += "[[" + page + "]]\n";
+ } else {
+ exportLine += page + "\n";
+ }
+ me.formattedExportContent += exportLine;
+ } );
+ },
+
+ getData: function() {
+ var me = this;
+ var pages = [];
+ var range = this.store.getRange();
+ $.each( range, function( idx, item ) {
+ if( item.data.included == false ) {
+ return;
+ }
+ pages.push( item.data.pageTitle );
+ });
+
+ var data = {
+ pages: pages,
+ link: false,
+ overwrite: false,
+ name: me.tbName.getValue()
+ };
+
+ if( me.rgFormat.getValue()['export-format'] === 'link' ) {
+ data.link = true;
+ }
+
+ if( me.cbxOverwrite.getValue() ) {
+ data.overwrite = true;
+ }
+
+ return data;
+ }
+});
+
+
+
--
To view, visit https://gerrit.wikimedia.org/r/405869
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaf35731368370175e1754c0f732c5c7aee85a57b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation
Gerrit-Branch: master
Gerrit-Owner: ItSpiderman <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits