0e834c2000-02-24Martin Nilsson // This is a roxen module. Copyright © 1996 - 2000, Roxen IS. // // This module makes it possible to write symbolic names instead of // absoulte hrefs. // // made by Mattias Wingstedt
57f45e1996-11-27Per Hedbor 
de905c2000-04-16Martin Nilsson constant cvs_version = "$Id: indirect_href.pike,v 1.19 2000/04/16 15:46:58 nilsson Exp $"; constant thread_safe = 1;
b1fca01996-11-12Per Hedbor #include <module.h> inherit "module"; mapping hrefs; void create() {
de905c2000-04-16Martin Nilsson  defvar( "hrefs", "roxen = http://www.roxen.com\n" "community = http://community.roxen.com", "Indirect hrefs", TYPE_TEXT_FIELD, "The URL database with the syntax:<br>\n"
57f45e1996-11-27Per Hedbor  "[name] = [URL]\n" );
de905c2000-04-16Martin Nilsson  /* defvar( "tagname", "ai", "Tag name", TYPE_STRING, "The name of the tag." ); */
b1fca01996-11-12Per Hedbor }
1973552000-02-10Martin Nilsson constant module_type = MODULE_PARSER; constant module_name = "Indirect href";
de905c2000-04-16Martin Nilsson //constant module_unique = 0;
1973552000-02-10Martin Nilsson constant module_doc =
69ab4c2000-04-06Mattias Wingstedt #"Indirect href. Adds a new tag <tt>&lt;ai name=&gt;</tt> that works like <tt>&lt;a href=&gt;</tt> but uses a symbolic name instead of a URL. The symbolic name is translated to a proper URL and the tag rewritten to a proper &lt;a href=&gt; tag. The translation between symbolic names and URLs is stored in a module variable. The advantage of this module is that each URL will only be stored in one place and it becomes very easy to change it, no matter how many links use it. As an extra bonus the name <tt>random</tt> will be replaces by a random URL from the list.";
b1fca01996-11-12Per Hedbor 
be754f1999-12-09Martin Nilsson 
b1fca01996-11-12Per Hedbor void start() {
de905c2000-04-16Martin Nilsson  array(string) lines;
57f45e1996-11-27Per Hedbor  string variable, value;
b1fca01996-11-12Per Hedbor  hrefs = ([ ]);
be754f1999-12-09Martin Nilsson  if (lines = (query( "hrefs" )-" "-"\t") /"\n") foreach (lines, string line)
b1fca01996-11-12Per Hedbor  if (sscanf( line, "%s=%s", variable, value ) >= 2)
be754f1999-12-09Martin Nilsson  hrefs[ variable ] = value;
b1fca01996-11-12Per Hedbor }
de905c2000-04-16Martin Nilsson class TagAI { inherit RXML.Tag; string name; void create() { if(variables->tagname) name = query("tagname"); else name = "ai";
be754f1999-12-09Martin Nilsson  }
b1fca01996-11-12Per Hedbor 
de905c2000-04-16Martin Nilsson  class Frame { inherit RXML.Frame; array do_return() { if(!args->name || !sizeof(hrefs)) { result = content; return 0; } if(!(hrefs->random) && args->name=="random") args->href=values(hrefs)[random(sizeof(hrefs))]; else args->href=hrefs[args->name]; m_delete(args, "name"); result = Roxen.make_container("a", args, content); return 0; } }
b1fca01996-11-12Per Hedbor }
c589a22000-04-15Per Hedbor TAGDOCUMENTATION; #ifdef manual constant tagdoc=([
baf02c2000-04-15Per Hedbor  "ai":#"<desc cont><short>
c589a22000-04-15Per Hedbor  Makes it possible to use a database of links.</short> Each link is referred to by a symbolic name instead of the URL. <p>The database is updated through the configuration interface. The tag is available through the <module>Indirect href</module> module.</p></desc> <attr name='name' value='string' required> Which link to fetch from the database. There is a special case, <att>name='random'</att> that will choose a random link from the database. </attr>", ]); #endif