summaryrefslogtreecommitdiffstats
path: root/lib/sisu/v5/html_promo.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v5/html_promo.rb')
-rw-r--r--lib/sisu/v5/html_promo.rb448
1 files changed, 448 insertions, 0 deletions
diff --git a/lib/sisu/v5/html_promo.rb b/lib/sisu/v5/html_promo.rb
new file mode 100644
index 0000000..a76a15f
--- /dev/null
+++ b/lib/sisu/v5/html_promo.rb
@@ -0,0 +1,448 @@
+# encoding: utf-8
+=begin
+
+ * Name: SiSU
+
+ * Description: a framework for document structuring, publishing and search
+
+ * Author: Ralph Amissah
+
+ * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013 Ralph Amissah, All Rights Reserved.
+
+ * License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ 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 3 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, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+ * SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+ * Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+ * Download:
+ <http://www.sisudoc.org/sisu/en/SiSU/download.html>
+
+ * Git
+ <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/html_promo.rb;hb=HEAD>
+
+ * Ralph Amissah
+ <ralph@amissah.com>
+ <ralph.amissah@gmail.com>
+
+ ** Description: html advertising component, build here, mockup
+
+=end
+module SiSU_HTML_Promo
+ require_relative 'sysenv' # sysenv.rb
+ include SiSU_Env
+ class Ad
+ def initialize(md)
+ @md=md
+ @env=SiSU_Env::InfoEnv.new(@md.fns,@md)
+ @rc=SiSU_Env::GetInit.new.sisu_yaml.rc
+ @ad=SiSU_Env::GetInit.new.ads
+ @vz=SiSU_Viz::Defaults.new
+ @flag=@env.widget.promo?
+ @make=SiSU_Env::ProcessingSettings.new(@md)
+ end
+ def div
+ def major
+ (@make.build.html_right_pane? \
+ && @flag[:ad]) \
+ ? '<div id="pane_major">'
+ : ''
+ end
+ def minor
+ (@make.build.html_right_pane? \
+ && @flag[:ad]) \
+ ? '<div id="pane_minor">'
+ : ''
+ end
+ def close
+ (@make.build.html_right_pane? \
+ && @flag[:ad]) \
+ ? '</div>'
+ : ''
+ end
+ self
+ end
+ def display
+ ads_array,promo_array=[],[]
+ if @make.build.html_right_pane? \
+ && @flag[:ad]
+ ads=if @md.promo && @md.promo.length > 0 #promo set in document
+ promo_array=@md.promo
+ elsif @flag[:sk] #promo set
+ promo_array=@vz.widget_promo
+ elsif @flag[:rc] #promo set in rc file
+ promo_array=if @rc['html']['promo'].is_a?(String)
+ @rc['html']['promo'].split(/[,;]\s*/)
+ else @rc['html']['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.join)
+ 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_sisu(table=true)
+ db=if @prod['db']=~/\S+/
+ (@prod['db']=~/^#{Db[:name_prefix]}\S+/) ? @prod['db'] : "#{Db[:name_prefix]}#{@prod['db']}"
+ elsif defined? @rc['search']['sisu']['db'] \
+ and @rc['search']['sisu']['db'] =~/\S+/
+ (@rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \
+ ? @prod['search']['sisu']['db']
+ : "#{Db[:name_prefix]}#{@prod['db']}"
+ else nil
+ end
+ action=if @prod['action']=~/^https?:\/\//
+ @prod['action']
+ elsif defined? @rc['search']['sisu']['action'] \
+ and @rc['search']['sisu']['action'] =~/^https?:\/\//
+ @rc['search']['sisu']['action']
+ else nil
+ end
+ form=if action \
+ and db
+ @env.widget.search_form('sisusearch',action,db,table)
+ else ''
+ end
+ end
+ def search_form_hyperestraier(table=true)
+ action=if defined? @rc['search']['hyperestraier']['action'] \
+ and @rc['search']['hyperestraier']['action'] =~/^https?:\/\//
+ @rc['search']['hyperestraier']['action']
+ else nil
+ end
+ form=if action
+ '<br />' + @env.widget.search_form('hyperestraier',action,'',table)
+ else ''
+ end
+ form
+ 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'] =~/https?:/) ? x['url'] : "../#{x['url']}"
+ links_a << %{<p class="pane_link"><a href="#{url_}">#{x['title']}#{subtitle}</a></p>\n}
+ end
+ end
+ links_a.join
+ else ''
+ end
+ end
+ def image
+ @prod['image'] ? %{<img border="0" src="../_sisu/image/#{@prod['image']}" /><br />} : ''
+ end
+ def url_link
+ @url_=if @prod['url'] =~/https?:/
+ "#{@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 adsense #draw content from a configuration file
+ def column_right
+ if defined? @ad[:promo]['ad']['adsense']['column_right']
+ @ad[:promo]['ad']['adsense']['column_right'].join("\n")
+ else ''
+ end
+ end
+ def line_single
+ if defined? @ad[:promo]['ad']['adsense']['line_single']
+ @ad[:promo]['ad']['adsense']['line_single'].join("\n")
+ else ''
+ end
+ end
+ self
+ 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_sisu(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ cell.search_form_sisu(false)
+ end
+ def output_form_search_hyperestraier(type,id)
+ prod_id=id.gsub(/id_/,'')
+ cell=cell(@ad[:promo][type][id],prod_id)
+ cell.search_form_hyperestraier(false)
+ 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/
+ if id=~/hyperestraier/
+ output_form_search_hyperestraier(type,id)
+ else output_form_search_sisu(type,id)
+ end
+ 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_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.inspect =~/^\d/) ? "id_#{i.to_s.strip}" : i.to_s.strip) #watch remove .to_s ?
+ gbp=usd=euro=nil
+ if defined? @ad[:promo][type][id] \
+ and not @ad[:promo][type][id].nil?
+ adverts << output_form_select(type,id)
+ else
+ if defined? @ad[:promo][category][type][id] \
+ and @ad[:promo][category][type][id].is_a?(Array) \
+ and @ad[:promo][category][type][id].length > 0
+ adverts << @ad[:promo][category][type][id].join("\n")
+ end
+ end
+ end
+ end
+ end
+ else
+ SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* category not found: #{category}").warn unless @md.opt.cmd =~/q/
+ end
+ adverts.join
+ 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__