ConLite/conlite/scripts/rowMark.js

429 Zeilen
12 KiB
JavaScript

/**
* Table rowMark
*
* myRow = new rowMark(1,2,3,4)
*
* 1: Farbe des Over Effekts z.B. "#ff0000" - string
* 2: Farbe des Mark Effeks - string
* 3: Farbe des Over Effeks bei der Marked Row - string
* 4: Funktion die bei onClick aufgerufen wird - string
*
* <tr class="grau" onMouseOver="myRow.over(this)" onMouseOut="myRow.out(this)" onClick="myRow.click(this)">
* <td>eine Zeile</td>
* <td><img src="einbild.gif"></td>
* </tr>
*
* @param String sOverColor Over-Color
* @param String sMarkedColor Marked-Color
* @param String sOverMarked Over-Marked-Color
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @modified Timo Trautmann <timo.trautmann@4fb.de> added support for second marked Color used as active sync color, defined by class
variable markedSyncColor Each table row containing class name con_sync gets this marked color
* @version 1.2
* @copyright Jan Lengowski 2002
*/
function rowMark(overColor, markedColor, overMarked, onClick, instanceName) {
/**
* Set class properties
* @access private
*/
this.instanceName = instanceName;
this.overColor = overColor;
this.markedColor = markedColor;
this.overMarked = overMarked;
this.onClick = onClick;
this.highlightFrame = "#CCCCCC";
this.backgroundColor = "#E2E2E2";
this.markedSyncColor = "#AED2F1";
this.syncColor = "#ddecf9";
/**
* dynamic properties
* @access private
*/
this.oldColor = '';
this.oldColorMarked = '';
this.markedRow = '';
/**
* Define class methods
* @access private
*/
this.over = rowMark_over;
this.out = rowMark_out;
this.click = rowMark_click;
this.reset = rowMark_reset;
/**
* Browsercheck
* @access private
*/
this.browser = '';
}
/**
* rowMark::over()
* @param object oRow table row object
*/
function rowMark_over(oRow) {
if (oRow == null)
{
return;
}
if ( oRow.style.backgroundColor != this.markedColor ) {
this.oldColor = oRow.style.backgroundColor;
}
oRow.style.backgroundColor = this.overColor;
/*if ( oRow.style.backgroundColor == this.markedColor ) {
oRow.style.backgroundColor = this.overMarked;
} else {
oRow.style.backgroundColor = this.overColor;
}*/
}
/**
* rowMark::out()
* @param object oRow table row object
*/
function rowMark_out(oRow) {
if (oRow == this.markedRow) {
if (oRow.className=="con_sync") {
oRow.style.backgroundColor = this.markedSyncColor;
} else {
oRow.style.backgroundColor = this.markedColor;
}
} else {
oRow.style.backgroundColor = this.oldColor;
}
}
function rowMark_reset () {
var oObjects = document.getElementsByTagName('tr');
var pattern=eval("/" + this.instanceName + "\\.click\\(this\\)/m");
for (var i = 0; i < oObjects.length; i++) {
var sOnclick = String(oObjects[i].onclick);
if (sOnclick != '' && sOnclick != 'undefined') {
if (sOnclick.match(pattern)) {
if (oObjects[i].className=="con_sync") {
oObjects[i].style.backgroundColor = this.syncColor;
} else {
oObjects[i].style.backgroundColor = '#FFFFFF';
}
}
}
}
this.markedRow = '';
}
/**
* rowMark::over()
* @param object oRow table row object
*/
function rowMark_click(oRow)
{
if (oRow == null)
{
return;
}
if (typeof this.markedRow != "object")
{
if (oRow.className=="con_sync") {
oRow.style.backgroundColor = this.markedSyncColor;
} else {
oRow.style.backgroundColor = this.markedColor;
}
this.markedRow = oRow;
this.oldColorMarked = this.oldColor;
if ( this.onClick != "")
{
eval( this.onClick );
}
}
else if (this.markedRow != oRow)
{
/* reset old */
this.markedRow.style.backgroundColor = this.oldColorMarked;
/* highlight new*/
if (oRow.className=="con_sync") {
oRow.style.backgroundColor = this.markedSyncColor;
} else {
oRow.style.backgroundColor = this.markedColor;
}
this.markedRow = oRow;
this.oldColorMarked = this.oldColor;
if ( this.onClick != "")
{
eval(this.onClick);
}
}
}
/**
* Table rowMark with image rollover
*
* REQUIRES rowMark CLASS!
*
* myRow = new imgMark(1, 2, 3, 4, 5, 6);
*
* 1: Farbe des Over Effekts z.B. "#ff0000" - string
* 2: Farbe des Mark Effeks - string
* 3: Farbe des Over Effeks bei der Marked Row - string
* 4: Pfad des Bildes das bei .over() gewechselt wird - string
* 5: Pfad des Bildes das bei .out() gewechselt wird - string
* 6: Function die bei onClick aufgerufen wird - string
*
* <tr class="grau" onMouseOver="myRow.over(this, 0)" onMouseOut="myRow.out(this, 0)" onClick="myRow.click(this)">
* <td>eine Zeile</td>
* <td><img src="einbild.gif"></td>
* </tr>
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @version 1.2
* @copyright Jan Lengowski 2002
*/
function imgMark(overColor, markedColor, overMarked, imgOutSrc, imgOverSrc, onClick) {
/**
* Call parent class constructor
* @access private
*/
this.base = rowMark;
this.base(overColor, markedColor, overMarked, onClick);
/**
* Set image path properties
* @access private
*/
this.imgOutSrc = imgOutSrc;
this.imgOverSrc = imgOverSrc;
/**
* Modify inherited .over() method
* @access private
*/
var str = this.over + '';
var astr = str.split('\n');
var fstr = 'var img = oRow.getElementsByTagName("IMG"); img[imgId].src = this.imgOverSrc;';
for (i=2; i<astr.length-2; i++) {
fstr += astr[i];
}
this.over = new Function ('oRow', 'imgId', fstr);
/**
* Modify inherited .out() method
* @access private
*/
var str = this.out + '';
var astr = str.split('\n');
var fstr = 'var img = oRow.getElementsByTagName("IMG");img[imgId].src = this.imgOutSrc;';
for (i=2; i<astr.length-2; i++) {
fstr += astr[i];
}
this.out = new Function ('oRow', 'imgId', fstr);
}
imgMark.prototype = new rowMark;
/* Sets the path value
in the area 'upl' */
function setPath( obj ) {
parent.parent.frames["left"].frames['left_top'].document.forms[1].path.value = obj.id;
parent.parent.frames["left"].frames['left_top'].document.getElementById("caption2").innerHTML = obj.id;
}
/**
* Function for showing and hiding synchronsation options
*
* @param boolean permSyncCat true shows options / flase hides options
*
* @author Timo Trautmann <timo.trautmann@4fb.de>
* @copyright four for business AG <www.4fb.de>
*/
function refreshSyncScreen(permSyncCat) {
//curLanguageSync = syncFrom;
var frame = parent.parent.frames["left"].frames['left_top'];
var syncElem = frame.document.getElementById('sync_cat_single');
var syncElemMultiple = frame.document.getElementById('sync_cat_multiple');
if (syncElem && syncElemMultiple) {
if (permSyncCat == 0) {
syncElem.style.display = 'none';
syncElemMultiple.style.display = 'none';
} else {
syncElem.style.display = 'block';
syncElemMultiple.style.display = 'block';
}
parent.parent.frameResize.resizeTopLeftFrame(frame.document.getElementById('top_left_container').offsetHeight+1);
}
}
/**
* Interface function for transfering
* data from left-bottom frame to the
* configuration object in the left-top
* frame.
*
* @param object HTML Table Row Object
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.de>
*/
function conInjectData(obj) {
/* Configuration Object Reference */
cfgObj = parent.parent.frames["left"].frames['left_top'].cfg;
/* Split the data string.
0 -> category id
1 -> category template id
2 -> category online
3 -> category public
4 -> has right for: template
5 -> has right for: online
6 -> has right for: public
7 -> has right for: template_edit
8 -> cat is syncable
9 -> idstring not splitted */
tmp_data = obj.id;
data = tmp_data.split("-");
if ( data.length == 9 ) {
/* Transfer data to the cfg object
through the .load() method */
//cfgObj.load(data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
cfgObj.load(data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], obj.id);
refreshSyncScreen(data[8]);
} else {
cfgObj.reset();
refreshSyncScreen(0);
}
/* String for debugging */
str = "";
str += "Category ID is: " + data[0] + "\n";
str += "Template ID is: " + data[1] + "\n";
str += "Online status is: " + data[2] + "\n";
str += "Public status is: " + data[3] + "\n";
str += "Right for Template: " + data[4] + "\n";
str += "Right for Online: " + data[5] + "\n";
str += "Right for Public: " + data[6] + "\n";
str += "Right for Template Config: " + data[7] + "\n";
str += "data7: " + data[7] + "\n";
if (is.NS)
{
if (!parent.parent.frames["left"].frames['left_top'].cfg.scrollX) parent.parent.frames["left"].frames['left_top'].cfg.scrollX = 0;
if (!parent.parent.frames["left"].frames['left_top'].cfg.scrollY) parent.parent.frames["left"].frames['left_top'].cfg.scrollY = 0;
parent.parent.frames["left"].frames['left_top'].cfg.scrollX = window.scrollX;
parent.parent.frames["left"].frames['left_top'].cfg.scrollY = window.scrollY;
}
}
/**
rowMark instances
**/
/* rowMark instance for the
general use */
row = new rowMark('#f9fbdd', '#ecf1b2', '#cccccc', 'row');
/* rowMark instance for the
Subnavigation */
sub = new rowMark('red', '#FFF', 'blue', 'sub');
/* rowMark instance for the
Content area */
con = new rowMark('#f9fbdd', '#ecf1b2', '#a9aec2', 'conInjectData(oRow)', 'con');
/* rowMark instance for the
Content Category area */
str = new rowMark('#f9fbdd', '#ecf1b2', '#a9aec2', 'refreshSelectedBaseCategory(oRow)', 'str');
/* rowMark instance for the
Upload area */
//upl = new rowMark('#f9fbdd', '#ecf1b2', '#a9aec2', 'setPath(oRow)', 'upl');
upl = new rowMark('#f9fbdd', '#ecf1b2', '#a9aec2', 'refreshPathFrame(oRow)', 'upl');
/* Create a new rowMark
Instance for the Content-
Article overview area */
artRow = new rowMark('#f9fbdd', '#ecf1b2', '#ecf1b2', 'if (conArtOverviewExtractData(oRow) == false) { window.setTimeout(conArtOverviewExtractData(oRow), 250); }', 'artRow');
/* rowMark instance for
area 'lay' */
lay = new rowMark('#f9fbdd', '#ecf1b2', '#a9aec2', 'saveObj(oRow)', 'lay');
function saveObj(oRow)
{
parent.parent.frames["left"].frames["left_top"].obj = oRow.id;
}
function refreshPathFrame(oRow) {
var newPath = oRow.id;
var left_top = parent.parent.frames["left"].frames["left_top"];
if (left_top) {
if (left_top.document.getElementById('caption2')) {
left_top.document.getElementById('caption2').innerHTML = newPath;
}
if (left_top.document.newdir) {
left_top.document.newdir.path.value = newPath;
}
id_path = newPath;
}
}
/**refreshSelectedBaseCategory
* Generic function to reMark a row
*/
function reMark(sObjId)
{
var elm = document.getElementById(sObjId);
if (typeof elm == 'object')
{
lay.over(elm);
lay.click(elm);
if (elm && elm != null)
{
elm.scrollIntoView(false);
}
}
}
/**
* Function returns offset left, top, width and heigth of a given htnmlelement as array
*
* @param object oElement - Object which should be analyzed
* @return array - containing dimension information
*/
var getElementPostion = function (oElement) {
var iHeigth = oElement.offsetHeight;
var iWidth = oElement.offsetWidth;
var iTop = 0, iLeft = 0;
while (oElement) {
iTop += oElement.offsetTop || 0;
iLeft += oElement.offsetLeft || 0;
oElement = oElement.offsetParent;
};
return [iLeft, iTop, iHeigth, iWidth];
}