|
|
| Řádek 1: |
Řádek 1: |
| − | //necessary because mwreference loaded after ext.visualEditor.viewPageTarget.init
| + | |
| | mw.loader.using( 'ext.visualEditor.viewPageTarget.init', function () { | | mw.loader.using( 'ext.visualEditor.viewPageTarget.init', function () { |
| | | | |
| − | /* Message Definitions */
| + | alert("ok"); |
| − | if (!mw.messages.exists( 'citoid-citeFromURLDialog-search-placeholder' )) {
| |
| − | mw.messages.set({
| |
| − | 'citoid-citeFromURLDialog-search-placeholder':'Enter URL (i.e. http://mediawiki.org)',
| |
| − | 'citoid-citeFromURLDialog-search-label':'URL:',
| |
| − | 'citoid-citeFromURLTool-title': 'Cite from URL'
| |
| − | });
| |
| − | }
| |
| − |
| |
| − | //---------- CiteFromURL Dialog ------------------
| |
| − |
| |
| − | ve.ui.CiteFromURLDialog = function VeUiCiteFromURLDialog( manager, config ) {
| |
| − | // Parent constructor
| |
| − | config = ve.extendObject( { 'size': 'medium' }, config );
| |
| − | ve.ui.CiteFromURLDialog.super.call( this, manager, config );
| |
| − | };
| |
| − |
| |
| − | /* Inheritance */
| |
| − | OO.inheritClass( ve.ui.CiteFromURLDialog, ve.ui.MWCitationDialog );
| |
| − |
| |
| − | /* Static Properties */
| |
| − | ve.ui.CiteFromURLDialog.static.name = 'citefromurl';
| |
| − | ve.ui.CiteFromURLDialog.static.title = mw.msg( 'citoid-citeFromURLDialog-title' );
| |
| − |
| |
| − | /* Returns full template given search results */
| |
| − | ve.ui.CiteFromURLDialog.prototype.getPlainObject = function ( url, searchResults ) {
| |
| − |
| |
| − | var content, plainObject, d, templateHref, templateName,
| |
| − | citation = jQuery.parseJSON( JSON.stringify( searchResults ) )[0], //uses the first citation result for the time being
| |
| − |
| |
| − | templateTypeMap = {
| |
| − | book: 'Cite book',
| |
| − | bookSection: 'Cite book',
| |
| − | journalArticle: 'Cite journal',
| |
| − | magazineArticle: 'Cite news',
| |
| − | newspaperArticle: 'Cite news',
| |
| − | thesis: 'Cite journal',
| |
| − | letter: 'Citation',
| |
| − | manuscript: 'Cite book',
| |
| − | interview: 'Citation',
| |
| − | film: 'Citation',
| |
| − | artwork: 'Citation',
| |
| − | webpage: 'Cite web',
| |
| − | report: 'Cite journal',
| |
| − | bill: 'Citation',
| |
| − | hearing: 'Citation',
| |
| − | patent: 'Citation',
| |
| − | statute: 'Citation',
| |
| − | email: 'Cite web',
| |
| − | map: 'Citation',
| |
| − | blogPost: 'Cite web',
| |
| − | instantMessage: 'Citation',
| |
| − | forumPost: 'Cite web',
| |
| − | audioRecording: 'Citation',
| |
| − | presentation: 'Cite journal',
| |
| − | videoRecording: 'Citation',
| |
| − | tvBroadcast: 'Citation',
| |
| − | radioBroadcast: 'Citation',
| |
| − | podcast: 'Citation',
| |
| − | computerProgram: 'Citation',
| |
| − | conferencePaper: 'Cite journal',
| |
| − | 'document': 'Citation',
| |
| − | encyclopediaArticle: 'Cite journal',
| |
| − | dictionaryEntry: 'Cite journal'
| |
| − | },
| |
| − |
| |
| − | //Parameter map for Template:Citation on en-wiki
| |
| − | //In the format citation-template-field:citoid-field
| |
| − | citationParams = {
| |
| − | 'first1': 'author1-first',
| |
| − | 'last1': 'author1-last',
| |
| − | 'first2': 'author2-first',
| |
| − | 'last2': 'author2-last',
| |
| − | 'first3': 'author3-first',
| |
| − | 'last3': 'author3-last',
| |
| − | 'first4': 'author4-first',
| |
| − | 'last4': 'author4-last',
| |
| − | // 'accessdate': 'accessDate',
| |
| − | 'title': 'title',
| |
| − | 'url': 'url',
| |
| − | 'publisher': 'publisher',
| |
| − | //a large number of Zotero types have the field publicationTitle
| |
| − | //however, in setting journal to publicationTitle, the citation
| |
| − | //will be formatted as a journal article, which may not always be
| |
| − | //desirable.
| |
| − | 'journal': 'publicationTitle',
| |
| − | // 'newspaper': 'publicationTitle',
| |
| − | 'date': 'date',
| |
| − | 'location': 'place',
| |
| − | 'issn': 'ISSN',
| |
| − | 'isbn': 'ISBN',
| |
| − | 'pages': 'pages',
| |
| − | 'volume': 'volume',
| |
| − | 'series': 'series',
| |
| − | 'issue': 'issue',
| |
| − | 'doi': 'DOI'
| |
| − | },
| |
| − |
| |
| − | webParams = {
| |
| − | 'first1': 'author1-first',
| |
| − | 'last1': 'author1-last',
| |
| − | 'first2': 'author2-first',
| |
| − | 'last2': 'author2-last',
| |
| − | 'first3': 'author3-first',
| |
| − | 'last3': 'author3-last',
| |
| − | 'first4': 'author4-first',
| |
| − | 'last4': 'author4-last',
| |
| − | // 'accessdate': 'accessDate',
| |
| − | 'title': 'title',
| |
| − | 'url': 'url',
| |
| − | 'date': 'date',
| |
| − | 'publisher': 'publisher',
| |
| − | 'website': 'publicationTitle'
| |
| − | },
| |
| − |
| |
| − | newsParams = {
| |
| − | 'first1': 'author1-first',
| |
| − | 'last1': 'author1-last',
| |
| − | 'first2': 'author2-first',
| |
| − | 'last2': 'author2-last',
| |
| − | 'first3': 'author3-first',
| |
| − | 'last3': 'author3-last',
| |
| − | 'first4': 'author4-first',
| |
| − | 'last4': 'author4-last',
| |
| − | // 'accessdate': 'accessDate',
| |
| − | 'title': 'title',
| |
| − | 'url': 'url',
| |
| − | 'publisher': 'publisher',
| |
| − | 'newspaper': 'publicationTitle',
| |
| − | 'date': 'date',
| |
| − | 'location': 'place',
| |
| − | 'issn': 'ISSN',
| |
| − | 'isbn': 'ISBN',
| |
| − | 'pages': 'pages',
| |
| − | 'volume': 'volume',
| |
| − | 'series': 'series',
| |
| − | 'issue': 'issue',
| |
| − | 'doi': 'DOI'
| |
| − | },
| |
| − |
| |
| − | bookParams = {
| |
| − | 'first1': 'author1-first',
| |
| − | 'last1': 'author1-last',
| |
| − | 'first2': 'author2-first',
| |
| − | 'last2': 'author2-last',
| |
| − | 'first3': 'author3-first',
| |
| − | 'last3': 'author3-last',
| |
| − | 'first4': 'author4-first',
| |
| − | 'last4': 'author4-last',
| |
| − | // 'accessdate': 'accessDate',
| |
| − | 'title': 'title',
| |
| − | 'url': 'url',
| |
| − | 'publisher': 'publisher',
| |
| − | 'journal': 'publicationTitle',
| |
| − | 'date': 'date',
| |
| − | 'location': 'place',
| |
| − | 'issn': 'ISSN',
| |
| − | 'isbn': 'ISBN',
| |
| − | 'pages': 'pages',
| |
| − | 'volume': 'volume',
| |
| − | 'series': 'series',
| |
| − | 'issue': 'issue',
| |
| − | 'doi': 'DOI'
| |
| − | },
| |
| − |
| |
| − | journalParams = {
| |
| − | 'first1': 'author1-first',
| |
| − | 'last1': 'author1-last',
| |
| − | 'first2': 'author2-first',
| |
| − | 'last2': 'author2-last',
| |
| − | 'first3': 'author3-first',
| |
| − | 'last3': 'author3-last',
| |
| − | 'first4': 'author4-first',
| |
| − | 'last4': 'author4-last',
| |
| − | // 'accessdate': 'accessDate',
| |
| − | 'title': 'title',
| |
| − | 'url': 'url',
| |
| − | 'publisher': 'publisher',
| |
| − | 'journal': 'publicationTitle',
| |
| − | 'date': 'date',
| |
| − | 'location': 'place',
| |
| − | 'issn': 'ISSN',
| |
| − | 'isbn': 'ISBN',
| |
| − | 'pages': 'pages',
| |
| − | 'volume': 'volume',
| |
| − | 'series': 'series',
| |
| − | 'issue': 'issue',
| |
| − | 'doi': 'DOI'
| |
| − | },
| |
| − |
| |
| − | //format 'template name':parameter obj name
| |
| − | templateParamMap = {
| |
| − | 'Citation': citationParams,
| |
| − | 'Cite web': webParams,
| |
| − | 'Cite news': newsParams,
| |
| − | 'Cite journal': journalParams,
| |
| − | 'Cite book': bookParams
| |
| − | },
| |
| − |
| |
| − | //This will contain the correct template with the fields filled out
| |
| − | paramObj = {};
| |
| − |
| |
| − | templateName = templateTypeMap[citation.itemType];
| |
| − |
| |
| − | templateHref = 'Template:' + templateName;
| |
| − |
| |
| − | //hack for now- set citation url to supplied url if not given
| |
| − | if (!citation.url) {citation.url = url;}
| |
| − |
| |
| − | $.each( templateParamMap[templateName], function ( key, value ) {
| |
| − | if (citation[value] !== undefined) {
| |
| − | paramObj[key] = { 'wt': citation[value] };
| |
| − | }
| |
| − | } );
| |
| − |
| |
| − | d = new Date();
| |
| − | paramObj.accessdate = { 'wt': d.toISOString().split('T')[0] }; //discard time
| |
| − |
| |
| − | plainObject = { //before paren put get plain object
| |
| − | 'parts': [ {
| |
| − |
| |
| − | 'template': {
| |
| − | 'target': {
| |
| − | 'href': templateHref,
| |
| − | 'wt': templateName.toLowerCase()
| |
| − | },
| |
| − | 'params': paramObj
| |
| − | }
| |
| − | } ]
| |
| − | };
| |
| − |
| |
| − | content = [
| |
| − | {
| |
| − | 'type': 'mwTransclusionInline',
| |
| − | 'attributes': {
| |
| − | 'mw': plainObject
| |
| − | }
| |
| − | },
| |
| − | { 'type': '/mwTransclusionInline' }
| |
| − | ];
| |
| − | return content;
| |
| − | };
| |
| − |
| |
| − | ve.ui.CiteFromURLDialog.prototype.initialize = function () {
| |
| − | ve.ui.CiteFromURLDialog.super.super.super.prototype.initialize.call( this );
| |
| − |
| |
| − | //not actually using this//hack for inheriting from mwtemplatedialog
| |
| − | this.bookletLayout = new OO.ui.BookletLayout(
| |
| − | ve.extendObject(
| |
| − | { '$': this.$ },
| |
| − | this.constructor.static.bookletLayoutConfig
| |
| − | )
| |
| − | );
| |
| − |
| |
| − | this.searchInput = new OO.ui.TextInputWidget( {
| |
| − | '$': this.$,
| |
| − | 'multiline': false,
| |
| − | 'placeholder': mw.msg( 'citoid-citeFromURLDialog-search-placeholder' )
| |
| − | } );
| |
| − | var panel = new OO.ui.PanelLayout( { '$': this.$, 'scrollable': true, 'padded': true } ),
| |
| − | inputsFieldset = new OO.ui.FieldsetLayout( {
| |
| − | '$': this.$
| |
| − | } ),
| |
| − | //input search
| |
| − |
| |
| − | searchField = new OO.ui.FieldLayout( this.searchInput, {
| |
| − | '$': this.$,
| |
| − | 'label': mw.msg( 'citoid-citeFromURLDialog-search-label' )
| |
| − | } );
| |
| − |
| |
| − | inputsFieldset.$element.append(
| |
| − | searchField.$element
| |
| − | );
| |
| − | panel.$element.append( inputsFieldset.$element );
| |
| − | this.$body.append( panel.$element );
| |
| − |
| |
| − | };
| |
| − |
| |
| − | ve.ui.CiteFromURLDialog.prototype.getActionProcess = function ( action ) {
| |
| − | if ( action === 'apply' || action === 'insert' ) {
| |
| − | return new OO.ui.Process( function () {
| |
| − |
| |
| − | this.pushPending();
| |
| − | var citoidService,
| |
| − | that = this;
| |
| − |
| |
| − | citoidService = "https://citoid.wmflabs.org/url";
| |
| − |
| |
| − | $.ajax( {
| |
| − | beforeSend: function (request) {
| |
| − | request.setRequestHeader('Content-Type', 'application/json');
| |
| − | },
| |
| − | url: citoidService,
| |
| − | type: 'POST',
| |
| − | data: JSON.stringify( { url: this.searchInput.getValue() } ),
| |
| − | dataType: 'json',
| |
| − | success: function ( result ) {
| |
| − | that.close();
| |
| − |
| |
| − | var item, linsel,
| |
| − | surfaceModel = that.getFragment().getSurface(),
| |
| − | doc = surfaceModel.getDocument(),
| |
| − | internalList = doc.getInternalList();
| |
| − |
| |
| − | //sets up referencemodel with blank stuff
| |
| − | if ( !that.referenceModel ) {
| |
| − | // Collapse returns a new fragment, so update this.fragment
| |
| − | that.fragment = that.getFragment().collapseToEnd();
| |
| − | that.referenceModel = new ve.dm.MWReferenceModel();
| |
| − | that.referenceModel.insertInternalItem( surfaceModel );
| |
| − | that.referenceModel.insertReferenceNode( that.getFragment() );
| |
| − | }
| |
| − | //gets bank stuff again
| |
| − | item = that.referenceModel.findInternalItem( surfaceModel );
| |
| − | if ( item ) {
| |
| − | linsel = that.getFragment().clone( new ve.dm.LinearSelection( doc, item.getChildren()[0].getRange() ) );
| |
| − | //actually inserts full transclusion model here!
| |
| − | linsel.insertContent(that.getPlainObject( that.searchInput.getValue(), result ) );
| |
| − | }
| |
| − |
| |
| − | // HACK: Scorch the earth - this is only needed because without it, the reference list won't
| |
| − | // re-render properly, and can be removed once someone fixes that
| |
| − | that.referenceModel.setDocument(
| |
| − | doc.cloneFromRange(
| |
| − | internalList.getItemNode( that.referenceModel.getListIndex() ).getRange()
| |
| − | )
| |
| − | );
| |
| − |
| |
| − | that.referenceModel.updateInternalItem( surfaceModel );
| |
| − |
| |
| − | //hack- doesn't seem to be working in always
| |
| − | that.popPending();
| |
| − | },
| |
| − | error: function ( XMLHttpRequest, textStatus, errorThrown) {
| |
| − | that.popPending();
| |
| − | mw.notify( 'Status:' + textStatus + 'Error: ' + errorThrown );
| |
| − | that.popPending();
| |
| − | },
| |
| − | always: function () {
| |
| − | that.popPending();
| |
| − | }
| |
| − | } );
| |
| − | }, this );
| |
| − | }
| |
| − |
| |
| − | // Parent method
| |
| − | return ve.ui.CiteFromURLDialog.super.super.prototype.getActionProcess.call( this, action );
| |
| − | };
| |
| − |
| |
| − | ve.ui.CiteFromURLDialog.prototype.onTransclusionReady = function () {
| |
| − | // Parent method
| |
| − | ve.ui.CiteFromURLDialog.super.prototype.onTransclusionReady.call( this );
| |
| − | //hack- always enabled for now
| |
| − | this.actions.setAbilities( { 'apply': true, 'insert': true } );
| |
| − | };
| |
| − |
| |
| − | //hack for inheriting from template dialog
| |
| − | //Sets the title of the dialog correctly
| |
| − | ve.ui.CiteFromURLDialog.prototype.getTemplatePartLabel = function ( part ) {
| |
| − | return ve.msg( 'citoid-citeFromURLTool-title' );
| |
| − | };
| |
| − |
| |
| − | ve.ui.windowFactory.register( ve.ui.CiteFromURLDialog );
| |
| − |
| |
| − | //---------- CiteFromURL tool ------------------
| |
| − |
| |
| − | function CiteFromURLTool( toolGroup, config ) {
| |
| − | OO.ui.Tool.call( this, toolGroup, config );
| |
| − |
| |
| − | }
| |
| − | OO.inheritClass( CiteFromURLTool, OO.ui.Tool );
| |
| − |
| |
| − | CiteFromURLTool.static.name = 'citefromurl';
| |
| − | CiteFromURLTool.static.icon = 'ref-cite-web';
| |
| − | CiteFromURLTool.static.group = 'cite';
| |
| − | CiteFromURLTool.static.autoAddToCatchall = false;
| |
| − | CiteFromURLTool.static.title = mw.msg('citoid-citeFromURLTool-title');
| |
| − |
| |
| − | CiteFromURLTool.prototype.onSelect = function () {
| |
| − | this.toolbar.getSurface().execute( 'window', 'open', 'citefromurl', null );
| |
| − | };
| |
| − |
| |
| − | CiteFromURLTool.prototype.onUpdateState = function () {
| |
| − | this.setActive( false );
| |
| − | };
| |
| − |
| |
| − | ve.ui.toolFactory.register( CiteFromURLTool );
| |
| | | | |
| | }); | | }); |