np_photolog_code

NP_photolog.php

<?
 
class NP_photolog extends NucleusPlugin {
 
	// name of plugin
	function getName() {
		return 'Photolog Plugin'; 
	}
 
	// author of plugin
	function getAuthor()  { 
		return 'David Reese'; 
	}
 
	// an URL to the plugin website
	// can also be of the form mailto:foo@bar.com
	function getURL() 
	{
		return 'http://www.xiffy.nl/wakka/wakka.php?wakka=Photolog'; 
	}
 
	// version of the plugin
	function getVersion() {
		return '0.1'; 
	}
 
	// a description to be shown on the installed plugins listing
	function getDescription() { 
		return 'Returns a photo gallery, using item title as dir.';
	}
 
	function install() {
		$this->createOption("photolog_ext", "Image extension(no dot, eg. jpg, gif): ", "text", "jpg");
		$this->createOption("photolog_basedir", "Base directory of photos (eg. /home/mydir/www/photolog/): ", "text", "photolog");
		$this->createOption("photolog_urldir", "URL directory of photos (eg. http://mysite.org/photolog/): ", "text", "http://mysite.org/photolog/");
 
		$this->createOption("photolog_startword", "Text/image to start slideshow", "text", "start"); 
		$this->createOption("photolog_startphrase", "Text for start helptext", "text", "start slideshow"); 
		$this->createOption("photolog_stopword", "Text/image to stop slideshow", "text", "stop");
		$this->createOption("photolog_stopphrase", "Text for stop helptext", "text", "stop slideshow"); 
		$this->createOption("photolog_prevword", "Text/image to go to previous slide", "text", "prev");
		$this->createOption("photolog_prevphrase", "Text for previous slide helptext", "text", "previous image"); 
		$this->createOption("photolog_nextword", "Text/image to go to next slide", "text", "next");
		$this->createOption("photolog_nextphrase", "Text for nextslide helptext", "text", "next image"); 
		$this->createOption("photolog_btcontrol", "Text/html for between start-stop-prev-next", "text", "&nbsp;::&nbsp;"); 
		$this->createOption("photolog_prenum", "Text/html to proceed slide number", "text", "·");
		$this->createOption("photolog_postnum", "Text/html to go to go after slide number", "text", "·");
		$this->createOption("photolog_betweennum", "Text/html to go between slide numbers", "text", "&nbsp;");
    }
 
 
function doTemplateVar(&$item) {
 
function count_dir($param) {
    $dir   = opendir($param);
    $files = array();
    while ($ff=readdir($dir))
          {
          if ($ff!=".." && $ff!=".")
             {
             $files[count($files)]=$ff;
             }
          }
   return count($files);
 }
 
// get general variables from options, item array
$itemtitle = $item->title;
$basedir = $this->getOption(photolog_basedir);
$urldir = $this->getOption(photolog_urldir);
$imgext = $this->getOption(photolog_ext);
 
 
// pre-cache images
 
$numimages = count_dir ($basedir . $itemtitle);
$imgsize = getimagesize ($basedir . $itemtitle . "/1." . $imgext);
 
echo '<script type="text/javascript">';
for ($i = 1; $i <= $numimages; $i++)         
{
echo <<<EOT
s = new slide();
s.src = "$urldir$itemtitle/$i.$imgext";
SLIDES.add_slide(s);
EOT;
};
 
// get skinning variables from options
 
$startword = $this->getOption(photolog_startword);
$startphrase = $this->getOption(photolog_startphrase);
$stopword = $this->getOption(photolog_stopword);
$stopphrase = $this->getOption(photolog_stopphrase);
$prevword = $this->getOption(photolog_prevword);
$prevphrase = $this->getOption(photolog_prevphrase);
$nextword = $this->getOption(photolog_nextword);
$nextphrase = $this->getOption(photolog_nextphrase);
$btcontrol= $this->getOption(photolog_btcontrol);
 
$prenum = $this->getOption(photolog_prenum);
$postnum = $this->getOption(photolog_postnum);
$betweennum = $this->getOption(photolog_betweennum);
 
 
// output the actual slide, then the control box
 
echo <<<EOT
</script>
 
 
<!-- ====  the actual picture  ==== -->
<!-- ====  width=$imgsize[0] height=$imgsize[1]  ==== -->
 
<div class="slide">
<A HREF="javascript:SLIDES.next()" border="0">
<IMG name="SLIDESIMG"
src="$urldir$itemtitle/1.$imgext" border="0" alt=""></a></div>
 
<!-- ====  the slideshow control box ==== -->
 
<div class="controltext">
<span class="controlleft">
<A HREF="javascript:SLIDES.next();SLIDES.play()"
TITLE="$startphrase">$startword</A>$btcontrol
 
<A HREF="javascript:SLIDES.pause()"
TITLE="$stopphrase">
$stopword</A>$btcontrol
 
<A HREF="javascript:SLIDES.previous()"
TITLE="$prevphrase">
$prevword</A>$btcontrol
 
<A HREF="javascript:SLIDES.next()"
TITLE="$nextphrase">
$nextword</A></span>
 
<span class="controlright">
EOT;
 
for ($i = 1; $i <= $numimages; $i++)
    {
    $a = ($i-1);
    echo "<a href=\"javascript:SLIDES.goto_slide($a)\">";
    echo "$prenum$i$postnum</a>$betweennum\n";
    };
 
echo "</span>
</div>";
}
 
function doSkinVar($skinType) {	
}
 
}
?> 

photolog.js

/*==================================================*
 $Id: slideshow.js,v 1.4 2002/12/08 16:40:50 pat Exp pat $
 Copyright 2000 Patrick Fitzgerald
 http://www.barelyfitz.com/webapps/apps/slideshow/
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *==================================================*/
 
// There are two objects defined in this file:
// "slide" - contains all the information for a single slide
// "slideshow" - consists of multiple slide objects and runs the slideshow
 
//==================================================
// slide object
//==================================================
function slide(src,link,text,window,attr) {
// This is the constructor function for the slide object.
// It is called automatically when you create a new slide object.
// For example:
// s = new slide();
 
  // Image URL
  this.src = src;
 
  // Link URL
  this.link = link;
 
  // Text to display
  this.text = text;
 
  // Name of the target window ("_blank")
  this.window = window;
 
  // Attributes for the target window:
  // width=n,height=n,resizable=yes or no,scrollbars=yes or no,
  // toolbar=yes or no,location=yes or no,directories=yes or no,
  // status=yes or no,menubar=yes or no,copyhistory=yes or no
  // Example: "width=200,height=300"
  this.attr = attr;
 
  // Create an image object for the slide
  if (document.images) {
    this.image = new Image();
  }
 
  // Public methods
  this.load = slide_load;
  this.hotlink = slide_hotlink;
}
 
 
function slide_load() {
// This function loads the image for the slide
 
  if (!document.images) { return; }
 
  if (!this.image.src) {
    this.image.src = this.src;
  }
}
 
 
function slide_hotlink() {
// This function jumps to the slide's link.
// If a window was specified for the slide, then it opens a new window.
 
  if (this.window) {
 
    // If window attributes are specified, use them to open the new window
    if (this.attr) {
      window.open(this.link, this.window, this.attr);
 
    } else {
      // If window attributes are not specified, do not use them
      // (this will copy the attributes from the originating window)
      window.open(this.link, this.window);
    }
 
  } else {
    // Open the hotlink in the current window
    location.href = this.link;
  }
}
 
 
//==================================================
// slideshow object
//==================================================
function slideshow( slideshowname ) {
// This is the constructor function for the slideshow object.
// It is called automatically when you create a new object.
// For example:
// ss = new slideshow("ss");
 
  // Name of this object
  // (required if you want your slideshow to auto-play)
  // For example, "SLIDES1"
  this.name = slideshowname;
 
  // When we reach the last slide, should we loop around to start the
  // slideshow again?
  this.repeat = true;
 
  // Number of images to pre-fetch.
  // -1 = preload all images.
  //  0 = load each image is it is used.
  //  n = pre-fetch n images ahead of the current image.
  // I recommend preloading all images unless you have large
  // images, or a large amount of images.
  this.prefetch = -1;
 
  // IMAGE element on your HTML page.
  // For example, document.images.SLIDES1IMG
  this.image;
 
  // TEXTAREA element on your HTML page.
  // For example, document.SLIDES1FORM.SLIDES1TEXT
  this.textarea;
 
   // Milliseconds to pause between slides
  this.timeout = 3000;
 
  // These are private variables
  this.slides = new Array();
  this.current = 0;
  this.timeoutid = 0;
 
  // Public methods
  this.add_slide = slideshow_add_slide;
  this.set_image = slideshow_set_image;
  this.set_textarea = slideshow_set_textarea;
 
  this.play = slideshow_play;
  this.pause = slideshow_pause;
 
  this.update = slideshow_update;
  this.goto_slide = slideshow_goto_slide;
  this.next = slideshow_next;
  this.previous = slideshow_previous;
 
  this.get_text = slideshow_get_text;
  this.display_text = slideshow_display_text;
  this.hotlink = slideshow_hotlink;
 
  this.save_position = slideshow_save_position;
  this.restore_position = slideshow_restore_position;
 
  this.noscript = slideshow_noscript;
 
  // Private methods
  this.loop = slideshow_loop;
  this.valid_image = slideshow_valid_image;
}
 
 
function slideshow_add_slide( slide ) {
// Add a slide to the slideshow.
// For example:
// SLIDES1.add_slide(new slide("s1.jpg", "link.html"))
 
  // If this version of JavaScript does not allow us to
  // change images, then we can't do the slideshow.
  if (!document.images) { return; }
 
  var i = this.slides.length;
 
  // Prefetch the slide image if necessary
  if (this.prefetch == -1) {
    slide.load();
  }
 
  this.slides[i] = slide;
}
 
 
function slideshow_set_textarea( textareaobject ) {
// This function configures the slideshow to use a textarea to display
// the slideshow text.
 
  // Set the "textarea" property of the slideshow object.
  this.textarea = textareaobject;
 
  // Initialize the text in the textarea
  this.display_text();
}
 
 
function slideshow_set_image( imageobject ) {
// This function configures the slideshow and tells it which image
// needs to be updated.
 
  // If this version of JavaScript does not allow us to
  // change images, then we can't do the slideshow.
  if (!document.images)
    return
 
  // Set the "image" property of the slideshow object.
  this.image = imageobject;
}
 
 
function slideshow_valid_image() {
// Returns 1 if a valid image has been set for the slideshow
 
  if (!this.image)
  {
    // Stop the slideshow
    this.pause;
 
    // Display an error message
    window.status = "Error: slideshow image not initialized for " + this.name;
 
    return 0;
  }
  else {
    return 1;
  }
}
 
 
function slideshow_hotlink() {
// This function calls the hotlink() method for the current slide.
 
  this.slides[ this.current ].hotlink();
}
 
 
function slideshow_update() {
// This function updates the slideshow image on the page
 
  // Make sure the slideshow has been initialized correctly
  if (! this.valid_image()) { return; }
 
  // Load the slide image if necessary
  this.slides[ this.current ].load();
 
  // Pre-fetch the next slide image(s) if necessary
  if (this.prefetch > 0) {
    for (i = this.current + 1;
         i <= (this.current + this.prefetch) && i < this.slides.length;
         i++) {
      this.slides[i].load();
    }
  }
 
  // Update the image.
  this.image.src = this.slides[ this.current ].image.src;
 
  // Update the text
  this.display_text();
}
 
 
function slideshow_goto_slide(n) {
// This function jumpts to the slide number you specify.
// If you use slide number -1, then it jumps to the last slide.
// You can use this to make links that go to a specific slide,
// or to go to the beginning or end of the slideshow.
// Examples:
// <a href="javascript:myslides.goto_slide(0)">First</a>
// <a href="javascript:myslides.goto_slide(-1)">Last</a>
// <a href="javascript:myslides.goto_slide(5)">Catching a Fish</a>
 
  if (n == -1) {
    n = this.slides.length - 1;
  }
 
  if (n < this.slides.length && n >= 0) {
    this.current = n;
  }
 
  this.update();
}
 
 
function slideshow_next( ) {
// This function advances to the next slide.
 
  // Increment the image number
  if (this.current < this.slides.length - 1) {
    this.current++;
  } else if (this.repeat) {
    this.current = 0;
  }
 
  this.update();
}
 
 
function slideshow_previous( ) {
// This function goes to the previous slide.
 
  // Decrement the image number
  if (this.current > 0) {
    this.current--;
  } else if (this.repeat) {
    this.current = this.slides.length - 1;
  }
 
  this.update();
}
 
 
function slideshow_display_text(text) {
// This function displays text in the textarea.
 
  // If a textarea has been specified,
  // then this function changes the text displayed in it
  if (this.textarea) {
 
    if (text) {
      this.textarea.value = text;
    } else {
      this.textarea.value = this.slides[ this.current ].text;
    }
  }
}
 
 
function slideshow_get_text() {
// This function returns the text of the current slide
 
  return(this.slides[ this.current ].text);
}
 
 
function slideshow_loop( ) {
// This function is for internal use only.
// This function gets called automatically by a JavaScript timeout.
// It advances to the next slide, then sets the next timeout.
 
  // Go to the next image
  this.next( );
 
  // Keep playing the slideshow
  this.play( );
}
 
 
function slideshow_play(timeout) {
// This function implements the automatically running slideshow.
 
  // Make sure we're not already playing
  this.pause();
 
  // If a new timeout was specified (optional)
  // set it here
  if (timeout) {
    this.timeout = timeout;
  }
 
  // After the timeout, call this.loop()
  this.timeoutid = setTimeout( this.name + ".loop()", this.timeout);
}
 
 
function slideshow_pause( ) {
// This function stops the slideshow if it is automatically running.
 
  if (this.timeoutid != 0)
  {
    clearTimeout(this.timeoutid);
    this.timeoutid = 0;
  }
}
 
 
function slideshow_save_position(cookiename) {
// Saves the position of the slideshow in a cookie,
// so when you return to this page, the position in the slideshow
// won't be lost.
 
  if (!cookiename) {
    cookiename = this.name + '_slideshow';
  }
 
  document.cookie = cookiename + '=' + this.current;
}
 
 
function slideshow_restore_position(cookiename) {
// If you previously called slideshow_save_position(),
// returns the slideshow to the previous state.
 
  //Get cookie code by Shelley Powers
 
  if (!cookiename) {
    cookiename = this.name + '_slideshow';
  }
 
  var search = cookiename + "=";
 
  if (document.cookie.length > 0) {
    offset = document.cookie.indexOf(search);
    // if cookie exists
    if (offset != -1) { 
      offset += search.length;
      // set index of beginning of value
      end = document.cookie.indexOf(";", offset);
      // set index of end of cookie value
      if (end == -1) end = document.cookie.length;
      this.current = unescape(document.cookie.substring(offset, end));
      }
   }
}
 
 
function slideshow_noscript() {
// This function is not for use as part of your slideshow,
// but you can call it to get a plain HTML version of the slideshow
// images and text.
// You should copy the HTML and put it within a NOSCRIPT element, to
// give non-javascript browsers access to your slideshow information.
// This also ensures that your slideshow text and images are indexed
// by search engines.
 
  $html = "\n";
 
  // Loop through all the slides in the slideshow
  for (i=0; i < this.slides.length; i++) {
 
    slide = this.slides[i];
 
    $html += '<P>';
 
    if (slide.link) {
      $html += '<a href="' + slide.link + '">';
    }
 
    $html += '<img src="' + slide.src + '" ALT="slideshow image">';
 
    if (slide.link) {
      $html += '</a>';
    }
 
    if (slide.text) {
      $html += "<BR>\n" + slide.text;
    }
 
    $html += '</P>' + "\n\n";
  }
 
  // Make the HTML browser-safe
  $html = $html.replace(/\&/g, "&amp;" );
  $html = $html.replace(/</g, "&lt;" );
  $html = $html.replace(/>/g, "&gt;" );
 
  return('<pre>' + $html + '</pre>');
}

numbers.css

/* 
	This is a sample css sheet for the photolog plugin.
      NOTE: the plugin outputs DIVs for only four parts of the show:
      .slide (the actual image)
      .controltext (the box where the controls go)
      .controlleft (the start stop prev next controls)
      .controlright (the 1.2.3... numbers (or images) to select individual images
 
      these two are optional, can be included in your skin
      .phototitle (a title of the photo: actually, the 'body' text of your blog
      .pleasewait (a little note to appear underneath the photos until the first loads)
 */ 
 
.slide {
	z-index:20; 
	position: absolute;
	border: 2px solid #000;
	top: 140px;
	left: 70px;
}
 
.phototitle {
	z-index:100; 
	position: absolute;
	top: 145px;
	left: 60px;
	font-weight: bold;
	color:#eeeeee;
	background-color: #000;
}
 
.controltext {
	position: absolute;
	top: 120px;
	left: 70px;
	width: 490px;
	font-weight: bold;
	font-size: 11px;
	border: 1px solid #000;
	background-color: #c7cad3;
}
 
.controltext a:link, a:visited {
	color: #1D3565; 
	font-weight: bold;
	text-decoration: none;
}
 
.controltext a:hover {
	font-weight: bold;
	color: #ba0000; 
	background-color: #b7bac3;
}
 
.controlleft {
	float: left;
	margin-left: 5px;
}
 
.controlright {
	float: right;
	margin-right: 5px;
}
 
.pleasewait {
	z-index:5;
	position: absolute;
	top: 325px;
	left: 85px;
	padding: 10px;
	font-size: 14px;
	font-weight: bold;
	color:#eeeeee;
	background-color: #900;
}
np_photolog_code.txt · Last modified: 2006/07/05 13:03 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki