yhara-tickets 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,65 @@
1
+ ;;;
2
+ ;;; main.scm
3
+ ;;;
4
+
5
+ ;; load
6
+ (for-each (lambda (pair)
7
+ (js-load (string-append "js/" (car pair) ".js")
8
+ (cdr pair)))
9
+ '(("scriptaculous" . "Scriptaculous")
10
+ ("builder" . "Builder")
11
+ ("effects" . "Effect")
12
+ ("dragdrop" . "Draggable")
13
+ ("controls" . "Autocompleter")
14
+ ("slider" . "Control")
15
+ ("sound" . "Sound")))
16
+
17
+ (load "scm/ticket.scm")
18
+
19
+ ;; consts
20
+
21
+ (define (px n)
22
+ (string-append (number->string n) "px"))
23
+
24
+ (define (set-position! elem x y)
25
+ (set-style! elem "position" "absolute")
26
+ (set-style! elem "left" (px x))
27
+ (set-style! elem "top" (px y)))
28
+
29
+ (define (get-position elem)
30
+ (define (remove-px str)
31
+ (string->number (car (regexp-exec "(\\d+)" str))))
32
+ (values (remove-px (get-style elem "left"))
33
+ (remove-px (get-style elem "top"))))
34
+
35
+ (define *width* #f)
36
+ (define *height* #f)
37
+
38
+ ; load board size
39
+ (let1 result (read-from-string (http-request "config/board_size"))
40
+ (if (eq? (car result) 'xy)
41
+ (begin
42
+ (set! *width* (cadr result))
43
+ (set! *height* (cddr result)))
44
+ (show-error "error: failed to load board size")))
45
+
46
+ (set-style! ($ "field") "width" (px *width*))
47
+ (set-style! ($ "field") "height" (px *height*))
48
+ (set-position! ($ "top") (/ *width* 2) 0)
49
+ (set-position! ($ "bottom") (/ *width* 2) *height*)
50
+ (set-position! ($ "right") *width* (/ *height* 2))
51
+ (set-position! ($ "left") 0 (/ *height* 2))
52
+ (set-position! ($ "origin") (/ *width* 2) (/ *height* 2))
53
+
54
+ (add-handler! ($ "origin") "click" ticket-create)
55
+
56
+ (add-handler! ($ "hand_title") "click" on-ticket-rename)
57
+ (add-handler! ($ "hand_delete") "click" on-ticket-delete)
58
+
59
+ (define show-error print)
60
+
61
+
62
+ (for-each (lambda (vals) (apply ticket-new! vals))
63
+ (read-from-string (http-request "tickets/list")))
64
+
65
+ (display "ok")
@@ -0,0 +1,98 @@
1
+ ;;
2
+ ;; ticket.scm
3
+ ;;
4
+
5
+ (define (ticket-create)
6
+ (let1 result (read-from-string (http-request "tickets/create"))
7
+ (if (eq? (car result) 'id)
8
+ (ticket-new! (cdr result) "" (/ *width* 2) (/ *height* 2))
9
+ (show-error "error: failed to create new ticket"))))
10
+
11
+ (define (ticket-move id x y)
12
+ (let1 result (http-post "tickets/move/"
13
+ `(("id" . ,id) ("x" . ,x) ("y" . ,y)))
14
+ (when (not (string=? result "#t"))
15
+ (show-error "error: failed to save ticket position"))))
16
+
17
+ (define (ticket-moved ticket-div)
18
+ (call-with-values
19
+ (lambda () (get-position ticket-div))
20
+ (lambda (x y)
21
+ (ticket-move (js-ref ticket-div "ticket-id") x y))))
22
+
23
+ ; the ticket-div currently shown
24
+ (define *current-ticket* #f)
25
+
26
+ ; show infomation of a ticket
27
+ (define (show-ticket ticket-div)
28
+ (set! *current-ticket* ticket-div)
29
+ (let1 title (get-content ticket-div)
30
+ (set-content! ($ "hand_title")
31
+ (if (string=? title "") "(no title)" title)))
32
+ (set-content! ($ "hand_desc")
33
+ (string-append "("
34
+ (get-style ticket-div "left")
35
+ ","
36
+ (get-style ticket-div "top")
37
+ ")")))
38
+
39
+ (define (on-ticket-click ticket-div)
40
+ (element-hide! ($ "hand_title_submit"))
41
+ (show-ticket ticket-div))
42
+
43
+ (define (ticket-new! id name x y)
44
+ (let1 ticket-div (element-new `("div.ticket" ,name))
45
+ (js-set! ticket-div "ticket-id" id)
46
+ (add-handler! ticket-div "click"
47
+ (lambda (ev) (on-ticket-click (js-ref ev "target"))))
48
+ (element-insert! ($ "field") ticket-div)
49
+ (js-new "Draggable" ticket-div
50
+ (js-obj "onEnd"
51
+ (js-closure
52
+ (lambda (drg) (ticket-moved (js-ref drg "element"))))))
53
+ (set-position! ticket-div (+ (/ *width* 2) x) (+ (/ *height* 2) y))
54
+ ticket-div))
55
+
56
+ ; rename ticket and submit to server
57
+ (define (ticket-rename new-title)
58
+ (element-update! ($ "hand_title") new-title)
59
+ (element-update! *current-ticket* new-title)
60
+ (let* ((id (js-ref *current-ticket* "ticket-id"))
61
+ (result (http-post "tickets/rename"
62
+ `(("id" . ,id) ("title" . ,new-title)))))
63
+ (when (not (string=? result "#t"))
64
+ (show-error "error: failed to save new ticket title"))))
65
+
66
+ ; show rename form and call ticket-rename when submitted
67
+ (define (on-ticket-rename)
68
+ (define (rename-form old)
69
+ (string-append "<input type='text' value='" old "' id='rename_text'>"))
70
+ (let1 ok-button ($ "hand_title_submit")
71
+ (unless (element-visible? ok-button)
72
+ (element-show! ok-button)
73
+ (element-update! ($ "hand_title")
74
+ (rename-form (get-content ($ "hand_title"))))
75
+ (wait-for ok-button "click")
76
+ (ticket-rename (get-content ($ "rename_text")))
77
+ (element-hide! ok-button))))
78
+
79
+ ; send server to delete info and clear the hand
80
+ (define (ticket-delete id)
81
+ (let1 result (http-post "tickets/delete"
82
+ `(("id" . ,id)))
83
+ (if (string=? result "#t")
84
+ (begin
85
+ (element-remove! *current-ticket*)
86
+ (set! *current-ticket* #f)
87
+ (element-clear! ($ "hand_title"))
88
+ (element-clear! ($ "hand_desc")))
89
+ (show-error "error: failed to save ticket position"))))
90
+
91
+ ; ask really delete the ticket
92
+ (define (on-ticket-delete)
93
+ (when *current-ticket*
94
+ (let1 message (string-append "really delete '"
95
+ (get-content *current-ticket*)
96
+ "' ?")
97
+ (when (confirm message)
98
+ (ticket-delete (js-ref *current-ticket* "ticket-id"))))))
data/tickets.gemspec ADDED
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{tickets}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Yutaka HARA"]
9
+ s.date = %q{2009-04-22}
10
+ s.default_executable = %q{tickets-server}
11
+ s.description = %q{}
12
+ s.email = %q{yutaka.hara+github at gmail.com}
13
+ s.executables = ["tickets-server"]
14
+ s.extra_rdoc_files = ["README.rdoc"]
15
+ s.files = ["README.rdoc", "TODO", "bin/tickets-server", "db/migrate/001_create_tickets.rb", "db/migrate/002_add_deleted_to_tickets.rb", "db/migrate/003_add_timeouted_to_tickets.rb", "dot.tickets.conf.sample", "model/ticket.rb", "public/biwascheme/MIT-LICENSE.txt", "public/biwascheme/README", "public/biwascheme/lib/biwascheme.js", "public/biwascheme/lib/extra_lib.js", "public/biwascheme/lib/io.js", "public/biwascheme/lib/prototype.js", "public/biwascheme/lib/r6rs_lib.js", "public/biwascheme/lib/stackbase.js", "public/biwascheme/lib/webscheme_lib.js", "public/js/builder.js", "public/js/controls.js", "public/js/dragdrop.js", "public/js/effects.js", "public/js/scriptaculous.js", "public/js/slider.js", "public/js/sound.js", "public/js/unittest.js", "public/scm/main.scm", "public/scm/ticket.scm", "tickets.gemspec", "view/index.xhtml"]
16
+ s.homepage = %q{http://github.com/yhara/tickets/}
17
+ s.rdoc_options = ["--title", "tickets documentation", "--charset", "utf-8", "--opname", "index.html", "--line-numbers", "--main", "README.rdoc", "--inline-source", "--exclude", "^(examples|extras)/"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{}
20
+ s.rubygems_version = %q{1.3.1}
21
+ s.summary = %q{Two-dimentional TODO manager}
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_runtime_dependency(%q<ramaze>, [">= 0"])
29
+ s.add_runtime_dependency(%q<sequel>, [">= 0"])
30
+ s.add_runtime_dependency(%q<sqlite3-ruby>, [">= 0"])
31
+ else
32
+ s.add_dependency(%q<ramaze>, [">= 0"])
33
+ s.add_dependency(%q<sequel>, [">= 0"])
34
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
35
+ end
36
+ else
37
+ s.add_dependency(%q<ramaze>, [">= 0"])
38
+ s.add_dependency(%q<sequel>, [">= 0"])
39
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
40
+ end
41
+ end
data/view/index.xhtml ADDED
@@ -0,0 +1,61 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
5
+ <title>Hello World</title>
6
+ <style>
7
+ div#field{
8
+ border:1px solid black; float:left; margin:0.5em; padding:0.5em;
9
+ }
10
+ div#hand{
11
+ width: 300px; height: 300px;
12
+ border:1px solid black; margin:0.5em; padding:0.5em;
13
+ float: left;
14
+ }
15
+ div#hand_header{
16
+ border-bottom: 1px solid black;
17
+ }
18
+ div#hand_control{
19
+ text-align: right;
20
+ }
21
+ div.ticket{
22
+ width: 100px;
23
+ border: 1px solid black;
24
+ padding: 0.3em;
25
+ }
26
+ </style>
27
+ </head>
28
+ <body>
29
+
30
+ <div id="field">
31
+ <div id="top">かならず</div>
32
+ <div id="bottom">できれば</div>
33
+ <div id="right">いますぐ</div>
34
+ <div id="left">そのうち</div>
35
+ <div id="origin"><a href='#'>★</a></div>
36
+ </div>
37
+
38
+ <div id="hand">
39
+ <div id="hand_header">
40
+ <span id="hand_title"></span>
41
+ <input type="button" id="hand_title_submit" value="OK" style="display:none;">
42
+ </div>
43
+ <div id="hand_control">
44
+ <a href="#" id="hand_edit">edit</a>
45
+ <a href="#" id="hand_delete">delete</a>
46
+ </div>
47
+ <div id="hand_desc"></div>
48
+ </div>
49
+
50
+ <div id="bs-console"></div>
51
+
52
+ <div style="clear:both">
53
+ <a href="track">過去のチケット</a>
54
+ </div>
55
+
56
+ <script src="biwascheme/lib/biwascheme.js">
57
+ (load "scm/main.scm")
58
+ </script>
59
+
60
+ </body>
61
+ </html>
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yhara-tickets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yutaka HARA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-22 00:00:00 -07:00
13
+ default_executable: tickets-server
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ramaze
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: sequel
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: sqlite3-ruby
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: ""
46
+ email: yutaka.hara+github at gmail.com
47
+ executables:
48
+ - tickets-server
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.rdoc
53
+ files:
54
+ - README.rdoc
55
+ - TODO
56
+ - bin/tickets-server
57
+ - db/migrate/001_create_tickets.rb
58
+ - db/migrate/002_add_deleted_to_tickets.rb
59
+ - db/migrate/003_add_timeouted_to_tickets.rb
60
+ - dot.tickets.conf.sample
61
+ - model/ticket.rb
62
+ - public/biwascheme/MIT-LICENSE.txt
63
+ - public/biwascheme/README
64
+ - public/biwascheme/lib/biwascheme.js
65
+ - public/biwascheme/lib/extra_lib.js
66
+ - public/biwascheme/lib/io.js
67
+ - public/biwascheme/lib/prototype.js
68
+ - public/biwascheme/lib/r6rs_lib.js
69
+ - public/biwascheme/lib/stackbase.js
70
+ - public/biwascheme/lib/webscheme_lib.js
71
+ - public/js/builder.js
72
+ - public/js/controls.js
73
+ - public/js/dragdrop.js
74
+ - public/js/effects.js
75
+ - public/js/scriptaculous.js
76
+ - public/js/slider.js
77
+ - public/js/sound.js
78
+ - public/js/unittest.js
79
+ - public/scm/main.scm
80
+ - public/scm/ticket.scm
81
+ - tickets.gemspec
82
+ - view/index.xhtml
83
+ has_rdoc: false
84
+ homepage: http://github.com/yhara/tickets/
85
+ post_install_message:
86
+ rdoc_options:
87
+ - --title
88
+ - tickets documentation
89
+ - --charset
90
+ - utf-8
91
+ - --opname
92
+ - index.html
93
+ - --line-numbers
94
+ - --main
95
+ - README.rdoc
96
+ - --inline-source
97
+ - --exclude
98
+ - ^(examples|extras)/
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: "0"
106
+ version:
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: "0"
112
+ version:
113
+ requirements: []
114
+
115
+ rubyforge_project: ""
116
+ rubygems_version: 1.2.0
117
+ signing_key:
118
+ specification_version: 2
119
+ summary: Two-dimentional TODO manager
120
+ test_files: []
121
+