зеркало из https://github.com/mozilla/pjs.git
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
This commit is contained in:
Родитель
3081364f33
Коммит
9ebf057b18
|
@ -0,0 +1,168 @@
|
|||
/* 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 "";
|
||||
}
|
Загрузка…
Ссылка в новой задаче