diff options
Diffstat (limited to 'lib/sisu/v3/html_promo.rb')
| -rw-r--r-- | lib/sisu/v3/html_promo.rb | 434 | 
1 files changed, 434 insertions, 0 deletions
| diff --git a/lib/sisu/v3/html_promo.rb b/lib/sisu/v3/html_promo.rb new file mode 100644 index 00000000..3a564f1c --- /dev/null +++ b/lib/sisu/v3/html_promo.rb @@ -0,0 +1,434 @@ +# coding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> +   <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> +   <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + + * 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.jus.uio.no/sisu/SiSU/download.html> + + * Ralph Amissah +   <ralph@amissah.com> +   <ralph.amissah@gmail.com> + + ** Description: html advertising component, build here, mockup + +=end +module SiSU_HTML_promo +  require "#{SiSU_lib}/sysenv"                             # sysenv.rb +    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.sisu_yaml.rc +      @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['html']['promo'].class==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"> PDF flyer</a></p>} +        else '' +        end +      end +      def price +        def gbp +          if defined? @prod['price']['gbp'] \ +          and @prod['price']['gbp'] +            "  £ #{@prod['price']['gbp']} (GBP) " +          else '' +          end +        end +        def euro +          if defined? @prod['price']['euro'] \ +          and @prod['price']['euro'] +            "  € #{@prod['price']['euro']} (Euro) " +          else '' +          end +        end +        def usd +          if defined? @prod['price']['usd'] \ +          and @prod['price']['usd'] +            "  $ #{@prod['price']['usd']} (USD) " +          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].class==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.cmd,"category not found: #{category}").warn unless @md.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__ | 
