/* 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 ""; | |
} |