MediaWiki-diskusjon:Gadget-kulturminne-search.js

Sideinnholdet støttes ikke på andre språk.
Fra Wikipedia, den frie encyklopedi

Oppdatert kode[rediger kilde]

Det ser ut som om det er vanskelig å konstruere et søk som gir gode treff i Kulturminnesøk. Det er kun noen av feltene som er indeksert, og en del navn og fragmenter av navn som vi bruker blokkerer treff. Et eksempel er «kirke» hvor det ikke finnes noen mapping til Kulturminnesøk sitt «kirkested». Innholdet i disse begrepene er riktignok ulik, men det er ikke gitt at brukere oppfatter denne nyansen.

Den etterfølgende koden bryter opp søkestrengen og skyter inn en ampersand for å få en logisk «og». Dette gjør at vi kan lage søk utav titler hvor det brukes en parentesform, gitt at parentesformen viser til en kommune.

I en senere utgave kan det legges til kommunenavn fra traversering av Wikidata, dette vil gi bedre treff. — Jeblad 5. sep. 2015 kl. 03:37 (CEST)[svar]

Oppdatert script for kulturminnesøk
// Manipulating the Array.prototype can lead to problems
// as we are screwing with the global prototype.
// The filter should be available now, not sure why this
// is blocked.
if (!Array.prototype.filter2screwaround) {
  Array.prototype.filter2screwaround = function(fun/*, thisArg*/) {
    'use strict';

    if (this === void 0 || this === null) {
      throw new TypeError();
    }

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== 'function') {
      throw new TypeError();
    }

    var res = [];
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++) {
      if (i in t) {
        var val = t[i];

        // NOTE: Technically this should Object.defineProperty at
        //       the next index, as push can be affected by
        //       properties on Object.prototype and Array.prototype.
        //       But that method's new, and collisions should be
        //       rare, so use the more-compatible alternative.
        if (fun.call(thisArg, val, i, t)) {
          res.push(val);
        }
      }
    }

    return res;
  };
}

// Code for gadget to build a search for «Kulturminnesøk».
// © John Erling Blad, Creative Commons by Attribution 3.0
$( function (){
	if (mw.config.get('wgNamespaceNumber') !== 0)
		return;
	// a very short stopwords list to avoid most failed searches
	var stopwords = {
		'kirke':true,
		'gård':true,
		'øy':true,
		'land':true,
		'grend':true,
		'bygd':true,
		'tettsted':true,
		'fylke':true,
		'kommune':true,
		'landskap':true,
		'gamle':true,
		'nye':true,
		'og':true,
		'i':true
	};
	var portletLink = mw.util.addPortletLink(
		"p-query",
		"#",
		"Kulturminnesøk",
		"t-kulturminne-search",
		"Kulturminnesøk, en tjeneste fra Riksantikvaren",
		null,
		null
	);
	$('#p-query').css({display:'block'});
	$( portletLink ).click( function ( e ) {
		e.preventDefault();
		var selection = window.getSelection().toString();
		selection = selection ? selection : '';
		selection = selection
			.replace(/[^-\wæøåáčđŋšŧž]/gi,' ')
			.replace(/^\s+|\s+$/g,'')
			.split(/\s+/);
		//mw.log('selection: ' + (typeof selection));
		selection = selection.filter2screwaround(function(elem){
			return !(elem in stopwords && stopwords[elem]);
		});
		selection = selection.map(encodeURI).join('+%26+');
		var title = mw.config.get( 'wgTitle' )
			.replace(/[^-\wæøåáčđŋšŧž]/gi,' ')
			.replace(/^\s+|\s+$/g,'')
			.split(/\s+/);
		title = title.filter2screwaround(function(elem){
			return !(elem in stopwords && stopwords[elem]);
		});
		title = title.map(encodeURI).join('+%26+');
		window.location.href = "http://www.kulturminnesok.no/content/search"
			+ '?&searchtype=0&culture_environment=0&man_em_dating=0'
			+ '&search=' + title + ( selection ? '+%26+' + selection : '' );
	});
});
Oppdatert. Cocu (d) 5. sep. 2015 kl. 12:12 (CEST)[svar]

Det finnes litt info om metoden Array.prototype.filter(), den lokalt implementerte metoden kan fjernes når denne blir tilgjengelig.

Her ligger det an til litt fremtidig vedlikehold, vi burde muligens ha en side hvor slikt listes. — Jeblad 5. sep. 2015 kl. 13:37 (CEST)[svar]

Rydd opp i koden[rediger kilde]

Metoden som er lagt til i prototypen skaper problemer, og er ikke lengre nødvendig. — Jeblad 28. apr. 2016 kl. 00:14 (CEST)[svar]

Oppdatert script for Kulturminnesøk
// Code for gadget to build a search for «Kulturminnesøk».
// © John Erling Blad, Creative Commons by Attribution 3.0
$( function (){
	if (mw.config.get('wgNamespaceNumber') !== 0)
		return;
	// a very short stopwords list to avoid most failed searches
	var stopwords = {
		'kirke':true,
		'gård':true,
		'øy':true,
		'land':true,
		'grend':true,
		'bygd':true,
		'tettsted':true,
		'fylke':true,
		'kommune':true,
		'landskap':true,
		'gamle':true,
		'nye':true,
		'og':true,
		'i':true
	};
	var portletLink = mw.util.addPortletLink(
		"p-query",
		"#",
		"Kulturminnesøk",
		"t-kulturminne-search",
		"Kulturminnesøk, en tjeneste fra Riksantikvaren",
		null,
		null
	);
	$('#p-query').css({display:'block'});
	$( portletLink ).click( function ( e ) {
		e.preventDefault();
		var selection = window.getSelection().toString();
		selection = selection ? selection : '';
		selection = selection
			.replace(/[^-\wæøåáčđŋšŧž]/gi,' ')
			.replace(/^\s+|\s+$/g,'')
			.split(/\s+/);
		//mw.log('selection: ' + (typeof selection));
		selection = selection.filter(function(elem){
			return !(elem in stopwords && stopwords[elem]);
		});
		selection = selection.map(encodeURI).join('+%26+');
		var title = mw.config.get( 'wgTitle' )
			.replace(/[^-\wæøåáčđŋšŧž]/gi,' ')
			.replace(/^\s+|\s+$/g,'')
			.split(/\s+/);
		title = title.filter(function(elem){
			return !(elem in stopwords && stopwords[elem]);
		});
		title = title.map(encodeURI).join('+%26+');
		window.location.href = "http://www.kulturminnesok.no/content/search"
			+ '?&searchtype=0&culture_environment=0&man_em_dating=0'
			+ '&search=' + title + ( selection ? '+%26+' + selection : '' );
	});
});
Utført Cocu (d) 28. apr. 2016 kl. 09:36 (CEST)[svar]