// 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); } });