582
+ − 1
// all utility functions go in here
+ − 2
+ − 3
function makeUrl(page, query, html_friendly)
+ − 4
{
+ − 5
url = contentPath+page;
+ − 6
if(url.indexOf('?') > 0) sep = '&';
+ − 7
else sep = '?';
+ − 8
if(query)
+ − 9
{
+ − 10
url = url + sep + query;
+ − 11
}
+ − 12
if(html_friendly)
+ − 13
{
+ − 14
url = url.replace('&', '&');
+ − 15
url = url.replace('<', '<');
+ − 16
url = url.replace('>', '>');
+ − 17
}
+ − 18
return url;
+ − 19
}
+ − 20
+ − 21
function makeUrlNS(namespace, page, query, html_friendly)
+ − 22
{
+ − 23
var url = contentPath+namespace_list[namespace]+(page.replace(/ /g, '_'));
+ − 24
if(url.indexOf('?') > 0) sep = '&';
+ − 25
else sep = '?';
+ − 26
if(query)
+ − 27
{
+ − 28
url = url + sep + query;
+ − 29
}
+ − 30
if(html_friendly)
+ − 31
{
+ − 32
url = url.replace('&', '&');
+ − 33
url = url.replace('<', '<');
+ − 34
url = url.replace('>', '>');
+ − 35
}
+ − 36
return append_sid(url);
+ − 37
}
+ − 38
+ − 39
function strToPageID(string)
+ − 40
{
+ − 41
// Convert Special:UploadFile to ['UploadFile', 'Special'], but convert 'Image:Enano.png' to ['Enano.png', 'File']
+ − 42
for(var i in namespace_list)
+ − 43
if(namespace_list[i] != '')
+ − 44
if(namespace_list[i] == string.substr(0, namespace_list[i].length))
+ − 45
return [string.substr(namespace_list[i].length), i];
+ − 46
return [string, 'Article'];
+ − 47
}
+ − 48
+ − 49
function append_sid(url)
+ − 50
{
+ − 51
sep = ( url.indexOf('?') > 0 ) ? '&' : '?';
+ − 52
if(ENANO_SID.length > 10)
+ − 53
{
+ − 54
url = url + sep + 'auth=' + ENANO_SID;
+ − 55
sep = '&';
+ − 56
}
+ − 57
if ( pagepass.length > 0 )
+ − 58
{
+ − 59
url = url + sep + 'pagepass=' + pagepass;
+ − 60
}
+ − 61
return url;
+ − 62
}
+ − 63
+ − 64
var stdAjaxPrefix = append_sid(scriptPath+'/ajax.php?title='+title);
+ − 65
+ − 66
/**
+ − 67
* Core AJAX library
+ − 68
*/
+ − 69
+ − 70
function ajaxMakeXHR()
+ − 71
{
+ − 72
var ajax;
+ − 73
if (window.XMLHttpRequest) {
+ − 74
ajax = new XMLHttpRequest();
+ − 75
} else {
+ − 76
if (window.ActiveXObject) {
+ − 77
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 78
} else {
+ − 79
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 80
return;
+ − 81
}
+ − 82
}
+ − 83
return ajax;
+ − 84
}
+ − 85
+ − 86
function ajaxGet(uri, f, call_editor_safe) {
+ − 87
// Is the editor open?
+ − 88
if ( editor_open && !call_editor_safe )
+ − 89
{
+ − 90
// Make sure the user is willing to close the editor
+ − 91
var conf = confirm($lang.get('editor_msg_confirm_ajax'));
+ − 92
if ( !conf )
+ − 93
{
+ − 94
// Kill off any "loading" windows, etc. and cancel the request
+ − 95
unsetAjaxLoading();
+ − 96
return false;
+ − 97
}
+ − 98
// The user allowed the editor to be closed. Reset flags and knock out the on-close confirmation.
+ − 99
editor_open = false;
+ − 100
enableUnload();
+ − 101
}
+ − 102
ajax = ajaxMakeXHR();
+ − 103
if ( !ajax )
+ − 104
{
+ − 105
console.error('ajaxMakeXHR() failed');
+ − 106
return false;
+ − 107
}
+ − 108
ajax.onreadystatechange = f;
+ − 109
ajax.open('GET', uri, true);
+ − 110
ajax.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
+ − 111
ajax.send(null);
+ − 112
}
+ − 113
+ − 114
function ajaxPost(uri, parms, f, call_editor_safe) {
+ − 115
// Is the editor open?
+ − 116
if ( editor_open && !call_editor_safe )
+ − 117
{
+ − 118
// Make sure the user is willing to close the editor
+ − 119
var conf = confirm($lang.get('editor_msg_confirm_ajax'));
+ − 120
if ( !conf )
+ − 121
{
+ − 122
// Kill off any "loading" windows, etc. and cancel the request
+ − 123
unsetAjaxLoading();
+ − 124
return false;
+ − 125
}
+ − 126
// The user allowed the editor to be closed. Reset flags and knock out the on-close confirmation.
+ − 127
editor_open = false;
+ − 128
enableUnload();
+ − 129
}
+ − 130
ajax = ajaxMakeXHR();
+ − 131
if ( !ajax )
+ − 132
{
+ − 133
console.error('ajaxMakeXHR() failed');
+ − 134
return false;
+ − 135
}
+ − 136
ajax.onreadystatechange = f;
+ − 137
ajax.open('POST', uri, true);
+ − 138
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ − 139
// Setting Content-length in Safari triggers a warning
+ − 140
if ( !is_Safari )
+ − 141
{
+ − 142
ajax.setRequestHeader("Content-length", parms.length);
+ − 143
}
+ − 144
ajax.setRequestHeader("Connection", "close");
+ − 145
ajax.send(parms);
+ − 146
}
+ − 147
+ − 148
/**
+ − 149
* Show a friendly error message depicting an AJAX response that is not valid JSON
+ − 150
* @param string Response text
+ − 151
* @param string Custom error message. If omitted, the default will be shown.
+ − 152
*/
+ − 153
+ − 154
function handle_invalid_json(response, customerror)
+ − 155
{
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 156
load_component('messagebox');
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 157
load_component('jquery');
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 158
load_component('jquery-ui');
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 159
load_component('fadefilter');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 160
load_component('flyin');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 161
load_component('l10n');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 162
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 163
darken(aclDisableTransitionFX);
582
+ − 164
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 165
var box = document.createElement('div');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 166
var mainwin = document.createElement('div');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 167
var panel = document.createElement('div');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 168
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 169
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 170
// main window
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 171
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 172
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 173
mainwin.style.padding = '10px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 174
mainwin.style.width = '580px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 175
mainwin.style.height = '360px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 176
mainwin.style.clip = 'rect(0px,auto,auto,0px)';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 177
mainwin.style.overflow = 'auto';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 178
mainwin.style.backgroundColor = '#ffffff';
582
+ − 179
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 180
// Title
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 181
var h3 = document.createElement('h3');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 182
var h3_text = ( $lang.placeholder ) ? 'The site encountered an error while processing your request.' : $lang.get('ajax_badjson_title');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 183
h3.appendChild(document.createTextNode(h3_text));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 184
mainwin.appendChild(h3);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 185
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 186
if ( typeof(customerror) == 'string' )
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 187
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 188
var el = document.createElement('p');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 189
el.appendChild(document.createTextNode(customerror));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 190
mainwin.appendChild(el);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 191
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 192
else
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 193
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 194
var error = 'We unexpectedly received the following response from the server. The response should have been in the JSON ';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 195
error += 'serialization format, but the response wasn\'t composed only of the JSON response. There are three possible triggers ';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 196
error += 'for this problem:';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 197
customerror = ( $lang.placeholder ) ? error : $lang.get('ajax_badjson_body');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 198
var el = document.createElement('p');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 199
el.appendChild(document.createTextNode(customerror));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 200
mainwin.appendChild(el);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 201
var ul = document.createElement('ul');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 202
var li1 = document.createElement('li');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 203
var li2 = document.createElement('li');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 204
var li3 = document.createElement('li');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 205
var li1_text = ( $lang.placeholder ) ? 'The server sent back a bad HTTP response code and thus sent an error page instead of running Enano. This indicates a possible problem with your server, and is not likely to be a bug with Enano.' : $lang.get('ajax_badjson_tip1');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 206
var li2_text = ( $lang.placeholder ) ? 'The server sent back the expected JSON response, but also injected some code into the response that should not be there. Typically this consists of advertisement code. In this case, the administrator of this site will have to contact their web host to have advertisements disabled.' : $lang.get('ajax_badjson_tip2');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 207
var li3_text = ( $lang.placeholder ) ? 'It\'s possible that Enano triggered a PHP error or warning. In this case, you may be looking at a bug in Enano.' : $lang.get('ajax_badjson_tip3');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 208
var osc_ex_data = ( $lang.placeholder ) ? 'This is KNOWN to be the case with the OpenSourceCMS.com demo version of Enano.' : $lang.get('ajax_badjson_osc');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 209
li1.appendChild(document.createTextNode(li1_text));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 210
var osc_exception = ( window.location.hostname == 'demo.opensourcecms.com' ) ? ' ' + osc_ex_data : '';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 211
li2.appendChild(document.createTextNode(li2_text + osc_exception));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 212
li3.appendChild(document.createTextNode(li3_text));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 213
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 214
ul.appendChild(li1);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 215
ul.appendChild(li2);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 216
ul.appendChild(li3);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 217
mainwin.appendChild(ul);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 218
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 219
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 220
var p2 = document.createElement('p');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 221
var p2_text = ( $lang.placeholder ) ? 'The response received from the server is as follows:' : $lang.get('ajax_badjson_msg_response');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 222
p2.appendChild(document.createTextNode(p2_text));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 223
mainwin.appendChild(p2);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 224
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 225
var pre = document.createElement('pre');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 226
pre.appendChild(document.createTextNode(response));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 227
mainwin.appendChild(pre);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 228
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 229
var p3 = document.createElement('p');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 230
var p3_text = $lang.placeholder ? 'You may also choose to view the response as HTML.' : $lang.get('ajax_badjson_msg_viewashtml');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 231
p3.appendChild(document.createTextNode(p3_text + ' '));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 232
var a = document.createElement('a');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 233
var a_text = $lang.placeholder ? 'View as HTML' : $lang.get('ajax_badjson_btn_viewashtml');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 234
a.appendChild(document.createTextNode(a_text + '...'));
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 235
a._resp = response;
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 236
a.onclick = function()
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 237
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 238
var vah_title = ( $lang.placeholder ) ? 'View the response as HTML?' : $lang.get('ajax_badjson_html_confirm_title');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 239
var vah_body = ( $lang.placeholder ) ? 'If the server\'s response was modified by an attacker to include malicious code, viewing the response as HTML might allow that malicious code to run. Only continue if you have inspected the response text and verified that it is safe.' : $lang.get('ajax_badjson_html_confirm_body');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 240
var btn_confirm = $lang.placeholder ? 'View as HTML' : $lang.get('ajax_badjson_btn_viewashtml');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 241
var btn_cancel = $lang.placeholder ? 'Cancel' : $lang.get('etc_cancel');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 242
var mp = miniPromptMessage({
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 243
title: vah_title,
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 244
message: vah_body,
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 245
buttons: [
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 246
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 247
text: btn_confirm,
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 248
color: 'blue',
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 249
style: {
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 250
fontWeight: 'bold'
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 251
},
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 252
onclick: function() {
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 253
var mp = miniPromptGetParent(this);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 254
var win = window.open('about:blank', 'invalidjson_htmlwin', 'width=550,height=400,status=no,toolbars=no,toolbar=no,address=no,scroll=yes');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 255
win.document.write(mp._response);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 256
win.document.close();
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 257
miniPromptDestroy(this);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 258
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 259
},
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 260
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 261
text: btn_cancel,
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 262
onclick: function() {
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 263
miniPromptDestroy(this);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 264
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 265
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 266
]
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 267
});
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 268
mp._response = this._resp;
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 269
return false;
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 270
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 271
a.href = '#';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 272
p3.appendChild(a);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 273
mainwin.appendChild(p3);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 274
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 275
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 276
// panel
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 277
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 278
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 279
panel.style.backgroundColor = '#D0D0D0';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 280
panel.style.textAlign = 'right';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 281
panel.style.padding = '0 10px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 282
panel.style.lineHeight = '40px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 283
panel.style.width = '580px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 284
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 285
var closer = document.createElement('input');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 286
var btn_close = $lang.placeholder ? 'Close' : $lang.get('ajax_badjson_btn_close');
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 287
closer.type = 'button';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 288
closer.value = btn_close;
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 289
closer.onclick = function()
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 290
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 291
var parentdiv = this.parentNode.parentNode;
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 292
if ( aclDisableTransitionFX )
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 293
{
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 294
parentdiv.parentNode.removeChild(parentdiv);
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 295
enlighten(aclDisableTransitionFX);
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 296
}
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 297
else
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 298
{
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 299
$(parentdiv).hide("blind", {}, 1000, function()
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 300
{
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 301
parentdiv.parentNode.removeChild(parentdiv);
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 302
enlighten();
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 303
});
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 304
}
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 305
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 306
panel.appendChild(closer);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 307
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 308
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 309
// put it together
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 310
//
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 311
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 312
box.appendChild(mainwin);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 313
box.appendChild(panel);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 314
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 315
// add it to the body to allow height/width calculation
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 316
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 317
box.style.display = 'block';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 318
box.style.position = 'absolute';
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 319
box.style.zIndex = getHighestZ() + 1;
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 320
domObjChangeOpac(0, box);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 321
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 322
var body = document.getElementsByTagName('body')[0];
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 323
body.appendChild(box);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 324
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 325
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 326
// calculate position of the box
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 327
// box should be exactly 640px high, 480px wide
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 328
var top = ( getHeight() / 2 ) - ( $dynano(box).Height() / 2 ) + getScrollOffset();
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 329
var left = ( getWidth() / 2 ) - ( $dynano(box).Width() / 2 );
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 330
console.debug('top = %d, left = %d', top, left);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 331
box.style.top = top + 'px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 332
box.style.left = left + 'px';
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 333
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 334
// we have width and height, set display to none and reset opacity
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 335
if ( aclDisableTransitionFX )
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 336
{
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 337
domObjChangeOpac(100, box);
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 338
box.style.display = 'block';
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 339
}
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 340
else
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 341
{
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 342
box.style.display = 'none';
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 343
domObjChangeOpac(100, box);
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 344
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 345
setTimeout(function()
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 346
{
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 347
$(box).show("blind", {}, 1000);
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 348
}, 1000);
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 349
}
679
+ − 350
return false;
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 351
}
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 352
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 353
/**
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 354
* Verify that a string is roughly a valid JSON object. Warning - this is only a very cheap syntax check.
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 355
* @param string
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 356
* @return bool true if JSON is valid
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 357
*/
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 358
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 359
function check_json_response(response)
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 360
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 361
response = trim(response);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 362
if ( response.substr(0, 1) == '{' && response.substr(response.length - 1, 1) == '}' )
582
+ − 363
{
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 364
return true;
582
+ − 365
}
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 366
return false;
582
+ − 367
}
+ − 368
+ − 369
function ajaxEscape(text)
+ − 370
{
+ − 371
/*
+ − 372
text = escape(text);
+ − 373
text = text.replace(/\+/g, '%2B', text);
+ − 374
*/
+ − 375
text = window.encodeURIComponent(text);
+ − 376
return text;
+ − 377
}
+ − 378
+ − 379
/**
+ − 380
* String functions
+ − 381
*/
+ − 382
+ − 383
// Equivalent to PHP trim() function
+ − 384
function trim(text)
+ − 385
{
+ − 386
text = text.replace(/^([\s]+)/, '');
+ − 387
text = text.replace(/([\s]+)$/, '');
+ − 388
return text;
+ − 389
}
+ − 390
+ − 391
// Equivalent to PHP implode() function
+ − 392
function implode(chr, arr)
+ − 393
{
+ − 394
if ( typeof ( arr.toJSONString ) == 'function' )
+ − 395
delete(arr.toJSONString);
+ − 396
+ − 397
var ret = '';
+ − 398
var c = 0;
+ − 399
for ( var i in arr )
+ − 400
{
+ − 401
if(i=='toJSONString')continue;
+ − 402
if ( c > 0 )
+ − 403
ret += chr;
+ − 404
ret += arr[i];
+ − 405
c++;
+ − 406
}
+ − 407
return ret;
+ − 408
}
+ − 409
+ − 410
function form_fetch_field(form, name)
+ − 411
{
+ − 412
var fields = form.getElementsByTagName('input');
+ − 413
if ( fields.length < 1 )
+ − 414
return false;
+ − 415
for ( var i = 0; i < fields.length; i++ )
+ − 416
{
+ − 417
var field = fields[i];
+ − 418
if ( field.name == name )
+ − 419
return field;
+ − 420
}
+ − 421
return false;
+ − 422
}
+ − 423
+ − 424
function get_parent_form(o)
+ − 425
{
+ − 426
if ( !o.parentNode )
+ − 427
return false;
+ − 428
if ( o.tagName == 'FORM' )
+ − 429
return o;
+ − 430
var p = o.parentNode;
+ − 431
while(true)
+ − 432
{
+ − 433
if ( p.tagName == 'FORM' )
+ − 434
return p;
+ − 435
else if ( !p )
+ − 436
return false;
+ − 437
else
+ − 438
p = p.parentNode;
+ − 439
}
+ − 440
}
+ − 441
+ − 442
function findParentForm(o)
+ − 443
{
+ − 444
return get_parent_form(o);
+ − 445
}
+ − 446
+ − 447
function domObjChangeOpac(opacity, id) {
+ − 448
var object = id.style;
+ − 449
object.opacity = (opacity / 100);
+ − 450
object.MozOpacity = (opacity / 100);
+ − 451
object.KhtmlOpacity = (opacity / 100);
+ − 452
object.filter = "alpha(opacity=" + opacity + ")";
+ − 453
}
+ − 454
704
+ − 455
function getScrollOffset(el)
582
+ − 456
{
+ − 457
var position;
704
+ − 458
var s = el || self;
+ − 459
el = el || document;
+ − 460
if ( el.scrollTop )
+ − 461
{
+ − 462
position = el.scrollTop;
+ − 463
}
+ − 464
else if (s.pageYOffset)
582
+ − 465
{
+ − 466
position = self.pageYOffset;
+ − 467
}
+ − 468
else if (document.documentElement && document.documentElement.scrollTop)
+ − 469
{
+ − 470
position = document.documentElement.scrollTop;
+ − 471
}
+ − 472
else if (document.body)
+ − 473
{
+ − 474
position = document.body.scrollTop;
+ − 475
}
+ − 476
return position;
+ − 477
}
+ − 478
672
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 479
function setScrollOffset(offset)
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 480
{
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 481
window.scroll(0, offset);
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 482
}
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 483
582
+ − 484
// Function to fade classes info-box, warning-box, error-box, etc.
+ − 485
+ − 486
function fadeInfoBoxes()
+ − 487
{
+ − 488
var divs = new Array();
+ − 489
d = document.getElementsByTagName('div');
+ − 490
j = 0;
+ − 491
for(var i in d)
+ − 492
{
+ − 493
if ( !d[i] )
+ − 494
continue;
+ − 495
if ( !d[i].tagName )
+ − 496
continue;
+ − 497
if(d[i].className=='info-box' || d[i].className=='error-box' || d[i].className=='warning-box' || d[i].className=='question-box')
+ − 498
{
+ − 499
divs[j] = d[i];
+ − 500
j++;
+ − 501
}
+ − 502
}
+ − 503
if(divs.length < 1) return;
+ − 504
load_component('fat');
+ − 505
for(i in divs)
+ − 506
{
+ − 507
if(!divs[i].id) divs[i].id = 'autofade_'+Math.floor(Math.random() * 100000);
+ − 508
switch(divs[i].className)
+ − 509
{
+ − 510
case 'info-box':
+ − 511
default:
+ − 512
from = '#3333FF';
+ − 513
break;
+ − 514
case 'error-box':
+ − 515
from = '#FF3333';
+ − 516
break;
+ − 517
case 'warning-box':
+ − 518
from = '#FFFF33';
+ − 519
break;
+ − 520
case 'question-box':
+ − 521
from = '#33FF33';
+ − 522
break;
+ − 523
}
+ − 524
Fat.fade_element(divs[i].id,30,2000,from,Fat.get_bgcolor(divs[i].id));
+ − 525
}
+ − 526
}
+ − 527
+ − 528
addOnloadHook(fadeInfoBoxes);
+ − 529
+ − 530
// Alpha fades
+ − 531
+ − 532
function opacity(id, opacStart, opacEnd, millisec)
+ − 533
{
+ − 534
var object = document.getElementById(id);
+ − 535
domOpacity(object, opacStart, opacEnd, millisec);
+ − 536
}
+ − 537
+ − 538
var opacityDOMCache = new Object();
+ − 539
function domOpacity(obj, opacStart, opacEnd, millisec) {
+ − 540
//speed for each frame
+ − 541
var speed = Math.round(millisec / 100);
+ − 542
var timer = 0;
+ − 543
+ − 544
// unique ID for this animation
+ − 545
var uniqid = Math.floor(Math.random() * 1000000);
+ − 546
opacityDOMCache[uniqid] = obj;
+ − 547
+ − 548
//determine the direction for the blending, if start and end are the same nothing happens
+ − 549
if(opacStart > opacEnd) {
+ − 550
for(i = opacStart; i >= opacEnd; i--) {
+ − 551
setTimeout("var obj = opacityDOMCache["+uniqid+"]; domObjChangeOpac(" + i + ",obj)",(timer * speed));
+ − 552
timer++;
+ − 553
}
+ − 554
} else if(opacStart < opacEnd) {
+ − 555
for(i = opacStart; i <= opacEnd; i++)
+ − 556
{
+ − 557
setTimeout("var obj = opacityDOMCache["+uniqid+"]; domObjChangeOpac(" + i + ",obj)",(timer * speed));
+ − 558
timer++;
+ − 559
}
+ − 560
}
+ − 561
setTimeout("delete(opacityDOMCache["+uniqid+"]);",(timer * speed));
+ − 562
}
+ − 563
+ − 564
// change the opacity for different browsers
+ − 565
function changeOpac(opacity, id)
+ − 566
{
+ − 567
var object = document.getElementById(id);
+ − 568
return domObjChangeOpac(opacity, object);
+ − 569
}
+ − 570
+ − 571
// draw a white ajax-ey "loading" box over an object
+ − 572
function whiteOutElement(el)
+ − 573
{
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 574
var top = $dynano(el).Top();
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 575
var left = $dynano(el).Left();
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 576
var width = $dynano(el).Width();
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 577
var height = $dynano(el).Height();
582
+ − 578
+ − 579
var blackout = document.createElement('div');
691
+ − 580
// using fixed here allows modal windows to be blacked out
+ − 581
blackout.style.position = ( el.style.position == 'fixed' ) ? 'fixed' : 'absolute';
582
+ − 582
blackout.style.top = top + 'px';
+ − 583
blackout.style.left = left + 'px';
+ − 584
blackout.style.width = width + 'px';
+ − 585
blackout.style.height = height + 'px';
+ − 586
+ − 587
blackout.style.backgroundColor = '#FFFFFF';
+ − 588
domObjChangeOpac(60, blackout);
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
diff
changeset
+ − 589
var background = ( $dynano(el).Height() < 48 ) ? 'url(' + scriptPath + '/images/loading.gif)' : 'url(' + scriptPath + '/includes/clientside/tinymce/themes/advanced/skins/default/img/progress.gif)';
672
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
diff
changeset
+ − 590
blackout.style.backgroundImage = background;
582
+ − 591
blackout.style.backgroundPosition = 'center center';
+ − 592
blackout.style.backgroundRepeat = 'no-repeat';
+ − 593
blackout.style.zIndex = getHighestZ() + 2;
+ − 594
+ − 595
var body = document.getElementsByTagName('body')[0];
+ − 596
body.appendChild(blackout);
+ − 597
+ − 598
return blackout;
+ − 599
}
+ − 600
628
+ − 601
/**
+ − 602
* Take a div generated by whiteOutElement() and report success using the glossy "check" graphic. Sets the image, then
+ − 603
* briefly fades in, then fades out and destroys the box so as to re-allow control over the underlying element
+ − 604
*/
+ − 605
+ − 606
function whiteOutReportSuccess(whitey)
+ − 607
{
+ − 608
// fade the status indicator in and then out
+ − 609
whitey.style.backgroundImage = 'url(' + scriptPath + '/images/check.png)';
679
+ − 610
if ( aclDisableTransitionFX )
+ − 611
{
+ − 612
domObjChangeOpac(80, whitey);
+ − 613
}
+ − 614
else
+ − 615
{
+ − 616
domOpacity(whitey, 60, 80, 500);
+ − 617
setTimeout(function()
+ − 618
{
+ − 619
domOpacity(whitey, 60, 0, 500);
+ − 620
}, 750);
+ − 621
}
628
+ − 622
setTimeout(function()
+ − 623
{
+ − 624
whitey.parentNode.removeChild(whitey);
+ − 625
}, 1250);
+ − 626
}
+ − 627
691
+ − 628
/**
+ − 629
* Whites out a form and disables all buttons under it. Useful for onsubmit functions.
+ − 630
* @example
+ − 631
<code>
+ − 632
<form action="foo" onsubmit="whiteOutForm(this);">
+ − 633
</code>
+ − 634
* @param object Form object
+ − 635
* @return object Whiteout div
+ − 636
*/
+ − 637
+ − 638
function whiteOutForm(form)
+ − 639
{
+ − 640
if ( !form.getElementsByTagName )
+ − 641
return false;
+ − 642
+ − 643
// disable all buttons
+ − 644
var buttons = form.getElementsByTagName('input');
+ − 645
for ( var i = 0; i < buttons.length; i++ )
+ − 646
{
+ − 647
if ( buttons[i].type == 'button' || buttons[i].type == 'submit' || buttons[i].type == 'image' )
+ − 648
{
+ − 649
buttons[i].disabled = 'disabled';
+ − 650
// ... but also make a hidden element to preserve any flags
+ − 651
var clone = buttons[i].cloneNode(true);
+ − 652
clone.type = 'hidden';
+ − 653
clone.disabled = false;
+ − 654
console.debug(clone);
+ − 655
form.appendChild(clone);
+ − 656
}
+ − 657
}
+ − 658
var buttons = form.getElementsByTagName('button');
+ − 659
for ( var i = 0; i < buttons.length; i++ )
+ − 660
{
+ − 661
buttons[i].disabled = 'disabled';
+ − 662
// ... but also make a hidden element to preserve any flags
+ − 663
if ( buttons[i].name )
+ − 664
{
+ − 665
var clone = document.createElement('input');
+ − 666
clone.type = 'hidden';
+ − 667
clone.name = buttons[i].name;
+ − 668
clone.value = ( buttons[i].value ) ? buttons[i].value : '';
+ − 669
form.appendChild(clone);
+ − 670
}
+ − 671
}
+ − 672
+ − 673
return whiteOutElement(form);
+ − 674
}
+ − 675
582
+ − 676
// other DHTML functions
+ − 677
+ − 678
function fetch_offset(obj)
+ − 679
{
+ − 680
var left_offset = obj.offsetLeft;
+ − 681
var top_offset = obj.offsetTop;
+ − 682
while ((obj = obj.offsetParent) != null) {
+ − 683
left_offset += obj.offsetLeft;
+ − 684
top_offset += obj.offsetTop;
+ − 685
}
+ − 686
return { 'left' : left_offset, 'top' : top_offset };
+ − 687
}
+ − 688
+ − 689
function fetch_dimensions(o) {
+ − 690
var w = o.offsetWidth;
+ − 691
var h = o.offsetHeight;
+ − 692
return { 'w' : w, 'h' : h };
+ − 693
}
+ − 694
+ − 695
function findParentForm(o)
+ − 696
{
+ − 697
if ( o.tagName == 'FORM' )
+ − 698
return o;
+ − 699
while(true)
+ − 700
{
+ − 701
o = o.parentNode;
+ − 702
if ( !o )
+ − 703
return false;
+ − 704
if ( o.tagName == 'FORM' )
+ − 705
return o;
+ − 706
}
+ − 707
return false;
+ − 708
}
+ − 709
+ − 710
function bannerOn(text)
+ − 711
{
+ − 712
darken(true);
+ − 713
var thediv = document.createElement('div');
+ − 714
thediv.className = 'mdg-comment';
+ − 715
thediv.style.padding = '0';
+ − 716
thediv.style.marginLeft = '0';
+ − 717
thediv.style.position = 'absolute';
+ − 718
thediv.style.display = 'none';
+ − 719
thediv.style.padding = '4px';
+ − 720
thediv.style.fontSize = '14pt';
+ − 721
thediv.id = 'mdgDynamic_bannerDiv_'+Math.floor(Math.random() * 1000000);
+ − 722
thediv.innerHTML = text;
+ − 723
+ − 724
var body = document.getElementsByTagName('body');
+ − 725
body = body[0];
+ − 726
body.appendChild(thediv);
+ − 727
body.style.cursor = 'wait';
+ − 728
+ − 729
thediv.style.display = 'block';
+ − 730
dim = fetch_dimensions(thediv);
+ − 731
thediv.style.display = 'none';
+ − 732
bdim = { 'w' : getWidth(), 'h' : getHeight() };
+ − 733
so = getScrollOffset();
+ − 734
+ − 735
var left = (bdim['w'] / 2) - ( dim['w'] / 2 );
+ − 736
+ − 737
var top = (bdim['h'] / 2);
+ − 738
top = top - ( dim['h'] / 2 );
+ − 739
+ − 740
top = top + so;
+ − 741
+ − 742
thediv.style.top = top + 'px';
+ − 743
thediv.style.left = left + 'px';
+ − 744
+ − 745
thediv.style.display = 'block';
+ − 746
+ − 747
return thediv.id;
+ − 748
}
+ − 749
+ − 750
function bannerOff(id)
+ − 751
{
+ − 752
e = document.getElementById(id);
+ − 753
if(!e) return;
+ − 754
e.innerHTML = '';
+ − 755
e.style.display = 'none';
+ − 756
var body = document.getElementsByTagName('body');
+ − 757
body = body[0];
+ − 758
body.style.cursor = 'default';
+ − 759
enlighten(true);
+ − 760
}
+ − 761
+ − 762
function disableUnload(message)
+ − 763
{
+ − 764
if(typeof message != 'string') message = 'You may want to save your changes first.';
+ − 765
window._unloadmsg = message;
+ − 766
window.onbeforeunload = function(e)
+ − 767
{
+ − 768
if ( !e )
+ − 769
e = window.event;
+ − 770
e.returnValue = window._unloadmsg;
+ − 771
}
+ − 772
}
+ − 773
+ − 774
function enableUnload()
+ − 775
{
+ − 776
window._unloadmsg = null;
+ − 777
window.onbeforeunload = null;
+ − 778
}
+ − 779
+ − 780
/**
+ − 781
* Gets the highest z-index of all divs in the document
+ − 782
* @return integer
+ − 783
*/
+ − 784
function getHighestZ()
+ − 785
{
+ − 786
z = 0;
+ − 787
var divs = document.getElementsByTagName('div');
+ − 788
for(var i = 0; i < divs.length; i++)
+ − 789
{
+ − 790
if(divs[i].style.zIndex > z) z = divs[i].style.zIndex;
+ − 791
}
677
2a263b598a2b
Improved miniPrompt and fadefilter to properly overlap parent modal windows. MessageBox() is next. Fixed pref_disable_js_fx not working due to wrong type (number instead of boolean).
Dan
diff
changeset
+ − 792
return parseInt(z);
582
+ − 793
}
+ − 794
592
+ − 795
var shift = false;
582
+ − 796
function isKeyPressed(event)
+ − 797
{
+ − 798
if (event.shiftKey==1)
+ − 799
{
+ − 800
shift = true;
+ − 801
}
+ − 802
else
+ − 803
{
+ − 804
shift = false;
+ − 805
}
+ − 806
}
+ − 807
+ − 808
function moveDiv(div, newparent)
+ − 809
{
+ − 810
var backup = div;
+ − 811
var oldparent = div.parentNode;
+ − 812
oldparent.removeChild(div);
+ − 813
newparent.appendChild(backup);
+ − 814
}
+ − 815
+ − 816
var busyBannerID;
+ − 817
function goBusy(msg)
+ − 818
{
+ − 819
if(!msg) msg = 'Please wait...';
+ − 820
body = document.getElementsByTagName('body');
+ − 821
body = body[0];
+ − 822
body.style.cursor = 'wait';
+ − 823
busyBannerID = bannerOn(msg);
+ − 824
}
+ − 825
+ − 826
function unBusy()
+ − 827
{
+ − 828
body = document.getElementsByTagName('body');
+ − 829
body = body[0];
+ − 830
body.style.cursor = 'default';
+ − 831
bannerOff(busyBannerID);
+ − 832
}
+ − 833
+ − 834
function setAjaxLoading()
+ − 835
{
+ − 836
if ( document.getElementById('ajaxloadicon') )
+ − 837
{
+ − 838
document.getElementById('ajaxloadicon').src=ajax_load_icon;
+ − 839
}
+ − 840
}
+ − 841
+ − 842
function unsetAjaxLoading()
+ − 843
{
+ − 844
if ( document.getElementById('ajaxloadicon') )
+ − 845
{
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
diff
changeset
+ − 846
document.getElementById('ajaxloadicon').src=cdnPath + '/images/spacer.gif';
582
+ − 847
}
+ − 848
}
+ − 849
+ − 850
function readCookie(name) {var nameEQ = name + "=";var ca = document.cookie.split(';');for(var i=0;i < ca.length;i++){var c = ca[i];while (c.charAt(0)==' ') c = c.substring(1,c.length);if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);}return null;}
+ − 851
function createCookie(name,value,days){if (days){var date = new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires = "; expires="+date.toGMTString();}else var expires = "";document.cookie = name+"="+value+expires+"; path=/";}
+ − 852
function eraseCookie(name) {createCookie(name,"",-1);}
+ − 853
+ − 854
/*
+ − 855
* AJAX login box (experimental)
+ − 856
* Moved / rewritten in login.js
+ − 857
*/
+ − 858
+ − 859
// Included only for API-compatibility
+ − 860
function ajaxPromptAdminAuth(call_on_ok, level)
+ − 861
{
+ − 862
ajaxLogonInit(call_on_ok, level);
+ − 863
}
+ − 864
+ − 865
/**
+ − 866
* Insert a DOM object _after_ the specified child.
+ − 867
* @param object Parent node
+ − 868
* @param object Node to insert
+ − 869
* @param object Node to insert after
+ − 870
*/
+ − 871
+ − 872
function insertAfter(parent, baby, bigsister)
+ − 873
{
+ − 874
try
+ − 875
{
+ − 876
if ( parent.childNodes[parent.childNodes.length-1] == bigsister )
+ − 877
parent.appendChild(baby);
+ − 878
else
+ − 879
parent.insertBefore(baby, bigsister.nextSibling);
+ − 880
}
+ − 881
catch(e)
+ − 882
{
+ − 883
alert(e.toString());
+ − 884
if ( window.console )
+ − 885
{
+ − 886
// Firebug support
+ − 887
window.console.warn(e);
+ − 888
}
+ − 889
}
+ − 890
}
+ − 891
+ − 892
/**
+ − 893
* Validates an e-mail address.
+ − 894
* @param string E-mail address
+ − 895
* @return bool
+ − 896
*/
+ − 897
+ − 898
function validateEmail(email)
+ − 899
{
+ − 900
return ( email.match(/^(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*|(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*(?:(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*)*<[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*(?:,[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*)*:[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)?(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*>)$/) ) ? true : false;
+ − 901
}
+ − 902
+ − 903
/**
+ − 904
* Validates a username.
+ − 905
* @param string Username to test
+ − 906
* @return bool
+ − 907
*/
+ − 908
+ − 909
function validateUsername(username)
+ − 910
{
+ − 911
var regex = new RegExp('^[^<>&\?\'"%\n\r/]+$', '');
+ − 912
return ( username.match(regex) ) ? true : false;
+ − 913
}
+ − 914
+ − 915
/*
+ − 916
* Utility functions, moved from windows.js
+ − 917
*/
+ − 918
+ − 919
function getHeight() {
+ − 920
var myHeight = 0;
+ − 921
if( typeof( window.innerWidth ) == 'number' ) {
+ − 922
myHeight = window.innerHeight;
+ − 923
} else if( document.documentElement &&
+ − 924
( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
+ − 925
myHeight = document.documentElement.clientHeight;
+ − 926
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
+ − 927
myHeight = document.body.clientHeight;
+ − 928
}
+ − 929
return myHeight;
+ − 930
}
+ − 931
+ − 932
function getWidth() {
+ − 933
var myWidth = 0;
+ − 934
if( typeof( window.innerWidth ) == 'number' ) {
+ − 935
myWidth = window.innerWidth;
+ − 936
} else if( document.documentElement &&
+ − 937
( document.documentElement.clientWidth || document.documentElement.clientWidth ) ) {
+ − 938
myWidth = document.documentElement.clientWidth;
+ − 939
} else if( document.body && ( document.body.clientWidth || document.body.clientWidth ) ) {
+ − 940
myWidth = document.body.clientWidth;
+ − 941
}
+ − 942
return myWidth;
+ − 943
}
+ − 944
+ − 945
/**
+ − 946
* Sanitizes a page URL string so that it can safely be stored in the database.
+ − 947
* @param string Page ID to sanitize
+ − 948
* @return string Cleaned text
+ − 949
*/
+ − 950
+ − 951
function sanitize_page_id(page_id)
+ − 952
{
+ − 953
// Remove character escapes
+ − 954
page_id = dirtify_page_id(page_id);
+ − 955
+ − 956
var regex = new RegExp('[A-Za-z0-9\\[\\]\./:;\(\)@_-]', 'g');
+ − 957
pid_clean = page_id.replace(regex, 'X');
+ − 958
var pid_dirty = [];
+ − 959
for ( var i = 0; i < pid_clean.length; i++ )
+ − 960
pid_dirty[i] = pid_clean.substr(i, 1);
+ − 961
+ − 962
for ( var i = 0; i < pid_dirty.length; i++ )
+ − 963
{
+ − 964
var chr = pid_dirty[i];
+ − 965
if ( chr == 'X' )
+ − 966
continue;
+ − 967
var cid = chr.charCodeAt(0);
+ − 968
cid = cid.toString(16).toUpperCase();
+ − 969
if ( cid.length < 2 )
+ − 970
{
+ − 971
cid = '0' + cid;
+ − 972
}
+ − 973
pid_dirty[i] = "." + cid;
+ − 974
}
+ − 975
+ − 976
var pid_chars = [];
+ − 977
for ( var i = 0; i < page_id.length; i++ )
+ − 978
pid_chars[i] = page_id.substr(i, 1);
+ − 979
+ − 980
var page_id_cleaned = '';
+ − 981
+ − 982
for ( var id in pid_chars )
+ − 983
{
+ − 984
var chr = pid_chars[id];
+ − 985
if ( pid_dirty[id] == 'X' )
+ − 986
page_id_cleaned += chr;
+ − 987
else
+ − 988
page_id_cleaned += pid_dirty[id];
+ − 989
}
+ − 990
+ − 991
return page_id_cleaned;
+ − 992
}
+ − 993
+ − 994
/**
+ − 995
* Removes character escapes in a page ID string
+ − 996
* @param string Page ID string to dirty up
+ − 997
* @return string
+ − 998
*/
+ − 999
+ − 1000
function dirtify_page_id(page_id)
+ − 1001
{
+ − 1002
// First, replace spaces with underscores
+ − 1003
page_id = page_id.replace(/ /g, '_');
+ − 1004
+ − 1005
var matches = page_id.match(/\.[A-Fa-f0-9][A-Fa-f0-9]/g);
+ − 1006
+ − 1007
if ( matches != null )
+ − 1008
{
+ − 1009
for ( var i = 0; i < matches.length; i++ )
+ − 1010
{
+ − 1011
var match = matches[i];
+ − 1012
var byt = (match.substr(1)).toUpperCase();
+ − 1013
var code = eval("0x" + byt);
+ − 1014
var regex = new RegExp('\\.' + byt, 'g');
+ − 1015
page_id = page_id.replace(regex, String.fromCharCode(code));
+ − 1016
}
+ − 1017
}
+ − 1018
+ − 1019
return page_id;
+ − 1020
}
+ − 1021
+ − 1022
/**
+ − 1023
* Equivalent to PHP's in_array function.
+ − 1024
*/
+ − 1025
+ − 1026
function in_array(needle, haystack)
+ − 1027
{
+ − 1028
for(var i in haystack)
+ − 1029
{
+ − 1030
if(haystack[i] == needle) return i;
+ − 1031
}
+ − 1032
return false;
+ − 1033
}
651
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1034
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1035
/**
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1036
* Equivalent of PHP's time()
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1037
* @return int
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1038
*/
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1039
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1040
function unix_time()
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1041
{
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1042
return parseInt((new Date()).getTime()/1000);
ce9d78d7251d
Improved JSON validation and error interface when validation fails; made rank manager support custom CSS
Dan
diff
changeset
+ − 1043
}