Ravens PHP Scripts: Forums
 

 

View next topic
View previous topic
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Ravens PHP Scripts And Web Hosting Forum Index -> NukeSentinel(tm) Bug Reports
Author Message
iray
New Member
New Member



Joined: Oct 30, 2004
Posts: 21

PostPosted: Tue Nov 23, 2004 5:19 pm Reply with quote

Hi! I am implementing sentinel to UNITED-NUKE as I tell to Bob. My whole system has concept to be W3C valid, but blocks of sentinel is'nt. So I maked-up very stable mod. I will be very happy, if you add this to next official Sentinel release (<marquee> isn't very cool...):

First, it is needed to put some code to head section. In UNITED-NUKE we have for this issue special iterface, but in PHP-Nuke it must be placed in custom_head.php on window.onload event, like this:
Code:


echo "<s_REMOVE_cript type=\"text/javas_REMOVE_cript\" src=\"includes/xbMarquee.js\"></sc_REMOVED_ript>\n";

$block_exist_res = $db->sql_fetchrow($db->sql_query("SELECT active FROM ".$prefix."_blocks WHERE blockfile='block-ScrollingSentinel.php'"));
$block_exist = $block_exist_res['active'];
if ($block_exist == "1") {
echo "var html = '';\n";
echo = "marquee.start();\n";
}


Next, I mod the block:
Code:


<?php

if (eregi(basename(__FILE__),$_SERVER['SC_REMOVE_RIPT_NAME'])) {
    Header("Location: ../index.php");
    die();
}
global $prefix, $db, $user, $admin, $ab_config;
$usemarquee = 1;
$scrolldirection = "Down";
$content = "";
$content .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
$content .= "  <tr>\n";
$content .= "  <td align=\"center\" valign=\"top\"> This is the list of Sentinel banned IP addresses. </td>\n";
$content .= "</tr>\n";
$content .= "<tr>\n";
$content .= "  <td align=\"center\">\n";
$content .= "  <hr>\n";
$content .= "  </td>\n";
$content .= "</tr>\n";
$content .= "<tr>\n";
$content .= "  <td align=\"left\">\n";

$content .= "<sc_REMOVE_ript type=\"text/javas_REMOVE_cript\">\n";
$content .= "<!--\n";
$content .= "html = '';\n";
$result = $db->sql_query("SELECT ip_addr, reason FROM ".$prefix."_nsnst_blocked_ips ORDER BY date DESC LIMIT 30");
while (list($ip_addr, $ip_reason) = $db->sql_fetchrow($result)) {
  if((is_admin($admin) AND $ab_config['display_link']==1) OR ((is_user($user) OR is_admin($admin)) AND $ab_config['display_link']==2) OR $ab_config['display_link']==3) {
    $lookupip = str_replace("*", "0", $ip_addr);
    $content .= "html += '<b><big>&middot;<\/big><\/b>&nbsp;<a href=\"".htmlspecialchars("".$ab_config['lookup_link']."$lookupip")."\" target=\"_blank\">$ip_addr<\/a>'\n";
  } else {
    $content .= "html += '<b><big>&middot;<\/big><\/b>&nbsp;$ip_addr'\n";
  }
  if((is_admin($admin) AND $ab_config['display_reason']==1) OR ((is_user($user) OR is_admin($admin)) AND $ab_config['display_reason']==2) OR $ab_config['display_reason']==3) {
    $result2 = $db->sql_query("SELECT reason FROM ".$prefix."_nsnst_blockers WHERE blocker='$ip_reason'");
    list($reason) = $db->sql_fetchrow($result2);
    $reason = str_replace("Abuse-","",$reason);
    $content .= "html += '&nbsp;-&nbsp;$reason'\n";
  }
  $content .= "html += '<br />'\n";
}

// 20 pixels high, 200 pixels wide,
//scrolls 3 pixels to left each 100 ms
$content .= "marquee = new xbMarquee('sentinel-marquee', 150, 100, 1, 75, '".strtolower($scrolldirection)."', 'scroll', html);\n";
$content .= "marquee.widthUnit = '%'\n";
$content .= "marquee.heightUnit = 'px'\n";
$content .= "marquee.onmouseover = function () { this.stop(); };\n";
$content .= "marquee.onmouseout  = function () { this.start(); };\n";

$content .= "//-->\n";
$content .= "</sc_REMOVE_ript>\n";

$content .= "  </td>\n";
$content .= "</tr>\n";
$content .= "<tr>\n";
$content .= "  <td align=\"center\">\n";
$content .= "  <hr>\n";
$content .= "  </td>\n";
$content .= "</tr>\n";
$content .= "<tr>\n";
$content .= "  <td align=\"center\"><a href=\"http://www.nukescripts.net\" target=\"_blank\">"._AB_NUKESENTINEL." ".$ab_config['version_number']."</a></td>\n";
$content .= "</tr>\n";
$content .= "</table>\n";

?>


Finally, there is a code of includes/xbMarquee.js:
Code:


/*
 * xbMarquee.js
 * $Revision: 1.2 $ $Date: 2003/02/07 16:04:20 $
 */

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * 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 Netscape code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Corporation.
 * Portions created by the Initial Developer are Copyright (C) 2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s): Doron Rosenberg <doron@netscape.com>
 *                 Bob Clary <bclary@netscape.com>
 *
 * ***** END LICENSE BLOCK ***** */

function xbMarquee(id, height, width, scrollAmount, scrollDelay, direction, behavior, html)
{
  this.id            = id;
  this.scrollAmount  = scrollAmount ? scrollAmount : 6;
  this.scrollDelay   = scrollDelay ? scrollDelay : 85;
  this.direction     = direction ? direction.toLowerCase() : 'left'; 
  this.behavior      = behavior ? behavior.toLowerCase() : 'scroll'; 
  this.name          = 'xbMarquee_' + (++xbMarquee._name);
  this.runId         = null;
  this.html          = html;
  this.isHorizontal = ('up,down'.indexOf(this.direction) == -1);

  if (typeof(height) == 'number')
  {
    this.height = height;
    this.heightUnit = 'px';
  }
  else if (typeof(height) == 'string')
  {
    this.height = parseInt('0' + height, 10);
    this.heightUnit = height.toLowerCase().replace(/^[0-9]+/, '');
  }
  else
  {
    this.height = 100;
    this.heightUnit = 'px';
  }

  if (typeof(width) == 'number')
  {
    this.width = width;
    this.widthUnit = 'px';
  }
  else if (typeof(width) == 'string')
  {
    this.width = parseInt('0' + width, 10);
    this.widthUnit = width.toLowerCase().replace(/^[0-9]+/, '');
  }
  else
  {
    this.width = 100;
    this.widthUnit = 'px';
  }

  // xbMarquee UI events
  this.onmouseover   = null;
  this.onmouseout    = null;
  this.onclick       = null;
  // xbMarquee state events
  this.onstart       = null;
  this.onbounce      = null;

  var markup = '';

  if (document.layers)
  {
    markup = '<ilayer id="' + this.id + 'container" name="' + this.id + 'container" ' +
             'height="' + height + '" ' +
             'width="' + width + '"  ' +
             'clip="' + width + ', ' + height + '" ' +
             '>' +
             '<\/ilayer>';
  }
  else if (document.body && typeof(document.body.innerHTML) != 'string')
  {
    markup = '<div id="' + this.id + 'container" ' +
             'style="position: relative; overflow: scroll; ' +
             'height: ' + this.height + this.heightUnit + '; ' +
             'width: ' + this.width + this.widthUnit + '; ' +
             'clip: rect(0px, ' + this.width + this.widthUnit + ', ' + this.height + this.heightUnit + ', 0px); ' +
             '">' +
             '<div id="' + this.id + '" style="position:relative;' +
             (this.isHorizontal ? 'width:0px;' : '') + // if we scroll horizontally, make the text container as small as possible
             '">' +
             (this.isHorizontal ? '<nobr>' : '') +
             this.html +
             (this.isHorizontal ? '<\/nobr>' : '') +
             '<\/div>' +
             '<\/div>';
  }
  else
  {
    markup = '<div id="' + this.id + 'container" ' +
             'style="position: relative; overflow: hidden; ' +
             'height: ' + this.height + this.heightUnit + '; ' +
             'width: ' + this.width + this.widthUnit + '; ' +
             'clip: rect(0px, ' + this.width + this.widthUnit + ', ' + this.height + this.heightUnit + ', 0px); ' +
             '">' +
             '<\/div>';
  }
  document.write(markup);

  window[this.name] = this;

}

// Class Properties/Methods

xbMarquee._name = -1;

xbMarquee._getInnerSize = function(elm, propName)
{
  var val = 0;

  if (document.layers)
  {
    // navigator 4
    val = elm.document[propName];
  }
  else if (elm.style && typeof(elm.style[propName]) == 'number')
  {
    // opera
    // bug in Opera 6 width/offsetWidth. Use clientWidth
    if (propName == 'width' && typeof(elm.clientWidth) == 'number')
      val = elm.clientWidth;
    else
      val =  elm.style[propName];
  }
  else
  {
    //mozilla and IE
    switch (propName)
    {
    case 'height':
       if (typeof(elm.offsetHeight) == 'number')
         val =  elm.offsetHeight;
       break;
    case 'width':
       if (typeof(elm.offsetWidth) == 'number')
         val = elm.offsetWidth;
       break;
    }
  }

  return val;

};

xbMarquee.getElm = function(id)
{
  var elm = null;
  if (document.getElementById)
  {
    elm = document.getElementById(id);
  }
  else
  {
    elm = document.all[id];
  }
  return elm;
}

xbMarquee.dispatchUIEvent = function (event, marqueeName, eventName)
{
  var marquee = window[marqueeName];
  var eventAttr = 'on' + eventName;
  if (!marquee)
  {
    return false;
  }

  if (!event && window.event)
  {
    event = window.event;
  }

  switch (eventName)
  {
  case 'mouseover':
  case 'mouseout':
  case 'click':
    if (marquee[eventAttr])
      return marquee['on' + eventName](event);
  }

  return false;
};

xbMarquee.createDispatchEventAttr = function (marqueeName, eventName)
{
  return 'on' + eventName + '="xbMarquee.dispatchUIEvent(event, \'' + marqueeName + '\', \'' + eventName + '\')" ';
};

// Instance properties/methods

xbMarquee.prototype.start = function ()
{
  var markup = '';

  this.stop();

  if (!this.dirsign)
  {
    if (!document.layers)
    {
      this.containerDiv = xbMarquee.getElm(this.id + 'container');

      if (typeof(this.containerDiv.innerHTML) != 'string')
      {
        return;
      }

      // adjust the container size before inner div is filled in
      // so IE will not hork the size of percentage units
      var parentNode    = null;
      if (this.containerDiv.parentNode)
        parentNode = this.containerDiv.parentNode;
      else if (this.containerDiv.parentElement)
        parentNode = this.containerDiv.parentElement;

      if (parentNode &&
          typeof(parentNode.offsetHeight) == 'number' &&
          typeof(parentNode.offsetWidth) == 'number')
      {
        if (this.heightUnit == '%')
        {
          this.containerDiv.style.height =
          parentNode.offsetHeight * (this.height/100) + 'px';
        }

        if (this.widthUnit == '%')
        {
          this.containerDiv.style.width =
          parentNode.offsetWidth * (this.width/100) + 'px';
        }
      }

      markup += '<div id="' + this.id + '" ' +
        'style="position:relative; visibility: hidden;' +
        (this.isHorizontal ? 'width:0px;' : '') + // if we scroll horizontally, make the text container as small as possible
        '" ' +
        xbMarquee.createDispatchEventAttr(this.name, 'mouseover') +
        xbMarquee.createDispatchEventAttr(this.name, 'mouseout') +
        xbMarquee.createDispatchEventAttr(this.name, 'click') +
        '>' +
        (this.isHorizontal ? '<nobr>' : '') +
        this.html +
        (this.isHorizontal ? '<\/nobr>' : '') +
        '<\/div>';

      this.containerDiv.innerHTML = markup;
      this.div                    = xbMarquee.getElm(this.id);
      this.styleObj     = this.div.style;

    }
    else /* if (document.layers) */
    {
      this.containerDiv = document.layers[this.id + 'container'];
      markup =
        '<layer id="' + this.id + '" name="' + this.id + '" top="0" left="0" ' +
        xbMarquee.createDispatchEventAttr(this.name, 'mouseover') +
        xbMarquee.createDispatchEventAttr(this.name, 'mouseout') +
        xbMarquee.createDispatchEventAttr(this.name, 'click') +
        '>' +
        (this.isHorizontal ? '<nobr>' : '') +
        this.html +
        (this.isHorizontal ? '<\/nobr>' : '') +
        '<\/layer>';

      this.containerDiv.document.write(markup);
      this.containerDiv.document.close();
      this.div          = this.containerDiv.document.layers[this.id];
      this.styleObj     = this.div;
    }

    // Start must not run until the page load event has fired
    // due to Internet Explorer not setting the height and width of
    // the dynamically written content until then
    switch (this.direction)
    {
    case 'down':
      this.dirsign = 1;
      this.startAt = -xbMarquee._getInnerSize(this.div, 'height');
      this._setTop(this.startAt);

      if (this.heightUnit == '%')
        this.stopAt = this.height * xbMarquee._getInnerSize(this.containerDiv, 'height') / 100;
      else
        this.stopAt  = this.height;

      break;

    case 'up':
      this.dirsign = -1;

      if (this.heightUnit == '%')
        this.startAt = this.height * xbMarquee._getInnerSize(this.containerDiv, 'height') / 100;
      else     
        this.startAt = this.height;

      this._setTop(this.startAt);
      this.stopAt  = -xbMarquee._getInnerSize(this.div, 'height');

      break;

    case 'right':
      this.dirsign = 1;
      this.startAt = -xbMarquee._getInnerSize(this.div, 'width');
      this._setLeft(this.startAt);

      if (this.widthUnit == '%')
        this.stopAt = this.width * xbMarquee._getInnerSize(this.containerDiv, 'width') / 100;
      else   
        this.stopAt  = this.width;

      break;

    case 'left':
    default:
      this.dirsign = -1;

      if (this.widthUnit == '%')
        this.startAt = this.width * xbMarquee._getInnerSize(this.containerDiv, 'width') / 100;
      else 
        this.startAt = this.width

      this._setLeft(this.startAt);
      this.stopAt  = -xbMarquee._getInnerSize(this.div,'width');

      break;
    }
    this.newPosition          = this.startAt;
    this.styleObj.visibility = 'visible';
  }

  this.newPosition += this.dirsign * this.scrollAmount;

  if ( (this.dirsign == 1  && this.newPosition > this.stopAt) ||
       (this.dirsign == -1 && this.newPosition < this.stopAt) )
  {
    if (this.behavior == 'alternate')
    {
      if (this.onbounce)
      {
        // fire bounce when alternate changes directions
        this.onbounce();
      }
      this.dirsign = -this.dirsign;
      var temp     = this.stopAt;
      this.stopAt  = this.startAt;
      this.startAt = temp;
    }
    else
    {
      // fire start when position is a start
      if (this.onstart)
      {
        this.onstart();
      }
      this.newPosition = this.startAt;
    }
  }
 
  switch(this.direction)
  {
    case 'up':
    case 'down':
      this._setTop(this.newPosition);
      break;

    case 'left':
    case 'right':
    default:
      this._setLeft(this.newPosition);
      break;
  }

  this.runId = setTimeout(this.name + '.start()', this.scrollDelay);
};

xbMarquee.prototype.stop = function ()
{
  if (this.runId)
    clearTimeout(this.runId);
   
  this.runId = null;
};

xbMarquee.prototype.setInnerHTML = function (html)
{
  if (typeof(this.div.innerHTML) != 'string')
  {
    return;
  }

  var running = false;
  if (this.runId)
  {
    running = true;
    this.stop();
  }
  this.html = html;
  this.dirsign = null;
  if (running)
  {
    this.start();
  }
};

// fixes standards mode in gecko
// since units are required

if (document.layers)
{
  xbMarquee.prototype._setLeft = function (left)
  {
    this.styleObj.left = left;
  };

  xbMarquee.prototype._setTop = function (top)
  {
    this.styleObj.top = top;
  };
}
else
{
  xbMarquee.prototype._setLeft = function (left)
  {
    this.styleObj.left = left + 'px';
  };

  xbMarquee.prototype._setTop = function (top)
  {
    this.styleObj.top = top + 'px';
  };
}


I check this with W3C validator and everything was fine Smile If you have any question about this, so ask me. I try to explain you anything Smile

Don't forget to remove _REMOVE_ - I was catched by Sentinel for several times when I was posting this mod....
 
View user's profile Send private message
Display posts from previous:       
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Ravens PHP Scripts And Web Hosting Forum Index -> NukeSentinel(tm) Bug Reports

View next topic
View previous topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2007 phpBB Group
All times are GMT - 6 Hours
 
Forums ©