// Various extensions for prototype.js and scriptaculous
// by knallgrau.at
// note: there are still some fixes left in prototype.js concerning element-border-width
Element.BLOCK_LEVEL = ["address","blockquote","center","dl","dir","div","fieldset",
"form","h1-6","hr","isindex","menu","noframes","noscript",
"ol","p","pre","table","ul","center","dir","menu","noframes","isindex"];
Element.isBlockLevel = function(element) {
return element.isBlockLevel = (
Element.getStyle(element, "display") == "block" ||
element.isBlockLevel == true ||
Element.BLOCK_LEVEL.indexOf(element.nodeName.toLowerCase()) != -1
);
}
Element.show = function() {
for (var i = 0; i < arguments.length; i++) {
var element = $(arguments[i]);
//knallgrau: use Element.isBlockLevel
element.style.display = Element.isBlockLevel(element) ? 'block' : '';
}
}
Element.getDimensions = function(element) {
element = $(element);
if (Element.getStyle(element, 'display') != 'none')
return {width: element.offsetWidth, height: element.offsetHeight};
// All *Width and *Height properties give 0 on elements with display none,
// so enable the element temporarily
var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
els.visibility = 'hidden';
els.position = 'absolute';
//knallgrau: use Element.isBlockLevel
els.display = Element.isBlockLevel(element) ? 'block' : '';
var originalWidth = element.clientWidth;
var originalHeight = element.clientHeight;
els.display = 'none';
els.position = originalPosition;
els.visibility = originalVisibility;
return {width: originalWidth, height: originalHeight};
}
Position.getVisibleWidth = function() {
return (window.opera) ?
document.body.clientWidth || document.documentElement.clientWidth || window.innerWidth
: document.documentElement.clientWidth || window.innerWidth || document.body.clientWidth;
}
Position.getVisibleHeight = function() {
return (window.opera) ?
document.body.clientHeight || document.documentElement.clientHeight || window.innerHeight
: document.documentElement.clientHeight || window.innerHeight || document.body.clientHeight;
}
Ajax.InPlaceEditor.prototype.convertHTMLLineBreaks = function(string) {
string = string.replace(/
\n/gi, "\n");
string = string.replace(/
/gi, "\n").replace(/
/gi, "\n").replace(/<\/p>/gi, "\n").replace(/
/gi, ""); return string; } // Cookie Functions function ClientCookie() { if (document.cookie.length) { this.cookies = ' ' + document.cookie; } } ClientCookie.prototype = { setValue: function (key, value) { document.cookie = key + "=" + escape(value); }, getValue: function (key) { if (this.cookies) { var start = this.cookies.indexOf(' ' + key + '='); if (start == -1) { return null; } var end = this.cookies.indexOf(";", start); if (end == -1) { end = this.cookies.length; } end -= start; var cookie = this.cookies.substr(start,end); return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); } else { return null; } } } var Cookie = new ClientCookie(); /* * code taken from http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor * InPlaceEditor extension that adds a 'click to edit' text when the field is * empty. */ Ajax.InPlaceEditor.prototype.__initialize = Ajax.InPlaceEditor.prototype.initialize; Ajax.InPlaceEditor.prototype.__getText = Ajax.InPlaceEditor.prototype.getText; Ajax.InPlaceEditor.prototype.__onComplete = Ajax.InPlaceEditor.prototype.onComplete; Ajax.InPlaceEditor.prototype = Object.extend(Ajax.InPlaceEditor.prototype, { initialize: function(element, url, options){ this.__initialize(element,url,options) this.setOptions(options); this._checkEmpty(); }, setOptions: function(options){ this.options = Object.extend(Object.extend(this.options,{ emptyText: 'click to edit...', emptyClassName: 'inplaceeditor-empty' }),options||{}); }, _checkEmpty: function(){ if( this.element.innerHTML.length == 0 ){ this.element.appendChild( Builder.node('span',{className:this.options.emptyClassName},this.options.emptyText)); } }, getText: function(){ document.getElementsByClassName(this.options.emptyClassName,this.element).each(function(child){ this.element.removeChild(child); }.bind(this)); return this.__getText(); }, onComplete: function(transport){ this._checkEmpty(); this.__onComplete(transport); } });