diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/init.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/init.rb 2005-06-04 14:41:54.526515176 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/init.rb 2004-04-21 23:29:38.000000000 +0200
@@ -0,0 +1,40 @@
+require "rbconfig"
+
+Reversed = (ARGV.include?("-r"))
+
+FromDirs = ENV["PATH"].split(/:/) + [".", "./lib", "./rubylib/lib"]
+ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+
+Dir.mkdir(ToDir) if not File.directory?(ToDir)
+
+FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if not file.scan(/\.lib\.rb$/).empty?
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+
+ if not (File.directory?("c:/"))
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.unlink(tofile) if File.symlink?(tofile)
+ File.symlink(fromfile, tofile)
+ else
+ if Reversed
+ tofile, fromfile = fromfile, tofile
+ end
+
+ if FileTest.file?(fromfile)
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.writable?(tofile)
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ else
+ printf "%s -> %s (Skipped!)\n", fromfile, tofile
+ end
+ end
+ end
+ end
+ end
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/install.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/install.rb 2005-06-04 14:41:54.525515328 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/install.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,40 @@
+require "rbconfig"
+
+Reversed = (ARGV.include?("-r"))
+
+FromDirs = ENV["PATH"].split(/:/) + [".", "./lib", "./rubylib/lib"]
+ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+
+Dir.mkdir(ToDir) if not File.directory?(ToDir)
+
+FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if not file.scan(/\.lib\.rb$/).empty?
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+
+ if not (File.directory?("c:/"))
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.unlink(tofile) if File.symlink?(tofile)
+ File.symlink(fromfile, tofile)
+ else
+ if Reversed
+ tofile, fromfile = fromfile, tofile
+ end
+
+ if FileTest.file?(fromfile)
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.writable?(tofile)
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ else
+ printf "%s -> %s (Skipped!)\n", fromfile, tofile
+ end
+ end
+ end
+ end
+ end
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/net.lib.rb 2005-06-04 14:41:54.521515936 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,541 @@
+require "ev/ruby"
+#alias old_timeout :timeout
+require "net/http"
+#alias timeout :old_timeout
+require "socket"
+require "uri"
+require "cgi"
+require "md5"
+require "thread"
+
+file = "#{home}/.evnet"
+if File.file?(file)
+ Hash.file(file).each do |k, v|
+ eval "$#{k} = ´#{v}´" unless k=~ /^\#/
+ #$proxy_auth = [$proxy_auth].pack("m").chomp if k == "proxy_auth"
+ end
+end
+
+def uri2txt(s)
+ i = s.index(/%[[:digit:]]{2}/)
+ while not i.nil?
+ s = s[0..(i-1)] + s[(i+1)..(i+2)].unpack(´H2´).shift.to_i.chr + s[(i+3)..-1]
+ i = s.index(/%[[:digit:]]{2}/)
+ end
+ s
+end
+
+class EVURI
+ attr_reader :protocol
+ attr_writer :protocol
+ attr_reader :userpass
+ attr_writer :userpass
+ attr_reader :host
+ attr_writer :host
+ attr_reader :port
+ attr_writer :port
+ attr_reader :path
+ attr_writer :path
+ attr_reader :vars
+ attr_writer :vars
+ attr_reader :anchor
+ attr_writer :anchor
+
+ def initialize(url)
+ begin
+ @protocol, @userpass, @host, @port, d1, @path, d2, @vars, @anchor = URI.split(url.to_s)
+ rescue
+ end
+
+ @protocol = "" if @protocol.nil?
+ @userpass = "" if @userpass.nil?
+ @host = "" if @host.nil?
+ @port = 0 if @port.nil?
+ @path = "" if @path.nil?
+ @vars = "" if @vars.nil?
+ @anchor = "" if @anchor.nil?
+
+ res = {}
+ @varsvolgorde = []
+ @vars.split(/&/).each{|var| k, v = var.split(/=/) ; res[k] = v ; @varsvolgorde << k}
+ @vars = res
+
+ @port = @port.to_i
+ end
+
+ def + (url2)
+ url1 = self.to_s
+ url2 = url2.to_s if url2.kind_of?(self.class)
+
+ return EVURI.new((URI::Generic.new(*URI.split(url1)) + URI::Generic.new(*URI.split(url2))).to_s) rescue nil
+ end
+
+ def to_s
+ protocol = @protocol
+ userpass = @userpass
+ host = @host
+ port = @port.to_s
+ path = @path
+ vars = varstring
+ anchor = @anchor
+
+ protocol = nil if @protocol.empty?
+ userpass = nil if @userpass.empty?
+ host = nil if @host.empty?
+ port = nil if @port.zero?
+ path = nil if @path.empty?
+ vars = nil if @vars.empty?
+ anchor = nil if @anchor.empty?
+
+ res = URI::HTTP.new(@protocol, @userpass, @host, port, nil, @path, nil, vars, @anchor).to_s
+
+ res.gsub!(/@/, "") if (@userpass.nil? or @userpass.empty?)
+
+ res.gsub!(/\#$/, "")
+
+ return res
+ end
+
+ def varstring
+ res = []
+ vars = @vars.dup
+
+ @varsvolgorde.each do |k|
+ if vars.include?(k)
+ v = vars[k]
+ vars.delete(k)
+
+ res << (v.nil? ? k : "#{k}=#{v}")
+ end
+ end
+
+ res.concat(vars.collect{|k, v| v.nil? ? k : "#{k}=#{v}"})
+
+ return res.join("&")
+ end
+end
+
+class HTTPClient
+ @@versie = 1
+ @@mutex = Mutex.new
+ @@hosts = {}
+
+ class Header
+ attr_reader :header
+ attr_reader :protocol
+ attr_reader :code
+ attr_reader :text
+
+ def initialize(header)
+ @header = {}
+
+ if not header.nil?
+ firstline, rest = header.split(/\r*\n/, 2)
+
+ @protocol, @code, @text = firstline.split(/ */, 3)
+
+ if not rest.nil?
+ rest.split(/\r*\n/).each do |line|
+ key, value = line.split(/ /, 2)
+ @header[key.sub(/:$/, "").downcase] = value
+ end
+ end
+ end
+ end
+
+ def to_s
+ res = ""
+
+ res << "%s %s %s\n" % [@protocol, @code, @text]
+
+ @header.each do |k, v|
+ res << "%s=%s\n" % [k, v]
+ end
+
+ return res
+ end
+ end
+
+ class Chunk
+ def initialize(data)
+ @data = ""
+ line, data = data.split(/\r*\n/, 2)
+ size, ext = line.split(/;/, 2)
+ size = size.hex
+ while not size.zero? and not data.nil?
+ @data += data[0..(size-1)]
+ data = data[size..-1]
+ if not data.nil?
+ data.gsub!(/^\r*\n/, "")
+ line, data = data.split(/\r*\n/, 2)
+ size, ext = line.split(/;/, 2)
+ size = size.hex
+ end
+ end
+ end
+
+ def to_s
+ @data
+ end
+ end
+
+ def self.head(uri, form={}, recursive=true)
+ header = Header.new(nil)
+
+ begin
+ while not uri.nil?
+ if $proxy.nil? or $proxy.empty?
+ uri = EVURI.new(uri) if uri.kind_of? String
+ host = uri.host
+ port = uri.port
+ io = nil
+
+ @@mutex.synchronize do
+ @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host)
+ io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port)
+ end
+
+ io.write("HEAD #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\n\r\n")
+ else
+ proxy = EVURI.new($proxy)
+ host = proxy.host
+ port = proxy.port
+
+ io = TCPSocket.new(host, port.zero? ? 8080 : port)
+
+ io.write("HEAD #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}\r\n\r\n")
+ end
+
+ io.close_write
+
+ res = io.read
+ header, data = nil, nil
+ header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil?
+ header = Header.new(header)
+
+ if recursive and header.header["location"] != uri.to_s
+ uri = EVURI.new(uri) + header.header["location"]
+ else
+ uri = nil
+ end
+ end
+ rescue
+ header = Header.new(nil)
+ end
+
+ return header
+ end
+
+ def self.get(uri, form={})
+ res = Array.new
+ form.each_pair do |var, value|
+ res << "#{var.to_html}=#{value.to_html}"
+ end
+ post = res.join("?")
+
+ data = nil
+
+ begin
+ while not uri.nil?
+ if $proxy.nil? or $proxy.empty?
+ uri = EVURI.new(uri) if uri.kind_of? String
+ host = uri.host
+ port = uri.port
+ io = nil
+
+ @@mutex.synchronize do
+ @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host)
+ io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port)
+ end
+
+ if post.empty?
+ io.write("GET #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\n\r\n")
+ else
+ io.write("POST #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: #{post.length}\r\n\r\n")
+ io.write(post)
+ end
+ else
+ proxy = EVURI.new($proxy)
+ host = proxy.host
+ port = proxy.port
+ io = nil
+
+ io = TCPSocket.new(host, port.zero? ? 8080 : port)
+
+ if post.empty?
+ io.write("GET #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}\r\n\r\n")
+ else
+ io.write("POST #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}Content-Type: application/x-www-form-urlencoded\r\nContent-Length: #{post.length}\r\n\r\n")
+ io.write(post)
+ end
+ end
+
+ io.close_write
+
+ res = io.read
+ header, data = nil, nil
+ header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil?
+
+ header = Header.new(header)
+
+ if header.header["location"] != uri.to_s
+ uri = EVURI.new(uri) + header.header["location"]
+ else
+ uri = nil
+ end
+
+ if header.header["transfer-encoding"] == "chunked"
+ data = Chunk.new(data).to_s if not data.nil?
+ end
+ end
+ rescue
+ data = nil
+ end
+
+ return data
+ end
+
+ def self.head_from_cache(uri, form={})
+ from_cache("head", uri, form)
+ end
+
+ def self.get_from_cache(uri, form={})
+ from_cache("get", uri, form)
+ end
+
+ def self.from_cache(action, uri, form)
+ loc = uri.to_s + form.sort.inspect
+ hash = MD5.new("#{@@versie} #{loc}")
+
+ dir = "#{temp}/evcache.#{user}/httpclient.#{action}"
+ file = "#{dir}/#{hash}"
+ data = nil
+
+ Dir.mkdirrec(dir)
+
+ expire = 356*24*60*60
+
+ if FileTest.file?(file) and (Time.new.to_f - File.stat(file).mtime.to_f < expire)
+ @@mutex.synchronize do
+ File.open(file, "rb") {|f| data = f.read}
+ end
+ else
+ data = method(action).call(uri, form)
+
+ if not data.nil?
+ @@mutex.synchronize do
+ File.open(file, "wb") {|f| f.write data}
+ end
+ end
+ end
+
+ return data
+ end
+end
+
+class RequestGet < Hash
+ def initialize(data)
+ CGI.parse(data).each do |k, v|
+ self[k] = v.join(" ")
+ end
+ end
+end
+
+class RequestPost < Hash
+ def initialize(data)
+ CGI.parse(data).each do |k, v|
+ self[k] = v.join(" ")
+ end
+ end
+end
+
+class RequestRequest
+ attr_reader :method
+ attr_reader :uri
+ attr_reader :path
+ attr_reader :data
+ attr_reader :protocol
+
+ def initialize(firstline)
+ @method, @uri, @protocol = firstline.split(/ /)
+ @path, @data = @uri.split(/\?/)
+ @data = "" if @data.nil? # TODO
+
+# i = @path.index(/%[[:digit:]]{2}/)
+# while not i.nil?
+# @path = @path[0..(i-1)] + @path[(i+1)..(i+2)].unpack(´H2´).shift.to_i.chr + @path[(i+3)..-1]
+# i = @path.index(/%[[:digit:]]{2}/)
+# end
+ end
+
+ def to_s
+ "#{@method} #{@uri} #{@protocol}\r\n"
+ end
+end
+
+class Request < Hash
+ attr_reader :peeraddr
+ attr_reader :request
+ attr_reader :cookies
+ attr_reader :vars
+
+ def initialize(io)
+ @io = io
+
+ firstline = @io.gets
+
+ return if firstline.nil?
+
+ @request = RequestRequest.new(firstline.strip)
+
+ line = @io.gets.strip
+ while not line.empty? do
+ key, value = line.split(" ", 2)
+ self[key.sub(/:$/, "").downcase] = value
+
+ line = @io.gets.strip
+ end
+
+ cookie = self["cookie"]
+ cookie = "" if cookie.nil?
+ @cookies = {}
+ cookie.split(/;/).each do |s|
+ k, v = s.strip.split(/=/, 2)
+ @cookies[k] = v
+ end
+
+ if not @request.method.nil?
+ case @request.method
+ when "HEAD"
+ when "GET"
+ @vars = RequestGet.new(@request.data.nil? ? "" : @request.data)
+ when "POST"
+ data = @io.read(self["content-length"].to_i)
+ @vars = RequestPost.new((self["content-type"] == "application/x-www-form-urlencoded") ? data : "")
+ else
+ puts "Unknown request (´#{firstline}´)."
+ end
+ end
+
+ @peeraddr = @io.peeraddr
+
+ @io.close_read
+ end
+
+ def to_s
+ res = @request.to_s
+ self.each do |k, v|
+ res << "#{k}: #{v}\r\n"
+ end
+ res
+ end
+end
+
+class Response < Hash
+ attr_writer :response
+
+ def initialize(io)
+ @io = io
+ @response = "HTTP/1.0 200 OK"
+ @data = ""
+ end
+
+ def flush
+ @io.write("#{to_s}\r\n#{@data}")
+ @io.close
+ end
+
+ def to_s
+ res = "#{@response}\r\n"
+ self.each do |k, v|
+ res << "#{k}: #{v}\r\n"
+ end
+ res
+ end
+
+ def << (s)
+ @data << s
+ end
+end
+
+class HTTPServer
+ @@times = {}
+
+ def self.serve(port=80, remote=false, auth=nil, realm="ev/net")
+ begin
+ server = TCPServer.new(remote ? "0.0.0.0" : "localhost", port)
+ puts "Just point your browser to http://localhost:#{port}/ ..."
+ rescue
+ server = nil
+ puts "Port #{port} is in use."
+ end
+
+ if not server.nil?
+ loop do
+ io = nil
+
+ begin
+ io = server.accept
+
+ req = Request.new(io)
+ resp = Response.new(io)
+ rescue
+ puts "Getting request from browser failed."
+ io = nil
+ end
+
+ if not io.nil? and not req.peeraddr.nil?
+ #Thread.new(req, resp) do |req, resp|
+ com = req.request.to_s.strip + req.peeraddr[3]
+
+ @@times[com]=Time.new.to_f if not @@times.include?(com)
+
+ if (not remote) or (remote and (auth.nil? or authenticate(auth, realm, req, resp)))
+ #puts "#{Time.new.strftime("%H:%M:%S")}: #{req.peeraddr[3]}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request}"
+
+ yield(req, resp)
+
+ puts "#{Time.new.strftime("%H:%M:%S")}: #{req.peeraddr[3]}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request}"
+
+ @@times.delete(com)
+ end
+
+ begin
+ resp.flush
+ rescue
+ end
+ #end
+ end
+ end
+ end
+ end
+
+ def self.authenticate(auth, realm, req, resp)
+ if auth.kind_of? String
+ file = "#{home}/#{auth}"
+ auths = {}
+ auths = Hash.file(file) if FileTest.file?(file)
+ else
+ auths = auth
+ end
+
+ authuserpassword = req["authorization"]
+ if not authuserpassword.nil?
+ authtype, userpassword = authuserpassword.split(/ /)
+ if authtype == "Basic" and not userpassword.nil?
+ u, p = userpassword.unpack("m").shift.split(/:/)
+ end
+ end
+
+ ok = (auths.include?(u) and auths[u] == p)
+
+ if ok
+
+ else
+ resp["WWW-Authenticate"] = "Basic realm=\"#{realm}\""
+ resp.response = "HTTP/1.0 401 Unauthorized"
+ end
+
+ return ok
+ end
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2005-06-04 14:41:54.522515784 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,648 @@
+require "cgi"
+require "rbconfig"
+
+Thread.abort_on_exception = true
+
+module Enumerable
+ def deep_dup
+ Marshal::load(Marshal::dump(dup))
+ end
+
+ def deep_clone
+ Marshal::load(Marshal::dump(clone))
+ end
+end
+
+class Object
+ alias deep_dup :dup
+ alias deep_clone :clone
+
+ def to_fs
+ to_s
+ end
+end
+
+class Numeric
+ def to_fs
+ to_f
+ end
+end
+
+class String
+ def chomp!(dummy=nil)
+ self.gsub!(/[\r\n]*\z/, "")
+ end
+
+ def chomp(dummy=nil)
+ self.gsub(/[\r\n]*\z/, "")
+ end
+
+ def crlf
+ self.gsub(/\r*\n/, "\r\n").gsub(/\r\n\z/, "") + "\r\n"
+ end
+
+ def strip
+ self.stripbefore.stripafter
+ end
+
+ def stripbefore
+ self.gsub(/\A[[:blank:]\r\n]*/, "")
+ end
+
+ def stripafter
+ self.gsub(/[[:blank:]\r\n]*\z/, "")
+ end
+
+ def compress
+ self.gsub(/[[:blank:]\r\n]+/, " ").strip
+ end
+
+ def compressspaces
+ self.gsub(/[[:blank:]]+/, " ")
+ end
+
+ def numeric?
+ d, a, n = [self].to_par
+
+ not n.empty?
+ end
+
+ def exec(input=nil, output=true)
+ res = []
+
+ IO.popen(self, "w+") do |f|
+ f.puts input if not input.nil?
+ f.close_write
+
+ res = f.readlines if output
+ end
+
+ res.join("")
+ end
+
+ def eval
+ Kernel::eval(self)
+ end
+
+ def speak
+ require "drb"
+
+ DRb.start_service
+ DRbObject.new(nil, "druby://localhost:3100").speak(self)
+ end
+
+ def splitblocks(begindelimiters, enddelimiter)
+ bd = begindelimiters.collect {|s| Regexp.escape(s)}
+ ed = enddelimiter.collect {|s| Regexp.escape(s)}
+
+ be = bd.join("|")
+ ee = ed.join("|")
+
+ res = []
+ type = 0
+ tmp = ""
+ es = ""
+ self.split(/(#{be}|#{ee})/).each do |s|
+ if type == 0
+ if begindelimiters.include?(s)
+ type = begindelimiters.index(s)+1
+ tmp = s
+ es = enddelimiter[begindelimiters.index(s)]
+ else
+ #res << [0, s] if not s.compress.empty?
+ res << [0, s] if not s.empty?
+ end
+ else
+ if s == es
+ res << [type, tmp + s]
+ type = 0
+ tmp = ""
+ es = ""
+ else
+ tmp = tmp + s
+ end
+ end
+ end
+ res
+ end
+
+ def splitwords(tokens=[], begindelimiters=["´", ´"´], enddelimiter=["´", ´"´])
+ tokens = [tokens] if not tokens.kind_of?(Array)
+ res = []
+ self.splitblocks(begindelimiters, enddelimiter).each do |type, s|
+ case type
+ when 0
+ tokens.each do |token|
+ token2 = token
+ token2 = Regexp.escape(token2) if token2.kind_of?(String)
+ s.gsub!(/#{token2}/, " #{token} ")
+ end
+ s.split().each do |w|
+ res << w
+ end
+ when 1, 2
+ res << s[1..-2]
+ end
+ end
+ res
+ end
+
+ def uncomment
+ res = []
+ self.splitblocks( ["´" , ´"´ , "/*" , "<!--" , "#" , ";" ],
+ ["´" , ´"´ , "*/" , "-->" , "\n", "\n"]).each do |type, s|
+ case type
+ when 0, 1, 2 then res << s
+ when 3, 4, 5
+ end
+ end
+ res.join("")
+ end
+
+ def noquotes
+ self.sub(/\A[´"]/, "").sub(/[´"]\z/, "")
+ end
+
+ def to_html(eolconversion=true)
+ s = CGI.escapeHTML(self)
+
+ s.gsub!(/\"/, "\"")
+ s.gsub!(/\´/, "\´")
+
+ if eolconversion
+ s.gsub!(/\n/ , "<br>")
+ end
+
+ s
+ end
+
+ def from_html(eolconversion=true)
+ s = self
+
+ s.gsub!(/"/ , "\"")
+ s.gsub!(/´/, "\´")
+
+ s = CGI.unescapeHTML(self)
+
+ if eolconversion
+ s.gsub!(/<br>/, "\n")
+ end
+
+ s
+ end
+
+ def to_fs
+ if numeric?
+ to_f
+ else
+ to_s
+ end
+ end
+end
+
+class Array
+ def chomp!
+ self.collect!{|s| s.chomp}
+ end
+
+ def chomp
+ self.collect{|s| s.chomp}
+ end
+
+ def compress
+ self.collect{|s| s.compress}
+ end
+
+ def uncomment
+ self.join("\0").uncomment.split("\0")
+ end
+
+ def strip
+ self.collect{|s| s.strip}
+ end
+
+ def sum
+ res = 0
+ self.each do |n|
+ res += n
+ end
+ res
+ end
+
+ def product
+ res = 1
+ self.each do |n|
+ res *= n
+ end
+ res
+ end
+
+ def joinwords(sep=" ", quote=´"´)
+ self.collect do |s|
+ s = quote + s + quote if s =~ /[[:blank:]]/
+ s
+ end.join(sep)
+ end
+
+ def domino(tabellen, kolom=nil, onlymatchinglines=false)
+ links = self
+ res = []
+ res = self.dup unless onlymatchinglines
+
+ tabellen.each do |rechts|
+ tmp = []
+
+ links.each do |l|
+ if kolom.nil? or l.length == kolom
+ rechts.each do |r|
+ tmp << l + r[1..-1] if l[-1] == r[0]
+ end
+ end
+ end
+
+ links = tmp
+ res.concat(tmp)
+ end
+
+ res = res.sort.uniq
+ end
+
+ def dominoloop(tabellen)
+ lres = []
+ res = self.dup
+ kolom = 2
+
+ while lres.length != res.length do
+ lres = res.dup
+ res = res.domino(tabellen, kolom)
+
+ res.each do |line|
+ line << "*" if (line.length != line.uniq.length and line[-1] != "*")
+ end
+
+ $stderr.print "#{100*(res.length)/(lres.length)}% "
+
+ kolom += 1
+ end
+
+ $stderr.puts ""
+
+ return res
+ end
+
+ def buildtree
+ self.dominoloop([self])
+ end
+
+ def subset(fields, values, results, exact=true, emptyline=nil, joinwith=nil)
+ fields = [fields] if not fields.kind_of? Array
+ values = [values] if not values.kind_of? Array
+ results = [results] if not results.kind_of? Array
+ res = []
+
+ self.each do |l|
+ ok = true
+
+ case l.class.to_s
+ when "String"
+ c = l.splitwords
+ correction = 1
+ joinwith = " " if joinwith.nil?
+ when "Array"
+ c = l
+ correction = 0
+ end
+
+ 0.upto(c.length-1) do |n|
+ if fields.include?(n+correction)
+ v = values[fields.index(n+correction)]
+ if not emptyline.nil? and not v.downcase == emptyline.downcase
+ if exact
+ ok = false unless (v.nil? or c[n].downcase == v.downcase)
+ else
+ ok = false unless (v.nil? or c[n].downcase.include?(v.downcase))
+ end
+ end
+ end
+ end
+
+ if ok
+ res2 = []
+ results.each do |n|
+ res2 << c[n-1]
+ end
+ res2 = res2.join(joinwith) if not joinwith.nil?
+ res << res2
+ end
+ end
+
+ return res
+ end
+
+ def format(format)
+ res = []
+
+ [format.length, self.length].min.times do |n|
+ case format[n].chr
+ when "i" then res << self[n].to_i
+ when "s" then res << self[n].to_s
+ when "x" then res << self[n]
+ end
+ end
+
+ res
+ end
+
+ def to_i
+ collect{|c| c.to_i}
+ end
+
+ def to_par
+ dash = self.dup
+ alpha = self.dup
+ numeric = self.dup
+
+ dash.delete_if do |s|
+ not (s =~ /\A-/) or
+ (s =~ /\A-?[[:digit:]\.]+\z/) or
+ (s =~ /^-+$/)
+ end
+
+ alpha.delete_if do |s|
+ ((s =~ /\A-/) or
+ (s =~ /\A-?[[:digit:]\.]+\z/)) and
+ not ((s =~ /^\.+$/) or (s =~ /^-+$/))
+ end
+
+ numeric.delete_if do |s|
+ not (s =~ /\A-?[[:digit:]\.]+\z/) or
+ (s =~ /^\.+$/)
+ end
+
+ raise "Oops!" if dash.length + alpha.length + numeric.length != length
+
+ return dash, alpha, numeric
+ end
+
+ def self.file(file)
+ res = []
+
+ File.new(file).readlines.uncomment.chomp.each do |line|
+ res << line
+ end
+
+ res
+ end
+
+ def numsort
+ sort do |a, b|
+ a2 = a.to_fs
+ b2 = b.to_fs
+
+ if a2.class != b2.class
+ a2 = a
+ b2 = b
+ end
+
+ a2 <=> b2
+ end
+ end
+
+ def to_fs
+ collect{|s| s.to_fs}
+ end
+
+ def chaos
+ res = self.dup
+
+ (length^2).times do
+ a = rand(length)
+ b = rand(length)
+
+ res[a], res[b] = res[b], res[a]
+ end
+
+ res
+ end
+
+ def minmax
+ min, value, max = self
+ [min, [value, max].min].max
+ end
+end
+
+class Hash
+ def save(file, append=false)
+ org = {}
+ org = Hash.file(file) if (append and File.file?(file))
+
+ self.sort.each do |k, v|
+ org[k] = v
+ end
+
+ File.open(file, "w") do |f|
+ org.sort.each do |k, v|
+ #f.puts "´%s´=´%s´" % [k, v]
+ f.puts "%s = %s" % [k, v]
+ end
+ end
+ end
+
+ def subset(fields, values, results=nil, exact=true, emptyline=nil, joinwith=nil)
+ fields = [fields] if not fields.kind_of? Array
+ values = [values] if not values.kind_of? Array
+ results = [results] if not results.kind_of? Array
+ res = self.dup
+ res.delete_if {true}
+
+ self.each do |k, l|
+ ok = true
+
+ case l.class.to_s
+ when "String"
+ c = l.splitwords
+ correction = 1
+ joinwith = " " if joinwith.nil?
+ when "Array"
+ c = l
+ correction = 0
+ end
+
+ 0.upto(c.length-1) do |n|
+ if fields.include?(n+correction)
+ v = values[fields.index(n+correction)]
+ if emptyline.nil? or (not emptyline.nil? and not v.downcase == emptyline.downcase)
+ if exact
+ ok = false unless (v.nil? or c[n].downcase == v.downcase)
+ else
+ ok = false unless (v.nil? or c[n].downcase.include?(v.downcase))
+ end
+ end
+ end
+ end
+
+ if ok
+ res2 = []
+ if results == [nil]
+ res2 = c
+ else
+ results.each do |n|
+ res2 << c[n-correction]
+ end
+ end
+ res2 = res2.join(joinwith) if not joinwith.nil?
+ res[k] = res2
+ end
+ end
+
+ return res
+ end
+
+ def to_i
+ collect{|k, v| v.to_i}
+ end
+
+ def self.file(file)
+ res = {}
+
+ File.new(file).readlines.chomp.each do |line|
+ if not line.compress.empty?
+ k, v = line.split(/\s*=\s*/, 2)
+ res[k] = v
+ end
+ end
+# File.new(file).readlines.uncomment.chomp.each do |line|
+# if not line.compress.empty?
+# a = line.splitwords("=")
+#
+# if a.size == 3 and a[1] == "="
+# res[a[0]] = a[2]
+# else
+# puts "Error in #{file} (not ´var=\"value\"´)."
+# end
+# end
+# end
+
+ res
+ end
+end
+
+class Dir
+ def Dir.mkdirrec(dir)
+ pdir = File.dirname(dir)
+
+ if not pdir.empty? and not FileTest.directory?(pdir)
+ mkdirrec (pdir)
+ end
+
+ Dir.mkdir(dir) rescue nil
+ end
+end
+
+def id2ref(id)
+ ObjectSpace._id2ref(id)
+end
+
+def after(seconds)
+ if not seconds.nil? and not seconds.zero?
+ Thread.new do
+ sleep seconds
+ yield
+ end
+ end
+end
+
+def every(seconds)
+ if not seconds.nil? and not seconds.zero?
+ Thread.new do
+ loop do
+ sleep seconds
+ yield
+ end
+ end
+ end
+end
+
+def evtimeout(seconds)
+ if not seconds.nil? and not seconds.zero?
+ t = Thread.current
+ threads = []
+ res = nil
+
+ threads[1] = Thread.new do
+ sleep seconds
+ begin
+ threads[2].kill
+ rescue NameError
+ end
+ res = false
+ t.wakeup
+ end
+
+ threads[2] = Thread.new do
+ yield
+ begin
+ threads[1].kill
+ rescue NameError
+ end
+ res = true
+ t.wakeup
+ end
+
+ threads[1].join
+ threads[2].join
+
+ return res
+ else
+ yield
+ end
+end
+
+def evtimeoutretry(seconds)
+ ok = false
+
+ while not ok
+ evtimeout(seconds) do
+ yield
+ ok = true
+ end
+ end
+end
+
+def trap(signal)
+ Kernel::trap(signal) do
+ yield
+ end
+
+ # Seems pointless, but it´s for catching ^C under Windows...
+
+ every(1) {}
+end
+
+def linux?
+ not windows? and not cygwin?
+end
+
+def windows?
+ not (target_os.downcase =~ /32/).nil?
+end
+
+def cygwin?
+ not (target_os.downcase =~ /cyg/).nil?
+end
+
+def target_os
+ Config::CONFIG["target_os"] or ""
+end
+
+def user
+ ENV["USER"] or ENV["USERNAME"]
+end
+
+def home
+ (ENV["HOME"] or ENV["USERPROFILE"] or (File.directory?("h:/") ? "h:" : "c:")).gsub(/\\/, "/")
+end
+
+def temp
+ (ENV["TEMP"] or "/tmp").gsub(/\\/, "/")
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2005-06-04 14:41:54.520516088 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,1320 @@
+require "ev/xml"
+require "ev/net"
+require "md5"
+require "rbconfig"
+require "pstore"
+
+begin
+ require "win32ole"
+ require "win32/registry"
+rescue LoadError
+ $".push "win32ole.rb"
+ $".push "win32/registry.rb"
+end
+
+exit if ARGV.include?("--rwd-exit")
+
+Debug = false
+Border = 0
+RWDEmptyline = "..."
+
+rcfile = nil
+s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
+s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
+s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
+
+AL = "align=´left´"
+AC = "align=´center´"
+AR = "align=´right´"
+VA = "valign=´middle´"
+
+Format = "\n<!-- %-10s %-10s -->\t"
+
+if not rcfile.nil?
+ puts "Reading #{rcfile} ..."
+
+ Hash.file(rcfile).each do |k, v|
+ ENV[k] = v
+ end
+else
+ begin
+ puts "Looking for default browser..."
+ ENV["RWDBROWSER"] = Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´)[0]
+ rescue
+ puts "Not found."
+ end
+
+ if not ENV.include?("RWDBROWSER") and false # ???
+ s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
+ s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
+ s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
+
+ if not rcfile.nil?
+ puts "Creating #{rcfile} ..."
+ puts ""
+ puts "# This is the first time you start a RubyWebDialog application."
+ puts "# I have to know your favorite browser."
+ puts "# "
+ puts "# Put the full path to your favorite browser between the quotes"
+ puts "# (\"...\") after RWDBROWSER= and remove the hash (#) at the"
+ puts "# beginning of the line."
+ puts "# "
+ puts "# Restart your application."
+ puts ""
+
+ File.open(rcfile, "a") do |f|
+ f.puts "# This is the first time you start a RubyWebDialog application."
+ f.puts "# I have to know your favorite browser."
+ f.puts "# "
+ f.puts "# Put the full path to your favorite browser between the quotes"
+ f.puts "# (\"...\") after RWDBROWSER= and remove the hash (#) at the"
+ f.puts "# beginning of the line."
+ f.puts "# "
+ f.puts "# Restart your application."
+ f.puts ""
+ f.puts "#RWDBROWSER=\"...\""
+ end
+ end
+
+ if windows?
+ system("notepad #{rcfile}")
+
+ sleep 1
+ else
+ puts "Please edit #{rcfile}."
+ end
+
+ exit
+ end
+end
+
+trap("INT") {puts "Terminating..." ; exit}
+
+$SAFE = 2
+
+class IE
+ def initialize(url)
+ @ie = WIN32OLE.new("InternetExplorer.Application")
+ @ev = WIN32OLE_EVENT.new(@ie, "DWebBrowserEvents2")
+
+ @ie.navigate(url)
+
+ @ie.menubar = false
+ @ie.toolbar = false
+ @ie.addressbar = false
+ @ie.statusbar = false
+
+ @ie.visible = true
+
+ at_exit do
+ @ie.visible = false
+ end
+
+ @ev.on_event("OnQuit") do
+ Thread.main.exit
+ end
+
+ Thread.new do
+ loop do
+ WIN32OLE_EVENT.message_loop
+ end
+ end
+ end
+end
+
+class Array
+ def rwd_options(emptyline=nil)
+ if emptyline.nil?
+ a = self
+ else
+ a = [emptyline].concat self
+ end
+
+ a.numsort.collect{|s| "<option>#{s.to_html}</option>" }.join("\n")
+ end
+
+ def rwd_method(method)
+ res = ""
+
+ self.each do |s|
+ s = s.join("/") if s.kind_of?(Array)
+ s2 = s.dup
+ s2[0..0] = s2[0..0].upcase
+ res = res + "<p align=´left´><a action=´#{method}/#{s.to_html}´>#{s2.to_html}</a></p>"
+ end
+
+ return res
+ end
+
+ def rwd_row(key=nil, value=nil)
+ res = ""
+
+ res = res + "<row valign=´top´>"
+ res = res + "<radio name=´#{key.to_html}´ value=´#{value.to_html}´/>" if not key.nil?
+ res = res + self.collect{|s| "<p align=´left´>#{s.to_html}</p>"}.join("")
+ res = res + "</row>"
+
+ return res
+ end
+
+ def rwd_headers(emptyfield=false)
+ res = ""
+
+ res = res + "<row>"
+ res = res + "<p/>" if emptyfield
+ res = res + self.collect{|s| "<p align=´left´><b>#{s.to_html}</b></p>" }.join("")
+ res = res + "</row>"
+
+ return res
+ end
+
+ def rwd_form(prefix, values, twoparts=0, options={})
+ res = []
+
+ res << "<table>"
+ self.each_index do |n|
+ name = "#{prefix.to_html}#{self[n].downcase.to_html}"
+
+ res << "<row>"
+ res << "<p align=´right´>"
+ res << "#{self[n].to_html}:"
+ res << "</p>"
+
+ if options.keys.include?(self[n])
+ res << "<select name=´#{name}´>"
+ res << options[self[n]].rwd_options(RWDEmptyline)
+ res << "</select>"
+ else
+ s = ""
+
+ s << "<text name=´#{name}´"
+ s << " value=´#{values[n].to_html}´" if n < values.length
+ s << "/>"
+
+ res << s
+ end
+
+ res << "</row>"
+
+ if twoparts > 0 and n == twoparts-1
+ res << "<row><empty/></row>"
+ end
+ end
+ res << "</table>"
+
+ return res.join("\n")
+ end
+end
+
+class Hash
+ def rwd_table(field, joinwith=@sep, headers=nil)
+ res = []
+
+ res << "<table>"
+ res << headers.rwd_headers(true) if not headers.nil?
+ self.keys.numsort.each do |key|
+ key2 = key
+ value2 = self[key]
+
+ key2 = key2.join(joinwith) if key2.kind_of?(Array)
+ value2 = [value2] if value2.kind_of?(String)
+
+ res << value2.rwd_row(field, key2)
+ end
+ res << "</table>"
+
+ res.join("\n")
+ end
+end
+
+class EVTable
+ def rwd_table(key, joinwith)
+ super(key, joinwith, @headers)
+ end
+
+ def rwd_form(prefix="", key=nil, twoparts=false)
+ values = self[key] if not key.nil?
+ values = [] if values.nil?
+ options = {}
+
+ if File.file?(oldlocation("constraints.csv"))
+ table = File.basename(@file).gsub(/\.csv$/, "")
+
+ CSVFile.new(oldlocation("constraints.csv")).subset(["Table", "Constraint"], [table, "key"], ["Column", "Value"]).values.each do |column, table2|
+ options[column] = CSVFile.new(oldlocation("#{table2}.csv")).keys.collect{|a| a.join("\t")}
+ end
+ end
+
+ @headers.rwd_form(prefix, values, twoparts ? @key : 0, options)
+ end
+
+ def rwd_metadata
+ res = []
+
+ res << "<table>"
+ res << "<row>"
+ res << " <empty/>"
+ res << " <text name=´header_new´ value=´´/>"
+ res << "</row>"
+ @headers.each_index do |n|
+ res << "<row>"
+ res << " <text name=´header_#{n}_old´ value=´#{@headers[n]}´/>"
+ res << " <text name=´header_#{n}_new´ value=´´/>"
+ res << "</row>"
+ end
+ res << "</table>"
+
+ return res.join("\n")
+ end
+end
+
+class OpenTag
+ def prechildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ bef = before[-1]
+ res.concat Format % ["Before", @subtype] if (Debug and not bef.nil?)
+ res.concat bef if not bef.nil?
+
+ res.concat Format % ["Pre", @subtype] if Debug
+
+ align = AC
+ align = "align=´#{@args["align"]}´" if @args.include?("align")
+
+ valign = VA
+ valign = "valign=´#{@args["valign"]}´" if @args.include?("valign")
+
+ value = ""
+ value = vars[@args["name"]] if vars.include?(@args["name"])
+ value = @args["value"] if @args.include?("value")
+
+ case @subtype
+ when "application"
+ when "window", "helpwindow"
+ args = @args.deep_dup
+
+ args["nohelpbutton"] = (not help)
+
+ res.concat(template(RWD_HTML1, args))
+ when "p" then res.concat "<p #{align}>"
+ when "pre" then res.concat "<pre>"
+ when "big" then res.concat "<p #{align}><big>"
+ when "small" then res.concat "<p #{align}><small>"
+ when "list" then res.concat "<ul #{align}>"
+ when "item" then res.concat "<li #{align}>"
+ when "empty" then res.concat "<p><br>"
+ when "image" then res.concat "<img src=´#{@args["src"]}´>"
+ when "br" then res.concat "<br>"
+ when "hr" then res.concat "<hr>"
+ when "b" then res.concat "<b>"
+ when "i" then res.concat "<i>"
+ when "a"
+ if @args.include?("href")
+ res.concat "<a href=´#{@args["href"]}´ target=´#{@args["target"] or "new"}´>"
+ else
+ res.concat "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
+ end
+ when "vertical" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "horizontal" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´><tr #{align} #{valign}>"
+ when "table" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "row" then res.concat "<tr #{align} #{valign}>"
+ when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´hidden´>"
+ when "text" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´>"
+ when "textarea" then res.concat "<p #{align}><textarea name=´#{@args["name"]}´>#{value}</textarea>"
+ when "password" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´>"
+ when "checkbox"
+ if vars[@args["name"]] == "on"
+ switches[@args["name"]] = true
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ type=´checkbox´>"
+ else
+ switches[@args["name"]] = false
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ type=´checkbox´>"
+ end
+ when "radio"
+ if vars[@args["name"]] == value
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value}´ type=´radio´>"
+ else
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´radio´>"
+ end
+ when "select"
+ res.concat "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
+ name = @args["name"]
+ $select = vars[name]
+ when "option"
+ if $select == @children[0].text
+ res.concat "<option selected=´true´>"
+ else
+ res.concat "<option>"
+ end
+ when "button"
+ res.concat "<input type=´submit´ value=´#{@args["caption"]}´ onclick=´document.bodyform.rwd_action.value=\"#{@args["action"]}\";´>"
+ firstaction << @args["action"] if (firstaction.empty? and @args.include?("action"))
+ when "back"
+ res.concat "<input type=´submit´ value=´Back´ onclick=´document.bodyform.rwd_action.value=\"rwd_back\";´>"
+ firstaction << "rwd_back" if firstaction.empty?
+ when "help"
+ res.concat "<input type=´submit´ value=´Help´ onclick=´document.bodyform.rwd_action.value=\"rwd_help\";´>"
+ firstaction << "rwd_help" if firstaction.empty?
+ when "quit"
+ res.concat "<input type=´submit´ value=´Quit´ onclick=´document.bodyform.rwd_action.value=\"rwd_quit\";´>"
+ firstaction << "rwd_quit" if firstaction.empty?
+ when "close"
+ res.concat "<input type=´submit´ value=´Close´ onclick=´window.close();´>"
+ firstaction << "rwd_quit" if firstaction.empty?
+ when "reset"
+ res.concat "<input type=´reset´ value=´Reset´>"
+ firstaction << "rwd_quit" if firstaction.empty?
+ when "closewindow"
+ #res.concat "<script type=´text/javascript´>\n"
+ #res.concat "<!--\n"
+ #res.concat " window.close();\n"
+ #res.concat "//-->\n"
+ #res.concat "</script>"
+ when "tabs"
+ res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ res.concat " <tr #{AC}>"
+ res.concat " <td #{AC}>"
+ res.concat " <table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ res.concat " <tr #{AC}>"
+ tabs.each do |obj|
+ caption = obj.args["caption"]
+ if caption == tab
+ res.concat "<td #{AC}><div class=´box´><tt><b> #{caption} </b></tt></div></td>"
+ else
+ res.concat "<td #{AC}><div class=´box´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{caption}\";document.bodyform.submit();´><tt> #{caption} </tt></a></div></td>"
+ end
+ end
+ res.concat " </tr>"
+ res.concat " </table>"
+ res.concat " </td>"
+ res.concat " </tr>"
+ when "tab"
+ res.concat "<tr #{align} #{valign}><td #{align}><div class=´box2´>"
+ else
+ puts "<#{@subtype}>"
+ res.concat "<#{@subtype}>"
+ end
+
+ bef = nil
+ aft = nil
+
+ case @subtype
+ when "vertical", "window", "helpwindow"
+ res.concat Format % ["AftPre", @subtype] if Debug
+ if @args.include?("spacing")
+ s = "<tr><td> </td></tr>" * (@args["spacing"].to_i)
+ else
+ s = ""
+ end
+ bef = "#{s}<tr #{align} #{valign}><td #{align}>"
+ aft = "</td></tr>"
+ when "horizontal", "row"
+ res.concat Format % ["AftPre", @subtype] if Debug
+ bef = "<td #{align}>"
+ aft = "</td>"
+ end
+
+ before.push(bef)
+ after.push(aft)
+ end
+
+ def postchildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ case @subtype
+ when "vertical", "window", "helpwindow"
+ res.concat Format % ["BefPost", @subtype] if Debug
+ if @args.include?("spacing")
+ res.concat "<tr><td> </td></tr>" * (@args["spacing"].to_i)
+ end
+ when "horizontal", "row"
+ res.concat Format % ["BefPost", @subtype] if Debug
+ end
+
+ res.concat Format % ["Post", @subtype] if Debug
+
+ case @subtype
+ when "application"
+ when "window", "helpwindow"
+ args = @args.deep_dup
+
+ args["nohelpbutton"] = (not help)
+
+ res.concat(template(RWD_HTML2, args))
+ when "p" then res.concat "</p>"
+ when "pre" then res.concat "</pre>"
+ when "big" then res.concat "</big></p>"
+ when "small" then res.concat "</small></p>"
+ when "list" then res.concat "</ul>"
+ when "item" then res.concat "</li>"
+ when "empty" then res.concat "</p>"
+ when "image" then res.concat ""
+ when "br" then res.concat ""
+ when "hr" then res.concat ""
+ when "b" then res.concat "</b>"
+ when "i" then res.concat "</i>"
+ when "a" then res.concat "</a>"
+ when "vertical" then res.concat "</table>"
+ when "horizontal" then res.concat "</tr></table>"
+ when "table" then res.concat "</table>"
+ when "row" then res.concat "</tr>"
+ when "hidden" then res.concat "</p>"
+ when "text" then res.concat "</p>"
+ when "textarea" then res.concat "</p>"
+ when "password" then res.concat "</p>"
+ when "checkbox" then res.concat "</p>"
+ when "radio" then res.concat "</p>"
+ when "select"
+ res.concat "</select>"
+ $select = nil
+ when "option" then res.concat "</option>"
+ when "button" then res.concat ""
+ when "back" then res.concat ""
+ when "help" then res.concat ""
+ when "quit" then res.concat ""
+ when "close" then res.concat ""
+ when "reset" then res.concat ""
+ when "closewindow" then res.concat ""
+ when "tabs" then res.concat "</table>"
+ when "tab" then res.concat "</div></td></tr>"
+ else
+ puts "</#{@subtype}>"
+ res.concat "</#{@subtype}>"
+ end
+
+ before.pop
+ after.pop
+
+ aft = after[-1]
+ res.concat Format % ["After", @subtype] if (Debug and not aft.nil?)
+ res.concat aft if not aft.nil?
+ end
+
+ def template(html, vars)
+ res = []
+
+ a = {}
+
+ vars.each do |k, v|
+ a[k.upcase] = v
+ end
+
+ a["LOGO"] = "" unless ((not vars["logo"].nil?) and FileTest.file?(vars["logo"]))
+
+ a["HELPBUTTON"] = (not (vars["nohelpbutton"]))
+ a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
+ a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
+ a["CLOSEBUTTON"] = (not (vars["noclosebutton"]))
+
+ html.split(/\r*\n/).each do |line|
+ if line =~ /%[A-Z]+%/
+ a.each do |k, v|
+ v = false if (v.kind_of?(String) and v.empty?)
+
+ if line.include?("%#{k}%")
+ line.gsub!("%#{k}%", "#{v}") if v
+ end
+ end
+
+ line = "<!-- #{line.scan(/%[A-Z]+%/).join(" ")} -->" if line =~ /%[A-Z]+%/
+ end
+
+ res << line
+ end
+
+ res.join("\n")
+ end
+end
+
+class Text
+ def prechildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ if not @text.scan(/[^ \t\r\n]/).empty?
+ res.concat Format % ["Text", ""] if Debug
+ res.concat "#{@text}"
+ end
+ end
+end
+
+class RWDTree < XML
+end
+
+class RWDWindow
+ @@windows = {} # Kind of caching.
+ @@helpwindows = {} # Kind of caching.
+
+ def initialize(rwd, window=nil)
+ rwd = rwd.join("\n") if rwd.kind_of?(Array)
+
+ if @@windows[rwd].nil?
+ @@windows[rwd] = {}
+ @@helpwindows[rwd] = {}
+
+ tree = XML.new(rwd)
+
+ tree.parse(OpenTag, "window") do |type, obj|
+ @@windows[rwd][obj.args["name"]] = obj.to_h
+ end
+
+ tree.parse(OpenTag, "helpwindow") do |type, obj|
+ @@helpwindows[rwd][obj.args["name"]] = obj.to_h
+ end
+ end
+
+ @rwd = (@@windows[rwd][window] or "").dup
+ @helprwd = (@@helpwindows[rwd][window] or "").dup
+ end
+
+ def render(vars=Hash.new, switches=Hash.new, help=false, tab="")
+ vars2 = Hash.new
+ firstaction = ""
+ html = ""
+
+ vars.each do |key, value|
+ if not key.empty?
+ if value.respond_to? "to_s"
+ @rwd.gsub!(/%%#{key}%%/, value.to_s)
+ @rwd.gsub!(/%#{key}%/, value.to_s.to_html)
+
+ @helprwd.gsub!(/%%#{key}%%/, value.to_s)
+ @helprwd.gsub!(/%#{key}%/, value.to_s.to_html)
+
+ vars2[key] = value.to_s.to_html
+ end
+ end
+ end
+
+ windowobject = RWDTree.new(@rwd).children.dup.delete_if{|obj| obj.subtype != "window"}[0]
+ helpobject = RWDTree.new(@helprwd).children.dup.delete_if{|obj| obj.subtype != "helpwindow"}[0]
+
+ tabsobj = windowobject.children.dup.delete_if{|obj| obj.subtype != "tabs"}[0]
+
+ if not tabsobj.nil?
+ tabs = tabsobj.children.dup.delete_if{|obj| (not obj.kind_of?(OpenTag)) or (obj.subtype != "tab")}
+
+ if tab.empty?
+ tab = tabs[0].args["caption"]
+ end
+
+ tabsobj.children.delete_if{|obj| (obj.kind_of?(OpenTag)) and (obj.subtype == "tab") and obj.args["caption"] != tab}
+ end
+
+ if help
+ helpobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, false, firstaction, tabs, tab)
+ else
+ windowobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, (not @helprwd.empty?), firstaction, tabs, tab)
+ end
+
+ html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not Debug
+ html.gsub!(/%%/, "%")
+ html.gsub!(/\n\n*/, "\n")
+
+ if firstaction.empty?
+ focus = ""
+ else
+ focus = "document.bodyform.elements[0].focus();"
+ end
+
+ html.gsub!(/\$RWD_FIRSTACTION\$/ , firstaction)
+ html.gsub!(/\$RWD_FOCUS\$/ , focus)
+
+ html
+ end
+end
+
+class RWDMessage < RWDWindow
+ def initialize(msg)
+ super("<window title=´RWD Message´ nobackbuttons><vertical><p><b>Message:</b> #{msg}</p><back/></vertical></window>")
+ end
+end
+
+class RWDError < RWDWindow
+ def initialize(msg)
+ super("<window title=´RWD Error´ nobackbuttons><vertical><p><b>Error:</b> #{msg}</p><back/></vertical></window>")
+ end
+end
+
+class RWDDone < RWDWindow
+ def initialize(exitbrowser)
+ super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Login´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>")
+ end
+end
+
+class RWDialog
+ def initialize(xml)
+ @rwd_xml = xml
+ @rwd_exitbrowser = false
+ @rwd_history = []
+ @rwd_clone_vars = ["@rwd_history"]
+ @rwd_ignore_vars = ["@rwd_server"]
+ end
+
+ def self.file(rwdfile, *args)
+ new(File.new(rwdfile).readlines, *args)
+ end
+
+ def serve(port=1234, auth=nil, realm=self.class.to_s)
+ raise "RWD is not initialized." if @rwd_xml.nil?
+
+ @rwd_server = RWDServer.new(self, port, auth, realm)
+ end
+
+ def render(res, path, post, sessionid)
+
+ # Initialize some vars.
+
+ vars = Hash.new if vars.nil?
+ @rwd_switches = Hash.new if @rwd_switches.nil?
+
+ done = false
+ help = false
+ back = false
+ tab = ""
+ @rwd_msg = nil
+
+ # Switches are used for checkboxes.
+
+ @rwd_switches.each do |key, value|
+ vars[key] = "off"
+ end
+
+ @rwd_switches = Hash.new
+
+ # Copy the vars from the window to vars. vars wil later on be copied to instance variables.
+
+ post.sort.each do |key, value|
+ puts "Post: #{key} -> #{value.from_html.inspect}" if Debug
+
+ vars[key] = value.from_html
+ end
+
+ # Stack handling for rwd_action and rwd_window.
+
+ @rwd_action = vars["rwd_action"]
+ @rwd_action, @rwd_args = @rwd_action.split(/\//, 2) unless @rwd_action.nil?
+
+ if @rwd_action =~ /^rwd_tab_/
+ tab = @rwd_action.sub(/^rwd_tab_/, "")
+ else
+ case @rwd_action
+ when "rwd_back"
+ @rwd_history.pop
+ @rwd_action = (@rwd_history[-1] or [nil, nil])[0]
+ @rwd_window = (@rwd_history[-1] or [nil, nil])[1]
+ back = true
+ when "rwd_help"
+ help = true
+ when "rwd_main"
+ @rwd_window = "main"
+ @rwd_action = "main"
+ @rwd_history = []
+ when "rwd_quit"
+ done = true
+ end
+
+ # History stuff
+
+ @rwd_history = @rwd_history[-100..-1] if @rwd_history.length >= 100
+ @rwd_action = "main" if @rwd_action.nil?
+ @rwd_action = "main" if @rwd_action.empty?
+ @rwd_args = [] if @rwd_args.nil?
+ @rwd_window = "main" if @rwd_window.nil?
+
+ vars["rwd_action"] = @rwd_action
+ vars["rwd_window"] = @rwd_window
+
+ # Copy vars from window to instance.
+
+ vars.each do |k, v|
+ instance_eval "@#{k} = vars[´#{k}´]" if ((not k.empty?) and k.scan(/^rwd_/).empty? and not @rwd_ignore_vars.include?("@#{k}"))
+ end
+
+ # Callback.
+
+ if not back
+ begin
+ puts "Method: #{@rwd_action}(#{@rwdargs.join(", ")})" if Debug
+ method(@rwd_action).call(*@rwd_args)
+ rescue NameError
+ end
+
+ # History stuff
+
+ @rwd_history = [["main", "main"]] if @rwd_action == "main"
+ @rwd_history = [["main", "main"]] if @rwd_history.empty?
+ @rwd_history.push [@rwd_action, @rwd_window] if (@rwd_history[-1] != [@rwd_action, @rwd_window] or not @rwd_msg.nil?)
+ end
+ end
+
+ # Copy vars from instance to window.
+
+ instance_variables.each do |k|
+ k.sub!(/^@/, "")
+ instance_eval "vars[´#{k}´] = @#{k}.to_s" if (k.scan(/^rwd_/).empty? and not @rwd_ignore_vars.include?("@#{k}"))
+ end
+
+ # just ignore.
+
+ vars.sort.each do |key, value|
+ puts "Pre: #{key} -> #{value.inspect}" if Debug
+ end
+
+ # Answer to browser.
+
+ if done
+ res << RWDDone.new(@rwd_exitbrowser).render
+ else
+ if not @rwd_msg.nil?
+ res << RWDMessage.new(@rwd_msg).render if @rwd_msgtype == "message"
+ res << RWDError.new(@rwd_msg).render if @rwd_msgtype == "error"
+ else
+ puts "Window: #{@rwd_window}" if Debug
+ res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, tab)
+ end
+ end
+
+ return done
+ end
+
+ def samewindow?
+ @rwd_history[-1][1] == @rwd_window
+ end
+
+ def message(msg)
+ @rwd_msg = msg
+ @rwd_msgtype = "message"
+ end
+
+ def error(msg)
+ @rwd_msg = msg
+ @rwd_msgtype = "error"
+ end
+
+ def clone
+ @rwd_history = []
+
+ @rwd_clone_vars.each do |var|
+ instance_eval "#{var} = #{var}.clone"
+ end
+
+ super
+ end
+
+ def exitbrowser
+ @rwd_exitbrowser = true
+ end
+end
+
+class RWDLogin < RWDialog
+ def initialize(realm)
+ super("<window name=´main´ title=´RWD Login for #{realm}´ nobackbuttons noclosebutton><table><row><p align=´right´>Username:</p><text name=´rwd_a´/></row><row><p align=´right´>Password:</p><password name=´rwd_b´/></row></table><button caption=´Login´/></window>")
+ end
+end
+
+class RWDTimeOut < RWDialog
+ def initialize
+ super("<window name=´main´ title=´RWD Error´ nobackbuttons noclosebutton><p><b>Error:</b> Session has expired.</p><button caption=´New session´/></window>")
+ end
+end
+
+class SessionCleanup
+ def initialize(sessions, interval, timeout)
+ every(interval) do
+ sessions.delete_if do |id, session|
+ time = Time.now.to_i - session.lastaccess.to_i
+
+ puts "Session %s deleted" % id if time > timeout
+
+ time > timeout
+ end
+ end
+ end
+end
+
+class Sessions
+ def initialize(rack, cleanup)
+ @rack = rack.to_s
+ @cleanup = SessionCleanup.new(self, 3600, 24*3600) if cleanup
+ @sessions = {}
+ #@store = PStore.new("#{temp}/store.#{@rack}.#{user}")
+
+ #@store.transaction do
+ #@store[@rack] = {} if not @store.root?(@rack)
+ #@sessions = @store[@rack]
+ #end
+
+ #at_exit do
+ #@store.transaction do
+ #@store[@rack] = @sessions
+ #end
+ #end
+ end
+
+ def [](sessionid)
+ @sessions[sessionid]
+ end
+
+ def []=(sessionid, value)
+ @sessions[sessionid] = value
+ end
+
+ def delete(sessionid)
+ @sessions.delete(sessionid)
+ end
+
+ def delete_if(&block)
+ @sessions.delete_if{|k, v| block.call(k, v)}
+ end
+end
+
+class Session < Hash
+ attr_reader :sessionid
+ attr_reader :lastaccess
+ attr_reader :authenticated
+ attr_writer :authenticated
+
+ def initialize(sessionid=nil)
+ @sessionid = sessionid
+ @lastaccess = Time.now
+ @authenticated = false
+ end
+
+ def touch
+ @lastaccess = Time.now
+ end
+end
+
+class RWDSession < Session
+ def render(res, path, post)
+ done = self["object"].render(res, path, post, @sessionid)
+
+ if done
+ res.gsub!(/\$RWD_SESSION\$/, "")
+ else
+ res.gsub!(/\$RWD_SESSION\$/, "#{@sessionid}")
+ end
+
+ done
+ end
+end
+
+class RWDServer
+ def initialize(obj, port, auth, realm)
+ @object = obj
+ @localbrowsing = false
+ @browserstarted = false
+ @sessions = Sessions.new(obj.class, (not auth.nil?))
+
+ if auth.nil?
+ @localbrowsing = true
+
+ if ENV.include?("RWDBROWSER")
+ @browserstarted = true
+ @object.exitbrowser
+
+ # Start browser.
+
+ @browserthread = Thread.new do
+ puts "Starting the browser..."
+
+ #if ENV["RWDBROWSER"].downcase =~ /iexplore/
+ #@ie = IE.new("http://localhost:#{port}/")
+ #else
+ if windows?
+ system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"")
+ elsif cygwin?
+ system("#{ENV["RWDBROWSER"].gsub(/\\/, "/").gsub(/ /, "\ ")} \"http://localhost:#{port}/\"")
+ else
+ system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"")
+ end
+ #end
+
+ puts "The browser has terminated."
+ end
+ end
+ end
+
+ # Start server.
+
+ catch :exit do
+ HTTPServer.serve(port, (not auth.nil?)) do |req, resp|
+ vars = req.vars.dup
+
+ if auth.kind_of? String
+ file = "#{home}/#{auth}"
+ auths = {}
+ auths = Hash.file(file) if FileTest.file?(file)
+ else
+ auths = auth
+ end
+
+ oldsessionid = vars["rwd_session"]
+
+ # Retrieve session.
+
+ session = @sessions[oldsessionid]
+
+ # Eventually create new session.
+
+ if session.nil?
+ if auth.nil?
+ session = RWDSession.new(MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ session["object"] = @object
+ else
+ session = RWDSession.new(MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ session["object"] = @object.clone
+ end
+
+ if oldsessionid.nil? or oldsessionid.empty?
+ if not auth.nil? and not session.authenticated
+
+ # Check authentication
+
+ us = vars["rwd_a"]
+ pa = vars["rwd_b"]
+
+ if us.nil? or pa.nil? or auths[us] != pa
+ session = RWDSession.new
+ session["object"] = RWDLogin.new(realm)
+ else
+ session.authenticated = true
+ @sessions[session.sessionid] = session
+ end
+ else
+ @sessions[session.sessionid] = session
+ end
+ else
+ session = RWDSession.new
+ session["object"] = RWDTimeOut.new
+ end
+
+ vars = {}
+ end
+
+ # Avoid timeout.
+
+ session.touch
+
+ if req.request.path == "/"
+
+ # Serve methods/callbacks.
+
+ # Build new page.
+
+ res = ""
+
+ done = session.render(res, req.request.path, vars)
+
+ begin
+ resp["Content-Type"] = "text/html"
+
+ resp << res
+ rescue
+ puts "Sending response to browser failed."
+
+ @sessions.delete(session.sessionid)
+ end
+
+ # Eventually delete this session.
+
+ if done
+ @sessions.delete(session.sessionid)
+
+ if @localbrowsing
+ resp.flush
+
+ if @browserstarted and @browserthread.alive?
+ puts "Waiting for the browser to terminate..."
+
+ @browserthread.join
+ end
+
+ throw :exit
+ end
+ end
+
+ else
+
+ # Serve files.
+
+ if req.request.path == "/pixel.gif"
+ resp << RWD_Pixel
+ else
+ if (FileTest.file?(req.request.path.sub(/^\/*/, "")))
+ resp << File.new(req.request.path.sub(/^\/*/, ""), "rb").read rescue nil
+ else
+ resp.response = "HTTP/1.0 404 NOT FOUND"
+ end
+ end
+
+ end
+ end
+ end
+ end
+end
+
+RWD_HTML = "
+<!-- Generated by RubyWebDialog. -->
+<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
+<html>
+ <head>
+ <title>%TITLE%</title>
+
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+ <meta http-equiv=´Content-Style-Type´ content=´text/css´>
+
+ <link rel=´shortcut icon´ href=´%LOGO%´>
+
+ <style type=´text/css´>
+ <!--
+ a { text-decoration : none }
+ div.box { border : thin solid #AAAAAA }
+ div.box2 { border-top : thin solid #AAAAAA }
+ //-->
+ </style>
+
+ <script type=´text/javascript´>
+ <!--
+ function BodyGo() {
+ $RWD_FOCUS$
+ }
+ //-->
+ </script>
+ </head>
+
+ <body onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
+ <tr align=´center´ valign=´middle´>
+ <td align=´center´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+
+ <td align=´center´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#444488´>
+
+ <table align=´left´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <td align=´border´><img src=´%LOGO%´ width=´14´ height=´14´></td>
+ <td align=´center´><b><small><font color=´#FFFFFF´> %TITLE% </font></small></b></td>
+ </tr>
+ </table>
+
+ <table align=´right´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <!-- %HELPBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_help\";document.bodyform.submit();´> ? </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_main\";document.bodyform.submit();´> << </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_back\";document.bodyform.submit();´> < </a></small></b></td>
+ <!-- %CLOSEBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_quit\";document.bodyform.submit();´> X </a></small></b></td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#CCCCCC´>
+ <form name=´bodyform´ action=´/´ method=´post´>
+
+ <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
+
+ %BODY%
+
+ </table>
+
+ <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
+ <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
+ </form>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ </table>
+
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
+"
+
+RWD_Pixel = "
+R0lGODlhAQABAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK
+CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ
+GRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygo
+KCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3
+Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZG
+RkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV
+VVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2Rk
+ZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNz
+c3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKC
+goODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGR
+kZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6Cg
+oKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+v
+r7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+
+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3N
+zc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc
+3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr
+6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6
++vv7+/z8/P39/f7+/v///yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
+CgD/ACwAAAAAAQABAAAIBAD/BQQAOw==
+".unpack("m").shift
+
+RWD_HTML1, RWD_HTML2 = RWD_HTML.split(/^\s*%BODY%\s*\r*$/)
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/sgml.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2005-06-04 14:41:54.523515632 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,234 @@
+require "ev/tree"
+
+class SGMLObject < TreeObject
+ def to_s
+ res = ""
+
+ parsetree("prechildren_to_s", "postchildren_to_s", res)
+
+ res
+ end
+
+ def to_h
+ res = ""
+
+ parsetree("prechildren_to_sgml", "postchildren_to_sgml", res)
+
+ res
+ end
+end
+
+class Text < SGMLObject
+ def initialize(text)
+ super()
+ @text = text
+ end
+
+ def prechildren_to_s(res)
+ res << "#{@text}"
+ end
+
+ def prechildren_to_sgml(res)
+ res << "#{@text}"
+ end
+end
+
+class Comment < SGMLObject
+ def initialize(text)
+ super()
+ @text = text
+ end
+
+ def prechildren_to_sgml(res)
+ res << "#{@text}"
+ end
+end
+
+class Special < SGMLObject
+ def initialize(text)
+ super()
+ @text = text
+ end
+
+ def prechildren_to_sgml(res)
+ res << "#{@text}"
+ end
+end
+
+class Instruction < SGMLObject
+ def initialize(text)
+ super()
+ @text = text
+ end
+
+ def prechildren_to_sgml(res)
+ res << "#{@text}"
+ end
+end
+
+class Tag < SGMLObject
+ attr_reader :args
+ attr_writer :args
+
+ def initialize(subtype, args={})
+ super(subtype)
+ @args = args
+ end
+end
+
+class OpenTag < Tag
+ def initialize(*args)
+ super
+ @upordown = Down
+ end
+
+ def prechildren_to_sgml(res)
+ a = [@subtype]
+
+ @args.each do |k, v|
+ if not v.include?("´")
+ a << "#{k}=´#{v}´"
+ else
+ if not v.include?(´"´)
+ a << "#{k}=\"#{v}\""
+ else
+ a << "#{k}=´#{v.gsub(/\´/, ´"´)}´"
+ end
+ end
+ end
+
+ res << "<#{a.join(" ")}>"
+ end
+
+ def postchildren_to_sgml(res)
+ res << "</#{@subtype}>" if @closed
+ end
+end
+
+class CloseTag < Tag
+ def initialize(*args)
+ super
+ @upordown = Dummy
+ end
+end
+
+class SGML < Tree
+ def initialize(*args)
+ @tagcache = {}
+
+ super
+ end
+
+ def buildobjects(string)
+ @objects = []
+
+ string.splitblocks(["<!--", "<!", "<?", "<"], ["-->", ">", "?>", ">"]).each do |type, s|
+ case type
+ when 0 then @objects << Text.new(s)
+ when 1 then @objects << Comment.new(s)
+ when 2 then @objects << Special.new(s)
+ when 3 then @objects << Instruction.new(s)
+ when 4
+
+ tag, args, open, close = verwerktag1(s)
+
+ @objects << OpenTag.new(tag.dup, args.dup) if open
+ @objects << CloseTag.new(tag.dup, args.dup) if close
+ end
+ end
+ end
+
+ def verwerktag1(string)
+ res = nil
+
+ if @tagcache.include? string
+ res = @tagcache[string]
+
+ else
+ res = verwerktag2(string)
+
+ @tagcache[string] = res
+ end
+
+ return res
+ end
+
+ def verwerktag2(string)
+ a = []
+
+ string.splitblocks(["´", ´"´], ["´", ´"´]).collect do |type, s|
+ case type
+ when 0
+ if self.class.to_s == "HTML"
+ s.splitwords(["<", ">"]).each do |w|
+ d = w.split("=", 2)
+
+ if d.length == 1
+ a << d[0]
+ else
+ a << d[0] if not d[0].nil? and not d[0].empty?
+ a << "="
+ a << d[1] if not d[1].nil? and not d[1].empty?
+ end
+ end
+ else
+ a.concat s.splitwords(["<", "/", "=", ">"])
+ end
+ when 1, 2 then a << s
+ end
+ end
+
+ a = a[1..-2]
+ open = false
+ close = false
+
+ if not a.nil?
+ a = a[0].splitwords("/") + a[1..-1]
+
+ if a[0] == "/"
+ close = true
+ a.shift
+ else
+ open = true
+ end
+
+ if a[-1] == "/"
+ close = true
+ a.pop
+ end
+
+ tag = a.shift.downcase
+ args = {}
+
+ while not a.length.zero?
+ if a.length >= 3 and a[1] == "="
+ key = a.shift.downcase
+ dummy = a.shift
+ value = a.shift.noquotes
+ args[key] = value
+ else
+ key = a.shift.downcase
+ args[key] = ""
+ end
+ end
+ end
+
+ return [tag, args, open, close]
+ end
+
+ def to_s
+ res = ""
+
+ parsetree("prechildren_to_s", "postchildren_to_s", res)
+
+ res
+ end
+
+ def to_h
+ res = ""
+
+ parsetree("prechildren_to_sgml", "postchildren_to_sgml", res)
+
+ res
+ end
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/tree.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/tree.lib.rb 2005-06-04 14:41:54.524515480 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,316 @@
+require "ev/ruby"
+require "ev/net"
+require "md5"
+require "thread"
+
+Same = 0
+Down = 1
+Up = 2
+Dummy = 3
+
+module TextArray
+ def textarray
+ @children.collect do |obj|
+ [obj.text] << obj.textarray
+ end.flatten.compact
+ end
+end
+
+
+module ParseTree
+ def parsetree(premethod="prechildren", postmethod="postchildren", *args)
+ if @visible
+ method(premethod).call(*args) if respond_to?(premethod)
+
+ @children.each do |obj|
+ obj.parsetree(premethod, postmethod, *args)
+ end
+
+ method(postmethod).call(*args) if respond_to?(postmethod)
+ end
+ end
+
+ #def parsetree(premethod="prechildren", postmethod="postchildren", *args)
+ # stack = [self]
+ # done = []
+ #
+ # while not stack.empty?
+ # obj = stack.pop
+ #
+ # if not done.include?(obj)
+ # obj.method(premethod).call(*args) if obj.respond_to?(premethod)
+ #
+ # stack.push(obj)
+ # done.push(obj)
+ #
+ # stack.concat obj.children.reverse
+ # #obj.children.reverse.each do |cobj|
+ # #stack.push(cobj)
+ # #end
+ # else
+ # obj.method(postmethod).call(*args) if obj.respond_to?(postmethod)
+ # end
+ # end
+ #end
+end
+
+class TreeObject
+ attr_reader :subtype
+ attr_writer :subtype
+ attr_reader :upordown
+ attr_writer :upordown
+ attr_reader :level
+ attr_writer :level
+ attr_reader :parent
+ attr_writer :parent
+ attr_reader :children
+ attr_writer :children
+ attr_writer :closed
+ attr_writer :closed
+ attr_reader :text
+ attr_writer :text
+ attr_reader :visible
+ attr_writer :visible
+
+ include TextArray
+ include ParseTree
+
+ def initialize(subtype=nil)
+ @subtype = subtype
+ @upordown = Same
+ @level = nil
+ @parent = nil
+ @children = []
+ @closed = nil
+ @visible = true
+ end
+
+ def inspect
+ parent, children = @parent, @children
+
+ @parent, @children = parent.id, children.collect{|obj| obj.id}
+
+ res = " " * (level-1) + "#{self.class}(#{@subtype}) #{super}"
+
+ @parent, @children = parent, children
+
+ res
+ end
+end
+
+class Tree
+ @@versie = 1
+ @@mutex = Mutex.new
+
+ attr_reader :data
+ attr_writer :data
+ attr_reader :parent
+ attr_writer :parent
+ attr_reader :children
+ attr_writer :children
+ attr_reader :visible
+ attr_writer :visible
+
+ include TextArray
+ include ParseTree
+
+ def initialize(string)
+ string = string.join("") if string.kind_of?(Array)
+
+ @data = string
+ @parent = nil
+ @children = []
+ @objects = []
+ @visible = true
+ @checkvisibility = false
+
+ buildobjects(string)
+ buildparents
+ buildchildren
+ markclosed
+ deletedummies
+
+ @checkvisibility = true
+ end
+
+ def self.file(file)
+ new(File.new(file).readlines)
+ end
+
+ def self.location(url, form=Hash.new)
+ s = HTTPClient.get(url, form)
+ s = "" if s.nil?
+ new(s)
+ end
+
+ def self.new_from_cache2(data)
+ new(data)
+ end
+
+ def self.new_from_cache(data)
+ hash = MD5.new("#{@@versie} #{data}")
+
+ dir = "#{temp}/evcache.#{user}/tree.new"
+ file = "#{dir}/#{hash}"
+
+ tree = nil
+
+ Dir.mkdirrec(dir)
+
+ if FileTest.file?(file)
+ @@mutex.synchronize do
+ tree = Marshal.restore(File.new(file, "rb"))
+ end
+ else
+ tree = new(data)
+
+ if not tree.nil?
+ @@mutex.synchronize do
+ File.open(file, "wb") {|f| Marshal.dump(tree, f)}
+ end
+ end
+ end
+
+ return tree
+ end
+
+ def inspect
+ @objects.collect do |obj|
+ obj.inspect
+ end.join("\n")
+ end
+
+ def buildobjects(string)
+ raise "Has to be defined in the subclass."
+ end
+
+ def buildparents
+ level = 1
+ levels = Hash.new
+ levels[0] = nil
+ parse do |type, obj|
+ case obj.upordown
+ when Down
+ obj.level = level
+ obj.parent = levels[level-1]
+ levels[level] = obj
+ level += 1
+ when Up, Dummy
+ pl = level
+ 1.upto(level-1) do |l|
+ po = levels[l]
+ pl = l if po.subtype == obj.subtype
+ end
+ level = pl
+ obj.level = level
+ obj.parent = levels[level-1]
+ when Same
+ obj.level = level
+ obj.parent = levels[level-1]
+ end
+ end
+ end
+
+ def buildchildren
+ @objects.each do |obj|
+ obj.children = []
+ end
+
+ parse do |type, obj|
+ if not obj.parent.nil?
+ po = obj.parent
+ po.children << obj
+ else
+ @children << obj
+ end
+ end
+ end
+
+ def markclosed
+ ([self].concat @objects).each do |obj|
+ obj.children.each_index do |i|
+ co1 = obj.children[i]
+ co2 = obj.children[i+1]
+
+ co1.closed = (not co2.nil? and co1.upordown == Down and (co2.upordown == Up or co2.upordown == Dummy) and co1.subtype == co2.subtype)
+ end
+ end
+ end
+
+ def deletedummies
+ ([self].concat @objects).each do |obj|
+ obj.children.delete_if do |obj2|
+ obj2.upordown == Dummy
+ end
+ end
+
+ @objects.delete_if do |obj|
+ obj.upordown == Dummy
+ end
+ end
+
+ def parse(types=[], subtypes=[])
+ types = [types] if types.class == Class
+ subtypes = [subtypes] if subtypes.class == String
+ hidelevel = nil
+
+ @objects.each do |obj|
+ hidelevel = obj.level if (@checkvisibility and hidelevel.nil? and (not obj.visible))
+ hidelevel = nil if (@checkvisibility and (not hidelevel.nil?) and obj.visible and obj.level <= hidelevel)
+
+ if hidelevel.nil?
+ ok = false
+ if types.empty?
+ if subtypes.empty?
+ ok = true
+ else
+ subtypes.each do |st|
+ ok = true if obj.subtype == st
+ end
+ end
+ else
+ if subtypes.empty?
+ types.each do |t|
+ ok = true if obj.kind_of?(t)
+ end
+ else
+ types.each do |t|
+ subtypes.each do |st|
+ ok = true if obj.kind_of?(t) if obj.subtype == st
+ end
+ end
+ end
+ end
+
+ yield(obj.class.to_s, obj) if ok
+ end
+ end
+ end
+
+ def path(pad)
+ p = self
+
+ pad.split(/\//).each do |deel|
+ tag, voorkomen = deel.split(/:/)
+
+ if (not tag.nil?) and (not p.nil?)
+ voorkomen = 1 if voorkomen.nil?
+ voorkomen = voorkomen.to_i
+
+ teller = 0
+ p2 = nil
+ p.children.each_index do |i|
+ if p.children[i].upordown == Down
+ if p.children[i].subtype.noquotes == tag.noquotes
+ teller += 1
+ p2 = p.children[i] if teller == voorkomen
+ end
+ end
+ end
+ p = p2
+ end
+ end
+
+ p
+ end
+end
diff -ur rubywebdialogs-none.tar.gz/rubywebdialogs/lib/xml.lib.rb rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/xml.lib.rb
--- rubywebdialogs-none.tar.gz/rubywebdialogs/lib/xml.lib.rb 2005-06-04 14:41:54.519516240 +0200
+++ rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/xml.lib.rb 2004-04-18 14:20:31.000000000 +0200
@@ -0,0 +1,4 @@
+require "ev/sgml"
+
+class XML < SGML
+end
diff -ur rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-18 14:20:31.000000000 +0200
+++ rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-20 22:41:43.000000000 +0200
@@ -375,11 +375,12 @@
res.concat " <table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
res.concat " <tr #{AC}>"
tabs.each do |obj|
+ name = obj.args["name"]
caption = obj.args["caption"]
- if caption == tab
+ if name == tab
res.concat "<td #{AC}><div class=´box´><tt><b> #{caption} </b></tt></div></td>"
else
- res.concat "<td #{AC}><div class=´box´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{caption}\";document.bodyform.submit();´><tt> #{caption} </tt></a></div></td>"
+ res.concat "<td #{AC}><div class=´box´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{name}\";document.bodyform.submit();´><tt> #{caption} </tt></a></div></td>"
end
end
res.concat " </tr>"
@@ -588,10 +589,10 @@
tabs = tabsobj.children.dup.delete_if{|obj| (not obj.kind_of?(OpenTag)) or (obj.subtype != "tab")}
if tab.empty?
- tab = tabs[0].args["caption"]
+ tab = tabs[0].args["name"]
end
- tabsobj.children.delete_if{|obj| (obj.kind_of?(OpenTag)) and (obj.subtype == "tab") and obj.args["caption"] != tab}
+ tabsobj.children.delete_if{|obj| (obj.kind_of?(OpenTag)) and (obj.subtype == "tab") and obj.args["name"] != tab}
end
if help
@@ -696,12 +697,14 @@
@rwd_history.pop
@rwd_action = (@rwd_history[-1] or [nil, nil])[0]
@rwd_window = (@rwd_history[-1] or [nil, nil])[1]
+ @rwd_tab = nil
back = true
when "rwd_help"
help = true
when "rwd_main"
- @rwd_window = "main"
@rwd_action = "main"
+ @rwd_window = "main"
+ @rwd_tab = nil
@rwd_history = []
when "rwd_quit"
done = true
@@ -733,6 +736,8 @@
rescue NameError
end
+ tab = @rwd_tab unless @rwd_tab.nil?
+
# History stuff
@rwd_history = [["main", "main"]] if @rwd_action == "main"
@@ -1077,7 +1082,7 @@
</script>
</head>
- <body onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
+ <body bgcolor=´white´ onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
<table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
<tr align=´center´ valign=´middle´>
<td align=´center´>
diff -ur rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-04-20 22:41:43.000000000 +0200
+++ rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-04-21 22:37:44.000000000 +0200
@@ -37,6 +37,10 @@
self.gsub(/[\r\n]*\z/, "")
end
+ def lf
+ self.gsub(/\r*\n/, "\n").gsub(/\n\z/, "") + "\n"
+ end
+
def crlf
self.gsub(/\r*\n/, "\r\n").gsub(/\r\n\z/, "") + "\r\n"
end
diff -ur rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-20 22:41:43.000000000 +0200
+++ rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-21 22:37:44.000000000 +0200
@@ -620,7 +620,7 @@
class RWDMessage < RWDWindow
def initialize(msg)
- super("<window title=´RWD Message´ nobackbuttons><vertical><p><b>Message:</b> #{msg}</p><back/></vertical></window>")
+ super("<window title=´RWD Message´ nobackbuttons><vertical><p>#{msg}</p><back/></vertical></window>")
end
end
diff -ur rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.3.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-21 22:37:44.000000000 +0200
+++ rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-23 00:08:14.000000000 +0200
@@ -12,10 +12,11 @@
$".push "win32/registry.rb"
end
-exit if ARGV.include?("--rwd-exit")
+exit if ARGV.include?("--rwd-exit") # Hack ???
+
+$rwd_debug = ($rwd_debug or false)
+$rwd_border = ($rwd_border or 0)
-Debug = false
-Border = 0
RWDEmptyline = "..."
rcfile = nil
@@ -269,12 +270,12 @@
end
class OpenTag
- def prechildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ def prechildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
bef = before[-1]
- res.concat Format % ["Before", @subtype] if (Debug and not bef.nil?)
+ res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
res.concat bef if not bef.nil?
- res.concat Format % ["Pre", @subtype] if Debug
+ res.concat Format % ["Pre", @subtype] if $rwd_debug
align = AC
align = "align=´#{@args["align"]}´" if @args.include?("align")
@@ -312,14 +313,20 @@
else
res.concat "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
end
- when "vertical" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
- when "horizontal" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´><tr #{align} #{valign}>"
- when "table" then res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "vertical" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "horizontal" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´><tr #{align} #{valign}>"
+ when "table" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
when "row" then res.concat "<tr #{align} #{valign}>"
when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´hidden´>"
- when "text" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´>"
- when "textarea" then res.concat "<p #{align}><textarea name=´#{@args["name"]}´>#{value}</textarea>"
- when "password" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´>"
+ when "text"
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´>"
+ oneormorefields << "true"
+ when "textarea"
+ res.concat "<p #{align}><textarea name=´#{@args["name"]}´>#{value}</textarea>"
+ oneormorefields << "true"
+ when "password"
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´>"
+ oneormorefields << "true"
when "checkbox"
if vars[@args["name"]] == "on"
switches[@args["name"]] = true
@@ -328,16 +335,19 @@
switches[@args["name"]] = false
res.concat "<p #{align}><input name=´#{@args["name"]}´ type=´checkbox´>"
end
+ oneormorefields << "true"
when "radio"
if vars[@args["name"]] == value
res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value}´ type=´radio´>"
else
res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´radio´>"
end
+ oneormorefields << "true"
when "select"
res.concat "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
name = @args["name"]
$select = vars[name]
+ oneormorefields << "true"
when "option"
if $select == @children[0].text
res.concat "<option selected=´true´>"
@@ -347,21 +357,27 @@
when "button"
res.concat "<input type=´submit´ value=´#{@args["caption"]}´ onclick=´document.bodyform.rwd_action.value=\"#{@args["action"]}\";´>"
firstaction << @args["action"] if (firstaction.empty? and @args.include?("action"))
+ oneormorefields << "true"
when "back"
res.concat "<input type=´submit´ value=´Back´ onclick=´document.bodyform.rwd_action.value=\"rwd_back\";´>"
firstaction << "rwd_back" if firstaction.empty?
+ oneormorefields << "true"
when "help"
res.concat "<input type=´submit´ value=´Help´ onclick=´document.bodyform.rwd_action.value=\"rwd_help\";´>"
firstaction << "rwd_help" if firstaction.empty?
+ oneormorefields << "true"
when "quit"
res.concat "<input type=´submit´ value=´Quit´ onclick=´document.bodyform.rwd_action.value=\"rwd_quit\";´>"
firstaction << "rwd_quit" if firstaction.empty?
+ oneormorefields << "true"
when "close"
res.concat "<input type=´submit´ value=´Close´ onclick=´window.close();´>"
firstaction << "rwd_quit" if firstaction.empty?
+ oneormorefields << "true"
when "reset"
res.concat "<input type=´reset´ value=´Reset´>"
firstaction << "rwd_quit" if firstaction.empty?
+ oneormorefields << "true"
when "closewindow"
#res.concat "<script type=´text/javascript´>\n"
#res.concat "<!--\n"
@@ -369,10 +385,10 @@
#res.concat "//-->\n"
#res.concat "</script>"
when "tabs"
- res.concat "<table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
res.concat " <tr #{AC}>"
res.concat " <td #{AC}>"
- res.concat " <table #{AC} border=´#{Border}´ cellspacing=´3´ cellpadding=´0´>"
+ res.concat " <table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
res.concat " <tr #{AC}>"
tabs.each do |obj|
name = obj.args["name"]
@@ -399,7 +415,7 @@
case @subtype
when "vertical", "window", "helpwindow"
- res.concat Format % ["AftPre", @subtype] if Debug
+ res.concat Format % ["AftPre", @subtype] if $rwd_debug
if @args.include?("spacing")
s = "<tr><td> </td></tr>" * (@args["spacing"].to_i)
else
@@ -408,7 +424,7 @@
bef = "#{s}<tr #{align} #{valign}><td #{align}>"
aft = "</td></tr>"
when "horizontal", "row"
- res.concat Format % ["AftPre", @subtype] if Debug
+ res.concat Format % ["AftPre", @subtype] if $rwd_debug
bef = "<td #{align}>"
aft = "</td>"
end
@@ -417,18 +433,18 @@
after.push(aft)
end
- def postchildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ def postchildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
case @subtype
when "vertical", "window", "helpwindow"
- res.concat Format % ["BefPost", @subtype] if Debug
+ res.concat Format % ["BefPost", @subtype] if $rwd_debug
if @args.include?("spacing")
res.concat "<tr><td> </td></tr>" * (@args["spacing"].to_i)
end
when "horizontal", "row"
- res.concat Format % ["BefPost", @subtype] if Debug
+ res.concat Format % ["BefPost", @subtype] if $rwd_debug
end
- res.concat Format % ["Post", @subtype] if Debug
+ res.concat Format % ["Post", @subtype] if $rwd_debug
case @subtype
when "application"
@@ -483,7 +499,7 @@
after.pop
aft = after[-1]
- res.concat Format % ["After", @subtype] if (Debug and not aft.nil?)
+ res.concat Format % ["After", @subtype] if ($rwd_debug and not aft.nil?)
res.concat aft if not aft.nil?
end
@@ -524,9 +540,9 @@
end
class Text
- def prechildren(res, before, after, vars, switches, help, firstaction, tabs, tab)
+ def prechildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
if not @text.scan(/[^ \t\r\n]/).empty?
- res.concat Format % ["Text", ""] if Debug
+ res.concat Format % ["Text", ""] if $rwd_debug
res.concat "#{@text}"
end
end
@@ -562,9 +578,10 @@
end
def render(vars=Hash.new, switches=Hash.new, help=false, tab="")
- vars2 = Hash.new
- firstaction = ""
- html = ""
+ vars2 = Hash.new
+ oneormorefields = ""
+ firstaction = ""
+ html = ""
vars.each do |key, value|
if not key.empty?
@@ -596,16 +613,16 @@
end
if help
- helpobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, false, firstaction, tabs, tab)
+ helpobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, false, oneormorefields, firstaction, tabs, tab)
else
- windowobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, (not @helprwd.empty?), firstaction, tabs, tab)
+ windowobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab)
end
- html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not Debug
+ html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not $rwd_debug
html.gsub!(/%%/, "%")
html.gsub!(/\n\n*/, "\n")
- if firstaction.empty?
+ if oneormorefields.empty?
focus = ""
else
focus = "document.bodyform.elements[0].focus();"
@@ -632,7 +649,7 @@
class RWDDone < RWDWindow
def initialize(exitbrowser)
- super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Login´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>")
+ super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Again´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>")
end
end
@@ -679,31 +696,32 @@
# Copy the vars from the window to vars. vars wil later on be copied to instance variables.
post.sort.each do |key, value|
- puts "Post: #{key} -> #{value.from_html.inspect}" if Debug
+ puts "Post: #{key} -> #{value.from_html.inspect}" if $rwd_debug
vars[key] = value.from_html
end
- # Stack handling for rwd_action and rwd_window.
+ # Stack handling for rwd_action, rwd_window and rwd_tab.
@rwd_action = vars["rwd_action"]
@rwd_action, @rwd_args = @rwd_action.split(/\//, 2) unless @rwd_action.nil?
if @rwd_action =~ /^rwd_tab_/
- tab = @rwd_action.sub(/^rwd_tab_/, "")
+ @rwd_tab = @rwd_action.sub(/^rwd_tab_/, "")
+ @rwd_history[-1][2] = @rwd_tab
else
case @rwd_action
when "rwd_back"
@rwd_history.pop
- @rwd_action = (@rwd_history[-1] or [nil, nil])[0]
- @rwd_window = (@rwd_history[-1] or [nil, nil])[1]
- @rwd_tab = nil
+ @rwd_action = (@rwd_history[-1] or [nil, nil, nil])[0]
+ @rwd_window = (@rwd_history[-1] or [nil, nil, nil])[1]
+ @rwd_tab = (@rwd_history[-1] or [nil, nil, nil])[2]
back = true
when "rwd_help"
help = true
when "rwd_main"
- @rwd_action = "main"
- @rwd_window = "main"
+ @rwd_action = nil
+ @rwd_window = nil
@rwd_tab = nil
@rwd_history = []
when "rwd_quit"
@@ -713,13 +731,15 @@
# History stuff
@rwd_history = @rwd_history[-100..-1] if @rwd_history.length >= 100
+ @rwd_args = [] if @rwd_args.nil?
@rwd_action = "main" if @rwd_action.nil?
@rwd_action = "main" if @rwd_action.empty?
- @rwd_args = [] if @rwd_args.nil?
@rwd_window = "main" if @rwd_window.nil?
+ @rwd_tab = "" if @rwd_tab.nil?
vars["rwd_action"] = @rwd_action
vars["rwd_window"] = @rwd_window
+ vars["rwd_tab"] = @rwd_tab
# Copy vars from window to instance.
@@ -731,18 +751,16 @@
if not back
begin
- puts "Method: #{@rwd_action}(#{@rwdargs.join(", ")})" if Debug
+ puts "Method: #{@rwd_action}(#{@rwd_args.join(", ")})" if $rwd_debug
method(@rwd_action).call(*@rwd_args)
rescue NameError
end
- tab = @rwd_tab unless @rwd_tab.nil?
-
# History stuff
- @rwd_history = [["main", "main"]] if @rwd_action == "main"
- @rwd_history = [["main", "main"]] if @rwd_history.empty?
- @rwd_history.push [@rwd_action, @rwd_window] if (@rwd_history[-1] != [@rwd_action, @rwd_window] or not @rwd_msg.nil?)
+ @rwd_history = [["main", "main", nil]] if @rwd_action == "main"
+ @rwd_history = [["main", "main", nil]] if @rwd_history.empty?
+ @rwd_history.push [@rwd_action, @rwd_window, @rwd_tab] if (@rwd_history[-1] != [@rwd_action, @rwd_window, @rwd_tab] or not @rwd_msg.nil?)
end
end
@@ -756,7 +774,7 @@
# just ignore.
vars.sort.each do |key, value|
- puts "Pre: #{key} -> #{value.inspect}" if Debug
+ puts "Pre: #{key} -> #{value.inspect}" if $rwd_debug
end
# Answer to browser.
@@ -768,8 +786,9 @@
res << RWDMessage.new(@rwd_msg).render if @rwd_msgtype == "message"
res << RWDError.new(@rwd_msg).render if @rwd_msgtype == "error"
else
- puts "Window: #{@rwd_window}" if Debug
- res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, tab)
+ puts "Window: #{@rwd_window}" if $rwd_debug
+ puts "Tab: #{@rwd_tab}" if $rwd_debug
+ res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, @rwd_tab)
end
end
@@ -836,7 +855,7 @@
@rack = rack.to_s
@cleanup = SessionCleanup.new(self, 3600, 24*3600) if cleanup
@sessions = {}
- #@store = PStore.new("#{temp}/store.#{@rack}.#{user}")
+ #@store = PStore.new("#{temp}/store.#{@rack}.#{user}") # ???
#@store.transaction do
#@store[@rack] = {} if not @store.root?(@rack)
@@ -958,11 +977,11 @@
if session.nil?
if auth.nil?
- session = RWDSession.new(MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
- session["object"] = @object
+ session = RWDSession.new(MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ session["object"] = @object
else
- session = RWDSession.new(MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
- session["object"] = @object.clone
+ session = RWDSession.new(MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ session["object"] = @object.clone
end
if oldsessionid.nil? or oldsessionid.empty?
@@ -972,10 +991,10 @@
us = vars["rwd_a"]
pa = vars["rwd_b"]
-
+
if us.nil? or pa.nil? or auths[us] != pa
- session = RWDSession.new
- session["object"] = RWDLogin.new(realm)
+ session = RWDSession.new
+ session["object"] = RWDLogin.new(realm)
else
session.authenticated = true
@sessions[session.sessionid] = session
diff -ur rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/init.rb
--- rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/init.rb 2004-04-23 00:08:14.000000000 +0200
+++ rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/init.rb 2004-04-23 11:11:25.000000000 +0200
@@ -1,39 +1,24 @@
require "rbconfig"
-Reversed = (ARGV.include?("-r"))
-
-FromDirs = ENV["PATH"].split(/:/) + [".", "./lib", "./rubylib/lib"]
+FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
Dir.mkdir(ToDir) if not File.directory?(ToDir)
FromDirs.each do |fromdir|
fromdir = Dir.pwd if fromdir == "."
+
if File.directory?(fromdir)
Dir.new(fromdir).each do |file|
- if not file.scan(/\.lib\.rb$/).empty?
+ if file =~ /\.lib\.rb$/
fromfile = fromdir + "/" + file
tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
- if not (File.directory?("c:/"))
- printf "%s -> %s\n", fromfile, tofile
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.file?(tofile)
- File.unlink(tofile) if File.symlink?(tofile)
- File.symlink(fromfile, tofile)
- else
- if Reversed
- tofile, fromfile = fromfile, tofile
- end
-
- if FileTest.file?(fromfile)
- printf "%s -> %s\n", fromfile, tofile
-
- File.delete(tofile) if File.writable?(tofile)
- File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
- else
- printf "%s -> %s (Skipped!)\n", fromfile, tofile
- end
- end
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
end
end
end
diff -ur rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/install.rb
--- rubywebdialogs-0.0.4.tar.gz/rubywebdialogs/install.rb 2004-04-23 00:08:14.000000000 +0200
+++ rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/install.rb 2004-04-23 11:11:25.000000000 +0200
@@ -1,39 +1,24 @@
require "rbconfig"
-Reversed = (ARGV.include?("-r"))
-
-FromDirs = ENV["PATH"].split(/:/) + [".", "./lib", "./rubylib/lib"]
+FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
Dir.mkdir(ToDir) if not File.directory?(ToDir)
FromDirs.each do |fromdir|
fromdir = Dir.pwd if fromdir == "."
+
if File.directory?(fromdir)
Dir.new(fromdir).each do |file|
- if not file.scan(/\.lib\.rb$/).empty?
+ if file =~ /\.lib\.rb$/
fromfile = fromdir + "/" + file
tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
- if not (File.directory?("c:/"))
- printf "%s -> %s\n", fromfile, tofile
+ printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.file?(tofile)
- File.unlink(tofile) if File.symlink?(tofile)
- File.symlink(fromfile, tofile)
- else
- if Reversed
- tofile, fromfile = fromfile, tofile
- end
-
- if FileTest.file?(fromfile)
- printf "%s -> %s\n", fromfile, tofile
-
- File.delete(tofile) if File.writable?(tofile)
- File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
- else
- printf "%s -> %s (Skipped!)\n", fromfile, tofile
- end
- end
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
end
end
end
diff -ur rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-23 11:11:24.000000000 +0200
+++ rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-24 18:43:46.000000000 +0200
@@ -479,7 +479,7 @@
req = Request.new(io)
resp = Response.new(io)
- rescue
+ rescue NameError
puts "Getting request from browser failed."
io = nil
end
diff -ur rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.5.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-23 11:11:24.000000000 +0200
+++ rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-24 18:43:46.000000000 +0200
@@ -294,7 +294,7 @@
args["nohelpbutton"] = (not help)
- res.concat(template(RWD_HTML1, args))
+ res.concat(template($rwd_html1, args))
when "p" then res.concat "<p #{align}>"
when "pre" then res.concat "<pre>"
when "big" then res.concat "<p #{align}><big>"
@@ -379,24 +379,27 @@
firstaction << "rwd_quit" if firstaction.empty?
oneormorefields << "true"
when "closewindow"
- #res.concat "<script type=´text/javascript´>\n"
+ #res.concat "<script type=´text/javascript´>\n" # ???
#res.concat "<!--\n"
#res.concat " window.close();\n"
#res.concat "//-->\n"
#res.concat "</script>"
when "tabs"
- res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
- res.concat " <tr #{AC}>"
- res.concat " <td #{AC}>"
- res.concat " <table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
- res.concat " <tr #{AC}>"
+ res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res.concat " <tr #{AL}>"
+ res.concat " <td #{AL} class=´tabs´>"
+ res.concat " <table #{AL} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res.concat " <tr #{AL}>"
tabs.each do |obj|
name = obj.args["name"]
caption = obj.args["caption"]
+
+ res.concat "<td class=´notab´> </td>" unless obj == tabs[0]
+
if name == tab
- res.concat "<td #{AC}><div class=´box´><tt><b> #{caption} </b></tt></div></td>"
+ res.concat "<td #{AC} class=´thistab´><tt><b> #{caption} </b></tt></td>"
else
- res.concat "<td #{AC}><div class=´box´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{name}\";document.bodyform.submit();´><tt> #{caption} </tt></a></div></td>"
+ res.concat "<td #{AC} class=´tab´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{name}\";document.bodyform.submit();´><tt> #{caption} </tt></a></td>"
end
end
res.concat " </tr>"
@@ -404,7 +407,9 @@
res.concat " </td>"
res.concat " </tr>"
when "tab"
- res.concat "<tr #{align} #{valign}><td #{align}><div class=´box2´>"
+ res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
+ res.concat " <tr #{AL}>"
+ res.concat " <td #{AL} class=´tabblad´>"
else
puts "<#{@subtype}>"
res.concat "<#{@subtype}>"
@@ -414,7 +419,7 @@
aft = nil
case @subtype
- when "vertical", "window", "helpwindow"
+ when "vertical", "window", "helpwindow", "tabs", "tab"
res.concat Format % ["AftPre", @subtype] if $rwd_debug
if @args.include?("spacing")
s = "<tr><td> </td></tr>" * (@args["spacing"].to_i)
@@ -435,7 +440,7 @@
def postchildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
case @subtype
- when "vertical", "window", "helpwindow"
+ when "vertical", "window", "helpwindow", "tabs", "tab"
res.concat Format % ["BefPost", @subtype] if $rwd_debug
if @args.include?("spacing")
res.concat "<tr><td> </td></tr>" * (@args["spacing"].to_i)
@@ -453,7 +458,7 @@
args["nohelpbutton"] = (not help)
- res.concat(template(RWD_HTML2, args))
+ res.concat(template($rwd_html2, args))
when "p" then res.concat "</p>"
when "pre" then res.concat "</pre>"
when "big" then res.concat "</big></p>"
@@ -489,7 +494,7 @@
when "reset" then res.concat ""
when "closewindow" then res.concat ""
when "tabs" then res.concat "</table>"
- when "tab" then res.concat "</div></td></tr>"
+ when "tab" then res.concat "</td></tr></table>"
else
puts "</#{@subtype}>"
res.concat "</#{@subtype}>"
@@ -519,6 +524,12 @@
a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
a["CLOSEBUTTON"] = (not (vars["noclosebutton"]))
+ if a.include?("WIDTH")
+ a["WIDTH"] = "width=´#{a["WIDTH"]}´"
+ else
+ a["WIDTH"] = " "
+ end
+
html.split(/\r*\n/).each do |line|
if line =~ /%[A-Z]+%/
a.each do |k, v|
@@ -913,7 +924,7 @@
res.gsub!(/\$RWD_SESSION\$/, "#{@sessionid}")
end
- done
+ return done
end
end
@@ -936,7 +947,7 @@
@browserthread = Thread.new do
puts "Starting the browser..."
- #if ENV["RWDBROWSER"].downcase =~ /iexplore/
+ #if ENV["RWDBROWSER"].downcase =~ /iexplore/ # ???
#@ie = IE.new("http://localhost:#{port}/")
#else
if windows?
@@ -955,7 +966,7 @@
# Start server.
- catch :exit do
+ catch :rwd_exit do
HTTPServer.serve(port, (not auth.nil?)) do |req, resp|
vars = req.vars.dup
@@ -966,15 +977,15 @@
else
auths = auth
end
-
+
oldsessionid = vars["rwd_session"]
-
+
# Retrieve session.
-
+
session = @sessions[oldsessionid]
-
+
# Eventually create new session.
-
+
if session.nil?
if auth.nil?
session = RWDSession.new(MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
@@ -983,15 +994,15 @@
session = RWDSession.new(MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
session["object"] = @object.clone
end
-
+
if oldsessionid.nil? or oldsessionid.empty?
if not auth.nil? and not session.authenticated
-
+
# Check authentication
-
+
us = vars["rwd_a"]
pa = vars["rwd_b"]
-
+
if us.nil? or pa.nil? or auths[us] != pa
session = RWDSession.new
session["object"] = RWDLogin.new(realm)
@@ -1006,58 +1017,60 @@
session = RWDSession.new
session["object"] = RWDTimeOut.new
end
-
+
vars = {}
end
-
+
# Avoid timeout.
-
+
session.touch
-
+
if req.request.path == "/"
-
+
# Serve methods/callbacks.
-
+
# Build new page.
-
+
res = ""
-
+
done = session.render(res, req.request.path, vars)
-
+
begin
resp["Content-Type"] = "text/html"
-
+
resp << res
rescue
puts "Sending response to browser failed."
-
+
@sessions.delete(session.sessionid)
end
-
+
# Eventually delete this session.
-
+
if done
@sessions.delete(session.sessionid)
-
+
if @localbrowsing
resp.flush
-
+
if @browserstarted and @browserthread.alive?
puts "Waiting for the browser to terminate..."
-
+
@browserthread.join
end
-
- throw :exit
+
+ throw :rwd_exit
end
end
-
+
else
-
+
# Serve files.
-
+
if req.request.path == "/pixel.gif"
- resp << RWD_Pixel
+ resp["Cache-Control"] = "max-age=86400"
+ resp["Content-Type"] = "image/gif"
+ resp << $rwd_pixel
else
if (FileTest.file?(req.request.path.sub(/^\/*/, "")))
resp << File.new(req.request.path.sub(/^\/*/, ""), "rb").read rescue nil
@@ -1065,14 +1078,14 @@
resp.response = "HTTP/1.0 404 NOT FOUND"
end
end
-
+
end
end
end
end
end
-RWD_HTML = "
+$rwd_html = "
<!-- Generated by RubyWebDialog. -->
<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
<html>
@@ -1086,9 +1099,34 @@
<style type=´text/css´>
<!--
- a { text-decoration : none }
- div.box { border : thin solid #AAAAAA }
- div.box2 { border-top : thin solid #AAAAAA }
+
+ a {
+ text-decoration : none;
+ }
+
+ td.tabs {
+ border-color : #000000;
+ border-width : thin;
+ border-style : none none solid none;
+ }
+
+ td.tab {
+ border-color : #000000;
+ border-width : thin;
+ border-style : solid solid none solid;
+ }
+
+ td.thistab {
+ border-color : #000000;
+ border-width : medium;
+ border-style : solid solid none solid;
+ }
+
+ td.notab {
+ border-width : thin;
+ border-style : none;
+ }
+
//-->
</style>
@@ -1102,224 +1140,224 @@
</head>
<body bgcolor=´white´ onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
- <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
- <tr align=´center´ valign=´middle´>
- <td align=´center´>
-
- <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
-
- <td align=´center´>
-
- <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
- <tr align=´center´>
- <td align=´center´ bgcolor=´#444488´>
-
- <table align=´left´ border=´0´ cellspacing=´1´ cellpadding=´0´>
- <tr align=´center´>
- <td align=´border´><img src=´%LOGO%´ width=´14´ height=´14´></td>
- <td align=´center´><b><small><font color=´#FFFFFF´> %TITLE% </font></small></b></td>
- </tr>
- </table>
-
- <table align=´right´ border=´0´ cellspacing=´1´ cellpadding=´0´>
- <tr align=´center´>
- <!-- %HELPBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_help\";document.bodyform.submit();´> ? </a></small></b></td>
- <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_main\";document.bodyform.submit();´> << </a></small></b></td>
- <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_back\";document.bodyform.submit();´> < </a></small></b></td>
- <!-- %CLOSEBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_quit\";document.bodyform.submit();´> X </a></small></b></td>
- </tr>
- </table>
-
- </td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´#CCCCCC´>
- <form name=´bodyform´ action=´/´ method=´post´>
-
- <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
-
- %BODY%
+ <form name=´bodyform´ action=´/´ method=´post´>
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
+ <tr align=´center´ valign=´middle´>
+ <td align=´center´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+
+ <td align=´center´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ %WIDTH%>
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#444488´>
+
+ <table align=´left´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <td align=´border´><img src=´%LOGO%´ width=´14´ height=´14´></td>
+ <td align=´center´><b><small><font color=´#FFFFFF´> %TITLE% </font></small></b></td>
+ </tr>
+ </table>
+ <table align=´right´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <!-- %HELPBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_help\";document.bodyform.submit();´> ? </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_main\";document.bodyform.submit();´> << </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_back\";document.bodyform.submit();´> < </a></small></b></td>
+ <!-- %CLOSEBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_quit\";document.bodyform.submit();´> X </a></small></b></td>
+ </tr>
</table>
- <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
- <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
- </form>
- </td>
- </tr>
- </table>
-
- </td>
-
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- <tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- </tr>
-
- </table>
-
- </td>
- </tr>
- </table>
+ </td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#CCCCCC´>
+
+ <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
+
+ %BODY%
+
+ </table>
+
+ <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
+ <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ </tr>
+
+ </table>
+
+ </td>
+ </tr>
+ </table>
+ </form>
</body>
</html>
"
-RWD_Pixel = "
+$rwd_pixel = "
R0lGODlhAQABAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK
CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ
GRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygo
@@ -1341,4 +1379,4 @@
CgD/ACwAAAAAAQABAAAIBAD/BQQAOw==
".unpack("m").shift
-RWD_HTML1, RWD_HTML2 = RWD_HTML.split(/^\s*%BODY%\s*\r*$/)
+$rwd_html1, $rwd_html2 = $rwd_html.split(/^\s*%BODY%\s*\r*$/)
diff -ur rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-24 18:43:46.000000000 +0200
+++ rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-28 21:41:23.000000000 +0200
@@ -211,7 +211,7 @@
res = io.read
header, data = nil, nil
header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil?
- header = Header.new(header)
+ header = Header.new(header)
if recursive and header.header["location"] != uri.to_s
uri = EVURI.new(uri) + header.header["location"]
@@ -479,8 +479,8 @@
req = Request.new(io)
resp = Response.new(io)
- rescue NameError
- puts "Getting request from browser failed."
+ rescue NameError, StandardError => e
+ puts "Getting request from browser failed. (%s)" % e.class.to_s
io = nil
end
@@ -502,7 +502,7 @@
begin
resp.flush
- rescue
+ rescue NameError, StandardError
end
#end
end
diff -ur rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.6.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-24 18:43:46.000000000 +0200
+++ rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-28 21:41:23.000000000 +0200
@@ -40,8 +40,10 @@
else
begin
puts "Looking for default browser..."
- ENV["RWDBROWSER"] = Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´)[0]
- rescue
+ Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
+ ENV["RWDBROWSER"] = reg[""]
+ end
+ rescue NameError
puts "Not found."
end
@@ -319,13 +321,17 @@
when "row" then res.concat "<tr #{align} #{valign}>"
when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´hidden´>"
when "text"
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´>"
+ maxlength = ""
+ maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´ #{maxlength}>"
oneormorefields << "true"
when "textarea"
res.concat "<p #{align}><textarea name=´#{@args["name"]}´>#{value}</textarea>"
oneormorefields << "true"
when "password"
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´>"
+ maxlength = ""
+ maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´ #{maxlength}>"
oneormorefields << "true"
when "checkbox"
if vars[@args["name"]] == "on"
@@ -996,7 +1002,7 @@
end
if oldsessionid.nil? or oldsessionid.empty?
- if not auth.nil? and not session.authenticated
+ if not auth.nil? and not auth.empty? and not session.authenticated
# Check authentication
diff -ur rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-04-28 21:41:23.000000000 +0200
+++ rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-05-05 23:40:17.000000000 +0200
@@ -490,7 +490,7 @@
@@times[com]=Time.new.to_f if not @@times.include?(com)
- if (not remote) or (remote and (auth.nil? or authenticate(auth, realm, req, resp)))
+ if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
#puts "#{Time.new.strftime("%H:%M:%S")}: #{req.peeraddr[3]}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request}"
yield(req, resp)
diff -ur rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.7.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-04-28 21:41:23.000000000 +0200
+++ rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-05-05 23:40:17.000000000 +0200
@@ -38,13 +38,15 @@
ENV[k] = v
end
else
- begin
- puts "Looking for default browser..."
- Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
- ENV["RWDBROWSER"] = reg[""]
+ if not ENV.include?("RWDBROWSER")
+ begin
+ puts "Looking for default browser..."
+ Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
+ ENV["RWDBROWSER"] = reg[""]
+ end
+ rescue NameError
+ puts "Not found."
end
- rescue NameError
- puts "Not found."
end
if not ENV.include?("RWDBROWSER") and false # ???
@@ -274,7 +276,7 @@
class OpenTag
def prechildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
bef = before[-1]
- res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
+ res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
res.concat bef if not bef.nil?
res.concat Format % ["Pre", @subtype] if $rwd_debug
@@ -311,7 +313,7 @@
when "i" then res.concat "<i>"
when "a"
if @args.include?("href")
- res.concat "<a href=´#{@args["href"]}´ target=´#{@args["target"] or "new"}´>"
+ res.concat "<a href=´#{@args["href"]}´ target=´#{@args["target"] or "_blank"}´>"
else
res.concat "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
end
@@ -672,11 +674,11 @@
class RWDialog
def initialize(xml)
- @rwd_xml = xml
- @rwd_exitbrowser = false
- @rwd_history = []
- @rwd_clone_vars = ["@rwd_history"]
- @rwd_ignore_vars = ["@rwd_server"]
+ @rwd_xml = xml
+ @rwd_exitbrowser = false
+ @rwd_history = []
+ @rwd_ignore_vars = []
+ @rwd_call_after_back = []
end
def self.file(rwdfile, *args)
@@ -752,6 +754,7 @@
@rwd_action = "main" if @rwd_action.nil?
@rwd_action = "main" if @rwd_action.empty?
@rwd_window = "main" if @rwd_window.nil?
+ @rwd_window = "main" if @rwd_window.empty?
@rwd_tab = "" if @rwd_tab.nil?
vars["rwd_action"] = @rwd_action
@@ -766,7 +769,7 @@
# Callback.
- if not back
+ if (not back) or @rwd_call_after_back.include?(@rwd_action)
begin
puts "Method: #{@rwd_action}(#{@rwd_args.join(", ")})" if $rwd_debug
method(@rwd_action).call(*@rwd_args)
@@ -826,16 +829,6 @@
@rwd_msgtype = "error"
end
- def clone
- @rwd_history = []
-
- @rwd_clone_vars.each do |var|
- instance_eval "#{var} = #{var}.clone"
- end
-
- super
- end
-
def exitbrowser
@rwd_exitbrowser = true
end
@@ -944,7 +937,7 @@
if auth.nil?
@localbrowsing = true
- if ENV.include?("RWDBROWSER")
+ if ENV.include?("RWDBROWSER") and not ENV["RWDBROWSER"].empty?
@browserstarted = true
@object.exitbrowser
@@ -1110,6 +1103,10 @@
text-decoration : none;
}
+ a:hover {
+ background : #AAAAAA;
+ }
+
td.tabs {
border-color : #000000;
border-width : thin;
diff -ur rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-05-05 23:40:17.000000000 +0200
+++ rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-05-15 11:16:23.000000000 +0200
@@ -25,6 +25,53 @@
s
end
+class TCPServer
+ def self.freeport(from, to)
+ res = nil
+ port = from
+
+ while res.nil? and port <= to
+ begin
+ #evtimeout(0.1) do
+ io = TCPSocket.new("localhost", port)
+ io.close
+ #end
+
+ port += 1
+ rescue
+ res = port
+ end
+ end
+
+ return res
+ end
+
+ def self.usedports(from, to)
+ threads = []
+ res = []
+
+ from.upto(to) do |port|
+ threads << Thread.new do
+ begin
+ io = TCPSocket.new("localhost", port)
+ io.close
+
+ port
+ rescue
+ nil
+ end
+ end
+ end
+
+ threads.each do |thread|
+ port = thread.value
+ res << port unless port.nil?
+ end
+
+ return res
+ end
+end
+
class EVURI
attr_reader :protocol
attr_writer :protocol
@@ -472,40 +519,41 @@
if not server.nil?
loop do
- io = nil
-
- begin
- io = server.accept
+ io = server.accept
- req = Request.new(io)
- resp = Response.new(io)
- rescue NameError, StandardError => e
- puts "Getting request from browser failed. (%s)" % e.class.to_s
- io = nil
- end
+ catch :rwd_io_error do
+ begin
+ req = Request.new(io)
+ resp = Response.new(io)
+ rescue
+ throw :rwd_io_error
+ end
- if not io.nil? and not req.peeraddr.nil?
- #Thread.new(req, resp) do |req, resp|
- com = req.request.to_s.strip + req.peeraddr[3]
+ begin
+ ip = req.peeraddr[3]
+ com = req.request.to_s.strip + ip
+ rescue NameError
+ throw :rwd_io_error
+ end
+ if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
@@times[com]=Time.new.to_f if not @@times.include?(com)
- if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
- #puts "#{Time.new.strftime("%H:%M:%S")}: #{req.peeraddr[3]}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request}"
+ #puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request}"
+
+ yield(req, resp)
- yield(req, resp)
+ puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request}"
- puts "#{Time.new.strftime("%H:%M:%S")}: #{req.peeraddr[3]}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request}"
+ @@times.delete(com)
+ end
- @@times.delete(com)
- end
-
- begin
- resp.flush
- rescue NameError, StandardError
- end
- #end
- end
+ begin
+ resp.flush
+ rescue
+ throw :rwd_io_error
+ end
+ end
end
end
end
diff -ur rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-05-05 23:40:17.000000000 +0200
+++ rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-05-15 11:16:23.000000000 +0200
@@ -95,9 +95,17 @@
DRbObject.new(nil, "druby://localhost:3100").speak(self)
end
- def splitblocks(begindelimiters, enddelimiter)
- bd = begindelimiters.collect {|s| Regexp.escape(s)}
- ed = enddelimiter.collect {|s| Regexp.escape(s)}
+ def splitblocks(*delimiters)
+ begindelimiters = []
+ enddelimiters = []
+
+ delimiters.each do |k, v|
+ begindelimiters << k
+ enddelimiters << v
+ end
+
+ bd = begindelimiters.collect {|s| Regexp.escape(s)}
+ ed = enddelimiters.collect {|s| Regexp.escape(s)}
be = bd.join("|")
ee = ed.join("|")
@@ -106,14 +114,14 @@
type = 0
tmp = ""
es = ""
+
self.split(/(#{be}|#{ee})/).each do |s|
if type == 0
if begindelimiters.include?(s)
type = begindelimiters.index(s)+1
tmp = s
- es = enddelimiter[begindelimiters.index(s)]
+ es = enddelimiters[begindelimiters.index(s)]
else
- #res << [0, s] if not s.compress.empty?
res << [0, s] if not s.empty?
end
else
@@ -127,13 +135,17 @@
end
end
end
- res
+
+ res << [0, tmp] if not tmp.empty?
+
+ return res
end
- def splitwords(tokens=[], begindelimiters=["´", ´"´], enddelimiter=["´", ´"´])
+ def splitwords(tokens=[])
tokens = [tokens] if not tokens.kind_of?(Array)
res = []
- self.splitblocks(begindelimiters, enddelimiter).each do |type, s|
+
+ self.splitblocks(["´", "´"], [´"´, ´"´]).each do |type, s|
case type
when 0
tokens.each do |token|
@@ -148,18 +160,20 @@
res << s[1..-2]
end
end
- res
+
+ return res
end
def uncomment
res = []
- self.splitblocks( ["´" , ´"´ , "/*" , "<!--" , "#" , ";" ],
- ["´" , ´"´ , "*/" , "-->" , "\n", "\n"]).each do |type, s|
+
+ self.splitblocks(["´", "´"], [´"´, ´"´], ["/*", "*/"], ["<!--", "-->"], ["#", "\n"]).each do |type, s|
case type
when 0, 1, 2 then res << s
when 3, 4, 5
end
end
+
res.join("")
end
diff -ur rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-05-05 23:40:17.000000000 +0200
+++ rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-05-15 11:16:23.000000000 +0200
@@ -12,8 +12,7 @@
$".push "win32/registry.rb"
end
-exit if ARGV.include?("--rwd-exit") # Hack ???
-
+$rwd_exit = ARGV.include?("--rwd-exit") # Hack ???
$rwd_debug = ($rwd_debug or false)
$rwd_border = ($rwd_border or 0)
@@ -31,68 +30,29 @@
Format = "\n<!-- %-10s %-10s -->\t"
-if not rcfile.nil?
+unless rcfile.nil?
puts "Reading #{rcfile} ..."
Hash.file(rcfile).each do |k, v|
ENV[k] = v
end
-else
- if not ENV.include?("RWDBROWSER")
- begin
- puts "Looking for default browser..."
- Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
- ENV["RWDBROWSER"] = reg[""]
- end
- rescue NameError
- puts "Not found."
- end
- end
-
- if not ENV.include?("RWDBROWSER") and false # ???
- s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
- s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
- s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil?)
-
- if not rcfile.nil?
- puts "Creating #{rcfile} ..."
- puts ""
- puts "# This is the first time you start a RubyWebDialog application."
- puts "# I have to know your favorite browser."
- puts "# "
- puts "# Put the full path to your favorite browser between the quotes"
- puts "# (\"...\") after RWDBROWSER= and remove the hash (#) at the"
- puts "# beginning of the line."
- puts "# "
- puts "# Restart your application."
- puts ""
-
- File.open(rcfile, "a") do |f|
- f.puts "# This is the first time you start a RubyWebDialog application."
- f.puts "# I have to know your favorite browser."
- f.puts "# "
- f.puts "# Put the full path to your favorite browser between the quotes"
- f.puts "# (\"...\") after RWDBROWSER= and remove the hash (#) at the"
- f.puts "# beginning of the line."
- f.puts "# "
- f.puts "# Restart your application."
- f.puts ""
- f.puts "#RWDBROWSER=\"...\""
- end
- end
-
- if windows?
- system("notepad #{rcfile}")
+end
- sleep 1
- else
- puts "Please edit #{rcfile}."
+unless ENV.include?("RWDBROWSER")
+ begin
+ puts "Looking for default browser..."
+ Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
+ ENV["RWDBROWSER"] = reg[""]
end
-
- exit
+ rescue NameError
+ puts "Not found."
end
end
+unless ENV.include?("RWDPORTS")
+ ENV["RWDPORTS"] = "7701-7709"
+end
+
trap("INT") {puts "Terminating..." ; exit}
$SAFE = 2
@@ -155,7 +115,7 @@
res = ""
res = res + "<row valign=´top´>"
- res = res + "<radio name=´#{key.to_html}´ value=´#{value.to_html}´/>" if not key.nil?
+ res = res + "<radio name=´#{key.to_html}´ value=´#{value.to_html}´/>" unless key.nil?
res = res + self.collect{|s| "<p align=´left´>#{s.to_html}</p>"}.join("")
res = res + "</row>"
@@ -212,11 +172,11 @@
end
class Hash
- def rwd_table(field, joinwith=@sep, headers=nil)
+ def rwd_table(field=nil, joinwith=nil, headers=nil)
res = []
res << "<table>"
- res << headers.rwd_headers(true) if not headers.nil?
+ res << headers.rwd_headers((not field.nil?)) if not headers.nil?
self.keys.numsort.each do |key|
key2 = key
value2 = self[key]
@@ -233,8 +193,8 @@
end
class EVTable
- def rwd_table(key, joinwith)
- super(key, joinwith, @headers)
+ def rwd_table(field=nil, joinwith=@sep)
+ super(field, joinwith, @headers)
end
def rwd_form(prefix="", key=nil, twoparts=false)
@@ -685,9 +645,19 @@
new(File.new(rwdfile).readlines, *args)
end
- def serve(port=1234, auth=nil, realm=self.class.to_s)
+ def serve(port=nil, auth=nil, realm=self.class.to_s)
+ exit if $rwd_exit
+
raise "RWD is not initialized." if @rwd_xml.nil?
+ low, high = ENV["RWDPORTS"].split(/[^\d+]/)
+ high = low if high.nil?
+ low, high = low.to_i, high.to_i
+
+ port = TCPServer.freeport(low, high) if port.nil?
+ raise "No free TCP port." if port.nil?
+ port = port.to_i
+
@rwd_server = RWDServer.new(self, port, auth, realm)
end
@@ -950,11 +920,11 @@
#@ie = IE.new("http://localhost:#{port}/")
#else
if windows?
- system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"")
+ system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
elsif cygwin?
- system("#{ENV["RWDBROWSER"].gsub(/\\/, "/").gsub(/ /, "\ ")} \"http://localhost:#{port}/\"")
+ system("#{ENV["RWDBROWSER"].gsub(/\\/, "/").gsub(/ /, "\ ")} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
else
- system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"")
+ system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
end
#end
diff -ur rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/sgml.lib.rb
--- rubywebdialogs-0.0.8.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-05-05 23:40:17.000000000 +0200
+++ rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-05-15 11:16:23.000000000 +0200
@@ -122,7 +122,7 @@
def buildobjects(string)
@objects = []
- string.splitblocks(["<!--", "<!", "<?", "<"], ["-->", ">", "?>", ">"]).each do |type, s|
+ string.splitblocks(["<!--", "-->"], ["<!", ">"], ["<?", "?>"], ["<", ">"]).each do |type, s|
case type
when 0 then @objects << Text.new(s)
when 1 then @objects << Comment.new(s)
@@ -156,7 +156,7 @@
def verwerktag2(string)
a = []
- string.splitblocks(["´", ´"´], ["´", ´"´]).collect do |type, s|
+ string.splitblocks(["´", "´"], [´"´, ´"´]).collect do |type, s|
case type
when 0
if self.class.to_s == "HTML"
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/init.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/init.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/init.rb 2004-08-21 10:56:03.000000000 +0200
@@ -1,9 +1,19 @@
require "rbconfig"
+def mkdirrec(dir)
+ pdir = File.dirname(dir)
+
+ if not pdir.empty? and not File.directory?(pdir)
+ mkdirrec (pdir)
+ end
+
+ Dir.mkdir(dir) rescue nil
+end
+
FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
-Dir.mkdir(ToDir) if not File.directory?(ToDir)
+mkdirrec(ToDir) if not File.directory?(ToDir)
FromDirs.each do |fromdir|
fromdir = Dir.pwd if fromdir == "."
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/install.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/install.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/install.rb 2004-08-21 10:56:03.000000000 +0200
@@ -1,9 +1,19 @@
require "rbconfig"
+def mkdirrec(dir)
+ pdir = File.dirname(dir)
+
+ if not pdir.empty? and not File.directory?(pdir)
+ mkdirrec (pdir)
+ end
+
+ Dir.mkdir(dir) rescue nil
+end
+
FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
-Dir.mkdir(ToDir) if not File.directory?(ToDir)
+mkdirrec(ToDir) if not File.directory?(ToDir)
FromDirs.each do |fromdir|
fromdir = Dir.pwd if fromdir == "."
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ftools.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2005-06-04 14:41:58.713878600 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -0,0 +1,161 @@
+require "ftools"
+
+class Dir
+ def self.mkdirrec(dir)
+ pdir = File.dirname(dir)
+
+ if not pdir.empty? and not File.directory?(pdir)
+ Dir.mkdirrec(pdir)
+ end
+
+ Dir.mkdir(dir) rescue nil
+ end
+
+ def self.copy(from, to)
+ if File.directory?(from)
+ pdir = Dir.pwd
+ todir = File.expand_path(to)
+
+ mkdirrec(todir)
+
+ Dir.chdir(from)
+ Dir.new(".").each do |e|
+ Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e)
+ end
+ Dir.chdir(pdir)
+ else
+ todir = File.dirname(File.expand_path(to))
+
+ mkdirrec(todir)
+
+ File.copy(from, to)
+ end
+ end
+
+ def self.move(from, to)
+ Dir.copy(from, to)
+ Dir.rm_rf(from)
+ end
+
+ def self.rm_rf(entry)
+ if File.ftype(entry) == "directory"
+ pdir = Dir.pwd
+
+ Dir.chdir(entry)
+ Dir.new(".").each do |e|
+ Dir.rm_rf(e) if not [".", ".."].include?(e)
+ end
+ Dir.chdir(pdir)
+
+ Dir.delete(entry)
+ else
+ File.delete(entry)
+ end
+ end
+
+ def self.find(entry=nil, mask=nil)
+ entry = @dir if entry.nil?
+
+ entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
+
+ res = []
+
+ if File.directory?(entry)
+ pdir = Dir.pwd
+
+ res += ["%s/" % entry] if mask.nil? or entry =~ mask
+
+ Dir.chdir(entry)
+ Dir.new(".").each do |e|
+ res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e)
+ end
+ Dir.chdir(pdir)
+ else
+ res += [entry] if mask.nil? or entry =~ mask
+ end
+
+ res
+ end
+end
+
+class File
+ def self.rollbackup(file, mode=nil)
+ backupfile = file + ".RB.BACKUP"
+ controlfile = file + ".RB.CONTROL"
+
+ File.touch(file) unless File.file?(file)
+
+ # Rollback
+
+ if File.file?(backupfile) and File.file?(controlfile)
+ $stdout.puts "Restoring #{file}..."
+
+ File.copy(backupfile, file) # Rollback from phase 3
+ end
+
+ # Reset
+
+ File.delete(backupfile) if File.file?(backupfile) # Reset from phase 2 or 3
+ File.delete(controlfile) if File.file?(controlfile) # Reset from phase 3 or 4
+
+ # Backup
+
+ File.copy(file, backupfile) # Enter phase 2
+ File.touch(controlfile) # Enter phase 3
+
+ # The real thing
+
+ if block_given?
+ if mode.nil?
+ yield
+ else
+ File.open(file, mode) do |f|
+ yield(f)
+ end
+ end
+ end
+
+ # Cleanup
+
+ File.delete(backupfile) # Enter phase 4
+ File.delete(controlfile) # Enter phase 5
+
+ # Return, like File.open
+
+ if block_given?
+ return nil
+ else
+ return File.open(file, (mode or "r"))
+ end
+ end
+
+ def self.touch(file)
+ File.open(file, "a"){|f|}
+ end
+
+ def self.which(file)
+ res = nil
+
+ if windows?
+ file = file.gsub(/\.exe$/i, "") + ".exe"
+ sep = ";"
+ else
+ sep = ":"
+ end
+
+ catch :stop do
+ ENV["PATH"].split(/#{sep}/).reverse.each do |d|
+ if File.directory?(d)
+ Dir.new(d).each do |e|
+ if e.downcase == file.downcase
+ res = File.expand_path(e, d)
+ throw :stop
+ end
+ end
+ end
+ end
+ end
+
+ res
+ end
+end
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -1,4 +1,5 @@
require "ev/ruby"
+require "ev/ftools"
#alias old_timeout :timeout
require "net/http"
#alias timeout :old_timeout
@@ -26,16 +27,68 @@
end
class TCPServer
- def self.freeport(from, to)
+ def self.freeport(from, to, remote=false)
+ if windows?
+ TCPServer.freeport_windows(from, to, remote)
+ else
+ TCPServer.freeport_linux(from, to, remote)
+ end
+ end
+
+ def self.freeport_linux(from, to, remote)
+ ports = (from..to).to_a
+ port = nil
+ res = nil
+
+ while res.nil? and not ports.empty?
+ begin
+ port = ports[0]
+ ports.delete(port)
+
+ io = TCPServer.new(remote ? "0.0.0.0" : "localhost", port)
+
+ res = [port, io]
+ rescue
+ end
+ end
+
+ res = [nil, nil] if res.nil?
+
+ port, io = res
+
+ return port, io
+ end
+
+ def self.freeport_windows(from, to, remote)
+ ports = (from..to).to_a
+ port = nil
+ res = nil
+
+ while res.nil? and not ports.empty?
+ begin
+ port = ports.any
+ ports.delete(port)
+
+ io = TCPSocket.new("localhost", port)
+ io.close
+ rescue
+ res = port
+ end
+ end
+
+ port, io = res
+
+ return port, io
+ end
+
+ def self.freeport_windows2(from, to, remote)
res = nil
port = from
while res.nil? and port <= to
begin
- #evtimeout(0.1) do
- io = TCPSocket.new("localhost", port)
- io.close
- #end
+ io = TCPSocket.new("localhost", port)
+ io.close
port += 1
rescue
@@ -134,7 +187,7 @@
vars = nil if @vars.empty?
anchor = nil if @anchor.empty?
- res = URI::HTTP.new(@protocol, @userpass, @host, port, nil, @path, nil, vars, @anchor).to_s
+ res = URI::HTTP.new(@protocol, @userpass, @host, port, nil, @path, nil, vars, @anchor).to_s.from_html
res.gsub!(/@/, "") if (@userpass.nil? or @userpass.empty?)
@@ -181,6 +234,8 @@
@protocol, @code, @text = firstline.split(/ */, 3)
+ @code = @code.to_i
+
if not rest.nil?
rest.split(/\r*\n/).each do |line|
key, value = line.split(/ /, 2)
@@ -274,11 +329,11 @@
end
def self.get(uri, form={})
- res = Array.new
+ post = Array.new
form.each_pair do |var, value|
- res << "#{var.to_html}=#{value.to_html}"
+ post << "#{var.to_html}=#{value.to_html}"
end
- post = res.join("?")
+ post = post.join("?")
data = nil
@@ -296,10 +351,17 @@
end
if post.empty?
- io.write("GET #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\n\r\n")
+ io.write "GET %s%s HTTP/1.0\r\n" % [(uri.path or ´/´), (uri.varstring.empty? ? ´´ : ´?´ + uri.varstring)]
+ io.write "Host: %s\r\n" % host
+ io.write "\r\n"
else
- io.write("POST #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: #{post.length}\r\n\r\n")
- io.write(post)
+ io.write "POST %s%s HTTP/1.0\r\n" % [(uri.path or ´/´), (uri.varstring.empty? ? ´´ : ´?´ + uri.varstring)]
+ io.write "Host: %s\r\n" % host
+ io.write "Content-Type: application/x-www-form-urlencoded\r\n"
+ io.write "Content-Length: %s\r\n" % post.length
+ io.write "Pragma: \r\n"
+ io.write "\r\n"
+ io.write post
end
else
proxy = EVURI.new($proxy)
@@ -310,10 +372,19 @@
io = TCPSocket.new(host, port.zero? ? 8080 : port)
if post.empty?
- io.write("GET #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}\r\n\r\n")
+ io.write "GET %s HTTP/1.0\r\n" % uri
+ io.write "Host: %s\r\n" % host
+ io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
+ io.write "\r\n"
else
- io.write("POST #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}Content-Type: application/x-www-form-urlencoded\r\nContent-Length: #{post.length}\r\n\r\n")
- io.write(post)
+ io.write "POST %s HTTP/1.0\r\n" % uri
+ io.write "Host: %s\r\n" % host
+ io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
+ io.write "Content-Type: application/x-www-form-urlencoded\r\n"
+ io.write "Content-Length: %s\r\n" % post.length
+ io.write "Pragma: \r\n"
+ io.write "\r\n"
+ io.write post
end
end
@@ -334,6 +405,8 @@
if header.header["transfer-encoding"] == "chunked"
data = Chunk.new(data).to_s if not data.nil?
end
+
+ data = nil unless header.code == 200
end
rescue
data = nil
@@ -362,7 +435,7 @@
expire = 356*24*60*60
- if FileTest.file?(file) and (Time.new.to_f - File.stat(file).mtime.to_f < expire)
+ if File.file?(file) and (Time.new.to_f - File.stat(file).mtime.to_f < expire)
@@mutex.synchronize do
File.open(file, "rb") {|f| data = f.read}
end
@@ -418,6 +491,10 @@
def to_s
"#{@method} #{@uri} #{@protocol}\r\n"
end
+
+ def inspect
+ "(RequestRequest: %s)" % [@method, @path, @data, @protocol].join(", ")
+ end
end
class Request < Hash
@@ -435,12 +512,14 @@
@request = RequestRequest.new(firstline.strip)
- line = @io.gets.strip
- while not line.empty? do
+ line = @io.gets
+ line = line.strip unless line.nil?
+ while not line.nil? and not line.empty?
key, value = line.split(" ", 2)
self[key.sub(/:$/, "").downcase] = value
- line = @io.gets.strip
+ line = @io.gets
+ line = line.strip unless line.nil?
end
cookie = self["cookie"]
@@ -452,12 +531,12 @@
end
if not @request.method.nil?
- case @request.method
+ case @request.method.upcase
when "HEAD"
when "GET"
@vars = RequestGet.new(@request.data.nil? ? "" : @request.data)
when "POST"
- data = @io.read(self["content-length"].to_i)
+ data = (@io.read(self["content-length"].to_i) or "")
@vars = RequestPost.new((self["content-type"] == "application/x-www-form-urlencoded") ? data : "")
else
puts "Unknown request (´#{firstline}´)."
@@ -476,14 +555,20 @@
end
res
end
+
+ def inspect
+ "(Request: %s)" % [@peeraddr, @request.inspect, @vars.inspect, @cookies.inspect, super].join(", ")
+ end
end
class Response < Hash
attr_writer :response
+ attr_reader :cookies
def initialize(io)
@io = io
@response = "HTTP/1.0 200 OK"
+ @cookies = {}
@data = ""
end
@@ -497,23 +582,36 @@
self.each do |k, v|
res << "#{k}: #{v}\r\n"
end
+
+ @cookies.each do |k, v|
+ res << "Set-Cookie: %s=%s;\r\n" % [k, v]
+ end
+
res
end
def << (s)
@data << s
end
+
+ def inspect
+ "(Response: %s)" % [@response, @data].join(", ")
+ end
end
class HTTPServer
@@times = {}
- def self.serve(port=80, remote=false, auth=nil, realm="ev/net")
+ def self.serve(portio=80, remote=false, auth=nil, realm="ev/net")
+ port, server = portio
+
begin
- server = TCPServer.new(remote ? "0.0.0.0" : "localhost", port)
+ server = TCPServer.new(remote ? "0.0.0.0" : "localhost", port) if server.nil?
+
puts "Just point your browser to http://localhost:#{port}/ ..."
rescue
server = nil
+
puts "Port #{port} is in use."
end
@@ -562,7 +660,7 @@
if auth.kind_of? String
file = "#{home}/#{auth}"
auths = {}
- auths = Hash.file(file) if FileTest.file?(file)
+ auths = Hash.file(file) if File.file?(file)
else
auths = auth
end
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -1,7 +1,26 @@
require "cgi"
require "rbconfig"
-Thread.abort_on_exception = true
+#tekens = ´\w\~\@\#\$\%\^\&\*\-\+´
+tekens = ´^\s\r\n\`\!\(\)\[\]\{\}\<\>\,\.\/\?\\\|\=\;\:\"´
+
+#tekens11 = ´\w´
+tekens11 = tekens + "´"
+
+tekens21 = tekens + "´"
+tekens22 = tekens
+tekens23 = tekens + "´"
+
+tekens31 = ´\w\s\r\n´
+
+RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord)
+RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2)
+RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText)
+RegExpStringFile = ´(\w[\w\.\-]*)´ ; RegExpFile = Regexp.new(RegExpStringFile)
+RegExpStringEmail = ´([\w\-\.]+@[\w\-\.]+)´ ; RegExpEmail = Regexp.new(RegExpStringEmail)
+RegExpStringURL = ´(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)´ ; RegExpURL = Regexp.new(RegExpStringURL)
+RegExpStringPrint = ´([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\´\"\,\.\/\<\>\?\\\|]+)´ ; RegExpPrint = Regexp.new(RegExpStringPrint)
+RegExpStringDiff = ´(^[\-\+]([^\-\+].*)?)´ ; RegExpDiff = Regexp.new(RegExpStringDiff)
module Enumerable
def deep_dup
@@ -13,6 +32,16 @@
end
end
+class Thread
+ def self.background(*args)
+ new(*args) do |*args|
+ Thread.pass
+
+ yield(*args)
+ end
+ end
+end
+
class Object
alias deep_dup :dup
alias deep_clone :clone
@@ -20,6 +49,10 @@
def to_fs
to_s
end
+
+ def ids
+ id
+ end
end
class Numeric
@@ -28,6 +61,21 @@
end
end
+class Integer
+ def oct
+ n = self
+ res = []
+
+ while n > 8
+ n, x = n.divmod(8)
+ res << x
+ end
+ res << n
+
+ res.reverse.join("")
+ end
+end
+
class String
def chomp!(dummy=nil)
self.gsub!(/[\r\n]*\z/, "")
@@ -65,6 +113,13 @@
self.gsub(/[[:blank:]]+/, " ")
end
+ def compressperline
+ res = self.split(/\n/)
+ res.collect!{|line| line.compress}
+ res.delete_if{|line| line.empty?}
+ res.join("\n")
+ end
+
def numeric?
d, a, n = [self].to_par
@@ -75,7 +130,7 @@
res = []
IO.popen(self, "w+") do |f|
- f.puts input if not input.nil?
+ f.puts input unless input.nil?
f.close_write
res = f.readlines if output
@@ -100,8 +155,8 @@
enddelimiters = []
delimiters.each do |k, v|
- begindelimiters << k
- enddelimiters << v
+ begindelimiters << k.downcase
+ enddelimiters << v.downcase
end
bd = begindelimiters.collect {|s| Regexp.escape(s)}
@@ -113,36 +168,45 @@
res = []
type = 0
tmp = ""
+ bs = ""
es = ""
- self.split(/(#{be}|#{ee})/).each do |s|
+ self.split(/(#{ee}|#{be})/i).each do |s|
if type == 0
- if begindelimiters.include?(s)
- type = begindelimiters.index(s)+1
+ if begindelimiters.include?(s.downcase)
+ i = begindelimiters.index(s.downcase)
+ type = i+1
tmp = s
- es = enddelimiters[begindelimiters.index(s)]
+ bs = s.downcase
+ es = enddelimiters[i]
else
- res << [0, s] if not s.empty?
+ res << [0, s] unless s.empty?
end
else
- if s == es
+ if s.downcase == es
res << [type, tmp + s]
type = 0
tmp = ""
+ bs = ""
es = ""
else
- tmp = tmp + s
+ if s.downcase == bs
+ res << [0, tmp]
+ tmp = s
+ else
+ tmp = tmp + s
+ end
end
end
end
- res << [0, tmp] if not tmp.empty?
+ res << [0, tmp] unless tmp.empty?
return res
end
def splitwords(tokens=[])
- tokens = [tokens] if not tokens.kind_of?(Array)
+ tokens = [tokens] unless tokens.kind_of?(Array)
res = []
self.splitblocks(["´", "´"], [´"´, ´"´]).each do |type, s|
@@ -167,10 +231,10 @@
def uncomment
res = []
- self.splitblocks(["´", "´"], [´"´, ´"´], ["/*", "*/"], ["<!--", "-->"], ["#", "\n"]).each do |type, s|
+ self.splitblocks(["´", "´"], [´"´, ´"´], ["#", "\n"]).each do |type, s|
case type
when 0, 1, 2 then res << s
- when 3, 4, 5
+ when 3
end
end
@@ -313,10 +377,12 @@
end
def subset(fields, values, results, exact=true, emptyline=nil, joinwith=nil)
- fields = [fields] if not fields.kind_of? Array
- values = [values] if not values.kind_of? Array
- results = [results] if not results.kind_of? Array
- res = []
+ fields = [fields] unless fields.kind_of? Array
+ values = [values] unless values.kind_of? Array
+ results = [results] unless results.kind_of? Array
+ emptyline = emptyline.downcase unless emptyline.nil?
+ res = self.dup
+ res.delete_if {true}
self.each do |l|
ok = true
@@ -331,25 +397,33 @@
correction = 0
end
- 0.upto(c.length-1) do |n|
- if fields.include?(n+correction)
- v = values[fields.index(n+correction)]
- if not emptyline.nil? and not v.downcase == emptyline.downcase
+ #catch :stop do
+ values2 = values.dup
+ fields.each do |f|
+ v = values2.shift
+ v = v.downcase unless v.nil?
+ if emptyline.nil? or (not v == emptyline)
if exact
- ok = false unless (v.nil? or c[n].downcase == v.downcase)
+ unless (v.nil? or c[f-correction].downcase == v)
+ ok = false
+ #throw :stop
+ end
else
- ok = false unless (v.nil? or c[n].downcase.include?(v.downcase))
+ unless (v.nil? or c[f-correction].downcase.include?(v))
+ ok = false
+ #throw :stop
+ end
end
end
end
- end
+ #end
if ok
res2 = []
results.each do |n|
res2 << c[n-1]
end
- res2 = res2.join(joinwith) if not joinwith.nil?
+ res2 = res2.join(joinwith) unless joinwith.nil?
res << res2
end
end
@@ -405,8 +479,10 @@
def self.file(file)
res = []
- File.new(file).readlines.uncomment.chomp.each do |line|
- res << line
+ File.open(file) do |f|
+ f.readlines.uncomment.chomp.each do |line|
+ res << line
+ end
end
res
@@ -443,10 +519,22 @@
res
end
+ def any
+ if empty?
+ nil
+ else
+ self[rand(self.length)]
+ end
+ end
+
def minmax
min, value, max = self
[min, [value, max].min].max
end
+
+ def ids
+ collect{|e| e.ids}
+ end
end
class Hash
@@ -455,21 +543,21 @@
org = Hash.file(file) if (append and File.file?(file))
self.sort.each do |k, v|
- org[k] = v
+ org[k] = v
end
File.open(file, "w") do |f|
org.sort.each do |k, v|
- #f.puts "´%s´=´%s´" % [k, v]
- f.puts "%s = %s" % [k, v]
+ f.puts "%s\t= %s" % [k, v]
end
end
end
def subset(fields, values, results=nil, exact=true, emptyline=nil, joinwith=nil)
- fields = [fields] if not fields.kind_of? Array
- values = [values] if not values.kind_of? Array
- results = [results] if not results.kind_of? Array
+ fields = [fields] unless fields.kind_of? Array
+ values = [values] unless values.kind_of? Array
+ results = [results] unless results.kind_of? Array
+ emptyline = emptyline.downcase unless emptyline.nil?
res = self.dup
res.delete_if {true}
@@ -486,18 +574,26 @@
correction = 0
end
- 0.upto(c.length-1) do |n|
- if fields.include?(n+correction)
- v = values[fields.index(n+correction)]
- if emptyline.nil? or (not emptyline.nil? and not v.downcase == emptyline.downcase)
+ #catch :stop do
+ values2 = values.dup
+ fields.each do |f|
+ v = values2.shift
+ v = v.downcase unless v.nil?
+ if emptyline.nil? or (not v == emptyline)
if exact
- ok = false unless (v.nil? or c[n].downcase == v.downcase)
+ unless (v.nil? or c[f-correction].downcase == v)
+ ok = false
+ #throw :stop
+ end
else
- ok = false unless (v.nil? or c[n].downcase.include?(v.downcase))
+ unless (v.nil? or c[f-correction].downcase.include?(v))
+ ok = false
+ #throw :stop
+ end
end
end
end
- end
+ #end
if ok
res2 = []
@@ -508,7 +604,7 @@
res2 << c[n-correction]
end
end
- res2 = res2.join(joinwith) if not joinwith.nil?
+ res2 = res2.join(joinwith) unless joinwith.nil?
res[k] = res2
end
end
@@ -523,37 +619,23 @@
def self.file(file)
res = {}
- File.new(file).readlines.chomp.each do |line|
- if not line.compress.empty?
- k, v = line.split(/\s*=\s*/, 2)
- res[k] = v
- end
- end
-# File.new(file).readlines.uncomment.chomp.each do |line|
-# if not line.compress.empty?
-# a = line.splitwords("=")
-#
-# if a.size == 3 and a[1] == "="
-# res[a[0]] = a[2]
-# else
-# puts "Error in #{file} (not ´var=\"value\"´)."
-# end
-# end
-# end
+ File.open(file) do |f|
+ #f.readlines.chomp.each do |line|
+ while line = f.gets do
+ line.chomp!
+
+ unless line.empty?
+ k, v = line.split(/\s+=\s+/, 2)
+ res[k] = v
+ end
+ end
+ end
res
end
-end
-
-class Dir
- def Dir.mkdirrec(dir)
- pdir = File.dirname(dir)
- if not pdir.empty? and not FileTest.directory?(pdir)
- mkdirrec (pdir)
- end
-
- Dir.mkdir(dir) rescue nil
+ def ids
+ collect{|k, v| [k, v].ids}
end
end
@@ -561,33 +643,33 @@
ObjectSpace._id2ref(id)
end
-def after(seconds)
+def after(seconds, *args)
if not seconds.nil? and not seconds.zero?
- Thread.new do
+ Thread.new(*args) do |*args|
sleep seconds
- yield
+ yield(*args)
end
end
end
-def every(seconds)
+def every(seconds, *args)
if not seconds.nil? and not seconds.zero?
- Thread.new do
+ Thread.new(*args) do |*args|
loop do
sleep seconds
- yield
+ yield(*args)
end
end
end
end
-def evtimeout(seconds)
+def evtimeout(seconds, *args)
if not seconds.nil? and not seconds.zero?
t = Thread.current
threads = []
res = nil
- threads[1] = Thread.new do
+ threads[1] = Thread.new(*args) do |*args|
sleep seconds
begin
threads[2].kill
@@ -597,8 +679,8 @@
t.wakeup
end
- threads[2] = Thread.new do
- yield
+ threads[2] = Thread.new(*args) do |*args|
+ yield(*args)
begin
threads[1].kill
rescue NameError
@@ -612,16 +694,16 @@
return res
else
- yield
+ yield(*args)
end
end
-def evtimeoutretry(seconds)
+def evtimeoutretry(seconds, *args)
ok = false
while not ok
- evtimeout(seconds) do
- yield
+ evtimeout(seconds, *args) do |*args|
+ yield(*args)
ok = true
end
end
@@ -634,7 +716,7 @@
# Seems pointless, but it´s for catching ^C under Windows...
- every(1) {}
+ every(1) {} if windows?
end
def linux?
@@ -664,3 +746,43 @@
def temp
(ENV["TEMP"] or "/tmp").gsub(/\\/, "/")
end
+
+def stdtmp
+ $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") unless ARGV.include?("--rwd-exit")
+end
+
+def bm(label="")
+ if $bm.nil?
+ require "ev/bm"
+
+ $bm = {}
+
+ at_exit do
+ format1 = "%10s %10s %10s %10s %10s %10s %10s"
+ format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d"
+
+ $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"]
+ $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v|
+ $stderr.puts format2 % [k, *v]
+ end
+ end
+ end
+
+ label = label.to_s
+ res = nil
+
+ $bm[label] = [0.0]*5 + [0] unless $bm.include?(label)
+
+ if block_given?
+ bm = Benchmark.measure{res = yield}
+ bma = bm.to_a # [dummy label, user CPU time, system CPU time, childrens user CPU time, childrens system CPU time, elapsed real time]
+
+ 0.upto(4) do |n|
+ $bm[label][n] += bma[n+1]
+ end
+ end
+
+ $bm[label][5] += 1
+
+ res
+end
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -8,7 +8,7 @@
require "win32ole"
require "win32/registry"
rescue LoadError
- $".push "win32ole.rb"
+ $".push "win32ole.so"
$".push "win32/registry.rb"
end
@@ -16,12 +16,17 @@
$rwd_debug = ($rwd_debug or false)
$rwd_border = ($rwd_border or 0)
+ARGV.delete_if do |arg|
+ arg =~ /^--rwd-/
+end
+
+
RWDEmptyline = "..."
rcfile = nil
-s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
-s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
-s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and FileTest.file?(s))
+s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
+s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
+s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
AL = "align=´left´"
AC = "align=´center´"
@@ -41,9 +46,19 @@
unless ENV.include?("RWDBROWSER")
begin
puts "Looking for default browser..."
- Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´) do |reg|
- ENV["RWDBROWSER"] = reg[""]
+
+ filetype = nil
+ application = nil
+
+ Win32::Registry::HKEY_CLASSES_ROOT.open(´.html´) do |reg|
+ filetype = reg[""]
end
+
+ Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + ´\shell\open\command´) do |reg|
+ application = reg[""]
+ end
+
+ ENV["RWDBROWSER"] = application
rescue NameError
puts "Not found."
end
@@ -234,7 +249,7 @@
end
class OpenTag
- def prechildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
+ def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
bef = before[-1]
res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
res.concat bef if not bef.nil?
@@ -247,9 +262,13 @@
valign = VA
valign = "valign=´#{@args["valign"]}´" if @args.include?("valign")
- value = ""
- value = vars[@args["name"]] if vars.include?(@args["name"])
- value = @args["value"] if @args.include?("value")
+ value1 = ""
+ value1 = varshtml[@args["name"]] if varshtml.include?(@args["name"])
+ value1 = @args["value"] if @args.include?("value")
+
+ value2 = ""
+ value2 = varsstring[@args["name"]] if varsstring.include?(@args["name"])
+ value2 = @args["value"] if @args.include?("value")
case @subtype
when "application"
@@ -260,7 +279,7 @@
res.concat(template($rwd_html1, args))
when "p" then res.concat "<p #{align}>"
- when "pre" then res.concat "<pre>"
+ when "pre" then res.concat "<pre #{align}>"
when "big" then res.concat "<p #{align}><big>"
when "small" then res.concat "<p #{align}><small>"
when "list" then res.concat "<ul #{align}>"
@@ -281,22 +300,22 @@
when "horizontal" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´><tr #{align} #{valign}>"
when "table" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
when "row" then res.concat "<tr #{align} #{valign}>"
- when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´hidden´>"
+ when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´hidden´>"
when "text"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´text´ #{maxlength}>"
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength}>"
oneormorefields << "true"
when "textarea"
- res.concat "<p #{align}><textarea name=´#{@args["name"]}´>#{value}</textarea>"
+ res.concat "<p #{align}><textarea name=´#{@args["name"]}´ rows=´25´ cols=´80´>#{value2.crlf}</textarea>"
oneormorefields << "true"
when "password"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´password´ #{maxlength}>"
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´password´ #{maxlength}>"
oneormorefields << "true"
when "checkbox"
- if vars[@args["name"]] == "on"
+ if varshtml[@args["name"]] == "on"
switches[@args["name"]] = true
res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ type=´checkbox´>"
else
@@ -305,16 +324,16 @@
end
oneormorefields << "true"
when "radio"
- if vars[@args["name"]] == value
- res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value}´ type=´radio´>"
+ if varshtml[@args["name"]] == value1 # ??? 1 of 2?
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value1}´ type=´radio´>"
else
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value}´ type=´radio´>"
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´radio´>"
end
oneormorefields << "true"
when "select"
res.concat "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
name = @args["name"]
- $select = vars[name]
+ $select = varshtml[name]
oneormorefields << "true"
when "option"
if $select == @children[0].text
@@ -406,7 +425,7 @@
after.push(aft)
end
- def postchildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
+ def postchildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
case @subtype
when "vertical", "window", "helpwindow", "tabs", "tab"
res.concat Format % ["BefPost", @subtype] if $rwd_debug
@@ -485,7 +504,7 @@
a[k.upcase] = v
end
- a["LOGO"] = "" unless ((not vars["logo"].nil?) and FileTest.file?(vars["logo"]))
+ a["LOGO"] = "" unless ((not vars["logo"].nil?) and File.file?(vars["logo"]))
a["HELPBUTTON"] = (not (vars["nohelpbutton"]))
a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
@@ -493,13 +512,15 @@
a["CLOSEBUTTON"] = (not (vars["noclosebutton"]))
if a.include?("WIDTH")
- a["WIDTH"] = "width=´#{a["WIDTH"]}´"
+ a["WIDTH1"] = "width=´#{a["WIDTH"]}´"
+ a["WIDTH2"] = a["WIDTH"]
else
- a["WIDTH"] = " "
+ a["WIDTH1"] = " "
+ a["WIDTH2"] = "1"
end
html.split(/\r*\n/).each do |line|
- if line =~ /%[A-Z]+%/
+ if line =~ /%[A-Z0-9]+%/
a.each do |k, v|
v = false if (v.kind_of?(String) and v.empty?)
@@ -508,7 +529,7 @@
end
end
- line = "<!-- #{line.scan(/%[A-Z]+%/).join(" ")} -->" if line =~ /%[A-Z]+%/
+ line = "<!-- #{line.scan(/%[A-Z0-9]+%/).join(" ")} -->" if line =~ /%[A-Z0-9]+%/
end
res << line
@@ -519,7 +540,7 @@
end
class Text
- def prechildren(res, before, after, vars, switches, help, oneormorefields, firstaction, tabs, tab)
+ def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
if not @text.scan(/[^ \t\r\n]/).empty?
res.concat Format % ["Text", ""] if $rwd_debug
res.concat "#{@text}"
@@ -557,7 +578,8 @@
end
def render(vars=Hash.new, switches=Hash.new, help=false, tab="")
- vars2 = Hash.new
+ varshtml = Hash.new
+ varsstring = Hash.new
oneormorefields = ""
firstaction = ""
html = ""
@@ -571,7 +593,8 @@
@helprwd.gsub!(/%%#{key}%%/, value.to_s)
@helprwd.gsub!(/%#{key}%/, value.to_s.to_html)
- vars2[key] = value.to_s.to_html
+ varshtml[key] = value.to_s.to_html
+ varsstring[key] = value.to_s
end
end
end
@@ -592,9 +615,9 @@
end
if help
- helpobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, false, oneormorefields, firstaction, tabs, tab)
+ helpobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, false, oneormorefields, firstaction, tabs, tab)
else
- windowobject.parsetree("prechildren", "postchildren", html, [""], [""], vars2, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab)
+ windowobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab)
end
html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not $rwd_debug
@@ -616,13 +639,13 @@
class RWDMessage < RWDWindow
def initialize(msg)
- super("<window title=´RWD Message´ nobackbuttons><vertical><p>#{msg}</p><back/></vertical></window>")
+ super("<window title=´RWD Message´ nobackbuttons noclosebutton><vertical><p>#{msg}</p><back/></vertical></window>")
end
end
class RWDError < RWDWindow
def initialize(msg)
- super("<window title=´RWD Error´ nobackbuttons><vertical><p><b>Error:</b> #{msg}</p><back/></vertical></window>")
+ super("<window title=´RWD Error´ nobackbuttons noclosebutton><vertical><p><b>Error:</b> #{msg}</p><back/></vertical></window>")
end
end
@@ -654,25 +677,29 @@
high = low if high.nil?
low, high = low.to_i, high.to_i
- port = TCPServer.freeport(low, high) if port.nil?
- raise "No free TCP port." if port.nil?
+ io = nil
+
+ port, io = TCPServer.freeport(low, high, (not auth.nil?)) if port.nil?
+ raise "No free TCP port." if port.nil?
+
port = port.to_i
- @rwd_server = RWDServer.new(self, port, auth, realm)
+ @rwd_server = RWDServer.new(self, port, io, auth, realm)
end
- def render(res, path, post, sessionid)
+ def render(res, path, post, download, sessionid)
# Initialize some vars.
vars = Hash.new if vars.nil?
@rwd_switches = Hash.new if @rwd_switches.nil?
- done = false
- help = false
- back = false
- tab = ""
- @rwd_msg = nil
+ done = false
+ help = false
+ back = false
+ tab = ""
+ @rwd_msg = nil
+ @rwd_download = nil
# Switches are used for checkboxes.
@@ -694,17 +721,26 @@
@rwd_action = vars["rwd_action"]
@rwd_action, @rwd_args = @rwd_action.split(/\//, 2) unless @rwd_action.nil?
+ @rwd_action, rest = @rwd_action.split(/\?/) unless @rwd_action.nil?
+
+ unless rest.nil?
+ rest.each do |s|
+ k, v = s.split(/=/, 2)
+ vars[k] = v
+ end
+ end
if @rwd_action =~ /^rwd_tab_/
@rwd_tab = @rwd_action.sub(/^rwd_tab_/, "")
- @rwd_history[-1][2] = @rwd_tab
+ @rwd_history[-1][3] = @rwd_tab
else
case @rwd_action
when "rwd_back"
@rwd_history.pop
@rwd_action = (@rwd_history[-1] or [nil, nil, nil])[0]
- @rwd_window = (@rwd_history[-1] or [nil, nil, nil])[1]
- @rwd_tab = (@rwd_history[-1] or [nil, nil, nil])[2]
+ @rwd_args = (@rwd_history[-1] or [nil, nil, nil])[1]
+ @rwd_window = (@rwd_history[-1] or [nil, nil, nil])[2]
+ @rwd_tab = (@rwd_history[-1] or [nil, nil, nil])[3]
back = true
when "rwd_help"
help = true
@@ -720,12 +756,13 @@
# History stuff
@rwd_history = @rwd_history[-100..-1] if @rwd_history.length >= 100
- @rwd_args = [] if @rwd_args.nil?
@rwd_action = "main" if @rwd_action.nil?
@rwd_action = "main" if @rwd_action.empty?
@rwd_window = "main" if @rwd_window.nil?
@rwd_window = "main" if @rwd_window.empty?
@rwd_tab = "" if @rwd_tab.nil?
+ @rwd_args = [] if @rwd_args.nil?
+ @rwd_args = [] if @rwd_action == "main"
vars["rwd_action"] = @rwd_action
vars["rwd_window"] = @rwd_window
@@ -740,17 +777,23 @@
# Callback.
if (not back) or @rwd_call_after_back.include?(@rwd_action)
- begin
+ unless @rwd_action =~ /^rwd_/
puts "Method: #{@rwd_action}(#{@rwd_args.join(", ")})" if $rwd_debug
- method(@rwd_action).call(*@rwd_args)
- rescue NameError
+ if methods.include?(@rwd_action)
+ method(@rwd_action).call(*@rwd_args)
+ else
+ puts "Method ´%s´ is not defined." % @rwd_action
+ end
end
# History stuff
- @rwd_history = [["main", "main", nil]] if @rwd_action == "main"
- @rwd_history = [["main", "main", nil]] if @rwd_history.empty?
- @rwd_history.push [@rwd_action, @rwd_window, @rwd_tab] if (@rwd_history[-1] != [@rwd_action, @rwd_window, @rwd_tab] or not @rwd_msg.nil?)
+ @rwd_history = [["main", nil, "main", nil]] if @rwd_action == "main"
+ @rwd_history = [["main", nil, "main", nil]] if @rwd_history.empty?
+
+ a = [@rwd_action, @rwd_args, @rwd_window, @rwd_tab]
+
+ @rwd_history.push a if (@rwd_history[-1] != a or not @rwd_msg.nil?)
end
end
@@ -772,13 +815,20 @@
if done
res << RWDDone.new(@rwd_exitbrowser).render
else
- if not @rwd_msg.nil?
- res << RWDMessage.new(@rwd_msg).render if @rwd_msgtype == "message"
- res << RWDError.new(@rwd_msg).render if @rwd_msgtype == "error"
+ if not @rwd_download.nil?
+ puts "Download: #{@rwd_window}" if $rwd_debug
+
+ download << @rwd_download
else
- puts "Window: #{@rwd_window}" if $rwd_debug
- puts "Tab: #{@rwd_tab}" if $rwd_debug
- res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, @rwd_tab)
+ if not @rwd_msg.nil?
+ res << RWDMessage.new(@rwd_msg).render if @rwd_msgtype == "message"
+ res << RWDError.new(@rwd_msg).render if @rwd_msgtype == "error"
+ else
+ puts "Window: #{@rwd_window}" if $rwd_debug
+ puts "Tab: #{@rwd_tab}" if $rwd_debug
+
+ res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, @rwd_tab)
+ end
end
end
@@ -786,7 +836,7 @@
end
def samewindow?
- @rwd_history[-1][1] == @rwd_window
+ @rwd_history[-1][2] == @rwd_window
end
def message(msg)
@@ -799,6 +849,10 @@
@rwd_msgtype = "error"
end
+ def download(data)
+ @rwd_download = data
+ end
+
def exitbrowser
@rwd_exitbrowser = true
end
@@ -835,6 +889,7 @@
@rack = rack.to_s
@cleanup = SessionCleanup.new(self, 3600, 24*3600) if cleanup
@sessions = {}
+
#@store = PStore.new("#{temp}/store.#{@rack}.#{user}") # ???
#@store.transaction do
@@ -864,6 +919,10 @@
def delete_if(&block)
@sessions.delete_if{|k, v| block.call(k, v)}
end
+
+ def include?(sessionid)
+ @sessions.include?(sessionid)
+ end
end
class Session < Hash
@@ -884,8 +943,8 @@
end
class RWDSession < Session
- def render(res, path, post)
- done = self["object"].render(res, path, post, @sessionid)
+ def render(res, path, post, download)
+ done = self["object"].render(res, path, post, download, @sessionid)
if done
res.gsub!(/\$RWD_SESSION\$/, "")
@@ -898,7 +957,7 @@
end
class RWDServer
- def initialize(obj, port, auth, realm)
+ def initialize(obj, port, io, auth, realm)
@object = obj
@localbrowsing = false
@browserstarted = false
@@ -936,18 +995,22 @@
# Start server.
catch :rwd_exit do
- HTTPServer.serve(port, (not auth.nil?)) do |req, resp|
+ portio = port
+ portio = [port, io] unless io.nil?
+ HTTPServer.serve(portio, (not auth.nil?)) do |req, resp|
vars = req.vars.dup
+ pad = req.request.path
if auth.kind_of? String
file = "#{home}/#{auth}"
auths = {}
- auths = Hash.file(file) if FileTest.file?(file)
+ auths = Hash.file(file) if File.file?(file)
else
auths = auth
end
- oldsessionid = vars["rwd_session"]
+ #oldsessionid = vars["rwd_session"]
+ oldsessionid = req.cookies["sessionid"]
# Retrieve session.
@@ -957,15 +1020,18 @@
if session.nil?
if auth.nil?
- session = RWDSession.new(MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ sessionid = MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s
+ session = RWDSession.new(sessionid)
session["object"] = @object
else
- session = RWDSession.new(MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s)
+ sessionid = nil
+ sessionid = MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s while (sessionid.nil? or @sessions.include?(sessionid))
+ session = RWDSession.new(sessionid)
session["object"] = @object.clone
end
if oldsessionid.nil? or oldsessionid.empty?
- if not auth.nil? and not auth.empty? and not session.authenticated
+ if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/pixel.gif"
# Check authentication
@@ -975,6 +1041,7 @@
if us.nil? or pa.nil? or auths[us] != pa
session = RWDSession.new
session["object"] = RWDLogin.new(realm)
+ pad = "/"
else
session.authenticated = true
@sessions[session.sessionid] = session
@@ -994,20 +1061,33 @@
session.touch
- if req.request.path == "/"
+ if pad == "/"
# Serve methods/callbacks.
# Build new page.
- res = ""
+ download = ""
+ res = ""
- done = session.render(res, req.request.path, vars)
+ done = session.render(res, pad, vars, download)
begin
- resp["Content-Type"] = "text/html"
+ if download.empty?
+ resp["Content-Type"] = "text/html"
+ if done
+ resp.cookies["sessionid"] = ""
+ else
+ resp.cookies["sessionid"] = session.sessionid
+ end
+
+ resp << res
+ else
+ resp["Content-Type"] = "application/octet-stream"
+ resp["Content-Disposition"] = "attachment; filename=data"
- resp << res
+ resp << download
+ end
rescue
puts "Sending response to browser failed."
@@ -1036,13 +1116,13 @@
# Serve files.
- if req.request.path == "/pixel.gif"
+ if pad == "/pixel.gif"
resp["Cache-Control"] = "max-age=86400"
resp["Content-Type"] = "image/gif"
resp << $rwd_pixel
else
- if (FileTest.file?(req.request.path.sub(/^\/*/, "")))
- resp << File.new(req.request.path.sub(/^\/*/, ""), "rb").read rescue nil
+ if (File.file?(pad.sub(/^\/*/, "")))
+ resp << File.new(pad.sub(/^\/*/, ""), "rb").read rescue nil
else
resp.response = "HTTP/1.0 404 NOT FOUND"
end
@@ -1199,7 +1279,7 @@
<td align=´center´>
- <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ %WIDTH%>
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ %WIDTH1%>
<tr align=´center´>
<td align=´center´ bgcolor=´#444488´>
@@ -1223,7 +1303,7 @@
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
</tr>
<tr align=´center´>
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/sgml.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -25,11 +25,11 @@
end
def prechildren_to_s(res)
- res << "#{@text}"
+ res << "#{CGI.unescapeHTML(@text)} "
end
def prechildren_to_sgml(res)
- res << "#{@text}"
+ res << "#{CGI.unescapeHTML(@text)}"
end
end
@@ -73,6 +73,7 @@
def initialize(subtype, args={})
super(subtype)
@args = args
+ @text = ""
end
end
@@ -97,7 +98,7 @@
end
end
- res << "<#{a.join(" ")}>"
+ res << "<#{a.join(" ")}>" + @text
end
def postchildren_to_sgml(res)
@@ -122,84 +123,52 @@
def buildobjects(string)
@objects = []
- string.splitblocks(["<!--", "-->"], ["<!", ">"], ["<?", "?>"], ["<", ">"]).each do |type, s|
- case type
- when 0 then @objects << Text.new(s)
- when 1 then @objects << Comment.new(s)
- when 2 then @objects << Special.new(s)
- when 3 then @objects << Instruction.new(s)
- when 4
-
- tag, args, open, close = verwerktag1(s)
-
- @objects << OpenTag.new(tag.dup, args.dup) if open
- @objects << CloseTag.new(tag.dup, args.dup) if close
- end
- end
- end
-
- def verwerktag1(string)
- res = nil
-
- if @tagcache.include? string
- res = @tagcache[string]
-
- else
- res = verwerktag2(string)
-
- @tagcache[string] = res
- end
-
- return res
- end
-
- def verwerktag2(string)
- a = []
-
- string.splitblocks(["´", "´"], [´"´, ´"´]).collect do |type, s|
- case type
- when 0
- if self.class.to_s == "HTML"
- s.splitwords(["<", ">"]).each do |w|
- d = w.split("=", 2)
-
- if d.length == 1
- a << d[0]
- else
- a << d[0] if not d[0].nil? and not d[0].empty?
- a << "="
- a << d[1] if not d[1].nil? and not d[1].empty?
+ verwerk3 =
+ lambda do |string|
+ a = []
+
+ string[1..-2].splitblocks(["´", "´"], [´"´, ´"´]).collect do |type, s|
+ case type
+ when 0
+ if self.class.to_s == "HTML"
+ s.splitwords.each do |w|
+ d = w.split("=", 2)
+
+ if d.length == 1
+ a << d[0]
+ else
+ a << d[0] if not d[0].nil? and not d[0].empty?
+ a << "="
+ a << d[1] if not d[1].nil? and not d[1].empty?
+ end
end
+ else
+ a.concat s.splitwords(["/", "="])
end
- else
- a.concat s.splitwords(["<", "/", "=", ">"])
+ when 1, 2 then a << s
end
- when 1, 2 then a << s
end
- end
-
- a = a[1..-2]
- open = false
- close = false
-
- if not a.nil?
+
+ open = false
+ close = false
+
a = a[0].splitwords("/") + a[1..-1]
-
+
if a[0] == "/"
close = true
a.shift
else
open = true
end
-
+
if a[-1] == "/"
close = true
a.pop
end
-
+
tag = a.shift.downcase
args = {}
-
+
while not a.length.zero?
if a.length >= 3 and a[1] == "="
key = a.shift.downcase
@@ -211,9 +180,40 @@
args[key] = ""
end
end
+
+ [tag, args, open, close]
+ end
+
+ verwerk2 =
+ lambda do |string|
+ if @tagcache.include? string
+ res = @tagcache[string]
+ else
+ res = verwerk3.call(string)
+
+ @tagcache[string] = res
+ end
+
+ res
+ end
+
+ verwerk1 =
+ lambda do |string|
+ tag, args, open, close = verwerk2.call(string)
+
+ @objects << OpenTag.new(tag.dup, args.dup) if open
+ @objects << CloseTag.new(tag.dup, args.dup) if close
end
- return [tag, args, open, close]
+ string.splitblocks(["<!--", "-->"], ["<!", ">"], ["<?", "?>"], ["<", ">"]).each do |type, s|
+ case type
+ when 0 then @objects << Text.new(s)
+ when 1 then @objects << Comment.new(s)
+ when 2 then @objects << Special.new(s)
+ when 3 then @objects << Instruction.new(s)
+ when 4 then verwerk1.call(s)
+ end
+ end
end
def to_s
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/tree.lib.rb
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-05-15 11:16:23.000000000 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-08-21 10:56:03.000000000 +0200
@@ -157,7 +157,7 @@
Dir.mkdirrec(dir)
- if FileTest.file?(file)
+ if File.file?(file)
@@mutex.synchronize do
tree = Marshal.restore(File.new(file, "rb"))
end
@@ -249,68 +249,93 @@
end
end
- def parse(types=[], subtypes=[])
+ def parse(types=[], subtypes=[], once=false)
types = [types] if types.class == Class
subtypes = [subtypes] if subtypes.class == String
hidelevel = nil
- @objects.each do |obj|
- hidelevel = obj.level if (@checkvisibility and hidelevel.nil? and (not obj.visible))
- hidelevel = nil if (@checkvisibility and (not hidelevel.nil?) and obj.visible and obj.level <= hidelevel)
-
- if hidelevel.nil?
- ok = false
- if types.empty?
- if subtypes.empty?
- ok = true
- else
- subtypes.each do |st|
- ok = true if obj.subtype == st
- end
- end
+ catch :once do
+ @objects.each do |obj|
+ if (@checkvisibility and hidelevel.nil? and (not obj.visible))
+ hidelevel = obj.level
else
- if subtypes.empty?
- types.each do |t|
- ok = true if obj.kind_of?(t)
- end
- else
- types.each do |t|
- subtypes.each do |st|
- ok = true if obj.kind_of?(t) if obj.subtype == st
+ if (@checkvisibility and (not hidelevel.nil?) and obj.visible and obj.level <= hidelevel)
+ hidelevel = nil
+ end
+ end
+
+ if hidelevel.nil?
+ ok = false
+ catch :stop do
+ if types.empty?
+ if subtypes.empty?
+ ok = true
+ throw :stop
+ else
+ subtypes.each do |st|
+ if obj.subtype == st
+ ok = true
+ throw :stop
+ end
+ end
+ end
+ else
+ if subtypes.empty?
+ types.each do |t|
+ if obj.kind_of?(t)
+ ok = true
+ throw :stop
+ end
+ end
+ else
+ types.each do |t|
+ subtypes.each do |st|
+ if obj.kind_of?(t) and obj.subtype == st
+ ok = true
+ throw :stop
+ end
+ end
+ end
end
end
end
- end
- yield(obj.class.to_s, obj) if ok
+ if ok
+ yield(obj.class.to_s, obj)
+
+ throw :once if once
+ end
+ end
end
end
end
def path(pad)
- p = self
+ p1 = self
pad.split(/\//).each do |deel|
tag, voorkomen = deel.split(/:/)
- if (not tag.nil?) and (not p.nil?)
+ if (not tag.nil?) and (not p1.nil?)
voorkomen = 1 if voorkomen.nil?
voorkomen = voorkomen.to_i
teller = 0
p2 = nil
- p.children.each_index do |i|
- if p.children[i].upordown == Down
- if p.children[i].subtype.noquotes == tag.noquotes
- teller += 1
- p2 = p.children[i] if teller == voorkomen
+ p1.children.each_index do |i|
+ #if p1.children[i].upordown == Down
+ unless p1.children[i].subtype.nil?
+ if p1.children[i].subtype.noquotes == tag.noquotes
+ teller += 1
+ p2 = p1.children[i] if teller == voorkomen
+ end
end
- end
+ #end
end
- p = p2
+ p1 = p2
end
end
- p
+ p1
end
end
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/LICENSE rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/LICENSE
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/LICENSE 2005-06-04 14:41:58.715878296 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/LICENSE 2004-07-26 16:14:10.000000000 +0200
@@ -0,0 +1,15 @@
+# Copyright Erik Veenstra <rubywebdialogs@erikveen.dds.nl>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License,
+# version 2, as published by the Free Software Foundation.
+#
+# 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., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA.
diff -ur rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/README rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/README
--- rubywebdialogs-0.0.9.tar.gz/rubywebdialogs/README 2005-06-04 14:41:58.716878144 +0200
+++ rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/README 2004-07-26 16:16:13.000000000 +0200
@@ -0,0 +1,4 @@
+ Usage: ruby install.rb
+
+For more information, see
+http://www.erikveen.dds.nl/rubywebdialogs/ .
diff -ur rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ftools.lib.rb
--- rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-08-21 10:56:03.000000000 +0200
+++ rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-09-03 12:26:26.000000000 +0200
@@ -58,6 +58,8 @@
entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
+ mask = /^#{mask}$/i if mask.kind_of?(String)
+
res = []
if File.directory?(entry)
@@ -65,11 +67,19 @@
res += ["%s/" % entry] if mask.nil? or entry =~ mask
- Dir.chdir(entry)
- Dir.new(".").each do |e|
- res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e)
+ begin
+ Dir.chdir(entry)
+
+ begin
+ Dir.new(".").each do |e|
+ res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e)
+ end
+ ensure
+ Dir.chdir(pdir)
end
- Dir.chdir(pdir)
+ rescue Errno::EACCES => error
+ puts error
+ end
else
res += [entry] if mask.nil? or entry =~ mask
end
diff -ur rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-08-21 10:56:03.000000000 +0200
+++ rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-09-03 12:26:26.000000000 +0200
@@ -28,7 +28,7 @@
class TCPServer
def self.freeport(from, to, remote=false)
- if windows?
+ if windows? or cygwin?
TCPServer.freeport_windows(from, to, remote)
else
TCPServer.freeport_linux(from, to, remote)
@@ -343,8 +343,8 @@
uri = EVURI.new(uri) if uri.kind_of? String
host = uri.host
port = uri.port
- io = nil
+ io = nil
@@mutex.synchronize do
@@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host)
io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port)
@@ -352,42 +352,33 @@
if post.empty?
io.write "GET %s%s HTTP/1.0\r\n" % [(uri.path or ´/´), (uri.varstring.empty? ? ´´ : ´?´ + uri.varstring)]
- io.write "Host: %s\r\n" % host
- io.write "\r\n"
else
io.write "POST %s%s HTTP/1.0\r\n" % [(uri.path or ´/´), (uri.varstring.empty? ? ´´ : ´?´ + uri.varstring)]
- io.write "Host: %s\r\n" % host
- io.write "Content-Type: application/x-www-form-urlencoded\r\n"
- io.write "Content-Length: %s\r\n" % post.length
- io.write "Pragma: \r\n"
- io.write "\r\n"
- io.write post
end
else
proxy = EVURI.new($proxy)
host = proxy.host
port = proxy.port
- io = nil
io = TCPSocket.new(host, port.zero? ? 8080 : port)
if post.empty?
io.write "GET %s HTTP/1.0\r\n" % uri
- io.write "Host: %s\r\n" % host
- io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
- io.write "\r\n"
else
io.write "POST %s HTTP/1.0\r\n" % uri
- io.write "Host: %s\r\n" % host
- io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
- io.write "Content-Type: application/x-www-form-urlencoded\r\n"
- io.write "Content-Length: %s\r\n" % post.length
- io.write "Pragma: \r\n"
- io.write "\r\n"
- io.write post
end
end
+ io.write "Host: %s\r\n" % host
+ io.write "User-Agent: evwget\r\n"
+ io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
+ #io.write "Accept-Encoding: deflate\r\n"
+ #io.write "Connection: close\r\n"
+ io.write "Content-Type: application/x-www-form-urlencoded\r\n" unless post.empty?
+ io.write "Content-Length: %s\r\n" % post.length unless post.empty?
+ io.write "\r\n"
+ io.write post unless post.empty?
+
io.close_write
res = io.read
@@ -545,9 +536,17 @@
@peeraddr = @io.peeraddr
+ @pda = false
+ @pda = true if (self.include?("user-agent") and self["user-agent"].downcase.include?("windows ce"))
+ @pda = true if (self.include?("user-agent") and self["user-agent"].downcase.include?("handhttp"))
+
@io.close_read
end
+ def pda?
+ @pda
+ end
+
def to_s
res = @request.to_s
self.each do |k, v|
@@ -637,11 +636,11 @@
if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
@@times[com]=Time.new.to_f if not @@times.include?(com)
- #puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request}"
+ #puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request.to_s.strip}"
yield(req, resp)
- puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request}"
+ puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request.to_s.strip}"
@@times.delete(com)
end
diff -ur rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-08-21 10:56:03.000000000 +0200
+++ rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-09-03 12:26:26.000000000 +0200
@@ -2,7 +2,6 @@
require "ev/net"
require "md5"
require "rbconfig"
-require "pstore"
begin
require "win32ole"
@@ -15,6 +14,8 @@
$rwd_exit = ARGV.include?("--rwd-exit") # Hack ???
$rwd_debug = ($rwd_debug or false)
$rwd_border = ($rwd_border or 0)
+$rwd_dir = Dir.pwd
+$rwd_files = File.expand_path("rwd_files", Dir.pwd)
ARGV.delete_if do |arg|
arg =~ /^--rwd-/
@@ -96,7 +97,7 @@
Thread.new do
loop do
- WIN32OLE_EVENT.message_loop
+ WIN32OLE_EVENT.message_loop
end
end
end
@@ -167,11 +168,11 @@
else
s = ""
- s << "<text name=´#{name}´"
- s << " value=´#{values[n].to_html}´" if n < values.length
- s << "/>"
+ s << "<text name=´#{name}´"
+ s << " value=´#{values[n].to_html}´" if n < values.length
+ s << "/>"
- res << s
+ res << s
end
res << "</row>"
@@ -249,7 +250,7 @@
end
class OpenTag
- def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
+ def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
bef = before[-1]
res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
res.concat bef if not bef.nil?
@@ -270,6 +271,9 @@
value2 = varsstring[@args["name"]] if varsstring.include?(@args["name"])
value2 = @args["value"] if @args.include?("value")
+ cellspacing = 3
+ cellspacing = 0 if pda
+
case @subtype
when "application"
when "window", "helpwindow"
@@ -277,7 +281,10 @@
args["nohelpbutton"] = (not help)
- res.concat(template($rwd_html1, args))
+ template = $rwd_html_11
+ template = $rwd_html_21 if pda
+
+ res.concat(template(template, args))
when "p" then res.concat "<p #{align}>"
when "pre" then res.concat "<pre #{align}>"
when "big" then res.concat "<p #{align}><big>"
@@ -296,15 +303,17 @@
else
res.concat "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
end
- when "vertical" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
- when "horizontal" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´><tr #{align} #{valign}>"
- when "table" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "vertical" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
+ when "horizontal" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´><tr #{align} #{valign}>"
+ when "table" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
when "row" then res.concat "<tr #{align} #{valign}>"
when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´hidden´>"
when "text"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength}>"
+ size = ""
+ size = "size=´%s´" % 10 if pda
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength} #{size}>"
oneormorefields << "true"
when "textarea"
res.concat "<p #{align}><textarea name=´#{@args["name"]}´ rows=´25´ cols=´80´>#{value2.crlf}</textarea>"
@@ -312,7 +321,9 @@
when "password"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´password´ #{maxlength}>"
+ size = ""
+ size = "size=´%s´" % 10 if pda
+ res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´password´ #{maxlength} #{size}>"
oneormorefields << "true"
when "checkbox"
if varshtml[@args["name"]] == "on"
@@ -324,7 +335,7 @@
end
oneormorefields << "true"
when "radio"
- if varshtml[@args["name"]] == value1 # ??? 1 of 2?
+ if varshtml[@args["name"]] == value1 # ??? 1 or 2?
res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value1}´ type=´radio´>"
else
res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´radio´>"
@@ -425,7 +436,7 @@
after.push(aft)
end
- def postchildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
+ def postchildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
case @subtype
when "vertical", "window", "helpwindow", "tabs", "tab"
res.concat Format % ["BefPost", @subtype] if $rwd_debug
@@ -445,7 +456,10 @@
args["nohelpbutton"] = (not help)
- res.concat(template($rwd_html2, args))
+ template = $rwd_html_12
+ template = $rwd_html_22 if pda
+
+ res.concat(template(template, args))
when "p" then res.concat "</p>"
when "pre" then res.concat "</pre>"
when "big" then res.concat "</big></p>"
@@ -504,7 +518,11 @@
a[k.upcase] = v
end
- a["LOGO"] = "" unless ((not vars["logo"].nil?) and File.file?(vars["logo"]))
+ logo = nil
+ logo = File.expand_path(vars["logo"], $rwd_files) if vars.include?("logo")
+ logo = nil unless logo.nil? or File.file?(logo)
+
+ a["LOGO"] = "" unless not logo.nil?
a["HELPBUTTON"] = (not (vars["nohelpbutton"]))
a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
@@ -540,7 +558,7 @@
end
class Text
- def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab)
+ def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
if not @text.scan(/[^ \t\r\n]/).empty?
res.concat Format % ["Text", ""] if $rwd_debug
res.concat "#{@text}"
@@ -577,7 +595,7 @@
@helprwd = (@@helpwindows[rwd][window] or "").dup
end
- def render(vars=Hash.new, switches=Hash.new, help=false, tab="")
+ def render(pda, vars=Hash.new, switches=Hash.new, help=false, tab="")
varshtml = Hash.new
varsstring = Hash.new
oneormorefields = ""
@@ -615,9 +633,9 @@
end
if help
- helpobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, false, oneormorefields, firstaction, tabs, tab)
+ helpobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, false, oneormorefields, firstaction, tabs, tab, pda)
else
- windowobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab)
+ windowobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab, pda)
end
html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not $rwd_debug
@@ -687,7 +705,7 @@
@rwd_server = RWDServer.new(self, port, io, auth, realm)
end
- def render(res, path, post, download, sessionid)
+ def render(res, path, post, download, downloadfile, pda, sessionid)
# Initialize some vars.
@@ -700,6 +718,7 @@
tab = ""
@rwd_msg = nil
@rwd_download = nil
+ @rwd_download_file = nil
# Switches are used for checkboxes.
@@ -813,21 +832,22 @@
# Answer to browser.
if done
- res << RWDDone.new(@rwd_exitbrowser).render
+ res << RWDDone.new(@rwd_exitbrowser).render(pda)
else
if not @rwd_download.nil?
puts "Download: #{@rwd_window}" if $rwd_debug
- download << @rwd_download
+ download << @rwd_download
+ downloadfile << @rwd_download_file
else
if not @rwd_msg.nil?
- res << RWDMessage.new(@rwd_msg).render if @rwd_msgtype == "message"
- res << RWDError.new(@rwd_msg).render if @rwd_msgtype == "error"
+ res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message"
+ res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error"
else
puts "Window: #{@rwd_window}" if $rwd_debug
puts "Tab: #{@rwd_tab}" if $rwd_debug
- res << RWDWindow.new(@rwd_xml, @rwd_window).render(vars, @rwd_switches, help, @rwd_tab)
+ res << RWDWindow.new(@rwd_xml, @rwd_window).render(pda, vars, @rwd_switches, help, @rwd_tab)
end
end
end
@@ -849,8 +869,9 @@
@rwd_msgtype = "error"
end
- def download(data)
+ def download(data, filename="")
@rwd_download = data
+ @rwd_download_file = filename
end
def exitbrowser
@@ -889,19 +910,6 @@
@rack = rack.to_s
@cleanup = SessionCleanup.new(self, 3600, 24*3600) if cleanup
@sessions = {}
-
- #@store = PStore.new("#{temp}/store.#{@rack}.#{user}") # ???
-
- #@store.transaction do
- #@store[@rack] = {} if not @store.root?(@rack)
- #@sessions = @store[@rack]
- #end
-
- #at_exit do
- #@store.transaction do
- #@store[@rack] = @sessions
- #end
- #end
end
def [](sessionid)
@@ -943,8 +951,8 @@
end
class RWDSession < Session
- def render(res, path, post, download)
- done = self["object"].render(res, path, post, download, @sessionid)
+ def render(res, path, post, download, downloadfile, pda)
+ done = self["object"].render(res, path, post, download, downloadfile, pda, @sessionid)
if done
res.gsub!(/\$RWD_SESSION\$/, "")
@@ -972,7 +980,8 @@
# Start browser.
- @browserthread = Thread.new do
+ @browserthread =
+ Thread.new do
puts "Starting the browser..."
#if ENV["RWDBROWSER"].downcase =~ /iexplore/ # ???
@@ -1012,11 +1021,11 @@
#oldsessionid = vars["rwd_session"]
oldsessionid = req.cookies["sessionid"]
- # Retrieve session.
+ # Retrieve session.
session = @sessions[oldsessionid]
- # Eventually create new session.
+ # Eventually create new session.
if session.nil?
if auth.nil?
@@ -1033,7 +1042,7 @@
if oldsessionid.nil? or oldsessionid.empty?
if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/pixel.gif"
- # Check authentication
+ # Check authentication
us = vars["rwd_a"]
pa = vars["rwd_b"]
@@ -1047,6 +1056,7 @@
@sessions[session.sessionid] = session
end
else
+ session.authenticated = true
@sessions[session.sessionid] = session
end
else
@@ -1057,20 +1067,21 @@
vars = {}
end
- # Avoid timeout.
+ # Avoid timeout.
session.touch
if pad == "/"
- # Serve methods/callbacks.
+ # Serve methods/callbacks.
- # Build new page.
+ # Build new page.
download = ""
+ downloadfile = ""
res = ""
- done = session.render(res, pad, vars, download)
+ done = session.render(res, pad, vars, download, downloadfile, req.pda?)
begin
if download.empty?
@@ -1084,7 +1095,8 @@
resp << res
else
resp["Content-Type"] = "application/octet-stream"
- resp["Content-Disposition"] = "attachment; filename=data"
+ resp["Content-Disposition"] = "attachment;"
+ resp["Content-Disposition"] = "attachment; filename=%s" % downloadfile unless downloadfile.empty?
resp << download
end
@@ -1094,7 +1106,7 @@
@sessions.delete(session.sessionid)
end
- # Eventually delete this session.
+ # Eventually delete this session.
if done
@sessions.delete(session.sessionid)
@@ -1102,7 +1114,7 @@
if @localbrowsing
resp.flush
- if @browserstarted and @browserthread.alive?
+ if @browserstarted and not @browserthread.nil? and @browserthread.alive?
puts "Waiting for the browser to terminate..."
@browserthread.join
@@ -1114,17 +1126,32 @@
else
- # Serve files.
+ # Serve files.
if pad == "/pixel.gif"
resp["Cache-Control"] = "max-age=86400"
resp["Content-Type"] = "image/gif"
resp << $rwd_pixel
else
- if (File.file?(pad.sub(/^\/*/, "")))
- resp << File.new(pad.sub(/^\/*/, ""), "rb").read rescue nil
+ if session.authenticated
+ pwd = Dir.pwd
+ file = File.expand_path(pad.gsub(/^\/*/, ""), $rwd_files)
+
+ if not file.index(pwd) == 0
+ resp["Content-Type"] = "text/html"
+ resp.response = "HTTP/1.0 400 BAD REQUEST"
+ resp << "<html><body><p><b>Bad Request.</b> (<tt>#{pad}</tt>)</p></body></html>"
+ elsif File.file?(file)
+ resp << File.new(file, "rb").read rescue nil
+ else
+ resp["Content-Type"] = "text/html"
+ resp.response = "HTTP/1.0 404 NOT FOUND"
+ resp << "<html><body><p><b>Not found.</b> (<tt>#{pad}</tt>)</p></body></html>"
+ end
else
- resp.response = "HTTP/1.0 404 NOT FOUND"
+ resp["Content-Type"] = "text/html"
+ resp.response = "HTTP/1.0 ??? NOT AUTHORIZED"
+ resp << "<html><body><p><b>Not Authorized.</b></p></body></html>"
end
end
@@ -1134,7 +1161,7 @@
end
end
-$rwd_html = "
+$rwd_html_1 = "
<!-- Generated by RubyWebDialog. -->
<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
<html>
@@ -1410,6 +1437,78 @@
</html>
"
+$rwd_html_2 = "
+<!-- Generated by RubyWebDialog. -->
+<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
+<html>
+ <head>
+ <title>%TITLE%</title>
+
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+
+ <link rel=´shortcut icon´ href=´%LOGO%´>
+
+ <script type=´text/javascript´>
+ <!--
+ function BodyGo() {
+ $RWD_FOCUS$
+ }
+ //-->
+ </script>
+ </head>
+
+ <body bgcolor=´white´ onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
+ <form name=´bodyform´ action=´/´ method=´post´>
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#444488´>
+
+ <table align=´left´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <td align=´border´><img src=´%LOGO%´ width=´14´ height=´14´></td>
+ <td align=´center´><b><small><font color=´#FFFFFF´> %TITLE% </font></small></b></td>
+ </tr>
+ </table>
+
+ <table align=´right´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <!-- %HELPBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_help\";document.bodyform.submit();´> ? </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_main\";document.bodyform.submit();´> << </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_back\";document.bodyform.submit();´> < </a></small></b></td>
+ <!-- %CLOSEBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_quit\";document.bodyform.submit();´> X </a></small></b></td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ <!--
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#FFFFFF´> </td>
+ </tr>
+ -->
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#FFFFFF´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
+
+ %BODY%
+
+ </table>
+
+ <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
+ <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
+ </td>
+ </tr>
+
+ </table>
+ </form>
+ </body>
+</html>
+"
+
$rwd_pixel = "
R0lGODlhAQABAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK
CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ
@@ -1432,4 +1531,5 @@
CgD/ACwAAAAAAQABAAAIBAD/BQQAOw==
".unpack("m").shift
-$rwd_html1, $rwd_html2 = $rwd_html.split(/^\s*%BODY%\s*\r*$/)
+$rwd_html_11, $rwd_html_12 = $rwd_html_1.split(/^\s*%BODY%\s*\r*$/)
+$rwd_html_21, $rwd_html_22 = $rwd_html_2.split(/^\s*%BODY%\s*\r*$/)
diff -ur rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/sgml.lib.rb
--- rubywebdialogs-0.0.10.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-08-21 10:56:03.000000000 +0200
+++ rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-09-03 12:26:26.000000000 +0200
@@ -25,11 +25,13 @@
end
def prechildren_to_s(res)
- res << "#{CGI.unescapeHTML(@text)} "
+ #res << "#{CGI.unescapeHTML(@text)} "
+ res << @text
end
def prechildren_to_sgml(res)
- res << "#{CGI.unescapeHTML(@text)}"
+ #res << "#{CGI.unescapeHTML(@text)}"
+ res << @text
end
end
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/init.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/init.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/init.rb 2004-11-28 14:41:35.000000000 +0100
@@ -10,6 +10,8 @@
Dir.mkdir(dir) rescue nil
end
+Dir.chdir(File.dirname($0))
+
FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/install.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/install.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/install.rb 2004-11-28 14:41:35.000000000 +0100
@@ -10,6 +10,8 @@
Dir.mkdir(dir) rescue nil
end
+Dir.chdir(File.dirname($0))
+
FromDirs = [".", "./lib", "./rubylib/lib"]
ToDir = Config::CONFIG["sitelibdir"] + "/ev"
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/browser.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/browser.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/browser.lib.rb 2005-06-04 14:41:59.620740736 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/browser.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -0,0 +1,112 @@
+require "ev/ruby"
+require "ev/net"
+
+begin
+ require "win32ole"
+ require "win32/registry"
+rescue LoadError
+ $".push "win32ole.so"
+ $".push "win32/registry.rb"
+end
+
+def windowsbrowser
+ $stderr.puts "Looking for default browser..."
+
+ filetype = nil
+ application = nil
+
+ begin
+ Win32::Registry::HKEY_CLASSES_ROOT.open(´.html´) do |reg|
+ filetype = reg[""]
+ end
+
+ Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + ´\shell\open\command´) do |reg|
+ application = reg[""]
+ end
+ rescue NameError
+ $stderr.puts "Only available for Windows."
+ end
+
+ application
+end
+
+def linuxbrowser
+ application = ""
+
+ application = `which galeon 2> /dev/null`.chomp if application.empty?
+ application = `which mozilla 2> /dev/null`.chomp if application.empty?
+ application = `which firefox 2> /dev/null`.chomp if application.empty?
+ application = `which opera 2> /dev/null`.chomp if application.empty?
+ application = `which konqueror 2> /dev/null`.chomp if application.empty?
+ application = `which htmlview 2> /dev/null`.chomp if application.empty?
+ application = nil if application.empty?
+
+ application
+end
+
+def defaultbrowser
+ res = nil
+ res = windowsbrowser if windows?
+ res = linuxbrowser if linux?
+ res
+end
+
+def showinbrowser(html, browser=defaultbrowser)
+ port, io = TCPServer.freeport(7701, 7709)
+
+ unless browser.nil?
+ Thread.new do
+ begin
+ #command = "1234 \"http://localhost:#{port}\"" if linux?
+ #command = "L:/prog/MozillaFirefox/firefox.exe \"http://localhost:#{port}\"" if cygwin?
+ #command = Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´)[0] + " \"http://localhost:#{port}/\"" if windows?
+
+ command = "#{browser} \"http://localhost:#{port}\""
+
+ Thread.pass
+
+ system(command)
+ rescue
+ end
+ end
+ end
+
+ catch :once do
+ HTTPServer.serve([port, io]) do |req, resp|
+ resp << html
+ resp.flush
+
+ throw :once
+ end
+ end
+end
+
+def tab2html(tab)
+ res = ""
+
+ tab = tab.to_html(false)
+
+ res << "<html>\n"
+ res << "<body>\n"
+ res << "<table align=´center´ border=´1´ cellspacing=´0´ cellpadding=´3´>\n"
+ res << "<tbody>\n"
+
+ tab.split(/\r*\n/).each do |line|
+ res << "<tr>\n"
+
+ line.split(/\t/, -1).each do |veld|
+ veld = " " if veld.compress.empty?
+
+ res << "<td>%s</td>\n" % veld
+ end
+
+ res << "</tr>\n"
+ end
+
+ res << "</tbody>\n"
+ res << "</table>\n"
+ res << "</body>\n"
+ res << "</html>\n"
+
+ res
+end
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -54,9 +54,9 @@
end
def self.find(entry=nil, mask=nil)
- entry = @dir if entry.nil?
+ entry = "." if entry.nil?
- entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
+ entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
mask = /^#{mask}$/i if mask.kind_of?(String)
@@ -86,12 +86,29 @@
res
end
+
+ def self.findandchangecontent(entry=nil, mask=nil)
+ Dir.find(entry, mask).each do |file|
+ unless File.directory?(file)
+ data1 = File.open(file){|f| f.read}
+
+ data2 = yield(data1)
+
+ if data2 != data1
+ $stderr.puts "Changing #{file} ..."
+
+ File.open(file, "w"){|f| f.write data2}
+ end
+ end
+ end
+ end
end
class File
def self.rollbackup(file, mode=nil)
backupfile = file + ".RB.BACKUP"
controlfile = file + ".RB.CONTROL"
+ res = nil
File.touch(file) unless File.file?(file)
@@ -117,10 +134,10 @@
if block_given?
if mode.nil?
- yield
+ res = yield
else
File.open(file, mode) do |f|
- yield(f)
+ res = yield(f)
end
end
end
@@ -132,11 +149,9 @@
# Return, like File.open
- if block_given?
- return nil
- else
- return File.open(file, (mode or "r"))
- end
+ res = File.open(file, (mode or "r")) unless block_given?
+
+ res
end
def self.touch(file)
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -9,6 +9,8 @@
require "md5"
require "thread"
+$proxy = ENV["PROXY"] if $proxy.nil?
+
file = "#{home}/.evnet"
if File.file?(file)
Hash.file(file).each do |k, v|
@@ -530,7 +532,7 @@
data = (@io.read(self["content-length"].to_i) or "")
@vars = RequestPost.new((self["content-type"] == "application/x-www-form-urlencoded") ? data : "")
else
- puts "Unknown request (´#{firstline}´)."
+ $stderr.puts "Unknown request (´#{firstline}´)."
end
end
@@ -569,10 +571,11 @@
@response = "HTTP/1.0 200 OK"
@cookies = {}
@data = ""
+ @syncd = false
end
def flush
- @io.write("#{to_s}\r\n#{@data}")
+ sync
@io.close
end
@@ -589,6 +592,13 @@
res
end
+ def sync
+ @io.write("#{to_s}\r\n") unless @syncd
+ @io.write(@data)
+ @data = ""
+ @syncd = true
+ end
+
def << (s)
@data << s
end
@@ -607,11 +617,11 @@
begin
server = TCPServer.new(remote ? "0.0.0.0" : "localhost", port) if server.nil?
- puts "Just point your browser to http://localhost:#{port}/ ..."
+ $stderr.puts "Just point your browser to http://localhost:#{port}/ ..."
rescue
server = nil
- puts "Port #{port} is in use."
+ $stderr.puts "Port #{port} is in use."
end
if not server.nil?
@@ -636,11 +646,11 @@
if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
@@times[com]=Time.new.to_f if not @@times.include?(com)
- #puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request.to_s.strip}"
+ #$stderr.puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request.to_s.strip}"
yield(req, resp)
- puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request.to_s.strip}"
+ $stderr.puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request.to_s.strip}"
@@times.delete(com)
end
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -234,7 +234,7 @@
self.splitblocks(["´", "´"], [´"´, ´"´], ["#", "\n"]).each do |type, s|
case type
when 0, 1, 2 then res << s
- when 3
+ when 3 then res << "\n"
end
end
@@ -477,7 +477,7 @@
end
def self.file(file)
- res = []
+ res = new
File.open(file) do |f|
f.readlines.uncomment.chomp.each do |line|
@@ -617,7 +617,7 @@
end
def self.file(file)
- res = {}
+ res = new
File.open(file) do |f|
#f.readlines.chomp.each do |line|
@@ -625,7 +625,7 @@
line.chomp!
unless line.empty?
- k, v = line.split(/\s+=\s+/, 2)
+ k, v = line.split(/\s*=\s*/, 2)
res[k] = v
end
end
@@ -663,47 +663,21 @@
end
end
-def evtimeout(seconds, *args)
- if not seconds.nil? and not seconds.zero?
- t = Thread.current
- threads = []
- res = nil
-
- threads[1] = Thread.new(*args) do |*args|
- sleep seconds
- begin
- threads[2].kill
- rescue NameError
- end
- res = false
- t.wakeup
+def evtimeout(seconds)
+ begin
+ timeout(seconds) do
+ yield
end
-
- threads[2] = Thread.new(*args) do |*args|
- yield(*args)
- begin
- threads[1].kill
- rescue NameError
- end
- res = true
- t.wakeup
- end
-
- threads[1].join
- threads[2].join
-
- return res
- else
- yield(*args)
+ rescue TimeoutError
end
end
-def evtimeoutretry(seconds, *args)
+def evtimeoutretry(seconds)
ok = false
while not ok
- evtimeout(seconds, *args) do |*args|
- yield(*args)
+ evtimeout(seconds) do
+ yield
ok = true
end
end
@@ -744,14 +718,28 @@
end
def temp
- (ENV["TEMP"] or "/tmp").gsub(/\\/, "/")
+ (ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/")
end
def stdtmp
$stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") unless ARGV.include?("--rwd-exit")
end
+$nobm = false
+
+def nobm
+ $nobm = true
+end
+
def bm(label="")
+ if $nobm
+ if block_given?
+ return yield
+ else
+ return nil
+ end
+ end
+
if $bm.nil?
require "ev/bm"
@@ -786,3 +774,34 @@
res
end
+
+def trace
+ res =nil
+
+ set_trace_func lambda { |event, file, line, id, binding, classname|
+ $stderr.printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
+ }
+ if block_given?
+ res = yield
+
+ notrace
+ end
+
+ res
+end
+
+def notrace
+ set_trace_func nil
+end
+
+def lambda_cached(&block)
+ hash = {}
+ lambda do |*args|
+ res = hash[args]
+ if res.nil?
+ res = block.call(*args)
+ hash[args] = res
+ end
+ res
+ end
+end
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -1,5 +1,7 @@
+require "ev/ruby"
require "ev/xml"
require "ev/net"
+require "ev/browser"
require "md5"
require "rbconfig"
@@ -12,16 +14,17 @@
end
$rwd_exit = ARGV.include?("--rwd-exit") # Hack ???
-$rwd_debug = ($rwd_debug or false)
+$rwd_debug = ($rwd_debug or $DEBUG or false)
$rwd_border = ($rwd_border or 0)
$rwd_dir = Dir.pwd
$rwd_files = File.expand_path("rwd_files", Dir.pwd)
+$rwd_html = {}
+
ARGV.delete_if do |arg|
arg =~ /^--rwd-/
end
-
RWDEmptyline = "..."
rcfile = nil
@@ -37,37 +40,18 @@
Format = "\n<!-- %-10s %-10s -->\t"
unless rcfile.nil?
- puts "Reading #{rcfile} ..."
+ $stderr.puts "Reading #{rcfile} ..."
Hash.file(rcfile).each do |k, v|
- ENV[k] = v
- end
-end
-
-unless ENV.include?("RWDBROWSER")
- begin
- puts "Looking for default browser..."
-
- filetype = nil
- application = nil
-
- Win32::Registry::HKEY_CLASSES_ROOT.open(´.html´) do |reg|
- filetype = reg[""]
- end
-
- Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + ´\shell\open\command´) do |reg|
- application = reg[""]
- end
+ #$stderr.puts "Setting #{k} to \"#{v}\" ..."
- ENV["RWDBROWSER"] = application
- rescue NameError
- puts "Not found."
+ ENV[k] = v
end
end
-unless ENV.include?("RWDPORTS")
- ENV["RWDPORTS"] = "7701-7709"
-end
+ENV["RWDBROWSER"] = (ENV["RWDBROWSER"] or defaultbrowser) or puts "No browser found."
+ENV["RWDPORTS"] = (ENV["RWDPORTS"] or "7701-7709")
+ENV["RWDTHEME"] = (ENV["RWDTHEME"] or "DEFAULT")
trap("INT") {puts "Terminating..." ; exit}
@@ -252,10 +236,10 @@
class OpenTag
def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
bef = before[-1]
- res.concat Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
- res.concat bef if not bef.nil?
+ res << Format % ["Before", @subtype] if ($rwd_debug and not bef.nil?)
+ res << bef if not bef.nil?
- res.concat Format % ["Pre", @subtype] if $rwd_debug
+ res << Format % ["Pre", @subtype] if $rwd_debug
align = AC
align = "align=´#{@args["align"]}´" if @args.include?("align")
@@ -281,144 +265,159 @@
args["nohelpbutton"] = (not help)
- template = $rwd_html_11
- template = $rwd_html_21 if pda
+ template = $rwd_html_1
+ template = $rwd_html_PDA_1 if pda
- res.concat(template(template, args))
- when "p" then res.concat "<p #{align}>"
- when "pre" then res.concat "<pre #{align}>"
- when "big" then res.concat "<p #{align}><big>"
- when "small" then res.concat "<p #{align}><small>"
- when "list" then res.concat "<ul #{align}>"
- when "item" then res.concat "<li #{align}>"
- when "empty" then res.concat "<p><br>"
- when "image" then res.concat "<img src=´#{@args["src"]}´>"
- when "br" then res.concat "<br>"
- when "hr" then res.concat "<hr>"
- when "b" then res.concat "<b>"
- when "i" then res.concat "<i>"
+ res <<(template(template, args))
+ when "p" then res << "<p #{align}>"
+ when "pre" then res << "<pre #{align}>"
+ when "big" then res << "<p #{align}><big>"
+ when "small" then res << "<p #{align}><small>"
+ when "list" then res << "<ul #{align}>"
+ when "item" then res << "<li #{align}>"
+ when "empty" then res << "<p><br>"
+ when "image" then res << "<img src=´#{@args["src"]}´ alt=´#{@args["alt"]}´>"
+ when "br" then res << "<br>"
+ when "hr" then res << "<hr>"
+ when "b" then res << "<b>"
+ when "i" then res << "<i>"
when "a"
if @args.include?("href")
- res.concat "<a href=´#{@args["href"]}´ target=´#{@args["target"] or "_blank"}´>"
+ res << "<a href=´#{@args["href"]}´ target=´#{@args["target"] or "_blank"}´>"
else
- res.concat "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
+ res << "<a href=´javascript:document.bodyform.rwd_action.value=\"#{@args["action"]}\";document.bodyform.submit();´>"
end
- when "vertical" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
- when "horizontal" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´><tr #{align} #{valign}>"
- when "table" then res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
- when "row" then res.concat "<tr #{align} #{valign}>"
- when "hidden" then res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´hidden´>"
+ when "vertical" then res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
+ when "horizontal" then res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´><tr #{align} #{valign}>"
+ when "table" then res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´#{cellspacing}´ cellpadding=´0´>"
+ when "row" then res << "<tr #{align} #{valign}>"
+ when "hidden" then res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´hidden´>"
when "text"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
size = ""
size = "size=´%s´" % 10 if pda
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength} #{size}>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength} #{size}>"
oneormorefields << "true"
when "textarea"
- res.concat "<p #{align}><textarea name=´#{@args["name"]}´ rows=´25´ cols=´80´>#{value2.crlf}</textarea>"
+ res << "<p #{align}><textarea name=´#{@args["name"]}´ rows=´25´ cols=´80´>#{value2.crlf}</textarea>"
oneormorefields << "true"
when "password"
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
size = ""
size = "size=´%s´" % 10 if pda
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´password´ #{maxlength} #{size}>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´password´ #{maxlength} #{size}>"
oneormorefields << "true"
when "checkbox"
if varshtml[@args["name"]] == "on"
switches[@args["name"]] = true
- res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ type=´checkbox´>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ type=´checkbox´>"
else
switches[@args["name"]] = false
- res.concat "<p #{align}><input name=´#{@args["name"]}´ type=´checkbox´>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ type=´checkbox´>"
end
oneormorefields << "true"
when "radio"
if varshtml[@args["name"]] == value1 # ??? 1 or 2?
- res.concat "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value1}´ type=´radio´>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ checked=´on´ value=´#{value1}´ type=´radio´>"
else
- res.concat "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´radio´>"
+ res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´radio´>"
end
oneormorefields << "true"
when "select"
- res.concat "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
+ res << "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
name = @args["name"]
$select = varshtml[name]
oneormorefields << "true"
when "option"
if $select == @children[0].text
- res.concat "<option selected=´true´>"
+ res << "<option selected=´true´>"
else
- res.concat "<option>"
+ res << "<option>"
end
when "button"
- res.concat "<input type=´submit´ value=´#{@args["caption"]}´ onclick=´document.bodyform.rwd_action.value=\"#{@args["action"]}\";´>"
+ res << "<input type=´submit´ value=´#{@args["caption"]}´ onclick=´document.bodyform.rwd_action.value=\"#{@args["action"]}\";´>"
firstaction << @args["action"] if (firstaction.empty? and @args.include?("action"))
oneormorefields << "true"
when "back"
- res.concat "<input type=´submit´ value=´Back´ onclick=´document.bodyform.rwd_action.value=\"rwd_back\";´>"
+ res << "<input type=´submit´ value=´Back´ onclick=´document.bodyform.rwd_action.value=\"rwd_back\";´>"
firstaction << "rwd_back" if firstaction.empty?
oneormorefields << "true"
when "help"
- res.concat "<input type=´submit´ value=´Help´ onclick=´document.bodyform.rwd_action.value=\"rwd_help\";´>"
+ res << "<input type=´submit´ value=´Help´ onclick=´document.bodyform.rwd_action.value=\"rwd_help\";´>"
firstaction << "rwd_help" if firstaction.empty?
oneormorefields << "true"
when "quit"
- res.concat "<input type=´submit´ value=´Quit´ onclick=´document.bodyform.rwd_action.value=\"rwd_quit\";´>"
+ res << "<input type=´submit´ value=´Quit´ onclick=´document.bodyform.rwd_action.value=\"rwd_quit\";´>"
firstaction << "rwd_quit" if firstaction.empty?
oneormorefields << "true"
when "close"
- res.concat "<input type=´submit´ value=´Close´ onclick=´window.close();´>"
+ res << "<input type=´submit´ value=´Close´ onclick=´window.close();´>"
firstaction << "rwd_quit" if firstaction.empty?
oneormorefields << "true"
when "reset"
- res.concat "<input type=´reset´ value=´Reset´>"
+ res << "<input type=´reset´ value=´Reset´>"
firstaction << "rwd_quit" if firstaction.empty?
oneormorefields << "true"
when "closewindow"
- #res.concat "<script type=´text/javascript´>\n" # ???
- #res.concat "<!--\n"
- #res.concat " window.close();\n"
- #res.concat "//-->\n"
- #res.concat "</script>"
+ #res << "<script type=´text/javascript´>\n" # ???
+ #res << "<!--\n"
+ #res << " window.close();\n"
+ #res << "//-->\n"
+ #res << "</script>"
when "tabs"
- res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
- res.concat " <tr #{AL}>"
- res.concat " <td #{AL} class=´tabs´>"
- res.concat " <table #{AL} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
- res.concat " <tr #{AL}>"
+ res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res << " <tr #{AL}>"
+ res << " <td #{AL} class=´tabs´>"
+ res << " <table #{AL} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res << " <tr #{AL}>"
+ #res << " <td class=´notab´> </td>"
tabs.each do |obj|
name = obj.args["name"]
caption = obj.args["caption"]
- res.concat "<td class=´notab´> </td>" unless obj == tabs[0]
+ res << "<td #{AL} class=´notab´> </td>" unless obj == tabs[0]
if name == tab
- res.concat "<td #{AC} class=´thistab´><tt><b> #{caption} </b></tt></td>"
+ res << "<td #{AC} class=´activetab´><tt> #{caption} </tt></td>"
else
- res.concat "<td #{AC} class=´tab´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{name}\";document.bodyform.submit();´><tt> #{caption} </tt></a></td>"
+ res << "<td #{AC} class=´passivetab´><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_tab_#{name}\";document.bodyform.submit();´><tt> #{caption} </tt></a></td>"
end
end
- res.concat " </tr>"
- res.concat " </table>"
- res.concat " </td>"
- res.concat " </tr>"
+ res << " <td class=´notab´ width=´100%´> </td>"
+ res << " </tr>"
+ res << " </table>"
+ res << " </td>"
+ res << " </tr>"
+ res << " <tr #{align}>"
+ res << " <td #{align} class=´tabblad´>"
when "tab"
- res.concat "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
- res.concat " <tr #{AL}>"
- res.concat " <td #{AL} class=´tabblad´>"
+ res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
+ when "panel"
+ level = (@args["level"] or "normal")
+ res << "<table #{AC} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res << " <tr #{align}>"
+ res << " <td #{align} class=´panel1´>" if level == "normal"
+ res << " <td #{align} class=´panel1high´>" if level == "high"
+ res << " <td #{align} class=´panel1low´>" if level == "low"
+ res << " <table #{AC} border=´#{$rwd_border}´ cellspacing=´0´ cellpadding=´0´>"
+ res << " <tr #{align}>"
+ res << " <td #{align} class=´panel2´>" if level == "normal"
+ res << " <td #{align} class=´panel2high´>" if level == "high"
+ res << " <td #{align} class=´panel2low´>" if level == "low"
+ res << " <table #{AC} border=´#{$rwd_border}´ cellspacing=´3´ cellpadding=´0´>"
else
puts "<#{@subtype}>"
- res.concat "<#{@subtype}>"
+ res << "<#{@subtype}>"
end
bef = nil
aft = nil
case @subtype
- when "vertical", "window", "helpwindow", "tabs", "tab"
- res.concat Format % ["AftPre", @subtype] if $rwd_debug
+ when "vertical", "window", "helpwindow", "tab", "panel"
+ res << Format % ["AftPre", @subtype] if $rwd_debug
if @args.include?("spacing")
s = "<tr><td> </td></tr>" * (@args["spacing"].to_i)
else
@@ -427,7 +426,7 @@
bef = "#{s}<tr #{align} #{valign}><td #{align}>"
aft = "</td></tr>"
when "horizontal", "row"
- res.concat Format % ["AftPre", @subtype] if $rwd_debug
+ res << Format % ["AftPre", @subtype] if $rwd_debug
bef = "<td #{align}>"
aft = "</td>"
end
@@ -438,16 +437,16 @@
def postchildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
case @subtype
- when "vertical", "window", "helpwindow", "tabs", "tab"
- res.concat Format % ["BefPost", @subtype] if $rwd_debug
+ when "vertical", "window", "helpwindow", "tab", "panel"
+ res << Format % ["BefPost", @subtype] if $rwd_debug
if @args.include?("spacing")
- res.concat "<tr><td> </td></tr>" * (@args["spacing"].to_i)
+ res << "<tr><td> </td></tr>" * (@args["spacing"].to_i)
end
when "horizontal", "row"
- res.concat Format % ["BefPost", @subtype] if $rwd_debug
+ res << Format % ["BefPost", @subtype] if $rwd_debug
end
- res.concat Format % ["Post", @subtype] if $rwd_debug
+ res << Format % ["Post", @subtype] if $rwd_debug
case @subtype
when "application"
@@ -456,57 +455,69 @@
args["nohelpbutton"] = (not help)
- template = $rwd_html_12
- template = $rwd_html_22 if pda
+ template = $rwd_html_2
+ template = $rwd_html_PDA_2 if pda
- res.concat(template(template, args))
- when "p" then res.concat "</p>"
- when "pre" then res.concat "</pre>"
- when "big" then res.concat "</big></p>"
- when "small" then res.concat "</small></p>"
- when "list" then res.concat "</ul>"
- when "item" then res.concat "</li>"
- when "empty" then res.concat "</p>"
- when "image" then res.concat ""
- when "br" then res.concat ""
- when "hr" then res.concat ""
- when "b" then res.concat "</b>"
- when "i" then res.concat "</i>"
- when "a" then res.concat "</a>"
- when "vertical" then res.concat "</table>"
- when "horizontal" then res.concat "</tr></table>"
- when "table" then res.concat "</table>"
- when "row" then res.concat "</tr>"
- when "hidden" then res.concat "</p>"
- when "text" then res.concat "</p>"
- when "textarea" then res.concat "</p>"
- when "password" then res.concat "</p>"
- when "checkbox" then res.concat "</p>"
- when "radio" then res.concat "</p>"
+ res <<(template(template, args))
+ when "p" then res << "</p>"
+ when "pre" then res << "</pre>"
+ when "big" then res << "</big></p>"
+ when "small" then res << "</small></p>"
+ when "list" then res << "</ul>"
+ when "item" then res << "</li>"
+ when "empty" then res << "</p>"
+ when "image" then res << ""
+ when "br" then res << ""
+ when "hr" then res << ""
+ when "b" then res << "</b>"
+ when "i" then res << "</i>"
+ when "a" then res << "</a>"
+ when "vertical" then res << "</table>"
+ when "horizontal" then res << "</tr></table>"
+ when "table" then res << "</table>"
+ when "row" then res << "</tr>"
+ when "hidden" then res << "</p>"
+ when "text" then res << "</p>"
+ when "textarea" then res << "</p>"
+ when "password" then res << "</p>"
+ when "checkbox" then res << "</p>"
+ when "radio" then res << "</p>"
when "select"
- res.concat "</select>"
+ res << "</select>"
$select = nil
- when "option" then res.concat "</option>"
- when "button" then res.concat ""
- when "back" then res.concat ""
- when "help" then res.concat ""
- when "quit" then res.concat ""
- when "close" then res.concat ""
- when "reset" then res.concat ""
- when "closewindow" then res.concat ""
- when "tabs" then res.concat "</table>"
- when "tab" then res.concat "</td></tr></table>"
+ when "option" then res << "</option>"
+ when "button" then res << ""
+ when "back" then res << ""
+ when "help" then res << ""
+ when "quit" then res << ""
+ when "close" then res << ""
+ when "reset" then res << ""
+ when "closewindow" then res << ""
+ when "tabs"
+ res << " </td>"
+ res << " </tr>"
+ res << "</table>"
+ when "tab"
+ res << "</table>"
+ when "panel"
+ res << " </table>"
+ res << " </td>"
+ res << " </tr>"
+ res << " </table>"
+ res << " </td>"
+ res << " </tr>"
+ res << "</table>"
else
puts "</#{@subtype}>"
- res.concat "</#{@subtype}>"
+ res << "</#{@subtype}>"
end
before.pop
after.pop
aft = after[-1]
- res.concat Format % ["After", @subtype] if ($rwd_debug and not aft.nil?)
- res.concat aft if not aft.nil?
+ res << Format % ["After", @subtype] if ($rwd_debug and not aft.nil?)
+ res << aft if not aft.nil?
end
def template(html, vars)
@@ -560,8 +571,8 @@
class Text
def prechildren(res, before, after, varshtml, varsstring, switches, help, oneormorefields, firstaction, tabs, tab, pda)
if not @text.scan(/[^ \t\r\n]/).empty?
- res.concat Format % ["Text", ""] if $rwd_debug
- res.concat "#{@text}"
+ res << Format % ["Text", ""] if $rwd_debug
+ res << "#{@text}"
end
end
end
@@ -600,7 +611,7 @@
varsstring = Hash.new
oneormorefields = ""
firstaction = ""
- html = ""
+ html = []
vars.each do |key, value|
if not key.empty?
@@ -638,6 +649,8 @@
windowobject.parsetree("prechildren", "postchildren", html, [""], [""], varshtml, varsstring, switches, (not @helprwd.empty?), oneormorefields, firstaction, tabs, tab, pda)
end
+ html = html.join("") # ???
+
html.gsub!(/%%*[[:alnum:]_\-]+%%*/, "") if not $rwd_debug
html.gsub!(/%%/, "%")
html.gsub!(/\n\n*/, "\n")
@@ -974,7 +987,7 @@
if auth.nil?
@localbrowsing = true
- if ENV.include?("RWDBROWSER") and not ENV["RWDBROWSER"].empty?
+ if ENV.include?("RWDBROWSER") and not ENV["RWDBROWSER"].nil? and not ENV["RWDBROWSER"].empty?
@browserstarted = true
@object.exitbrowser
@@ -1161,7 +1174,7 @@
end
end
-$rwd_html_1 = "
+$rwd_html["DEFAULT"] = "
<!-- Generated by RubyWebDialog. -->
<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
<html>
@@ -1184,27 +1197,65 @@
background : #AAAAAA;
}
- td.tabs {
- border-color : #000000;
- border-width : thin;
- border-style : none none solid none;
+ td.panel1 {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
}
- td.tab {
- border-color : #000000;
- border-width : thin;
- border-style : solid solid none solid;
+ td.panel2 {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel1high {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
}
- td.thistab {
- border-color : #000000;
- border-width : medium;
+ td.panel2high {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : none none none none;
+ }
+
+ td.panel1low {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel2low {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : none none none none;
+ }
+
+ td.tabblad {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : none solid solid solid;
+ }
+
+ td.passivetab {
+ background-color : #BBBBBB;
+ border-color : #DDDDDD #DDDDDD #EEEEEE #DDDDDD;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.activetab {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
border-style : solid solid none solid;
}
td.notab {
- border-width : thin;
- border-style : none;
+ border-color : #EEEEEE #EEEEEE #EEEEEE #EEEEEE;
+ border-width : 1pt;
+ border-style : none none solid none;
}
//-->
@@ -1335,15 +1386,12 @@
<tr align=´center´>
<td align=´center´ bgcolor=´#CCCCCC´>
+ <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
+ %BODY%
+ </table>
- <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
-
- %BODY%
-
- </table>
-
- <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
- <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
+ <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
+ <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
</td>
</tr>
</table>
@@ -1437,7 +1485,172 @@
</html>
"
-$rwd_html_2 = "
+$rwd_html["WINDOWSLOOKALIKE"] = "
+<!-- Generated by RubyWebDialog. -->
+<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
+<html>
+ <head>
+ <title>%TITLE%</title>
+
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+ <meta http-equiv=´Content-Style-Type´ content=´text/css´>
+
+ <link rel=´shortcut icon´ href=´%LOGO%´>
+
+ <style type=´text/css´>
+ <!--
+
+ a {
+ text-decoration : none;
+ }
+
+ a:hover {
+ background : #AAAAAA;
+ }
+
+ td.window {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 3pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel1 {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel2 {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel1high {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel2high {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : none none none none;
+ }
+
+ td.panel1low {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.panel2low {
+ border-color : #888888 #EEEEEE #EEEEEE #888888;
+ border-width : 1pt;
+ border-style : none none none none;
+ }
+
+ td.tabblad {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : none solid solid solid;
+ }
+
+ td.passivetab {
+ background-color : #BBBBBB;
+ border-color : #DDDDDD #DDDDDD #EEEEEE #DDDDDD;
+ border-width : 1pt;
+ border-style : solid solid solid solid;
+ }
+
+ td.activetab {
+ border-color : #EEEEEE #888888 #888888 #EEEEEE;
+ border-width : 1pt;
+ border-style : solid solid none solid;
+ }
+
+ td.notab {
+ border-color : #EEEEEE #EEEEEE #EEEEEE #EEEEEE;
+ border-width : 1pt;
+ border-style : none none solid none;
+ }
+
+ //-->
+ </style>
+
+ <script type=´text/javascript´>
+ <!--
+ function BodyGo() {
+ $RWD_FOCUS$
+ }
+ //-->
+ </script>
+ </head>
+
+ <body bgcolor=´white´ onload=´BodyGo()´ link=´#000000´ vlink=´#000000´ alink=´#000000´>
+ <form name=´bodyform´ action=´/´ method=´post´>
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ width=´100%´ height=´100%´>
+ <tr align=´center´ valign=´middle´>
+ <td align=´center´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
+
+ <tr align=´center´>
+ <td align=´center´ class=´window´>
+
+ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´ %WIDTH1%>
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#444488´>
+
+ <table align=´left´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <td align=´border´><img src=´%LOGO%´ width=´14´ height=´14´></td>
+ <td align=´center´><b><small><font color=´#FFFFFF´> %TITLE% </font></small></b></td>
+ </tr>
+ </table>
+
+ <table align=´right´ border=´0´ cellspacing=´1´ cellpadding=´0´>
+ <tr align=´center´>
+ <!-- %HELPBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_help\";document.bodyform.submit();´> ? </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_main\";document.bodyform.submit();´> << </a></small></b></td>
+ <!-- %BACKBUTTONS% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_back\";document.bodyform.submit();´> < </a></small></b></td>
+ <!-- %CLOSEBUTTON% --><td align=´center´ bgcolor=´#EEEEEE´><b><small><a href=´javascript:document.bodyform.rwd_action.value=\"rwd_quit\";document.bodyform.submit();´> X </a></small></b></td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
+ </tr>
+
+ <tr align=´center´>
+ <td align=´center´ bgcolor=´#CCCCCC´>
+ <table align=´center´ border=´0´ cellspacing=´3´ cellpadding=´0´>
+ %BODY%
+ </table>
+
+ <input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
+ <input name=´rwd_session´ value=´$RWD_SESSION$´ type=´hidden´>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ </table>
+
+ </td>
+ </tr>
+ </table>
+ </form>
+ </body>
+</html>
+"
+
+$rwd_html["PDA"] = "
<!-- Generated by RubyWebDialog. -->
<!-- For more information, please contact Erik Veenstra <rwd@erikveen.dds.nl>. -->
<html>
@@ -1493,9 +1706,7 @@
<td align=´center´ bgcolor=´#FFFFFF´>
<table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
-
%BODY%
-
</table>
<input name=´rwd_action´ value=´$RWD_FIRSTACTION$´ type=´hidden´>
@@ -1531,5 +1742,5 @@
CgD/ACwAAAAAAQABAAAIBAD/BQQAOw==
".unpack("m").shift
-$rwd_html_11, $rwd_html_12 = $rwd_html_1.split(/^\s*%BODY%\s*\r*$/)
-$rwd_html_21, $rwd_html_22 = $rwd_html_2.split(/^\s*%BODY%\s*\r*$/)
+$rwd_html_1, $rwd_html_2 = $rwd_html[ENV["RWDTHEME"]].split(/^\s*%BODY%\s*\r*$/)
+$rwd_html_PDA_1, $rwd_html_PDA_2 = $rwd_html["PDA"].split(/^\s*%BODY%\s*\r*$/)
diff -ur rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/tree.lib.rb
--- rubywebdialogs-0.0.11.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-09-03 12:26:26.000000000 +0200
+++ rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-11-28 14:41:35.000000000 +0100
@@ -313,26 +313,28 @@
def path(pad)
p1 = self
- pad.split(/\//).each do |deel|
- tag, voorkomen = deel.split(/:/)
+ unless pad.nil?
+ pad.split(/\//).each do |deel|
+ tag, voorkomen = deel.split(/:/)
- if (not tag.nil?) and (not p1.nil?)
- voorkomen = 1 if voorkomen.nil?
- voorkomen = voorkomen.to_i
+ if (not tag.nil?) and (not p1.nil?)
+ voorkomen = 1 if voorkomen.nil?
+ voorkomen = voorkomen.to_i
- teller = 0
- p2 = nil
- p1.children.each_index do |i|
- #if p1.children[i].upordown == Down
- unless p1.children[i].subtype.nil?
- if p1.children[i].subtype.noquotes == tag.noquotes
- teller += 1
- p2 = p1.children[i] if teller == voorkomen
+ teller = 0
+ p2 = nil
+ p1.children.each_index do |i|
+ #if p1.children[i].upordown == Down
+ unless p1.children[i].subtype.nil?
+ if p1.children[i].subtype.noquotes == tag.noquotes
+ teller += 1
+ p2 = p1.children[i] if teller == voorkomen
+ end
end
- end
- #end
+ #end
+ end
+ p1 = p2
end
- p1 = p2
end
end
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/browser.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/browser.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/browser.lib.rb 2004-11-28 14:41:35.000000000 +0100
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/browser.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -12,7 +12,7 @@
def windowsbrowser
$stderr.puts "Looking for default browser..."
- filetype = nil
+ filetype = "htmlfile"
application = nil
begin
@@ -71,13 +71,10 @@
end
end
- catch :once do
- HTTPServer.serve([port, io]) do |req, resp|
- resp << html
- resp.flush
+ HTTPServer.serve([port, io]) do |req, resp|
+ resp << html
- throw :once
- end
+ resp.stop
end
end
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ftools.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-11-28 14:41:35.000000000 +0100
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -86,22 +86,6 @@
res
end
-
- def self.findandchangecontent(entry=nil, mask=nil)
- Dir.find(entry, mask).each do |file|
- unless File.directory?(file)
- data1 = File.open(file){|f| f.read}
-
- data2 = yield(data1)
-
- if data2 != data1
- $stderr.puts "Changing #{file} ..."
-
- File.open(file, "w"){|f| f.write data2}
- end
- end
- end
- end
end
class File
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-11-28 14:41:35.000000000 +0100
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -1,8 +1,6 @@
require "ev/ruby"
require "ev/ftools"
-#alias old_timeout :timeout
require "net/http"
-#alias timeout :old_timeout
require "socket"
require "uri"
require "cgi"
@@ -565,6 +563,8 @@
class Response < Hash
attr_writer :response
attr_reader :cookies
+ attr_reader :stop
+ attr_reader :at_stop
def initialize(io)
@io = io
@@ -572,6 +572,8 @@
@cookies = {}
@data = ""
@syncd = false
+ @stop = false
+ @at_stop = lambda{}
end
def flush
@@ -606,11 +608,21 @@
def inspect
"(Response: %s)" % [@response, @data].join(", ")
end
+
+ def stop(&block)
+ @stop = true
+ @at_stop = block unless block.nil?
+ end
+
+ def stop?
+ @stop
+ end
end
-class HTTPServer
- @@times = {}
+class HTTPServerException < Exception
+end
+class HTTPServer
def self.serve(portio=80, remote=false, auth=nil, realm="ev/net")
port, server = portio
@@ -625,43 +637,85 @@
end
if not server.nil?
- loop do
- io = server.accept
+ count = 0
- catch :rwd_io_error do
- begin
- req = Request.new(io)
- resp = Response.new(io)
- rescue
- throw :rwd_io_error
- end
-
- begin
- ip = req.peeraddr[3]
- com = req.request.to_s.strip + ip
- rescue NameError
- throw :rwd_io_error
- end
+ at_exit do
+ $stderr.puts "Received #{count} requests"
+ end
- if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
- @@times[com]=Time.new.to_f if not @@times.include?(com)
+ serverthread =
+ Thread.new do
+ mutex = Mutex.new
- #$stderr.puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: > #{req.request.to_s.strip}"
+ Thread.current["threads"] = []
- yield(req, resp)
+ every(1, Thread.current) do |thread|
+ mutex.synchronize do
+ thread["threads"].delete_if{|t| (not t.alive?)}
+ end
+ end
- $stderr.puts "#{Time.new.strftime("%H:%M:%S")}: #{ip}: #{((Time.new.to_f - @@times[com]).to_s + "0"*4)[0..4]}: < #{req.request.to_s.strip}"
+ loop do
+ io = server.accept
+ count += 1
+
+ thread =
+ Thread.new(Thread.current, count) do |parentthread, count2|
+ stop = false
+
+ begin
+ begin
+ req = Request.new(io)
+ resp = Response.new(io)
+ rescue
+ raise HTTPServerException
+ end
+
+ begin
+ ip = req.peeraddr[3]
+ rescue NameError
+ raise HTTPServerException
+ end
+
+ if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
+ $stderr.puts "#{count2}, #{Time.new.strftime("%Y-%m-%d.%H:%M:%S")}, #{ip}, #{req.request.to_s.strip}"
+
+ begin
+ yield(req, resp)
+ rescue Exception => e
+ mutex.synchronize do
+ $stderr.puts e.class.to_s + ": " + e.message
+ $stderr.puts e.backtrace.collect{|s| "\t"+s}.join("\n")
+ end
+ end
+
+ stop = true if resp.stop?
+ end
+
+ begin
+ resp.flush
+ rescue
+ raise HTTPServerException
+ end
+ rescue HTTPServerException
+ end
- @@times.delete(com)
- end
+ parentthread["stop"] = resp if stop
+ end
- begin
- resp.flush
- rescue
- throw :rwd_io_error
- end
+ mutex.synchronize do
+ Thread.current["threads"] << thread
+ end
end
end
+
+ sleep 0.1 while not serverthread["stop"]
+
+ serverthread["threads"].each {|t| t.join}
+
+ serverthread["stop"].at_stop.call
+
+ serverthread.kill
end
end
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-11-28 14:41:35.000000000 +0100
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -1,5 +1,10 @@
require "cgi"
require "rbconfig"
+require "thread"
+
+Thread.abort_on_exception = true
+
+$DEBUG = ($DEBUG or ENV["RUBYDEBUG"] or false)
#tekens = ´\w\~\@\#\$\%\^\&\*\-\+´
tekens = ´^\s\r\n\`\!\(\)\[\]\{\}\<\>\,\.\/\?\\\|\=\;\:\"´
@@ -645,19 +650,19 @@
def after(seconds, *args)
if not seconds.nil? and not seconds.zero?
- Thread.new(*args) do |*args|
+ Thread.new(*args) do |*args2|
sleep seconds
- yield(*args)
+ yield(*args2)
end
end
end
def every(seconds, *args)
if not seconds.nil? and not seconds.zero?
- Thread.new(*args) do |*args|
+ Thread.new(*args) do |*args2|
loop do
sleep seconds
- yield(*args)
+ yield(*args2)
end
end
end
@@ -740,38 +745,44 @@
end
end
- if $bm.nil?
- require "ev/bm"
+ label = label.to_s
+ res = nil
+
+ $bm_mutex = ($bm_mutex or Mutex.new)
+
+ $bm_mutex.synchronize do
+ if $bm.nil?
+ require "ev/bm"
+
+ $bm = {}
- $bm = {}
+ at_exit do
+ format1 = "%10s %10s %10s %10s %10s %10s %10s"
+ format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d"
- at_exit do
- format1 = "%10s %10s %10s %10s %10s %10s %10s"
- format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d"
-
- $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"]
- $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v|
- $stderr.puts format2 % [k, *v]
+ $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"]
+ $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v|
+ $stderr.puts format2 % [k, *v]
+ end
end
end
- end
-
- label = label.to_s
- res = nil
- $bm[label] = [0.0]*5 + [0] unless $bm.include?(label)
+ $bm[label] = [0.0]*5 + [0] unless $bm.include?(label)
+ end
if block_given?
bm = Benchmark.measure{res = yield}
bma = bm.to_a # [dummy label, user CPU time, system CPU time, childrens user CPU time, childrens system CPU time, elapsed real time]
- 0.upto(4) do |n|
- $bm[label][n] += bma[n+1]
+ $bm_mutex.synchronize do
+ 0.upto(4) do |n|
+ $bm[label][n] += bma[n+1]
+ end
+
+ $bm[label][5] += 1
end
end
- $bm[label][5] += 1
-
res
end
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-11-28 14:41:35.000000000 +0100
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -2,6 +2,7 @@
require "ev/xml"
require "ev/net"
require "ev/browser"
+require "ev/thread"
require "md5"
require "rbconfig"
@@ -20,7 +21,6 @@
$rwd_files = File.expand_path("rwd_files", Dir.pwd)
$rwd_html = {}
-
ARGV.delete_if do |arg|
arg =~ /^--rwd-/
end
@@ -45,7 +45,7 @@
Hash.file(rcfile).each do |k, v|
#$stderr.puts "Setting #{k} to \"#{v}\" ..."
- ENV[k] = v
+ ENV[k] = v unless ENV.include?(k)
end
end
@@ -92,7 +92,7 @@
if emptyline.nil?
a = self
else
- a = [emptyline].concat self
+ a = [emptyline].concat(self)
end
a.numsort.collect{|s| "<option>#{s.to_html}</option>" }.join("\n")
@@ -202,11 +202,11 @@
values = [] if values.nil?
options = {}
- if File.file?(oldlocation("constraints.csv"))
- table = File.basename(@file).gsub(/\.csv$/, "")
+ if File.file?(oldlocation("constraints.tsv"))
+ table = File.basename(@file).gsub(/\.tsv$/, "")
- CSVFile.new(oldlocation("constraints.csv")).subset(["Table", "Constraint"], [table, "key"], ["Column", "Value"]).values.each do |column, table2|
- options[column] = CSVFile.new(oldlocation("#{table2}.csv")).keys.collect{|a| a.join("\t")}
+ TSVFile.new(oldlocation("constraints.tsv")).subset(["Table", "Constraint"], [table, "key"], ["Column", "Value"]).values.each do |column, table2|
+ options[column] = TSVFile.new(oldlocation("#{table2}.tsv")).keys.collect{|a| a.join("\t")}
end
end
@@ -967,11 +967,7 @@
def render(res, path, post, download, downloadfile, pda)
done = self["object"].render(res, path, post, download, downloadfile, pda, @sessionid)
- if done
- res.gsub!(/\$RWD_SESSION\$/, "")
- else
- res.gsub!(/\$RWD_SESSION\$/, "#{@sessionid}")
- end
+ res.gsub!(/\$RWD_SESSION\$/, done ? "" : "#{@sessionid}")
return done
end
@@ -1000,13 +996,21 @@
#if ENV["RWDBROWSER"].downcase =~ /iexplore/ # ???
#@ie = IE.new("http://localhost:#{port}/")
#else
- if windows?
- system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
- elsif cygwin?
- system("#{ENV["RWDBROWSER"].gsub(/\\/, "/").gsub(/ /, "\ ")} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
- else
- system("#{ENV["RWDBROWSER"]} \"http://localhost:#{port}/\"".gsub(/%port%/, port.to_s))
+ browser = ENV["RWDBROWSER"]
+ url = "http://localhost:%s/" % [port]
+
+ if cygwin?
+ browser.gsub!(/\\/, "/")
+ browser.gsub!(/ /, "\ ")
end
+
+ re = /[$%]1\b/
+ command = "%s \"%s\"" % [browser, url]
+ command = browser.gsub(re, url) if browser =~ re
+
+ command.gsub!(/%port%/, port.to_s)
+
+ system(command)
#end
puts "The browser has terminated."
@@ -1016,12 +1020,15 @@
# Start server.
- catch :rwd_exit do
- portio = port
- portio = [port, io] unless io.nil?
- HTTPServer.serve(portio, (not auth.nil?)) do |req, resp|
+ portio = port
+ portio = [port, io] unless io.nil?
+ threadlimiter = ThreadLimiter.new(1)
+
+ HTTPServer.serve(portio, (not auth.nil?)) do |req, resp|
+ threadlimiter.wait do
+
vars = req.vars.dup
- pad = req.request.path
+ pad = (req.request.path or "/")
if auth.kind_of? String
file = "#{home}/#{auth}"
@@ -1034,28 +1041,26 @@
#oldsessionid = vars["rwd_session"]
oldsessionid = req.cookies["sessionid"]
- # Retrieve session.
+ # Retrieve session.
session = @sessions[oldsessionid]
- # Eventually create new session.
+ # Eventually create new session.
if session.nil?
+ sessionid = MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s + ("%1.6f" % Time.now.to_f)).to_s while (sessionid == nil or @sessions.include?(sessionid))
+ session = RWDSession.new(sessionid)
+
if auth.nil?
- sessionid = MD5.new(req.peeraddr[3].to_s + @object.inspect.to_s).to_s
- session = RWDSession.new(sessionid)
session["object"] = @object
else
- sessionid = nil
- sessionid = MD5.new(Time.new.to_s + req.peeraddr[3].to_s + @object.inspect.to_s).to_s while (sessionid.nil? or @sessions.include?(sessionid))
- session = RWDSession.new(sessionid)
session["object"] = @object.clone
end
if oldsessionid.nil? or oldsessionid.empty?
- if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/pixel.gif"
+ if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/rwd_pixel.gif"
- # Check authentication
+ # Check authentication
us = vars["rwd_a"]
pa = vars["rwd_b"]
@@ -1080,15 +1085,15 @@
vars = {}
end
- # Avoid timeout.
+ # Avoid timeout.
session.touch
if pad == "/"
- # Serve methods/callbacks.
+ # Serve methods/callbacks.
- # Build new page.
+ # Build new page.
download = ""
downloadfile = ""
@@ -1119,29 +1124,29 @@
@sessions.delete(session.sessionid)
end
- # Eventually delete this session.
+ # Eventually delete this session.
if done
@sessions.delete(session.sessionid)
if @localbrowsing
- resp.flush
+ resp.stop
if @browserstarted and not @browserthread.nil? and @browserthread.alive?
- puts "Waiting for the browser to terminate..."
+ resp.stop do
+ puts "Waiting for the browser to terminate..."
- @browserthread.join
+ @browserthread.join
+ end
end
-
- throw :rwd_exit
end
end
else
- # Serve files.
+ # Serve files.
- if pad == "/pixel.gif"
+ if pad == "/rwd_pixel.gif"
resp["Cache-Control"] = "max-age=86400"
resp["Content-Type"] = "image/gif"
resp << $rwd_pixel
@@ -1169,6 +1174,7 @@
end
end
+
end
end
end
@@ -1181,7 +1187,7 @@
<head>
<title>%TITLE%</title>
- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+ <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
<meta http-equiv=´Content-Style-Type´ content=´text/css´>
<link rel=´shortcut icon´ href=´%LOGO%´>
@@ -1279,81 +1285,81 @@
<table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´>
@@ -1381,7 +1387,7 @@
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
</tr>
<tr align=´center´>
@@ -1398,81 +1404,81 @@
</td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´#EEEEEE´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´black´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
</table>
@@ -1492,7 +1498,7 @@
<head>
<title>%TITLE%</title>
- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+ <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
<meta http-equiv=´Content-Style-Type´ content=´text/css´>
<link rel=´shortcut icon´ href=´%LOGO%´>
@@ -1622,7 +1628,7 @@
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
+ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´%WIDTH2%´></td>
</tr>
<tr align=´center´>
@@ -1657,7 +1663,7 @@
<head>
<title>%TITLE%</title>
- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´>
+ <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
<link rel=´shortcut icon´ href=´%LOGO%´>
diff -ur rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/thread.lib.rb rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/thread.lib.rb
--- rubywebdialogs-0.1.0.tar.gz/rubywebdialogs/lib/thread.lib.rb 2005-06-04 14:42:00.080670816 +0200
+++ rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/thread.lib.rb 2004-12-05 13:58:40.000000000 +0100
@@ -0,0 +1,63 @@
+require "ev/ruby"
+require "thread"
+
+class FakeThread
+ def initialize(*args)
+ yield(*args)
+ end
+
+ def join
+ end
+end
+
+class ThreadLimiter
+ def initialize(limit)
+ @limit = limit
+ @count = 0
+ @threads = []
+ @mutex = Mutex.new
+ @cv = ConditionVariable.new
+
+ every(1) do
+ @mutex.synchronize do
+ @threads.dup.each do |t|
+ unless t.alive?
+ $stderr.puts "Found dead thread."
+
+ @threads.delete(t)
+
+ @count -= 1
+
+ @cv.signal
+ end
+ end
+ end
+ end
+ end
+
+ def wait
+ if block_given?
+ self.wait
+ yield
+ self.signal
+ else
+ @mutex.synchronize do
+ @threads << Thread.current
+
+ @count += 1
+
+ @cv.wait(@mutex) if @count > @limit
+ end
+ end
+ end
+
+ def signal
+ @mutex.synchronize do
+ @threads.delete(Thread.current)
+
+ @count -= 1
+
+ @cv.signal
+ end
+ end
+end
diff -ur rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-12-05 13:58:40.000000000 +0100
+++ rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-12-17 12:40:15.000000000 +0100
@@ -792,6 +792,7 @@
set_trace_func lambda { |event, file, line, id, binding, classname|
$stderr.printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
}
+
if block_given?
res = yield
diff -ur rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-12-05 13:58:40.000000000 +0100
+++ rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-12-17 12:40:15.000000000 +0100
@@ -40,11 +40,9 @@
Format = "\n<!-- %-10s %-10s -->\t"
unless rcfile.nil?
- $stderr.puts "Reading #{rcfile} ..."
+ puts "Reading #{rcfile} ..."
Hash.file(rcfile).each do |k, v|
- #$stderr.puts "Setting #{k} to \"#{v}\" ..."
-
ENV[k] = v unless ENV.include?(k)
end
end
@@ -276,7 +274,23 @@
when "list" then res << "<ul #{align}>"
when "item" then res << "<li #{align}>"
when "empty" then res << "<p><br>"
- when "image" then res << "<img src=´#{@args["src"]}´ alt=´#{@args["alt"]}´>"
+ when "image"
+ width = "width=´#{@args["width"]}" if @args.include?("width")
+ height = "height=´#{@args["height"]}´" if @args.include?("height")
+
+ res << "<img src=´#{@args["src"]}´ alt=´#{@args["alt"]}´ #{width} #{height}>"
+ when "progressbar"
+ width = 200
+
+ res << "<table>"
+ res << " <tr>"
+ res << " <td colspan=´2´><img src=´rwd_pixel.gif´ height=´1´ width=´#{width+5}´></td>"
+ res << " </tr>"
+ res << " <tr>"
+ res << " <td bgcolor=´#DDDDDD´><img src=´rwd_pixel.gif´ height=´10´ width=´#{(width*@args["value"].to_f).to_i}´></td>"
+ res << " <td bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´10´ width=´#{(width*(1.0-@args["value"].to_f)).to_i}´></td>"
+ res << " </tr>"
+ res << "</table>"
when "br" then res << "<br>"
when "hr" then res << "<hr>"
when "b" then res << "<b>"
@@ -344,6 +358,10 @@
res << "<input type=´submit´ value=´Back´ onclick=´document.bodyform.rwd_action.value=\"rwd_back\";´>"
firstaction << "rwd_back" if firstaction.empty?
oneormorefields << "true"
+ when "cancel"
+ res << "<input type=´submit´ value=´Cancel´ onclick=´document.bodyform.rwd_action.value=\"rwd_cancel\";´>"
+ firstaction << "rwd_cancel" if firstaction.empty?
+ oneormorefields << "true"
when "help"
res << "<input type=´submit´ value=´Help´ onclick=´document.bodyform.rwd_action.value=\"rwd_help\";´>"
firstaction << "rwd_help" if firstaction.empty?
@@ -356,9 +374,13 @@
res << "<input type=´submit´ value=´Close´ onclick=´window.close();´>"
firstaction << "rwd_quit" if firstaction.empty?
oneormorefields << "true"
+ when "main"
+ res << "<input type=´submit´ value=´Main´ onclick=´document.bodyform.rwd_action.value=\"rwd_main\";´>"
+ firstaction << "rwd_main" if firstaction.empty?
+ oneormorefields << "true"
when "reset"
res << "<input type=´reset´ value=´Reset´>"
- firstaction << "rwd_quit" if firstaction.empty?
+ firstaction << "rwd_quit" if firstaction.empty? # ???
oneormorefields << "true"
when "closewindow"
#res << "<script type=´text/javascript´>\n" # ???
@@ -467,6 +489,7 @@
when "item" then res << "</li>"
when "empty" then res << "</p>"
when "image" then res << ""
+ when "progressbar" then res << ""
when "br" then res << ""
when "hr" then res << ""
when "b" then res << "</b>"
@@ -488,9 +511,11 @@
when "option" then res << "</option>"
when "button" then res << ""
when "back" then res << ""
+ when "cancel" then res << ""
when "help" then res << ""
when "quit" then res << ""
when "close" then res << ""
+ when "main" then res << ""
when "reset" then res << ""
when "closewindow" then res << ""
when "tabs"
@@ -606,7 +631,7 @@
@helprwd = (@@helpwindows[rwd][window] or "").dup
end
- def render(pda, vars=Hash.new, switches=Hash.new, help=false, tab="")
+ def render(pda, action=nil, vars=Hash.new, switches=Hash.new, help=false, tab="")
varshtml = Hash.new
varsstring = Hash.new
oneormorefields = ""
@@ -661,6 +686,8 @@
focus = "document.bodyform.elements[0].focus();"
end
+ firstaction = action if windowobject.args.keys.include?("refresh") unless action.nil?
+
html.gsub!(/\$RWD_FIRSTACTION\$/ , firstaction)
html.gsub!(/\$RWD_FOCUS\$/ , focus)
@@ -670,13 +697,34 @@
class RWDMessage < RWDWindow
def initialize(msg)
- super("<window title=´RWD Message´ nobackbuttons noclosebutton><vertical><p>#{msg}</p><back/></vertical></window>")
+ super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>#{msg}</p><back/></window>")
end
end
class RWDError < RWDWindow
def initialize(msg)
- super("<window title=´RWD Error´ nobackbuttons noclosebutton><vertical><p><b>Error:</b> #{msg}</p><back/></vertical></window>")
+ super("<window title=´RWD Error´ nobackbuttons noclosebutton><p><b>Error:</b> #{msg}</p><back/></window>")
+ end
+end
+
+class RWDProgressBar < RWDWindow
+ def initialize(refresh, progress)
+ s = ""
+ s << "<window title=´RWD Progress´ nobackbuttons noclosebutton refresh=´#{refresh}´>"
+ if progress.length == 1
+ progress.each do |caption, value|
+ s << "<p>#{caption}</p><progressbar value=´#{value}´/><p>#{(100*value).to_i}%%</p>"
+ end
+ else
+ s << "<table>"
+ progress.each do |caption, value|
+ s << "<row><p align=´left´>#{caption}</p><progressbar value=´#{value}´/><p align=´right´>#{(100*value).to_i}%%</p></row>"
+ end
+ s << "</table>"
+ end
+ s << "<cancel/>"
+ s << "</window>"
+ super(s)
end
end
@@ -729,7 +777,7 @@
help = false
back = false
tab = ""
- @rwd_msg = nil
+ @rwd_msgtype = nil
@rwd_download = nil
@rwd_download_file = nil
@@ -751,10 +799,12 @@
# Stack handling for rwd_action, rwd_window and rwd_tab.
- @rwd_action = vars["rwd_action"]
+ @rwd_action = vars["rwd_action"] if vars.include?("rwd_action")
@rwd_action, @rwd_args = @rwd_action.split(/\//, 2) unless @rwd_action.nil?
@rwd_action, rest = @rwd_action.split(/\?/) unless @rwd_action.nil?
+ @rwd_refresh_action = (@rwd_action or @rwd_refresh_action or "main")
+
unless rest.nil?
rest.each do |s|
k, v = s.split(/=/, 2)
@@ -762,6 +812,12 @@
end
end
+ if @rwd_action == "rwd_cancel"
+ @rwd_progress_thread.kill unless @rwd_progress_thread.nil?
+ @rwd_progress_thread = nil
+ @rwd_action = "rwd_back"
+ end
+
if @rwd_action =~ /^rwd_tab_/
@rwd_tab = @rwd_action.sub(/^rwd_tab_/, "")
@rwd_history[-1][3] = @rwd_tab
@@ -820,12 +876,12 @@
# History stuff
- @rwd_history = [["main", nil, "main", nil]] if @rwd_action == "main"
- @rwd_history = [["main", nil, "main", nil]] if @rwd_history.empty?
+ @rwd_history = [["main", [], "main", ""]] if @rwd_action == "main"
+ @rwd_history = [["main", [], "main", ""]] if @rwd_history.empty?
a = [@rwd_action, @rwd_args, @rwd_window, @rwd_tab]
- @rwd_history.push a if (@rwd_history[-1] != a or not @rwd_msg.nil?)
+ @rwd_history.push a if (@rwd_history[-1] != a or not @rwd_msgtype.nil?)
end
end
@@ -842,6 +898,7 @@
puts "Pre: #{key} -> #{value.inspect}" if $rwd_debug
end
+
# Answer to browser.
if done
@@ -853,14 +910,18 @@
download << @rwd_download
downloadfile << @rwd_download_file
else
- if not @rwd_msg.nil?
+ if not @rwd_msgtype.nil?
res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message"
res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error"
else
- puts "Window: #{@rwd_window}" if $rwd_debug
- puts "Tab: #{@rwd_tab}" if $rwd_debug
+ if not @rwd_progress_thread.nil?
+ res << RWDProgressBar.new(@rwd_progress_refresh, @rwd_progress_progress).render(pda, @rwd_refresh_action)
+ else
+ puts "Window: #{@rwd_window}" if $rwd_debug
+ puts "Tab: #{@rwd_tab}" if $rwd_debug
- res << RWDWindow.new(@rwd_xml, @rwd_window).render(pda, vars, @rwd_switches, help, @rwd_tab)
+ res << RWDWindow.new(@rwd_xml, @rwd_window).render(pda, @rwd_refresh_action, vars, @rwd_switches, help, @rwd_tab)
+ end
end
end
end
@@ -872,16 +933,48 @@
@rwd_history[-1][2] == @rwd_window
end
- def message(msg)
+ def message(msg, &block)
@rwd_msg = msg
@rwd_msgtype = "message"
end
- def error(msg)
+ def error(msg, &block)
@rwd_msg = msg
@rwd_msgtype = "error"
end
+ def progressbar(refresh, *progress)
+ @rwd_progress_refresh = (refresh or 1)
+ @rwd_progress_progress = []
+
+ while not progress.empty?
+ s = (progress.shift or "")
+ if s.kind_of?(Array)
+ caption, value = s
+ value = (value or 0.0).to_f
+ else
+ caption = s
+ value = (progress.shift or 0.0).to_f
+ end
+
+ @rwd_progress_progress << [caption, value]
+ end
+
+ if @rwd_progress_thread.nil?
+ @rwd_progress_progress.each do |a|
+ a[1] = 0.0
+ end
+
+ @rwd_progress_thread =
+ Thread.new do
+ yield
+ end
+ Thread.pass
+ end
+
+ @rwd_progress_thread = nil unless @rwd_progress_thread.alive?
+ end
+
def download(data, filename="")
@rwd_download = data
@rwd_download_file = filename
@@ -996,12 +1089,12 @@
#if ENV["RWDBROWSER"].downcase =~ /iexplore/ # ???
#@ie = IE.new("http://localhost:#{port}/")
#else
- browser = ENV["RWDBROWSER"]
+ browser = ENV["RWDBROWSER"].dup
url = "http://localhost:%s/" % [port]
if cygwin?
browser.gsub!(/\\/, "/")
- browser.gsub!(/ /, "\ ")
+ browser.gsub!(/ /, "\\ ")
end
re = /[$%]1\b/
@@ -1010,7 +1103,7 @@
command.gsub!(/%port%/, port.to_s)
- system(command)
+ system(command) or puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}"
#end
puts "The browser has terminated."
@@ -1187,8 +1280,9 @@
<head>
<title>%TITLE%</title>
- <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=%CHARSET%´>
<meta http-equiv=´Content-Style-Type´ content=´text/css´>
+ <meta http-equiv=´Refresh´ content=´%REFRESH%, javascript:document.bodyform.submit();´>
<link rel=´shortcut icon´ href=´%LOGO%´>
@@ -1498,8 +1592,9 @@
<head>
<title>%TITLE%</title>
- <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=%CHARSET%´>
<meta http-equiv=´Content-Style-Type´ content=´text/css´>
+ <meta http-equiv=´Refresh´ content=´%REFRESH%, javascript:document.bodyform.submit();´>
<link rel=´shortcut icon´ href=´%LOGO%´>
@@ -1663,7 +1758,8 @@
<head>
<title>%TITLE%</title>
- <!-- <meta http-equiv=´Content-Type´ content=´text/html; charset=ISO-8859-15´> -->
+ <meta http-equiv=´Content-Type´ content=´text/html; charset=%CHARSET%´>
+ <meta http-equiv=´Refresh´ content=´%REFRESH%, javascript:document.bodyform.submit();´>
<link rel=´shortcut icon´ href=´%LOGO%´>
diff -ur rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb
--- rubywebdialogs-0.1.1.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-12-05 13:58:40.000000000 +0100
+++ rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-12-17 12:40:15.000000000 +0100
@@ -65,7 +65,7 @@
attr_writer :parent
attr_reader :children
attr_writer :children
- attr_writer :closed
+ attr_reader :closed
attr_writer :closed
attr_reader :text
attr_writer :text
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/autorequire.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/autorequire.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/autorequire.rb 2005-06-04 14:42:01.086517904 +0200
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/autorequire.rb 2004-12-30 21:05:56.000000000 +0100
@@ -0,0 +1 @@
+require newlocation("ev/rwd")
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/CHANGELOG rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/CHANGELOG
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/CHANGELOG 2005-06-04 14:42:01.087517752 +0200
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/CHANGELOG 2005-06-04 14:33:00.000000000 +0200
@@ -0,0 +1,157 @@
+----------------------------------------------------------------
+
+0.2.0 - 04.06.2005
+
+* Added better browser detection on Cygwin.
+
+* Added mime support for rwd_files/* (hard coded, for now...)
+
+* RWDialog#serve now stops the application when the application
+ is being wrapped by RubyScript2Exe. Fixed a bug concerning
+ the detection of configuration files.
+
+* Added Array#rwd_table.
+
+* Added RWDialog#text.
+
+* Added RWDialog#timeout.
+
+* I changed a lot of small other things which are probably not
+ worth mentioning individually, but enhance the total "feel"
+ of RubyWebDialogs.
+
+----------------------------------------------------------------
+
+0.1.2 - 16.12.2004
+
+* Added refresh to <window>.
+
+* Added width and height to <image>.
+
+* Added the (experimental) progress bar.
+
+* Fixed a bug concerning a frozen string ( ENV["RWDBROWSER"]).
+
+* Fixed the handling of spaces in ENV["RWDBROWSER"] under
+ Cygwin.
+
+----------------------------------------------------------------
+
+0.1.1 - 05.12.2004
+
+* Adding the key/values in the configuration file to ENV is
+ only done if ENV doesn´t already include the key.
+
+* Corrected the handling of %1 in ENV["RWDBROWSER"].
+
+* Corrected the handling of http://localhost:7701 (no final /).
+
+* Renamed the embedded pixel.gif to rwd_pixel.gif.
+
+* Removed the definition of the (western) character set in the
+ templates.
+
+----------------------------------------------------------------
+
+0.1.0 - 28.11.2004
+
+* Added browser detection for Linux.
+
+* Added theme handling.
+
+* Added <panel>.
+
+* Added alt to <image>.
+
+* Changed the layout of tabs.
+
+----------------------------------------------------------------
+
+0.0.11 - 03.09.2004
+
+* Added a different template for PDA´s and the (experimental)
+ detection of PDA´s.
+
+* Added filename handling for download.
+
+----------------------------------------------------------------
+
+0.0.10 - 21.08.2004
+
+* Session-ids are now stored in cookies, in stead of in hidden
+ form fields.
+
+* Added download.
+
+----------------------------------------------------------------
+
+0.0.9 - 15.05.2004
+
+* Default port isn´t 1234 anymore, but one in the range
+ 7701-7709.
+
+* Created RWDReconnect.
+
+* Added gsub(/%port%/, port.to_s) to ENV["RWDBROWSER"].
+
+* Changed the call to Hash#rwd_table.
+
+----------------------------------------------------------------
+
+0.0.8 - 05.05.2004
+
+* Added @rwd_call_after_back.
+
+----------------------------------------------------------------
+
+0.0.7 - 28.04.2004
+
+* Corrected some exception handling regarding the IO with the
+ browser.
+
+* Added maxlength to text and password.
+
+* Added network without authentication.
+
+----------------------------------------------------------------
+
+0.0.6 - 24.04.2004
+
+* Corrected io-handling. Konqueror could kill the application.
+
+* Changed some layout ( window and tabs).
+
+----------------------------------------------------------------
+
+0.0.5 - 23.04.2004
+
+* Replaced the symlink by a copy in install.rb . It didn´t work
+ under Linux.
+
+----------------------------------------------------------------
+
+0.0.4 - 22.04.2004
+
+* Changed the recently added tab-handling.
+
+* Corrected some cursor positioning glitches.
+
+----------------------------------------------------------------
+
+0.0.3 - 21.04.2004
+
+* A minor change in message.
+
+----------------------------------------------------------------
+
+0.0.2 - 20.04.2004
+
+* Added some tab-handling.
+
+----------------------------------------------------------------
+
+0.0.1 - 17.04.2004
+
+* Alpha release
+
+----------------------------------------------------------------
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/init.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/init.rb 2004-12-17 12:40:16.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/init.rb 2005-06-04 14:41:53.000000000 +0200
@@ -1,37 +1,64 @@
require "rbconfig"
+require "ftools"
-def mkdirrec(dir)
- pdir = File.dirname(dir)
+if __FILE__ == $0
- if not pdir.empty? and not File.directory?(pdir)
- mkdirrec (pdir)
- end
+ Dir.chdir(File.dirname($0))
- Dir.mkdir(dir) rescue nil
-end
+ FromDirs = [".", "./lib", "./rubylib/lib"]
+ ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+
+ File.mkpath(ToDir) if not File.directory?(ToDir)
+
+ FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
-Dir.chdir(File.dirname($0))
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if file =~ /\.lib\.rb$/
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
-FromDirs = [".", "./lib", "./rubylib/lib"]
-ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+ printf "%s -> %s\n", fromfile, tofile
-mkdirrec(ToDir) if not File.directory?(ToDir)
+ File.delete(tofile) if File.file?(tofile)
+
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ end
+ end
+ end
+ end
-FromDirs.each do |fromdir|
- fromdir = Dir.pwd if fromdir == "."
+else
- if File.directory?(fromdir)
- Dir.new(fromdir).each do |file|
- if file =~ /\.lib\.rb$/
- fromfile = fromdir + "/" + file
- tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+ FromDirs = [".", "./lib", "./rubylib/lib"]
+ ToDir = "./ev"
- printf "%s -> %s\n", fromfile, tofile
+ File.mkpath(ToDir) if not File.directory?(ToDir)
- File.delete(tofile) if File.file?(tofile)
+ FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
- File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if file =~ /\.lib\.rb$/
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+
+ #printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.file?(tofile)
+
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ end
end
end
end
+
+ oldlocation do
+ file = newlocation("autorequire.rb")
+
+ load file if File.file?(file)
+ end
+
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/install.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/install.rb 2004-12-17 12:40:16.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/install.rb 2005-06-04 14:41:53.000000000 +0200
@@ -1,37 +1,64 @@
require "rbconfig"
+require "ftools"
-def mkdirrec(dir)
- pdir = File.dirname(dir)
+if __FILE__ == $0
- if not pdir.empty? and not File.directory?(pdir)
- mkdirrec (pdir)
- end
+ Dir.chdir(File.dirname($0))
- Dir.mkdir(dir) rescue nil
-end
+ FromDirs = [".", "./lib", "./rubylib/lib"]
+ ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+
+ File.mkpath(ToDir) if not File.directory?(ToDir)
+
+ FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
-Dir.chdir(File.dirname($0))
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if file =~ /\.lib\.rb$/
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
-FromDirs = [".", "./lib", "./rubylib/lib"]
-ToDir = Config::CONFIG["sitelibdir"] + "/ev"
+ printf "%s -> %s\n", fromfile, tofile
-mkdirrec(ToDir) if not File.directory?(ToDir)
+ File.delete(tofile) if File.file?(tofile)
+
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ end
+ end
+ end
+ end
-FromDirs.each do |fromdir|
- fromdir = Dir.pwd if fromdir == "."
+else
- if File.directory?(fromdir)
- Dir.new(fromdir).each do |file|
- if file =~ /\.lib\.rb$/
- fromfile = fromdir + "/" + file
- tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+ FromDirs = [".", "./lib", "./rubylib/lib"]
+ ToDir = "./ev"
- printf "%s -> %s\n", fromfile, tofile
+ File.mkpath(ToDir) if not File.directory?(ToDir)
- File.delete(tofile) if File.file?(tofile)
+ FromDirs.each do |fromdir|
+ fromdir = Dir.pwd if fromdir == "."
- File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ if File.directory?(fromdir)
+ Dir.new(fromdir).each do |file|
+ if file =~ /\.lib\.rb$/
+ fromfile = fromdir + "/" + file
+ tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb")
+
+ #printf "%s -> %s\n", fromfile, tofile
+
+ File.delete(tofile) if File.file?(tofile)
+
+ File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines}
+ end
end
end
end
+
+ oldlocation do
+ file = newlocation("autorequire.rb")
+
+ load file if File.file?(file)
+ end
+
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/browser.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/browser.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/browser.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/browser.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -16,20 +16,33 @@
application = nil
begin
- Win32::Registry::HKEY_CLASSES_ROOT.open(´.html´) do |reg|
+ Win32::Registry::HKEY_CLASSES_ROOT.open(".html") do |reg|
filetype = reg[""]
end
- Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + ´\shell\open\command´) do |reg|
+ Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + "\\shell\\open\\command") do |reg|
application = reg[""]
end
rescue NameError
- $stderr.puts "Only available for Windows."
+ $stderr.puts "Only available for Windows and Cygwin."
end
application
end
+def cygwinbrowser
+ browser, *args = windowsbrowser.splitwords
+ browser = browser.gsub(/\\/, "/")
+ #browser = browser
+
+ args.collect!{|a| a.gsub(/\\/, "/")}
+ #args.collect!{|a| "\"%s\"" % [a.gsub(/\\/, "/")]}
+ #args.collect!{|a| "\"%s\"" % [a]}
+
+ res = "\"%s\" %s" % [browser, args.join(" ")]
+ res
+end
+
def linuxbrowser
application = ""
@@ -47,25 +60,26 @@
def defaultbrowser
res = nil
res = windowsbrowser if windows?
+ res = cygwinbrowser if cygwin?
res = linuxbrowser if linux?
res
end
+def showurlinbrowser(url, browser=defaultbrowser)
+ command = "#{browser} \"#{url}\""
+
+ system(command) or $stderr.puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}"
+end
+
def showinbrowser(html, browser=defaultbrowser)
port, io = TCPServer.freeport(7701, 7709)
unless browser.nil?
Thread.new do
begin
- #command = "1234 \"http://localhost:#{port}\"" if linux?
- #command = "L:/prog/MozillaFirefox/firefox.exe \"http://localhost:#{port}\"" if cygwin?
- #command = Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´)[0] + " \"http://localhost:#{port}/\"" if windows?
-
- command = "#{browser} \"http://localhost:#{port}\""
-
Thread.pass
- system(command)
+ showurlinbrowser("http://localhost:#{port}/", browser)
rescue
end
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -1,22 +1,12 @@
require "ftools"
class Dir
- def self.mkdirrec(dir)
- pdir = File.dirname(dir)
-
- if not pdir.empty? and not File.directory?(pdir)
- Dir.mkdirrec(pdir)
- end
-
- Dir.mkdir(dir) rescue nil
- end
-
def self.copy(from, to)
if File.directory?(from)
pdir = Dir.pwd
todir = File.expand_path(to)
- mkdirrec(todir)
+ File.mkpath(todir)
Dir.chdir(from)
Dir.new(".").each do |e|
@@ -26,7 +16,7 @@
else
todir = File.dirname(File.expand_path(to))
- mkdirrec(todir)
+ File.mkpath(todir)
File.copy(from, to)
end
@@ -38,6 +28,8 @@
end
def self.rm_rf(entry)
+ File.chmod(0755, entry)
+
if File.ftype(entry) == "directory"
pdir = Dir.pwd
@@ -47,16 +39,24 @@
end
Dir.chdir(pdir)
- Dir.delete(entry)
+ begin
+ Dir.delete(entry)
+ rescue => e
+ $stderr.puts e.message
+ end
else
- File.delete(entry)
+ begin
+ File.delete(entry)
+ rescue => e
+ $stderr.puts e.message
+ end
end
end
def self.find(entry=nil, mask=nil)
entry = "." if entry.nil?
- entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
+ entry = entry.gsub(/[\/\\]*$/, "") unless entry.nil?
mask = /^#{mask}$/i if mask.kind_of?(String)
@@ -77,8 +77,8 @@
ensure
Dir.chdir(pdir)
end
- rescue Errno::EACCES => error
- puts error
+ rescue Errno::EACCES => e
+ $stderr.puts e.message
end
else
res += [entry] if mask.nil? or entry =~ mask
@@ -99,7 +99,7 @@
# Rollback
if File.file?(backupfile) and File.file?(controlfile)
- $stdout.puts "Restoring #{file}..."
+ $stderr.puts "Restoring #{file}..."
File.copy(backupfile, file) # Rollback from phase 3
end
@@ -139,7 +139,11 @@
end
def self.touch(file)
- File.open(file, "a"){|f|}
+ if File.exists?(file)
+ File.utime(Time.now, File.mtime(file), file)
+ else
+ File.open(file, "a"){|f|}
+ end
end
def self.which(file)
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/mime.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/mime.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/mime.lib.rb 2005-06-04 14:42:01.091517144 +0200
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/mime.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -0,0 +1,328 @@
+module EVMime
+ MimeType = {}
+
+ MimeType[´123´] = ´application/vnd.lotus-1-2-3´
+ MimeType[´3ds´] = ´image/x-3ds´
+ MimeType[´a´] = ´application/x-unix-archive´
+ MimeType[´abw´] = ´application/x-abiword´
+ MimeType[´ac3´] = ´audio/ac3´
+ MimeType[´afm´] = ´application/x-font-afm´
+ MimeType[´ag´] = ´image/x-applix-graphic´
+ MimeType[´aif´] = ´audio/x-aiff´
+ MimeType[´aifc´] = ´audio/x-aiff´
+ MimeType[´aiff´] = ´audio/x-aiff´
+ MimeType[´ap´] = ´application/x-applix-presents´
+ MimeType[´ape´] = ´application/x-ape´
+ MimeType[´arj´] = ´application/x-arj´
+ MimeType[´as´] = ´application/x-applix-spreadsheet´
+ MimeType[´asc´] = ´text/plain´
+ MimeType[´asf´] = ´video/x-ms-asf´
+ MimeType[´asp´] = ´application/x-asp´
+ MimeType[´asx´] = ´audio/x-ms-asx´
+ MimeType[´au´] = ´audio/x-ulaw´
+ MimeType[´avi´] = ´video/x-msvideo´
+ MimeType[´aw´] = ´application/x-applix-word´
+ MimeType[´bak´] = ´application/x-backup´
+ MimeType[´bcpio´] = ´application/x-bcpio´
+ MimeType[´bdf´] = ´application/x-font-bdf´
+ MimeType[´bib´] = ´text/bib´
+ MimeType[´bin´] = ´application/octet-stream´
+ MimeType[´blend´] = ´application/x-blender´
+ MimeType[´blender´] = ´application/x-blender´
+ MimeType[´bmp´] = ´image/bmp´
+ MimeType[´bz´] = ´application/x-bzip´
+ MimeType[´bz2´] = ´application/x-bzip´
+ MimeType[´c´] = ´text/x-c´
+ MimeType[´c++´] = ´text/x-c++´
+ MimeType[´cc´] = ´text/x-c++´
+ MimeType[´cdf´] = ´application/x-netcdf´
+ MimeType[´cdr´] = ´application/vnd.corel-draw´
+ MimeType[´cgi´] = ´application/x-cgi´
+ MimeType[´cgm´] = ´image/cgm´
+ MimeType[´class´] = ´application/x-java-byte-code´
+ MimeType[´cls´] = ´text/x-tex´
+ MimeType[´cpio´] = ´application/x-cpio´
+ MimeType[´cpp´] = ´text/x-c++´
+ MimeType[´csh´] = ´text/x-csh´
+ MimeType[´css´] = ´text/css´
+ MimeType[´csv´] = ´text/x-comma-separated-values´
+ MimeType[´dat´] = ´video/mpeg´
+ MimeType[´dbf´] = ´application/x-xbase´
+ MimeType[´dc´] = ´application/x-dc-rom´
+ MimeType[´dcl´] = ´text/x-dcl´
+ MimeType[´dcm´] = ´image/x-dcm´
+ MimeType[´deb´] = ´application/x-deb´
+ MimeType[´desktop´] = ´application/x-gnome-app-info´
+ MimeType[´dia´] = ´application/x-dia-diagram´
+ MimeType[´diff´] = ´text/x-patch´
+ MimeType[´djv´] = ´image/vnd.djvu´
+ MimeType[´djvu´] = ´image/vnd.djvu´
+ MimeType[´doc´] = ´application/msword´
+ MimeType[´dsl´] = ´text/x-dsl´
+ MimeType[´dtd´] = ´text/x-dtd´
+ MimeType[´dvi´] = ´application/x-dvi´
+ MimeType[´dwg´] = ´image/vnd.dwg´
+ MimeType[´dxf´] = ´image/vnd.dxf´
+ MimeType[´el´] = ´text/x-emacs-lisp´
+ MimeType[´emf´] = ´image/x-emf´
+ MimeType[´eps´] = ´application/postscript´
+ MimeType[´etheme´] = ´application/x-e-theme´
+ MimeType[´etx´] = ´text/x-setext´
+ MimeType[´exe´] = ´application/x-ms-dos-executable´
+ MimeType[´ez´] = ´application/andrew-inset´
+ MimeType[´f´] = ´text/x-fortran´
+ MimeType[´fig´] = ´image/x-xfig´
+ MimeType[´fits´] = ´image/x-fits´
+ MimeType[´flac´] = ´audio/x-flac´
+ MimeType[´flc´] = ´video/x-flc´
+ MimeType[´fli´] = ´video/x-fli´
+ MimeType[´gb´] = ´application/x-gameboy-rom´
+ MimeType[´gchempaint´] = ´application/x-gchempaint´
+ MimeType[´gcrd´] = ´text/x-vcard´
+ MimeType[´gcrystal´] = ´application/x-gcrystal´
+ MimeType[´gem´] = ´text/x-rubygem´
+ MimeType[´gen´] = ´application/x-genesis-rom´
+ MimeType[´gg´] = ´application/x-sms-rom´
+ MimeType[´gif´] = ´image/gif´
+ MimeType[´glade´] = ´application/x-glade´
+ MimeType[´gnc´] = ´application/x-gnucash´
+ MimeType[´gnucash´] = ´application/x-gnucash´
+ MimeType[´gnumeric´] = ´application/x-gnumeric´
+ MimeType[´gray´] = ´image/x-gray´
+ MimeType[´gtar´] = ´application/x-gtar´
+ MimeType[´gz´] = ´application/x-gzip´
+ MimeType[´h´] = ´text/x-c-header´
+ MimeType[´h++´] = ´text/x-c-header´
+ MimeType[´hdf´] = ´application/x-hdf´
+ MimeType[´hlls´] = ´text/x-hllapiscript´
+ MimeType[´hpp´] = ´text/x-c-header´
+ MimeType[´hs´] = ´text/x-haskell´
+ MimeType[´htm´] = ´text/html´
+ MimeType[´html´] = ´text/html´
+ MimeType[´icb´] = ´image/x-icb´
+ MimeType[´ico´] = ´image/x-ico´
+ MimeType[´ics´] = ´text/calendar´
+ MimeType[´idl´] = ´text/x-idl´
+ MimeType[´ief´] = ´image/ief´
+ MimeType[´iff´] = ´image/x-iff´
+ MimeType[´ilbm´] = ´image/x-ilbm´
+ MimeType[´iso´] = ´application/x-iso-image´
+ MimeType[´it´] = ´audio/x-it´
+ MimeType[´jar´] = ´application/x-java-archive´
+ MimeType[´java´] = ´text/x-java´
+ MimeType[´jpe´] = ´image/jpeg´
+ MimeType[´jpeg´] = ´image/jpeg´
+ MimeType[´jpg´] = ´image/jpeg´
+ MimeType[´jpr´] = ´application/x-jbuilder-project´
+ MimeType[´jpx´] = ´application/x-jbuilder-project´
+ MimeType[´js´] = ´text/x-javascript´
+ MimeType[´kdelnk´] = ´application/x-kde-app-info´
+ MimeType[´kil´] = ´application/x-killustrator´
+ MimeType[´kpr´] = ´application/x-kpresenter´
+ MimeType[´ksp´] = ´application/x-kspread´
+ MimeType[´kwd´] = ´application/x-kword´
+ MimeType[´la´] = ´application/x-shared-library-la´
+ MimeType[´lha´] = ´application/x-lha´
+ MimeType[´lhs´] = ´text/x-literate-haskell´
+ MimeType[´lhz´] = ´application/x-lhz´
+ MimeType[´lo´] = ´application/x-object-file´
+ MimeType[´ltx´] = ´text/x-tex´
+ MimeType[´lwo´] = ´image/x-lwo´
+ MimeType[´lwob´] = ´image/x-lwo´
+ MimeType[´lws´] = ´image/x-lws´
+ MimeType[´lyx´] = ´text/x-lyx´
+ MimeType[´m´] = ´text/x-objc´
+ MimeType[´m3u´] = ´audio/x-mpegurl´
+ MimeType[´m4a´] = ´audio/x-m4a´
+ MimeType[´man´] = ´text/x-troff-man´
+ MimeType[´md´] = ´application/x-genesis-rom´
+ MimeType[´me´] = ´text/x-troff-me´
+ MimeType[´mgp´] = ´application/x-magicpoint´
+ MimeType[´mid´] = ´audio/x-midi´
+ MimeType[´midi´] = ´audio/x-midi´
+ MimeType[´mif´] = ´application/x-mif´
+ MimeType[´miff´] = ´image/x-miff´
+ MimeType[´mm´] = ´text/x-troff-mm´
+ MimeType[´mml´] = ´text/mathml´
+ MimeType[´mod´] = ´audio/x-mod´
+ MimeType[´mov´] = ´video/quicktime´
+ MimeType[´movie´] = ´video/x-sgi-movie´
+ MimeType[´mp1´] = ´audio/mpeg´
+ MimeType[´mp2´] = ´video/mpeg´
+ MimeType[´mp3´] = ´audio/mpeg´
+ MimeType[´mpe´] = ´video/mpeg´
+ MimeType[´mpeg´] = ´video/mpeg´
+ MimeType[´mpg´] = ´video/mpeg´
+ MimeType[´mrp´] = ´application/x-mrproject´
+ MimeType[´mrproject´] = ´application/x-mrproject´
+ MimeType[´ms´] = ´text/x-troff-ms´
+ MimeType[´msx´] = ´application/x-msx-rom´
+ MimeType[´n64´] = ´application/x-n64-rom´
+ MimeType[´nc´] = ´application/x-netcdf´
+ MimeType[´nes´] = ´application/x-nes-rom´
+ MimeType[´nsv´] = ´video/x-nsv´
+ MimeType[´o´] = ´application/x-object-file´
+ MimeType[´oda´] = ´application/oda´
+ MimeType[´ogg´] = ´application/ogg´
+ MimeType[´oleo´] = ´application/x-oleo´
+ MimeType[´p´] = ´text/x-pascal´
+ MimeType[´palm´] = ´image/x-palm´
+ MimeType[´pas´] = ´text/x-pascal´
+ MimeType[´pascal´] = ´text/x-pascal´
+ MimeType[´patch´] = ´text/x-patch´
+ MimeType[´pbm´] = ´image/x-portable-bitmap´
+ MimeType[´pcd´] = ´image/x-photo-cd´
+ MimeType[´pcf´] = ´application/x-font-pcf´
+ MimeType[´pct´] = ´image/x-pict´
+ MimeType[´pcx´] = ´image/x-pcx´
+ MimeType[´pdb´] = ´application/x-palm-database´
+ MimeType[´pdf´] = ´application/pdf´
+ MimeType[´perl´] = ´text/x-perl´
+ MimeType[´pfa´] = ´application/x-font-type1´
+ MimeType[´pfb´] = ´application/x-font-type1´
+ MimeType[´pgm´] = ´image/x-portable-graymap´
+ MimeType[´pgn´] = ´application/x-chess-pgn´
+ MimeType[´pgp´] = ´application/pgp´
+ MimeType[´php´] = ´application/x-php´
+ MimeType[´php3´] = ´application/x-php´
+ MimeType[´php4´] = ´application/x-php´
+ MimeType[´pict´] = ´image/x-pict´
+ MimeType[´pl´] = ´text/x-perl´
+ MimeType[´pls´] = ´audio/x-scpls´
+ MimeType[´pm´] = ´text/x-perl´
+ MimeType[´png´] = ´image/png´
+ MimeType[´pnm´] = ´image/x-portable-anymap´
+ MimeType[´po´] = ´text/x-po´
+ MimeType[´pp´] = ´text/x-pascal´
+ MimeType[´ppm´] = ´image/x-portable-pixmap´
+ MimeType[´pps´] = ´application/vnd.ms-powerpoint´
+ MimeType[´ppt´] = ´application/vnd.ms-powerpoint´
+ MimeType[´ps´] = ´application/postscript´
+ MimeType[´psd´] = ´image/x-psd´
+ MimeType[´psf´] = ´application/x-font-linux-psf´
+ MimeType[´psid´] = ´audio/prs.sid´
+ MimeType[´py´] = ´text/x-python´
+ MimeType[´pyc´] = ´application/x-python-byte-code´
+ MimeType[´qif´] = ´application/qif´
+ MimeType[´qt´] = ´video/quicktime´
+ MimeType[´ra´] = ´audio/x-real-audio´
+ MimeType[´ram´] = ´audio/x-pn-realaudio´
+ MimeType[´rar´] = ´application/x-rar´
+ MimeType[´ras´] = ´image/x-cmu-raster´
+ MimeType[´rb´] = ´text/x-ruby´
+ MimeType[´rba´] = ´text/x-ruby´
+ MimeType[´rbw´] = ´text/x-ruby´
+ MimeType[´rej´] = ´application/x-reject´
+ MimeType[´rgb´] = ´image/x-rgb´
+ MimeType[´rm´] = ´audio/x-real-audio´
+ MimeType[´roff´] = ´text/x-troff´
+ MimeType[´rpm´] = ´application/x-rpm´
+ MimeType[´rtf´] = ´application/rtf´
+ MimeType[´rtx´] = ´text/richtext´
+ MimeType[´ruby´] = ´text/x-ruby´
+ MimeType[´rubyw´] = ´text/x-ruby´
+ MimeType[´rv´] = ´audio/x-real-audio´
+ MimeType[´s´] = ´text/x-asm´
+ MimeType[´s3m´] = ´audio/x-s3m´
+ MimeType[´scm´] = ´text/x-scheme´
+ MimeType[´sda´] = ´application/vnd.stardivision.draw´
+ MimeType[´sdc´] = ´application/vnd.stardivision.calc´
+ MimeType[´sdd´] = ´application/vnd.stardivision.impress´
+ MimeType[´sdp´] = ´application/vnd.stardivision.impress´
+ MimeType[´sds´] = ´application/vnd.stardivision.chart´
+ MimeType[´sdw´] = ´application/vnd.stardivision.writer´
+ MimeType[´sgi´] = ´image/x-sgi´
+ MimeType[´sgl´] = ´application/vnd.stardivision.writer´
+ MimeType[´sgm´] = ´text/sgml´
+ MimeType[´sgml´] = ´text/sgml´
+ MimeType[´sh´] = ´text/x-sh´
+ MimeType[´shar´] = ´application/x-shar´
+ MimeType[´sid´] = ´audio/prs.sid´
+ MimeType[´slk´] = ´text/spreadsheet´
+ MimeType[´smd´] = ´application/vnd.stardivision.mail´
+ MimeType[´smf´] = ´application/vnd.stardivision.math´
+ MimeType[´smi´] = ´application/x-smil´
+ MimeType[´smil´] = ´application/x-smil´
+ MimeType[´sml´] = ´application/x-smil´
+ MimeType[´sms´] = ´application/x-sms-rom´
+ MimeType[´snd´] = ´audio/basic´
+ MimeType[´so´] = ´application/x-shared-library´
+ MimeType[´spd´] = ´application/x-font-speedo´
+ MimeType[´sql´] = ´text/x-sql´
+ MimeType[´src´] = ´application/x-wais-source´
+ MimeType[´stc´] = ´application/vnd.sun.xml.calc.template´
+ MimeType[´std´] = ´application/vnd.sun.xml.draw.template´
+ MimeType[´sti´] = ´application/vnd.sun.xml.impress.template´
+ MimeType[´stm´] = ´audio/x-stm´
+ MimeType[´stw´] = ´application/vnd.sun.xml.writer.template´
+ MimeType[´sty´] = ´text/x-tex´
+ MimeType[´sun´] = ´image/x-sun-raster´
+ MimeType[´sv4cpio´] = ´application/x-sv4cpio´
+ MimeType[´sv4crc´] = ´application/x-sv4crc´
+ MimeType[´svg´] = ´image/svg+xml´
+ MimeType[´svgz´] = ´image/svg+xml´
+ MimeType[´swf´] = ´application/x-shockwave-flash´
+ MimeType[´sxc´] = ´application/vnd.sun.xml.calc´
+ MimeType[´sxd´] = ´application/vnd.sun.xml.draw´
+ MimeType[´sxg´] = ´application/vnd.sun.xml.writer.global´
+ MimeType[´sxi´] = ´application/vnd.sun.xml.impress´
+ MimeType[´sxm´] = ´application/vnd.sun.xml.math´
+ MimeType[´sxw´] = ´application/vnd.sun.xml.writer´
+ MimeType[´sylk´] = ´text/spreadsheet´
+ MimeType[´t´] = ´text/x-troff´
+ MimeType[´tar´] = ´application/x-tar´
+ MimeType[´tcl´] = ´text/x-tcl´
+ MimeType[´tex´] = ´text/x-tex´
+ MimeType[´texi´] = ´text/x-texinfo´
+ MimeType[´texinfo´] = ´text/x-texinfo´
+ MimeType[´tga´] = ´image/x-tga´
+ MimeType[´tgz´] = ´application/x-compressed-tar´
+ MimeType[´theme´] = ´application/x-theme´
+ MimeType[´tif´] = ´image/tiff´
+ MimeType[´tiff´] = ´image/tiff´
+ MimeType[´torrent´] = ´application/x-bittorrent´
+ MimeType[´tr´] = ´text/x-troff´
+ MimeType[´tsv´] = ´text/tab-separated-values´
+ MimeType[´ttc´] = ´application/x-font-ttf´
+ MimeType[´ttf´] = ´application/x-font-ttf´
+ MimeType[´txt´] = ´text/plain´
+ MimeType[´ustar´] = ´application/x-ustar´
+ MimeType[´vcf´] = ´text/x-vcalendar´
+ MimeType[´vcs´] = ´text/x-vcalendar´
+ MimeType[´vi´] = ´text/x-vi´
+ MimeType[´vim´] = ´text/x-vi´
+ MimeType[´viv´] = ´video/vnd.vivo´
+ MimeType[´vivo´] = ´video/vnd.vivo´
+ MimeType[´vob´] = ´video/mpeg´
+ MimeType[´voc´] = ´audio/x-voc´
+ MimeType[´vor´] = ´application/vnd.stardivision.writer´
+ MimeType[´wav´] = ´audio/x-wav´
+ MimeType[´wax´] = ´audio/x-ms-asx´
+ MimeType[´wk1´] = ´application/vnd.lotus-1-2-3´
+ MimeType[´wk3´] = ´application/vnd.lotus-1-2-3´
+ MimeType[´wk4´] = ´application/vnd.lotus-1-2-3´
+ MimeType[´wks´] = ´application/vnd.lotus-1-2-3´
+ MimeType[´wmf´] = ´image/x-wmf´
+ MimeType[´wmv´] = ´video/x-ms-wmv´
+ MimeType[´wrl´] = ´model/vrml´
+ MimeType[´wvx´] = ´video/x-ms-wvx´
+ MimeType[´xac´] = ´application/x-gnucash´
+ MimeType[´xbel´] = ´application/xbel´
+ MimeType[´xbm´] = ´image/x-xbitmap´
+ MimeType[´xcf´] = ´image/x-xcf´
+ MimeType[´xi´] = ´audio/x-xi´
+ MimeType[´xla´] = ´application/vnd.ms-excel´
+ MimeType[´xlc´] = ´application/vnd.ms-excel´
+ MimeType[´xld´] = ´application/vnd.ms-excel´
+ MimeType[´xls´] = ´application/vnd.ms-excel´
+ MimeType[´xlt´] = ´application/vnd.ms-excel´
+ MimeType[´xm´] = ´audio/x-xm´
+ MimeType[´xml´] = ´text/xml´
+ MimeType[´xpm´] = ´image/x-xpixmap´
+ MimeType[´xwd´] = ´image/x-xwindowdump´
+ MimeType[´y´] = ´text/x-yacc´
+ MimeType[´yacc´] = ´text/x-yacc´
+ MimeType[´z´] = ´application/x-compress´
+ MimeType[´zip´] = ´application/zip´
+ MimeType[´zoo´] = ´application/x-zoo´
+end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/net.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/net.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -1,5 +1,6 @@
require "ev/ruby"
require "ev/ftools"
+require "ev/mime"
require "net/http"
require "socket"
require "uri"
@@ -13,11 +14,11 @@
if File.file?(file)
Hash.file(file).each do |k, v|
eval "$#{k} = ´#{v}´" unless k=~ /^\#/
- #$proxy_auth = [$proxy_auth].pack("m").chomp if k == "proxy_auth"
end
end
def uri2txt(s)
+ # ??? Werkt niet goed
i = s.index(/%[[:digit:]]{2}/)
while not i.nil?
s = s[0..(i-1)] + s[(i+1)..(i+2)].unpack(´H2´).shift.to_i.chr + s[(i+3)..-1]
@@ -147,6 +148,8 @@
rescue
end
+ @path = "/" if (not @path.nil? and @path.empty? and @protocol == "http")
+
@protocol = "" if @protocol.nil?
@userpass = "" if @userpass.nil?
@host = "" if @host.nil?
@@ -163,7 +166,7 @@
@port = @port.to_i
end
- def + (url2)
+ def +(url2)
url1 = self.to_s
url2 = url2.to_s if url2.kind_of?(self.class)
@@ -174,7 +177,7 @@
protocol = @protocol
userpass = @userpass
host = @host
- port = @port.to_s
+ port = @port
path = @path
vars = varstring
anchor = @anchor
@@ -196,6 +199,33 @@
return res
end
+ def localname
+ protocol = @protocol
+ userpass = @userpass
+ host = @host
+ port = @port
+ path = @path
+ vars = varstring
+ anchor = @anchor
+
+ protocol = nil if @protocol.empty?
+ userpass = nil if @userpass.empty?
+ host = nil if @host.empty?
+ port = nil if @port.zero?
+ path = nil if @path.empty?
+ vars = nil if @vars.empty?
+ anchor = nil if @anchor.empty?
+
+ path = "#{path}." if path =~ /[\/\\]$/
+
+ f = MD5.new(protocol.to_s + userpass.to_s + host.to_s + port.to_s + File.dirname(path.to_s) + vars.to_s).to_s
+ e = File.basename(path.to_s).gsub(/[^\w\.\-]/, "_").gsub(/_+/, "_")
+ res = f + "." + e
+ res.gsub!(/[^\w]+$/, "")
+
+ return res
+ end
+
def varstring
res = []
vars = @vars.dup
@@ -281,36 +311,52 @@
end
end
+ class NoAddressException < StandardError
+ end
+
+ def self.getaddress(host)
+ if not @@hosts.include?(host)
+ @@hosts[host] = ""
+ evtimeout(5) do # ??? Doet ´ut niet?...
+ @@hosts[host] = IPSocket.getaddress(host)
+ end
+ end
+
+ raise NoAddressException, host if @@hosts[host].empty?
+
+ @@hosts[host]
+ end
+
def self.head(uri, form={}, recursive=true)
header = Header.new(nil)
begin
while not uri.nil?
- if $proxy.nil? or $proxy.empty?
- uri = EVURI.new(uri) if uri.kind_of? String
- host = uri.host
- port = uri.port
+ uri = EVURI.new(uri) if uri.kind_of? String
+ host = uri.host
+ port = uri.port
+
+ if $proxy.nil? or $proxy.empty? or host == "localhost"
io = nil
@@mutex.synchronize do
- @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host)
- io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port)
+ io = TCPSocket.new(getaddress(host), port.zero? ? 80 : port)
end
io.write("HEAD #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\n\r\n")
else
proxy = EVURI.new($proxy)
- host = proxy.host
- port = proxy.port
-
- io = TCPSocket.new(host, port.zero? ? 8080 : port)
+ io = TCPSocket.new(proxy.host, proxy.port.zero? ? 8080 : proxy.port)
io.write("HEAD #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}\r\n\r\n")
end
io.close_write
- res = io.read
+ res = io.read
+
+ io.close_read
+
header, data = nil, nil
header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil?
header = Header.new(header)
@@ -321,14 +367,23 @@
uri = nil
end
end
- rescue
+ rescue Errno::ECONNRESET, Errno::EHOSTUNREACH => e
+ $stderr.puts e.message
+ sleep 1
+ retry
+ rescue Errno::ECONNREFUSED => e
+ data = nil
+ rescue NoAddressException => e
+ $stderr.puts e.message
header = Header.new(nil)
end
+ GC.start
+
return header
end
- def self.get(uri, form={})
+ def self.get(uri, httpheader={}, form={})
post = Array.new
form.each_pair do |var, value|
post << "#{var.to_html}=#{value.to_html}"
@@ -339,15 +394,14 @@
begin
while not uri.nil?
- if $proxy.nil? or $proxy.empty?
- uri = EVURI.new(uri) if uri.kind_of? String
- host = uri.host
- port = uri.port
+ uri = EVURI.new(uri) if uri.kind_of? String
+ host = uri.host
+ port = uri.port
+ if $proxy.nil? or $proxy.empty? or host == "localhost"
io = nil
@@mutex.synchronize do
- @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host)
- io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port)
+ io = TCPSocket.new(getaddress(host), port.zero? ? 80 : port)
end
if post.empty?
@@ -357,10 +411,7 @@
end
else
proxy = EVURI.new($proxy)
- host = proxy.host
- port = proxy.port
-
- io = TCPSocket.new(host, port.zero? ? 8080 : port)
+ io = TCPSocket.new(proxy.host, proxy.port.zero? ? 8080 : proxy.port)
if post.empty?
io.write "GET %s HTTP/1.0\r\n" % uri
@@ -370,22 +421,32 @@
end
io.write "Host: %s\r\n" % host
- io.write "User-Agent: evwget\r\n"
- io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
+ io.write "User-Agent: xyz\r\n"
+ io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil?
#io.write "Accept-Encoding: deflate\r\n"
- #io.write "Connection: close\r\n"
+ #io.write "Accept-Charset: ISO-8859-1\r\n"
+ io.write "Connection: close\r\n"
io.write "Content-Type: application/x-www-form-urlencoded\r\n" unless post.empty?
io.write "Content-Length: %s\r\n" % post.length unless post.empty?
+ httpheader.each do |k, v|
+ $stderr.puts "%s: %s\r\n" % [k, v]
+ io.write "%s: %s\r\n" % [k, v]
+ end
io.write "\r\n"
io.write post unless post.empty?
io.close_write
res = io.read
+
+ io.close_read
+
header, data = nil, nil
header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil?
header = Header.new(header)
+ length = header.header["content-length"]
+ data = "" if length == "0"
if header.header["location"] != uri.to_s
uri = EVURI.new(uri) + header.header["location"]
@@ -397,12 +458,25 @@
data = Chunk.new(data).to_s if not data.nil?
end
+ #if header.header["content-encoding"] == "gzip"
+ #data = "gzip -d".exec(data) if not data.nil?
+ #end
+
data = nil unless header.code == 200
end
- rescue
+ rescue Errno::ECONNRESET, Errno::EHOSTUNREACH => e
+ $stderr.puts e.message
+ sleep 1
+ retry
+ rescue Errno::ECONNREFUSED => e
+ data = nil
+ rescue NoAddressException, Errno::ECONNREFUSED => e
+ $stderr.puts e.message
data = nil
end
+ GC.start
+
return data
end
@@ -422,7 +496,7 @@
file = "#{dir}/#{hash}"
data = nil
- Dir.mkdirrec(dir)
+ File.mkpath(dir)
expire = 356*24*60*60
@@ -447,7 +521,7 @@
class RequestGet < Hash
def initialize(data)
CGI.parse(data).each do |k, v|
- self[k] = v.join(" ")
+ self[k] = v
end
end
end
@@ -455,7 +529,7 @@
class RequestPost < Hash
def initialize(data)
CGI.parse(data).each do |k, v|
- self[k] = v.join(" ")
+ self[k] = v
end
end
end
@@ -493,6 +567,8 @@
attr_reader :request
attr_reader :cookies
attr_reader :vars
+ attr_reader :user
+ attr_writer :user
def initialize(io)
@io = io
@@ -562,6 +638,7 @@
class Response < Hash
attr_writer :response
+ attr_writer :file
attr_reader :cookies
attr_reader :stop
attr_reader :at_stop
@@ -574,10 +651,20 @@
@syncd = false
@stop = false
@at_stop = lambda{}
+ @file = nil
end
def flush
sync
+
+ if @file
+ File.open(@file, "rb") do |f|
+ while data = f.read(10_000)
+ @io.write data
+ end
+ end
+ end
+
@io.close
end
@@ -595,6 +682,21 @@
end
def sync
+ size = (@data or "").length
+
+ if @file
+ ext = @file.scan(/\.[^\.]*$/)
+ ext = ext.shift
+ ext = ext[1..-1] unless ext.nil?
+ mimetype = EVMime::MimeType[ext]
+
+ self["Content-Type"] = mimetype unless mimetype.nil?
+
+ size += File.size(@file) if File.file?(@file)
+ end
+
+ self["Content-Length"] = size
+
@io.write("#{to_s}\r\n") unless @syncd
@io.write(@data)
@data = ""
@@ -605,6 +707,10 @@
@data << s
end
+ def clean
+ @data = ""
+ end
+
def inspect
"(Response: %s)" % [@response, @data].join(", ")
end
@@ -640,7 +746,7 @@
count = 0
at_exit do
- $stderr.puts "Received #{count} requests"
+ #$stderr.puts "Received #{count} requests"
end
serverthread =
@@ -678,7 +784,7 @@
end
if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp)))
- $stderr.puts "#{count2}, #{Time.new.strftime("%Y-%m-%d.%H:%M:%S")}, #{ip}, #{req.request.to_s.strip}"
+ $stderr.puts "#{count2} #{Time.new.strftime("%Y-%m-%d %H:%M:%S")} #{ip} #{req.user} #{req.request.to_s.strip}"
begin
yield(req, resp)
@@ -687,6 +793,16 @@
$stderr.puts e.class.to_s + ": " + e.message
$stderr.puts e.backtrace.collect{|s| "\t"+s}.join("\n")
end
+ resp["Content-Type"] = "text/plain"
+ resp.response = "HTTP/1.0 200 ???"
+ resp.clean
+ resp << e.class.to_s + ": " + e.message
+ resp << "\n"
+ resp << "\n"
+ resp << e.backtrace.collect{|s| "\t"+s}.join("\n")
+ resp << "\n"
+ resp << "\n"
+ resp << "(You can use the back button and stop the application properly, if appropriate.)"
end
stop = true if resp.stop?
@@ -738,13 +854,13 @@
ok = (auths.include?(u) and auths[u] == p)
- if ok
-
- else
+ unless ok
resp["WWW-Authenticate"] = "Basic realm=\"#{realm}\""
resp.response = "HTTP/1.0 401 Unauthorized"
end
+ req.user = u
+
return ok
end
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -18,14 +18,16 @@
tekens31 = ´\w\s\r\n´
-RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord)
-RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2)
-RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText)
-RegExpStringFile = ´(\w[\w\.\-]*)´ ; RegExpFile = Regexp.new(RegExpStringFile)
-RegExpStringEmail = ´([\w\-\.]+@[\w\-\.]+)´ ; RegExpEmail = Regexp.new(RegExpStringEmail)
-RegExpStringURL = ´(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)´ ; RegExpURL = Regexp.new(RegExpStringURL)
-RegExpStringPrint = ´([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\´\"\,\.\/\<\>\?\\\|]+)´ ; RegExpPrint = Regexp.new(RegExpStringPrint)
-RegExpStringDiff = ´(^[\-\+]([^\-\+].*)?)´ ; RegExpDiff = Regexp.new(RegExpStringDiff)
+RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord)
+RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2)
+RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText)
+RegExpStringFile = ´(\w[\w\.\-]*)´ ; RegExpFile = Regexp.new(RegExpStringFile)
+RegExpStringEmail = ´([\w\-\.]+@[\w\-\.]+)´ ; RegExpEmail = Regexp.new(RegExpStringEmail)
+RegExpStringURL = ´(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)´ ; RegExpURL = Regexp.new(RegExpStringURL)
+RegExpStringPrint = ´([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\´\"\,\.\/\<\>\?\\\|]+)´ ; RegExpPrint = Regexp.new(RegExpStringPrint)
+RegExpStringDiff = ´(^[\-\+]([^\-\+].*)?)´ ; RegExpDiff = Regexp.new(RegExpStringDiff)
+RegExpStringHTHLink = ´(`[\w\,]*\ba\b[^`]*`)´ ; RegExpHTHLink = Regexp.new(RegExpStringHTHLink)
+RegExpStringHTHSpecial = ´(`[^`]*`)´ ; RegExpHTHSpecial = Regexp.new(RegExpStringHTHSpecial)
module Enumerable
def deep_dup
@@ -64,6 +66,10 @@
def to_fs
to_f
end
+
+ def to_html(eolconversion=true)
+ self.to_s.to_html(eolconversion)
+ end
end
class Integer
@@ -211,8 +217,8 @@
end
def splitwords(tokens=[])
- tokens = [tokens] unless tokens.kind_of?(Array)
- res = []
+ tokens = [tokens] unless tokens.kind_of?(Array)
+ res = []
self.splitblocks(["´", "´"], [´"´, ´"´]).each do |type, s|
case type
@@ -437,13 +443,14 @@
end
def format(format)
+ format = format.gsub(/\s/, "")
res = []
[format.length, self.length].min.times do |n|
- case format[n].chr
- when "i" then res << self[n].to_i
- when "s" then res << self[n].to_s
- when "x" then res << self[n]
+ case format[n].chr.downcase
+ when "i" then res << self[n].to_i
+ when "s" then res << self[n].to_s
+ else res << self[n]
end
end
@@ -540,6 +547,36 @@
def ids
collect{|e| e.ids}
end
+
+ def rotate
+ raise "Array has to be 2D (An Array of Arrays)." unless self.dup.delete_if{|a| a.kind_of?(Array)}.empty?
+
+ res = []
+
+ self[0].length.times do |x|
+ a = []
+
+ self.length.times do |y|
+ a << self[y][x]
+ end
+
+ res << a
+ end
+
+ res
+ end
+
+ def to_h
+ raise "Array has to be 2D (An Array of Arrays)." unless self.dup.delete_if{|a| a.kind_of?(Array)}.empty?
+
+ res = {}
+
+ self.each do |k, v, *rest|
+ res[k] = v
+ end
+
+ res
+ end
end
class Hash
@@ -699,7 +736,11 @@
end
def linux?
- not windows? and not cygwin?
+ not (target_os.downcase =~ /linux/).nil?
+end
+
+def darwin?
+ not (target_os.downcase =~ /darwin/).nil?
end
def windows?
@@ -727,8 +768,9 @@
end
def stdtmp
- $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") unless ARGV.include?("--rwd-exit")
+ $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a")
end
+stdtmp if defined?(RUBYSCRIPT2EXE) and (RUBYSCRIPT2EXE =~ /rubyw/i)
$nobm = false
@@ -745,7 +787,7 @@
end
end
- label = label.to_s
+ label = label.inspect #unless label.kind_of?(String)
res = nil
$bm_mutex = ($bm_mutex or Mutex.new)
@@ -757,29 +799,41 @@
$bm = {}
at_exit do
- format1 = "%10s %10s %10s %10s %10s %10s %10s"
- format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d"
-
- $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"]
- $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v|
- $stderr.puts format2 % [k, *v]
+ l = $bm.keys.collect{|s| s.length}.max
+ #format1 = "%10s %10s %10s %10s %10s %10s %s"
+ #format2 = "%10.6f %10.6f %10.6f %10.6f %10.6f %10d %s"
+ #$stderr.puts format1 % ["USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "COUNT", "LABEL"]
+ #$bm.sort{|a, b| [b[1], b[0]] <=> [a[1], a[0]]}.each do |k, v|
+ #$stderr.puts format2 % (v + [k])
+ #end
+
+ format1 = "%10s %10s %10s %s"
+ format2 = "%10.6f %10.6f %10d %s"
+ $bm.each do |k, v|
+ $bm[k] = [v[0]+v[1], v[4], v[5]]
+ end
+ $stderr.puts format1 % ["CPU", "ELAPSED", "COUNT", "LABEL"]
+ $bm.sort{|a, b| [b[1], b[0]] <=> [a[1], a[0]]}.each do |k, v|
+ $stderr.puts format2 % (v + [k])
end
end
end
$bm[label] = [0.0]*5 + [0] unless $bm.include?(label)
+ $bm[label][5] += 1
end
if block_given?
bm = Benchmark.measure{res = yield}
bma = bm.to_a # [dummy label, user CPU time, system CPU time, childrens user CPU time, childrens system CPU time, elapsed real time]
+ $bm_last = bma
+
$bm_mutex.synchronize do
+ e = $bm[label]
0.upto(4) do |n|
- $bm[label][n] += bma[n+1]
+ e[n] += bma[n+1]
end
-
- $bm[label][5] += 1
end
end
@@ -817,3 +871,19 @@
res
end
end
+
+def ask(options, text=false)
+ i = 0
+ $stderr.puts ""
+ options.each do |s|
+ $stderr.puts " %d %s" % [i+=1, s]
+ end
+ $stderr.puts ""
+ $stderr.print "? "
+ res = $stdin.gets
+ unless res.nil?
+ res = res.strip
+ res = options[res.to_i-1] if text and not res.empty?
+ end
+ res
+end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -15,6 +15,7 @@
end
$rwd_exit = ARGV.include?("--rwd-exit") # Hack ???
+$rwd_exit = true if defined?(REQUIRE2LIB)
$rwd_debug = ($rwd_debug or $DEBUG or false)
$rwd_border = ($rwd_border or 0)
$rwd_dir = Dir.pwd
@@ -27,10 +28,12 @@
RWDEmptyline = "..."
+#module RWD
+
rcfile = nil
-s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
-s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
-s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
+s = ENV["HOME"] ; s = File.expand_path(".rwdrc", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
+s = ENV["USERPROFILE"] ; s = File.expand_path("rwd.cfg", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
+s = ENV["windir"] ; s = File.expand_path("rwd.cfg", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s))
AL = "align=´left´"
AC = "align=´center´"
@@ -51,7 +54,7 @@
ENV["RWDPORTS"] = (ENV["RWDPORTS"] or "7701-7709")
ENV["RWDTHEME"] = (ENV["RWDTHEME"] or "DEFAULT")
-trap("INT") {puts "Terminating..." ; exit}
+#trap("INT") {puts "Terminating..." ; exit}
$SAFE = 2
@@ -93,7 +96,7 @@
a = [emptyline].concat(self)
end
- a.numsort.collect{|s| "<option>#{s.to_html}</option>" }.join("\n")
+ a.numsort.collect{|s| "<option>#{s.to_s.to_html}</option>" }.join("\n")
end
def rwd_method(method)
@@ -109,17 +112,32 @@
return res
end
- def rwd_row(key=nil, value=nil)
+ def rwd_row(key=nil, value=nil, bold=false)
res = ""
res = res + "<row valign=´top´>"
res = res + "<radio name=´#{key.to_html}´ value=´#{value.to_html}´/>" unless key.nil?
- res = res + self.collect{|s| "<p align=´left´>#{s.to_html}</p>"}.join("")
+ res = res + self.collect{|s| "<p align=´#{(s.kind_of?(Numeric) or s =~ /^\d+\.\d+$/) ? "right" : "left"}´>#{"<b>" if bold}#{s.to_s.to_html}#{"</b>" if bold}</p>"}.join("")
res = res + "</row>"
return res
end
+ def rwd_table(headers=nil, highlightrows=[])
+ res = ""
+
+ highlightrows = [highlightrows].flatten
+
+ n = -1
+
+ res = res + "<table>"
+ res = res + headers.rwd_row(nil, nil, true) unless headers.nil?
+ res = res + self.collect{|a| a.rwd_row(nil, nil, highlightrows.include?(n+=1))}.join("")
+ res = res + "</table>"
+
+ return res
+ end
+
def rwd_headers(emptyfield=false)
res = ""
@@ -131,7 +149,7 @@
return res
end
- def rwd_form(prefix, values, twoparts=0, options={})
+ def rwd_form(prefix, values=[], twoparts=0, options={})
res = []
res << "<table>"
@@ -151,7 +169,7 @@
s = ""
s << "<text name=´#{name}´"
- s << " value=´#{values[n].to_html}´" if n < values.length
+ s << " value=´#{values[n].to_s.to_html}´" if n < values.length
s << "/>"
res << s
@@ -266,7 +284,7 @@
template = $rwd_html_1
template = $rwd_html_PDA_1 if pda
- res <<(template(template, args))
+ res << (template(template, args))
when "p" then res << "<p #{align}>"
when "pre" then res << "<pre #{align}>"
when "big" then res << "<p #{align}><big>"
@@ -310,6 +328,7 @@
maxlength = ""
maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength")
size = ""
+ size = "size=´%s´" % @args["size"] if @args.include?("size")
size = "size=´%s´" % 10 if pda
res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength} #{size}>"
oneormorefields << "true"
@@ -340,7 +359,7 @@
end
oneormorefields << "true"
when "select"
- res << "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>"
+ res << "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]} size=´#{@args["size"]}´>" # ??? Misschien nog iets met ´multiple´?
name = @args["name"]
$select = varshtml[name]
oneormorefields << "true"
@@ -480,7 +499,7 @@
template = $rwd_html_2
template = $rwd_html_PDA_2 if pda
- res <<(template(template, args))
+ res << (template(template, args))
when "p" then res << "</p>"
when "pre" then res << "</pre>"
when "big" then res << "</big></p>"
@@ -555,10 +574,15 @@
end
logo = nil
- logo = File.expand_path(vars["logo"], $rwd_files) if vars.include?("logo")
- logo = nil unless logo.nil? or File.file?(logo)
+ logo = File.expand_path(vars["logo"], $rwd_files) if vars.include?("logo")
+ logo = nil unless logo.nil? or File.file?(logo)
+
+ watermark = nil
+ watermark = File.expand_path(vars["watermark"], $rwd_files) if vars.include?("watermark")
+ watermark = nil unless watermark.nil? or File.file?(watermark)
a["LOGO"] = "" unless not logo.nil?
+ a["WATERMARK"] = "" unless not watermark.nil?
a["HELPBUTTON"] = (not (vars["nohelpbutton"]))
a["BACKBUTTONS"] = (not (vars["nobackbuttons"]))
@@ -619,10 +643,12 @@
tree = XML.new(rwd)
tree.parse(OpenTag, "window") do |type, obj|
+ $rwd_appvars.each{|k, v| obj.args[k] = v}
@@windows[rwd][obj.args["name"]] = obj.to_h
end
tree.parse(OpenTag, "helpwindow") do |type, obj|
+ $rwd_appvars.each{|k, v| obj.args[k] = v}
@@helpwindows[rwd][obj.args["name"]] = obj.to_h
end
end
@@ -638,6 +664,8 @@
firstaction = ""
html = []
+ vars = vars.deep_dup
+
vars.each do |key, value|
if not key.empty?
if value.respond_to? "to_s"
@@ -730,7 +758,7 @@
class RWDDone < RWDWindow
def initialize(exitbrowser)
- super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Again´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>")
+ super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><i>(Some browsers don´t close,<br>because of security reasons.)</i><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Again´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>")
end
end
@@ -741,6 +769,14 @@
@rwd_history = []
@rwd_ignore_vars = []
@rwd_call_after_back = []
+ @rwd_time = Time.now
+
+ $rwd_appvars = {} if $rwd_appvars.nil?
+ XML.new(xml).parse(OpenTag, "application") do |type, obj|
+ obj.args.deep_dup.each do |k, v|
+ $rwd_appvars[k] = v
+ end
+ end
end
def self.file(rwdfile, *args)
@@ -764,9 +800,14 @@
port = port.to_i
@rwd_server = RWDServer.new(self, port, io, auth, realm)
+
+ self
end
def render(res, path, post, download, downloadfile, pda, sessionid)
+ # Avoid a timeout.
+
+ @rwd_time = Time.now
# Initialize some vars.
@@ -777,7 +818,7 @@
help = false
back = false
tab = ""
- @rwd_msgtype = nil
+ @rwd_msgtype = nil if @rwd_progress_thread.nil?
@rwd_download = nil
@rwd_download_file = nil
@@ -818,6 +859,8 @@
@rwd_action = "rwd_back"
end
+ @rwd_history = [["main", [], "main", ""]] if @rwd_history.empty?
+
if @rwd_action =~ /^rwd_tab_/
@rwd_tab = @rwd_action.sub(/^rwd_tab_/, "")
@rwd_history[-1][3] = @rwd_tab
@@ -839,6 +882,7 @@
@rwd_history = []
when "rwd_quit"
done = true
+ else
end
# History stuff
@@ -882,6 +926,15 @@
a = [@rwd_action, @rwd_args, @rwd_window, @rwd_tab]
@rwd_history.push a if (@rwd_history[-1] != a or not @rwd_msgtype.nil?)
+
+ if @rwd_window == "rwd_back"
+ @rwd_history.pop
+ @rwd_history.pop
+ @rwd_action = (@rwd_history[-1] or [nil, nil, nil])[0]
+ @rwd_args = (@rwd_history[-1] or [nil, nil, nil])[1]
+ @rwd_window = (@rwd_history[-1] or [nil, nil, nil])[2]
+ @rwd_tab = (@rwd_history[-1] or [nil, nil, nil])[3]
+ end
end
end
@@ -910,12 +963,13 @@
download << @rwd_download
downloadfile << @rwd_download_file
else
- if not @rwd_msgtype.nil?
- res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message"
- res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error"
+ if not @rwd_progress_thread.nil?
+ res << RWDProgressBar.new(@rwd_progress_refresh, @rwd_progress_progress).render(pda, @rwd_refresh_action)
else
- if not @rwd_progress_thread.nil?
- res << RWDProgressBar.new(@rwd_progress_refresh, @rwd_progress_progress).render(pda, @rwd_refresh_action)
+ if not @rwd_msgtype.nil?
+ res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message"
+ res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error"
+ res << @rwd_msg if @rwd_msgtype == "text"
else
puts "Window: #{@rwd_window}" if $rwd_debug
puts "Tab: #{@rwd_tab}" if $rwd_debug
@@ -943,6 +997,11 @@
@rwd_msgtype = "error"
end
+ def text(msg)
+ @rwd_msg = "<html><body><pre>#{msg}</pre></body></html>"
+ @rwd_msgtype = "text"
+ end
+
def progressbar(refresh, *progress)
@rwd_progress_refresh = (refresh or 1)
@rwd_progress_progress = []
@@ -983,6 +1042,23 @@
def exitbrowser
@rwd_exitbrowser = true
end
+
+ def timeout(timeout, interval=1)
+ @rwd_timeout = timeout
+
+ unless @rwd_timeout_thread
+ @rwd_timeout_thread =
+ Thread.new do
+ loop do
+ if Time.now - @rwd_time > @rwd_timeout
+ $stderr.puts "Exiting due to timeout (#{@rwd_timeout} seconds)."
+ exit 1
+ end
+ sleep interval
+ end
+ end
+ end
+ end
end
class RWDLogin < RWDialog
@@ -1039,7 +1115,7 @@
end
end
-class Session < Hash
+class RWDSession < Hash
attr_reader :sessionid
attr_reader :lastaccess
attr_reader :authenticated
@@ -1054,9 +1130,7 @@
def touch
@lastaccess = Time.now
end
-end
-class RWDSession < Session
def render(res, path, post, download, downloadfile, pda)
done = self["object"].render(res, path, post, download, downloadfile, pda, @sessionid)
@@ -1092,18 +1166,13 @@
browser = ENV["RWDBROWSER"].dup
url = "http://localhost:%s/" % [port]
- if cygwin?
- browser.gsub!(/\\/, "/")
- browser.gsub!(/ /, "\\ ")
- end
-
re = /[$%]1\b/
command = "%s \"%s\"" % [browser, url]
command = browser.gsub(re, url) if browser =~ re
command.gsub!(/%port%/, port.to_s)
- system(command) or puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}"
+ system(command) or $stderr.puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}"
#end
puts "The browser has terminated."
@@ -1119,8 +1188,10 @@
HTTPServer.serve(portio, (not auth.nil?)) do |req, resp|
threadlimiter.wait do
-
- vars = req.vars.dup
+ vars = {}
+ req.vars.each do |k, v|
+ vars[k] = v.join("\t")
+ end
pad = (req.request.path or "/")
if auth.kind_of? String
@@ -1151,7 +1222,7 @@
end
if oldsessionid.nil? or oldsessionid.empty?
- if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/rwd_pixel.gif"
+ if not auth.nil? and not auth.empty? and not session.authenticated and pad !~ /^\/rwd_/
# Check authentication
@@ -1289,6 +1360,10 @@
<style type=´text/css´>
<!--
+ body {
+ background : url(%WATERMARK%) white center center no-repeat fixed;
+ }
+
a {
text-decoration : none;
}
@@ -1379,22 +1454,22 @@
<table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1402,12 +1477,12 @@
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1417,11 +1492,11 @@
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1431,7 +1506,7 @@
<td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
@@ -1520,7 +1595,7 @@
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1530,11 +1605,11 @@
<td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1544,12 +1619,12 @@
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
@@ -1557,22 +1632,22 @@
<td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
<tr align=´center´>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
<td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
- <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
+ <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td>
</tr>
</table>
@@ -1601,6 +1676,10 @@
<style type=´text/css´>
<!--
+ body {
+ background : url(%WATERMARK%) white center center no-repeat fixed;
+ }
+
a {
text-decoration : none;
}
@@ -1823,26 +1902,21 @@
"
$rwd_pixel = "
-R0lGODlhAQABAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK
-CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ
-GRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygo
-KCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3
-Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZG
-RkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV
-VVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2Rk
-ZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNz
-c3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKC
-goODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGR
-kZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6Cg
-oKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+v
-r7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+
-vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3N
-zc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc
-3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr
-6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6
-+vv7+/z8/P39/f7+/v///yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
-CgD/ACwAAAAAAQABAAAIBAD/BQQAOw==
+R0lGODlhAQABAMIAAAAAAP///+7u7kREiP///////////////yH5BAEKAAMA
+LAAAAAABAAEAAAMCOAkAOw==
".unpack("m").shift
+$rwd_logo = "
+R0lGODlhEAAQAMIAAAAAAP///+7u7kREiP///////////////yH5BAEKAAQA
+LAAAAAAQABAAAANCSErQ/k21QKulrIrNu8heuAGUcJ0BuQVD676DasK0zNKv
+jefB+oo6l6AxBAx7M2HRePQph5xga0RsJqfELPI2DSUAADs=
+".unpack("m").shift
+
+
$rwd_html_1, $rwd_html_2 = $rwd_html[ENV["RWDTHEME"]].split(/^\s*%BODY%\s*\r*$/)
$rwd_html_PDA_1, $rwd_html_PDA_2 = $rwd_html["PDA"].split(/^\s*%BODY%\s*\r*$/)
+
+#end
+#
+#class RWDialog < RWD::RWDialog
+#end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/sgml.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -88,7 +88,7 @@
def prechildren_to_sgml(res)
a = [@subtype]
- @args.each do |k, v|
+ @args.sort.each do |k, v|
if not v.include?("´")
a << "#{k}=´#{v}´"
else
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/tree.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/tree.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -88,7 +88,7 @@
def inspect
parent, children = @parent, @children
- @parent, @children = parent.id, children.collect{|obj| obj.id}
+ @parent, @children = parent.object_id, children.collect{|obj| obj.object_id}
res = " " * (level-1) + "#{self.class}(#{@subtype}) #{super}"
@@ -96,6 +96,34 @@
res
end
+
+ def previous(klass=[], skip=[])
+ klass = [klass].flatten
+ skip = [skip].flatten
+
+ po = @parent
+ return nil if po.nil?
+
+ ch = po.children
+ return nil if ch.nil?
+
+ n = ch.index(self)
+ return nil if n.nil?
+
+ res = nil
+ if klass.nil?
+ n -= 1
+ res = ch[n]
+ else
+ begin
+ n -= 1
+ res = ch[n]
+ end while (klass.empty? or klass.collect{|k| ch[n-1].kind_of?(k)}.sort.uniq == [true]) \
+ and (skip.empty? or skip.collect{|k| ch[n-1].kind_of?(k)}.sort.uniq == [false])
+ end
+
+ res
+ end
end
class Tree
@@ -138,7 +166,7 @@
end
def self.location(url, form=Hash.new)
- s = HTTPClient.get(url, form)
+ s = HTTPClient.get(url, {}, form)
s = "" if s.nil?
new(s)
end
@@ -155,7 +183,7 @@
tree = nil
- Dir.mkdirrec(dir)
+ File.mkpath(dir)
if File.file?(file)
@@mutex.synchronize do
@@ -227,7 +255,7 @@
end
def markclosed
- ([self].concat @objects).each do |obj|
+ ([self] + @objects).each do |obj|
obj.children.each_index do |i|
co1 = obj.children[i]
co2 = obj.children[i+1]
@@ -238,7 +266,7 @@
end
def deletedummies
- ([self].concat @objects).each do |obj|
+ ([self] + @objects).each do |obj|
obj.children.delete_if do |obj2|
obj2.upordown == Dummy
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/xml.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/xml.lib.rb
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/xml.lib.rb 2004-12-17 12:40:15.000000000 +0100
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/xml.lib.rb 2005-06-04 14:41:52.000000000 +0200
@@ -1,4 +1,101 @@
require "ev/sgml"
+class SGMLObject
+ def to_x(closetags=true)
+ res = ""
+
+ parsetree("prechildren_to_x", "postchildren_to_x", res, closetags)
+
+ res
+ end
+end
+
+class Text < SGMLObject
+ def prechildren_to_x(res, closetags)
+ res << @text.strip unless @text.strip.empty?
+ end
+end
+
+class Comment < SGMLObject
+ def prechildren_to_x(res, closetags)
+ res << "\n" if not previous([], [Text]).kind_of?(Comment)
+ lines = @text.gsub(/(<!--|-->)/, "").lf.split(/\n/)
+ if lines.length == 1
+ res << " "*(@level-1) + "<!-- " + lines[0].strip + " -->" + "\n"
+ else
+ res << " "*(@level-1) + "<!--" + "\n"
+ res << lines.collect{|s| " "*(@level-1) + s.strip}.delete_if{|s| s.compress.empty?}.join("\n")
+ res << "\n"
+ res << " "*(@level-1) + "-->" + "\n"
+ res << "\n"
+ end
+ end
+end
+
+class Special < SGMLObject
+ def prechildren_to_x(res, closetags)
+ res << " "*(@level-1) + @text.compress + "\n"
+ end
+end
+
+class Instruction < SGMLObject
+ def prechildren_to_x(res, closetags)
+ res << " "*(@level-1) + @text.compress + "\n"
+ end
+end
+
+class OpenTag < Tag
+ def prechildren_to_x(res, closetags)
+ a = [@subtype]
+
+ args = @args.dup
+ args.delete("id")
+ args.delete("name")
+ args = args.sort
+ args.unshift(["id", @args["id"]]) if @args.include?("id")
+ args.unshift(["name", @args["name"]]) if @args.include?("name")
+
+ args.each do |k, v|
+ if not v.include?("´")
+ a << "#{k}=´#{v}´"
+ else
+ if not v.include?(´"´)
+ a << "#{k}=\"#{v}\""
+ else
+ a << "#{k}=´#{v.gsub(/\´/, ´"´)}´"
+ end
+ end
+ end
+
+ if @children.length == 0 or (@children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.compress.empty?)
+ res << " "*(@level-1) + "<#{a.join(" ")}/>" + "\n"
+ else
+ if @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length == 1
+ res << " "*(@level-1) + "<#{a.join(" ")}>"
+ else
+ res << " "*(@level-1) + "<#{a.join(" ")}>" + "\n"
+ end
+ end
+ end
+
+ def postchildren_to_x(res, closetags)
+ if closetags
+ unless @children.length == 0 or (@children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.compress.empty?)
+ res << "\n" if @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length > 1
+ res << " "*(@level-1) unless @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length == 1
+ res << "</#{@subtype}>"
+ res << "\n"
+ end
+ end
+ end
+end
+
class XML < SGML
+ def to_x(closetags=true)
+ res = ""
+
+ parsetree("prechildren_to_x", "postchildren_to_x", res, closetags)
+
+ res
+ end
end
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/SUMMARY rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/SUMMARY
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/SUMMARY 2005-06-04 14:42:01.089517448 +0200
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/SUMMARY 2005-06-04 14:41:52.000000000 +0200
@@ -0,0 +1 @@
+The Web Browser as a Graphical User Interface for Ruby Applications
diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/VERSION rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/VERSION
--- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/VERSION 2005-06-04 14:42:01.088517600 +0200
+++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/VERSION 2005-06-04 14:41:52.000000000 +0200
@@ -0,0 +1 @@
+0.2.0