devdaily home | apple | java | perl | unix | directory | blog

What this is

This file is included in the DevDaily.com "Ruby Source Code Warehouse" project. The intent of this project is to help you "Learn Ruby by Example" TM.

Other links

The source code

# Copyritght (c) 2002 TANIGUCHI Takaki
# This program is distributed under the GNU GPL 2 or later.

require 'aswiki/parser'
require "aswiki/i18n/#{$LANG}"
require 'aswiki/util'
require 'aswiki/revlink'

module AsWiki
  class PageData
    include AsWiki::Util
    include Amrita::ExpandByMember
    include AsWiki::I18N
    def initialize(name)
      @name = name
      @r = AsWiki::Repository.new

      @title    = $TITLE + ': ' + name

      pname = @name
      @edit        = cgiurl([['c', 'e']], pname)
      @toppage     = cgiurl([['c', 'v']], $TOPPAGENAME)
      @recentpages = cgiurl([['c', 'v']], 'RecentPages')
      @allpages    = cgiurl([['c', 'v']], 'AllPages')
      @rawpage     = cgiurl([['c', 'r']], pname)
      @historypage = cgiurl([['c', 'h']], pname)
      @diffpage    = cgiurl([['c', 'd']], pname)
      @helppage    = cgiurl([['c', 'v']], 'HelpPage')
      @searchpage  = cgiurl([], 'SearchPage')

      # @theme = { :href => "#$THEME/#$THEME.css" }
      @theme = { :href => File.dirname($CGIURL) +  "/default.css" }
    end
    attr_reader :searchpage
    attr_reader :theme
    attr_accessor :sb
    attr_reader :edit,:recentpages,:toppage,:allpages,:rawpage,
      :diffpage,:helppage, :historypage
    attr_reader :tree, :wikinames,:name
    attr_accessor :revision, :timestamp, :body, :md5sum, :title,
      :pagetype
    attr_accessor :ebol, :eeol

    module PageParts    
    end
    def PageData::load_parts_template(pagetype)
      pt = Amrita::TemplateFileWithCache[File.join($DIR_TEMPLATE,"Page/#{pagetype}.html")]
      pt.expand_attr = true
      pt.install_parts_to(PageParts)
    end
    def parts_extend(parts)
      data = self.clone
      data.extend PageParts.const_get(parts)
      return data
    end
    def menubar
      return parts_extend('Menubar')
    end
    def pagetitle
      return parts_extend('Pagetitle')
    end
    def pageheader
      return parts_extend('Pageheader')
    end
    def pagebody
      return parts_extend('Pagebody')
    end
    def pagefooter
      return parts_extend('Pagefooter')
    end
    
    def parsefile
      # c = @r.load(@name)
      @timestamp = @r.mtime(@name)
      @p = AsWiki::Parser.new(FileScanner[@name], @name)
      @wikinames = @p.wikinames
      @body = @p.tree

    end
    def parsetext(c)
      @p = AsWiki::Parser.new(Scanner.new(c.to_s), @name)
      @wikinames = @p.wikinames
      @body = @p.tree
    end

    def logtable
      backup = AsWiki::Backup.new
      return backup.rlog(@name).map{|l| 
	{ :revision => {
	    :url=> cgiurl([['c','h'], ['rev',l[0]]],@name),
	    :rev => l[0]
	  },
	  :historyraw => {
	    :url=> cgiurl([['c','hr'], ['rev',l[0]]],@name),
	    :rev => l[0]
	  },
	  :diffline => l[2].to_s,
	  :timestamp => timestr(l[1]),
	  :tonew => {:url =>  cgiurl([['c', 'd'], ['rn',0],
                                      ['ro',l[0]]], @name),
	    :text => "current - #{l[0]}"},
	  :toold => l[0] != 1 ?  {
	    :url => cgiurl([['c','d'], ['rn', l[0]],
                            ['ro', l[0]-1]], @name),
	    :text => "new #{l[0]} old #{l[0]-1}" }  : 'not avail'
	}
      }
    end

    def lastmodified
      timestr(timestamp)
    end

    def tableofcontents
      @p.tocdata 
    end
    def wikilinks
      @p.wikinames.delete_if{|w| w =~ /:[^:]/ }.uniq.map{|l| 
	[l, @r.mtime(l)]}.sort{|a,b| b[1].to_i <=> a[1].to_i}.map{|l|
	{ # :pname => wikilink(CGI::escapeHTML(l[0]), @name) ,
	  :pname => wikilink(CGI::escapeHTML(l[0])),  #, @name) ,
	  :modified =>  modified(l[1])  }}
    end
    def revlinks
      RevLink.new.list(@name).map{|l| 
	[l, @r.mtime(l)]}.sort{|a,b| b[1].to_i <=> a[1].to_i
      }.map{|l|
	{
	  :pname => wikilink(CGI::escapeHTML(l[0])),  #, @name) ,
	  :modified =>  modified(l[1])
	}
      }
    end
  end
end




Copyright 1998-2008 Alvin Alexander
All Rights Reserved.
 
devdaily.com is based in louisville, kentucky, and this web site is hosted by godaddy.com