knjrbfw 0.0.111 → 0.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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