[MediaWiki-commits] [Gerrit] Show Wikidata ID hint in SPARQL query editor - change (wikidata...rdf)

2015-11-03 Thread Jonas Kress (WMDE) (Code Review)
Jonas Kress (WMDE) has uploaded a new change for review.

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

Change subject: Show Wikidata ID hint in SPARQL query editor
..

Show Wikidata ID hint in SPARQL query editor

Shows tooltip when hovering over wikibase entity

Bug: T114740
Change-Id: Icfda334a52973921ddb093c57962703b88bcc569
---
A gui/addon/tooltip/WikibaseRDFTooltip.js
M gui/gui.js
M gui/index.html
3 files changed, 145 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/rdf 
refs/changes/70/250670/1

diff --git a/gui/addon/tooltip/WikibaseRDFTooltip.js 
b/gui/addon/tooltip/WikibaseRDFTooltip.js
new file mode 100644
index 000..f389808
--- /dev/null
+++ b/gui/addon/tooltip/WikibaseRDFTooltip.js
@@ -0,0 +1,140 @@
+var WikibaseRDFTooltip = ( function( CodeMirror, $ ) {
+   "use strict";
+
+
+   /**
+* Wikibase RDF tooltip for codemirror editor
+*
+* @class WikibaseRdfTooltip
+* @licence GNU GPL v2+
+* @author Jonas Kress
+* @constructor
+*/
+   function SELF( editor ) {
+
+   this.editor = editor;
+   this._registerHandler();
+   }
+
+   SELF.prototype.editor = null;
+   SELF.prototype.tooltipTimeoutHandler = null;
+
+
+   var ENTITY_TYPES = { "http://www.wikidata.org/prop/direct/": "property",
+   "http://www.wikidata.org/prop/": "property",
+   "http://www.wikidata.org/prop/novalue/": "property",
+   "http://www.wikidata.org/prop/statement/": "property",
+   "http://www.wikidata.org/prop/statement/value/": 
"property",
+   "http://www.wikidata.org/prop/qualifier/": "property",
+   "http://www.wikidata.org/prop/qualifier/value/": 
"property",
+   "http://www.wikidata.org/prop/reference/": "property",
+   "http://www.wikidata.org/prop/reference/value/": 
"property",
+   "http://www.wikidata.org/wiki/Special:EntityData/": 
"item",
+   "http://www.wikidata.org/entity/": "item" };
+
+   var ENTITY_SEARCH_API_ENDPOINT = 
"https://www.wikidata.org/w/api.php?action=wbsearchentities={term}=json=en=en={entityType}=0;;
+
+
+   SELF.prototype._registerHandler = function(){
+   CodeMirror.on(this.editor.getWrapperElement(), "mouseover", 
$.proxy(this._triggerTooltip, this));
+   };
+
+   SELF.prototype._triggerTooltip = function( e ){
+
+   clearTimeout( this.tooltipTimeoutHandler );
+   this._removeToolTip();
+
+   var self = this;
+   this.tooltipTimeoutHandler = setTimeout(function(){
+   self._createTooltip( e );
+   }, 500);
+   };
+
+
+   SELF.prototype._createTooltip = function( e ){
+
+   var posX = e.clientX, posY = (e.clientY +  
$(window).scrollTop());
+
+   var token = 
this.editor.getTokenAt(this.editor.coordsChar({left: posX, top: posY})).string;
+   console.log(token);
+
+   if(!token.match(/.+\:(Q|P)[0-9]*/)){
+   return;
+   }
+
+   var prefixes = this._extractPrefixes( 
this.editor.doc.getValue() );
+   var prefix = token.split( ":" ).shift();
+   var entityId = token.split( ":" ).pop();
+
+   if (! prefixes[ prefix ] ) {
+   return;
+   }
+
+   var self = this;
+   this._searchEntities( entityId, prefixes[ prefix ] 
).done(function( list ){
+   self._showToolTip( list.shift(), {x:posX, y:posY} );
+   });
+   };
+
+   SELF.prototype._removeToolTip = function(){
+   $(".wikibaseRDFtoolTip").remove();
+   };
+
+   SELF.prototype._showToolTip = function( text, pos ){
+   if( !text || !pos ){
+   return;
+   }
+   $("")
+   .text(text)
+   .css( "position", "absolute" )
+   .css( "background-color", "white" )
+   .css( "z-index", "100" )
+   .css( "border", "1px solid grey" )
+   .css( "max-width", "200px" )
+   .css( "padding", "5px" )
+   .css( {top: pos.y + 2, left: pos.x + 2} )
+   .addClass( "wikibaseRDFtoolTip" )
+   .appendTo( "body" )
+   .fadeIn( "slow" );
+   };
+
+
+   SELF.prototype._extractPrefixes = function( text ) {
+   var prefixes = {},
+   lines = text.split( "\n" ),
+   matches;
+
+   $.each( lines, function ( index, line ) {
+   // PREFIX wd: 
+   if ( matches = line.match( /(PREFIX) (\S+): 

[MediaWiki-commits] [Gerrit] Show Wikidata ID hint in SPARQL query editor - change (wikidata...rdf)

2015-11-03 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Show Wikidata ID hint in SPARQL query editor
..


Show Wikidata ID hint in SPARQL query editor

Shows tooltip when hovering over wikibase entity

Bug: T114740
Change-Id: Icfda334a52973921ddb093c57962703b88bcc569
---
A gui/addon/tooltip/WikibaseRDFTooltip.js
M gui/gui.js
M gui/index.html
3 files changed, 145 insertions(+), 2 deletions(-)

Approvals:
  Smalyshev: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/gui/addon/tooltip/WikibaseRDFTooltip.js 
b/gui/addon/tooltip/WikibaseRDFTooltip.js
new file mode 100644
index 000..f389808
--- /dev/null
+++ b/gui/addon/tooltip/WikibaseRDFTooltip.js
@@ -0,0 +1,140 @@
+var WikibaseRDFTooltip = ( function( CodeMirror, $ ) {
+   "use strict";
+
+
+   /**
+* Wikibase RDF tooltip for codemirror editor
+*
+* @class WikibaseRdfTooltip
+* @licence GNU GPL v2+
+* @author Jonas Kress
+* @constructor
+*/
+   function SELF( editor ) {
+
+   this.editor = editor;
+   this._registerHandler();
+   }
+
+   SELF.prototype.editor = null;
+   SELF.prototype.tooltipTimeoutHandler = null;
+
+
+   var ENTITY_TYPES = { "http://www.wikidata.org/prop/direct/": "property",
+   "http://www.wikidata.org/prop/": "property",
+   "http://www.wikidata.org/prop/novalue/": "property",
+   "http://www.wikidata.org/prop/statement/": "property",
+   "http://www.wikidata.org/prop/statement/value/": 
"property",
+   "http://www.wikidata.org/prop/qualifier/": "property",
+   "http://www.wikidata.org/prop/qualifier/value/": 
"property",
+   "http://www.wikidata.org/prop/reference/": "property",
+   "http://www.wikidata.org/prop/reference/value/": 
"property",
+   "http://www.wikidata.org/wiki/Special:EntityData/": 
"item",
+   "http://www.wikidata.org/entity/": "item" };
+
+   var ENTITY_SEARCH_API_ENDPOINT = 
"https://www.wikidata.org/w/api.php?action=wbsearchentities={term}=json=en=en={entityType}=0;;
+
+
+   SELF.prototype._registerHandler = function(){
+   CodeMirror.on(this.editor.getWrapperElement(), "mouseover", 
$.proxy(this._triggerTooltip, this));
+   };
+
+   SELF.prototype._triggerTooltip = function( e ){
+
+   clearTimeout( this.tooltipTimeoutHandler );
+   this._removeToolTip();
+
+   var self = this;
+   this.tooltipTimeoutHandler = setTimeout(function(){
+   self._createTooltip( e );
+   }, 500);
+   };
+
+
+   SELF.prototype._createTooltip = function( e ){
+
+   var posX = e.clientX, posY = (e.clientY +  
$(window).scrollTop());
+
+   var token = 
this.editor.getTokenAt(this.editor.coordsChar({left: posX, top: posY})).string;
+   console.log(token);
+
+   if(!token.match(/.+\:(Q|P)[0-9]*/)){
+   return;
+   }
+
+   var prefixes = this._extractPrefixes( 
this.editor.doc.getValue() );
+   var prefix = token.split( ":" ).shift();
+   var entityId = token.split( ":" ).pop();
+
+   if (! prefixes[ prefix ] ) {
+   return;
+   }
+
+   var self = this;
+   this._searchEntities( entityId, prefixes[ prefix ] 
).done(function( list ){
+   self._showToolTip( list.shift(), {x:posX, y:posY} );
+   });
+   };
+
+   SELF.prototype._removeToolTip = function(){
+   $(".wikibaseRDFtoolTip").remove();
+   };
+
+   SELF.prototype._showToolTip = function( text, pos ){
+   if( !text || !pos ){
+   return;
+   }
+   $("")
+   .text(text)
+   .css( "position", "absolute" )
+   .css( "background-color", "white" )
+   .css( "z-index", "100" )
+   .css( "border", "1px solid grey" )
+   .css( "max-width", "200px" )
+   .css( "padding", "5px" )
+   .css( {top: pos.y + 2, left: pos.x + 2} )
+   .addClass( "wikibaseRDFtoolTip" )
+   .appendTo( "body" )
+   .fadeIn( "slow" );
+   };
+
+
+   SELF.prototype._extractPrefixes = function( text ) {
+   var prefixes = {},
+   lines = text.split( "\n" ),
+   matches;
+
+   $.each( lines, function ( index, line ) {
+   // PREFIX wd: 
+   if ( matches = line.match( /(PREFIX) (\S+): <([^>]+)>/ 
) ) {
+   if (