tawork 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +16 -0
  4. data/Gemfile +91 -0
  5. data/Gemfile.lock +295 -0
  6. data/MIT-LICENSE +20 -0
  7. data/Procfile +2 -0
  8. data/README.md +1 -0
  9. data/Rakefile +6 -0
  10. data/app/assets/images/.keep +0 -0
  11. data/app/assets/javascripts/application.js +31 -0
  12. data/app/assets/javascripts/backbone/models/.gitkeep +0 -0
  13. data/app/assets/javascripts/backbone/routers/.gitkeep +0 -0
  14. data/app/assets/javascripts/backbone/tawork.js.coffee +11 -0
  15. data/app/assets/javascripts/backbone/templates/.gitkeep +0 -0
  16. data/app/assets/javascripts/backbone/views/.gitkeep +0 -0
  17. data/app/assets/javascripts/backbone/views/page.js.coffee +75 -0
  18. data/app/assets/javascripts/backbone/views/ticket.js.coffee +110 -0
  19. data/app/assets/javascripts/backbone/views/tree_node_page.js.coffee +16 -0
  20. data/app/assets/javascripts/backbone/views/tree_node_ticket.js.coffee +14 -0
  21. data/app/assets/javascripts/wiki/pages.js.coffee +3 -0
  22. data/app/assets/stylesheets/application.css +22 -0
  23. data/app/assets/stylesheets/bootstrap_and_overrides.sass +208 -0
  24. data/app/assets/stylesheets/diff.css +14 -0
  25. data/app/assets/stylesheets/wiki/pages.css.scss +3 -0
  26. data/app/controllers/application_controller.rb +15 -0
  27. data/app/controllers/assignments_controller.rb +30 -0
  28. data/app/controllers/attachments_controller.rb +10 -0
  29. data/app/controllers/comments_controller.rb +24 -0
  30. data/app/controllers/concerns/.keep +0 -0
  31. data/app/controllers/home_controller.rb +7 -0
  32. data/app/controllers/projects_controller.rb +31 -0
  33. data/app/controllers/search_controller.rb +49 -0
  34. data/app/controllers/sink_controller.rb +10 -0
  35. data/app/controllers/tickets_controller.rb +147 -0
  36. data/app/controllers/users/omniauth_callbacks_controller.rb +23 -0
  37. data/app/controllers/wiki/pages_controller.rb +115 -0
  38. data/app/controllers/wiki/spaces_controller.rb +37 -0
  39. data/app/helpers/application_helper.rb +20 -0
  40. data/app/helpers/wiki/pages_helper.rb +2 -0
  41. data/app/inputs/fake_input.rb +6 -0
  42. data/app/mailers/.keep +0 -0
  43. data/app/models/.keep +0 -0
  44. data/app/models/assignment.rb +5 -0
  45. data/app/models/attachment.rb +54 -0
  46. data/app/models/bug.rb +2 -0
  47. data/app/models/comment.rb +6 -0
  48. data/app/models/concerns/.keep +0 -0
  49. data/app/models/page.rb +68 -0
  50. data/app/models/project.rb +2 -0
  51. data/app/models/space.rb +2 -0
  52. data/app/models/story.rb +29 -0
  53. data/app/models/story_detail.rb +3 -0
  54. data/app/models/task.rb +2 -0
  55. data/app/models/ticket.rb +127 -0
  56. data/app/models/user.rb +36 -0
  57. data/app/models/user_verifier.rb +2 -0
  58. data/app/views/comments/_comment.html.haml +6 -0
  59. data/app/views/comments/_form.html.haml +4 -0
  60. data/app/views/comments/create.js.coffee +7 -0
  61. data/app/views/devise/confirmations/new.html.erb +12 -0
  62. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  63. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  64. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  65. data/app/views/devise/passwords/edit.html.erb +16 -0
  66. data/app/views/devise/passwords/new.html.erb +12 -0
  67. data/app/views/devise/registrations/edit.html.erb +29 -0
  68. data/app/views/devise/registrations/new.html.erb +18 -0
  69. data/app/views/devise/sessions/new.html.erb +17 -0
  70. data/app/views/devise/shared/_links.erb +25 -0
  71. data/app/views/devise/unlocks/new.html.erb +12 -0
  72. data/app/views/home/index.html.haml +4 -0
  73. data/app/views/layouts/_activity_wrapper.html.haml +17 -0
  74. data/app/views/layouts/_nav_header.html.haml +26 -0
  75. data/app/views/layouts/_spaces.html.haml +34 -0
  76. data/app/views/layouts/application.html.haml +39 -0
  77. data/app/views/layouts/minimal.html.haml +22 -0
  78. data/app/views/projects/index.html.haml +16 -0
  79. data/app/views/projects/new.html.haml +6 -0
  80. data/app/views/public_activity/ticket/_assignment.html.haml +14 -0
  81. data/app/views/public_activity/ticket/_create_comment.html.haml +10 -0
  82. data/app/views/public_activity/ticket/_created.html.haml +3 -0
  83. data/app/views/public_activity/ticket/_reorder.html.haml +2 -0
  84. data/app/views/public_activity/ticket/_state_change.html.haml +2 -0
  85. data/app/views/public_activity/ticket/_update_details.html.haml +13 -0
  86. data/app/views/tickets/_activity.html.haml +3 -0
  87. data/app/views/tickets/_breadcrumb.html.haml +7 -0
  88. data/app/views/tickets/_bug_form.html.haml +1 -0
  89. data/app/views/tickets/_events_dropdown.html.haml +4 -0
  90. data/app/views/tickets/_form.html.haml +28 -0
  91. data/app/views/tickets/_project_form.html.haml +1 -0
  92. data/app/views/tickets/_story_form.html.haml +15 -0
  93. data/app/views/tickets/_task_form.html.haml +8 -0
  94. data/app/views/tickets/_tickets_listing.html.haml +5 -0
  95. data/app/views/tickets/_title_and_description.html.haml +8 -0
  96. data/app/views/tickets/_tree_node.html.haml +28 -0
  97. data/app/views/tickets/assignment.js.coffee +3 -0
  98. data/app/views/tickets/create.js.coffee +7 -0
  99. data/app/views/tickets/new.html.haml +1 -0
  100. data/app/views/tickets/show.html.haml +64 -0
  101. data/app/views/tickets/trigger_event.js.coffee +12 -0
  102. data/app/views/tickets/update.js.coffee +12 -0
  103. data/app/views/wiki/pages/_attachment.html.haml +5 -0
  104. data/app/views/wiki/pages/_attachments.html.haml +22 -0
  105. data/app/views/wiki/pages/_breadcrumb.html.haml +9 -0
  106. data/app/views/wiki/pages/_child_menu.html.haml +9 -0
  107. data/app/views/wiki/pages/_display.html.haml +138 -0
  108. data/app/views/wiki/pages/_page_header.html.haml +13 -0
  109. data/app/views/wiki/pages/_subpages_dropdown.html.haml +6 -0
  110. data/app/views/wiki/pages/_subtree.html.haml +7 -0
  111. data/app/views/wiki/pages/_tree_node.html.haml +21 -0
  112. data/app/views/wiki/pages/attach.js.coffee +2 -0
  113. data/app/views/wiki/pages/combined.html.haml +8 -0
  114. data/app/views/wiki/pages/create.js.coffee +5 -0
  115. data/app/views/wiki/pages/edit.html.haml +2 -0
  116. data/app/views/wiki/pages/history.html.haml +13 -0
  117. data/app/views/wiki/pages/index.html.haml +2 -0
  118. data/app/views/wiki/pages/new.html.haml +13 -0
  119. data/app/views/wiki/pages/show.html.haml +14 -0
  120. data/app/views/wiki/pages/update.html.haml +2 -0
  121. data/app/views/wiki/spaces/_page_list_item.html.haml +11 -0
  122. data/app/views/wiki/spaces/_space_list.html.haml +4 -0
  123. data/app/views/wiki/spaces/new.html.haml +5 -0
  124. data/app/views/wiki/spaces/space_list.html.haml +1 -0
  125. data/bin/bundle +3 -0
  126. data/bin/rails +4 -0
  127. data/bin/rake +4 -0
  128. data/config/application.rb +30 -0
  129. data/config/boot.rb +4 -0
  130. data/config/database.yml +39 -0
  131. data/config/environment.rb +5 -0
  132. data/config/environments/development.rb +35 -0
  133. data/config/environments/production.rb +80 -0
  134. data/config/environments/test.rb +36 -0
  135. data/config/initializers/backtrace_silencers.rb +7 -0
  136. data/config/initializers/config.rb +4 -0
  137. data/config/initializers/devise.rb +257 -0
  138. data/config/initializers/elasticsearch.rb +9 -0
  139. data/config/initializers/filter_parameter_logging.rb +4 -0
  140. data/config/initializers/gollum.rb +31 -0
  141. data/config/initializers/haml_gfm.rb +66 -0
  142. data/config/initializers/inflections.rb +16 -0
  143. data/config/initializers/mime_types.rb +5 -0
  144. data/config/initializers/secret_token.rb +12 -0
  145. data/config/initializers/session_store.rb +3 -0
  146. data/config/initializers/simple_form.rb +145 -0
  147. data/config/initializers/simple_form_bootstrap.rb +73 -0
  148. data/config/initializers/wrap_parameters.rb +14 -0
  149. data/config/locales/devise.en.yml +59 -0
  150. data/config/locales/en.yml +23 -0
  151. data/config/locales/simple_form.en.yml +26 -0
  152. data/config/routes.rb +101 -0
  153. data/config/tinymce.yml +10 -0
  154. data/config.ru +4 -0
  155. data/db/migrate/20131209041251_create_tickets.rb +13 -0
  156. data/db/migrate/20131210041050_devise_create_users.rb +42 -0
  157. data/db/migrate/20131210043014_add_username_to_users.rb +5 -0
  158. data/db/migrate/20131210045348_add_creator_to_ticket.rb +5 -0
  159. data/db/migrate/20131211034104_create_comments.rb +11 -0
  160. data/db/migrate/20131212073014_create_assignments.rb +12 -0
  161. data/db/migrate/20131215220825_add_position_to_ticket.rb +5 -0
  162. data/db/migrate/20131216044331_create_story_details.rb +12 -0
  163. data/db/migrate/20131218060557_create_activities.rb +23 -0
  164. data/db/migrate/20140109235844_create_pages.rb +14 -0
  165. data/db/migrate/20140112004346_create_attachments.rb +13 -0
  166. data/db/migrate/20140120030547_add_name_to_users.rb +5 -0
  167. data/db/schema.rb +125 -0
  168. data/db/seeds.rb +7 -0
  169. data/init.rb +1 -0
  170. data/lib/assets/.keep +0 -0
  171. data/lib/tasks/.keep +0 -0
  172. data/lib/tawork/engine.rb +13 -0
  173. data/lib/tawork/version.rb +3 -0
  174. data/lib/tawork.rb +4 -0
  175. data/lib/templates/haml/scaffold/_form.html.haml +10 -0
  176. data/lib/ticket_assignment.rb +25 -0
  177. data/log/.keep +0 -0
  178. data/public/401.html +57 -0
  179. data/public/404.html +58 -0
  180. data/public/422.html +58 -0
  181. data/public/500.html +57 -0
  182. data/public/favicon.ico +0 -0
  183. data/public/robots.txt +5 -0
  184. data/tags +279 -0
  185. data/tawork.gemspec +24 -0
  186. data/vendor/.DS_Store +0 -0
  187. data/vendor/assets/.DS_Store +0 -0
  188. data/vendor/assets/javascripts/.keep +0 -0
  189. data/vendor/assets/javascripts/bootstrap-tagsinput.js +503 -0
  190. data/vendor/assets/javascripts/bootstrap-tree.js +15 -0
  191. data/vendor/assets/javascripts/bootstrap-typeahead.js +335 -0
  192. data/vendor/assets/javascripts/hallo.js +2949 -0
  193. data/vendor/assets/javascripts/highlight.pack.js +1 -0
  194. data/vendor/assets/javascripts/jquery.autosize.js +250 -0
  195. data/vendor/assets/javascripts/jquery.mjs.nestedSortable.js +613 -0
  196. data/vendor/assets/javascripts/rangy-core.js +94 -0
  197. data/vendor/assets/javascripts/tinymce/mention/plugin.js +358 -0
  198. data/vendor/assets/stylesheets/.keep +0 -0
  199. data/vendor/assets/stylesheets/bootflat-extensions.css +356 -0
  200. data/vendor/assets/stylesheets/bootflat-square.css +69 -0
  201. data/vendor/assets/stylesheets/bootflat.css +1556 -0
  202. data/vendor/assets/stylesheets/bootstrap-tagsinput.css +45 -0
  203. data/vendor/assets/stylesheets/bootstrap-tree.sass +82 -0
  204. data/vendor/assets/stylesheets/highlight/arta.css +160 -0
  205. data/vendor/assets/stylesheets/highlight/ascetic.css +50 -0
  206. data/vendor/assets/stylesheets/highlight/brown_paper.css +105 -0
  207. data/vendor/assets/stylesheets/highlight/brown_papersq.png +0 -0
  208. data/vendor/assets/stylesheets/highlight/dark.css +105 -0
  209. data/vendor/assets/stylesheets/highlight/default.css +153 -0
  210. data/vendor/assets/stylesheets/highlight/docco.css +132 -0
  211. data/vendor/assets/stylesheets/highlight/far.css +113 -0
  212. data/vendor/assets/stylesheets/highlight/foundation.css +133 -0
  213. data/vendor/assets/stylesheets/highlight/github.css +130 -0
  214. data/vendor/assets/stylesheets/highlight/googlecode.css +146 -0
  215. data/vendor/assets/stylesheets/highlight/idea.css +122 -0
  216. data/vendor/assets/stylesheets/highlight/ir_black.css +105 -0
  217. data/vendor/assets/stylesheets/highlight/magula.css +123 -0
  218. data/vendor/assets/stylesheets/highlight/mono-blue.css +62 -0
  219. data/vendor/assets/stylesheets/highlight/monokai.css +127 -0
  220. data/vendor/assets/stylesheets/highlight/monokai_sublime.css +102 -0
  221. data/vendor/assets/stylesheets/highlight/obsidian.css +154 -0
  222. data/vendor/assets/stylesheets/highlight/pojoaque.css +105 -0
  223. data/vendor/assets/stylesheets/highlight/pojoaque.jpg +0 -0
  224. data/vendor/assets/stylesheets/highlight/railscasts.css +182 -0
  225. data/vendor/assets/stylesheets/highlight/rainbow.css +115 -0
  226. data/vendor/assets/stylesheets/highlight/school_book.css +113 -0
  227. data/vendor/assets/stylesheets/highlight/school_book.png +0 -0
  228. data/vendor/assets/stylesheets/highlight/solarized_dark.css +92 -0
  229. data/vendor/assets/stylesheets/highlight/solarized_light.css +92 -0
  230. data/vendor/assets/stylesheets/highlight/sunburst.css +160 -0
  231. data/vendor/assets/stylesheets/highlight/tomorrow-night-blue.css +52 -0
  232. data/vendor/assets/stylesheets/highlight/tomorrow-night-bright.css +51 -0
  233. data/vendor/assets/stylesheets/highlight/tomorrow-night-eighties.css +51 -0
  234. data/vendor/assets/stylesheets/highlight/tomorrow-night.css +52 -0
  235. data/vendor/assets/stylesheets/highlight/tomorrow.css +49 -0
  236. data/vendor/assets/stylesheets/highlight/vs.css +89 -0
  237. data/vendor/assets/stylesheets/highlight/xcode.css +157 -0
  238. data/vendor/assets/stylesheets/highlight/zenburn.css +117 -0
  239. metadata +299 -0
@@ -0,0 +1,18 @@
1
+ <h2>Sign up</h2>
2
+
3
+ <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div><%= f.label :email %><br />
7
+ <%= f.email_field :email, :autofocus => true %></div>
8
+
9
+ <div><%= f.label :password %><br />
10
+ <%= f.password_field :password %></div>
11
+
12
+ <div><%= f.label :password_confirmation %><br />
13
+ <%= f.password_field :password_confirmation %></div>
14
+
15
+ <div><%= f.submit "Sign up" %></div>
16
+ <% end %>
17
+
18
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,17 @@
1
+ <h2>Sign in</h2>
2
+
3
+ <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
4
+ <div><%= f.label :email %><br />
5
+ <%= f.email_field :email, :autofocus => true %></div>
6
+
7
+ <div><%= f.label :password %><br />
8
+ <%= f.password_field :password %></div>
9
+
10
+ <% if devise_mapping.rememberable? -%>
11
+ <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
12
+ <% end -%>
13
+
14
+ <div><%= f.submit "Sign in" %></div>
15
+ <% end %>
16
+
17
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,25 @@
1
+ <%- if controller_name != 'sessions' %>
2
+ <%= link_to "Sign in", new_session_path(resource_name) %><br />
3
+ <% end -%>
4
+
5
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
6
+ <%= link_to "Sign up", new_registration_path(resource_name) %><br />
7
+ <% end -%>
8
+
9
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
10
+ <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
11
+ <% end -%>
12
+
13
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
14
+ <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
15
+ <% end -%>
16
+
17
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
18
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
19
+ <% end -%>
20
+
21
+ <%- if devise_mapping.omniauthable? %>
22
+ <%- resource_class.omniauth_providers.each do |provider| %>
23
+ <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
24
+ <% end -%>
25
+ <% end -%>
@@ -0,0 +1,12 @@
1
+ <h2>Resend unlock instructions</h2>
2
+
3
+ <%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div><%= f.label :email %><br />
7
+ <%= f.email_field :email, :autofocus => true %></div>
8
+
9
+ <div><%= f.submit "Resend unlock instructions" %></div>
10
+ <% end %>
11
+
12
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,4 @@
1
+ %h2 Oh, hello there!
2
+
3
+ %h3 Latest Activity
4
+ %p Coming soon!
@@ -0,0 +1,17 @@
1
+ .activity
2
+ .body
3
+ .mega-icon
4
+ = timeago_tag a.created_at, date_only: false
5
+ .title
6
+ - if a.owner
7
+ = link_to a.owner.username, "#"
8
+ - else
9
+ someone
10
+ = content_for :action
11
+ .details
12
+ .avatar
13
+ = yield
14
+ :coffeescript
15
+ $ ->
16
+ #TODO: fix hack.
17
+ $("time").timeago()
@@ -0,0 +1,26 @@
1
+ .navbar.navbar-inverse.navbar-static-top.main-navbar
2
+ .container
3
+ .navbar-header
4
+ %button.navbar-toggle{"data-target" => "#bs-example-navbar-collapse-1", "data-toggle" => "collapse", type: "button"}
5
+ %span.sr-only Toggle navigation
6
+ %span.icon-bar
7
+ %span.icon-bar
8
+ %span.icon-bar
9
+
10
+ = link_to "tawork", root_path, class: "navbar-brand"
11
+
12
+ .collapse.navbar-collapse
13
+ %ul.nav.navbar-nav
14
+ -# %li
15
+ -# = link_to "wiki", wiki_path
16
+ %ul.nav.navbar-nav.navbar-right
17
+ - if user_signed_in?
18
+ %li
19
+ %a #{current_user.display_name}
20
+ - if TAWORK_CONFIG["show_login"].nil? || TAWORK_CONFIG["show_login"]
21
+ %li
22
+ = link_to "Logout", destroy_user_session_path, method: :delete
23
+ - else
24
+ - if TAWORK_CONFIG["show_login"].nil? || TAWORK_CONFIG["show_login"]
25
+ %li
26
+ = link_to "Login", new_user_session_path
@@ -0,0 +1,34 @@
1
+ %ul.nav.nav-list.nav-list-panel.space-list
2
+ %li.nav-header
3
+ Spaces
4
+ - Space.all.each do |page|
5
+ = render 'wiki/spaces/page_list_item', page: page, end_page: @page
6
+ -# %li.page-list-item{data: {page_id: page.id}}
7
+ -# = link_to wiki_page_path(page) do
8
+ -# - if page.has_children?
9
+ -# %i.fa.fa-plus-square
10
+ -# = page.title
11
+ %li
12
+ = link_to new_wiki_space_path do
13
+ %i.fa.fa-plus
14
+
15
+ :coffeescript
16
+ $ ->
17
+ $(document).on "click", ".page-list-item a i.fa-plus-square", ->
18
+ $i = $(this)
19
+ $i.toggleClass("fa-plus-square").toggleClass('fa-minus-square')
20
+ page_id = $i.closest(".page-list-item").data("page-id")
21
+ $.ajax
22
+ method: "GET"
23
+ url: "/wiki/spaces/" + page_id + "/space_list"
24
+ success: (data) ->
25
+ $i.closest("a").after data
26
+ console.log "lalla"
27
+ false
28
+
29
+ $(document).on "click", ".page-list-item a i.fa-minus-square", ->
30
+ $i = $(this)
31
+ $i.toggleClass("fa-plus-square").toggleClass('fa-minus-square')
32
+ $i.closest(".page-list-item").find("ul.nav-list-sub").remove()
33
+ console.log "lalla"
34
+ false
@@ -0,0 +1,39 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title tawork
5
+ %meta{content: "width=device-width, initial-scale=1.0", name: "viewport"}/
6
+
7
+ = stylesheet_link_tag "application", media: "all"
8
+ = javascript_include_tag "application"
9
+ = csrf_meta_tags
10
+ %link{href: "http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700", rel: "stylesheet", type: "text/css"}/
11
+ %link{href: "http://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic", rel: "stylesheet", type: "text/css"}/
12
+
13
+
14
+ %body
15
+ = render 'layouts/nav_header'
16
+
17
+ .container
18
+ - if notice.present?
19
+ .alert.alert-success= notice
20
+ - if alert.present?
21
+ .alert.alert-error= alert
22
+
23
+ .container
24
+ .row
25
+ .col-md-3
26
+ = render 'layouts/spaces'
27
+
28
+ - if TAWORK_CONFIG["show_projects"].nil? || TAWORK_CONFIG["show_projects"]
29
+ %ul.nav.nav-list.nav-list-panel
30
+ %li.nav-header
31
+ Projects
32
+ - Project.all.each do |project|
33
+ %li
34
+ = link_to project.title, project_path(project)
35
+ %li
36
+ = link_to new_project_path do
37
+ %i.fa.fa-plus
38
+ .col-md-9
39
+ = yield
@@ -0,0 +1,22 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title tawork
5
+ %meta{content: "width=device-width, initial-scale=1.0", name: "viewport"}/
6
+
7
+ = stylesheet_link_tag "application", media: "all"
8
+ = javascript_include_tag "application"
9
+ = csrf_meta_tags
10
+ %link{href: "http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700", rel: "stylesheet", type: "text/css"}/
11
+ %link{href: "http://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic", rel: "stylesheet", type: "text/css"}/
12
+
13
+
14
+ %body
15
+ .container
16
+ .row
17
+ .col-md-9
18
+ = yield
19
+
20
+ :coffeescript
21
+ hljs.initHighlightingOnLoad()
22
+
@@ -0,0 +1,16 @@
1
+ %h2 Project Index
2
+
3
+ %table.table.table-hover
4
+ %tr.warning
5
+ %th
6
+ %th Title
7
+ %th State
8
+ %th Creator
9
+ %th Assignments
10
+ - @projects.each_with_index do |project, index|
11
+ %tr
12
+ %td= index + 1
13
+ %td= link_to project.title, project_path(project)
14
+ %td= project.state
15
+ %td= project.creator.display_name
16
+ %td thatduck
@@ -0,0 +1,6 @@
1
+ %h2 New Project
2
+
3
+ = simple_form_for @project, url: "/projects" do |f|
4
+ = f.input :title, placeholder: "Title", label: false
5
+ = f.input :description, placeholder: "Description", label: false
6
+ = f.submit class: "btn btn-primary"
@@ -0,0 +1,14 @@
1
+ - content_for :action, flush: true do
2
+ &nbsp;
3
+ - if a.parameters[:assigned_ids].any?
4
+ .assigned
5
+ assigned ticket to:
6
+ - User.where(id: a.parameters[:assigned_ids]).each do |user|
7
+ = link_to user.display_name, "#"
8
+
9
+ - if a.parameters[:unassigned_ids].any?
10
+ .assigned
11
+ unassigned from ticket:
12
+ - User.where(id: a.parameters[:unassigned_ids]).each do |user|
13
+ = link_to user.display_name, "#"
14
+
@@ -0,0 +1,10 @@
1
+ - content_for :action, flush: true do
2
+ added a comment
3
+
4
+ .well
5
+ - if @comments.present? && @comments[a.recipient_id].present?
6
+ - body = @comments[a.recipient_id].first.body
7
+ - else
8
+ - body = a.recipient.body
9
+ :markdown
10
+ #{body}
@@ -0,0 +1,3 @@
1
+ - content_for :action, flush: true do
2
+ created this ticket
3
+
@@ -0,0 +1,2 @@
1
+ - content_for :action, flush: true do
2
+ reordered ticket from somewhere to somewhere
@@ -0,0 +1,2 @@
1
+ - content_for :action, flush: true do
2
+ changed state from #{a.parameters[:from]} to #{a.parameters[:to]}
@@ -0,0 +1,13 @@
1
+ - content_for :action, flush: true do
2
+ - changed = []
3
+ - changed << ["title"] if activity.parameters[:title_html_diff].present?
4
+ - changed << ["description"] if activity.parameters[:description_html_diff].present?
5
+ changed the #{changed.join(" and ")}
6
+
7
+ - if activity.parameters[:title_html_diff].present?
8
+ %strong Title:
9
+ = raw activity.parameters[:title_html_diff]
10
+
11
+ - if activity.parameters[:description_html_diff].present?
12
+ %strong Description:
13
+ = raw activity.parameters[:description_html_diff]
@@ -0,0 +1,3 @@
1
+ %li.panel.panel-default.list-group-item
2
+ .panel-body
3
+ = activity.render(self, layout: :activity_wrapper)
@@ -0,0 +1,7 @@
1
+ %ol.breadcrumb
2
+ - crumbs = ticket.ancestors << ticket
3
+ - crumbs.each do |crumb|
4
+ %li{class: ("active" if crumbs.last == crumb)}
5
+ %span.label.title{class: "label-#{crumb.type.underscore}"}= crumb.type
6
+ = link_to ticket_path(crumb) do
7
+ = crumb.title
@@ -0,0 +1 @@
1
+ = render "task_form", ticket: ticket
@@ -0,0 +1,4 @@
1
+ %ul.dropdown-menu.dropdown-inverse.pull-right{role: "menu", style: "width: 100px", "aria-labelledby" => "state_dropdown_#{ticket.id}"}
2
+ - ticket.aasm.events.each do |event|
3
+ %li{role: "presentation"}
4
+ %a.trigger-event{"data-event" => event, href: "#", role: "menuitem", tabindex: "-1"}= event.to_s.humanize
@@ -0,0 +1,28 @@
1
+ - tab = local_assigns[:tab]
2
+ #new_ticket_tabs
3
+ %ul.nav.nav-tabs.nav-append-content
4
+ - @ticket_types.keys.each do |type|
5
+ %li
6
+ %a{class: "#{type.underscore}-tab",
7
+ href: "##{type.underscore}-tab",
8
+ "data-toggle" => "tab"}
9
+ = type.humanize
10
+
11
+ .tab-content
12
+ - @ticket_types.keys.each do |type|
13
+ .tab-pane{id: "#{type.underscore}-tab"}
14
+ = render "#{type.underscore}_form", ticket: @ticket_types[type]
15
+
16
+ - if tab.present?
17
+ :coffeescript
18
+ $ ->
19
+ $('#new_ticket_tabs a.#{tab}-tab').tab('show')
20
+ - else
21
+ :coffeescript
22
+ $ ->
23
+ $('#new_ticket_tabs a:first').tab('show')
24
+ :coffeescript
25
+ $ ->
26
+ $('#new_ticket_tabs a[data-toggle="tab"]').on 'shown.bs.tab', (event) ->
27
+ $tab = $($(event.target).attr("href"))
28
+ $tab.find("input[type=text]:first").focus()
@@ -0,0 +1 @@
1
+ = render "task_form", ticket: ticket
@@ -0,0 +1,15 @@
1
+ = simple_form_for ticket, remote: true do |f|
2
+ = hidden_field_tag :type, ticket.type.underscore
3
+ = f.input :parent_id, as: :hidden
4
+ .try{style: "line-height: 3em;"}
5
+ %span As a
6
+ = f.input :who, placeholder: "Who?", label: false
7
+ %span I want to
8
+ = f.input :what, placeholder: "What?", label: false
9
+ %span , so that
10
+ = f.input :why, placeholder: "Why?", label: false
11
+
12
+ = f.input :description, placeholder: "Description (optional)", label: false
13
+ = f.submit class: "btn btn-primary pull-right"
14
+ - unless ticket.new_record?
15
+ = link_to "Cancel", "#", class: "cancel-edit-form"
@@ -0,0 +1,8 @@
1
+ = simple_form_for ticket, remote: true do |f|
2
+ = hidden_field_tag :type, ticket.type.underscore
3
+ = f.input :parent_id, as: :hidden
4
+ = f.input :title, placeholder: "Title", label: false
5
+ = f.input :description, placeholder: "Description", label: false
6
+ = f.submit class: "btn btn-primary pull-right"
7
+ - unless ticket.new_record?
8
+ = link_to "Cancel", "#", class: "cancel-edit-form"
@@ -0,0 +1,5 @@
1
+ .well
2
+ .tree
3
+ %ul
4
+ - tickets.each do |ticket|
5
+ = render 'tree_node', ticket: ticket
@@ -0,0 +1,8 @@
1
+ .panel-heading
2
+ %h3.panel-title
3
+ = ticket.title
4
+ %span.label.pull-right{class: "label-#{ticket.type.underscore}"}= ticket.type
5
+ - if ticket.description.present?
6
+ .panel-body.ticket-description
7
+ :markdown
8
+ #{ticket.description}
@@ -0,0 +1,28 @@
1
+ - cache ["tree_node", ticket] do
2
+ %li.ticket.tree-node{id: "ticket_#{ticket.id}",
3
+ class: "tree-node-#{ticket.type.underscore}",
4
+ data: {ticket_id: ticket.id, assignments: ticket.assignment_users_hash.to_json}}
5
+ .panel.panel-default
6
+ .panel-body{style: "position: relative;"}
7
+ .node-handle.panel-group{class: "node-#{ticket.type.underscore}"}
8
+ %span.node-toggle
9
+ %i.fa
10
+ = ticket.type
11
+ .node-title
12
+ = link_to ticket.short_title(12), ticket_path(ticket)
13
+ .details
14
+ .ticket-state
15
+ %button.btn.btn-primary.dropdown-toggle.pull-right{type: "button", id: "state_dropdown_#{ticket.id}", data: {toggle: "dropdown", state: "#{ticket.state.try(:underscore)}"}}
16
+ %span.state= ticket.state
17
+ %i.fa.fa-caret-down
18
+ -# .label.label-default.dropdown-toggle{id: "state_dropdown_#{ticket.id}", "data-toggle" => "dropdown"}
19
+ = render "events_dropdown", ticket: ticket
20
+
21
+ - if @subtree.present? && @subtree[ticket.id].try(:any?)
22
+ %ol
23
+ - @subtree[ticket.id].sort_by(&:position).each do |child|
24
+ = render 'tree_node', ticket: child
25
+
26
+ :coffeescript
27
+ $ ->
28
+ ticket_view = new Tawork.Views.TreeNodeTicketView el: $("#ticket_#{ticket.id}").get(0)
@@ -0,0 +1,3 @@
1
+ $(".ticket[data-ticket-id=<%= @ticket.id %>] > #activities")
2
+ .prepend('<%=j render 'tickets/activity', ticket: @ticket, activity: @activity %>')
3
+
@@ -0,0 +1,7 @@
1
+ <% if @ticket.errors.any? %>
2
+ alert <%=raw @ticket.errors.to_a.to_json %>
3
+ <% else %>
4
+ $(".tree > ol").append('<%=j render 'tree_node', ticket: @ticket %>')
5
+ $("#new_ticket_tabs").replaceWith('<%=j render 'form', tab: @ticket.type.underscore %>')
6
+ $("#<%= @ticket.type.underscore %>-tab input[type=text]:first").focus()
7
+ <% end %>
@@ -0,0 +1 @@
1
+ = render "form"
@@ -0,0 +1,64 @@
1
+ - cache ["ticket_show", @ticket] do
2
+ .ticket{id: "ticket_#{@ticket.id}", data: {"ticket-id" => @ticket.id, assignments: @ticket.assignment_users_hash.to_json}}
3
+ = render 'breadcrumb', ticket: @ticket
4
+
5
+ .edit-ticket-details.panel.panel-default{style: "display: none;"}
6
+ .panel-heading
7
+ %h3.panel-title
8
+ Edit #{@ticket.type}
9
+ .panel-body
10
+ = render "#{@ticket.type.underscore}_form", ticket: @ticket
11
+
12
+ .ticket-details.panel.panel-default
13
+ = render 'title_and_description', ticket: @ticket
14
+
15
+ %ul.list-group
16
+ %li.list-group-item
17
+ .row
18
+ .col-md-4
19
+ = simple_form_for @ticket, url: assignment_ticket_path(@ticket), remote: true do |f|
20
+ = hidden_field_tag :type, @ticket.type.underscore
21
+ = f.input :assignment_user_ids, as: :fake,
22
+ input_html: {class: "user-assignment-tags"},
23
+ label: "Assignments", placeholder: "find people"
24
+ .col-md-6
25
+ .col-md-2
26
+ .ticket-state
27
+ .label.label-default.dropdown-toggle{id: "state_dropdown_#{@ticket.id}", "data-toggle" => "dropdown"}
28
+ = @ticket.state
29
+ = render "events_dropdown", ticket: @ticket
30
+
31
+ .ticket{data: {"ticket-id" => @ticket.id}}
32
+ .well.well-sm{style: "position: relative;"}
33
+ .tree
34
+ %ol{id: "sortable_#{@ticket.id}"}
35
+ - if @subtree[@ticket.id].try(:any?)
36
+ - @subtree[@ticket.id].sort_by(&:position).each do |ticket|
37
+ = render 'tree_node', ticket: ticket
38
+ = render "form"
39
+
40
+ .ticket{data: {"ticket-id" => @ticket.id}}
41
+ = render 'comments/form', comment: Comment.new(ticket_id: @ticket.id)
42
+
43
+ %h3 Activity
44
+ %ul#activities.list-group
45
+ - @ticket.activities.order("created_at desc").each do |activity|
46
+ = render "activity", ticket: @ticket, activity: activity
47
+
48
+
49
+
50
+ #selector
51
+ %ul.dropdown-menu.dropdown-inverse{"aria-labelledby" => "dropdownMenu1", :role => "menu"}
52
+ %li{:role => "presentation"}
53
+ %a{:href => "#", :role => "menuitem", :tabindex => "-1"} Action
54
+ %li{:role => "presentation"}
55
+ %a{:href => "#", :role => "menuitem", :tabindex => "-1"} Another action
56
+ %li{:role => "presentation"}
57
+ %a{:href => "#", :role => "menuitem", :tabindex => "-1"} Something else here
58
+ %li.divider{:role => "presentation"}
59
+ %li{:role => "presentation"}
60
+ %a{:href => "#", :role => "menuitem", :tabindex => "-1"} Separated link
61
+
62
+ :coffeescript
63
+ $ ->
64
+ ticket_view = new Tawork.Views.TicketView el: $("#ticket_#{@ticket.id}").get(0)
@@ -0,0 +1,12 @@
1
+ $("#ticket_<%= @ticket.id %>")
2
+ .find(".ticket-state").first()
3
+ .find(".btn .state")
4
+ .text("<%= @ticket.state %>")
5
+ .end()
6
+ .find(".btn")
7
+ .attr("data-state", "<%= @ticket.state.try(:underscore) %>")
8
+ .end()
9
+ .find("ul.dropdown-menu")
10
+ .replaceWith('<%=j render 'events_dropdown', ticket: @ticket %>')
11
+ $(".ticket[data-ticket-id=<%= @ticket.id %>] > #activities")
12
+ .prepend('<%=j render 'tickets/activity', ticket: @ticket, activity: @activity %>')
@@ -0,0 +1,12 @@
1
+ <% if @ticket.errors.any? %>
2
+ alert <%=raw @ticket.errors.to_a.to_json %>
3
+ <% else %>
4
+ $("#ticket_<%= @ticket.id %> .ticket-details.panel")
5
+ .find(".panel-heading").remove().end()
6
+ .find(".ticket-description").remove().end()
7
+ .prepend('<%=j render 'title_and_description', ticket: @ticket %>')
8
+ $("#ticket_<%= @ticket.id %> .edit-ticket-details.panel").hide()
9
+ $("#ticket_<%= @ticket.id %> .ticket-details.panel").show()
10
+ $(".ticket[data-ticket-id=<%= @ticket.id %>] > #activities")
11
+ .prepend('<%=j render 'activity', ticket: @ticket, activity: @activity %>')
12
+ <% end %>
@@ -0,0 +1,5 @@
1
+ %tr.attachment
2
+ %td.filename= link_to attachment.filename, attachment_path(attachment)
3
+ %td.size= number_to_human_size(attachment.size)
4
+ %td.versions 1
5
+ %td.actions
@@ -0,0 +1,22 @@
1
+ #attachments
2
+ %h3 Attachments
3
+ %table.attachments.table.table-condensed
4
+ %tr
5
+ %th Filename
6
+ %th Size
7
+ %th Versions
8
+ %th
9
+ = render partial: 'attachment', collection: @page.attachments, as: :attachment
10
+
11
+ #filelist
12
+ %a#pickfiles.btn.btn-primary{href: "#", style: "dislay: block; clear: both;"} Upload
13
+ #uploadfiles
14
+ #console
15
+
16
+ %script{type: "text/template", id: "upload_template"}
17
+ .panel.panel-default
18
+ .panel-body
19
+ %span.filename
20
+ %span.message.pull-right Uploading ...
21
+ .progress.progress-striped.active
22
+ .progress-bar.bar{style: "width: 36%;"}
@@ -0,0 +1,9 @@
1
+ - page ||= @page
2
+ - link_last ||= false
3
+ - crumbs = page.ancestors
4
+ - crumbs << page
5
+ - if crumbs.any?
6
+ %ol.breadcrumb{style: "margin-bottom: 5px;"}
7
+ - crumbs.each do |crumb|
8
+ %li
9
+ = link_to_if (crumb != crumbs.last) || link_last, crumb.title, wiki_page_path(crumb)
@@ -0,0 +1,9 @@
1
+ %li{class: "#{'dropdown-submenu' if node.children.any?}"}
2
+ = link_to node.title, wiki_page_path(node)
3
+ - if node.children.any?
4
+ %ul.dropdown-menu
5
+ - node.children.order(:position).each do |child|
6
+ = render 'child_menu', node: child
7
+ %li.divider
8
+ %li
9
+ = link_to "New Page", new_wiki_page_path(parent_id: node.id)