# HG changeset patch
# User Dan
# Date 1219332296 14400
# Node ID dd80cde96a6c3d61cce769b35a64ca6f47679d4a
# Parent 491314c44d23c16dbd45d39a21236ab92fcbf448
Autocomplete further stabilized. Made Special:PasswordReset and Special:Register prevent use if logged in.
diff -r 491314c44d23 -r dd80cde96a6c includes/clientside/static/autofill.js
--- a/includes/clientside/static/autofill.js Thu Aug 21 08:24:37 2008 -0400
+++ b/includes/clientside/static/autofill.js Thu Aug 21 11:24:56 2008 -0400
@@ -4,7 +4,7 @@
* can be created describing how to draw each row.
*/
-var autofill_schemas = {};
+var autofill_schemas = window.autofill_schemas || {};
/**
* SCHEMA - GENERIC
@@ -19,18 +19,43 @@
}
}
+/**
+ * SCHEMA - USERNAME
+ */
+
autofill_schemas.username = {
init: function(element, fillclass, params)
{
+ params = params || {};
+ var allow_anon = params.allow_anon ? '1' : '0';
+ $(element).autocomplete(makeUrlNS('Special', 'Autofill', 'type=' + fillclass + '&allow_anon=' + allow_anon) + '&userinput=', {
+ minChars: 3,
+ formatItem: function(row, _, __)
+ {
+ var html = row.name_highlight + ' – ';
+ html += '' + row.rank_title + '';
+ return html;
+ },
+ tableHeader: '
' + $lang.get('user_autofill_heading_suggestions') + ' |
',
+ showWhenNoResults: true,
+ noResultsHTML: '' + $lang.get('user_autofill_msg_no_suggestions') + ' |
',
+ });
+ }
+}
+
+autofill_schemas.page = {
+ init: function(element, fillclass, params)
+ {
$(element).autocomplete(makeUrlNS('Special', 'Autofill', 'type=' + fillclass) + '&userinput=', {
minChars: 3,
formatItem: function(row, _, __)
{
- var html = row.name_highlight + '
';
- html += '' + row.rank_title + '';
+ var html = '' + row.name_highlight + '';
+ html += ' – ' + row.pid_highlight;
return html;
},
- tableHeader: '' + $lang.get('user_autofill_heading_suggestions') + ' |
',
+ showWhenNoResults: true,
+ noResultsHTML: '' + $lang.get('user_autofill_msg_no_suggestions') + ' |
',
});
}
}
@@ -48,7 +73,7 @@
{
// we have at least one input that needs to be made an autofill element.
// is spry data loaded?
- load_component('template-compiler');
+ load_component('l10n');
}
this.loaded = true;
@@ -59,8 +84,11 @@
}
}
-function autofill_init_element(element, params)
+window.autofill_init_element = function(element, params)
{
+ if ( element.af_initted )
+ return false;
+
params = params || {};
// assign an ID if it doesn't have one yet
if ( !element.id )
@@ -84,14 +112,14 @@
element.af_initted = true;
}
-function AutofillUsername(el, allow_anon)
+window.AutofillUsername = function(el, allow_anon)
{
el.onkeyup = null;
el.className = 'autofill username';
autofill_init_element(el, { allow_anon: allow_anon });
}
-function AutofillPage(el)
+window.AutofillPage = function(el)
{
el.onkeyup = null;
el.className = 'autofill page';
@@ -100,6 +128,7 @@
addOnloadHook(function()
{
+ load_component('l10n');
load_component('jquery');
load_component('jquery-ui');
@@ -130,10 +159,6 @@
if( options.width > 0 ) {
$results.css("width", options.width);
}
- else
- {
- $results.css("width", "200px");
- }
// Add to body element
$("body").append(results);
@@ -145,7 +170,9 @@
var active = -1;
var cache = {};
var keyb = false;
- var hasFocus = false;
+ // hasFocus was false by default, see if making it true helps
+ var hasFocus = true;
+ var hasNoResults = false;
var lastKeyPressCode = null;
var mouseDownOnSelect = false;
var hidingResults = false;
@@ -186,11 +213,14 @@
}
// add the data items to the cache
- for( var k in stMatchSets ) {
- // increase the cache size
- options.cacheLength++;
- // add to the cache
- addToCache(k, stMatchSets[k]);
+ if ( options.cacheLength )
+ {
+ for( var k in stMatchSets ) {
+ // increase the cache size
+ options.cacheLength++;
+ // add to the cache
+ addToCache(k, stMatchSets[k]);
+ }
}
}
@@ -254,7 +284,7 @@
function moveSelect(step) {
var lis = $("td", results);
- if (!lis) return;
+ if (!lis || hasNoResults) return;
active += step;
@@ -355,7 +385,11 @@
});
if ( !$results.is(":visible") )
{
- $results.show("blind", {}, 350);
+ $results.show("blind", {}, 200);
+ }
+ else
+ {
+ $results.show();
}
};
@@ -395,7 +429,15 @@
results.innerHTML = "";
// if the field no longer has focus or if there are no matches, do not display the drop down
- if( !hasFocus || data.length == 0 ) return hideResultsNow();
+ if( !hasFocus )
+ {
+ return hideResultsNow();
+ }
+ if ( data.length == 0 && !options.showWhenNoResults )
+ {
+ return hideResultsNow();
+ }
+ hasNoResults = false;
if ($.browser.msie) {
// we put a styled iframe behind the calendar so HTML SELECT elements don't show through
@@ -425,20 +467,44 @@
{
ul.innerHTML = options.tableHeader;
}
-
+
+ if ( num == 0 )
+ {
+ // not showing any results
+ if ( options.noResultsHTML )
+ ul.innerHTML += options.noResultsHTML;
+
+ hasNoResults = true;
+ return ul;
+ }
+
// limited results to a max number
if( (options.maxItemsToShow > 0) && (options.maxItemsToShow < num) ) num = options.maxItemsToShow;
-
+
for (var i=0; i < num; i++) {
var row = data[i];
if (!row) continue;
+ console.debug('row good ', row);
+
+ if ( typeof(row[0]) != 'string' )
+ {
+ // last ditch resort if it's a 1.1.4 autocomplete plugin that doesn't provide an automatic result.
+ // hopefully this doesn't slow it down a lot.
+ for ( var i in row )
+ {
+ if ( i == "0" || i == 0 )
+ break;
+ row[0] = row[i];
+ break;
+ }
+ }
+
var li = document.createElement("tr");
var td = document.createElement("td");
td.selectValue = row[0];
$(td).addClass('row1');
$(td).css("font-size", "smaller");
- console.debug(ul, li, td);
if ( options.formatItem )
{
@@ -449,14 +515,6 @@
td.innerHTML = row[0];
}
li.appendChild(td);
- var extra = null;
- if (row.length > 1) {
- extra = [];
- for (var j=1; j < row.length; j++) {
- extra[extra.length] = row[j];
- }
- }
- td.extra = extra;
ul.appendChild(li);
$(td).hover(
@@ -467,37 +525,8 @@
e.stopPropagation();
selectItem(this)
});
-
- /*
- var li = document.createElement("li");
- if (options.formatItem) {
- li.innerHTML = options.formatItem(row, i, num);
- li.selectValue = row[0];
- } else {
- li.innerHTML = row[0];
- li.selectValue = row[0];
- }
- var extra = null;
- if (row.length > 1) {
- extra = [];
- for (var j=1; j < row.length; j++) {
- extra[extra.length] = row[j];
- }
- }
- li.extra = extra;
- ul.appendChild(li);
-
- $(li).hover(
- function() { $("li", ul).removeClass("ac_over"); $(this).addClass("ac_over"); active = $("li", ul).indexOf($(this).get(0)); },
- function() { $(this).removeClass("ac_over"); }
- ).click(function(e) {
- e.preventDefault();
- e.stopPropagation();
- selectItem(this)
- });
- */
-
}
+
$(ul).mousedown(function() {
mouseDownOnSelect = true;
}).mouseup(function() {
@@ -664,7 +693,7 @@
matchCase: 0,
matchSubset: 1,
matchContains: 0,
- cacheLength: 1,
+ cacheLength: false,
mustMatch: 0,
extraParams: {},
loadingClass: "ac_loading",
@@ -672,6 +701,7 @@
selectOnly: false,
maxItemsToShow: -1,
autoFill: false,
+ showWhenNoResults: false,
width: 0
}, options);
options.width = parseInt(options.width, 10);
diff -r 491314c44d23 -r dd80cde96a6c includes/clientside/static/editor.js
--- a/includes/clientside/static/editor.js Thu Aug 21 08:24:37 2008 -0400
+++ b/includes/clientside/static/editor.js Thu Aug 21 11:24:56 2008 -0400
@@ -4,6 +4,7 @@
var AUTOSAVE_TIMEOUT = 15;
var AutosaveTimeoutObj = null;
var editor_img_path = cdnPath + '/images/editor';
+var editor_save_lock = false;
window.ajaxEditor = function(revid)
{
@@ -521,6 +522,11 @@
{
if ( !is_draft )
ajaxSetEditorLoading();
+ if ( is_draft && editor_save_lock )
+ return false;
+ else
+ editor_save_lock = true;
+
var ta_content = ( text_override ) ? text_override : $dynano('ajaxEditArea').getContent();
if ( !is_draft && ( ta_content == '' || ta_content == '' || ta_content == '
' ) )
@@ -659,6 +665,7 @@
// The save was successful; reset flags and make another request for the new page content
setAjaxLoading();
editor_open = false;
+ editor_save_lock = false;
enableUnload();
changeOpac(0, 'ajaxEditContainer');
ajaxGet(stdAjaxPrefix + '&_mode=getpage&noheaders', function()
diff -r 491314c44d23 -r dd80cde96a6c includes/clientside/static/enano-lib-basic.js
--- a/includes/clientside/static/enano-lib-basic.js Thu Aug 21 08:24:37 2008 -0400
+++ b/includes/clientside/static/enano-lib-basic.js Thu Aug 21 11:24:56 2008 -0400
@@ -377,17 +377,6 @@
return;
}
}
- else if ( typeof(inputs[i].onkeyup) == 'function' )
- {
- var f = new String(inputs[i].onkeyup);
- if ( f.match(/AutofillUsername/) )
- {
- delete(f.onkeyup);
- f.className = 'autofill username';
- autofill_check();
- return;
- }
- }
}
}
@@ -495,6 +484,7 @@
ajaxSetPassword: 'ajax.js',
ajaxChangeStyle: 'ajax.js',
ajaxCatToTag: 'ajax.js',
+ ajaxCatEdit: 'ajax.js',
ajaxOpenACLManager: 'acl.js',
ajaxOpenDirectACLRule: 'acl.js',
ajaxAdminPage: 'login.js',
@@ -519,9 +509,27 @@
ajaxToggleSystemThemes: 'theme-manager.js',
ajaxInstallTheme: 'theme-manager.js',
ajaxInitRankEdit: 'rank-manager.js',
- ajaxInitRankCreate: 'rank-manager.js'
+ ajaxInitRankCreate: 'rank-manager.js',
+ autofill_init_element: 'autofill.js',
+ autofill_onload: 'autofill.js'
};
+function AutofillUsername(el, p)
+{
+ p = p || {};
+ el.className = 'autofill username';
+ el.onkeyup = null;
+ autofill_init_element(el, p);
+}
+
+function AutofillPage(el, p)
+{
+ p = p || {};
+ el.className = 'autofill page';
+ el.onkeyup = null;
+ autofill_init_element(el, p);
+}
+
var placeholder_instances = {};
for ( var i in placeholder_list )
diff -r 491314c44d23 -r dd80cde96a6c includes/template.php
--- a/includes/template.php Thu Aug 21 08:24:37 2008 -0400
+++ b/includes/template.php Thu Aug 21 11:24:56 2008 -0400
@@ -1947,7 +1947,7 @@
function username_field($name, $value = false)
{
$randomid = md5( time() . microtime() . mt_rand() );
- $text = '= 3 )
{
$search = '%' . escape_string_like($_GET['userinput']) . '%';
- $q = $db->sql_query('SELECT username FROM ' . table_prefix . "users WHERE " . ENANO_SQLFUNC_LOWERCASE . "(username) LIKE '$search' AND user_id > 1");
+ $min_id = ( isset($_GET['allow_anon']) && $_GET['allow_anon'] == '1' ) ? '1' : '2';
+ $q = $db->sql_query('SELECT username FROM ' . table_prefix . "users WHERE " . ENANO_SQLFUNC_LOWERCASE . "(username) LIKE '$search' AND user_id >= $min_id");
if ( !$q )
$db->die_json();
@@ -898,6 +899,7 @@
while ( $row = $db->fetchrow() )
{
$pathskey = ( isset($paths->nslist[$row['namespace']]) ? $paths->nslist[$row['namespace']] : $row['namespace'] . substr($paths->nslist['Special'], -1) ) . $row['urlname'];
+
$key = array(
0 => $pathskey,
'pid_highlight' => highlight_term($_GET['userinput'], dirtify_page_id($pathskey), '', ''),
diff -r 491314c44d23 -r dd80cde96a6c plugins/SpecialUserFuncs.php
--- a/plugins/SpecialUserFuncs.php Thu Aug 21 08:24:37 2008 -0400
+++ b/plugins/SpecialUserFuncs.php Thu Aug 21 11:24:56 2008 -0400
@@ -699,6 +699,11 @@
global $db, $session, $paths, $template, $plugins; // Common objects
global $lang;
+ if ( $session->user_logged_in )
+ {
+ $paths->main_page();
+ }
+
// form field trackers
$username = '';
$email = '';
@@ -1772,6 +1777,11 @@
$template->footer();
return true;
}
+ if ( $session->user_logged_in )
+ {
+ $paths->main_page();
+ }
+
if(isset($_POST['do_reset']))
{
if($session->mail_password_reset($_POST['username']))
diff -r 491314c44d23 -r dd80cde96a6c themes/oxygen/css/bleu.css
--- a/themes/oxygen/css/bleu.css Thu Aug 21 08:24:37 2008 -0400
+++ b/themes/oxygen/css/bleu.css Thu Aug 21 11:24:56 2008 -0400
@@ -524,6 +524,12 @@
padding: 3px;
}
+input.ac_loading {
+ background-image: url(../../../images/loading.gif);
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+
label {
padding: 3px;
cursor: pointer;