User:Jon Harald Søby/bøyningsklasse.js

From Wikidata
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// Based on [[User:Nikki/LexemeP31Menu.js]]
(function ($, mw) {
	"use strict";

	var addstatements = {
		"P31": {
			"Q1084": {
				"Q604984": "entallsord",
				"Q138246": "flertallsord",
				"Q66364639": "ubøyelig",
			},
			"Q24905": {
				"Q70235": "uregelrett verb",
			},
		},
		"P5911": {
			"Q1084": {
				"Q97097665": "m1",
				"Q97097666": "m2",
				"Q97097667": "m3",
				"Q97097668": "f1",
				"Q97097669": "f2",
				"Q97097670": "f3",
				"Q97097671": "n1",
				"Q97097672": "n2",
				"Q97097673": "n3",
			},
			"Q24905": {
				"Q97097688": "v1",
				"Q97097689": "v2",
				"Q97097690": "v3",
				"Q97097691": "v4",
			},
			"Q34698": {
				"Q97097692": "a1",
				"Q97097693": "a2",
				"Q97097694": "a3",
				"Q97097695": "a4",
				"Q97097697": "a5",
			}
		}
	};

	function add_p31(p31, eid) {
		var mw_api = new mw.Api();
		mw_api.postWithEditToken({
			action: "wbcreateclaim",
			entity: eid,
			property: "P31",
			snaktype: "value",
			value: JSON.stringify({ "entity-type": "item", "id": p31 })
		}).done(function (data) {
			location.reload();
		}).fail(function (err) {
			alert("Failed: " + err);
		});
	}
	
	function add_p5911(p5911, eid, label) {
		var mw_api = new mw.Api();
		mw_api.postWithEditToken({
			action: "wbcreateclaim",
			entity: eid,
			property: "P5911",
			snaktype: "value",
			value: JSON.stringify({ "entity-type": "item", "id": p5911 })
		}).done(function (data) {
			$( ".bklasse-" + label ).replaceWith( $( "<b />" ).text( label ).css( "margin-right", "1em" ) );
		}).fail(function (err) {
			alert("Failed: " + err);
		});
	}

	function add_menu_item(p31, label, eid) {
		$(mw.util.addPortletLink("p-lex-p31", "#", label, "ca-p31-" + p31)).click(function (ev) {
			ev.preventDefault();
			add_p31(p31, eid);
		});
	}
	
	function add_inflection_class(p5911, label, eid) {
		$( "<a />" ).css( "margin-right", "1em" ).text( label ).addClass( "bklasse-" + label ).appendTo( "#bklasser" ).click( function(ev) {
			ev.preventDefault();
			add_p5911(p5911, eid, label);
		});
	}
	
	mw.hook("wikibase.entityPage.entityView.rendered").add(function () {
		mw.hook("wikibase.entityPage.entityLoaded").add(function(e){
			if (!e.language)
				return; // only supported on lexemes
	
			if (addstatements["P31"].hasOwnProperty(e.lexicalCategory)) {
				var list_p31 = addstatements["P31"][e.lexicalCategory];
	
				$("#right-navigation").prepend("\
					<nav id=\"p-lex-p31\" class=\"mw-portlet vector-menu-dropdown\">\
					<h3>P31</h3>\
					<div class=\"vector-menu-content\">\
					<ul></ul>\
					</div>\
					</nav>\
				");
	
				for (var qid of Object.keys(list_p31)) {
					add_menu_item(qid, list_p31[qid], e.id);
				}
			}
			
			if (addstatements["P5911"].hasOwnProperty(e.lexicalCategory)) {
				var list_p5911 = addstatements["P5911"][e.lexicalCategory];
				
				$( ".language-lexical-category-widget_lexical-category").append( $( "<span />" ).css({"margin-left": "1em", "padding-left": "1em", "border-left": "2px solid #c8ccd1"}).attr("id", "bklasser")	);
				
				for (var qid2 of Object.keys(list_p5911)) {
					add_inflection_class(qid2, list_p5911[qid2], e.id);
				}
			}
		});
	});

})(jQuery, mediaWiki);