mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 09:05:45 +00:00
507b2571cb
Patch by Dennis Melentyev <dennis.melentyev@infopulse.com.ua> r=joel, a=justdave
169 lines
5.0 KiB
JavaScript
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 "";
|
|
}
|