aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/0.52/html_promo.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/0.52/html_promo.rb')
-rw-r--r--lib/sisu/0.52/html_promo.rb382
1 files changed, 382 insertions, 0 deletions
diff --git a/lib/sisu/0.52/html_promo.rb b/lib/sisu/0.52/html_promo.rb
new file mode 100644
index 00000000..b41b1ffa
--- /dev/null
+++ b/lib/sisu/0.52/html_promo.rb
@@ -0,0 +1,382 @@
+=begin
+ * Name: SiSU information Structuring Universe - Structured information, Serialized Units
+ * Author: Ralph Amissah
+ * http://www.jus.uio.no/sisu
+ * http://www.jus.uio.no/sisu/SiSU/download.html
+
+ * Description: html advertising component, build here, mockup
+
+ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ralph Amissah
+
+ * License: GPL 2 or later
+
+ Summary of GPL 2
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ http://www.fsf.org/licenses/gpl.html
+ http://www.gnu.org/copyleft/gpl.html
+ http://www.jus.uio.no/sisu/gpl2.fsf
+
+ SiSU was first released to the public on January 4th 2005
+
+ SiSU uses:
+
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+ © Ralph Amissah 1997, current 2007.
+ All Rights Reserved.
+
+ * Ralph Amissah: ralph@amissah.com
+ ralph.amissah@gmail.com
+=end
+module SiSU_HTML_promo
+ require SiSU_lib + '/sysenv'
+ include SiSU_Env
+ class Ad
+ def initialize(md)
+ @md=md
+ @env=SiSU_Env::Info_env.new(@md.fns,@md)
+ @rc=SiSU_Env::Get_init.instance.yamlrc
+ @ad=SiSU_Env::Get_init.instance.ads
+ @vz=SiSU_Env::Get_init.instance.skin
+ @flag=@env.widget.promo?
+ end
+ def div
+ def major
+ @flag[:ad] ? '<div id="pane_major">' : ''
+ end
+ def minor
+ @flag[:ad] ? '<div id="pane_minor">' : ''
+ end
+ def close
+ @flag[:ad] ? '</div>' : ''
+ end
+ self
+ end
+ def display #(type=nil,id=nil)
+ ads_array,promo_array=[],[]
+ if @flag[:ad]
+ ads=if @md.promo && @md.promo.length > 0 #promo set in document
+ promo_array=@md.promo
+ elsif @flag[:sk] #promo set in associated skin
+ promo_array=@vz.widget_promo
+ elsif @flag[:rc] #promo set in rc file
+ promo_array=if @rc['promo'].class == String
+ @rc['promo'].split(/[,;]\s*/)
+ else @rc['promo']
+ end
+ else advert_extract_all
+ end
+ ads=if promo_array.length > 0
+ promo_array.each do |x|
+ ads_array << advert_extract_subject(x)
+ end
+ ads_array
+ end
+ adverts(ads)
+ #else no_adverts
+ end
+ end
+ def cell(prod,id)
+ @prod,@id=prod,id
+ def title
+ @prod['title'] ? %{<b>#{@prod['title']}</b>} : ''
+ end
+ def subtitle
+ @prod['subtitle'] ? %{ - #{@prod['subtitle']}} : ''
+ end
+ def author
+ @prod['author'] ? %{<p class="pane">#{@prod['author']}</p>} : ''
+ end
+ def editor
+ @prod['editor'] ? %{<p class="pane">#{@prod['editor']}</p>} : ''
+ end
+ def year
+ @prod['year'] ? %{<p class="pane">#{@prod['year']}</p>} : ''
+ end
+ def date
+ @prod['date'] ? %{<p class="pane">On: #{@prod['date']}</p>} : ''
+ end
+ def location
+ @prod['at'] ? %{<p class="pane">At: #{@prod['at']}</p>} : ''
+ end
+ def pages
+ @prod['pages'] ? %{<p class="pane">Pages: #{@prod['pages']} pages</p>} : ''
+ end
+ def form
+ @prod['form'] ? %{<p class="pane">#{@prod['form']}</p>} : ''
+ end
+ def nick
+ @prod['nick'] ? %{(#{@prod['nick']})<br />} : ''
+ end
+ def update
+ @prod['update'] ? %{<p class="pane">Updated: #{@prod['update']}</p>} : ''
+ end
+ def issn
+ @prod['issn'] ? %{<p class="pane">issn: #{@prod['issn']}</p>} : ''
+ end
+ def blurb
+ @prod['blurb'] ? %{<p class="pane_blurb">#{@prod['blurb']}</p>} : ''
+ end
+ def search_form
+ db=if @prod['db']=~/\S+/
+ @prod['db']=~/^SiSU_\S+/ ? @prod['db'] : "SiSU_#{@prod['db']}"
+ elsif defined? @rc['search']['db'] and @rc['search']['db'] =~/\S+/
+ @rc['search']['db']=~/^SiSU_\S+/ ? @prod['search']['db'] : "SiSU_#{@prod['db']}"
+ else nil
+ end
+ #target=@prod['target']=~/^\S+/ ? @prod['target'] : '_top'
+ action=if @prod['action']=~/^http:\/\//
+ @prod['action']
+ elsif defined? @rc['search']['action'] and @rc['search']['action'] =~/^http:\/\//
+ @rc['search']['action']
+ else nil
+ end
+ form=if action and db
+ '<br />' + @env.widget.search_form(action,db)
+ else ''
+ end
+ end
+ def links
+ if @prod['links'] #and @prod['links'] == Array
+ links_a=[]
+ @prod['links'].each do |x|
+ if x and x['url'] and x['title']
+ subtitle=x['subtitle'] ? %{ - #{x['subtitle']}} : ''
+ url_=x['url'] =~/http:/ ? x['url'] : "../#{x['url']}"
+ #url_=x['url'] =~/http:/ ? x['url'] : "#{@env.url.root}/#{x['url']}"
+ links_a << %{<p class="pane_link"><a href="#{url_}">#{x['title']}#{subtitle}</a></p>\n}
+ end
+ end
+ links_a.to_s
+ else ''
+ end
+ end
+ def image
+ @prod['image'] ? %{<img border="0" src="../_sisu/image_local/#{@prod['image']}" /><br />} : ''
+ end
+ def url_link
+ @url_=if @prod['url'] =~/http:/
+ "#{@prod['url']}"
+ else "../#{@prod['url']}" # "#{@env.url.root}/#{@prod['url']}"
+ end
+ def show
+ @prod['url'] ? %{<p class="pane_link"><a href="#@url_">#@url_</a></p>} : ''
+ end
+ def url
+ @prod['url'] ? %{<a href="#@url_">} : ''
+ end
+ def url_relative
+ @prod['url'] ? %{<a href="../#{@prod['url']}/toc.html">} : ''
+ end
+ self
+ end
+ def flyer
+ if @prod['flyer']
+ %{<p class="pane"><a href="../man/pdf/#@id.pdf"><img border="0" height="18" width="15" src="../_sisu/image/b_pdf.png">&nbsp;PDF&nbsp;flyer</a></p>}
+ else ''
+ end
+ end
+ def price
+ def gbp
+ if defined? @prod['price']['gbp'] and @prod['price']['gbp']
+ " &nbsp;&pound;&nbsp;#{@prod['price']['gbp']}&nbsp;(GBP)&nbsp;"
+ else ''
+ end
+ end
+ def euro
+ if defined? @prod['price']['euro'] and @prod['price']['euro']
+ " &nbsp;&euro;&nbsp;#{@prod['price']['euro']}&nbsp;(Euro)&nbsp;"
+ else ''
+ end
+ end
+ def usd
+ if defined? @prod['price']['usd'] and @prod['price']['usd']
+ " &nbsp;$&nbsp;#{@prod['price']['usd']}&nbsp;(USD)&nbsp;"
+ else ''
+ end
+ end
+ %{<p class="pane">Price:#{gbp}#{euro}#{usd}</p>}
+ end
+ def site_link #Work area
+ if url_link.url
+ <<WOK
+<p class="pane">
+#{url_link.url}
+#{image}
+#{title}
+#{subtitle}
+</a>#{nick}</p>
+WOK
+ else
+ <<WOK
+<p class="pane">
+#{image}
+#{title}
+#{subtitle}
+</p>
+WOK
+ end
+ end
+ self
+ end
+ def output_form_sponsor(type,id)
+ cell=cell(@ad[:promo][type][id],prod_id)
+ prod_type=id=~/id_(?:[0-9x]){10,13}/i ? 'isbn' : 'id'
+ id_detail = %{<p class="pane">#{prod_type}: #{prod_id}</p>}
+ <<WOK
+<br />
+#{cell.site_link}
+#{cell.blurb}
+#{cell.links}
+WOK
+ end
+ def output_form_link(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ <<WOK
+<br />
+#{cell.site_link}
+#{cell.author}
+#{cell.year}
+#{cell.blurb}
+#{cell.links}
+WOK
+ end
+ def output_form_search(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ cell.search_form
+ end
+ def output_form_book(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ prod_type=id=~/id_(?:[0-9x]){10,13}/i ? 'isbn' : 'id'
+ id_detail = %{<p class="pane">#{prod_type}: #{prod_id}</p>}
+ <<WOK
+<br />
+#{cell.site_link}
+#{cell.author}
+#{cell.year}
+#{id_detail}
+#{cell.pages}#{cell.form}
+#{cell.price}
+#{cell.flyer}
+#{cell.blurb}
+#{cell.links}
+WOK
+ end
+ def output_form_journal(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ <<WOK
+<br />
+#{cell.site_link}
+#{cell.editor}
+#{cell.issn}
+#{cell.update}
+#{cell.form}
+#{cell.price.gsub(/Price:/,'Subscription:')}
+#{cell.flyer}
+#{cell.blurb}
+#{cell.links}
+WOK
+ end
+ def output_form_conference(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+#translate date (dd month yyyy) from 2007-03-04 and ruby conversion
+ <<WOK
+<br />
+#{cell.site_link}
+#{cell.date}
+#{cell.location}
+#{cell.price}
+#{cell.flyer}
+#{cell.blurb}
+#{cell.links}
+WOK
+ end
+ def output_form_select(type,id)
+ case type
+ when /site/
+ output_form_link(type,id)
+ when /sponsor/
+ output_form_sponsor(type,id)
+ when /search/
+ output_form_search(type,id)
+ when /book/
+ output_form_book(type,id)
+ when /journal/
+ output_form_journal(type,id)
+ when /conference/
+ output_form_conference(type,id)
+ end
+ end
+ def advert_extract_single(type,id) #extracts single item of type with id
+ #type === book,journal,conference,sponsor
+ id=id.to_s.gsub(/^(\d)/,'id_\1')
+ if defined? @ad[:promo][type][id] and @ad[:promo][type][id]
+ output_form_select(type,id)
+ end
+ end
+ def advert_extract_subject(category) #extracts products from category/subject list
+ adverts=[]
+ if defined? @ad[:promo_list][category] and @ad[:promo_list][category]
+ @ad[:promo_list][category].keys.each do |type|
+ @ad[:promo_list][category][type].each do |i|
+ if i
+ id=i.to_s =~/^\d/ ? "id_#{i.to_s.strip}" : i.to_s.strip
+ gbp=usd=euro=nil
+ if defined? @ad[:promo][type][id] and not @ad[:promo][type][id].nil?
+ adverts << output_form_select(type,id)
+ end
+ end
+ end
+ end
+ else
+ tell=SiSU_Screen::Ansi.new(@md.cmd,"category not found: #{category}")
+ tell.warn unless @md.cmd =~/q/
+ end
+ adverts.to_s
+ end
+ def advert_extract_all #extracts all products from list (which is broken down into categories)
+ adverts=[]
+ @ad[:promo_list].keys.each do |category|
+ adverts << advert_extract_subject(category)
+ end
+ adverts.flatten
+ end
+ def adverts(ads)
+ <<WOK
+#{div.minor}
+#{ads}
+#{div.close}
+WOK
+ end
+ def no_adverts
+ <<WOK
+#{div.minor}
+#{div.close}
+WOK
+ end
+ end
+end
+__END__