<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mtm.uni-trier.de/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mtm.uni-trier.de/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://mtm.uni-trier.de/w/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-09-19T16:22:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mtm.uni-trier.de/w/index.php?title=MediaWiki:Common.js&amp;diff=1946&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;/* Any JavaScript here will be loaded for all users on every page load. */  /***  * This script enables users to easily change order of values in any statement.  * It adds a rearrange button to all statements with multiple values.  * After clicking the button, up/down arrows are added near each value, which  * can be used to move values up or down in the list.  * Alternatively, the statements can be dragged into the desired positions.  * Once the statements are in the ri...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mtm.uni-trier.de/w/index.php?title=MediaWiki:Common.js&amp;diff=1946&amp;oldid=prev"/>
		<updated>2025-03-06T06:31:57Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Any JavaScript here will be loaded for all users on every page load.: &lt;/span&gt;  /***  * This script enables users to easily change order of values in any statement.  * It adds a rearrange button to all statements with multiple values.  * After clicking the button, up/down arrows are added near each value, which  * can be used to move values up or down in the list.  * Alternatively, the statements can be dragged into the desired positions.  * Once the statements are in the ri...&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/***&lt;br /&gt;
 * This script enables users to easily change order of values in any statement.&lt;br /&gt;
 * It adds a rearrange button to all statements with multiple values.&lt;br /&gt;
 * After clicking the button, up/down arrows are added near each value, which&lt;br /&gt;
 * can be used to move values up or down in the list.&lt;br /&gt;
 * Alternatively, the statements can be dragged into the desired positions.&lt;br /&gt;
 * Once the statements are in the right order, clicking save submits an edit&lt;br /&gt;
 * for the changes.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
( function ( $, mw ) {&lt;br /&gt;
	// This should work only in the main and property namespaces&lt;br /&gt;
	if ( mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) !== 0 &amp;amp;&amp;amp; mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) !== 120 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var translations = require( &amp;#039;./RearrangeValues-i18n.json&amp;#039; );&lt;br /&gt;
	$.i18n().load( translations );&lt;br /&gt;
&lt;br /&gt;
	var commons_upload = &amp;#039;https://upload.wikimedia.org/wikipedia/commons/&amp;#039;;&lt;br /&gt;
	var merge_icon = commons_upload + &amp;#039;b/b0/Symbol_merge_vote.svg&amp;#039;;&lt;br /&gt;
	var up_icon = commons_upload + &amp;#039;c/ca/OOjs_UI_icon_upTriangle.svg&amp;#039;;&lt;br /&gt;
	var down_icon = commons_upload + &amp;#039;0/0c/OOjs_UI_icon_downTriangle.svg&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	// Original order of values to return to when &amp;quot;cancel&amp;quot; is pressed&lt;br /&gt;
	var statement_original_orders = {};&lt;br /&gt;
&lt;br /&gt;
	// Generate the rearrange button&lt;br /&gt;
	function ra_img( element_id ) {&lt;br /&gt;
		var img = $( &amp;#039;&amp;lt;img&amp;gt;&amp;#039; )&lt;br /&gt;
			.attr( &amp;#039;src&amp;#039;, merge_icon )&lt;br /&gt;
			.attr( &amp;#039;alt&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-button&amp;#039; ) )&lt;br /&gt;
			.attr( &amp;#039;title&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-button&amp;#039; ) );&lt;br /&gt;
		return $( &amp;#039;&amp;lt;a&amp;gt;&amp;#039; )&lt;br /&gt;
			.attr( &amp;#039;href&amp;#039;, &amp;#039;#&amp;#039; )&lt;br /&gt;
			.attr( &amp;#039;tabindex&amp;#039;, 0 )&lt;br /&gt;
			.append( img )&lt;br /&gt;
			.on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
				statement_selected( element_id );&lt;br /&gt;
				return false;&lt;br /&gt;
			} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Add rearrange buttons to all statements with multiple values&lt;br /&gt;
	$( &amp;#039;.wikibase-statementgrouplistview&amp;#039; ).children().children().each( function () {&lt;br /&gt;
		var values_elements = $( this ).find( &amp;#039;:nth-child(2) .wikibase-statementview&amp;#039; );&lt;br /&gt;
		if ( values_elements.length &amp;gt;= 2 ) {&lt;br /&gt;
			var element_id = this.id;&lt;br /&gt;
			var img_div = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;id&amp;#039;, &amp;#039;button&amp;#039; + element_id )&lt;br /&gt;
				.addClass( &amp;#039;rearrange-values&amp;#039; )&lt;br /&gt;
				.append( ra_img( element_id ) );&lt;br /&gt;
			$( this ).children().first().children().first().append( &amp;#039;&amp;lt;br&amp;gt;&amp;#039;, img_div );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	// If one of the rearrange buttons is pressed, add save/cancel buttons&lt;br /&gt;
	// and up/down arrow buttons for each value&lt;br /&gt;
	function statement_selected( statement_p ) {&lt;br /&gt;
		// Save/cancel buttons&lt;br /&gt;
		var button_save = new OO.ui.ButtonWidget( {&lt;br /&gt;
			label: mw.msg( &amp;#039;wikibase-save&amp;#039; ),&lt;br /&gt;
			icon: &amp;#039;check&amp;#039;,&lt;br /&gt;
			flags: [ &amp;#039;primary&amp;#039;, &amp;#039;progressive&amp;#039; ]&lt;br /&gt;
		} ).on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
			save( statement_p );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		var button_cancel = new OO.ui.ButtonWidget( {&lt;br /&gt;
			label: mw.msg( &amp;#039;wikibase-cancel&amp;#039; ),&lt;br /&gt;
			icon: &amp;#039;close&amp;#039;,&lt;br /&gt;
			flags: [ &amp;#039;primary&amp;#039;, &amp;#039;destructive&amp;#039; ]&lt;br /&gt;
		} ).on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
			cancel( statement_p );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		$( &amp;#039;#button&amp;#039; + statement_p ).empty().append( button_save.$element, button_cancel.$element );&lt;br /&gt;
&lt;br /&gt;
		// List to store original order of values to return to if &amp;quot;cancel&amp;quot; is pressed&lt;br /&gt;
		var original_order = [];&lt;br /&gt;
&lt;br /&gt;
		// Variables needed for drag and drop&lt;br /&gt;
		var element_height;&lt;br /&gt;
		var dragged_node_id;&lt;br /&gt;
		var node_new_position;&lt;br /&gt;
		var prev_node;&lt;br /&gt;
		var next_node;&lt;br /&gt;
		var first_node;&lt;br /&gt;
		var last_node;&lt;br /&gt;
		var dragover_counter = 0;&lt;br /&gt;
		var index_of_dragged_node;&lt;br /&gt;
&lt;br /&gt;
		// Iterate over each value&lt;br /&gt;
		$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; :nth-child(2) .wikibase-statementview&amp;#039; ).each( function () {&lt;br /&gt;
			// Remove dollar sign from IDs because it&amp;#039;s a special character in jquery&lt;br /&gt;
			var value_id = this.id.replace( &amp;#039;$&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
			$( this ).attr( &amp;#039;id&amp;#039;, value_id );&lt;br /&gt;
&lt;br /&gt;
			// Add the current ID to the list of original values&lt;br /&gt;
			original_order.push( value_id );&lt;br /&gt;
&lt;br /&gt;
			// Add up/down buttons to the current value&lt;br /&gt;
			var img_up = $( &amp;#039;&amp;lt;img&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;src&amp;#039;, up_icon )&lt;br /&gt;
				.attr( &amp;#039;alt&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-move-up&amp;#039; ) )&lt;br /&gt;
				.attr( &amp;#039;title&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-move-up&amp;#039; ) );&lt;br /&gt;
			var arrow_up = $( &amp;#039;&amp;lt;a&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;href&amp;#039;, &amp;#039;#&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;tabindex&amp;#039;, 0 )&lt;br /&gt;
				.append( img_up )&lt;br /&gt;
				.on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
					move_value_up( value_id );&lt;br /&gt;
					return false;&lt;br /&gt;
				} );&lt;br /&gt;
			var img_down = $( &amp;#039;&amp;lt;img&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;src&amp;#039;, down_icon )&lt;br /&gt;
				.attr( &amp;#039;alt&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-move-down&amp;#039; ) )&lt;br /&gt;
				.attr( &amp;#039;title&amp;#039;, $.i18n( &amp;#039;gadget-rearrangevalues-move-down&amp;#039; ) );&lt;br /&gt;
			var arrow_down = $( &amp;#039;&amp;lt;a&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;href&amp;#039;, &amp;#039;#&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;tabindex&amp;#039;, 0 )&lt;br /&gt;
				.append( img_down )&lt;br /&gt;
				.on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
					move_value_down( value_id );&lt;br /&gt;
					return false;&lt;br /&gt;
				} );&lt;br /&gt;
			var div_arrows = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; )&lt;br /&gt;
				.append( arrow_up, arrow_down )&lt;br /&gt;
				.addClass( &amp;#039;move_arrows_block&amp;#039; );&lt;br /&gt;
			$( this ).find( &amp;#039;.wikibase-edittoolbar-container&amp;#039; ).append( div_arrows );&lt;br /&gt;
&lt;br /&gt;
			// Make values draggable&lt;br /&gt;
			$( this ).attr( &amp;#039;draggable&amp;#039;, &amp;#039;true&amp;#039; ).addClass( &amp;#039;draggable&amp;#039; );&lt;br /&gt;
			$( this ).on( &amp;#039;dragstart&amp;#039;, function ( event ) {&lt;br /&gt;
				dragged_node_id = event.target.id;&lt;br /&gt;
				if ( !dragged_node_id ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				element_height = document.getElementById( dragged_node_id ).offsetHeight;&lt;br /&gt;
				setTimeout( function () {&lt;br /&gt;
					$( &amp;#039;#&amp;#039; + dragged_node_id ).css( &amp;#039;display&amp;#039;, &amp;#039;none&amp;#039; );&lt;br /&gt;
				}, 0 );&lt;br /&gt;
			} );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		// Add the original order of this statement to the list of original orders of all statements&lt;br /&gt;
		statement_original_orders[ statement_p ] = original_order;&lt;br /&gt;
&lt;br /&gt;
		// What to do when an element is being dragged&lt;br /&gt;
		$( &amp;#039;body&amp;#039; ).on( &amp;#039;dragover&amp;#039;, function ( event ) {&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
			// Get the positions of all nodes&lt;br /&gt;
			var nodes_positions = [];&lt;br /&gt;
			$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; :nth-child(2) .wikibase-statementview&amp;#039; ).each( function ( index ) {&lt;br /&gt;
				if ( this.id === dragged_node_id ) {&lt;br /&gt;
					index_of_dragged_node = index;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				var element_id = this.id;&lt;br /&gt;
				var element = document.getElementById( element_id );&lt;br /&gt;
				if ( !element ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				var node_position = element.getBoundingClientRect();&lt;br /&gt;
				nodes_positions.push( {&lt;br /&gt;
					id: element_id,&lt;br /&gt;
					y: ( node_position.top + node_position.bottom ) / 2&lt;br /&gt;
				} );&lt;br /&gt;
				if ( dragover_counter === 0 &amp;amp;&amp;amp; index &amp;gt; index_of_dragged_node ) {&lt;br /&gt;
					nodes_positions[ nodes_positions.length - 1 ].y += element_height;&lt;br /&gt;
				}&lt;br /&gt;
				$( this ).css( &amp;#039;marginTop&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
				$( this ).css( &amp;#039;marginBottom&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Get the position of the node currently being dragged&lt;br /&gt;
			node_new_position = 0;&lt;br /&gt;
			first_node = nodes_positions[ 0 ].id;&lt;br /&gt;
			last_node = nodes_positions[ nodes_positions.length - 1 ].id;&lt;br /&gt;
			for ( var i = 0; i &amp;lt; nodes_positions.length; i++ ) {&lt;br /&gt;
				if ( nodes_positions[ i ].y &amp;lt; event.clientY ) {&lt;br /&gt;
					node_new_position = i + 1;&lt;br /&gt;
					prev_node = nodes_positions[ i ].id;&lt;br /&gt;
					next_node = ( i + 1 &amp;lt; nodes_positions.length ) ? nodes_positions[ i + 1 ].id : &amp;#039;&amp;#039;;&lt;br /&gt;
				} else {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Create space for the node currently being dragged&lt;br /&gt;
			if ( node_new_position === 0 ) {&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + first_node ).css( &amp;#039;marginTop&amp;#039;, element_height + &amp;#039;px&amp;#039; );&lt;br /&gt;
			} else if ( node_new_position === nodes_positions.length ) {&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + last_node ).css( &amp;#039;marginBottom&amp;#039;, element_height + &amp;#039;px&amp;#039; );&lt;br /&gt;
			} else {&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + prev_node ).css( &amp;#039;marginBottom&amp;#039;, element_height / 2 + &amp;#039;px&amp;#039; );&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + next_node ).css( &amp;#039;marginTop&amp;#039;, element_height / 2 + &amp;#039;px&amp;#039; );&lt;br /&gt;
			}&lt;br /&gt;
			dragover_counter++;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		// What to do when element is dropped&lt;br /&gt;
		$( &amp;#039;body&amp;#039; ).on( &amp;#039;drop&amp;#039;, function ( event ) {&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
			if ( node_new_position === 0 ) {&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + first_node ).before( $( &amp;#039;#&amp;#039; + dragged_node_id ) );&lt;br /&gt;
			} else {&lt;br /&gt;
				$( &amp;#039;#&amp;#039; + prev_node ).after( $( &amp;#039;#&amp;#039; + dragged_node_id ) );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		// What to do when drag ends (whether by drop or by failing the drag)&lt;br /&gt;
		$( &amp;#039;body&amp;#039; ).on( &amp;#039;dragend&amp;#039;, function ( event ) {&lt;br /&gt;
			$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; :nth-child(2) .wikibase-statementview&amp;#039; ).each( function () {&lt;br /&gt;
				$( this ).css( &amp;#039;marginTop&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
				$( this ).css( &amp;#039;marginBottom&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			$( &amp;#039;#&amp;#039; + dragged_node_id ).css( &amp;#039;display&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
			dragover_counter = 0;&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Move value one position up&lt;br /&gt;
	function move_value_up( value_id ) {&lt;br /&gt;
		var previous_id = $( &amp;#039;#&amp;#039; + value_id ).prev().attr( &amp;#039;id&amp;#039; );&lt;br /&gt;
		if ( !previous_id ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		$( &amp;#039;#&amp;#039; + previous_id ).before( $( &amp;#039;#&amp;#039; + value_id ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Move value one position down&lt;br /&gt;
	function move_value_down( value_id ) {&lt;br /&gt;
		var previous_id = $( &amp;#039;#&amp;#039; + value_id ).next().attr( &amp;#039;id&amp;#039; );&lt;br /&gt;
		if ( !previous_id ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		$( &amp;#039;#&amp;#039; + previous_id ).after( $( &amp;#039;#&amp;#039; + value_id ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Run after saving or cancelling&lt;br /&gt;
	function statement_exited( statement_p ) {&lt;br /&gt;
		// Remove save/cancel buttons, re-add the rearrange button&lt;br /&gt;
		$( &amp;#039;#button&amp;#039; + statement_p ).empty().append( ra_img( statement_p ) );&lt;br /&gt;
&lt;br /&gt;
		// Remove up/down buttons&lt;br /&gt;
		$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; .move_arrows_block&amp;#039; ).remove();&lt;br /&gt;
&lt;br /&gt;
		// Make values no longer draggable&lt;br /&gt;
		$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; :nth-child(2) .wikibase-statementview&amp;#039; ).each( function () {&lt;br /&gt;
			$( this ).attr( &amp;#039;draggable&amp;#039;, &amp;#039;false&amp;#039; ).removeClass( &amp;#039;draggable&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Run when the cancel button is pressed&lt;br /&gt;
	function cancel( statement_p ) {&lt;br /&gt;
		// If any value was deleted, it should be removed from the original order&lt;br /&gt;
		for ( var i = 0; i &amp;lt; statement_original_orders[ statement_p ].length; i++ ) {&lt;br /&gt;
			if ( $( &amp;#039;#&amp;#039; + statement_original_orders[ statement_p ][ i ] ).length === 0 ) {&lt;br /&gt;
				statement_original_orders[ statement_p ].splice( i, 1 );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// Put values in the order they were before clicking rearrange-buttons&lt;br /&gt;
		for ( var j = 0; j &amp;lt; statement_original_orders[ statement_p ].length - 1; j++ ) {&lt;br /&gt;
			$( &amp;#039;#&amp;#039; + $( &amp;#039;#&amp;#039; + statement_p ).children().eq( 1 ).find( &amp;#039;.wikibase-statementview&amp;#039; ).eq( j ).attr( &amp;#039;id&amp;#039; ) )&lt;br /&gt;
				.before( $( &amp;#039;#&amp;#039; + statement_original_orders[ statement_p ][ j ] ) );&lt;br /&gt;
		}&lt;br /&gt;
		// Replace &amp;quot;save&amp;quot; and &amp;quot;cancel&amp;quot; buttons with rearrange-button, remove arrow buttons&lt;br /&gt;
		statement_exited( statement_p );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Run when the save button is pressed&lt;br /&gt;
	function save( statement_p ) {&lt;br /&gt;
		// Get JSON for values (claims)&lt;br /&gt;
		var claims;&lt;br /&gt;
		var api = new mw.Api();&lt;br /&gt;
		api.post( {&lt;br /&gt;
			action: &amp;#039;wbgetentities&amp;#039;,&lt;br /&gt;
			ids: mw.config.get( &amp;#039;wgTitle&amp;#039; ),&lt;br /&gt;
		} ).done( function ( data ) {&lt;br /&gt;
			claims = data.entities[ mw.config.get( &amp;#039;wgTitle&amp;#039; ) ].claims[ statement_p ];&lt;br /&gt;
			var i;&lt;br /&gt;
&lt;br /&gt;
			// Check if the order changed at all&lt;br /&gt;
			// For this, first get a list of values as they are now&lt;br /&gt;
			var actual_claims = [];&lt;br /&gt;
			var id;&lt;br /&gt;
			$( &amp;#039;#&amp;#039; + statement_p + &amp;#039; :nth-child(2) .wikibase-statementview&amp;#039; ).each( function () {&lt;br /&gt;
				id = this.id;&lt;br /&gt;
				// If it is a value which was just added&lt;br /&gt;
				if ( id === &amp;#039;new&amp;#039; ) {&lt;br /&gt;
					id = $( this ).attr( &amp;#039;class&amp;#039; );&lt;br /&gt;
					try {&lt;br /&gt;
						id = id.match( /wikibase-statement-([QPq].+)$/ )[ 1 ].replace( &amp;#039;$&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
					} catch ( e ) {&lt;br /&gt;
						// No match&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				actual_claims.push( id );&lt;br /&gt;
			} );&lt;br /&gt;
			// Then compare this list with the list of values in original order&lt;br /&gt;
			var same = true;&lt;br /&gt;
			for ( i = 0; i &amp;lt; claims.length; i++ ) {&lt;br /&gt;
				if ( claims[ i ].id.replace( &amp;#039;$&amp;#039;, &amp;#039;&amp;#039; ) !== actual_claims[ i ] ) {&lt;br /&gt;
					same = false;&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// If the order did not change, no need to make an edit&lt;br /&gt;
			if ( same ) {&lt;br /&gt;
				mw.notify( $.i18n( &amp;#039;gadget-rearrangevalues-notify-no-changes&amp;#039; ), { type: &amp;#039;info&amp;#039; } );&lt;br /&gt;
				statement_exited( statement_p );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Remove values in the old order&lt;br /&gt;
			var remove_claims = [];&lt;br /&gt;
			for ( i = 0; i &amp;lt; claims.length; i++ ) {&lt;br /&gt;
				remove_claims.push( &amp;#039;{&amp;quot;id&amp;quot;:&amp;quot;&amp;#039; + claims[ i ].id + &amp;#039;&amp;quot;,&amp;quot;remove&amp;quot;:&amp;quot;&amp;quot;}&amp;#039; );&lt;br /&gt;
			}&lt;br /&gt;
			remove_claims = remove_claims.join( &amp;#039;,&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			// Put values in the new order&lt;br /&gt;
			var indexed_claims = {};&lt;br /&gt;
			for ( i = 0; i &amp;lt; claims.length; i++ ) {&lt;br /&gt;
				indexed_claims[ ( claims[ i ].id ).replace( &amp;#039;$&amp;#039;, &amp;#039;&amp;#039; ) ] = claims[ i ];&lt;br /&gt;
			}&lt;br /&gt;
			var add_claims = [];&lt;br /&gt;
			for ( i = 0; i &amp;lt; actual_claims.length; i++ ) {&lt;br /&gt;
				add_claims.push( JSON.stringify( indexed_claims[ actual_claims[ i ] ] ) );&lt;br /&gt;
			}&lt;br /&gt;
			add_claims = add_claims.join( &amp;#039;,&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			// Save the edit&lt;br /&gt;
			api.postWithEditToken( {&lt;br /&gt;
				action: &amp;#039;wbeditentity&amp;#039;,&lt;br /&gt;
				assertuser: mw.config.get( &amp;#039;wgUserName&amp;#039; ),&lt;br /&gt;
				id: mw.config.get( &amp;#039;wgTitle&amp;#039; ),&lt;br /&gt;
				summary: &amp;#039;Changing order of values for [[Property:&amp;#039; +&lt;br /&gt;
					statement_p + &amp;#039;|&amp;#039; + statement_p + &amp;#039;]]&amp;#039;,&lt;br /&gt;
				tags: &amp;#039;gadget-rearrangevalues&amp;#039;,&lt;br /&gt;
				data: &amp;#039;{&amp;quot;claims&amp;quot;:[&amp;#039; + remove_claims + &amp;#039;,&amp;#039; + add_claims + &amp;#039;]}&amp;#039;&lt;br /&gt;
			} ).done( function (data) {&lt;br /&gt;
				if ( data.success === 1 ) {&lt;br /&gt;
					mw.notify( $.i18n( &amp;#039;gadget-rearrangevalues-notify-success&amp;#039;, statement_p ), { type: &amp;#039;success&amp;#039; } );&lt;br /&gt;
					statement_exited( statement_p );&lt;br /&gt;
				} else {&lt;br /&gt;
					mw.notify( $.i18n( &amp;#039;gadget-rearrangevalues-notify-failed&amp;#039; ), { type: &amp;#039;error&amp;#039; } );&lt;br /&gt;
				}&lt;br /&gt;
			} ).fail( function () {&lt;br /&gt;
				mw.notify( $.i18n( &amp;#039;gadget-rearrangevalues-notify-failed&amp;#039; ), { type: &amp;#039;error&amp;#039; } );&lt;br /&gt;
			} );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
}( jQuery, mediaWiki ) );&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>