// {{{ jQuery object extension
(function($) {
- function assert(condition, text) {
+ var assert = function(condition, text) {
if ($.isFunction(condition)) {
condition = condition();
}
} else {
throw "Assertion failed: " + text;
}
- }
+ };
/* Add new functions to jQuery namesapce */
$.extend({
+ plURL: (function() {
+ var base;
+ return function(url) {
+ if (url.startsWith('http', true)) {
+ return url;
+ }
+ if (typeof base === 'undefined') {
+ base = $('head base');
+ if (base.length > 0) {
+ base = base.attr('href');
+ if (!base.endsWith('/')) {
+ base += '/';
+ }
+ } else {
+ base = '';
+ }
+ }
+ return base + url;
+ };
+ }()),
+
/* The goal of the following functions is to provide an AJAX API that
* take a different callback in case of HTTP success code (2XX) and in
* other cases.
onSuccess = data;
data = null;
}
- if (onError != null && !$.isFunction(onError)) {
+ if (onError && !$.isFunction(onError)) {
type = type || onError;
onError = null;
}
function ajaxHandler(data, textStatus, xhr) {
- if (textStatus == 'success') {
+ if (textStatus === 'success') {
if (onSuccess) {
onSuccess(data, textStatus, xhr);
}
- } else if (textStatus == 'error') {
+ } else if (textStatus === 'error') {
if (onError) {
onError(data, textStatus, xhr);
} else {
}
}
return $.ajax({
- url: source,
+ url: $.plURL(source),
type: method,
success: ajaxHandler,
data : data,
closeOnEsc: function() {
return $(window).keydown(function (e) {
- if (e.keyCode == 27) {
+ if (e.keyCode === 27) {
window.close();
}
});
dynPost: function(action, key, value) {
var values;
+ var k;
+ var form;
+
if (!$.isArray(key)) {
values = { };
values[key] = value;
} else {
values = key;
}
- var form = $('<form>', {
+ form = $('<form>', {
action: action,
method: 'post'
});
- for (var k in values) {
- $('<input>', {
- type: 'hidden',
- name: k,
- value: values[k]
- }).appendTo(form);
+ for (k in values) {
+ if (values.hasOwnProperty(k)) {
+ $('<input>', {
+ type: 'hidden',
+ name: k,
+ value: values[k]
+ }).appendTo(form);
+ }
}
$('body').appendTo(form);
form.submit();
},
wiki: function(text, withTitle) {
- if (text == '') {
+ if (!text) {
return this.html('');
}
var url = 'wiki_preview';
assertLength: function(len) {
return this.assert(function() {
- return $(this).length == len;
+ return $(this).length === len;
});
},
assertId: function(id) {
return this.assert(function() {
- return $(this).attr('id') == id;
+ return $(this).attr('id') === id;
});
},
});
}
});
-})(jQuery);
+}(jQuery));
// }}}
// {{{ function RegExp.escape()
);
}
return text.replace(arguments.callee.sRE, '\\$1');
-}
+};
+
+// }}}
+// {{{ String extension
+
+String.prototype.startsWith = function(str, caseInsensitive) {
+ var cmp = this;
+
+ if (str.length > this.length) {
+ return false;
+ }
+ if (caseInsensitive) {
+ str = str.toLowerCase();
+ cmp = cmp.toLowerCase();
+ }
+ return cmp.substr(0, str.length) === str;
+};
+
+String.prototype.endsWith = function(str, caseInsensitive) {
+ var cmp = this;
+
+ if (str.length > this.length) {
+ return false;
+ }
+ if (caseInsensitive) {
+ str = str.toLowerCase();
+ cmp = cmp.toLowerCase();
+ }
+ return cmp.substr(cmp.length - str.length, str.length) === str;
+};
+
+String.prototype.htmlEntities = function() {
+ return this.replace(/&/g,'&')
+ .replace(new RegExp('<','g'),'<')
+ .replace(/>/g,'>');
+};
+
+String.prototype.contains = function(str, caseInsensitive) {
+ var cmp = this;
+ if (str.length > this.length) {
+ return false;
+ }
+ if (caseInsensitive) {
+ str = str.toLowerCase();
+ cmp = cmp.toLowerCase();
+ }
+ return cmp.indexOf(str) >= 0;
+};
// }}}
// {{{ PmWiki decoding
Nix = {
map: null,
+
convert: function(a) {
- Nix.init();
var s = '';
+ Nix.init();
for (i = 0; i < a.length ; i++) {
var b = a.charAt(i);
s += ((b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z') ? Nix.map[b] : b);
}
return s;
},
+
init: function() {
- if (Nix.map != null)
+ var map;
+ var s;
+
+ if (Nix.map !== null) {
return;
- var map = new Array();
- var s='abcdefghijklmnopqrstuvwxyz';
- for (i = 0; i < s.length; i++)
- map[s.charAt(i)] = s.charAt((i+13)%26);
- for (i=0; i<s.length; i++)map[s.charAt(i).toUpperCase()] = s.charAt((i+13)%26).toUpperCase();
- Nix.map = map;
+ }
+ map = [ ];
+ s = 'abcdefghijklmnopqrstuvwxyz';
+ for (i = 0; i < s.length; i++) {
+ map[s.charAt(i)] = s.charAt((i+13) % 26);
+ }
+ for (i=0; i< s.length; i++) {
+ map[s.charAt(i).toUpperCase()] = s.charAt((i+13) % 26).toUpperCase();
+ }
+ Nix.map = map;
},
+
decode: function(a) {
document.write(Nix.convert(a));
}
-}
+};
// }}}
// {{{ preview wiki
function previewWiki(idFrom, idTo, withTitle, idShow)
{
$('#' + idTo).wiki($('#' + idFrom).val(), withTitle);
- if (idShow != null) {
+ if (idShow) {
$('#' + idShow).show();
}
}