Henning Snater has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/180438

Change subject: Renamed fingerprintview widgets
......................................................................

Renamed fingerprintview widgets

fingerprintview widgets were named incorrectly. As "Fingerprint" is the 
aggregation of labels,
descriptions and aliases in all languages, fingerprintview should have been 
what was
labeled fingerprintgroupview. While there is no fictitious term for the 
aggregation of label,
description and aliases of a single language and the term "Fingerprint" does 
not pursue a
solid concept, the UI components have been renamed in a more obvious fashion.
"entitytermsview" aggregates all term related objects of an entity. 
(Fingerprint is actually
an aggregation of wikibase.datamodel.Term(Map) and 
wikibase.datamodel.MultiTerm(Map) objects.)
This change advances the effort of renaming/removing the term "Fingerprint".
->75655

Change-Id: I084b6a11f8ddb7930b145e7852b7a5e66daa0a32
---
M lib/resources/Resources.php
R lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.js
R 
lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
A lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js
M lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
D lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js
M lib/resources/jquery.wikibase/resources.php
A 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguage.css
A 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
A 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css
D 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintgroupview.css
D 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintlistview.css
D 
lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintview.css
A 
lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.tests.js
A 
lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
A lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsview.tests.js
D lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintgroupview.tests.js
D lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintlistview.tests.js
D lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintview.tests.js
M lib/tests/qunit/jquery.wikibase/resources.php
M repo/includes/View/TermBoxView.php
M repo/resources/templates.php
M repo/resources/wikibase.ui.entityViewInit.js
23 files changed, 1,226 insertions(+), 1,205 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/38/180438/1

diff --git a/lib/resources/Resources.php b/lib/resources/Resources.php
index fd3e2ec..610ef89 100644
--- a/lib/resources/Resources.php
+++ b/lib/resources/Resources.php
@@ -34,9 +34,9 @@
                                
'jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css',
                                
'jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css',
                                
'jquery.wikibase/themes/default/jquery.wikibase.entityview.css',
-                               
'jquery.wikibase/themes/default/jquery.wikibase.fingerprintgroupview.css',
-                               
'jquery.wikibase/themes/default/jquery.wikibase.fingerprintlistview.css',
-                               
'jquery.wikibase/themes/default/jquery.wikibase.fingerprintview.css',
+                               
'jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css',
+                               
'jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css',
+                               
'jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguage.css',
                                
'jquery.wikibase/themes/default/jquery.wikibase.labelview.css',
                                
'jquery.wikibase/themes/default/jquery.wikibase.sitelinkgrouplistview.css',
                                
'jquery.wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css',
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.js
similarity index 94%
rename from lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js
rename to 
lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.js
index 889bb40..435c96c 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.js
@@ -47,9 +47,9 @@
  *        - {jQuery.Event}
  *        - {Error|null}
  */
-$.widget( 'wikibase.fingerprintview', PARENT, {
+$.widget( 'wikibase.entitytermsforlanguage', PARENT, {
        options: {
-               template: 'wikibase-fingerprintview',
+               template: 'wikibase-entitytermsforlanguage',
                templateParams: [
                        function() {
                                return this.options.value.language;
@@ -69,10 +69,10 @@
                        '' // aliases
                ],
                templateShortCuts: {
-                       $language: '.wikibase-fingerprintview-language',
-                       $label: '.wikibase-fingerprintview-label',
-                       $description : '.wikibase-fingerprintview-description',
-                       $aliases : '.wikibase-fingerprintview-aliases'
+                       $language: '.wikibase-entitytermsforlanguage-language',
+                       $label: '.wikibase-entitytermsforlanguage-label',
+                       $description : 
'.wikibase-entitytermsforlanguage-description',
+                       $aliases : '.wikibase-entitytermsforlanguage-aliases'
                },
                value: null,
                helpMessage: mw.msg( 
'wikibase-fingerprintview-input-help-message' ),
@@ -277,16 +277,16 @@
                        $queue.queue( 'stopediting', function( next ) {
                                widget.element
                                .one(
-                                       widget.widgetEventPrefix + 
'afterstopediting.fingerprintviewstopediting',
+                                       widget.widgetEventPrefix + 
'afterstopediting.entitytermsforlanguagestopediting',
                                        function( event ) {
-                                               widget.element.off( 
'.fingerprintviewstopediting' );
+                                               widget.element.off( 
'.entitytermsforlanguagestopediting' );
                                                setTimeout( next, 0 );
                                        }
                                )
                                .one(
-                                       widget.widgetEventPrefix + 
'toggleerror.fingerprintviewstopediting',
+                                       widget.widgetEventPrefix + 
'toggleerror.entitytermsforlanguagestopediting',
                                        function( event ) {
-                                               widget.element.off( 
'.fingerprintviewstopediting' );
+                                               widget.element.off( 
'.entitytermsforlanguagestopediting' );
                                                $queue.clearQueue();
                                                self._resetEditMode();
                                        }
diff --git 
a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
similarity index 83%
rename from lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js
rename to 
lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
index 842162f..d713f3e 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js
+++ 
b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
@@ -8,7 +8,7 @@
        var PARENT = $.ui.TemplatedWidget;
 
 /**
- * Displays multiple fingerprints (see jQuery.wikibase.fingerprintview).
+ * Displays multiple fingerprints (see jQuery.wikibase.entitytermsforlanguage).
  * @since 0.5
  * @extends jQuery.ui.TemplatedWidget
  *
@@ -46,9 +46,9 @@
  *        - {jQuery.Event}
  *        - {Error|null}
  */
-$.widget( 'wikibase.fingerprintlistview', PARENT, {
+$.widget( 'wikibase.entitytermsforlanguagelistview', PARENT, {
        options: {
-               template: 'wikibase-fingerprintlistview',
+               template: 'wikibase-entitytermsforlanguagelistview',
                templateParams: [
                        '' // tbodys
                ],
@@ -79,7 +79,7 @@
 
                this._createListView();
 
-               this.element.addClass( 'wikibase-fingerprintlistview' );
+               this.element.addClass( 
'wikibase-entitytermsforlanguagelistview' );
        },
 
        /**
@@ -93,16 +93,16 @@
                        listview.destroy();
                }
 
-               this.element.removeClass( 'wikibase-fingerprintlistview' );
+               this.element.removeClass( 
'wikibase-entitytermsforlanguagelistview' );
                PARENT.prototype.destroy.call( this );
        },
 
        /**
-        * Creates the listview widget managing the fingerprintview widgets
+        * Creates the listview widget managing the entitytermsforlanguage 
widgets
         */
        _createListView: function() {
                var self = this,
-                       listItemWidget = $.wikibase.fingerprintview,
+                       listItemWidget = $.wikibase.entitytermsforlanguage,
                        prefix = listItemWidget.prototype.widgetEventPrefix;
 
                // Fully encapsulate child widgets by suppressing their events:
@@ -138,7 +138,7 @@
                                                entityId: self.options.entityId,
                                                entityChangersFactory: 
self.options.entityChangersFactory,
                                                helpMessage: mw.msg(
-                                                       
'wikibase-fingerprintview-input-help-message',
+                                                       
'wikibase-entitytermsforlanguage-input-help-message',
                                                        
wb.getLanguageNameByCode( value.language )
                                                )
                                        };
@@ -174,8 +174,8 @@
                        currentValue = [];
 
                listview.items().each( function() {
-                       var fingerprintview = lia.liInstance( $( this ) );
-                       currentValue.push( fingerprintview.value() );
+                       var entitytermsforlanguage = lia.liInstance( $( this ) 
);
+                       currentValue.push( entitytermsforlanguage.value() );
                } );
 
                if( currentValue.length !== this.options.value.length ) {
@@ -209,8 +209,8 @@
                        lia = listview.listItemAdapter();
 
                listview.items().each( function() {
-                       var fingerprintview = lia.liInstance( $( this ) );
-                       fingerprintview.startEditing();
+                       var entitytermsforlanguage = lia.liInstance( $( this ) 
);
+                       entitytermsforlanguage.startEditing();
                } );
 
                this._trigger( 'afterstartediting' );
@@ -238,39 +238,40 @@
                // TODO: This widget should not need to queue the requests of 
its encapsulated widgets.
                // However, the back-end produces edit conflicts when issuing 
multiple requests at once.
                // Remove queueing as soon as the back-end is fixed; see bug 
#72020.
-               var $queue = $( {} );
+               var $queue = $( {} ),
+                       eventNamespace = 
'entitytermsforlanguagelistviewstopediting';
 
                /**
                 * @param {jQuery} $queue
-                * @param {jQuery.wikibase.fingerprintview} fingerprintview
+                * @param {jQuery.wikibase.entitytermsforlanguage} 
entitytermsforlanguage
                 * @param {boolean} dropValue
                 */
-               function addStopEditToQueue( $queue, fingerprintview, dropValue 
) {
+               function addStopEditToQueue( $queue, entitytermsforlanguage, 
dropValue ) {
                        $queue.queue( 'stopediting', function( next ) {
-                               fingerprintview.element
-                               .one( 
'fingerprintviewafterstopediting.fingerprintlistviewstopediting',
+                               entitytermsforlanguage.element
+                               .one( 'entitytermsforlanguageafterstopediting.' 
+ eventNamespace,
                                        function( event ) {
-                                               fingerprintview.element.off( 
'.fingerprintlistviewstopediting' );
+                                               
entitytermsforlanguage.element.off( '.' + eventNamespace );
                                                setTimeout( next, 0 );
                                        }
                                )
-                               .one( 
'fingerprintviewtoggleerror.fingerprintlistviewstopediting',
+                               .one( 'entitytermsforlanguagetoggleerror.' + 
eventNamespace,
                                        function( event ) {
-                                               fingerprintview.element.off( 
'.fingerprintlistviewstopediting' );
+                                               
entitytermsforlanguage.element.off( '.' + eventNamespace );
                                                $queue.clearQueue();
                                                self._resetEditMode();
                                        }
                                );
-                               fingerprintview.stopEditing( dropValue );
+                               entitytermsforlanguage.stopEditing( dropValue );
                        } );
                }
 
                listview.items().each( function() {
-                       var fingerprintview = lia.liInstance( $( this ) );
+                       var entitytermsforlanguage = lia.liInstance( $( this ) 
);
                        addStopEditToQueue(
                                $queue,
-                               fingerprintview,
-                               dropValue || fingerprintview.isInitialValue()
+                               entitytermsforlanguage,
+                               dropValue || 
entitytermsforlanguage.isInitialValue()
                        );
                } );
 
@@ -364,8 +365,8 @@
                value = [];
 
                listview.items().each( function() {
-                       var fingerprintview = lia.liInstance( $( this ) );
-                       value.push( fingerprintview.value() );
+                       var entitytermsforlanguage = lia.liInstance( $( this ) 
);
+                       value.push( entitytermsforlanguage.value() );
                } );
 
                return value;
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js
new file mode 100644
index 0000000..90c1add
--- /dev/null
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js
@@ -0,0 +1,371 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+( function( mw, $ ) {
+       'use strict';
+
+       var PARENT = $.ui.TemplatedWidget;
+
+/**
+ * Encapsulates a entitytermsforlanguagelistview widget.
+ * @since 0.5
+ * @extends jQuery.ui.TemplatedWidget
+ *
+ * @option {Object[]} value
+ *         Object representing the widget's value.
+ *         Structure: [
+ *           {
+ *             language: <{string]>,
+ *             label: <{wikibase.datamodel.Term}>,
+ *             description: <{wikibase.datamodel.Term}>
+ *             aliases: <{wikibase.datamodel.MultiTerm}>
+ *           }[, ...]
+ *         ]
+ *
+ * @option {string} entityId
+ *
+ * @option {wikibase.entityChangers.EntityChangersFactory} 
entityChangersFactory
+ *
+ * @option {string} [helpMessage]
+ *                  Default: 'Edit label, description and aliases per 
language.'
+ *
+ * @event change
+ *        - {jQuery.Event}
+ *
+ * @event afterstartediting
+ *       - {jQuery.Event}
+ *
+ * @event stopediting
+ *        - {jQuery.Event}
+ *        - {boolean} Whether to drop the value.
+ *        - {Function} Callback function.
+ *
+ * @event afterstopediting
+ *        - {jQuery.Event}
+ *        - {boolean} Whether to drop the value.
+ *
+ * @event toggleerror
+ *        - {jQuery.Event}
+ *        - {Error|null}
+ */
+$.widget( 'wikibase.entitytermsview', PARENT, {
+       options: {
+               template: 'wikibase-entitytermsview',
+               templateParams: [
+                       function() {
+                               return mw.msg( 'wikibase-terms' );
+                       },
+                       '', // entitytermsforlanguagelistview
+                       '' // edit section
+               ],
+               templateShortCuts: {
+                       $h: 'h2'
+               },
+               value: [],
+               entityId: null,
+               entityChangersFactory: null,
+               helpMessage: 'Edit label, description and aliases per language.'
+       },
+
+       /**
+        * @type {boolean}
+        */
+       _isInEditMode: false,
+
+       /**
+        * @type {jQuery}
+        */
+       $entitytermsforlanguagelistview: null,
+
+       /**
+        * @see jQuery.ui.TemplatedWidget._create
+        */
+       _create: function() {
+               if(
+                       !$.isArray( this.options.value )
+                       || !this.options.entityId
+                       || !this.options.entityChangersFactory
+               ) {
+                       throw new Error( 'Required option(s) missing' );
+               }
+
+               PARENT.prototype._create.call( this );
+
+               this.element.addClass( 'wikibase-entitytermsview' );
+
+               this.$entitytermsforlanguagelistview
+                       = this.element.find( 
'.wikibase-entitytermsforlanguagelistview' );
+
+               if( !this.$entitytermsforlanguagelistview.length ) {
+                       this.$entitytermsforlanguagelistview = $( '<table/>' 
).appendTo( this.element );
+               }
+
+               this._createEntitytermsforlanguagelistview();
+       },
+
+       /**
+        * @see jQuery.ui.TemplatedWidget.destroy
+        */
+       destroy: function() {
+               // When destroying a widget not initialized properly, 
entitytermsforlanguagelistview will
+               // not have been created.
+               if( this.$entitytermsforlanguagelistview ) {
+                       var entitytermsforlanguagelistview = 
this._getEntitytermsforlanguagelistview();
+
+                       if( entitytermsforlanguagelistview ) {
+                               entitytermsforlanguagelistview.destroy();
+                       }
+
+                       this.$entitytermsforlanguagelistview.remove();
+               }
+
+               this.element.removeClass( 'wikibase-entitytermsview' );
+               PARENT.prototype.destroy.call( this );
+       },
+
+       /**
+        * @return {jQuery.wikibase.entitytermsforlanguagelistview}
+        * @private
+        */
+       _getEntitytermsforlanguagelistview: function() {
+               return this.$entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+       },
+
+       /**
+        * Creates and initializes the entitytermsforlanguagelistview widget.
+        */
+       _createEntitytermsforlanguagelistview: function() {
+               var self = this,
+                       prefix = 
$.wikibase.entitytermsforlanguagelistview.prototype.widgetEventPrefix;
+
+               this.$entitytermsforlanguagelistview
+               .on( prefix + 'change.' + this.widgetName, function( event ) {
+                       event.stopPropagation();
+                       self._trigger( 'change' );
+               } )
+               .on( prefix + 'toggleerror.' + this.widgetName, function( 
event, error ) {
+                       event.stopPropagation();
+                       self.setError( error );
+               } )
+               .on(
+                       [
+                               prefix + 'create.' + this.widgetName,
+                               prefix + 'afterstartediting.' + this.widgetName,
+                               prefix + 'stopediting.' + this.widgetName,
+                               prefix + 'afterstopediting.' + this.widgetName,
+                               prefix + 'disable.' + this.widgetName
+                       ].join( ' ' ),
+                       function( event ) {
+                               event.stopPropagation();
+                       }
+               )
+               .entitytermsforlanguagelistview( {
+                       value: this.options.value,
+                       entityId: this.options.entityId,
+                       entityChangersFactory: 
this.options.entityChangersFactory
+               } );
+       },
+
+       /**
+        * @return {boolean}
+        */
+       isValid: function() {
+               return this._getEntitytermsforlanguagelistview().isValid();
+       },
+
+       /**
+        * @return {boolean}
+        */
+       isInitialValue: function() {
+               return 
this._getEntitytermsforlanguagelistview().isInitialValue();
+       },
+
+       startEditing: function() {
+               if( this._isInEditMode ) {
+                       return;
+               }
+
+               this._isInEditMode = true;
+               this.element.addClass( 'wb-edit' );
+
+               this._getEntitytermsforlanguagelistview().startEditing();
+
+               this._trigger( 'afterstartediting' );
+       },
+
+       /**
+        * @param {boolean} [dropValue]
+        */
+       stopEditing: function( dropValue ) {
+               var self = this;
+
+               if( !this._isInEditMode || ( !this.isValid() || 
this.isInitialValue() ) && !dropValue ) {
+                       return;
+               }
+
+               dropValue = !!dropValue;
+
+               this._trigger( 'stopediting', null, [dropValue] );
+
+               this.disable();
+
+               this.$entitytermsforlanguagelistview
+               .one(
+                       
'entitytermsforlanguagelistviewafterstopediting.entitytermsviewstopediting',
+                       function( event, dropValue ) {
+                               self._afterStopEditing( dropValue );
+                               self.$entitytermsforlanguagelistview.off( 
'.entitytermsviewstopediting' );
+                       }
+               )
+               .one(
+                       
'entitytermsforlanguagelistviewtoggleerror.entitytermsviewstopediting',
+                       function( event, dropValue ) {
+                               self.enable();
+                               self.$entitytermsforlanguagelistview.off( 
'.entitytermsviewstopediting' );
+                       }
+               );
+
+               this._getEntitytermsforlanguagelistview().stopEditing( 
dropValue );
+       },
+
+       /**
+        * @param {boolean} dropValue
+        */
+       _afterStopEditing: function( dropValue ) {
+               if( !dropValue ) {
+                       this.options.value = this.value();
+               }
+               this._isInEditMode = false;
+               this.enable();
+               this.element.removeClass( 'wb-edit' );
+               this._trigger( 'afterstopediting', null, [dropValue] );
+       },
+
+       cancelEditing: function() {
+               this.stopEditing( true );
+       },
+
+       /**
+        * @see jQuery.ui.TemplatedWidget.focus
+        */
+       focus: function() {
+               this._getEntitytermsforlanguagelistview().focus();
+       },
+
+       /**
+        * Applies/Removes error state.
+        *
+        * @param {Error} [error]
+        */
+       setError: function( error ) {
+               if( error ) {
+                       this.element.addClass( 'wb-error' );
+                       this._trigger( 'toggleerror', null, [error] );
+               } else {
+                       this.removeError();
+                       this._trigger( 'toggleerror' );
+               }
+       },
+
+       removeError: function() {
+               this.element.removeClass( 'wb-error' );
+               this._getEntitytermsforlanguagelistview().removeError();
+       },
+
+       /**
+        * @param {Object[]} [value]
+        * @return {Object[]|*}
+        */
+       value: function( value ) {
+               if( value !== undefined ) {
+                       return this.option( 'value', value );
+               }
+
+               return this._getEntitytermsforlanguagelistview().value();
+       },
+
+       /**
+        * @see jQuery.ui.TemplatedWidget._setOption
+        */
+       _setOption: function( key, value ) {
+               if( key === 'value' ) {
+                       throw new Error( 'Impossible to set value after 
initialization' );
+               }
+
+               var response = PARENT.prototype._setOption.apply( this, 
arguments );
+
+               if( key === 'disabled' ) {
+                       this._getEntitytermsforlanguagelistview().option( key, 
value );
+               }
+
+               return response;
+       }
+} );
+
+$.wikibase.toolbarcontroller.definition( 'edittoolbar', {
+       id: 'entitytermsview',
+       selector: ':' + $.wikibase.entitytermsview.prototype.namespace
+               + '-' + $.wikibase.entitytermsview.prototype.widgetName,
+       events: {
+               entitytermsviewcreate: function( event, toolbarcontroller ) {
+                       var $entitytermsview = $( event.target ),
+                               entitytermsview = $entitytermsview.data( 
'entitytermsview' ),
+                               $headingContainer = $entitytermsview.find(
+                                       
'.wikibase-entitytermsview-heading-container'
+                               ),
+                               $container = $headingContainer.children( 
'.wikibase-toolbar-container' );
+
+                       if( !$container.length ) {
+                               $container = $( '<div/>' ).appendTo( 
$headingContainer );
+                       }
+
+                       $entitytermsview.edittoolbar( {
+                               $container: $container,
+                               interactionWidget: entitytermsview
+                       } );
+
+                       $entitytermsview.on( 'keyup.edittoolbar', function( 
event ) {
+                               if( entitytermsview.option( 'disabled' ) ) {
+                                       return;
+                               }
+                               if( event.keyCode === $.ui.keyCode.ESCAPE ) {
+                                       entitytermsview.stopEditing( true );
+                               } else if( event.keyCode === $.ui.keyCode.ENTER 
) {
+                                       entitytermsview.stopEditing( false );
+                               }
+                       } );
+               },
+               'entitytermsviewchange entitytermsviewafterstartediting': 
function( event ) {
+                       var $entitytermsview = $( event.target ),
+                               entitytermsview = $entitytermsview.data( 
'entitytermsview' ),
+                               edittoolbar = $entitytermsview.data( 
'edittoolbar' ),
+                               btnSave = edittoolbar.getButton( 'save' ),
+                               enable = entitytermsview.isValid() && 
!entitytermsview.isInitialValue();
+
+                       btnSave[enable ? 'enable' : 'disable']();
+               },
+               entitytermsviewdisable: function( event ) {
+                       var $entitytermsview = $( event.target ),
+                               entitytermsview = $entitytermsview.data( 
'entitytermsview' ),
+                               edittoolbar = $entitytermsview.data( 
'edittoolbar' ),
+                               btnSave = edittoolbar.getButton( 'save' ),
+                               enable = entitytermsview.isValid() && 
!entitytermsview.isInitialValue();
+
+                       btnSave[enable ? 'enable' : 'disable']();
+               },
+               toolbareditgroupedit: function( event, toolbarcontroller ) {
+                       var $entitytermsview = $( event.target ),
+                               entitytermsview = $entitytermsview.data( 
'entitytermsview' );
+
+                       if( !entitytermsview ) {
+                               return;
+                       }
+
+                       entitytermsview.focus();
+               }
+       }
+} );
+
+
+}( mediaWiki, jQuery ) );
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
index 65f4b81..57942b8 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
@@ -222,7 +222,7 @@
                        return;
                }
 
-               this.$fingerprints = $( '.wikibase-fingerprintgroupview', 
this.element );
+               this.$fingerprints = $( '.wikibase-entitytermsview', 
this.element );
 
                if( !this.$fingerprints.length ) {
                        var $precedingNode = this.$toc;
@@ -242,11 +242,11 @@
                        // Scrape languages from static HTML:
                        // FIXME: Currently, this simply overrules the 
languages options.
                        self.options.languages = [];
-                       this.$fingerprints.find( '.wikibase-fingerprintview' 
).each( function() {
+                       this.$fingerprints.find( 
'.wikibase-entitytermsforlanguage' ).each( function() {
                                $.each( $( this ).attr( 'class' ).split( ' ' ), 
function() {
-                                       if( this.indexOf( 
'wikibase-fingerprintview-' ) === 0 ) {
+                                       if( this.indexOf( 
'wikibase-entitytermsforlanguage-' ) === 0 ) {
                                                self.options.languages.push(
-                                                       this.split( 
'wikibase-fingerprintview-' )[1]
+                                                       this.split( 
'wikibase-entitytermsforlanguage-' )[1]
                                                );
                                                return false;
                                        }
@@ -269,7 +269,7 @@
                        } );
                }
 
-               this.$fingerprints.fingerprintgroupview( {
+               this.$fingerprints.entitytermsview( {
                        value: value,
                        entityId: this.options.value.getId(),
                        entityChangersFactory: 
this.options.entityChangersFactory,
@@ -288,7 +288,7 @@
                        'labelviewafterstartediting.' + this.widgetName,
                        'descriptionviewafterstartediting.' + this.widgetName,
                        'aliasesviewafterstartediting.' + this.widgetName,
-                       'fingerprintgroupviewafterstartediting.' + 
this.widgetName
+                       'entitytermsviewafterstartediting.' + this.widgetName
                ].join( ' ' ),
                function( event ) {
                        self._trigger( 'afterstartediting' );
@@ -299,7 +299,7 @@
                        'labelviewafterstopediting.' + this.widgetName,
                        'descriptionviewafterstopediting.' + this.widgetName,
                        'aliasesviewafterstopediting.' + this.widgetName,
-                       'fingerprintgroupviewafterstopediting.' + 
this.widgetName
+                       'entitytermsviewafterstopediting.' + this.widgetName
                ].join( ' ' ),
                function( event, dropValue ) {
                        self._trigger( 'afterstopediting', null, [dropValue] );
@@ -329,7 +329,7 @@
                this.$description.data( 'descriptionview' )[state]();
                this.$aliases.data( 'aliasesview' )[state]();
                if( this.$fingerprints ) {
-                       this.$fingerprints.data( 'fingerprintgroupview' 
)[state]();
+                       this.$fingerprints.data( 'entitytermsview' )[state]();
                }
        },
 
diff --git 
a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js
deleted file mode 100644
index 54cc65b..0000000
--- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-( function( mw, $ ) {
-       'use strict';
-
-       var PARENT = $.ui.TemplatedWidget;
-
-/**
- * Encapsulates a fingerprintlistview widget.
- * @since 0.5
- * @extends jQuery.ui.TemplatedWidget
- *
- * @option {Object[]} value
- *         Object representing the widget's value.
- *         Structure: [
- *           {
- *             language: <{string]>,
- *             label: <{wikibase.datamodel.Term}>,
- *             description: <{wikibase.datamodel.Term}>
- *             aliases: <{wikibase.datamodel.MultiTerm}>
- *           }[, ...]
- *         ]
- *
- * @option {string} entityId
- *
- * @option {wikibase.entityChangers.EntityChangersFactory} 
entityChangersFactory
- *
- * @option {string} [helpMessage]
- *                  Default: 'Edit label, description and aliases per 
language.'
- *
- * @event change
- *        - {jQuery.Event}
- *
- * @event afterstartediting
- *       - {jQuery.Event}
- *
- * @event stopediting
- *        - {jQuery.Event}
- *        - {boolean} Whether to drop the value.
- *        - {Function} Callback function.
- *
- * @event afterstopediting
- *        - {jQuery.Event}
- *        - {boolean} Whether to drop the value.
- *
- * @event toggleerror
- *        - {jQuery.Event}
- *        - {Error|null}
- */
-$.widget( 'wikibase.fingerprintgroupview', PARENT, {
-       options: {
-               template: 'wikibase-fingerprintgroupview',
-               templateParams: [
-                       function() {
-                               return mw.msg( 'wikibase-terms' );
-                       },
-                       '', // fingerprintlistview
-                       '' // edit section
-               ],
-               templateShortCuts: {
-                       $h: 'h2'
-               },
-               value: [],
-               entityId: null,
-               entityChangersFactory: null,
-               helpMessage: 'Edit label, description and aliases per language.'
-       },
-
-       /**
-        * @type {boolean}
-        */
-       _isInEditMode: false,
-
-       /**
-        * @type {jQuery}
-        */
-       $fingerprintlistview: null,
-
-       /**
-        * @see jQuery.ui.TemplatedWidget._create
-        */
-       _create: function() {
-               if(
-                       !$.isArray( this.options.value )
-                       || !this.options.entityId
-                       || !this.options.entityChangersFactory
-               ) {
-                       throw new Error( 'Required option(s) missing' );
-               }
-
-               PARENT.prototype._create.call( this );
-
-               this.element.addClass( 'wikibase-fingerprintgroupview' );
-
-               this.$fingerprintlistview = this.element.find( 
'.wikibase-fingerprintlistview' );
-
-               if( !this.$fingerprintlistview.length ) {
-                       this.$fingerprintlistview = $( '<table/>' ).appendTo( 
this.element );
-               }
-
-               this._createFingerprintlistview();
-       },
-
-       /**
-        * @see jQuery.ui.TemplatedWidget.destroy
-        */
-       destroy: function() {
-               // When destroying a widget not initialized properly, 
fingerprintlistview will not have been
-               // created.
-               if( this.$fingerprintlistview ) {
-                       var fingerprintlistview = 
this.$fingerprintlistview.data( 'fingerprintlistview' );
-
-                       if( fingerprintlistview ) {
-                               fingerprintlistview.destroy();
-                       }
-
-                       this.$fingerprintlistview.remove();
-               }
-
-               this.element.removeClass( 'wikibase-fingerprintgroupview' );
-               PARENT.prototype.destroy.call( this );
-       },
-
-       /**
-        * Creates and initializes the fingerprintlistview widget.
-        */
-       _createFingerprintlistview: function() {
-               var self = this,
-                       prefix = 
$.wikibase.fingerprintlistview.prototype.widgetEventPrefix;
-
-               this.$fingerprintlistview
-               .on( prefix + 'change.' + this.widgetName, function( event ) {
-                       event.stopPropagation();
-                       self._trigger( 'change' );
-               } )
-               .on( prefix + 'toggleerror.' + this.widgetName, function( 
event, error ) {
-                       event.stopPropagation();
-                       self.setError( error );
-               } )
-               .on(
-                       [
-                               prefix + 'create.' + this.widgetName,
-                               prefix + 'afterstartediting.' + this.widgetName,
-                               prefix + 'stopediting.' + this.widgetName,
-                               prefix + 'afterstopediting.' + this.widgetName,
-                               prefix + 'disable.' + this.widgetName
-                       ].join( ' ' ),
-                       function( event ) {
-                               event.stopPropagation();
-                       }
-               )
-               .fingerprintlistview( {
-                       value: this.options.value,
-                       entityId: this.options.entityId,
-                       entityChangersFactory: 
this.options.entityChangersFactory
-               } );
-       },
-
-       /**
-        * @return {boolean}
-        */
-       isValid: function() {
-               return this.$fingerprintlistview.data( 'fingerprintlistview' 
).isValid();
-       },
-
-       /**
-        * @return {boolean}
-        */
-       isInitialValue: function() {
-               return this.$fingerprintlistview.data( 'fingerprintlistview' 
).isInitialValue();
-       },
-
-       startEditing: function() {
-               if( this._isInEditMode ) {
-                       return;
-               }
-
-               this._isInEditMode = true;
-               this.element.addClass( 'wb-edit' );
-
-               this.$fingerprintlistview.data( 'fingerprintlistview' 
).startEditing();
-
-               this._trigger( 'afterstartediting' );
-       },
-
-       /**
-        * @param {boolean} [dropValue]
-        */
-       stopEditing: function( dropValue ) {
-               var self = this;
-
-               if( !this._isInEditMode || ( !this.isValid() || 
this.isInitialValue() ) && !dropValue ) {
-                       return;
-               }
-
-               dropValue = !!dropValue;
-
-               this._trigger( 'stopediting', null, [dropValue] );
-
-               this.disable();
-
-               this.$fingerprintlistview
-               .one(
-                       
'fingerprintlistviewafterstopediting.fingerprintgroupviewstopediting',
-                       function( event, dropValue ) {
-                               self._afterStopEditing( dropValue );
-                               self.$fingerprintlistview.off( 
'.fingerprintgroupviewstopediting' );
-                       }
-               )
-               .one(
-                       
'fingerprintlistviewtoggleerror.fingerprintgroupviewstopediting',
-                       function( event, dropValue ) {
-                               self.enable();
-                               self.$fingerprintlistview.off( 
'.fingerprintgroupviewstopediting' );
-                       }
-               );
-
-               this.$fingerprintlistview.data( 'fingerprintlistview' 
).stopEditing( dropValue );
-       },
-
-       /**
-        * @param {boolean} dropValue
-        */
-       _afterStopEditing: function( dropValue ) {
-               if( !dropValue ) {
-                       this.options.value = this.value();
-               }
-               this._isInEditMode = false;
-               this.enable();
-               this.element.removeClass( 'wb-edit' );
-               this._trigger( 'afterstopediting', null, [dropValue] );
-       },
-
-       cancelEditing: function() {
-               this.stopEditing( true );
-       },
-
-       /**
-        * @see jQuery.ui.TemplatedWidget.focus
-        */
-       focus: function() {
-               this.$fingerprintlistview.data( 'fingerprintlistview' ).focus();
-       },
-
-       /**
-        * Applies/Removes error state.
-        *
-        * @param {Error} [error]
-        */
-       setError: function( error ) {
-               if( error ) {
-                       this.element.addClass( 'wb-error' );
-                       this._trigger( 'toggleerror', null, [error] );
-               } else {
-                       this.removeError();
-                       this._trigger( 'toggleerror' );
-               }
-       },
-
-       removeError: function() {
-               this.element.removeClass( 'wb-error' );
-               this.$fingerprintlistview.data( 'fingerprintlistview' 
).removeError();
-       },
-
-       /**
-        * @param {Object[]} [value]
-        * @return {Object[]|*}
-        */
-       value: function( value ) {
-               if( value !== undefined ) {
-                       return this.option( 'value', value );
-               }
-
-               return this.$fingerprintlistview.data( 'fingerprintlistview' 
).value();
-       },
-
-       /**
-        * @see jQuery.ui.TemplatedWidget._setOption
-        */
-       _setOption: function( key, value ) {
-               if( key === 'value' ) {
-                       throw new Error( 'Impossible to set value after 
initialization' );
-               }
-
-               var response = PARENT.prototype._setOption.apply( this, 
arguments );
-
-               if( key === 'disabled' ) {
-                       this.$fingerprintlistview.data( 'fingerprintlistview' 
).option( key, value );
-               }
-
-               return response;
-       }
-} );
-
-$.wikibase.toolbarcontroller.definition( 'edittoolbar', {
-       id: 'fingerprintgroupview',
-       selector: ':' + $.wikibase.fingerprintgroupview.prototype.namespace
-               + '-' + $.wikibase.fingerprintgroupview.prototype.widgetName,
-       events: {
-               fingerprintgroupviewcreate: function( event, toolbarcontroller 
) {
-                       var $fingerprintgroupview = $( event.target ),
-                               fingerprintgroupview = 
$fingerprintgroupview.data( 'fingerprintgroupview' ),
-                               $headingContainer = $fingerprintgroupview.find(
-                                       
'.wikibase-fingerprintgroupview-heading-container'
-                               ),
-                               $container = $headingContainer.children( 
'.wikibase-toolbar-container' );
-
-                       if( !$container.length ) {
-                               $container = $( '<div/>' ).appendTo( 
$headingContainer );
-                       }
-
-                       $fingerprintgroupview.edittoolbar( {
-                               $container: $container,
-                               interactionWidget: fingerprintgroupview
-                       } );
-
-                       $fingerprintgroupview.on( 'keyup.edittoolbar', 
function( event ) {
-                               if( fingerprintgroupview.option( 'disabled' ) ) 
{
-                                       return;
-                               }
-                               if( event.keyCode === $.ui.keyCode.ESCAPE ) {
-                                       fingerprintgroupview.stopEditing( true 
);
-                               } else if( event.keyCode === $.ui.keyCode.ENTER 
) {
-                                       fingerprintgroupview.stopEditing( false 
);
-                               }
-                       } );
-               },
-               'fingerprintgroupviewchange 
fingerprintgroupviewafterstartediting': function( event ) {
-                       var $fingerprintgroupview = $( event.target ),
-                               fingerprintgroupview = 
$fingerprintgroupview.data( 'fingerprintgroupview' ),
-                               edittoolbar = $fingerprintgroupview.data( 
'edittoolbar' ),
-                               btnSave = edittoolbar.getButton( 'save' ),
-                               enable = fingerprintgroupview.isValid() && 
!fingerprintgroupview.isInitialValue();
-
-                       btnSave[enable ? 'enable' : 'disable']();
-               },
-               fingerprintgroupviewdisable: function( event ) {
-                       var $fingerprintgroupview = $( event.target ),
-                               fingerprintgroupview = 
$fingerprintgroupview.data( 'fingerprintgroupview' ),
-                               edittoolbar = $fingerprintgroupview.data( 
'edittoolbar' ),
-                               btnSave = edittoolbar.getButton( 'save' ),
-                               enable = fingerprintgroupview.isValid() && 
!fingerprintgroupview.isInitialValue();
-
-                       btnSave[enable ? 'enable' : 'disable']();
-               },
-               toolbareditgroupedit: function( event, toolbarcontroller ) {
-                       var $fingerprintgroupview = $( event.target ),
-                               fingerprintgroupview = 
$fingerprintgroupview.data( 'fingerprintgroupview' );
-
-                       if( !fingerprintgroupview ) {
-                               return;
-                       }
-
-                       fingerprintgroupview.focus();
-               }
-       }
-} );
-
-
-}( mediaWiki, jQuery ) );
diff --git a/lib/resources/jquery.wikibase/resources.php 
b/lib/resources/jquery.wikibase/resources.php
index 485447c..569625b 100644
--- a/lib/resources/jquery.wikibase/resources.php
+++ b/lib/resources/jquery.wikibase/resources.php
@@ -169,7 +169,7 @@
                                'jquery.ui.TemplatedWidget',
                                'jquery.wikibase.aliasesview',
                                'jquery.wikibase.descriptionview',
-                               'jquery.wikibase.fingerprintgroupview',
+                               'jquery.wikibase.entitytermsview',
                                'jquery.wikibase.labelview',
                                'wikibase.datamodel.MultiTerm',
                                'wikibase.datamodel.Term',
@@ -182,32 +182,32 @@
                        ),
                ),
 
-               'jquery.wikibase.fingerprintgroupview' => $moduleTemplate + 
array(
+               'jquery.wikibase.entitytermsview' => $moduleTemplate + array(
                        'scripts' => array(
-                               'jquery.wikibase.fingerprintgroupview.js',
+                               'jquery.wikibase.entitytermsview.js',
                        ),
                        'styles' => array(
-                               
'themes/default/jquery.wikibase.fingerprintgroupview.css',
+                               
'themes/default/jquery.wikibase.entitytermsview.css',
                        ),
                        'dependencies' => array(
                                'jquery.ui.TemplatedWidget',
-                               'jquery.wikibase.fingerprintlistview',
+                               
'jquery.wikibase.entitytermsforlanguagelistview',
                        ),
                        'messages' => array(
                                'wikibase-terms',
                        ),
                ),
 
-               'jquery.wikibase.fingerprintlistview' => $moduleTemplate + 
array(
+               'jquery.wikibase.entitytermsforlanguagelistview' => 
$moduleTemplate + array(
                        'scripts' => array(
-                               'jquery.wikibase.fingerprintlistview.js',
+                               
'jquery.wikibase.entitytermsforlanguagelistview.js',
                        ),
                        'styles' => array(
-                               
'themes/default/jquery.wikibase.fingerprintlistview.css',
+                               
'themes/default/jquery.wikibase.entitytermsforlanguagelistview.css',
                        ),
                        'dependencies' => array(
                                'jquery.ui.TemplatedWidget',
-                               'jquery.wikibase.fingerprintview',
+                               'jquery.wikibase.entitytermsforlanguage',
                                'wikibase.getLanguageNameByCode',
                        ),
                        'messages' => array(
@@ -215,12 +215,12 @@
                        ),
                ),
 
-               'jquery.wikibase.fingerprintview' => $moduleTemplate + array(
+               'jquery.wikibase.entitytermsforlanguage' => $moduleTemplate + 
array(
                        'scripts' => array(
-                               'jquery.wikibase.fingerprintview.js',
+                               'jquery.wikibase.entitytermsforlanguage.js',
                        ),
                        'styles' => array(
-                               
'themes/default/jquery.wikibase.fingerprintview.css',
+                               
'themes/default/jquery.wikibase.entitytermsforlanguage.css',
                        ),
                        'dependencies' => array(
                                'jquery.ui.TemplatedWidget',
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguage.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguage.css
new file mode 100644
index 0000000..dd1952a
--- /dev/null
+++ 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguage.css
@@ -0,0 +1,106 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+.wikibase-entitytermsforlanguage-language {
+       width: 25%;
+       word-wrap: break-word;
+       padding-left: 10px;
+       border-left: 1px solid #C9C9C9;
+}
+
+.wikibase-entitytermsforlanguage-label,
+.wikibase-entitytermsforlanguage-description,
+.wikibase-entitytermsforlanguage-aliases {
+       width: 75%;
+       word-wrap: break-word;
+       padding-left: 10px;
+}
+
+.wikibase-entitytermsforlanguage tr td:first-child + td + td {
+       width: 25%;
+}
+
+.wikibase-entitytermsforlanguage td {
+       border-top: 1px solid #C9C9C9;
+}
+
+.wikibase-entitytermsforlanguage td:last-child {
+       padding-left: 10px;
+}
+
+.wikibase-entitytermsforlanguage-label {
+       padding: 10px;
+}
+
+.wikibase-entitytermsforlanguage .wikibase-entitytermsforlanguage-label input,
+.wikibase-entitytermsforlanguage .wikibase-entitytermsforlanguage-description 
input {
+       font-family: inherit;
+       width: 100%;
+}
+
+.wikibase-entitytermsforlanguage .wikibase-descriptionview 
.wikibase-descriptionview-container {
+       padding-left: 0;
+}
+
+.wikibase-entitytermsforlanguage .wikibase-descriptionview 
.wikibase-descriptionview-text {
+       line-height: 1.4;
+       padding-right: 0;
+}
+
+.wikibase-entitytermsforlanguage .wikibase-labelview,
+.wikibase-entitytermsforlanguage .wikibase-descriptionview,
+.wikibase-entitytermsforlanguage .wikibase-aliasesview {
+       display: block;
+       float: none;
+       margin-top: 0;
+       padding: 10px;
+       width: auto;
+}
+
+.wikibase-entitytermsforlanguage .wikibase-aliasesview 
.wikibase-aliasesview-container {
+       display: inline-block !important;
+       padding-left: 0;
+       padding-right: 0;
+       width: 100%;
+}
+
+.wikibase-entitytermsforlanguage.wb-edit .wikibase-aliasesview-list {
+       font-size: 84%;
+}
+
+.wikibase-entitytermsforlanguage.wb-edit .wikibase-aliasesview-list * {
+       font-size: 100%;
+}
+
+.wikibase-entitytermsforlanguage.wb-edit .wikibase-labelview,
+.wikibase-entitytermsforlanguage.wb-edit .wikibase-descriptionview,
+.wikibase-entitytermsforlanguage.wb-edit .wikibase-aliasesview {
+       padding: 9px 8px 9px 7px;
+}
+
+.wikibase-entitytermsforlanguage .wb-error {
+       background-color: #FFDFC9;
+}
+
+/* the right column of the site links table (...-toolbarparent) should be 
treated as "action" column */
+.wikibase-entitytermsforlanguage .wb-editsection {
+       width: 18em;
+       position: static; /* clear absolute positioning */
+       float: none; /* overwrite edit section's float: right */
+       padding: 0;
+       margin-left: 0; /* reset edit section's margin which is set in the 
toolbar group instead;
+                       applying margin to the edit section cell should not 
have any effect at all */
+}
+
+.wikibase-entitytermsforlanguage .wb-editsection .wikibase-toolbar {
+       width: 18em; /* additionally assign width to toolbar to enforce width 
in no-JS version */
+}
+
+.wikibase-entitytermsforlanguage .wb-editsection .wikibase-toolbar 
.wikibase-toolbar {
+       margin-left: 1px; /* even out table cell's right border */
+}
+
+.wikibase-entitytermsforlanguage .wb-editsection .wikibase-toolbar 
.wikibase-toolbar {
+       margin-left: 0; /* do not apply margin to nested toolbar groups */
+}
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
new file mode 100644
index 0000000..d4d84cb
--- /dev/null
+++ 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
@@ -0,0 +1,23 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+.wikibase-entitytermsforlanguagelistview {
+       border-bottom: 1px solid #C9C9C9;
+       border-right: 1px solid #C9C9C9;
+       border-spacing: 0;
+       clear: both;
+       width: 100%;
+}
+
+.wikibase-entitytermsforlanguagelistview tr td {
+       background: #F8F8F8;
+}
+
+.wikibase-entitytermsforlanguagelistview tbody:nth-child(even) td {
+       background: #F0F0F0;
+}
+
+.wikibase-entitytermsforlanguagelistview .wb-edit tr td {
+       background: #D6F3FF;
+}
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css
new file mode 100644
index 0000000..30e7168
--- /dev/null
+++ 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css
@@ -0,0 +1,22 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+.wikibase-entitytermsview {
+       float: left;
+       width: 100%;
+}
+
+.wikibase-entitytermsview h2 {
+       width: auto;
+}
+
+.wikibase-entitytermsview .wikibase-toolbar-container 
.wikibase-toolbar-container  {
+       position: relative;
+}
+
+.wikibase-entitytermsview .wikibase-entitytermsview-heading-container > 
.wikibase-toolbar-container {
+       float: right;
+       margin-top: 1.9em;
+       position: static;
+}
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintgroupview.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintgroupview.css
deleted file mode 100644
index ff46399..0000000
--- 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintgroupview.css
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-.wikibase-fingerprintgroupview {
-       float: left;
-       width: 100%;
-}
-
-.wikibase-fingerprintgroupview h2 {
-       width: auto;
-}
-
-.wikibase-fingerprintgroupview .wikibase-toolbar-container 
.wikibase-toolbar-container  {
-       position: relative;
-}
-
-.wikibase-fingerprintgroupview 
.wikibase-fingerprintgroupview-heading-container > .wikibase-toolbar-container {
-       float: right;
-       margin-top: 1.9em;
-       position: static;
-}
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintlistview.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintlistview.css
deleted file mode 100644
index 6689867..0000000
--- 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintlistview.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-.wikibase-fingerprintlistview {
-       border-bottom: 1px solid #C9C9C9;
-       border-right: 1px solid #C9C9C9;
-       border-spacing: 0;
-       clear: both;
-       width: 100%;
-}
-
-.wikibase-fingerprintlistview tr td {
-       background: #F8F8F8;
-}
-
-.wikibase-fingerprintlistview tbody:nth-child(even) td {
-       background: #F0F0F0;
-}
-
-.wikibase-fingerprintlistview .wb-edit tr td {
-       background: #D6F3FF;
-}
diff --git 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintview.css
 
b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintview.css
deleted file mode 100644
index 5462cde..0000000
--- 
a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.fingerprintview.css
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-.wikibase-fingerprintview-language {
-       width: 25%;
-       word-wrap: break-word;
-       padding-left: 10px;
-       border-left: 1px solid #C9C9C9;
-}
-
-.wikibase-fingerprintview-label,
-.wikibase-fingerprintview-description,
-.wikibase-fingerprintview-aliases {
-       width: 75%;
-       word-wrap: break-word;
-       padding-left: 10px;
-}
-
-.wikibase-fingerprintview tr td:first-child + td + td {
-       width: 25%;
-}
-
-.wikibase-fingerprintview td {
-       border-top: 1px solid #C9C9C9;
-}
-
-.wikibase-fingerprintview td:last-child {
-       padding-left: 10px;
-}
-
-.wikibase-fingerprintview-label {
-       padding: 10px;
-}
-
-.wikibase-fingerprintview .wikibase-fingerprintview-label input,
-.wikibase-fingerprintview .wikibase-fingerprintview-description input {
-       font-family: inherit;
-       width: 100%;
-}
-
-.wikibase-fingerprintview .wikibase-descriptionview 
.wikibase-descriptionview-container {
-       padding-left: 0;
-}
-
-.wikibase-fingerprintview .wikibase-descriptionview 
.wikibase-descriptionview-text {
-       line-height: 1.4;
-       padding-right: 0;
-}
-
-.wikibase-fingerprintview .wikibase-labelview,
-.wikibase-fingerprintview .wikibase-descriptionview,
-.wikibase-fingerprintview .wikibase-aliasesview {
-       display: block;
-       float: none;
-       margin-top: 0;
-       padding: 10px;
-       width: auto;
-}
-
-.wikibase-fingerprintview .wikibase-aliasesview 
.wikibase-aliasesview-container {
-       display: inline-block !important;
-       padding-left: 0;
-       padding-right: 0;
-       width: 100%;
-}
-
-.wikibase-fingerprintview.wb-edit .wikibase-aliasesview-list {
-       font-size: 84%;
-}
-
-.wikibase-fingerprintview.wb-edit .wikibase-aliasesview-list * {
-       font-size: 100%;
-}
-
-.wikibase-fingerprintview.wb-edit .wikibase-labelview,
-.wikibase-fingerprintview.wb-edit .wikibase-descriptionview,
-.wikibase-fingerprintview.wb-edit .wikibase-aliasesview {
-       padding: 9px 8px 9px 7px;
-}
-
-.wikibase-fingerprintview .wb-error {
-       background-color: #FFDFC9;
-}
-
-/* the right column of the site links table (...-toolbarparent) should be 
treated as "action" column */
-.wikibase-fingerprintview .wb-editsection {
-       width: 18em;
-       position: static; /* clear absolute positioning */
-       float: none; /* overwrite edit section's float: right */
-       padding: 0;
-       margin-left: 0; /* reset edit section's margin which is set in the 
toolbar group instead;
-                       applying margin to the edit section cell should not 
have any effect at all */
-}
-
-.wikibase-fingerprintview .wb-editsection .wikibase-toolbar {
-       width: 18em; /* additionally assign width to toolbar to enforce width 
in no-JS version */
-}
-
-.wikibase-fingerprintview .wb-editsection .wikibase-toolbar .wikibase-toolbar {
-       margin-left: 1px; /* even out table cell's right border */
-}
-
-.wikibase-fingerprintview .wb-editsection .wikibase-toolbar .wikibase-toolbar {
-       margin-left: 0; /* do not apply margin to nested toolbar groups */
-}
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.tests.js
 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.tests.js
new file mode 100644
index 0000000..56315b1
--- /dev/null
+++ 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguage.tests.js
@@ -0,0 +1,344 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+( function( $, wb, QUnit ) {
+'use strict';
+
+/**
+ * @param {Object} [options]
+ * @param {jQuery} [$node]
+ * @return {jQuery}
+ */
+var createEntitytermsforlanguage = function( options, $node ) {
+       options = $.extend( {
+               entityId: 'i am an EntityId',
+               entityChangersFactory: {
+                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
+                       getDescriptionsChanger: function() {
+                               return {
+                                       setDescription: function() { return 
$.Deferred().resolve(); }
+                               };
+                       },
+                       getLabelsChanger: function() {
+                               return {
+                                       setLabel: function() { return 
$.Deferred().resolve(); }
+                               };
+                       }
+               },
+               value: {
+                       language: 'en',
+                       label: new wb.datamodel.Term( 'en', 'test label' ),
+                       description: new wb.datamodel.Term( 'en', 'test 
description' ),
+                       aliases: new wb.datamodel.MultiTerm( 'en', ['alias1', 
'alias2'] )
+               }
+       }, options || {} );
+
+       $node = $node || $( '<tbody/>' ).appendTo( $( '<table/>' ) );
+
+       var $entitytermsforlanguage = $node
+               .addClass( 'test_entitytermsforlanguage' )
+               .entitytermsforlanguage( options );
+
+       var entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' );
+
+       entitytermsforlanguage.$labelview.data( 'labelview' )._save
+               = entitytermsforlanguage.$descriptionview.data( 
'descriptionview' )._save
+               = entitytermsforlanguage.$aliasesview.data( 'aliasesview' 
)._save
+               = function() {
+                       return $.Deferred().resolve( {
+                               entity: {
+                                       lastrevid: 'i am a revision id'
+                               }
+                       } ).promise();
+               };
+
+       return $entitytermsforlanguage;
+};
+
+QUnit.module( 'jquery.wikibase.entitytermsforlanguage', 
QUnit.newMwEnvironment( {
+       teardown: function() {
+               $( '.test_entitytermsforlanguage' ).each( function() {
+                       var $entitytermsforlanguage = $( this ),
+                               entitytermsforlanguage = 
$entitytermsforlanguage.data( 'entitytermsforlanguage' );
+
+                       if( entitytermsforlanguage ) {
+                               entitytermsforlanguage.destroy();
+                       }
+
+                       $entitytermsforlanguage.remove();
+               } );
+       }
+} ) );
+
+QUnit.test( 'Create & destroy', function( assert ) {
+       assert.throws(
+               function() {
+                       createEntitytermsforlanguage( { value: null } );
+               },
+               'Throwing error when trying to initialize widget without a 
value.'
+       );
+
+       var $entitytermsforlanguage = createEntitytermsforlanguage(),
+               entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' );
+
+       assert.ok(
+               entitytermsforlanguage !== undefined,
+               'Created widget.'
+       );
+
+       entitytermsforlanguage.destroy();
+
+       assert.ok(
+               $entitytermsforlanguage.data( 'entitytermsforlanguage' ) === 
undefined,
+               'Destroyed widget.'
+       );
+} );
+
+QUnit.test( 'startEditing() & stopEditing()', 6, function( assert ) {
+       var $entitytermsforlanguage = createEntitytermsforlanguage(),
+               entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' );
+
+       $entitytermsforlanguage
+       .on( 'entitytermsforlanguageafterstartediting', function( event ) {
+               assert.ok(
+                       true,
+                       'Started edit mode.'
+               );
+       } )
+       .on( 'entitytermsforlanguageafterstopediting', function( event, 
dropValue ) {
+               assert.ok(
+                       true,
+                       'Stopped edit mode.'
+               );
+       } );
+
+       /**
+        * @param {Function} func
+        * @param {boolean} expectingEvent
+        * @return {jQuery.Promise}
+        */
+       function testEditModeChange( func, expectingEvent ) {
+               var deferred = $.Deferred();
+
+               if( !expectingEvent ) {
+                       func();
+                       return deferred.resolve().promise();
+               }
+
+               $entitytermsforlanguage
+               .one(
+                       
'entitytermsforlanguageafterstartediting.entitytermsforlanguagetest',
+                       function( event ) {
+                               $entitytermsforlanguage.off( 
'.entitytermsforlanguagetest' );
+                               deferred.resolve();
+                       }
+               )
+               .one(
+                       
'entitytermsforlanguageafterstopediting.entitytermsforlanguagetest',
+                       function( event, dropValue ) {
+                               $entitytermsforlanguage.off( 
'.entitytermsforlanguagetest' );
+                               deferred.resolve();
+                       }
+               );
+
+               func();
+
+               return deferred.promise();
+       }
+
+       var $queue = $( {} );
+
+       /**
+        * @param {jQuery} $queue
+        * @param {Function} func
+        * @param {boolean} [expectingEvent]
+        */
+       function addToQueue( $queue, func, expectingEvent ) {
+               if( expectingEvent === undefined ) {
+                       expectingEvent = true;
+               }
+               $queue.queue( 'tests', function( next ) {
+                       QUnit.stop();
+                       testEditModeChange( func, expectingEvent ).always( 
function() {
+                               QUnit.start();
+                               next();
+                       } );
+               } );
+       }
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.startEditing();
+       } );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.startEditing();
+       }, false );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.stopEditing( true );
+       } );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.stopEditing( true );
+       }, false );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.stopEditing();
+       }, false );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.startEditing();
+       } );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.$label.find( 'input' ).val( '' );
+               entitytermsforlanguage.stopEditing();
+       } );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.startEditing();
+       } );
+
+       addToQueue( $queue, function() {
+               entitytermsforlanguage.$description.find( 'input' ).val( 
'changed description' );
+               entitytermsforlanguage.stopEditing();
+       } );
+
+       $queue.dequeue( 'tests' );
+} );
+
+QUnit.test( 'isInitialValue()', function( assert ) {
+       var $entitytermsforlanguage = createEntitytermsforlanguage(),
+               entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' );
+
+       entitytermsforlanguage.startEditing();
+
+       assert.ok(
+               entitytermsforlanguage.isInitialValue(),
+               'Verified isInitialValue() returning true.'
+       );
+
+       entitytermsforlanguage.$label.find( 'input' ).val( 'changed' );
+
+       assert.ok(
+               !entitytermsforlanguage.isInitialValue(),
+               'Verified isInitialValue() returning false after changing 
value.'
+       );
+
+       entitytermsforlanguage.$label.find( 'input' ).val( 'test label' );
+
+       assert.ok(
+               entitytermsforlanguage.isInitialValue(),
+               'Verified isInitialValue() returning true after resetting to 
initial value.'
+       );
+} );
+
+QUnit.test( 'setError()', function( assert ) {
+       var $entitytermsforlanguage = createEntitytermsforlanguage(),
+               entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' );
+
+       $entitytermsforlanguage
+       .on( 'entitytermsforlanguagetoggleerror', function( event, error ) {
+               assert.ok(
+                       true,
+                       'Triggered "toggleerror" event.'
+               );
+       } );
+
+       entitytermsforlanguage.setError();
+} );
+
+QUnit.test( 'value()', function( assert ) {
+       var $entitytermsforlanguage = createEntitytermsforlanguage(),
+               entitytermsforlanguage = $entitytermsforlanguage.data( 
'entitytermsforlanguage' ),
+               label = new wb.datamodel.Term( 'en', 'changed label' ),
+               description = new wb.datamodel.Term( 'en', 'test description' ),
+               aliases = new wb.datamodel.MultiTerm( 'en', ['alias1', 
'alias2'] );
+
+       assert.throws(
+               function() {
+                       entitytermsforlanguage.value( null );
+               },
+               'Trying to set no value fails.'
+       );
+
+       entitytermsforlanguage.value( {
+               language: 'en',
+               label: label,
+               description: description,
+               aliases: aliases
+       } );
+
+       assert.ok(
+               entitytermsforlanguage.value().label.equals( label ),
+               'Set new label.'
+       );
+
+       assert.ok(
+               entitytermsforlanguage.value().description.equals( description 
),
+               'Did not change description.'
+       );
+
+       label = new wb.datamodel.Term( 'en', 'test label' );
+       description = new wb.datamodel.Term( 'en', '' );
+
+       entitytermsforlanguage.value( {
+               language: 'en',
+               label: label,
+               description: description,
+               aliases: aliases
+       } );
+
+       assert.ok(
+               entitytermsforlanguage.value().label.equals( label ),
+               'Reset label.'
+       );
+
+       assert.ok(
+               entitytermsforlanguage.value().description.equals( description 
),
+               'Removed description.'
+       );
+
+       aliases = new wb.datamodel.MultiTerm( 'en', ['alias1', 'alias2', 
'alias3'] );
+
+       entitytermsforlanguage.value( {
+               language: 'en',
+               label: label,
+               description: description,
+               aliases: aliases
+       } );
+
+       assert.ok(
+               entitytermsforlanguage.value().aliases.equals( aliases ),
+               'Added alias.'
+       );
+
+       aliases = new wb.datamodel.MultiTerm( 'en', [] );
+
+       entitytermsforlanguage.value( {
+               language: 'en',
+               label: label,
+               description: description,
+               aliases: aliases
+       } );
+
+       assert.ok(
+               entitytermsforlanguage.value().aliases.equals( aliases ),
+               'Removed aliases.'
+       );
+
+       assert.throws(
+               function() {
+                       entitytermsforlanguage.value( {
+                               language: 'de',
+                               label: label,
+                               description: description,
+                               aliases: aliases
+                       } );
+               },
+               'Trying to change language fails.'
+       );
+} );
+
+}( jQuery, wikibase, QUnit ) );
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
new file mode 100644
index 0000000..cf32842
--- /dev/null
+++ 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
@@ -0,0 +1,157 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+( function( $, wb, QUnit ) {
+'use strict';
+
+/**
+ * @param {Object} [options]
+ * @return {jQuery}
+ */
+var createEntitytermsforlanguagelistview = function( options ) {
+       options = $.extend( {
+               entityId: 'i am an EntityId',
+               entityChangersFactory: {
+                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
+                       getDescriptionsChanger: function() { return 'i am a 
DescriptionsChanger'; },
+                       getLabelsChanger: function() { return 'i am a 
LabelsChanger'; }
+               },
+               value: [
+                       {
+                               language: 'de',
+                               label: new wb.datamodel.Term( 'de', 'de-label' 
),
+                               description: new wb.datamodel.Term( 'de', 
'de-description' ),
+                               aliases: new wb.datamodel.MultiTerm( 'de', [] )
+                       }, {
+                               language: 'en',
+                               label: new wb.datamodel.Term( 'en', 'en-label' 
),
+                               description: new wb.datamodel.Term( 'en', 
'en-description' ),
+                               aliases: new wb.datamodel.MultiTerm( 'en', [] )
+                       }
+               ]
+       }, options || {} );
+
+       return $( '<table/>' )
+               .appendTo( 'body' )
+               .addClass( 'test_entitytermsforlanguagelistview' )
+               .entitytermsforlanguagelistview( options );
+};
+
+QUnit.module( 'jquery.wikibase.entitytermsforlanguagelistview', 
QUnit.newMwEnvironment( {
+       teardown: function() {
+               $( '.test_entitytermsforlanguagelistview' ).each( function() {
+                       var $entitytermsforlanguagelistview = $( this ),
+                               entitytermsforlanguagelistview
+                                       = $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+
+                       if( entitytermsforlanguagelistview ) {
+                               entitytermsforlanguagelistview.destroy();
+                       }
+
+                       $entitytermsforlanguagelistview.remove();
+               } );
+       }
+} ) );
+
+QUnit.test( 'Create & destroy', function( assert ) {
+       assert.throws(
+               function() {
+                       createEntitytermsforlanguagelistview( { value: null } );
+               },
+               'Throwing error when trying to initialize widget without a 
value.'
+       );
+
+       var $entitytermsforlanguagelistview = 
createEntitytermsforlanguagelistview(),
+               entitytermsforlanguagelistview
+                       = $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+
+       assert.ok(
+               entitytermsforlanguagelistview !== undefined,
+               'Created widget.'
+       );
+
+       entitytermsforlanguagelistview.destroy();
+
+       assert.ok(
+               $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' ) === undefined,
+               'Destroyed widget.'
+       );
+} );
+
+QUnit.test( 'isInitialValue()', function( assert ) {
+       var $entitytermsforlanguagelistview = 
createEntitytermsforlanguagelistview(),
+               entitytermsforlanguagelistview
+                       = $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+
+       entitytermsforlanguagelistview.startEditing();
+
+       assert.ok(
+               entitytermsforlanguagelistview.isInitialValue(),
+               'Verified isInitialValue() returning true.'
+       );
+
+       var $item = $entitytermsforlanguagelistview.data( 'listview' ).addItem( 
{
+               language: 'fa',
+               label: new wb.datamodel.Term( 'fa', 'fa-label' ),
+               description: new wb.datamodel.Term( 'fa', 'fa-description' ),
+               aliases: new wb.datamodel.MultiTerm( 'fa', [] )
+       } );
+
+       assert.ok(
+               !entitytermsforlanguagelistview.isInitialValue(),
+               'Verified isInitialValue() returning false after changing 
value.'
+       );
+
+       $entitytermsforlanguagelistview.data( 'listview' ).removeItem( $item );
+
+       assert.ok(
+               entitytermsforlanguagelistview.isInitialValue(),
+               'Verified isInitialValue() returning true after resetting to 
initial value.'
+       );
+} );
+
+// TODO: Add test which is kind of pointless without having a method to save a 
whole fingerprint
+// which could be overwritten by the test mechanism. Instead, the "save" 
functions of labelview,
+// descriptionview and aliasesview for each single entitytermsforlanguage 
would need to be
+// overwritten (see entitytermsforlanguage tests).
+// QUnit.test( 'startEditing() & stopEditing()', function( assert ) {} );
+
+QUnit.test( 'setError()', function( assert ) {
+       var $entitytermsforlanguagelistview = 
createEntitytermsforlanguagelistview(),
+               entitytermsforlanguagelistview
+                       = $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+
+       $entitytermsforlanguagelistview
+       .on( 'entitytermsforlanguagelistviewtoggleerror', function( event, 
error ) {
+               assert.ok(
+                       true,
+                       'Triggered "toggleerror" event.'
+               );
+       } );
+
+       entitytermsforlanguagelistview.setError();
+} );
+
+QUnit.test( 'value()', function( assert ) {
+       var $entitytermsforlanguagelistview = 
createEntitytermsforlanguagelistview(),
+               entitytermsforlanguagelistview
+                       = $entitytermsforlanguagelistview.data( 
'entitytermsforlanguagelistview' );
+
+       // TODO: Enhance test as soon as SiteLinkList is implemented in 
DataModelJavaScript and used
+       // as value object.
+       assert.equal(
+               entitytermsforlanguagelistview.value().length,
+               2,
+               'Retrieved value.'
+       );
+
+       assert.throws(
+               function() {
+                       entitytermsforlanguagelistview.value( [] );
+               },
+               'Throwing error when trying to set a new value.'
+       );
+} );
+
+}( jQuery, wikibase, QUnit ) );
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsview.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsview.tests.js
new file mode 100644
index 0000000..59d86b3
--- /dev/null
+++ b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entitytermsview.tests.js
@@ -0,0 +1,114 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+( function( $, wb, QUnit ) {
+'use strict';
+
+/**
+ * @param {Object} [options]
+ * @return {jQuery}
+ */
+var createEntitytermsview = function( options ) {
+       options = $.extend( {
+               value: [
+                       {
+                               language: 'de',
+                               label: new wb.datamodel.Term( 'de', 'de-label' 
),
+                               description: new wb.datamodel.Term( 'de', 
'de-description' ),
+                               aliases: new wb.datamodel.MultiTerm( 'de', [] )
+                       }, {
+                               language: 'en',
+                               label: new wb.datamodel.Term( 'en', 'en-label' 
),
+                               description: new wb.datamodel.Term( 'en', 
'en-description' ),
+                               aliases: new wb.datamodel.MultiTerm( 'en', [] )
+                       }
+               ],
+               entityId: 'i am an EntityId',
+               entityChangersFactory: {
+                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
+                       getDescriptionsChanger: function() { return 'i am a 
DescriptionsChanger'; },
+                       getLabelsChanger: function() { return 'i am a 
LabelsChanger'; }
+               }
+       }, options || {} );
+
+       return $( '<div/>' )
+               .appendTo( 'body' )
+               .addClass( 'test_entitytermsview' )
+               .entitytermsview( options );
+};
+
+QUnit.module( 'jquery.wikibase.entitytermsview', QUnit.newMwEnvironment( {
+       teardown: function() {
+               $( '.test_entitytermsview' ).each( function() {
+                       var $entitytermsview = $( this ),
+                               entitytermsview = $entitytermsview.data( 
'entitytermsview' );
+
+                       if( entitytermsview ) {
+                               entitytermsview.destroy();
+                       }
+
+                       $entitytermsview.remove();
+               } );
+       }
+} ) );
+
+QUnit.test( 'Create & destroy', function( assert ) {
+       assert.throws(
+               function() {
+                       createEntitytermsview( { value: null } );
+               },
+               'Throwing error when trying to initialize widget without a 
value.'
+       );
+
+       var $entitytermsview = createEntitytermsview(),
+               entitytermsview = $entitytermsview.data( 'entitytermsview' );
+
+       assert.ok(
+               entitytermsview !== undefined,
+               'Created widget.'
+       );
+
+       entitytermsview.destroy();
+
+       assert.ok(
+               $entitytermsview.data( 'entitytermsview' ) === undefined,
+               'Destroyed widget.'
+       );
+} );
+
+QUnit.test( 'setError()', function( assert ) {
+       var $entitytermsview = createEntitytermsview(),
+               entitytermsview = $entitytermsview.data( 'entitytermsview' );
+
+       $entitytermsview
+       .on( 'entitytermsviewtoggleerror', function( event, error ) {
+               assert.ok(
+                       true,
+                       'Triggered "toggleerror" event.'
+               );
+       } );
+
+       entitytermsview.setError();
+} );
+
+QUnit.test( 'value()', function( assert ) {
+       var $entitytermsview = createEntitytermsview(),
+               entitytermsview = $entitytermsview.data( 'entitytermsview' );
+
+       // TODO: Enhance test as soon as SiteLinkList is implemented in 
DataModelJavaScript
+       assert.equal(
+               entitytermsview.value().length,
+               2,
+               'Retrieved value.'
+       );
+
+       assert.throws(
+               function() {
+                       entitytermsview.value( [] );
+               },
+               'Throwing error when trying to set a new value.'
+       );
+} );
+
+}( jQuery, wikibase, QUnit ) );
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintgroupview.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintgroupview.tests.js
deleted file mode 100644
index c43f67e..0000000
--- 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintgroupview.tests.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-( function( $, wb, QUnit ) {
-'use strict';
-
-/**
- * @param {Object} [options]
- * @return {jQuery}
- */
-var createFingerprintgroupview = function( options ) {
-       options = $.extend( {
-               value: [
-                       {
-                               language: 'de',
-                               label: new wb.datamodel.Term( 'de', 'de-label' 
),
-                               description: new wb.datamodel.Term( 'de', 
'de-description' ),
-                               aliases: new wb.datamodel.MultiTerm( 'de', [] )
-                       }, {
-                               language: 'en',
-                               label: new wb.datamodel.Term( 'en', 'en-label' 
),
-                               description: new wb.datamodel.Term( 'en', 
'en-description' ),
-                               aliases: new wb.datamodel.MultiTerm( 'en', [] )
-                       }
-               ],
-               entityId: 'i am an EntityId',
-               entityChangersFactory: {
-                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
-                       getDescriptionsChanger: function() { return 'i am a 
DescriptionsChanger'; },
-                       getLabelsChanger: function() { return 'i am a 
LabelsChanger'; }
-               }
-       }, options || {} );
-
-       return $( '<div/>' )
-               .appendTo( 'body' )
-               .addClass( 'test_fingerprintgroupview' )
-               .fingerprintgroupview( options );
-};
-
-QUnit.module( 'jquery.wikibase.fingerprintgroupview', QUnit.newMwEnvironment( {
-       teardown: function() {
-               $( '.test_fingerprintgroupview' ).each( function() {
-                       var $fingerprintgroupview = $( this ),
-                               fingerprintgroupview = 
$fingerprintgroupview.data( 'fingerprintgroupview' );
-
-                       if( fingerprintgroupview ) {
-                               fingerprintgroupview.destroy();
-                       }
-
-                       $fingerprintgroupview.remove();
-               } );
-       }
-} ) );
-
-QUnit.test( 'Create & destroy', function( assert ) {
-       assert.throws(
-               function() {
-                       createFingerprintgroupview( { value: null } );
-               },
-               'Throwing error when trying to initialize widget without a 
value.'
-       );
-
-       var $fingerprintgroupview = createFingerprintgroupview(),
-               fingerprintgroupview = $fingerprintgroupview.data( 
'fingerprintgroupview' );
-
-       assert.ok(
-               fingerprintgroupview !== undefined,
-               'Created widget.'
-       );
-
-       fingerprintgroupview.destroy();
-
-       assert.ok(
-               $fingerprintgroupview.data( 'fingerprintgroupview' ) === 
undefined,
-               'Destroyed widget.'
-       );
-} );
-
-QUnit.test( 'setError()', function( assert ) {
-       var $fingerprintgroupview = createFingerprintgroupview(),
-               fingerprintgroupview = $fingerprintgroupview.data( 
'fingerprintgroupview' );
-
-       $fingerprintgroupview
-       .on( 'fingerprintgroupviewtoggleerror', function( event, error ) {
-               assert.ok(
-                       true,
-                       'Triggered "toggleerror" event.'
-               );
-       } );
-
-       fingerprintgroupview.setError();
-} );
-
-QUnit.test( 'value()', function( assert ) {
-       var $fingerprintgroupview = createFingerprintgroupview(),
-               fingerprintgroupview = $fingerprintgroupview.data( 
'fingerprintgroupview' );
-
-       // TODO: Enhance test as soon as SiteLinkList is implemented in 
DataModelJavaScript
-       assert.equal(
-               fingerprintgroupview.value().length,
-               2,
-               'Retrieved value.'
-       );
-
-       assert.throws(
-               function() {
-                       fingerprintgroupview.value( [] );
-               },
-               'Throwing error when trying to set a new value.'
-       );
-} );
-
-}( jQuery, wikibase, QUnit ) );
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintlistview.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintlistview.tests.js
deleted file mode 100644
index b286060..0000000
--- 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintlistview.tests.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-( function( $, wb, QUnit ) {
-'use strict';
-
-/**
- * @param {Object} [options]
- * @return {jQuery}
- */
-var createFingerprintlistview = function( options ) {
-       options = $.extend( {
-               entityId: 'i am an EntityId',
-               entityChangersFactory: {
-                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
-                       getDescriptionsChanger: function() { return 'i am a 
DescriptionsChanger'; },
-                       getLabelsChanger: function() { return 'i am a 
LabelsChanger'; }
-               },
-               value: [
-                       {
-                               language: 'de',
-                               label: new wb.datamodel.Term( 'de', 'de-label' 
),
-                               description: new wb.datamodel.Term( 'de', 
'de-description' ),
-                               aliases: new wb.datamodel.MultiTerm( 'de', [] )
-                       }, {
-                               language: 'en',
-                               label: new wb.datamodel.Term( 'en', 'en-label' 
),
-                               description: new wb.datamodel.Term( 'en', 
'en-description' ),
-                               aliases: new wb.datamodel.MultiTerm( 'en', [] )
-                       }
-               ]
-       }, options || {} );
-
-       return $( '<table/>' )
-               .appendTo( 'body' )
-               .addClass( 'test_fingerprintlistview' )
-               .fingerprintlistview( options );
-};
-
-QUnit.module( 'jquery.wikibase.fingerprintlistview', QUnit.newMwEnvironment( {
-       teardown: function() {
-               $( '.test_fingerprintlistview' ).each( function() {
-                       var $fingerprintlistview = $( this ),
-                               fingerprintlistview = 
$fingerprintlistview.data( 'fingerprintlistview' );
-
-                       if( fingerprintlistview ) {
-                               fingerprintlistview.destroy();
-                       }
-
-                       $fingerprintlistview.remove();
-               } );
-       }
-} ) );
-
-QUnit.test( 'Create & destroy', function( assert ) {
-       assert.throws(
-               function() {
-                       createFingerprintlistview( { value: null } );
-               },
-               'Throwing error when trying to initialize widget without a 
value.'
-       );
-
-       var $fingerprintlistview = createFingerprintlistview(),
-               fingerprintlistview = $fingerprintlistview.data( 
'fingerprintlistview' );
-
-       assert.ok(
-               fingerprintlistview !== undefined,
-               'Created widget.'
-       );
-
-       fingerprintlistview.destroy();
-
-       assert.ok(
-               $fingerprintlistview.data( 'fingerprintlistview' ) === 
undefined,
-               'Destroyed widget.'
-       );
-} );
-
-QUnit.test( 'isInitialValue()', function( assert ) {
-       var $fingerprintlistview = createFingerprintlistview(),
-               fingerprintlistview = $fingerprintlistview.data( 
'fingerprintlistview' );
-
-       fingerprintlistview.startEditing();
-
-       assert.ok(
-               fingerprintlistview.isInitialValue(),
-               'Verified isInitialValue() returning true.'
-       );
-
-       var $item = $fingerprintlistview.data( 'listview' ).addItem( {
-               language: 'fa',
-               label: new wb.datamodel.Term( 'fa', 'fa-label' ),
-               description: new wb.datamodel.Term( 'fa', 'fa-description' ),
-               aliases: new wb.datamodel.MultiTerm( 'fa', [] )
-       } );
-
-       assert.ok(
-               !fingerprintlistview.isInitialValue(),
-               'Verified isInitialValue() returning false after changing 
value.'
-       );
-
-       $fingerprintlistview.data( 'listview' ).removeItem( $item );
-
-       assert.ok(
-               fingerprintlistview.isInitialValue(),
-               'Verified isInitialValue() returning true after resetting to 
initial value.'
-       );
-} );
-
-// TODO: Add test which is kind of pointless without having a method to save a 
whole fingerprint
-// which could be overwritten by the test mechanism. Instead, the "save" 
functions of labelview,
-// descriptionview and aliasesview for each single fingerprintview would need 
to be overwritten
-// (see fingerprintview tests).
-// QUnit.test( 'startEditing() & stopEditing()', function( assert ) {} );
-
-QUnit.test( 'setError()', function( assert ) {
-       var $fingerprintlistview = createFingerprintlistview(),
-               fingerprintlistview = $fingerprintlistview.data( 
'fingerprintlistview' );
-
-       $fingerprintlistview
-       .on( 'fingerprintlistviewtoggleerror', function( event, error ) {
-               assert.ok(
-                       true,
-                       'Triggered "toggleerror" event.'
-               );
-       } );
-
-       fingerprintlistview.setError();
-} );
-
-QUnit.test( 'value()', function( assert ) {
-       var $fingerprintlistview = createFingerprintlistview(),
-               fingerprintlistview = $fingerprintlistview.data( 
'fingerprintlistview' );
-
-       // TODO: Enhance test as soon as SiteLinkList is implemented in 
DataModelJavaScript and used
-       // as value object.
-       assert.equal(
-               fingerprintlistview.value().length,
-               2,
-               'Retrieved value.'
-       );
-
-       assert.throws(
-               function() {
-                       fingerprintlistview.value( [] );
-               },
-               'Throwing error when trying to set a new value.'
-       );
-} );
-
-}( jQuery, wikibase, QUnit ) );
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintview.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintview.tests.js
deleted file mode 100644
index f23d8ba..0000000
--- a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.fingerprintview.tests.js
+++ /dev/null
@@ -1,338 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < mediaw...@snater.com >
- */
-( function( $, wb, QUnit ) {
-'use strict';
-
-/**
- * @param {Object} [options]
- * @param {jQuery} [$node]
- * @return {jQuery}
- */
-var createFingerprintview = function( options, $node ) {
-       options = $.extend( {
-               entityId: 'i am an EntityId',
-               entityChangersFactory: {
-                       getAliasesChanger: function() { return 'i am an 
AliasesChanger'; },
-                       getDescriptionsChanger: function() {
-                               return {
-                                       setDescription: function() { return 
$.Deferred().resolve(); }
-                               };
-                       },
-                       getLabelsChanger: function() {
-                               return {
-                                       setLabel: function() { return 
$.Deferred().resolve(); }
-                               };
-                       }
-               },
-               value: {
-                       language: 'en',
-                       label: new wb.datamodel.Term( 'en', 'test label' ),
-                       description: new wb.datamodel.Term( 'en', 'test 
description' ),
-                       aliases: new wb.datamodel.MultiTerm( 'en', ['alias1', 
'alias2'] )
-               }
-       }, options || {} );
-
-       $node = $node || $( '<tbody/>' ).appendTo( $( '<table/>' ) );
-
-       var $fingerprintview = $node
-               .addClass( 'test_fingerprintview' )
-               .fingerprintview( options );
-
-       var fingerprintview = $fingerprintview.data( 'fingerprintview' );
-
-       fingerprintview.$labelview.data( 'labelview' )._save
-               = fingerprintview.$descriptionview.data( 'descriptionview' 
)._save
-               = fingerprintview.$aliasesview.data( 'aliasesview' )._save
-               = function() {
-                       return $.Deferred().resolve( {
-                               entity: {
-                                       lastrevid: 'i am a revision id'
-                               }
-                       } ).promise();
-               };
-
-       return $fingerprintview;
-};
-
-QUnit.module( 'jquery.wikibase.fingerprintview', QUnit.newMwEnvironment( {
-       teardown: function() {
-               $( '.test_fingerprintview' ).each( function() {
-                       var $fingerprintview = $( this ),
-                               fingerprintview = $fingerprintview.data( 
'fingerprintview' );
-
-                       if( fingerprintview ) {
-                               fingerprintview.destroy();
-                       }
-
-                       $fingerprintview.remove();
-               } );
-       }
-} ) );
-
-QUnit.test( 'Create & destroy', function( assert ) {
-       assert.throws(
-               function() {
-                       createFingerprintview( { value: null } );
-               },
-               'Throwing error when trying to initialize widget without a 
value.'
-       );
-
-       var $fingerprintview = createFingerprintview(),
-               fingerprintview = $fingerprintview.data( 'fingerprintview' );
-
-       assert.ok(
-               fingerprintview !== undefined,
-               'Created widget.'
-       );
-
-       fingerprintview.destroy();
-
-       assert.ok(
-               $fingerprintview.data( 'fingerprintview' ) === undefined,
-               'Destroyed widget.'
-       );
-} );
-
-QUnit.test( 'startEditing() & stopEditing()', 6, function( assert ) {
-       var $fingerprintview = createFingerprintview(),
-               fingerprintview = $fingerprintview.data( 'fingerprintview' );
-
-       $fingerprintview
-       .on( 'fingerprintviewafterstartediting', function( event ) {
-               assert.ok(
-                       true,
-                       'Started edit mode.'
-               );
-       } )
-       .on( 'fingerprintviewafterstopediting', function( event, dropValue ) {
-               assert.ok(
-                       true,
-                       'Stopped edit mode.'
-               );
-       } );
-
-       /**
-        * @param {Function} func
-        * @param {boolean} expectingEvent
-        * @return {jQuery.Promise}
-        */
-       function testEditModeChange( func, expectingEvent ) {
-               var deferred = $.Deferred();
-
-               if( !expectingEvent ) {
-                       func();
-                       return deferred.resolve().promise();
-               }
-
-               $fingerprintview
-               .one( 'fingerprintviewafterstartediting.fingerprintviewtest', 
function( event ) {
-                       $fingerprintview.off( '.fingerprintviewtest' );
-                       deferred.resolve();
-               } )
-               .one( 'fingerprintviewafterstopediting.fingerprintviewtest', 
function( event, dropValue ) {
-                       $fingerprintview.off( '.fingerprintviewtest' );
-                       deferred.resolve();
-               } );
-
-               func();
-
-               return deferred.promise();
-       }
-
-       var $queue = $( {} );
-
-       /**
-        * @param {jQuery} $queue
-        * @param {Function} func
-        * @param {boolean} [expectingEvent]
-        */
-       function addToQueue( $queue, func, expectingEvent ) {
-               if( expectingEvent === undefined ) {
-                       expectingEvent = true;
-               }
-               $queue.queue( 'tests', function( next ) {
-                       QUnit.stop();
-                       testEditModeChange( func, expectingEvent ).always( 
function() {
-                               QUnit.start();
-                               next();
-                       } );
-               } );
-       }
-
-       addToQueue( $queue, function() {
-               fingerprintview.startEditing();
-       } );
-
-       addToQueue( $queue, function() {
-               fingerprintview.startEditing();
-       }, false );
-
-       addToQueue( $queue, function() {
-               fingerprintview.stopEditing( true );
-       } );
-
-       addToQueue( $queue, function() {
-               fingerprintview.stopEditing( true );
-       }, false );
-
-       addToQueue( $queue, function() {
-               fingerprintview.stopEditing();
-       }, false );
-
-       addToQueue( $queue, function() {
-               fingerprintview.startEditing();
-       } );
-
-       addToQueue( $queue, function() {
-               fingerprintview.$label.find( 'input' ).val( '' );
-               fingerprintview.stopEditing();
-       } );
-
-       addToQueue( $queue, function() {
-               fingerprintview.startEditing();
-       } );
-
-       addToQueue( $queue, function() {
-               fingerprintview.$description.find( 'input' ).val( 'changed 
description' );
-               fingerprintview.stopEditing();
-       } );
-
-       $queue.dequeue( 'tests' );
-} );
-
-QUnit.test( 'isInitialValue()', function( assert ) {
-       var $fingerprintview = createFingerprintview(),
-               fingerprintview = $fingerprintview.data( 'fingerprintview' );
-
-       fingerprintview.startEditing();
-
-       assert.ok(
-               fingerprintview.isInitialValue(),
-               'Verified isInitialValue() returning true.'
-       );
-
-       fingerprintview.$label.find( 'input' ).val( 'changed' );
-
-       assert.ok(
-               !fingerprintview.isInitialValue(),
-               'Verified isInitialValue() returning false after changing 
value.'
-       );
-
-       fingerprintview.$label.find( 'input' ).val( 'test label' );
-
-       assert.ok(
-               fingerprintview.isInitialValue(),
-               'Verified isInitialValue() returning true after resetting to 
initial value.'
-       );
-} );
-
-QUnit.test( 'setError()', function( assert ) {
-       var $fingerprintview = createFingerprintview(),
-               fingerprintview = $fingerprintview.data( 'fingerprintview' );
-
-       $fingerprintview
-       .on( 'fingerprintviewtoggleerror', function( event, error ) {
-               assert.ok(
-                       true,
-                       'Triggered "toggleerror" event.'
-               );
-       } );
-
-       fingerprintview.setError();
-} );
-
-QUnit.test( 'value()', function( assert ) {
-       var $fingerprintview = createFingerprintview(),
-               fingerprintview = $fingerprintview.data( 'fingerprintview' ),
-               label = new wb.datamodel.Term( 'en', 'changed label' ),
-               description = new wb.datamodel.Term( 'en', 'test description' ),
-               aliases = new wb.datamodel.MultiTerm( 'en', ['alias1', 
'alias2'] );
-
-       assert.throws(
-               function() {
-                       fingerprintview.value( null );
-               },
-               'Trying to set no value fails.'
-       );
-
-       fingerprintview.value( {
-               language: 'en',
-               label: label,
-               description: description,
-               aliases: aliases
-       } );
-
-       assert.ok(
-               fingerprintview.value().label.equals( label ),
-               'Set new label.'
-       );
-
-       assert.ok(
-               fingerprintview.value().description.equals( description ),
-               'Did not change description.'
-       );
-
-       label = new wb.datamodel.Term( 'en', 'test label' );
-       description = new wb.datamodel.Term( 'en', '' );
-
-       fingerprintview.value( {
-               language: 'en',
-               label: label,
-               description: description,
-               aliases: aliases
-       } );
-
-       assert.ok(
-               fingerprintview.value().label.equals( label ),
-               'Reset label.'
-       );
-
-       assert.ok(
-               fingerprintview.value().description.equals( description ),
-               'Removed description.'
-       );
-
-       aliases = new wb.datamodel.MultiTerm( 'en', ['alias1', 'alias2', 
'alias3'] );
-
-       fingerprintview.value( {
-               language: 'en',
-               label: label,
-               description: description,
-               aliases: aliases
-       } );
-
-       assert.ok(
-               fingerprintview.value().aliases.equals( aliases ),
-               'Added alias.'
-       );
-
-       aliases = new wb.datamodel.MultiTerm( 'en', [] );
-
-       fingerprintview.value( {
-               language: 'en',
-               label: label,
-               description: description,
-               aliases: aliases
-       } );
-
-       assert.ok(
-               fingerprintview.value().aliases.equals( aliases ),
-               'Removed aliases.'
-       );
-
-       assert.throws(
-               function() {
-                       fingerprintview.value( {
-                               language: 'de',
-                               label: label,
-                               description: description,
-                               aliases: aliases
-                       } );
-               },
-               'Trying to change language fails.'
-       );
-} );
-
-}( jQuery, wikibase, QUnit ) );
diff --git a/lib/tests/qunit/jquery.wikibase/resources.php 
b/lib/tests/qunit/jquery.wikibase/resources.php
index 38e9bc9..3e5a8ee 100644
--- a/lib/tests/qunit/jquery.wikibase/resources.php
+++ b/lib/tests/qunit/jquery.wikibase/resources.php
@@ -104,34 +104,34 @@
                        ),
                ),
 
-               'jquery.wikibase.fingerprintgroupview.tests' => $moduleBase + 
array(
+               'jquery.wikibase.entitytermsview.tests' => $moduleBase + array(
                                'scripts' => array(
-                                       
'jquery.wikibase.fingerprintgroupview.tests.js',
+                                       
'jquery.wikibase.entitytermsview.tests.js',
                                ),
                                'dependencies' => array(
-                                       'jquery.wikibase.fingerprintgroupview',
+                                       'jquery.wikibase.entitytermsview',
                                        'wikibase.datamodel.MultiTerm',
                                        'wikibase.datamodel.Term',
                                ),
                        ),
 
-               'jquery.wikibase.fingerprintlistview.tests' => $moduleBase + 
array(
+               'jquery.wikibase.entitytermsforlanguagelistview.tests' => 
$moduleBase + array(
                        'scripts' => array(
-                               'jquery.wikibase.fingerprintlistview.tests.js',
+                               
'jquery.wikibase.entitytermsforlanguagelistview.tests.js',
                        ),
                        'dependencies' => array(
-                               'jquery.wikibase.fingerprintlistview',
+                               
'jquery.wikibase.entitytermsforlanguagelistview',
                                'wikibase.datamodel.MultiTerm',
                                'wikibase.datamodel.Term',
                        ),
                ),
 
-               'jquery.wikibase.fingerprintview.tests' => $moduleBase + array(
+               'jquery.wikibase.entitytermsforlanguage.tests' => $moduleBase + 
array(
                        'scripts' => array(
-                               'jquery.wikibase.fingerprintview.tests.js',
+                               
'jquery.wikibase.entitytermsforlanguage.tests.js',
                        ),
                        'dependencies' => array(
-                               'jquery.wikibase.fingerprintview',
+                               'jquery.wikibase.entitytermsforlanguage',
                        ),
                ),
 
diff --git a/repo/includes/View/TermBoxView.php 
b/repo/includes/View/TermBoxView.php
index 5b14996..3631381 100644
--- a/repo/includes/View/TermBoxView.php
+++ b/repo/includes/View/TermBoxView.php
@@ -74,7 +74,7 @@
                        $hasLabel = $labels->hasTermForLanguage( $languageCode 
);
                        $hasDescription = $descriptions->hasTermForLanguage( 
$languageCode );
 
-                       $tbody .= wfTemplate( 'wikibase-fingerprintview',
+                       $tbody .= wfTemplate( 'wikibase-entitytermsforlanguage',
                                $languageCode,
                                $title->getLocalURL( array( 'setlang' => 
$languageCode ) ),
                                htmlspecialchars( Utils::fetchLanguageName( 
$languageCode ) ),
@@ -100,9 +100,9 @@
                        );
                }
 
-               $html = wfTemplate( 'wikibase-fingerprintgroupview',
+               $html = wfTemplate( 'wikibase-entitytermsview',
                        $this->msg( 'wikibase-terms' )->text(),
-                       wfTemplate( 'wikibase-fingerprintlistview', $tbody ),
+                       wfTemplate( 'wikibase-entitytermsforlanguagelistview', 
$tbody ),
                        $this->sectionEditLinkGenerator->getHtmlForEditSection(
                                'SpecialPages',
                                array(),
diff --git a/repo/resources/templates.php b/repo/resources/templates.php
index ce39fdd..a85a0d0 100644
--- a/repo/resources/templates.php
+++ b/repo/resources/templates.php
@@ -202,40 +202,40 @@
 <li class="wikibase-aliasesview-list-item" dir="auto">$1</li>
 HTML;
 
-       $templates['wikibase-fingerprintgroupview'] =
+       $templates['wikibase-entitytermsview'] =
 <<<HTML
-<div class="wikibase-fingerprintgroupview">
-       <div class="wikibase-fingerprintgroupview-heading-container">
-               <h2 id="wb-terms" class="wb-section-heading 
wikibase-fingerprintgroupview-heading">$1</h2>
+<div class="wikibase-entitytermsview">
+       <div class="wikibase-entitytermsview-heading-container">
+               <h2 id="wb-terms" class="wb-section-heading 
wikibase-entitytermsview-heading">$1</h2>
                <!-- wikibase-toolbar -->$3
        </div>
-       <!-- wikibase-fingerprintlistview -->$2
+       <!-- wikibase-entitytermsforlanguagelistview -->$2
 </div>
 HTML;
 
-       $templates['wikibase-fingerprintlistview'] =
+       $templates['wikibase-entitytermsforlanguagelistview'] =
 <<<HTML
-<table class="wikibase-fingerprintlistview">
+<table class="wikibase-entitytermsforlanguagelistview">
        <colgroup>
-               <col class="wikibase-fingerprintlistview-language" />
-               <col class="wikibase-fingerprintlistview-label 
wikibase-fingerprintlistview-description wikibase-fingerprintlistview-aliases" 
/>
+               <col class="wikibase-entitytermsforlanguagelistview-language" />
+               <col class="wikibase-entitytermsforlanguagelistview-label 
wikibase-entitytermsforlanguagelistview-description 
wikibase-entitytermsforlanguagelistview-aliases" />
        </colgroup>
-       <!-- [0,*] wikibase-fingerprintview -->$1
+       <!-- [0,*] wikibase-entitytermsforlanguage -->$1
 </table>
 HTML;
 
-       $templates['wikibase-fingerprintview'] =
+       $templates['wikibase-entitytermsforlanguage'] =
 <<<HTML
-<tbody class="wikibase-fingerprintview wikibase-fingerprintview-$1" >
+<tbody class="wikibase-entitytermsforlanguage 
wikibase-entitytermsforlanguage-$1" >
        <tr>
-               <td class="wikibase-fingerprintview-language" rowspan="3"><a 
href="$2">$3</a></td>
-               <td class="wikibase-fingerprintview-label">$4</td>
+               <td class="wikibase-entitytermsforlanguage-language" 
rowspan="3"><a href="$2">$3</a></td>
+               <td class="wikibase-entitytermsforlanguage-label">$4</td>
        </tr>
        <tr>
-               <td class="wikibase-fingerprintview-description">$5</td>
+               <td class="wikibase-entitytermsforlanguage-description">$5</td>
        </tr>
        <tr>
-               <td class="wikibase-fingerprintview-aliases">$6</td>
+               <td class="wikibase-entitytermsforlanguage-aliases">$6</td>
        </tr>
 </tbody>
 HTML;
diff --git a/repo/resources/wikibase.ui.entityViewInit.js 
b/repo/resources/wikibase.ui.entityViewInit.js
index 2aa0f75..1f62e45 100644
--- a/repo/resources/wikibase.ui.entityViewInit.js
+++ b/repo/resources/wikibase.ui.entityViewInit.js
@@ -45,7 +45,7 @@
                                'statementview',
                                'descriptionview',
                                'labelview',
-                               'fingerprintgroupview',
+                               'entitytermsview',
                                'referenceview',
                                'sitelinkgroupview'
                        ],

-- 
To view, visit https://gerrit.wikimedia.org/r/180438
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I084b6a11f8ddb7930b145e7852b7a5e66daa0a32
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to