User:Alexis Jazz/Factotum/modules/AltRefModule.js

//AltRefModule provides an alternative reflist for Factotum. See https://en.wikipedia.org/wiki/User:Alexis_Jazz/Factotum/Modules#Alternative_reference_selector //AltRefModule is public domain, irrevocably released as WTFPL Version 2[www.wtfpl.net/about/] by its author, Alexis Jazz. if ( typeof window.FTTModules == 'undefined' ) { window.FTTModules=[]; } FTTModules.push({'load':['afterPreload'],'afterPreloadFunc':	function(int,rInt,errInt){		FTT.MD.secRefL = {};		if ( ! FTT.MD.secRefL.CSS ) {			mw.util.addCSS('#HLSecRefDropDownL>span a{box-shadow:inset 0 0 0 0.15em rgba(0,0,255,0.5)}.HLRefDropDown .oo-ui-menuSelectWidget{z-index:20}');			FTT.MD.secRefL.CSS = 1;		}		FTT.MD.secRefL.refs = FTT.UITextInput.getValue.match(/(([^<]|<(?!\/ref>))+)<\/ref>/g);		if ( ! FTT.MD.secRefL.refs ) {			return;		}		if ( ! FTT.referenceArray ) {			$('#mw-content-text ol.references').append($('#mw-content-text ol.references>li style')[0]); //sometimes style gets included in innerText but not always? seems flaky, moving style element out of the way			FTT.referenceArray = Array.from($('#mw-content-text ol.references>li'));		}		FTT.MD.secRefL.HLRefDropDownOpts = [];			for (rInt=0;rInt(([^<]|<(?!\/ref>))+)<\/ref>/,'$2');			FTT.MD.secRefL.refArrName = FTT.MD.secRefL.refs[rInt].match(//); FTT.MD.secRefL.url = FTT.MD.secRefL.refArrLabel.match(/http[s]?:\/\/[^ \|<>]+/); FTT.MD.secRefL.longNum = FTT.MD.secRefL.refArrLabel.match(/[0-9]{7,}/); FTT.MD.secRefL.refArrLabel = FTT.escapeHTML(FTT.MD.secRefL.refArrLabel); FTT.MD.secRefL.gotEl = 0; try{ FTT.MD.secRefL.nameEl = document.getElementById('cite_note-'+FTT.MD.secRefL.refArrName[2].replace(/ /g,'_')+'-1'); FTT.MD.secRefL.refArrLabel = FTT.escapeHTML(FTT.MD.secRefL.nameEl.querySelectorAll('.reference-text')[0].innerText.split(/\n/)[0]); FTT.MD.secRefL.gotEl=1; } catch (e) {} if ( ! FTT.MD.secRefL.gotEl ) { for (int=0;int<FTT.referenceArray.length;int++) { if ( ( FTT.MD.secRefL.url && FTT.referenceArray[int].innerHTML.match(FTT.MD.secRefL.url[0]) ) || ( FTT.MD.secRefL.longNum && FTT.referenceArray[int].innerText.match(FTT.MD.secRefL.longNum[0]) ) ) { try{ FTT.MD.secRefL.refArrLabel = FTT.escapeHTML(FTT.referenceArray[int].querySelectorAll('.reference-text')[0].innerText.split(/\n/)[0]); FTT.MD.secRefL.refArrLabelErr = ''; for ( errInt=0;errInt 300 ) { FTT.MD.secRefL.refArrLabel = FTT.MD.secRefL.refArrLabel.slice(0,295)+'…'; }			if ( FTT.MD.secRefL.refArrLabel != '' ) { FTT.MD.secRefL.HLRefDropDownOpts.push({data:rInt,label:new OO.ui.HtmlSnippet(FTT.MD.secRefL.refArrLabel)}); }		}		FTT.MD.secRefL.HLRefDropDown = new OO.ui.DropdownInputWidget( {			id: 'HLSecRefDropDown',			classes: ['HLRefDropDown'],			options: FTT.MD.secRefL.HLRefDropDownOpts,		}); FTT.MD.secRefL.selectRef = function { FTT.MD.secRefL.refIndexStart = FTT.UITextInput.getValue.split(FTT.MD.secRefL.refs[FTT.MD.secRefL.HLRefDropDown.getValue])[0].length; FTT.MD.secRefL.refIndexEnd = FTT.MD.secRefL.refIndexStart + FTT.MD.secRefL.refs[FTT.MD.secRefL.HLRefDropDown.getValue].length; FTT.HLSelectRef(FTT.MD.secRefL.refIndexStart,FTT.MD.secRefL.refIndexEnd); };		FTT.MD.secRefL.HLRefDropDown.on('change',function {			FTT.MD.secRefL.selectRef;		}); FTT.MD.secRefL.HLRefDropDownGo = new OO.ui.ButtonWidget( {			label:FTT.basicmsgs.go,		}); FTT.MD.secRefL.HLRefDropDownGo.on('click',function{			FTT.MD.secRefL.selectRef;		}); FTT.MD.secRefL.HLRefDropDownL = new OO.ui.HorizontalLayout({id:'HLSecRefDropDownL',classes:['HLRefDropDownL'],items:[FTT.MD.secRefL.HLRefDropDown,FTT.MD.secRefL.HLRefDropDownGo]}); if ( ! FTT.MD.secRefL.HLRefDropDownL.isElementAttached ) { $('#FTTTextAndPreview').append(FTT.MD.secRefL.HLRefDropDownL.$element); FTT.insertAfter($('#FTTTextAndPreview')[0],$('#HLSecRefDropDownL')[0]); }	} });