gecko-dev/webtools/bugzilla/js/TUI.js
bugreport%peshkin.net 507b2571cb Bug 262592: Enable templates to use a cookies to remember UI preferences and hide/expose content
Patch by Dennis Melentyev <dennis.melentyev@infopulse.com.ua>
r=joel, a=justdave
2005-07-12 12:32:16 +00:00

169 lines
5.0 KiB
JavaScript

/* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Bugzilla Bug Tracking System.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Dennis Melentyev <dennis.melentyev@infopulse.com.ua>
*/
/* This file provides JavaScript functions to be included once one wish
* to add a hide/reveal/collapse per-class functionality
*
*
* This file contains hide/reveal API for customizable page views
* TUI stands for Tweak UI.
*
* See bug 262592 for usage examples.
*
* Note: this interface is experimental and under development.
* We may and probably will make breaking changes to it in the future.
*/
var TUIClasses = new Array;
var TUICookiesEnabled = -1;
// Internal function to demangle cookies
function TUI_demangle(value) {
var pair;
var pairs = value.split(",");
for (i = 0; i < pairs.length; i++) {
pair = pairs[i].split(":");
if (pair[0] != null && pair[1] != null)
TUIClasses[pair[0]] = pair[1];
}
}
/* TUI_tweak: Function to redraw whole document.
* Also, initialize TUIClasses array with defaults, then override it
* with values from cookie
*/
function TUI_tweak( cookiesuffix, classes ) {
var dc = document.cookie;
var begin = -1;
var end = 0;
// Register classes and their defaults
TUI_demangle(classes);
if (TUICookiesEnabled > 0) {
// If cookies enabled, process them
TUI_demangle(TUI_getCookie(cookiesuffix));
}
else if (TUICookiesEnabled == -1) {
// If cookies availability not checked yet since browser does
// not has navigator.cookieEnabled property, let's check it manualy
var cookie = TUI_getCookie(cookiesuffix);
if (cookie.length == 0)
{
TUI_setCookie(cookiesuffix);
// Cookies are definitely disabled for JS.
if (TUI_getCookie(cookiesuffix).length == 0)
TUICookiesEnabled = 0;
else
TUICookiesEnabled = 1;
}
else {
// Have cookie set, pretend to be able to reset them later on
TUI_demangle(cookie);
TUICookiesEnabled = 1;
}
}
if (TUICookiesEnabled > 0) {
var els = document.getElementsByTagName('*');
for (i = 0; i < els.length; i++) {
if (null != TUIClasses[els[i].className]) {
TUI_apply(els[i], TUIClasses[els[i].className]);
}
}
}
return;
}
// TUI_apply: Function to draw certain element.
// Receives element itself and style value: hide, reveal or collapse
function TUI_apply(element, value) {
if (TUICookiesEnabled > 0 && element != null) {
switch (value)
{
case 'hide':
element.style.visibility="hidden";
break;
case 'collapse':
element.style.visibility="hidden";
element.style.display="none";
break;
case 'reveal': // Shown item must expand
default: // The default is to show & expand
element.style.visibility="visible";
element.style.display="";
break;
}
}
}
// TUI_change: Function to process class.
// Usualy called from onclick event of button
function TUI_change(cookiesuffix, clsname, action) {
if (TUICookiesEnabled > 0) {
var els, i;
els = document.getElementsByTagName('*');
for (i=0; i<els.length; i++) {
if (els[i].className.match(clsname)) {
TUI_apply(els[i], action);
}
}
TUIClasses[clsname]=action;
TUI_setCookie(cookiesuffix);
}
}
// TUI_setCookie: Function to set TUI cookie.
// Used internally
function TUI_setCookie(cookiesuffix) {
var cookieval = "";
var expireOn = new Date();
expireOn.setYear(expireOn.getFullYear() + 25);
for (clsname in TUIClasses) {
if (cookieval.length > 0)
cookieval += ",";
cookieval += clsname+":"+TUIClasses[clsname];
}
document.cookie="Bugzilla_TUI_"+cookiesuffix+"="+cookieval+"; expires="+expireOn.toString();
}
// TUI_getCookie: Function to get TUI cookie.
// Used internally
function TUI_getCookie(cookiesuffix) {
var dc = document.cookie;
var begin, end;
var cookiePrefix = "Bugzilla_TUI_"+cookiesuffix+"=";
begin = dc.indexOf(cookiePrefix, end);
if (begin != -1) {
begin += cookiePrefix.length;
end = dc.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin, end));
}
return "";
}