knjrbfw 0.0.111 → 0.0.113

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5696af92d53b95a8c94fcef022377125817c5963
4
- data.tar.gz: 2d85cab631950106238a682c722773b38a7f480e
3
+ metadata.gz: 66637edb9c36f0d7ea2b74ef01525eac6504e558
4
+ data.tar.gz: 0618414f52721e98c76b6a87d2f1bbd30dfb948a
5
5
  SHA512:
6
- metadata.gz: 38f796337ac3a2cf5d51a17dcf65d8bc4e1c601d393fdd82de0821365019d95f5cf3316e1fcd4b605a6016bc5ca4957c567317af110d53b0b81892e3d6926edf
7
- data.tar.gz: 9598253f0ad7546b545f888d38bc1beadaa07b54e1352192dd726a7ec7de87cc60b5f5174717a2749bb8d84c5aaee90d3480658369bc25618b7df2c69cd45cbc
6
+ metadata.gz: 90be6e975266b2179b6689ff362b150afbb4871ccb9eb175fc1a1bc8b2bf1c823ebc8e36389db3387697fcf07ea45d6ae1bc4aabbacf8051c82532d052b0c13e
7
+ data.tar.gz: 212fa35ff3ea29a7bc6186be6a1df13dd1ab1d405db62979e6d4407f3203a3e0a0f73b1c978e34e013a996bdd9e627a66a037ac58a8d0432b279594e6a2c52b6
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.111
1
+ 0.0.113
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: knjrbfw 0.0.111 ruby lib
5
+ # stub: knjrbfw 0.0.113 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "knjrbfw"
9
- s.version = "0.0.111"
9
+ s.version = "0.0.113"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Kasper Johansen"]
14
- s.date = "2015-04-13"
14
+ s.date = "2015-04-21"
15
15
  s.description = "Including stuff for HTTP, SSH and much more."
16
16
  s.email = "k@spernj.org"
17
17
  s.extra_rdoc_files = [
@@ -61,8 +61,6 @@ Gem::Specification.new do |s|
61
61
  "lib/knj/compiler.rb",
62
62
  "lib/knj/cpufreq.rb",
63
63
  "lib/knj/csv.rb",
64
- "lib/knj/datarow.rb",
65
- "lib/knj/datarow_custom.rb",
66
64
  "lib/knj/degulesider.rb",
67
65
  "lib/knj/erb/apache_knjerb.conf",
68
66
  "lib/knj/erb/cache/README",
@@ -196,7 +194,6 @@ Gem::Specification.new do |s|
196
194
  "lib/knj/scripts/ip2location.rb",
197
195
  "lib/knj/scripts/keepalive.rb",
198
196
  "lib/knj/scripts/php_to_rb_helper.rb",
199
- "lib/knj/scripts/process_meta_exec.rb",
200
197
  "lib/knj/scripts/speed_test.rb",
201
198
  "lib/knj/scripts/svn_merge.rb",
202
199
  "lib/knj/scripts/upgrade_knjrbfw_checker.rb",
@@ -215,7 +212,6 @@ Gem::Specification.new do |s|
215
212
  "lib/knj/thread.rb",
216
213
  "lib/knj/thread2.rb",
217
214
  "lib/knj/threadhandler.rb",
218
- "lib/knj/translations.rb",
219
215
  "lib/knj/unix_proc.rb",
220
216
  "lib/knj/web.rb",
221
217
  "lib/knj/webscripts/image.rhtml",
@@ -4,114 +4,125 @@ class Knj::Image
4
4
  #===Examples
5
5
  # img = Magick::Image.read(path_str)
6
6
  # Knj::Image.rounded_corners(
7
- # :img => img,
8
- # :radius => 25,
9
- # :border => 1,
10
- # :border_color => "#000000"
7
+ # img: img,
8
+ # radius: 25,
9
+ # border: 1,
10
+ # border_color: "#000000"
11
11
  # )
12
12
  def self.rounded_corners(args)
13
- raise "No or invalid ':img' given: '#{args}'." if !args[:img]
13
+ raise "No or invalid ':img' given: '#{args}'." unless args[:img]
14
14
  raise "No or invalid ':radius' given: '#{args}'." if !args[:radius].respond_to?(:to_i) || args[:radius].to_i <= 0
15
-
15
+
16
16
  pic = args[:img]
17
17
  raise "Format '#{pic.format}' does not support transparency." if pic.format == "JPEG"
18
-
18
+
19
19
  r = args[:radius].to_i
20
20
  r_half = r / 2
21
21
  r2 = r * r
22
22
  d = r * 2
23
-
23
+
24
24
  center_x = r - 1
25
25
  center_y = 1
26
-
26
+
27
27
  coords = {}
28
28
  0.upto(r) do |x|
29
29
  y = center_y + ::Math.sqrt(r2 - ((x - center_x) * (x - center_x)))
30
30
  coords[x] = y.to_i
31
31
  end
32
-
32
+
33
33
  if args[:border]
34
34
  draw = ::Magick::Draw.new
35
35
  draw.stroke(args[:border_color])
36
36
  draw.stroke_width(1)
37
-
37
+
38
38
  0.upto(args[:border] - 1) do |x|
39
39
  draw.line(x, 0, x, pic.rows)
40
40
  draw.line(pic.columns-x-1, 0, pic.columns-x-1, pic.rows)
41
-
41
+
42
42
  draw.line(0, x, pic.columns, x)
43
43
  draw.line(0, pic.rows-x-1, pic.columns, pic.rows-x-1)
44
44
  end
45
-
45
+
46
46
  draw.draw(pic)
47
47
  end
48
-
48
+
49
49
  borders = [] if args[:border]
50
-
50
+
51
51
  1.upto(4) do |count|
52
52
  r.times do |x|
53
53
  border_from = nil
54
54
  border_to = nil
55
55
  border_mode = nil
56
-
56
+
57
57
  case count
58
58
  when 1
59
59
  x_from = x
60
-
60
+
61
61
  y_from = 0
62
62
  y_to = r - coords[x]
63
-
64
- if borders and x > 0 and x < r_half
63
+
64
+ if borders && x > 0 && x < r_half
65
65
  border_from = y_to
66
66
  border_to = r - coords[x - 1]
67
67
  border_to = 1 if border_to < 1
68
-
68
+
69
69
  #top left
70
- borders << {:x => x_from, :yf => border_from, :yt => border_to}
71
- borders << {:y => x_from, :xf => border_from, :xt => border_to}
72
-
70
+ borders << {x: x_from, yf: border_from, yt: border_to}
71
+ borders << {y: x_from, xf: border_from, xt: border_to}
72
+
73
73
  #top right
74
- borders << {:x => pic.columns - x - 1, :yf => border_from, :yt => border_to}
75
- borders << {:y => x_from, :xf => pic.columns - border_to, :xt => pic.columns - border_from}
76
-
74
+ borders << {x: pic.columns - x - 1, yf: border_from, yt: border_to}
75
+ borders << {y: x_from, xf: pic.columns - border_to, xt: pic.columns - border_from}
76
+
77
77
  #bottom left
78
- borders << {:x => x_from, :yf => pic.rows - border_to, :yt => pic.rows - border_from}
79
- borders << {:y => pic.rows - x - 1, :xf => border_from, :xt => border_to}
80
-
78
+ borders << {x: x_from, yf: pic.rows - border_to, yt: pic.rows - border_from}
79
+ borders << {y: pic.rows - x - 1, xf: border_from, xt: border_to}
80
+
81
81
  #bottom right
82
- borders << {:x => pic.columns - x - 1, :yf => pic.rows - border_to, :yt => pic.rows - border_from}
83
- borders << {:y => pic.rows - x - 1, :xf => pic.columns - border_to, :xt => pic.columns - border_from}
82
+ borders << {x: pic.columns - x - 1, yf: pic.rows - border_to, yt: pic.rows - border_from}
83
+ borders << {y: pic.rows - x - 1, xf: pic.columns - border_to, xt: pic.columns - border_from}
84
84
  end
85
85
  when 2
86
86
  x_from = pic.columns - r + x
87
-
87
+
88
88
  y_from = 0
89
89
  y_to = r - coords[r - x - 1]
90
90
  when 3
91
91
  x_from = x
92
-
92
+
93
93
  y_from = pic.rows - r + coords[x]
94
94
  y_to = pic.rows - y_from
95
95
  when 4
96
96
  x_from = pic.columns - r + x
97
-
97
+
98
98
  y_from = pic.rows - r + coords[r - x - 1]
99
99
  y_to = pic.rows - y_from
100
100
  end
101
-
101
+
102
102
  next if y_to <= 0
103
-
104
- pixels = pic.get_pixels(x_from, y_from, 1, y_to)
105
- pixels.each do |pixel|
106
- pixel.opacity = ::Magick::TransparentOpacity
103
+
104
+ if RUBY_ENGINE == "jruby"
105
+ # Hack around missing method in rmagick4j Image#get_pixels. It will be black :-(
106
+ pixels = []
107
+ y_to.times do |count|
108
+ pixel = Magick::Pixel.new(0, 0, 0, 255)
109
+ pixels << pixel
110
+ end
111
+
112
+ pic.store_pixels(x_from, y_from, 1, y_to, pixels)
113
+ else
114
+ pixels = pic.get_pixels(x_from, y_from, 1, y_to)
115
+ pixels.each do |pixel|
116
+ pixel.opacity = ::Magick::TransparentOpacity
117
+ end
118
+ pic.store_pixels(x_from, y_from, 1, y_to, pixels)
107
119
  end
108
- pic.store_pixels(x_from, y_from, 1, y_to, pixels)
109
120
  end
110
121
  end
111
-
122
+
112
123
  if borders
113
124
  color = args[:border_color]
114
-
125
+
115
126
  borders.each do |border|
116
127
  if border.key?(:x)
117
128
  count_from = border[:yf]
@@ -120,18 +131,18 @@ class Knj::Image
120
131
  count_from = border[:xf]
121
132
  count_to = border[:xt]
122
133
  end
123
-
134
+
124
135
  count_from.upto(count_to - 1) do |coord|
125
- if RUBY_ENGINE == "jruby" and color[0, 1] == "#"
136
+ if RUBY_ENGINE == "jruby" && color[0, 1] == "#"
126
137
  r = color[1, 2].hex
127
138
  b = color[3, 2].hex
128
139
  g = color[5, 2].hex
129
-
140
+
130
141
  pixel = ::Magick::Pixel.new(r, b, g)
131
142
  else
132
143
  pixel = ::Magick::Pixel.from_color(color)
133
144
  end
134
-
145
+
135
146
  if border.key?(:x)
136
147
  if RUBY_ENGINE == "jruby"
137
148
  pic.store_pixels(border[:x], coord, 1, 1, [pixel])
@@ -148,21 +159,21 @@ class Knj::Image
148
159
  end
149
160
  end
150
161
  end
151
-
162
+
152
163
  pic.matte = true
153
164
  end
154
-
165
+
155
166
  #Returns the width relative to the height.
156
167
  #===Examples
157
168
  # Knj::Image.width_for_height(640, 480, 400) #=> 533
158
169
  def self.width_for_height(orig_width, orig_height, new_height)
159
170
  return (orig_width.to_f / (orig_height.to_f / new_height.to_f)).to_i
160
171
  end
161
-
172
+
162
173
  #Returns the height relative to the width.
163
174
  #===Examples
164
175
  # Knj::Image.height_for_width(640, 480, 533) #=> 399
165
176
  def self.height_for_width(orig_width, orig_height, new_width)
166
177
  return (orig_height.to_f / (orig_width.to_f / new_width.to_f)).to_i
167
178
  end
168
- end
179
+ end
@@ -7,11 +7,11 @@ begin
7
7
  options = {}
8
8
  OptionParser.new do |opts|
9
9
  opts.banner = "Usage: example.rb [options]"
10
-
10
+
11
11
  opts.on("-f PHPFILE", "--file", "The PHP-file you want help to convert.") do |f|
12
12
  options[:file] = f
13
13
  end
14
-
14
+
15
15
  opts.on("-t", "--tags-remove", "Removes the PHP-tags completely.") do |t|
16
16
  options[:tags] = false
17
17
  end
@@ -37,15 +37,8 @@ cont.gsub!(/\A#!\/usr\/bin\/env\s+php5/, "!#/usr/bin/env ruby1.9.1")
37
37
  #Replace class extends.
38
38
  cont.scan(/(class\s+(.+?)\s+extends\s+(.+?){)/) do |match|
39
39
  rb_classname = "#{match[1][0..0].upcase}#{match[1][1..999]}"
40
-
41
- if match[2] == "knjdb_row"
42
- extends = "Knj::Datarow"
43
- else
44
- extends = "#{match[2][0..0].upcase}#{match[2][1..999]}"
45
- end
46
-
40
+ extends = "#{match[2][0..0].upcase}#{match[2][1..999]}"
47
41
  rb_str = "class #{rb_classname} < #{extends}"
48
-
49
42
  cont = cont.gsub(match[0], rb_str)
50
43
  end
51
44
 
@@ -54,7 +47,7 @@ end
54
47
  cont.scan(/(class\s+(.+?)\s*{)/) do |match|
55
48
  rb_classname = "#{match[1][0..0].upcase}#{match[1][1..999]}"
56
49
  rb_str = "class #{rb_classname}"
57
-
50
+
58
51
  cont = cont.gsub(match[0], rb_str)
59
52
  end
60
53
 
@@ -68,7 +61,7 @@ cont.scan(/(static\s+function\s+(.+?)\((.*?)\)\s*{)/) do |match|
68
61
  else
69
62
  func_name = match[1]
70
63
  end
71
-
64
+
72
65
  rb_str = "def self.#{func_name}(#{match[2]})"
73
66
  cont = cont.gsub(match[0], rb_str)
74
67
  end
@@ -101,7 +94,7 @@ end
101
94
  cont.scan(/((\s+?)}\s*catch\s*\(\s*(#{regexes["class"]})\s+\$(#{regexes["var"]})\s*\)\s*{(\s+))/) do |match|
102
95
  classname = "#{match[2][0..0].upcase}#{match[2][1..999]}"
103
96
  classname = "Errno::ENOENT" if classname == "Knjdb_rownotfound_exception"
104
-
97
+
105
98
  rb_str = "#{match[1]}rescue #{classname} => #{match[3]}#{match[4]}"
106
99
  cont = cont.gsub(match[0], rb_str)
107
100
  end
@@ -111,7 +104,7 @@ end
111
104
  cont.scan(/((\s+?)require_once\s+\"(.+)\"\s*;(\s+?))/) do |match|
112
105
  filename = match[2]
113
106
  filename.gsub!(/\.php$/, ".rb")
114
-
107
+
115
108
  rb_str = "#{match[1]}require \"#{filename}\"#{match[3]}"
116
109
  cont = cont.gsub(match[0], rb_str)
117
110
  end
@@ -123,7 +116,7 @@ cont.scan(/(function\s(.+?)\((.*?)\))/) do |match|
123
116
  def_args.scan(/(([A-z]+)\s+\$(#{regexes["var"]}))/) do |match_arg|
124
117
  def_args = def_args.gsub(match_arg[0], "#{match_arg[2]}")
125
118
  end
126
-
119
+
127
120
  rb_str = "def #{match[1]}(#{def_args})"
128
121
  cont = cont.gsub(match[0], rb_str)
129
122
  end
@@ -267,11 +260,11 @@ end
267
260
  #Replace multi-line comments.
268
261
  cont.scan(/((\s+|<\?)\/\*([\s\S]+?)\*\/)/) do |match|
269
262
  rb_str = "\n=begin\n#{match[2]}\n=end\n"
270
-
263
+
271
264
  if match[1] == "<?"
272
265
  rb_str = "<%#{rb_str}"
273
266
  end
274
-
267
+
275
268
  cont = cont.gsub(match[0], rb_str)
276
269
  end
277
270
 
@@ -300,14 +293,14 @@ end
300
293
  #Replace variable-names.
301
294
  cont.scan(/(([^%\d])(\$(#{regexes["var"]})))/) do |match|
302
295
  vname = match[3]
303
-
296
+
304
297
  if vname[-1..-1] == "["
305
298
  vname = vname[0..-2]
306
299
  match[0] = match[0][0..-2]
307
300
  match[2] = match[2][0..-2]
308
301
  match[3] = match[3][0..-2]
309
302
  end
310
-
303
+
311
304
  if vname == "this"
312
305
  rb_varname = "self"
313
306
  elsif global_vars.key?(vname)
@@ -315,7 +308,7 @@ cont.scan(/(([^%\d])(\$(#{regexes["var"]})))/) do |match|
315
308
  else
316
309
  rb_varname = "#{vname}"
317
310
  end
318
-
311
+
319
312
  cont = cont.gsub(match[2], rb_varname)
320
313
  end
321
314
 
@@ -7,72 +7,72 @@ class Knj::Web
7
7
  def self.parse_uri(str)
8
8
  uri_match = str.to_s.match(/^\/(.+?\..*?|)(\?(.*)|)$/)
9
9
  raise "Could not parse the URI: '#{str}'." if !uri_match
10
-
10
+
11
11
  return {
12
12
  :path => "/#{uri_match[1]}",
13
13
  :query => uri_match[3]
14
14
  }
15
15
  end
16
-
16
+
17
17
  #Parses cookies-string and returns hash with parsed cookies.
18
18
  def self.parse_cookies(str)
19
19
  ret = {}
20
-
20
+
21
21
  str.split(/;\s*/).each do |cookie_str|
22
22
  if !match = cookie_str.match(/^(.*?)=\"(.*)\"$/)
23
23
  match = cookie_str.match(/^(.*?)=(.*)$/)
24
24
  end
25
-
25
+
26
26
  ret[self.urldec(match[1])] = self.urldec(match[2]) if match
27
27
  end
28
-
28
+
29
29
  return ret
30
30
  end
31
-
31
+
32
32
  def self.parse_set_cookies(str)
33
33
  str = String.new(str.to_s)
34
34
  return [] if str.length <= 0
35
35
  args = {}
36
36
  cookie_start_regex = /^(.+?)=(.*?)(;\s*|$)/
37
-
37
+
38
38
  match = str.match(cookie_start_regex)
39
39
  raise "Could not match cookie: '#{str}'." if !match
40
40
  str.gsub!(cookie_start_regex, "")
41
-
41
+
42
42
  args["name"] = self.urldec(match[1].to_s)
43
43
  args["value"] = self.urldec(match[2].to_s)
44
-
44
+
45
45
  while match = str.match(/(.+?)=(.*?)(;\s*|$)/)
46
46
  str = str.gsub(match[0], "")
47
47
  args[match[1].to_s.downcase] = match[2].to_s
48
48
  end
49
-
49
+
50
50
  return [args]
51
51
  end
52
-
52
+
53
53
  def self.cookie_str(cookie_data)
54
54
  raise "Not a hash: '#{cookie_data.class.name}', '#{cookie_data}'." unless cookie_data.is_a?(Hash)
55
55
  cookiestr = "#{self.urlenc(cookie_data["name"])}=#{self.urlenc(cookie_data["value"])}"
56
-
56
+
57
57
  cookie_data.each do |key, val|
58
58
  next if key == "name" or key == "value"
59
-
59
+
60
60
  if key.to_s.downcase == "expires" and val.is_a?(Time)
61
61
  cookiestr << "; Expires=#{val.httpdate}"
62
62
  else
63
63
  cookiestr << "; #{key}=#{val}"
64
64
  end
65
65
  end
66
-
66
+
67
67
  return cookiestr
68
68
  end
69
-
69
+
70
70
  #Parses a query and returns the various _GET-variables.
71
71
  def self.parse_urlquery(querystr, args = {})
72
72
  get = {}
73
73
  querystr.to_s.split("&").each do |value|
74
74
  pos = value.index("=")
75
-
75
+
76
76
  if pos != nil
77
77
  name = value[0..pos-1]
78
78
  name = name.to_sym if args[:syms]
@@ -80,10 +80,10 @@ class Knj::Web
80
80
  Knj::Web.parse_name(get, Knj::Web.urldec(name), valuestr, args)
81
81
  end
82
82
  end
83
-
83
+
84
84
  return get
85
85
  end
86
-
86
+
87
87
  def self.parse_name(seton, varname, value, args = {})
88
88
  if value.respond_to?(:filename) and value.filename
89
89
  realvalue = value
@@ -92,18 +92,18 @@ class Knj::Web
92
92
  realvalue = self.urldec(realvalue) if args[:urldecode]
93
93
  realvalue = realvalue.force_encoding("utf-8") if args[:force_utf8] if realvalue.respond_to?(:force_encoding)
94
94
  end
95
-
95
+
96
96
  if varname and varname.index("[") != nil and match = varname.match(/\[(.*?)\]/)
97
97
  namepos = varname.index(match[0])
98
98
  name = varname.slice(0..namepos - 1)
99
99
  name = name.to_sym if args[:syms]
100
100
  seton[name] = {} if !seton.key?(name)
101
-
101
+
102
102
  secname, secname_empty = Knj::Web.parse_secname(seton[name], match[1], args)
103
-
103
+
104
104
  valuefrom = namepos + secname.to_s.length + 2
105
105
  restname = varname.slice(valuefrom..-1)
106
-
106
+
107
107
  if restname and restname.index("[") != nil
108
108
  seton[name][secname] = {} if !seton[name].key?(secname)
109
109
  Knj::Web.parse_name_second(seton[name][secname], restname, value, args)
@@ -114,13 +114,13 @@ class Knj::Web
114
114
  seton[varname] = realvalue
115
115
  end
116
116
  end
117
-
117
+
118
118
  def self.parse_secname(seton, secname, args)
119
119
  secname_empty = false
120
120
  if secname.length <= 0
121
121
  secname_empty = true
122
122
  try = 0
123
-
123
+
124
124
  loop do
125
125
  if !seton.key?(try.to_s)
126
126
  break
@@ -128,14 +128,14 @@ class Knj::Web
128
128
  try += 1
129
129
  end
130
130
  end
131
-
131
+
132
132
  secname = try.to_s
133
133
  end
134
-
134
+
135
135
  secname = secname.to_sym if args[:syms] and secname.is_a?(String) and !(Float(secname) rescue false)
136
136
  return [secname, secname_empty]
137
137
  end
138
-
138
+
139
139
  def self.parse_name_second(seton, varname, value, args = {})
140
140
  if value.respond_to?(:filename) and value.filename
141
141
  realvalue = value
@@ -143,16 +143,16 @@ class Knj::Web
143
143
  realvalue = value.to_s
144
144
  realvalue = realvalue.force_encoding("utf-8") if args[:force_utf8]
145
145
  end
146
-
146
+
147
147
  match = varname.match(/^\[(.*?)\]/)
148
148
  if match
149
149
  namepos = varname.index(match[0])
150
150
  name = match[1]
151
151
  secname, secname_empty = Knj::Web.parse_secname(seton, match[1], args)
152
-
152
+
153
153
  valuefrom = namepos + match[1].length + 2
154
154
  restname = varname.slice(valuefrom..-1)
155
-
155
+
156
156
  if restname and restname.index("[") != nil
157
157
  seton[secname] = {} if !seton.key?(secname)
158
158
  Knj::Web.parse_name_second(seton[secname], restname, value, args)
@@ -163,30 +163,30 @@ class Knj::Web
163
163
  seton[varname] = realvalue
164
164
  end
165
165
  end
166
-
166
+
167
167
  def self.require_eruby(filepath)
168
168
  cont = File.read(filepath).untaint
169
169
  parse = Erubis.Eruby.new(cont)
170
170
  eval(parse.src.to_s)
171
171
  end
172
-
172
+
173
173
  def self.alert(string)
174
174
  require "#{$knjpath}strings"
175
-
175
+
176
176
  begin
177
177
  _httpsession.alert_sent = true
178
178
  rescue NameError
179
179
  #ignore.
180
180
  end
181
-
181
+
182
182
  @alert_sent = true
183
-
183
+
184
184
  html = "<script type=\"text/javascript\">alert(\"#{Knj::Strings.js_safe(string.to_s)}\");</script>"
185
185
  print html
186
-
186
+
187
187
  return self
188
188
  end
189
-
189
+
190
190
  #Redirects to another URL.
191
191
  #===Examples
192
192
  # Knj::Web.redirect("someotherpage.rhtml")
@@ -200,22 +200,22 @@ class Knj::Web
200
200
  else
201
201
  _httpsession.resp.status = 303 if !_hb.headers_sent?
202
202
  end
203
-
203
+
204
204
  _hb.header("Location", url) if !_hb.headers_sent?
205
205
  end
206
206
  rescue NameError
207
207
  #ignore.
208
208
  end
209
-
209
+
210
210
  print "<script type=\"text/javascript\">location.href=\"#{url}\";</script>"
211
211
  exit
212
212
  end
213
-
213
+
214
214
  def self.back
215
215
  print "<script type=\"text/javascript\">history.go(-1);</script>"
216
216
  exit
217
217
  end
218
-
218
+
219
219
  def self.checkval(value, val1, val2 = nil)
220
220
  if val2 != nil
221
221
  if !value or value == "" or value == "false"
@@ -231,7 +231,7 @@ class Knj::Web
231
231
  end
232
232
  end
233
233
  end
234
-
234
+
235
235
  def self.inputs(arr)
236
236
  html = ""
237
237
  arr.each do |args|
@@ -241,38 +241,38 @@ class Knj::Web
241
241
  html << self.input(args)
242
242
  end
243
243
  end
244
-
244
+
245
245
  return html
246
246
  end
247
-
247
+
248
248
  def self.style_html(css)
249
249
  return "" if css.length <= 0
250
-
250
+
251
251
  str = " style=\""
252
-
252
+
253
253
  css.each do |key, val|
254
254
  str << "#{key}: #{val};"
255
255
  end
256
-
256
+
257
257
  str << "\""
258
-
258
+
259
259
  return str
260
260
  end
261
-
261
+
262
262
  def self.attr_html(attrs)
263
263
  return "" if attrs.length <= 0
264
-
264
+
265
265
  html = ""
266
266
  attrs.each do |key, val|
267
267
  html << " #{key}=\"#{val.to_s.html}\""
268
268
  end
269
-
269
+
270
270
  return html
271
271
  end
272
-
272
+
273
273
  def self.input(args)
274
274
  Knj::ArrayExt.hash_sym(args)
275
-
275
+
276
276
  if args.key?(:value)
277
277
  if args[:value].is_a?(Array) and (args[:value].first.is_a?(NilClass) or args[:value].first == false)
278
278
  value = nil
@@ -290,18 +290,18 @@ class Knj::Web
290
290
  value = args[:value]
291
291
  end
292
292
  end
293
-
293
+
294
294
  args[:value_default] = args[:default] if args[:default]
295
-
295
+
296
296
  if value.is_a?(NilClass) and args[:value_default]
297
297
  value = args[:value_default]
298
298
  elsif value.is_a?(NilClass)
299
299
  value = ""
300
300
  end
301
-
301
+
302
302
  if value and args.key?(:value_func) and args[:value_func]
303
303
  cback = args[:value_func]
304
-
304
+
305
305
  if cback.is_a?(Method)
306
306
  value = cback.call(value)
307
307
  elsif cback.is_a?(Array)
@@ -312,10 +312,10 @@ class Knj::Web
312
312
  raise "Unknown class: #{cback.class.name}."
313
313
  end
314
314
  end
315
-
315
+
316
316
  value = args[:values] if args[:values]
317
317
  args[:id] = args[:name] if !args[:id]
318
-
318
+
319
319
  if !args[:type]
320
320
  if args[:opts]
321
321
  args[:type] = :select
@@ -329,7 +329,7 @@ class Knj::Web
329
329
  else
330
330
  args[:type] = args[:type].to_sym
331
331
  end
332
-
332
+
333
333
  attr = {
334
334
  "name" => args[:name],
335
335
  "id" => args[:id],
@@ -339,46 +339,46 @@ class Knj::Web
339
339
  attr.merge!(args[:attr]) if args[:attr]
340
340
  attr["disabled"] = "disabled" if args[:disabled]
341
341
  attr["maxlength"] = args[:maxlength] if args.key?(:maxlength)
342
-
342
+
343
343
  raise "No name given to the Web::input()-method." if !args[:name] and args[:type] != :info and args[:type] != :textshow and args[:type] != :plain and args[:type] != :spacer and args[:type] != :headline
344
-
344
+
345
345
  css = {}
346
346
  css["text-align"] = args[:align] if args.key?(:align)
347
347
  css.merge!(args[:css]) if args.key?(:css)
348
-
348
+
349
349
  attr_keys = [:onchange]
350
350
  attr_keys.each do |tag|
351
351
  if args.key?(tag)
352
352
  attr[tag] = args[tag]
353
353
  end
354
354
  end
355
-
355
+
356
356
  classes_tr = []
357
357
  classes_tr += args[:classes_tr] if args[:classes_tr]
358
-
358
+
359
359
  if !classes_tr.empty?
360
360
  classes_tr_html = " class=\"#{classes_tr.join(" ")}\""
361
361
  else
362
362
  classes_tr_html = ""
363
363
  end
364
-
364
+
365
365
  if args.key?(:title)
366
366
  title_html = args[:title].to_s.html
367
367
  elsif args.key?(:title_html)
368
368
  title_html = args[:title_html]
369
369
  end
370
-
370
+
371
371
  html = ""
372
-
372
+
373
373
  classes = ["input_#{args[:type]}"]
374
374
  classes = classes | args[:classes] if args.key?(:classes)
375
375
  attr["class"] = classes.join(" ")
376
-
376
+
377
377
  if args[:type] == :checkbox
378
378
  attr["value"] = args[:value_active] if args.key?(:value_active)
379
379
  attr["checked"] = "checked" if value.is_a?(String) and value == "1" or value.to_s == "1" or value.to_s == "on" or value.to_s == "true"
380
380
  attr["checked"] = "checked" if value.is_a?(TrueClass)
381
-
381
+
382
382
  html << "<tr#{classes_tr_html}>"
383
383
  html << "<td colspan=\"2\" class=\"tdcheck\">"
384
384
  html << "<input#{self.attr_html(attr)} />"
@@ -395,7 +395,7 @@ class Knj::Web
395
395
  html << title_html
396
396
  html << "</div></td>"
397
397
  html << "<td#{self.style_html(css)} class=\"tdc\" id=\"#{Knj::Web.html("#{args[:id]}_content")}\"><div>"
398
-
398
+
399
399
  if args[:type] == :textarea
400
400
  if args.key?(:height)
401
401
  if (Float(args[:height]) rescue false)
@@ -404,11 +404,11 @@ class Knj::Web
404
404
  css["height"] = args[:height]
405
405
  end
406
406
  end
407
-
407
+
408
408
  html << "<textarea#{self.style_html(css)} class=\"input_textarea\" name=\"#{args[:name].html}\" id=\"#{args[:id].html}\">#{value}</textarea>"
409
409
  elsif args[:type] == :fckeditor
410
410
  args[:height] = 400 if !args[:height]
411
-
411
+
412
412
  require "/usr/share/fckeditor/fckeditor.rb" if !Kernel.const_defined?(:FCKeditor)
413
413
  fck = FCKeditor.new(args[:name])
414
414
  fck.Height = args[:height].to_i
@@ -423,11 +423,11 @@ class Knj::Web
423
423
  elsif args[:type] == :select
424
424
  attr["multiple"] = "multiple" if args[:multiple]
425
425
  attr["size"] = args["size"] if args[:size]
426
-
426
+
427
427
  html << "<select#{self.attr_html(attr)}>"
428
428
  html << Knj::Web.opts(args[:opts], value, args[:opts_args])
429
429
  html << "</select>"
430
-
430
+
431
431
  if args[:moveable]
432
432
  html << "<div style=\"padding-top: 3px;\">"
433
433
  html << "<input type=\"button\" value=\"#{_("Up")}\" onclick=\"select_moveup($('##{args[:id]}'));\" />"
@@ -438,20 +438,20 @@ class Knj::Web
438
438
  html << "<table class=\"designtable\"><tr#{classes_tr_html}><td style=\"width: 100%;\">"
439
439
  html << "<input type=\"file\" name=\"#{args[:name].html}\" class=\"input_file\" />"
440
440
  html << "</td><td style=\"padding-left: 5px;\">"
441
-
441
+
442
442
  raise "No path given for imageupload-input." if !args.key?(:path)
443
443
  raise "No value given in arguments for imageupload-input." if !args.key?(:value)
444
-
444
+
445
445
  path = args[:path].gsub("%value%", value.to_s).untaint
446
446
  if File.exists?(path)
447
447
  html << "<img src=\"image.rhtml?path=#{self.urlenc(path).html}&smartsize=100&rounded_corners=10&border_color=black&force=true&ts=#{Time.new.to_f}\" alt=\"Image\" />"
448
-
448
+
449
449
  if args[:dellink]
450
450
  dellink = args[:dellink].gsub("%value%", value.to_s)
451
451
  html << "<div style=\"text-align: center;\">(<a href=\"javascript: if (confirm('#{_("Do you want to delete the image?")}')){location.href='#{dellink}';}\">#{_("delete")}</a>)</div>"
452
452
  end
453
453
  end
454
-
454
+
455
455
  html << "</td></tr></table>"
456
456
  elsif args[:type] == :file
457
457
  html << "<input type=\"#{args[:type].to_s}\" class=\"input_#{args[:type].to_s}\" name=\"#{args[:name].html}\" />"
@@ -463,17 +463,17 @@ class Knj::Web
463
463
  css["width"] = "100%"
464
464
  css["height"] = args[:height] if args.key?(:height)
465
465
  html << "<textarea#{self.attr_html(attr)}#{self.style_html(css)} id=\"#{args[:id]}\" name=\"#{args[:name]}\">#{value}</textarea>"
466
-
466
+
467
467
  jshash = {
468
468
  "id" => args[:id],
469
469
  "start_highlight" => true
470
470
  }
471
-
471
+
472
472
  pos_keys = [:skip_init, :allow_toggle, :replace_tab_by_spaces, :toolbar, :syntax]
473
473
  pos_keys.each do |key|
474
474
  jshash[key.to_s] = args[key] if args.key?(key)
475
475
  end
476
-
476
+
477
477
  html << "<script type=\"text/javascript\">"
478
478
  html << "function knj_web_init_#{args[:name]}(){"
479
479
  html << "editAreaLoader.init(#{Php4r.json_encode(jshash)});"
@@ -487,35 +487,34 @@ class Knj::Web
487
487
  attr[:value] = value
488
488
  html << "<input#{self.attr_html(attr)} />"
489
489
  end
490
-
490
+
491
491
  html << "</div></td></tr>"
492
492
  end
493
-
493
+
494
494
  html << "<tr#{classes_tr_html}><td colspan=\"2\" class=\"tdd\">#{args[:descr]}</td></tr>" if args[:descr]
495
495
  return html
496
496
  end
497
-
497
+
498
498
  def self.opts(opthash, curvalue = nil, opts_args = {})
499
499
  opts_args = {} if !opts_args
500
500
  Knj::ArrayExt.hash_sym(opts_args)
501
-
501
+
502
502
  return "" if !opthash
503
503
  cname = curvalue.class.name
504
- curvalue = curvalue.id if (cname == "Knj::Db_row" or cname == "Knj::Datarow")
505
-
504
+
506
505
  html = ""
507
506
  addsel = " selected=\"selected\"" if !curvalue
508
-
507
+
509
508
  html << "<option#{addsel} value=\"\">#{_("Add new")}</option>" if opts_args and (opts_args[:add] or opts_args[:addnew])
510
509
  html << "<option#{addsel} value=\"\">#{_("Choose")}</option>" if opts_args and opts_args[:choose]
511
510
  html << "<option#{addsel} value=\"\">#{_("None")}</option>" if opts_args and opts_args[:none]
512
511
  html << "<option#{addsel} value=\"\">#{_("All")}</option>" if opts_args and opts_args[:all]
513
-
512
+
514
513
  if opthash.is_a?(Hash) or opthash.class.to_s == "Dictionary"
515
514
  opthash.each do |key, value|
516
515
  html << "<option"
517
516
  sel = false
518
-
517
+
519
518
  if curvalue.is_a?(Array) and curvalue.index(key) != nil
520
519
  sel = true
521
520
  elsif curvalue.to_s == key.to_s
@@ -523,7 +522,7 @@ class Knj::Web
523
522
  elsif curvalue and curvalue.respond_to?(:is_knj?) and curvalue.id.to_s == key.to_s
524
523
  sel = true
525
524
  end
526
-
525
+
527
526
  html << " selected=\"selected\"" if sel
528
527
  html << " value=\"#{Knj::Web.html(key)}\">#{Knj::Web.html(value)}</option>"
529
528
  end
@@ -536,18 +535,18 @@ class Knj::Web
536
535
  end
537
536
  end
538
537
  end
539
-
538
+
540
539
  return html
541
540
  end
542
-
541
+
543
542
  def self.rendering_engine(servervar = nil)
544
543
  servervar = _server if !servervar
545
544
  if !servervar
546
545
  raise "Could not figure out meta data."
547
546
  end
548
-
547
+
549
548
  agent = servervar["HTTP_USER_AGENT"].to_s.downcase
550
-
549
+
551
550
  if agent.include?("webkit") != nil
552
551
  return "webkit"
553
552
  elsif agent.include?("gecko") != nil
@@ -561,15 +560,15 @@ class Knj::Web
561
560
  return false
562
561
  end
563
562
  end
564
-
563
+
565
564
  def self.os(servervar = nil)
566
565
  servervar = _server if !servervar
567
566
  if !servervar
568
567
  raise "Could not figure out meta data."
569
568
  end
570
-
569
+
571
570
  agent = servervar["HTTP_USER_AGENT"].to_s.downcase
572
-
571
+
573
572
  if agent.include?("(windows;") != nil or agent.include?("windows nt") != nil
574
573
  return {
575
574
  "os" => "win",
@@ -581,16 +580,16 @@ class Knj::Web
581
580
  "title" => "Linux"
582
581
  }
583
582
  end
584
-
583
+
585
584
  raise "Unknown OS: #{agent}"
586
585
  end
587
-
586
+
588
587
  #Returns various information about the current browser. Currently only works with the Hayabusa-project.
589
588
  def self.browser(servervar = nil)
590
589
  servervar = _server if !servervar
591
590
  raise "Could not figure out meta data." if !servervar
592
591
  agent = servervar["HTTP_USER_AGENT"].to_s.downcase
593
-
592
+
594
593
  if match = agent.include?("knj:true")
595
594
  browser = "bot"
596
595
  title = "Bot"
@@ -704,7 +703,7 @@ class Knj::Web
704
703
  title = "(unknown browser)"
705
704
  version = "(unknown version)"
706
705
  end
707
-
706
+
708
707
  os = nil
709
708
  os_version = nil
710
709
  if agent.include?("linux") != nil
@@ -713,12 +712,12 @@ class Knj::Web
713
712
  os = "mac"
714
713
  elsif match = agent.match(/windows\s+nt\s+([\d\.]+)/)
715
714
  os = "windows"
716
-
715
+
717
716
  if match[1] == "5.1"
718
717
  os_version = "xp"
719
718
  end
720
719
  end
721
-
720
+
722
721
  return {
723
722
  "browser" => browser,
724
723
  "title" => title,
@@ -727,23 +726,23 @@ class Knj::Web
727
726
  "os_version" => os_version
728
727
  }
729
728
  end
730
-
729
+
731
730
  def self.locale(args = {})
732
731
  if args[:servervar]
733
732
  servervar = args[:servervar]
734
733
  else
735
734
  servervar = _server
736
735
  end
737
-
736
+
738
737
  if !servervar
739
738
  raise "Could not figure out meta data."
740
739
  end
741
-
740
+
742
741
  ret = {
743
742
  :recommended => [],
744
743
  :browser => []
745
744
  }
746
-
745
+
747
746
  alangs = servervar["HTTP_ACCEPT_LANGUAGE"].to_s
748
747
  if alangs.length > 0
749
748
  alangs.split(/\s*,\s*/).each do |alang|
@@ -753,7 +752,7 @@ class Knj::Web
753
752
  else
754
753
  q = 1.0
755
754
  end
756
-
755
+
757
756
  if match = alang.match(/^([A-z]+)-([A-z]+)$/)
758
757
  locale = match[1]
759
758
  sublocale = match[2]
@@ -761,7 +760,7 @@ class Knj::Web
761
760
  locale = alang
762
761
  sublocale = false
763
762
  end
764
-
763
+
765
764
  ret[:browser] << {
766
765
  :locale => locale,
767
766
  :sublocale => sublocale,
@@ -769,7 +768,7 @@ class Knj::Web
769
768
  }
770
769
  end
771
770
  end
772
-
771
+
773
772
  if args[:supported] and ret[:browser]
774
773
  ret[:browser].each do |locale|
775
774
  args[:supported].each do |supported_locale|
@@ -785,17 +784,17 @@ class Knj::Web
785
784
  end
786
785
  end
787
786
  end
788
-
787
+
789
788
  if args[:default]
790
789
  ret[:recommended] << args[:default] if ret[:recommended].index(args[:default]) == nil
791
790
  end
792
-
791
+
793
792
  return ret
794
793
  end
795
-
794
+
796
795
  def self.hiddens(hidden_arr)
797
796
  html = ""
798
-
797
+
799
798
  hidden_arr.each do |hidden_hash|
800
799
  if hidden_hash.is_a?(Array)
801
800
  hidden_hash = {
@@ -813,18 +812,18 @@ class Knj::Web
813
812
  end
814
813
  end
815
814
  end
816
-
815
+
817
816
  html << "<input type=\"hidden\" name=\"#{hidden_hash[:name].to_s.html}\" value=\"#{hidden_hash[:value].to_s.html}\" />"
818
817
  end
819
-
818
+
820
819
  return html
821
820
  end
822
-
821
+
823
822
  #Parses a string to be safe for use in <a href="">.
824
823
  def self.ahref_parse(str)
825
824
  return str.to_s.gsub("&", "&amp;")
826
825
  end
827
-
826
+
828
827
  #URL-encodes a string.
829
828
  def self.urlenc(string)
830
829
  #Thanks to CGI framework
@@ -832,7 +831,7 @@ class Knj::Web
832
831
  '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
833
832
  end.tr(' ', '+')
834
833
  end
835
-
834
+
836
835
  #URL-decodes a string.
837
836
  def self.urldec(string)
838
837
  #Thanks to CGI framework
@@ -840,21 +839,21 @@ class Knj::Web
840
839
  [$1.delete('%')].pack('H*')
841
840
  end
842
841
  end
843
-
842
+
844
843
  #Escapes HTML-characters in a string.
845
844
  def self.html(string)
846
845
  return string.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
847
846
  end
848
-
847
+
849
848
  def self.html_args(h)
850
849
  str = ""
851
850
  h.each do |key, val|
852
851
  str << "&#{Php4r.urlencode(key)}=#{Php4r.urlencode(val)}"
853
852
  end
854
-
853
+
855
854
  return str
856
855
  end
857
-
856
+
858
857
  #Calculates the URL from meta hash.
859
858
  def self.url(args = {})
860
859
  if args[:meta]
@@ -862,21 +861,21 @@ class Knj::Web
862
861
  else
863
862
  meta = _meta
864
863
  end
865
-
864
+
866
865
  url = ""
867
-
866
+
868
867
  if meta["HTTP_SSL_ENABLED"] == "1"
869
868
  url << "https://"
870
869
  else
871
870
  url << "http://"
872
871
  end
873
-
872
+
874
873
  url << meta["HTTP_HOST"]
875
874
  url << meta["REQUEST_URI"] if !args.key?(:uri) or args[:uri]
876
-
875
+
877
876
  return url
878
877
  end
879
-
878
+
880
879
  URL_SAFE_REPLACES = {
881
880
  "ø" => "oe",
882
881
  "æ" => "ae",
@@ -886,11 +885,11 @@ class Knj::Web
886
885
  }
887
886
  def self.url_safe(str)
888
887
  str = str.to_s.downcase
889
-
888
+
890
889
  URL_SAFE_REPLACES.each do |key, val|
891
890
  str.gsub!(key, val)
892
891
  end
893
-
892
+
894
893
  return Knj::Strings.remove_non_ascii(str)
895
894
  end
896
895
  end
@@ -899,14 +898,14 @@ class String
899
898
  def html
900
899
  return Knj::Web.html(self)
901
900
  end
902
-
901
+
903
902
  def sql
904
903
  begin
905
904
  return _db.escape(self)
906
905
  rescue NameError
907
906
  #ignore - not i KnjAppServer HTTP-session.
908
907
  end
909
-
908
+
910
909
  raise "Could not figure out where to find db object."
911
910
  end
912
911
  end
@@ -915,7 +914,7 @@ class Symbol
915
914
  def html
916
915
  return self.to_s.html
917
916
  end
918
-
917
+
919
918
  def sql
920
919
  return self.to_s.sql
921
920
  end
@@ -925,7 +924,7 @@ class Fixnum
925
924
  def sql
926
925
  return self.to_s.sql
927
926
  end
928
-
927
+
929
928
  def html
930
929
  return self.to_s.html
931
930
  end