Kipcool has submitted this change and it was merged.

Change subject: jquery-ification of suggest dropdown comboboxes.
......................................................................


jquery-ification of suggest dropdown comboboxes.

Change-Id: Ide21c3ef2c979acb61a1fb598222ac7ba1acddbd
---
M OmegaWiki/OmegaWikiEditors.php
M OmegaWiki/forms.php
M OmegaWiki/resources/suggest.css
M OmegaWiki/resources/suggest.js
4 files changed, 319 insertions(+), 326 deletions(-)

Approvals:
  Kipcool: Verified; Looks good to me, approved



diff --git a/OmegaWiki/OmegaWikiEditors.php b/OmegaWiki/OmegaWikiEditors.php
index 6990d30..a5f1ae9 100644
--- a/OmegaWiki/OmegaWikiEditors.php
+++ b/OmegaWiki/OmegaWikiEditors.php
@@ -983,10 +983,7 @@
        $result = createTableViewer( $attribute );
        $result->setHideEmptyColumns( false );
        $result->setRowHTMLAttributes( array(
-               "class" => "suggestion-row",
-               "onclick" => "suggestRowClicked(event, this)",
-               "onmouseover" => "mouseOverRow(this)",
-               "onmouseout" => "mouseOutRow(this)"
+               "class" => "suggestion-row"
        ) );
        
        return $result;
diff --git a/OmegaWiki/forms.php b/OmegaWiki/forms.php
index ac0a41c..0f28a03 100644
--- a/OmegaWiki/forms.php
+++ b/OmegaWiki/forms.php
@@ -46,7 +46,7 @@
        }
 }
 
-function getCheckBoxWithOnClick( $name, $isChecked, $onClick, $disabled = 
false ) {
+function getCheckBoxWithClass( $name, $isChecked, $class, $disabled = false ) {
        if ( $disabled ) {
                if ( $isChecked ) {
                        return '<input disabled="disabled" type="checkbox" 
name="' . $name . '"' . checkBoxCheckAttribute( $isChecked ) . '"/><input 
type="hidden" name="' . $name . '" value="1"/>';
@@ -54,7 +54,7 @@
                        return '<input disabled="disabled" type="checkbox" 
name="' . $name . '"' . checkBoxCheckAttribute( $isChecked ) . '"/>';
                }
        } else {
-               return '<input type="checkbox" name="' . $name . '"' . 
checkBoxCheckAttribute( $isChecked ) . ' onclick="' . $onClick . '"/>';
+               return '<input type="checkbox" name="' . $name . '"' . 
checkBoxCheckAttribute( $isChecked ) . ' class="' . $class . '"/>';
        }
 }
 
@@ -65,7 +65,7 @@
                // do not print the checkbox
                return '';
        } else {
-               return getCheckBoxWithOnClick( $name, false, 
"removeClicked(this);" );
+               return getCheckBoxWithClass( $name, false, "remove-checkbox" );
        }
 }
 
@@ -138,45 +138,30 @@
                        '<input type="hidden" id="' . $name . 
'-suggest-parameter-' . $parameter . '" name="' . $parameter . '" value="' . 
$parameterValue . '"/>';
 
        $result .=
-                       '<a id="' . $name . '-suggest-link" 
class="suggest-link" onclick="suggestLinkClicked(event, this);" title="' . 
wfMsgSc( "SuggestHint" ) . '">' . $label . '</a>' .
+               '<a id="' . $name . '-suggest-link" class="suggest-link" 
title="' . wfMsgSc( "SuggestHint" ) . '">' . $label . '</a>' .
                '</span>';
        
-       if ( $wgLang->isRTL() ) {
-               $result .=
-                       '<div class="suggest-drop-down" style="position: 
relative"><div id="' . $name . '-suggest-div" style="position: absolute; right: 
0px; top: 0px; border: 1px solid #000000; display: none; background-color: 
white; padding: 4px">' .
-                               '<div><table>' .
-                                       '<tr>' .
-                                               '<td><input type="text" id="' . 
$name . '-suggest-text" autocomplete="off" onkeyup="suggestTextChanged(this)" 
style="width: 300px"></input></td>' .
-                                               '<td><a id="' . $name . 
'-suggest-clear" href="javascript:void(0)" onclick="suggestClearClicked(event, 
this)">' . wfMsg( 'ow_suggest_clear' ) . '</a></td>' .
-                                               '<td style="white-space: 
nowrap"><a id="' . $name . '-suggest-previous" href="javascript:void(0)" 
class="suggest-previous" onclick="suggestPreviousClicked(event, this)"><img 
src="' . $wgScriptPath . '/extensions/WikiLexicalData/Images/ArrowRight.png" 
alt="' . wfMsg( 'ow_suggest_previous' ) . '"/> ' . wfMsg( 'ow_suggest_previous' 
) . '</a></td>' .
-                                               '<td style="white-space: 
nowrap"><a id="' . $name . '-suggest-next" href="javascript:void(0)" 
class="suggest-next" onclick="suggestNextClicked(event, this)">' . wfMsg( 
'ow_suggest_next' ) . ' <img src="' . $wgScriptPath . 
'/extensions/WikiLexicalData/Images/ArrowLeft.png" alt="' . wfMsg( 
'ow_suggest_next' ) . '"/></a></td>' .
-                                               '<td><a id="' . $name . 
'-suggest-close" href="javascript:void(0)" onclick="suggestCloseClicked(event, 
this)">[X]</a></td>' .
-                                       '</tr>' .
-                               '</table></div>' .
-                               '<div><table id="' . $name . 
'-suggest-table"><tr><td></td></tr></table></div>' .
-                       '</div></div>';
-       } else {
-               $result .=
-                       '<div class="suggest-drop-down" style="position: 
relative"><div id="' . $name . '-suggest-div" style="position: absolute; left: 
0px; top: 0px; border: 1px solid #000000; display: none; background-color: 
white; padding: 4px">' .
-                               '<div><table>' .
-                                       '<tr>' .
-                                               '<td><input type="text" id="' . 
$name . '-suggest-text" autocomplete="off" onkeyup="suggestTextChanged(this)" 
style="width: 300px"></input></td>' .
-                                               '<td><a id="' . $name . 
'-suggest-clear" href="javascript:void(0)" onclick="suggestClearClicked(event, 
this)">' . wfMsg( 'ow_suggest_clear' ) . '</a></td>' .
-                                               '<td style="white-space: 
nowrap"><a id="' . $name . '-suggest-previous" href="javascript:void(0)" 
class="suggest-previous" onclick="suggestPreviousClicked(event, this)"><img 
src="' . $wgScriptPath . '/extensions/WikiLexicalData/Images/ArrowLeft.png" 
alt="' . wfMsg( 'ow_suggest_previous' ) . '"/> ' . wfMsg( 'ow_suggest_previous' 
) . '</a></td>' .
-                                               '<td style="white-space: 
nowrap"><a id="' . $name . '-suggest-next" href="javascript:void(0)" 
class="suggest-next" onclick="suggestNextClicked(event, this)">' . wfMsg( 
'ow_suggest_next' ) . ' <img src="' . $wgScriptPath . 
'/extensions/WikiLexicalData/Images/ArrowRight.png" alt="' . wfMsg( 
'ow_suggest_next' ) . '"/></a></td>' .
-                                               '<td><a id="' . $name . 
'-suggest-close" href="javascript:void(0)" onclick="suggestCloseClicked(event, 
this)">[X]</a></td>' .
-                                       '</tr>' .
-                               '</table></div>' .
-                               '<div><table id="' . $name . 
'-suggest-table"><tr><td></td></tr></table></div>' .
-                       '</div></div>';
-       }
+       $result .=
+               '<div class="suggest-drop-down"><div id="' . $name . 
'-suggest-div" class="suggest-div">' .
+                       '<div><table>' .
+                               '<tr>' .
+                                       '<td><input type="text" id="' . $name . 
'-suggest-text" autocomplete="off" class="suggest-text"></input></td>' .
+                                       '<td id="' . $name . '-suggest-clear" 
class="suggest-clear">' . wfMsg( 'ow_suggest_clear' ) . '</td>' .
+                                       '<td id="' . $name . 
'-suggest-previous" class="suggest-previous"><img src="' . $wgScriptPath . 
'/extensions/WikiLexicalData/Images/ArrowLeft.png" alt="' . wfMsg( 
'ow_suggest_previous' ) . '"/> ' . wfMsg( 'ow_suggest_previous' ) . '</td>' .
+                                       '<td id="' . $name . '-suggest-next" 
class="suggest-next">' . wfMsg( 'ow_suggest_next' ) . ' <img src="' . 
$wgScriptPath . '/extensions/WikiLexicalData/Images/ArrowRight.png" alt="' . 
wfMsg( 'ow_suggest_next' ) . '"/></td>' .
+                                       '<td id="' . $name . '-suggest-close" 
class="suggest-close">[X]</td>' .
+                               '</tr>' .
+                       '</table></div>' .
+                       '<div><table id="' . $name . 
'-suggest-table"><tr><td></td></tr></table></div>' .
+               '</div></div>';
+
        return $result;
 }
 
 function getStaticSuggest( $name, $suggestions, $idColumns = 1, $value = 0, 
$label = '', $displayLabelColumns = array( 0 ) ) {
-       if ( $label == "" )
+       if ( $label == "" ) {
                $label = 
'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;';
-
+       }
        $result =
                '<span class="suggest">' .
 //                     '<input type="hidden" id="'. $name .'-suggest-query" 
value="'. $query .'"/>' .
@@ -187,17 +172,16 @@
                $result .= '<input type="hidden" id="' . $name . 
'-suggest-id-columns" value="' . $idColumns . '"/>';
 
        $result .=
-                       '<a id="' . $name . '-suggest-link" 
class="suggest-link" onclick="suggestLinkClicked(event, this);" title="' . 
wfMsgSc( "SuggestHint" ) . '">' . $label . '</a>' .
+                       '<a id="' . $name . '-suggest-link" 
class="suggest-link" title="' . wfMsgSc( "SuggestHint" ) . '">' . $label . 
'</a>' .
                '</span>' .
-        '<div class="suggest-drop-down" style="position: relative"><div id="' 
. $name . '-suggest-div" style="position: absolute; left: 0px; top: 0px; 
border: 1px solid #000000; display: none; background-color: white; padding: 
4px">' .
-               '<div><table><tr><td>' .
-//             '<input type="text" id="'. $name .'-suggest-text" 
autocomplete="off" onkeyup="suggestTextChanged(this)" style="width: 
300px"></input>' .
-               '</td><td><a id="' . $name . '-suggest-clear" 
href="javascript:void(0)" onclick="suggestClearClicked(event, this)">' . wfMsg( 
'ow_suggest_clear' ) . '</a></td><td><a id="' . $name . '-suggest-close" 
href="#' . $name . '-suggest-link" onclick="suggestCloseClicked(event, 
this)">[X]</a></td></tr></table></div>' .
-               '<div>' . $suggestions .
-               // <table id="'. $name 
.'-suggest-table"><tr><td></td></tr></table>
-               '</div>' .
-        '</div></div>';
-       
+               '<div class="suggest-drop-down" style="position: relative"><div 
id="' . $name . '-suggest-div" style="position: absolute; left: 0px; top: 0px; 
border: 1px solid #000000; display: none; background-color: white; padding: 
4px">' .
+                       '<div><table><tr><td>' .
+                       '</td><td><a id="' . $name . '-suggest-clear" 
href="javascript:void(0)" class="suggest-clear">' . wfMsg( 'ow_suggest_clear' ) 
. '</a></td>' .
+                       '<td><a id="' . $name . '-suggest-close" href="#' . 
$name . '-suggest-link" class="suggest-close">[X]</a></td></tr></table></div>' .
+                       '<div>' . $suggestions .
+                       '</div>' .
+               '</div></div>';
+
        return $result;
 }
 
diff --git a/OmegaWiki/resources/suggest.css b/OmegaWiki/resources/suggest.css
index cac7113..7152b0a 100644
--- a/OmegaWiki/resources/suggest.css
+++ b/OmegaWiki/resources/suggest.css
@@ -13,7 +13,8 @@
        background-position: center right;
 }
 
-.wiki-data-table td .suggest-link, .option-panel td .suggest-link {
+.wiki-data-table td .suggest-link,
+.option-panel td .suggest-link {
        display: block;
        zoom: 1;
        left: 0px;
@@ -35,19 +36,82 @@
        background-image: url("../../Images/ArrowButtonDown1px.png");
 }
 
-.suggest-drop-down {
-       /*font-size: 1em;*/
-       font-size: 13px;
-}      
-
-.suggest-link, .suggest-link:hover, .suggest-link:active, 
.suggest-link:visited {
+.suggest-link,
+.suggest-link:hover,
+.suggest-link:active,
+.suggest-link:visited {
        color: #000000;
        text-decoration: none;
        white-space: nowrap;
 }
 
-td .suggest-link, td .suggest-link:hover, td .suggest-link:active, td 
.suggest-link:visited {
+td .suggest-link,
+td .suggest-link:hover,
+td .suggest-link:active,
+td .suggest-link:visited {
        white-space: normal;
+}
+
+.suggest-div {
+       position: absolute;
+       left: 0px;
+       top: 0px;
+       border: 1px solid #000000;
+       display: none;
+       background-color: white;
+       padding: 4px;
+}
+
+.suggest-drop-down {
+       /*font-size: 1em;*/
+       font-size: 13px;
+       position: relative;
+}      
+
+.suggest-loading {
+       background-color: #DDDDDD;
+}
+
+.suggest-clear {
+       cursor: pointer;
+       color:blue;
+}
+.suggest-clear:hover {
+       text-decoration:underline;
+}
+
+.suggest-close {
+       cursor: pointer;
+       color:blue;
+}
+.suggest-close:hover {
+       text-decoration:underline;
+}
+
+.suggest-next {
+       color:blue;
+       margin-left: 2px;
+       margin-right: 8px;
+       white-space: nowrap;
+       cursor: pointer;
+}
+.suggest-next:hover {
+       text-decoration:underline;
+}
+
+.suggest-previous {
+       color:blue;
+       margin-left: 8px;
+       margin-right: 2px;
+       white-space: nowrap;
+       cursor: pointer;
+}
+.suggest-previous:hover {
+       text-decoration:underline;
+}
+
+.suggest-text {
+       width: 300px;
 }
 
 .suggestion-row {
@@ -55,10 +119,12 @@
        margin: 0px;
 }
 
-.suggestion-row.active td.column-even, .suggestion-row.active td.column-odd {
-       /*background-color: #DDDDDD;*/
-       background-color: #CECCF7;
+.suggestion-row {
        cursor: pointer;
+}
+.suggestion-row.active td.column-even,
+.suggestion-row.active td.column-odd {
+       background-color: #CECCF7;
 }
 
 .suggestion-row td {
@@ -71,16 +137,3 @@
        white-space: nowrap;
 }
 
-.suggest-loading {
-       background-color: #DDDDDD;
-}
-
-.suggest-next {
-       margin-left: 2px;
-       margin-right: 8px;
-}
-
-.suggest-previous {
-       margin-left: 8px;
-       margin-right: 2px;
-}
\ No newline at end of file
diff --git a/OmegaWiki/resources/suggest.js b/OmegaWiki/resources/suggest.js
index a6306fc..ef07717 100644
--- a/OmegaWiki/resources/suggest.js
+++ b/OmegaWiki/resources/suggest.js
@@ -1,102 +1,138 @@
-window.getHTTPObject = function () {
-       var xmlhttp;
+jQuery(document).ready(function( $ ) {
 
-       try {
-               xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
-       } catch (e) {
-               try {
-                       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
-               } catch (e) {
-                       try {
-                               xmlhttp = new XMLHttpRequest();
-                       } catch (e) {
-                               xmlhttp = false;
-                       }
+       var suggestionTimeOut = null;
+
+       $(".remove-checkbox").click(function(event) {
+               $(this).parent().parent().toggleClass('to-be-removed');
+       });
+
+       $(".suggest-next").click(function(event) {
+               var suggestPrefix = getSuggestPrefix( this, 'next');
+               var suggestOffset = document.getElementById(suggestPrefix + 
'offset');
+               suggestOffset.value = parseInt(suggestOffset.value) + 10;
+               updateSuggestions(suggestPrefix);
+               stopEventHandling(event);
+       });
+
+       $(".suggest-previous").click(function(event) {
+               var suggestPrefix = getSuggestPrefix( this, 'previous');
+               var suggestOffset = document.getElementById(suggestPrefix + 
'offset');
+               suggestOffset.value = Math.max(parseInt(suggestOffset.value) - 
10, 0);
+               updateSuggestions(suggestPrefix);
+               stopEventHandling(event);
+       });
+
+       $(".suggest-close").click(function(event) {
+               var suggestPrefix = getSuggestPrefix( this, 'close');
+               $("#" + suggestPrefix + "div").hide();
+               stopEventHandling(event);
+       });
+
+       $(".suggest-clear").click(function(event) {
+               updateSuggestValue(getSuggestPrefix(this, 'clear'), ""
+                       , 
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+               stopEventHandling(event);
+       });
+
+       $(".suggest-link").click(function(event) {
+               var suggestLinkId = this.id;
+               // removing the "link" at the end of the Id
+               var suggestPrefix = getSuggestPrefix( this, 'link');
+
+               $("#" + suggestPrefix + "div").show();
+
+               var suggestField = document.getElementById(suggestPrefix + 
"text");
+               if (suggestField != null) {
+                       suggestField.focus();
+                       updateSuggestions(suggestPrefix);
+               }
+               stopEventHandling(event);
+       });
+
+       $(".suggest-text").keyup(function(event) {
+               var suggestPrefix = getSuggestPrefix( this, 'text');
+               scheduleUpdateSuggestions( suggestPrefix );
+       });
+
+       function getSuggestPrefix( node, postFix ) {
+               var nodeId = node.id;
+               return stripSuffix( nodeId, postFix );
+       }
+
+       function scheduleUpdateSuggestions( suggestPrefix ) {
+               if ( suggestionTimeOut != null ) {
+                       clearTimeout( suggestionTimeOut );
+               }
+               $("#" + suggestPrefix + "offset").val( 0 );
+               suggestionTimeOut = setTimeout(function() {
+                       updateSuggestions( suggestPrefix )
+               }, 600);
+       }
+
+       function stripSuffix( source, suffix ) {
+               return source.substr(0, source.length - suffix.length);
+       }
+
+       function updateSuggestValue( suggestPrefix, value, displayValue ) {
+               var suggestLink = document.getElementById(suggestPrefix + 
"link");
+               var suggestValue = document.getElementById(suggestPrefix + 
"value");
+               var suggestDiv = document.getElementById(suggestPrefix + "div");
+               var suggestField = 
document.getElementById(stripSuffix(suggestPrefix, "-suggest-"));
+
+               suggestField.value = value;
+
+               suggestLink.innerHTML = displayValue;
+               suggestDiv.style.display = 'none';
+               suggestLink.focus();
+
+               var suggestOnUpdate = document.getElementById(suggestPrefix + 
"parameter-onUpdate");
+               if(suggestOnUpdate != null) {
+                       eval(suggestOnUpdate.value + "," + value + ")");
                }
        }
 
-       return xmlhttp;
-}
+       /*
+       * suggests a list (of languages, classes...) according to the letters 
typed in the query field
+       * or to the arrows "next" "previous"
+       */
+       function updateSuggestions( suggestPrefix ) {
+               var table = document.getElementById(suggestPrefix + "table");
+               var suggestQuery = document.getElementById(suggestPrefix + 
"query").value;
+               var suggestOffset = document.getElementById(suggestPrefix + 
"offset").value;
+               var dataSet = document.getElementById(suggestPrefix + 
"dataset").value;
 
-window.getSuggestPrefix = function (node, postFix) {
-       var nodeId = node.id;
-       return stripSuffix(nodeId, postFix);
-}
+               suggestText = document.getElementById(suggestPrefix + "text");
+               suggestText.className = "suggest-loading";
+               var suggestTextVal = suggestText.value ; // we copy the value 
to compare it later to the current value
 
-window.leftTrim = function (sString) {
-       while (sString.substring(0,1) == ' ' || sString.substring(0,1) == "\n") 
{
-                       sString = sString.substring(1, sString.length);
-               }
-       return sString;
-}
+               var suggestAttributesLevel = 
document.getElementById(suggestPrefix + "parameter-level");
+               var suggestDefinedMeaningId = 
document.getElementById(suggestPrefix + "parameter-definedMeaningId");
+               var suggestSyntransId = document.getElementById(suggestPrefix + 
"parameter-syntransId");
+               var suggestAnnotationAttributeId = 
document.getElementById(suggestPrefix + "parameter-annotationAttributeId");
 
-// remove accents for comparison
-window.normalizeText = function (text) {
-       text = text.replace(new RegExp("[àáâãäå]", 'g'),"a");
-       text = text.replace(new RegExp("æ", 'g'),"ae");
-       text = text.replace(new RegExp("ç", 'g'),"c");
-       text = text.replace(new RegExp("[èéêë]", 'g'),"e");
-       text = text.replace(new RegExp("[ìíîï]", 'g'),"i");
-       text = text.replace(new RegExp("ñ", 'g'),"n");
-       text = text.replace(new RegExp("[òóôõö]", 'g'),"o");
-       text = text.replace(new RegExp("œ", 'g'),"oe");
-       text = text.replace(new RegExp("[ùúûü]", 'g'),"u");
-       text = text.replace(new RegExp("[ýÿ]", 'g'),"y");
-       return text ;
-}
+               URL = wgScript +
+                       '?title=Special:Suggest&search-text=' + 
encodeURI(suggestTextVal) +
+                       '&prefix=' + encodeURI(suggestPrefix) +
+                       '&query=' + encodeURI(suggestQuery) +
+                       '&offset=' + encodeURI(suggestOffset) +
+                       '&dataset='+dataSet;
 
-
-/*
-* suggests a list (of languages, classes...) according to the letters typed in 
the query field
-* or to the arrows "next" "previous"
-*/
-window.updateSuggestions = function (suggestPrefix) {
-       var http = getHTTPObject();
-       var table = document.getElementById(suggestPrefix + "table");
-       var suggestQuery = document.getElementById(suggestPrefix + 
"query").value;
-       var suggestOffset = document.getElementById(suggestPrefix + 
"offset").value;
-       var dataSet = document.getElementById(suggestPrefix + "dataset").value; 
-
-       suggestText = document.getElementById(suggestPrefix + "text");
-       suggestText.className = "suggest-loading";
-       var suggestTextVal = suggestText.value ; // we copy the value to 
compare it later to the current value
-
-       var suggestAttributesLevel = document.getElementById(suggestPrefix + 
"parameter-level");
-       var suggestDefinedMeaningId = document.getElementById(suggestPrefix + 
"parameter-definedMeaningId");
-       var suggestSyntransId = document.getElementById(suggestPrefix + 
"parameter-syntransId");
-       var suggestAnnotationAttributeId = 
document.getElementById(suggestPrefix + "parameter-annotationAttributeId");
-       
-       var URL = 'index.php';
-       var location = "" + document.location;
-       
-       if (location.indexOf('index.php/') > 0) URL = '../' + URL;
-
-       URL = 
-               wgScript +
-               '?title=Special:Suggest&search-text=' + 
encodeURI(suggestTextVal) + 
-               '&prefix=' + encodeURI(suggestPrefix) + 
-               '&query=' + encodeURI(suggestQuery) + 
-               '&offset=' + encodeURI(suggestOffset) + 
-               '&dataset='+dataSet;
-
-       if (suggestAttributesLevel != null)
-               URL = URL + '&attributesLevel=' + 
encodeURI(suggestAttributesLevel.value);
-       
-       if (suggestDefinedMeaningId != null) 
-               URL = URL + '&definedMeaningId=' + 
encodeURI(suggestDefinedMeaningId.value);
+               if (suggestAttributesLevel != null)
+                       URL = URL + '&attributesLevel=' + 
encodeURI(suggestAttributesLevel.value);
                
-       if (suggestSyntransId != null) 
-               URL = URL + '&syntransId=' + encodeURI(suggestSyntransId.value);
-               
-       if (suggestAnnotationAttributeId != null)
-               URL = URL + '&annotationAttributeId=' + 
encodeURI(suggestAnnotationAttributeId.value);
+               if (suggestDefinedMeaningId != null)
+                       URL = URL + '&definedMeaningId=' + 
encodeURI(suggestDefinedMeaningId.value);
+
+               if (suggestSyntransId != null)
+                       URL = URL + '&syntransId=' + 
encodeURI(suggestSyntransId.value);
                        
-       http.onreadystatechange = function() {
-               if (http.readyState == 4) {
+               if (suggestAnnotationAttributeId != null)
+                       URL = URL + '&annotationAttributeId=' + 
encodeURI(suggestAnnotationAttributeId.value);
+
+               $.get( URL, function(data) {
                        var newTable = document.createElement('div');
-                       //alert(http.responseText);
-                       if (http.responseText != '') {
-                               newTable.innerHTML = 
leftTrim(http.responseText);
+                       if (data != '') {
+                               newTable.innerHTML = leftTrim( data );
                                
                                // put the searched text in bold within the 
returned string
                                if ( suggestTextVal != "" ) {
@@ -124,189 +160,112 @@
 
                        // comparing the stored value send in the URL, and the 
actual value
                        if ( suggestTextVal != suggestText.value ) {
-                               window.suggestionTimeOut = 
setTimeout("updateSuggestions(\"" + suggestPrefix + "\")", 100);
+                               suggestionTimeOut = setTimeout( function() {
+                                       updateSuggestions( suggestPrefix )
+                               }, 100);
                        }
-               }
-       };
-
-       http.open('GET', URL, true);
-       http.send(null);
-}
-
-window.suggestionTimeOut = null;
-
-window.scheduleUpdateSuggestions = function (suggestPrefix) {
-       if (window.suggestionTimeOut != null)
-               clearTimeout(window.suggestionTimeOut);
-
-       var suggestOffset = document.getElementById(suggestPrefix + "offset");
-       suggestOffset.value = 0;
-       window.suggestionTimeOut = setTimeout("updateSuggestions(\"" + 
suggestPrefix + "\")", 600);
-}
-
-window.suggestTextChanged = function (suggestText) {
-       scheduleUpdateSuggestions(getSuggestPrefix(suggestText, "text"));
-}
-
-window.mouseOverRow = function (row) {
-       row.className = "suggestion-row active";
-}
-
-window.mouseOutRow = function (row) {
-       row.className = "suggestion-row inactive";
-}
-
-window.stopEventHandling = function (event) {
-       event.cancelBubble = true;
-
-       if (event.stopPropagation)
-               event.stopPropagation();
-
-       if (event.preventDefault)
-               event.preventDefault();
-       else
-               event.returnValue = false;
-}
-
-window.stripSuffix = function (source, suffix) {
-       return source.substr(0, source.length - suffix.length);
-}
-
-window.suggestLinkClicked = function (event, suggestLink) {
-       var suggestLinkId = suggestLink.id;
-       // removing the "link" at the end of the Id
-       var suggestPrefix = suggestLinkId.substr(0, suggestLinkId.length - 4);
-
-       var suggestDiv = document.getElementById(suggestPrefix + "div");
-       var suggestField = document.getElementById(suggestPrefix + "text");
-       suggestDiv.style.display = 'block';
-
-       if (suggestField != null) {
-               suggestField.focus();
-               updateSuggestions(suggestPrefix);
+               });
        }
 
-       stopEventHandling(event);
-}
+       function leftTrim( sString ) {
+               while (sString.substring(0,1) == ' ' || sString.substring(0,1) 
== "\n") {
+                               sString = sString.substring(1, sString.length);
+                       }
+               return sString;
+       }
 
-window.updateSelectOptions = function (id, objectId, value) {
-       var http = getHTTPObject();
-       var URL = 'index.php';
-       var location = "" + document.location;
+       // remove accents for comparison
+       function normalizeText( text ) {
+               text = text.replace(new RegExp("[àáâãäå]", 'g'),"a");
+               text = text.replace(new RegExp("æ", 'g'),"ae");
+               text = text.replace(new RegExp("ç", 'g'),"c");
+               text = text.replace(new RegExp("[èéêë]", 'g'),"e");
+               text = text.replace(new RegExp("[ìíîï]", 'g'),"i");
+               text = text.replace(new RegExp("ñ", 'g'),"n");
+               text = text.replace(new RegExp("[òóôõö]", 'g'),"o");
+               text = text.replace(new RegExp("œ", 'g'),"oe");
+               text = text.replace(new RegExp("[ùúûü]", 'g'),"u");
+               text = text.replace(new RegExp("[ýÿ]", 'g'),"y");
+               return text ;
+       }
 
-       if (location.indexOf('index.php/') > 0) URL = '../' + URL;
-       http.open('GET', URL + '/Special:Select?optnAtt=' + encodeURI(value) + 
'&attribute-object=' + encodeURI(objectId), true);
-       http.send(null);
+       function stopEventHandling( event ) {
+               event.cancelBubble = true;
 
-       http.onreadystatechange = function() {
-               if (http.readyState == 4) {
+               if (event.stopPropagation) {
+                       event.stopPropagation();
+               }
+               if (event.preventDefault) {
+                       event.preventDefault();
+               } else {
+                       event.returnValue = false;
+               }
+       }
+
+       function updateSelectOptions(id, objectId, value) {
+               var URL = 'index.php';
+               var location = "" + document.location;
+
+               if (location.indexOf('index.php/') > 0) {
+                       URL = '../' + URL;
+               }
+               URL = URL + '/Special:Select?optnAtt=' + encodeURI(value) + 
'&attribute-object=' + encodeURI(objectId);
+               alert(URL);
+               $.get( URL, function(data) {
                        var select = document.getElementById(id);
                        select.options.length = 0;
-                       var options = http.responseText.split("\n");
+                       var options = data.split("\n");
 
                        for (idx in options) {
                                option = options[idx].split(";");
                                select.add(new 
Option(option[1],option[0]),null);
                        }
-               }
-       };
-}
-
-window.updateSuggestValue = function (suggestPrefix, value, displayValue) {
-       var suggestLink = document.getElementById(suggestPrefix + "link");
-       var suggestValue = document.getElementById(suggestPrefix + "value");
-       var suggestDiv = document.getElementById(suggestPrefix + "div");
-       var suggestField = document.getElementById(stripSuffix(suggestPrefix, 
"-suggest-"));
-
-       suggestField.value = value;
-
-       suggestLink.innerHTML = displayValue;
-       suggestDiv.style.display = 'none';
-       suggestLink.focus();
-
-       var suggestOnUpdate = document.getElementById(suggestPrefix + 
"parameter-onUpdate");
-       if(suggestOnUpdate != null) 
-               eval(suggestOnUpdate.value + "," + value + ")");
-}
-
-window.suggestClearClicked = function (event, suggestClear) {
-       updateSuggestValue(getSuggestPrefix(suggestClear, 'clear'), "", 
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
-       stopEventHandling(event);
-}
-
-window.suggestCloseClicked = function (event, suggestClose) {
-       var suggestPrefix = getSuggestPrefix(suggestClose, 'close');
-       var suggestDiv = document.getElementById(suggestPrefix + 'div');
-       suggestDiv.style.display = 'none';
-       stopEventHandling(event);
-}
-
-window.suggestNextClicked = function (event, suggestNext, dataSetOverride) {
-       var suggestPrefix = getSuggestPrefix(suggestNext, 'next');
-       var suggestOffset = document.getElementById(suggestPrefix + 'offset');
-       suggestOffset.value = parseInt(suggestOffset.value) + 10;
-       updateSuggestions(suggestPrefix);
-       stopEventHandling(event);
-}
-
-window.suggestPreviousClicked = function (event, suggestPrevious) {
-       var suggestPrefix = getSuggestPrefix(suggestPrevious, 'previous');
-       var suggestOffset = document.getElementById(suggestPrefix + 'offset');
-       suggestOffset.value = Math.max(parseInt(suggestOffset.value) - 10, 0);
-       updateSuggestions(suggestPrefix);
-       stopEventHandling(event);
-}
-
-window.suggestRowClicked = function (event, suggestRow) {
-       var suggestPrefix = 
getSuggestPrefix(suggestRow.parentNode.parentNode.parentNode.parentNode, 
"div"); 
-       var idColumnsField = document.getElementById(suggestPrefix + 
"id-columns");
-       var displayLabelField = document.getElementById(suggestPrefix + 
"label-columns");
-       var displayLabelColumnIndices = displayLabelField.value.split(", ");
-       var labels = new Array();
-       
-       for (var i = 0; i < displayLabelColumnIndices.length; i++) {
-               var columnValue = 
suggestRow.getElementsByTagName('td')[displayLabelColumnIndices[i]].innerHTML;
-               
-               if (columnValue != "") {
-                       columnValue = columnValue.replace ("<b>","");
-                       columnValue = columnValue.replace ("</b>","");
-                       labels.push(columnValue);
-               }
+               });
        }
-       
-       var idColumns = 1;
-       
-       if (idColumnsField != null)
-               idColumns = idColumnsField.value;
-       
-       var values = suggestRow.id.split('-');
-       var ids = new Array();
-       
-       for (var i = idColumns - 1; i >= 0; i--) 
-               ids.push(values[values.length - i - 1]);
 
-       updateSuggestValue(suggestPrefix, ids.join('-'), labels.join(', '));
-       stopEventHandling(event);
-}
+       /* some more functions to load only when ajax is complete
+               * because the class "suggestion-row" is not known before that
+               * and it does not work if the functions are defined outside
+               * of ajaxcomplete
+               */
+       $(document).ajaxComplete(function() {
+               $(".suggestion-row").mouseover(function() {
+                       $(this).addClass('active');
+               }).mouseout(function() {
+                       $(this).removeClass('active');
+               });
 
-window.enableChildNodes = function (node, enabled) {
-       if (enabled)
-               var disabled = "";
-       else
-               var disabled = "disabled";
+               $(".suggestion-row").click(function() {
+                       var suggestPrefix = 
getSuggestPrefix(this.parentNode.parentNode.parentNode.parentNode, "div");
+                       var idColumnsField = 
document.getElementById(suggestPrefix + "id-columns");
+                       var displayLabelField = 
document.getElementById(suggestPrefix + "label-columns");
+                       var displayLabelColumnIndices = 
displayLabelField.value.split(", ");
+                       var labels = new Array();
 
-       childNodes = node.getElementsByTagName('select');
+                       for (var i = 0; i < displayLabelColumnIndices.length; 
i++) {
+                               var columnValue = 
this.getElementsByTagName('td')[displayLabelColumnIndices[i]].innerHTML;
 
-       for (var i = 0; i < childNodes.length; i++)
-               childNodes[i].disabled = disabled;
-}
+                               if (columnValue != "") {
+                                       columnValue = columnValue.replace 
("<b>","");
+                                       columnValue = columnValue.replace 
("</b>","");
+                                       labels.push(columnValue);
+                               }
+                       }
 
-window.removeClicked = function (checkBox) {
-       var container = checkBox.parentNode.parentNode;
+                       var idColumns = 1;
 
-       if (checkBox.checked)
-               container.className = "to-be-removed";
-       else
-               container.className = "";
+                       if (idColumnsField != null) {
+                               idColumns = idColumnsField.value;
+                       }
+                       var values = this.id.split('-');
+                       var ids = new Array();
 
-}
+                       for (var i = idColumns - 1; i >= 0; i--) {
+                               ids.push(values[values.length - i - 1]);
+                       }
+                       updateSuggestValue(suggestPrefix, ids.join('-'), 
labels.join(', '));
+                       stopEventHandling(event);
+               });
+       });
+
+});

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ide21c3ef2c979acb61a1fb598222ac7ba1acddbd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikiLexicalData
Gerrit-Branch: master
Gerrit-Owner: Kipcool <kipmas...@gmail.com>
Gerrit-Reviewer: Kipcool <kipmas...@gmail.com>

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

Reply via email to