sambal-cle 0.1.3

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.
Files changed (90) hide show
  1. data/README.md +4 -0
  2. data/lib/sambal-cle/base_page.rb +20 -0
  3. data/lib/sambal-cle/core-ext.rb +90 -0
  4. data/lib/sambal-cle/data_objects/announcement.rb +82 -0
  5. data/lib/sambal-cle/data_objects/assessment.rb +32 -0
  6. data/lib/sambal-cle/data_objects/assignment.rb +205 -0
  7. data/lib/sambal-cle/data_objects/blog.rb +46 -0
  8. data/lib/sambal-cle/data_objects/blogger.rb +49 -0
  9. data/lib/sambal-cle/data_objects/chat_room.rb +54 -0
  10. data/lib/sambal-cle/data_objects/event.rb +89 -0
  11. data/lib/sambal-cle/data_objects/forum.rb +212 -0
  12. data/lib/sambal-cle/data_objects/lesson.rb +185 -0
  13. data/lib/sambal-cle/data_objects/message.rb +57 -0
  14. data/lib/sambal-cle/data_objects/poll.rb +74 -0
  15. data/lib/sambal-cle/data_objects/resource.rb +209 -0
  16. data/lib/sambal-cle/data_objects/site.rb +295 -0
  17. data/lib/sambal-cle/data_objects/syllabus.rb +73 -0
  18. data/lib/sambal-cle/data_objects/web_content_tool.rb +51 -0
  19. data/lib/sambal-cle/data_objects/wiki.rb +63 -0
  20. data/lib/sambal-cle/date_makers.rb +118 -0
  21. data/lib/sambal-cle/gem_ext.rb +23 -0
  22. data/lib/sambal-cle/page_helper.rb +22 -0
  23. data/lib/sambal-cle/page_maker.rb +48 -0
  24. data/lib/sambal-cle/page_objects/account.rb +111 -0
  25. data/lib/sambal-cle/page_objects/aliases.rb +43 -0
  26. data/lib/sambal-cle/page_objects/announcements.rb +190 -0
  27. data/lib/sambal-cle/page_objects/assessments.rb +874 -0
  28. data/lib/sambal-cle/page_objects/assignments.rb +770 -0
  29. data/lib/sambal-cle/page_objects/basic_lti.rb +6 -0
  30. data/lib/sambal-cle/page_objects/blogger.rb +205 -0
  31. data/lib/sambal-cle/page_objects/blogs.rb +60 -0
  32. data/lib/sambal-cle/page_objects/calendar.rb +330 -0
  33. data/lib/sambal-cle/page_objects/calendar_summary.rb +1 -0
  34. data/lib/sambal-cle/page_objects/chat_room.rb +22 -0
  35. data/lib/sambal-cle/page_objects/drop_box.rb +9 -0
  36. data/lib/sambal-cle/page_objects/email_archive.rb +22 -0
  37. data/lib/sambal-cle/page_objects/entity_picker.rb +62 -0
  38. data/lib/sambal-cle/page_objects/evaluations.rb +158 -0
  39. data/lib/sambal-cle/page_objects/feedback.rb +36 -0
  40. data/lib/sambal-cle/page_objects/forms.rb +120 -0
  41. data/lib/sambal-cle/page_objects/forums.rb +254 -0
  42. data/lib/sambal-cle/page_objects/glossary.rb +117 -0
  43. data/lib/sambal-cle/page_objects/gradebook.rb +29 -0
  44. data/lib/sambal-cle/page_objects/gradebook2.rb +17 -0
  45. data/lib/sambal-cle/page_objects/home.rb +36 -0
  46. data/lib/sambal-cle/page_objects/jforums.rb +444 -0
  47. data/lib/sambal-cle/page_objects/job_scheduler.rb +121 -0
  48. data/lib/sambal-cle/page_objects/lessons.rb +361 -0
  49. data/lib/sambal-cle/page_objects/login.rb +28 -0
  50. data/lib/sambal-cle/page_objects/matrix.rb +241 -0
  51. data/lib/sambal-cle/page_objects/media_gallery.rb +13 -0
  52. data/lib/sambal-cle/page_objects/messages.rb +622 -0
  53. data/lib/sambal-cle/page_objects/my_workspace.rb +44 -0
  54. data/lib/sambal-cle/page_objects/news.rb +8 -0
  55. data/lib/sambal-cle/page_objects/podcasts.rb +27 -0
  56. data/lib/sambal-cle/page_objects/polls.rb +69 -0
  57. data/lib/sambal-cle/page_objects/portfolio_templates.rb +161 -0
  58. data/lib/sambal-cle/page_objects/portfolios.rb +162 -0
  59. data/lib/sambal-cle/page_objects/post_em.rb +1 -0
  60. data/lib/sambal-cle/page_objects/profile.rb +51 -0
  61. data/lib/sambal-cle/page_objects/profile2.rb +344 -0
  62. data/lib/sambal-cle/page_objects/public_search.rb +61 -0
  63. data/lib/sambal-cle/page_objects/realms.rb +19 -0
  64. data/lib/sambal-cle/page_objects/resources.rb +326 -0
  65. data/lib/sambal-cle/page_objects/resources_roster.rb +0 -0
  66. data/lib/sambal-cle/page_objects/rosters.rb +70 -0
  67. data/lib/sambal-cle/page_objects/rwiki.rb +34 -0
  68. data/lib/sambal-cle/page_objects/search.rb +34 -0
  69. data/lib/sambal-cle/page_objects/sections.rb +295 -0
  70. data/lib/sambal-cle/page_objects/single_user.rb +1 -0
  71. data/lib/sambal-cle/page_objects/site_setup.rb +621 -0
  72. data/lib/sambal-cle/page_objects/site_statistics.rb +1 -0
  73. data/lib/sambal-cle/page_objects/sites.rb +255 -0
  74. data/lib/sambal-cle/page_objects/styles.rb +74 -0
  75. data/lib/sambal-cle/page_objects/syllabus.rb +166 -0
  76. data/lib/sambal-cle/page_objects/user_membership.rb +57 -0
  77. data/lib/sambal-cle/page_objects/users.rb +88 -0
  78. data/lib/sambal-cle/randomizers.rb +117 -0
  79. data/lib/sambal-cle/rich_text.rb +38 -0
  80. data/lib/sambal-cle/utilities.rb +31 -0
  81. data/lib/sambal-cle/workflows.rb +223 -0
  82. data/lib/sambal-cle.rb +31 -0
  83. data/sambal-cle.gemspec +14 -0
  84. data/test/add_assignment_to_calendar_spec.rb +86 -0
  85. data/test/assignment_announcements_spec.rb +71 -0
  86. data/test/assignment_gradebook_spec.rb +98 -0
  87. data/test/config.yml.template +4 -0
  88. data/test/directory.yml.template +123 -0
  89. data/test/duplicate_site_spec.rb +244 -0
  90. metadata +167 -0
@@ -0,0 +1,62 @@
1
+ class EntityPicker < BasePage
2
+
3
+ def view_assignment_details(title)
4
+ unless self.div(:class=>"title", :text=>title).present?
5
+ self.link(:text=>"Assignments").wait_until_present(5)
6
+ self.link(:text=>"Assignments").click
7
+ self.link(:text=>title).wait_until_present(15)
8
+ self.link(:text=>title).click
9
+ end
10
+ self.div(:class=>"title", :text=>title).wait_until_present(5)
11
+ end
12
+
13
+ def select_assignment(title)
14
+ view_assignment_details(title)
15
+ self.link(:text=>"Select this item").click
16
+ self.window(:index=>0).use
17
+ self.frame(:index=>2).button(:id=>"btnOk").click
18
+ end
19
+
20
+ def close_picker
21
+ self.window.close
22
+ self.window(:index=>0).use
23
+ self.frame(:index=>2).button(:id=>"btnCancel").click
24
+ end
25
+
26
+ def view_forum_details(title)
27
+ unless self.span(:class=>"entity-item-label icon-sakai-entity-forum", :text=>title).present?
28
+ self.link(:class=>/entity-item-label icon-sakai-entity-forum/).wait_until_present(10)
29
+ self.link(:class=>/entity-item-label icon-sakai-entity-forum/).click
30
+ self.link(:text=>title).wait_until_present(10)
31
+ self.link(:text=>title).click
32
+ end
33
+ self.div(:class=>"title", :text=>title).wait_until_present
34
+ end
35
+
36
+ def view_topic_details(forum, topic)
37
+ unless self.span(:class=>"entity-item-label icon-sakai-entity-forum", :text=>title).present?
38
+ self.link(:class=>/entity-item-label icon-sakai-entity-forum/).wait_until_present(10)
39
+ self.link(:class=>/entity-item-label icon-sakai-entity-forum/).click
40
+ self.link(:text=>forum).wait_until_present(10)
41
+ self.link(:text=>forum).click
42
+ self.link(:text=>topic).wait_until_present(10)
43
+ self.link(:text=>topic).click
44
+ end
45
+ self.div(:class=>"title", :text=>topic).wait_until_present(10)
46
+ end
47
+
48
+ value(:url) { |b| b.td(text: "url").parent.td(class: "attrValue").text }
49
+ value(:portal_url) { |b| b.td(text: "portalURL").parent.td(class: "attrValue").text }
50
+ value(:direct_link) { |b| b.link(text: "Select this item").href }
51
+ value(:retract_time) { |b| b.td(text: "Retract Time").parent.td(class: "attrValue").text }
52
+ value(:time_due) { |b| b.td(text: "Time Due").parent.td(class: "attrValue").text }
53
+ value(:time_modified) { |b| b.td(text: "Time Modified").parent.td(class: "attrValue").text }
54
+ value(:description) { |b| b.td(text: "Description").parent.td(class: "attrValue").text }
55
+ value(:time_created) { |b| b.td(text: "Time Created").parent.td(class: "attrValue").text }
56
+ value(:date_created) { |b| b.td(text: "Date Created").parent.td(class: "attrValue").text }
57
+ value(:author) { |b| b.td(text: "Author").parent.td(class: "attrValue").text }
58
+ value(:moderated) { |b| b.td(text: "Moderated").parent.td(class: "attrValue").text }
59
+ value(:modified_by) { |b| b.td(text: "Modified By").parent.td(class: "attrValue").text }
60
+ value(:date_modified) { |b| b.td(text: "Date Modified").parent.td(class: "attrValue").text }
61
+
62
+ end
@@ -0,0 +1,158 @@
1
+ #================
2
+ # Evaluation System Pages
3
+ #================
4
+
5
+ # The "Evaluations Dashboard"
6
+ class EvaluationSystem < BasePage
7
+
8
+ frame_element
9
+
10
+ # MyTemplates
11
+ action(:my_templates) { |b| b.frm.link(:text=>"My Templates").click }
12
+
13
+ # AddTemplateTitle
14
+ action(:add_template) { |b| b.frm.link(:text=>"Add Template").click }
15
+
16
+ # TakeEvaluation
17
+ def take_evaluation(evaluation_name)
18
+ frm.div(:class=>"summaryBox").table(:text=>/#{Regexp.escape(evaluation_name)}/).link.click
19
+ TakeEvaluation.new(@browser)
20
+ end
21
+
22
+ def status_of(evaluation_name)
23
+ frm.div(:class=>"summaryBox").table(:text=>/#{Regexp.escape(evaluation_name)}/)[1][1].text
24
+ end
25
+
26
+ end
27
+
28
+ #
29
+ class AddTemplateTitle < BasePage
30
+
31
+ frame_element
32
+
33
+ def save
34
+ frm.button(:value=>"Save").click
35
+ EditTemplate.new(@browser)
36
+ end
37
+
38
+ element(:title) { |b| b.frm.text_field(:id=>"title") }
39
+ element(:description) { |b| b.frm.text_area(:id=>"description") }
40
+
41
+ end
42
+
43
+
44
+ #
45
+ class EditTemplate < BasePage
46
+
47
+ frame_element
48
+
49
+ def item_text=(text)
50
+ frm.frame(:id, "item-text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
51
+ end
52
+
53
+ action(:new_evaluation) { |b| b.frm.link(:text=>"New evaluation").click }
54
+
55
+ def add
56
+ frm.button(:value=>"Add").click
57
+ frm.frame(:id, "item-text___Frame").td(:id, "xEditingArea").wait_until_present
58
+ end
59
+
60
+ def save_item
61
+ frm.button(:value=>"Save item").click
62
+ frm.link(:text=>"New evaluation").wait_until_present
63
+ EditTemplate.new @browser
64
+ end
65
+
66
+ element(:item) { |b| b.frm.select_list(:id=>"add-item-control::add-item-classification-selection").click }
67
+ end
68
+
69
+
70
+ #
71
+ class NewEvaluation < BasePage
72
+
73
+ include FCKEditor
74
+ frame_element
75
+
76
+ expected_element :editor
77
+
78
+ element(:editor) { |b| b.frm.frame(:id, "instructions:1:input___Frame") }
79
+
80
+ def continue_to_settings
81
+ frm.button(:value=>"Continue to Settings").click
82
+ EvaluationSettings.new(@browser)
83
+ end
84
+
85
+ def instructions=(text)
86
+ frm.frame(:id, "instructions:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
87
+ end
88
+
89
+ element(:title) { |b| b.frm.text_field(:id=>"title") }
90
+
91
+ end
92
+
93
+
94
+ #
95
+ class EvaluationSettings < BasePage
96
+
97
+ frame_element
98
+
99
+ def continue_to_assign_to_courses
100
+ frm.button(:value=>"Continue to Assign to Courses").click
101
+ EditEvaluationAssignment.new(@browser)
102
+ end
103
+
104
+
105
+ end
106
+
107
+
108
+ #
109
+ class EditEvaluationAssignment < BasePage
110
+
111
+ frame_element
112
+
113
+ def save_assigned_groups
114
+ frm.button(:value=>"Save Assigned Groups").click
115
+ ConfirmEvaluation.new(@browser)
116
+ end
117
+
118
+ def check_group(title)
119
+ frm.table(:class=>"listHier lines nolines").wait_until_present
120
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(title)}/).checkbox(:name=>"selectedGroupIDs").set
121
+ end
122
+
123
+ action(:assign_to_evaluation_groups) { |b| b.frm.link(:text=>"Assign to Evaluation Groups").click }
124
+ end
125
+
126
+
127
+ #
128
+ class ConfirmEvaluation < BasePage
129
+
130
+ frame_element
131
+
132
+ def done
133
+ frm.button(:value=>"Done").click
134
+ MyEvaluations.new(@browser)
135
+ end
136
+
137
+ end
138
+
139
+ #
140
+ class MyEvaluations < BasePage
141
+
142
+ frame_element
143
+
144
+
145
+ end
146
+
147
+ #
148
+ class TakeEvaluation < BasePage
149
+
150
+ frame_element
151
+
152
+ def submit_evaluation
153
+ frm.button(:value=>"Submit Evaluation").click
154
+ EvaluationSystem.new(@browser)
155
+ end
156
+
157
+
158
+ end
@@ -0,0 +1,36 @@
1
+ #================
2
+ # Feedback pages
3
+ #================
4
+
5
+ #
6
+ class Feedback < BasePage
7
+
8
+ frame_element
9
+
10
+ def add
11
+ frm.link(:text=>"Add").click
12
+ AddUpdateFeedback.new(@browser)
13
+ end
14
+
15
+ # Returns an array containing the titles
16
+ # of the Feedback items listed on the page.
17
+ def feedback_items
18
+ items = []
19
+ frm.table(:class=>"listHier lines nolines").rows.each_with_index do |row, index|
20
+ next if index == 0
21
+ items << row[0].text
22
+ end
23
+ return items
24
+ end
25
+
26
+ end
27
+
28
+ #
29
+ class AddUpdateFeedback < BasePage
30
+
31
+ frame_element
32
+
33
+
34
+ element(:title) { |b| b.frm.text_field(:id=>"_idJsp1:title") }
35
+
36
+ end
@@ -0,0 +1,120 @@
1
+ #================
2
+ # Forms Pages - Portfolio Site
3
+ #================
4
+
5
+ # The topmost page of Forms in a Portfolio Site.
6
+ class Forms < BasePage
7
+
8
+ frame_element
9
+
10
+ # Clicks the Add button and instantiates
11
+ # the AddForm Class.
12
+ def add
13
+ frm.link(:text=>"Add").click
14
+ AddForm.new(@browser)
15
+ end
16
+
17
+ # Clicks the Publish buton for the specified
18
+ # Form, then instantiates the PublishForm Class.
19
+ def publish(form_name)
20
+ frm.table(:class=>"listHier lines nolines").tr(:text, /#{Regexp.escape(form_name)}/).link(:text=>/Publish/).click
21
+ PublishForm.new(@browser)
22
+ end
23
+
24
+ # Clicks the Import button, then
25
+ # instantiates the ImportForms Class.
26
+ def import
27
+ frm.link(:text=>"Import").click
28
+ ImportForms.new(@browser)
29
+ end
30
+
31
+ end
32
+
33
+ class ImportForms < BasePage
34
+
35
+ frame_element
36
+
37
+ def import
38
+ frm.button(:value=>"Import").click
39
+ Forms.new(@browser)
40
+ end
41
+
42
+ def select_file
43
+ frm.link(:text=>"Select File...").click
44
+ AttachFileFormImport.new(@browser)
45
+ end
46
+
47
+ end
48
+
49
+ class AddForm < BasePage
50
+
51
+ frame_element
52
+
53
+ def select_schema_file
54
+ frm.link(:text=>"Select Schema File").click
55
+ SelectSchemaFile.new(@browser)
56
+ end
57
+
58
+ def instruction=(text)
59
+ frm.frame(:id, "instruction___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
60
+ end
61
+
62
+ def add_form
63
+ frm.button(:value=>"Add Form").click
64
+ Forms.new(@browser)
65
+ end
66
+
67
+ element(:name) { |b| b.frm.text_field(:id=>"description-id") }
68
+
69
+
70
+ end
71
+
72
+ class SelectSchemaFile < BasePage
73
+
74
+ frame_element
75
+
76
+ def show_other_sites
77
+ frm.link(:title=>"Show other sites").click
78
+ SelectSchemaFile.new(@browser)
79
+ end
80
+
81
+ def open_folder(name)
82
+ frm.link(:text=>name).click
83
+ SelectSchemaFile.new(@browser)
84
+ end
85
+
86
+ def select_file(filename)
87
+ index = file_names.index(filename)
88
+ frm.table(:class=>"listHier lines").tr(:text, /#{Regexp.escape(filename)}/).link(:text=>"Select").click
89
+ SelectSchemaFile.new(@browser)
90
+ end
91
+
92
+ def file_names #FIXME
93
+ names = []
94
+ resources_table = frm.table(:class=>"listHier lines")
95
+ 1.upto(resources_table.rows.size-1) do |x|
96
+ if resources_table[x][0].link.exist? && resources_table[x][0].a(:index=>0).title=~/File Type/
97
+ names << resources_table[x][0].text
98
+ end
99
+ end
100
+ return names
101
+ end
102
+
103
+ def continue
104
+ frm.button(:value=>"Continue").click
105
+ frm.frame(:id, "instruction___Frame").td(:id, "xEditingArea").wait_until_present
106
+ AddForm.new(@browser)
107
+ end
108
+
109
+ end
110
+
111
+ class PublishForm < BasePage
112
+
113
+ frame_element
114
+
115
+ def yes
116
+ frm.button(:value=>"Yes").click
117
+ Forms.new(@browser)
118
+ end
119
+
120
+ end
@@ -0,0 +1,254 @@
1
+ class Forums < BasePage
2
+
3
+ frame_element
4
+
5
+ # Pass this method a string that matches
6
+ # the title of a Forum on the page, it returns
7
+ # True if the specified forum row has "DRAFT" in it.
8
+ def draft?(title)
9
+ frm.table(:id=>"msgForum:forums").row(:text=>/#{Regexp.escape(title)}/).span(:text=>"DRAFT").exist?
10
+ end
11
+
12
+ action(:new_forum) { |b| b.frm.link(:text=>"New Forum").click }
13
+
14
+ # AddEditTopic
15
+ def new_topic_for_forum(name)
16
+ index = forum_titles.index(name)
17
+ frm.link(:text=>"New Topic", :index=>index).click
18
+ end
19
+
20
+ # OrganizeForums
21
+ action(:organize) { |b| b.frm.link(:text=>"Organize").click }
22
+
23
+ # ForumTemplateSettings
24
+ action(:template_settings) { |b| b.frm.link(:text=>"Template Settings").click }
25
+
26
+ element(:forums_table) { |b| b.frm.div(:class=>"portletBody").table(:id=>"msgForum:forums") }
27
+
28
+ def forum_titles
29
+ titles = []
30
+ title_links = frm.div(:class=>"portletBody").links.find_all { |link| link.class_name=="title" && link.id=="" }
31
+ title_links.each { |link| titles << link.text }
32
+ return titles
33
+ end
34
+
35
+ def topic_titles
36
+ titles = []
37
+ title_links = frm.div(:class=>"portletBody").links.find_all { |link| link.class_name == "title" && link.id != "" }
38
+ title_links.each { |link| titles << link.text }
39
+ return titles
40
+ end
41
+
42
+ # EditForum
43
+ def forum_settings(name)
44
+ index = forum_titles.index(name)
45
+ frm.link(:text=>"Forum Settings", :index=>index).click
46
+ end
47
+
48
+ # AddEditTopic
49
+ def topic_settings(name)
50
+ index = topic_titles.index(name)
51
+ frm.link(:text=>"Topic Settings", :index=>index).click
52
+ end
53
+
54
+ # EditForum
55
+ def delete_forum(name)
56
+ index = forum_titles.index(name)
57
+ frm.link(:id=>/msgForum:forums:\d+:delete/,:text=>"Delete", :index=>index).click
58
+ end
59
+
60
+ # AddEditTopic
61
+ def delete_topic(name)
62
+ index = topic_titles.index(name)
63
+ frm.link(:id=>/topics:\d+:delete_confirm/, :text=>"Delete", :index=>index).click
64
+ end
65
+
66
+ def open_forum(title)
67
+ frm.link(:text=>/#{title}/).wait_until_present(7)
68
+ frm.link(:text=>/#{title}/).click
69
+ end
70
+ alias open_topic open_forum
71
+
72
+ end
73
+
74
+ class TopicPage < BasePage
75
+
76
+ frame_element
77
+
78
+ # ComposeForumMessage
79
+ action(:post_new_thread) { |b| b.frm.link(:text=>"Post New Thread").click }
80
+
81
+ def thread_titles
82
+ titles = []
83
+ message_table = frm.table(:id=>"msgForum:messagesInHierDataTable")
84
+ 1.upto(message_table.rows.size-1) do |x|
85
+ titles << message_table[x][1].span(:class=>"firstChild").link(:index=>0).text
86
+ end
87
+ return titles
88
+ end
89
+
90
+ # ViewForumThread
91
+ def open_message(message_title)
92
+ frm.div(:class=>"portletBody").link(:text=>message_title).click
93
+ end
94
+
95
+ # TopicPage
96
+ action(:display_entire_message){ |b| b.frm.link(:text=>"Display Entire Message").click }
97
+
98
+ end
99
+
100
+ class ViewForumThread < BasePage
101
+
102
+ frame_element
103
+
104
+ # ComposeForumMessage
105
+ action(:reply_to_thread) { |b| b.frm.link(:text=>"Reply to Thread").click }
106
+
107
+ # ComposeForumMessage
108
+ # TODO: Figure out a better way to do this...
109
+ def reply_to_message(index)
110
+ frm.link(:text=>"Reply", :index=>(index.to_i - 1)).click
111
+ end
112
+ end
113
+
114
+ class ComposeForumMessage < BasePage
115
+
116
+ include FCKEditor
117
+ frame_element
118
+
119
+ expected_element :editor
120
+
121
+ # TopicPage, probably
122
+ action(:post_message) { |b| b.frm.button(:text=>"Post Message").click }
123
+
124
+ element(:editor) { |b| b.frm.frame(:id, "dfCompose:df_compose_body_inputRichText___Frame") }
125
+
126
+ def message=(text)
127
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
128
+ end
129
+
130
+ value(:reply_text) { |b| b.frame(:index=>1).div(:class=>"singleMessageReply").text }
131
+
132
+ action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
133
+
134
+ element(:title) { |b| b.frm.text_field(:id=>"dfCompose:df_compose_title") }
135
+
136
+ end
137
+
138
+ class ForumTemplateSettings < BasePage
139
+
140
+ frame_element
141
+
142
+ value(:page_title) { |b| b.frm.div(:class=>"portletBody").h3(:index=>0).text }
143
+
144
+ # Forums
145
+ action(:save) { |b| b.frm.button(:value=>"Save").click }
146
+
147
+ # Forums
148
+ action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
149
+
150
+ end
151
+
152
+ class OrganizeForums < BasePage
153
+
154
+ frame_element
155
+
156
+ # Forums
157
+ action(:save) { |b| b.frm.button(:value=>"Save").click }
158
+
159
+ # These are set to so that the user
160
+ # does not have to start the list at zero...
161
+ # TODO: Is there any chance there's a better way to do this? It's friggin' ugly!
162
+ def forum(index)
163
+ frm.select(:id, "revise:forums:#{index.to_i - 1}:forumIndex")
164
+ end
165
+
166
+ def topic(forumindex, topicindex)
167
+ frm.select(:id, "revise:forums:#{forumindex.to_i - 1}:topics:#{topicindex.to_i - 1}:topicIndex")
168
+ end
169
+ end
170
+
171
+ class EditForum < BasePage
172
+
173
+ include FCKEditor
174
+ frame_element
175
+
176
+ # Forums
177
+ action(:save) { |b| b.frm.button(:value=>"Save").click }
178
+ action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
179
+
180
+ # AddEditTopic
181
+ action(:save_and_add) { |b| b.frm.button(:value=>"Save Settings & Add Topic").click }
182
+
183
+ element(:editor) { |b| b.frm.div(:class=>"portletBody").frame(:id, "revise:df_compose_description_inputRichText___Frame") }
184
+
185
+ def description=(text)
186
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
187
+ end
188
+
189
+ #ForumsAddAttachments (or not, actually, now that I think of it)
190
+ action(:add_attachments) { |b| b.frm.button(:value=>/attachments/).click }
191
+
192
+ element(:title){ |b| b.frm.text_field(:id=>"revise:forum_title") }
193
+ element(:short_description){ |b| b.frm.text_field(:id=>"revise:forum_shortDescription") }
194
+
195
+ end
196
+
197
+ class AddEditTopic < BasePage
198
+
199
+ include FCKEditor
200
+ frame_element
201
+
202
+ @@table_index=0 # TODO: Seriously think about a better way to do this
203
+
204
+ def editor
205
+ frm.div(:class=>"portletBody").frame(:id, "revise:topic_description_inputRichText___Frame")
206
+ end
207
+
208
+ def description=(text)
209
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
210
+ end
211
+
212
+ # Forums
213
+ action(:save) { |b| b.frm.button(:value=>"Save").click }
214
+ action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
215
+
216
+ action(:add_attachments) { |b| b.frm.button(:value=>/Add.+ttachment/).click }
217
+
218
+ def roles
219
+ roles=[]
220
+ options = frm.select(:id=>"revise:role").options.to_a
221
+ options.each { |option| roles << option.text }
222
+ return roles
223
+ end
224
+
225
+ def site_role=(role)
226
+ frm.select(:id=>"revise:role").select(role)
227
+ 0.upto(frm.select(:id=>"revise:role").length - 1) do |x|
228
+ if frm.div(:class=>"portletBody").table(:class=>"permissionPanel jsfFormTable lines nolines", :index=>x).visible?
229
+ @@table_index = x
230
+
231
+ def permission_level=(value)
232
+ frm.select(:id=>"revise:perm:#{@@table_index}:level").select(value)
233
+ end
234
+
235
+ end
236
+ end
237
+ end
238
+
239
+ element(:title) { |b| b.frm.text_field(:id=>"revise:topic_title") }
240
+ element(:short_description) { |b| b.frm.text_field(:id=>"revise:topic_shortDescription") }
241
+
242
+ end
243
+
244
+ class ForumView < BasePage
245
+
246
+ frame_element
247
+
248
+ action(:view_full_description) { |b| b.frm.link(id: "msgForum:forum_extended_show").click }
249
+ action(:hide_full_description) { |b| b.frm.link(id: "msgForum:forum_extended_hide").click }
250
+
251
+ value(:short_description) { |b| b.frm.span(class: "shortDescription").text }
252
+ value(:description_html) { |b| b.frm.div(class: "toggle").div(class: "textPanel").html }
253
+
254
+ end