browsercms 3.1.4 → 3.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/app/controllers/cms/content_block_controller.rb +2 -2
  2. data/app/controllers/cms/section_nodes_controller.rb +6 -1
  3. data/app/controllers/cms/sections_controller.rb +1 -1
  4. data/app/helpers/cms/application_helper.rb +1 -1
  5. data/app/helpers/cms/content_block_helper.rb +27 -0
  6. data/app/helpers/cms/section_nodes_helper.rb +43 -5
  7. data/app/models/abstract_file_block.rb +16 -1
  8. data/app/models/attachment.rb +17 -35
  9. data/app/models/file_block.rb +0 -12
  10. data/app/models/image_block.rb +0 -12
  11. data/app/models/link.rb +4 -21
  12. data/app/models/page.rb +31 -34
  13. data/app/models/section.rb +82 -44
  14. data/app/models/section_node.rb +39 -24
  15. data/app/models/user.rb +5 -0
  16. data/app/views/cms/blocks/index.html.erb +4 -4
  17. data/app/views/cms/file_blocks/_form.html.erb +1 -1
  18. data/app/views/cms/image_blocks/_form.html.erb +1 -1
  19. data/app/views/cms/section_nodes/_link.html.erb +6 -3
  20. data/app/views/cms/section_nodes/_node.html.erb +11 -1
  21. data/app/views/cms/section_nodes/_page.html.erb +13 -7
  22. data/app/views/cms/section_nodes/_section.html.erb +24 -8
  23. data/app/views/cms/section_nodes/index.html.erb +28 -16
  24. data/app/views/layouts/templates/default.html.erb +17 -0
  25. data/browsercms.gemspec +28 -1413
  26. data/db/migrate/20120117144039_browsercms315.rb +94 -0
  27. data/db/migrate/{20081114172307_load_seed_data.rb → 20121114172307_load_seeds.rb} +8 -1
  28. data/lib/acts_as_list.rb +1 -1
  29. data/lib/browsercms.rb +2 -0
  30. data/lib/cms/addressable.rb +83 -0
  31. data/lib/cms/behaviors/attaching.rb +44 -24
  32. data/lib/cms/behaviors/connecting.rb +2 -1
  33. data/lib/cms/behaviors/publishing.rb +12 -3
  34. data/lib/cms/behaviors/versioning.rb +83 -53
  35. data/lib/cms/content_rendering_support.rb +3 -3
  36. data/lib/cms/error_pages.rb +8 -0
  37. data/lib/cms/init.rb +5 -3
  38. data/lib/cms/version.rb +1 -1
  39. data/templates/blank.rb +2 -0
  40. data/templates/demo.rb +2 -0
  41. data/templates/module.rb +2 -0
  42. data/test/custom_assertions.rb +7 -1
  43. data/test/factories.rb +3 -1
  44. data/test/factories/sitemap_factories.rb +28 -0
  45. data/test/fixtures/connectors.yml +97 -0
  46. data/test/fixtures/content_type_groups.yml +13 -0
  47. data/test/fixtures/content_types.yml +50 -0
  48. data/test/fixtures/dynamic_view_versions.yml +26 -0
  49. data/test/fixtures/dynamic_views.yml +26 -0
  50. data/test/fixtures/group_permissions.yml +16 -0
  51. data/test/fixtures/group_sections.yml +31 -0
  52. data/test/fixtures/group_type_permissions.yml +11 -0
  53. data/test/fixtures/group_types.yml +25 -0
  54. data/test/fixtures/groups.yml +25 -0
  55. data/test/fixtures/html_block_versions.yml +67 -0
  56. data/test/fixtures/html_blocks.yml +63 -0
  57. data/test/fixtures/page_versions.yml +265 -0
  58. data/test/fixtures/pages.yml +85 -0
  59. data/test/fixtures/permissions.yml +28 -0
  60. data/test/fixtures/section_nodes.yml +46 -0
  61. data/test/fixtures/sections.yml +19 -0
  62. data/test/fixtures/sites.yml +9 -0
  63. data/test/fixtures/user_group_memberships.yml +11 -0
  64. data/test/fixtures/users.yml +15 -0
  65. data/test/functional/cms/content_controller_test.rb +6 -1
  66. data/test/functional/cms/file_blocks_controller_test.rb +1 -0
  67. data/test/functional/cms/html_blocks_controller_test.rb +1 -0
  68. data/test/functional/cms/image_blocks_controller_test.rb +39 -32
  69. data/test/functional/cms/section_nodes_controller_test.rb +48 -20
  70. data/test/functional/cms/sections_controller_test.rb +3 -1
  71. data/test/functional/tests/pretend_controller_test.rb +6 -3
  72. data/test/integration/cms/ckeditor_test.rb +5 -2
  73. data/test/integration/sitemap_performance_test.rb +26 -0
  74. data/test/selenium-core/Blank.html +7 -0
  75. data/test/selenium-core/InjectedRemoteRunner.html +8 -0
  76. data/test/selenium-core/RemoteRunner.html +110 -0
  77. data/test/selenium-core/SeleniumLog.html +109 -0
  78. data/test/selenium-core/TestPrompt.html +145 -0
  79. data/test/selenium-core/TestRunner-splash.html +55 -0
  80. data/test/selenium-core/TestRunner.hta +176 -0
  81. data/test/selenium-core/TestRunner.html +176 -0
  82. data/test/selenium-core/domviewer/butmin.gif +0 -0
  83. data/test/selenium-core/domviewer/butplus.gif +0 -0
  84. data/test/selenium-core/domviewer/domviewer.css +298 -0
  85. data/test/selenium-core/domviewer/domviewer.html +16 -0
  86. data/test/selenium-core/domviewer/selenium-domviewer.js +205 -0
  87. data/test/selenium-core/icons/all.png +0 -0
  88. data/test/selenium-core/icons/continue.png +0 -0
  89. data/test/selenium-core/icons/continue_disabled.png +0 -0
  90. data/test/selenium-core/icons/pause.png +0 -0
  91. data/test/selenium-core/icons/pause_disabled.png +0 -0
  92. data/test/selenium-core/icons/selected.png +0 -0
  93. data/test/selenium-core/icons/step.png +0 -0
  94. data/test/selenium-core/icons/step_disabled.png +0 -0
  95. data/test/selenium-core/iedoc-core.xml +1515 -0
  96. data/test/selenium-core/iedoc.xml +1469 -0
  97. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  98. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  99. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  100. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  101. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  102. data/test/selenium-core/lib/prototype.js +2006 -0
  103. data/test/selenium-core/lib/scriptaculous/builder.js +101 -0
  104. data/test/selenium-core/lib/scriptaculous/controls.js +815 -0
  105. data/test/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  106. data/test/selenium-core/lib/scriptaculous/effects.js +958 -0
  107. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  108. data/test/selenium-core/lib/scriptaculous/slider.js +283 -0
  109. data/test/selenium-core/lib/scriptaculous/unittest.js +383 -0
  110. data/test/selenium-core/scripts/find_matching_child.js +69 -0
  111. data/test/selenium-core/scripts/htmlutils.js +894 -0
  112. data/test/selenium-core/scripts/injection.html +72 -0
  113. data/test/selenium-core/scripts/js2html.js +70 -0
  114. data/test/selenium-core/scripts/narcissus-defs.js +175 -0
  115. data/test/selenium-core/scripts/narcissus-exec.js +1054 -0
  116. data/test/selenium-core/scripts/narcissus-parse.js +1003 -0
  117. data/test/selenium-core/scripts/se2html.js +63 -0
  118. data/test/selenium-core/scripts/selenium-api.js +2409 -0
  119. data/test/selenium-core/scripts/selenium-browserbot.js +2203 -0
  120. data/test/selenium-core/scripts/selenium-browserdetect.js +150 -0
  121. data/test/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  122. data/test/selenium-core/scripts/selenium-executionloop.js +175 -0
  123. data/test/selenium-core/scripts/selenium-logging.js +147 -0
  124. data/test/selenium-core/scripts/selenium-remoterunner.js +571 -0
  125. data/test/selenium-core/scripts/selenium-testrunner.js +1333 -0
  126. data/test/selenium-core/scripts/selenium-version.js +5 -0
  127. data/test/selenium-core/scripts/user-extensions.js +3 -0
  128. data/test/selenium-core/scripts/user-extensions.js.sample +75 -0
  129. data/test/selenium-core/scripts/xmlextras.js +153 -0
  130. data/test/selenium-core/selenium-logo.png +0 -0
  131. data/test/selenium-core/selenium-test.css +43 -0
  132. data/test/selenium-core/selenium.css +299 -0
  133. data/test/selenium-core/xpath/dom.js +428 -0
  134. data/test/selenium-core/xpath/misc.js +252 -0
  135. data/test/selenium-core/xpath/xpath.js +2223 -0
  136. data/test/selenium/_login_as_cmsadmin.rsel +4 -0
  137. data/test/selenium/dashboard.rsel +5 -0
  138. data/test/selenium/html_blocks.rsel +4 -0
  139. data/test/selenium/login/failed_login.rsel +8 -0
  140. data/test/selenium/login/successful_login.rsel +9 -0
  141. data/test/selenium/page_templates.rsel +12 -0
  142. data/test/selenium/pages/edit_properties.rsel +5 -0
  143. data/test/selenium/site/view_home_page.rsel +4 -0
  144. data/test/selenium/sitemap/move_page.rsel +9 -0
  145. data/test/selenium/sitemap/open_section.rsel +6 -0
  146. data/test/selenium/sitemap/select_page.rsel +12 -0
  147. data/test/selenium/sitemap/select_section.rsel +17 -0
  148. data/test/test_helper.rb +30 -12
  149. data/test/unit/behaviors/attaching_test.rb +4 -6
  150. data/test/unit/behaviors/connectable_test.rb +29 -0
  151. data/test/unit/behaviors/publishable_test.rb +40 -9
  152. data/test/unit/behaviors/versioning_test.rb +36 -0
  153. data/test/unit/helpers/menu_helper_test.rb +5 -2
  154. data/test/unit/helpers/page_helper_test.rb +2 -0
  155. data/test/unit/lib/cms/sitemap_test.rb +206 -0
  156. data/test/unit/models/attachment_test.rb +51 -31
  157. data/test/unit/models/file_block_test.rb +74 -55
  158. data/test/unit/models/link_test.rb +44 -0
  159. data/test/unit/models/page_test.rb +290 -224
  160. data/test/unit/models/sections_test.rb +144 -44
  161. data/test/unit/models/user_test.rb +28 -18
  162. metadata +581 -350
  163. data/app/views/cms/section_nodes/_section_node.html.erb +0 -10
  164. data/test/unit/models/section_node_test.rb +0 -92
@@ -0,0 +1,5 @@
1
+ Selenium.version = "0.8.3";
2
+ Selenium.revision = "1879";
3
+
4
+ window.top.document.title += " v" + Selenium.version + " [" + Selenium.revision + "]";
5
+
@@ -0,0 +1,3 @@
1
+ // User extensions can be added here.
2
+ //
3
+ // Keep this file to avoid mystifying "Invalid Character" error in IE
@@ -0,0 +1,75 @@
1
+ /*
2
+ * By default, Selenium looks for a file called "user-extensions.js", and loads and javascript
3
+ * code found in that file. This file is a sample of what that file could look like.
4
+ *
5
+ * user-extensions.js provides a convenient location for adding extensions to Selenium, like
6
+ * new actions, checks and locator-strategies.
7
+ * By default, this file does not exist. Users can create this file and place their extension code
8
+ * in this common location, removing the need to modify the Selenium sources, and hopefully assisting
9
+ * with the upgrade process.
10
+ *
11
+ * You can find contributed extensions at http://wiki.openqa.org/display/SEL/Contributed%20User-Extensions
12
+ */
13
+
14
+ // The following examples try to give an indication of how Selenium can be extended with javascript.
15
+
16
+ // All do* methods on the Selenium prototype are added as actions.
17
+ // Eg add a typeRepeated action to Selenium, which types the text twice into a text box.
18
+ // The typeTwiceAndWait command will be available automatically
19
+ Selenium.prototype.doTypeRepeated = function(locator, text) {
20
+ // All locator-strategies are automatically handled by "findElement"
21
+ var element = this.page().findElement(locator);
22
+
23
+ // Create the text to type
24
+ var valueToType = text + text;
25
+
26
+ // Replace the element text with the new text
27
+ this.page().replaceText(element, valueToType);
28
+ };
29
+
30
+ // All assert* methods on the Selenium prototype are added as checks.
31
+ // Eg add a assertValueRepeated check, that makes sure that the element value
32
+ // consists of the supplied text repeated.
33
+ // The verify version will be available automatically.
34
+ Selenium.prototype.assertValueRepeated = function(locator, text) {
35
+ // All locator-strategies are automatically handled by "findElement"
36
+ var element = this.page().findElement(locator);
37
+
38
+ // Create the text to verify
39
+ var expectedValue = text + text;
40
+
41
+ // Get the actual element value
42
+ var actualValue = element.value;
43
+
44
+ // Make sure the actual value matches the expected
45
+ Assert.matches(expectedValue, actualValue);
46
+ };
47
+
48
+ // All get* methods on the Selenium prototype result in
49
+ // store, assert, assertNot, verify, verifyNot, waitFor, and waitForNot commands.
50
+ // E.g. add a getTextLength method that returns the length of the text
51
+ // of a specified element.
52
+ // Will result in support for storeTextLength, assertTextLength, etc.
53
+ Selenium.prototype.getTextLength = function(locator) {
54
+ return this.getText(locator).length;
55
+ };
56
+
57
+ // All locateElementBy* methods are added as locator-strategies.
58
+ // Eg add a "valuerepeated=" locator, that finds the first element with the supplied value, repeated.
59
+ // The "inDocument" is a the document you are searching.
60
+ PageBot.prototype.locateElementByValueRepeated = function(text, inDocument) {
61
+ // Create the text to search for
62
+ var expectedValue = text + text;
63
+
64
+ // Loop through all elements, looking for ones that have a value === our expected value
65
+ var allElements = inDocument.getElementsByTagName("*");
66
+ for (var i = 0; i < allElements.length; i++) {
67
+ var testElement = allElements[i];
68
+ if (testElement.value && testElement.value === expectedValue) {
69
+ return testElement;
70
+ }
71
+ }
72
+ return null;
73
+ };
74
+
75
+
@@ -0,0 +1,153 @@
1
+ // This is a third party JavaScript library from
2
+ // http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
3
+ // i.e. This has not been written by ThoughtWorks.
4
+
5
+ //<script>
6
+ //////////////////
7
+ // Helper Stuff //
8
+ //////////////////
9
+
10
+ // used to find the Automation server name
11
+ function getDomDocumentPrefix() {
12
+ if (getDomDocumentPrefix.prefix)
13
+ return getDomDocumentPrefix.prefix;
14
+
15
+ var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
16
+ var o;
17
+ for (var i = 0; i < prefixes.length; i++) {
18
+ try {
19
+ // try to create the objects
20
+ o = new ActiveXObject(prefixes[i] + ".DomDocument");
21
+ return getDomDocumentPrefix.prefix = prefixes[i];
22
+ }
23
+ catch (ex) {};
24
+ }
25
+
26
+ throw new Error("Could not find an installed XML parser");
27
+ }
28
+
29
+ function getXmlHttpPrefix() {
30
+ if (getXmlHttpPrefix.prefix)
31
+ return getXmlHttpPrefix.prefix;
32
+
33
+ var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
34
+ var o;
35
+ for (var i = 0; i < prefixes.length; i++) {
36
+ try {
37
+ // try to create the objects
38
+ o = new ActiveXObject(prefixes[i] + ".XmlHttp");
39
+ return getXmlHttpPrefix.prefix = prefixes[i];
40
+ }
41
+ catch (ex) {};
42
+ }
43
+
44
+ throw new Error("Could not find an installed XML parser");
45
+ }
46
+
47
+ //////////////////////////
48
+ // Start the Real stuff //
49
+ //////////////////////////
50
+
51
+
52
+ // XmlHttp factory
53
+ function XmlHttp() {}
54
+
55
+ XmlHttp.create = function () {
56
+ try {
57
+ if (window.XMLHttpRequest) {
58
+ var req = new XMLHttpRequest();
59
+
60
+ // some versions of Moz do not support the readyState property
61
+ // and the onreadystate event so we patch it!
62
+ if (req.readyState == null) {
63
+ req.readyState = 1;
64
+ req.addEventListener("load", function () {
65
+ req.readyState = 4;
66
+ if (typeof req.onreadystatechange == "function")
67
+ req.onreadystatechange();
68
+ }, false);
69
+ }
70
+
71
+ return req;
72
+ }
73
+ if (window.ActiveXObject) {
74
+ return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
75
+ }
76
+ }
77
+ catch (ex) {}
78
+ // fell through
79
+ throw new Error("Your browser does not support XmlHttp objects");
80
+ };
81
+
82
+ // XmlDocument factory
83
+ function XmlDocument() {}
84
+
85
+ XmlDocument.create = function () {
86
+ try {
87
+ // DOM2
88
+ if (document.implementation && document.implementation.createDocument) {
89
+ var doc = document.implementation.createDocument("", "", null);
90
+
91
+ // some versions of Moz do not support the readyState property
92
+ // and the onreadystate event so we patch it!
93
+ if (doc.readyState == null) {
94
+ doc.readyState = 1;
95
+ doc.addEventListener("load", function () {
96
+ doc.readyState = 4;
97
+ if (typeof doc.onreadystatechange == "function")
98
+ doc.onreadystatechange();
99
+ }, false);
100
+ }
101
+
102
+ return doc;
103
+ }
104
+ if (window.ActiveXObject)
105
+ return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
106
+ }
107
+ catch (ex) {}
108
+ throw new Error("Your browser does not support XmlDocument objects");
109
+ };
110
+
111
+ // Create the loadXML method and xml getter for Mozilla
112
+ if (window.DOMParser &&
113
+ window.XMLSerializer &&
114
+ window.Node && Node.prototype && Node.prototype.__defineGetter__) {
115
+
116
+ // XMLDocument did not extend the Document interface in some versions
117
+ // of Mozilla. Extend both!
118
+ //XMLDocument.prototype.loadXML =
119
+ Document.prototype.loadXML = function (s) {
120
+
121
+ // parse the string to a new doc
122
+ var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
123
+
124
+ // remove all initial children
125
+ while (this.hasChildNodes())
126
+ this.removeChild(this.lastChild);
127
+
128
+ // insert and import nodes
129
+ for (var i = 0; i < doc2.childNodes.length; i++) {
130
+ this.appendChild(this.importNode(doc2.childNodes[i], true));
131
+ }
132
+ };
133
+
134
+
135
+ /*
136
+ * xml getter
137
+ *
138
+ * This serializes the DOM tree to an XML String
139
+ *
140
+ * Usage: var sXml = oNode.xml
141
+ *
142
+ */
143
+ // XMLDocument did not extend the Document interface in some versions
144
+ // of Mozilla. Extend both!
145
+ /*
146
+ XMLDocument.prototype.__defineGetter__("xml", function () {
147
+ return (new XMLSerializer()).serializeToString(this);
148
+ });
149
+ */
150
+ Document.prototype.__defineGetter__("xml", function () {
151
+ return (new XMLSerializer()).serializeToString(this);
152
+ });
153
+ }
@@ -0,0 +1,43 @@
1
+ body, table {
2
+ font-family: Verdana, Arial, sans-serif;
3
+ font-size: 12;
4
+ }
5
+
6
+ table {
7
+ border-collapse: collapse;
8
+ border: 1px solid #ccc;
9
+ }
10
+
11
+ th, td {
12
+ padding-left: 0.3em;
13
+ padding-right: 0.3em;
14
+ }
15
+
16
+ a {
17
+ text-decoration: none;
18
+ }
19
+
20
+ .title {
21
+ font-style: italic;
22
+ }
23
+
24
+ .selected {
25
+ background-color: #ffffcc;
26
+ }
27
+
28
+ .status_done {
29
+ background-color: #eeffee;
30
+ }
31
+
32
+ .status_passed {
33
+ background-color: #ccffcc;
34
+ }
35
+
36
+ .status_failed {
37
+ background-color: #ffcccc;
38
+ }
39
+
40
+ .breakpoint {
41
+ background-color: #cccccc;
42
+ border: 1px solid black;
43
+ }
@@ -0,0 +1,299 @@
1
+ /*
2
+ * Copyright 2005 ThoughtWorks, Inc
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*---( Layout )---*/
18
+
19
+ * {
20
+ margin: 0px;
21
+ padding: 0px;
22
+ }
23
+
24
+ body {
25
+ overflow: auto;
26
+ }
27
+
28
+ td {
29
+ position: static;
30
+ }
31
+
32
+ tr {
33
+ vertical-align: top;
34
+ }
35
+
36
+ .layout {
37
+ width: 100%;
38
+ height: 100%;
39
+ border-collapse: collapse;
40
+ }
41
+
42
+ .layout td {
43
+ border: 0;
44
+ }
45
+
46
+ iframe {
47
+ border: 0px;
48
+ width: 100%;
49
+ height: 100%;
50
+ background: white;
51
+ overflow: auto;
52
+ }
53
+
54
+ /*---( Style )---*/
55
+
56
+ body, html {
57
+ font-family: Verdana, Arial, sans-serif;
58
+ }
59
+
60
+ .selenium th, .selenium td {
61
+ border: 1px solid #999;
62
+ }
63
+
64
+ .header {
65
+ background: #ccc;
66
+ padding: 0;
67
+ font-size: 90%;
68
+ }
69
+
70
+ #controlPanel {
71
+ padding: 0.5ex;
72
+ background: #eee;
73
+ overflow: auto;
74
+ font-size: 75%;
75
+ text-align: center;
76
+ }
77
+
78
+ #controlPanel fieldset {
79
+ margin: 0.3ex;
80
+ padding: 0.3ex;
81
+ }
82
+
83
+ #controlPanel fieldset legend {
84
+ color: black;
85
+ }
86
+
87
+ #controlPanel button {
88
+ margin: 0.5ex;
89
+ }
90
+
91
+ #imageButtonPanel button {
92
+ width: 24px;
93
+ height: 20px;
94
+ background-color:white;
95
+ background-repeat: no-repeat;
96
+ background-position: center;
97
+ border-style: solid;
98
+ border-color: black;
99
+ border-width: 1px;
100
+ }
101
+
102
+ #controlPanel #runSuite {
103
+ width: 32px;
104
+ background-image: url("icons/all.png");
105
+ }
106
+
107
+ #controlPanel #runSeleniumTest {
108
+ width: 32px;
109
+ background-image: url("icons/selected.png");
110
+ }
111
+
112
+ .cssPauseTest {
113
+ background-image: url("icons/pause.png");
114
+ }
115
+
116
+ .cssPauseTest[disabled] {
117
+ background-image: url("icons/pause_disabled.png");
118
+ }
119
+
120
+ .cssContinueTest {
121
+ background-image: url("icons/continue.png");
122
+ }
123
+
124
+ .cssContinueTest[disabled] {
125
+ background-image: url("icons/continue_disabled.png");
126
+ }
127
+
128
+ #controlPanel #stepTest {
129
+ background-image: url("icons/step.png");
130
+ }
131
+
132
+ #controlPanel #stepTest[disabled] {
133
+ background-image: url("icons/step_disabled.png");
134
+ }
135
+
136
+ #controlPanel table {
137
+ font-size: 100%;
138
+ }
139
+
140
+ #controlPanel th, #controlPanel td {
141
+ border: 0;
142
+ }
143
+
144
+ h1 {
145
+ margin: 0.2ex;
146
+ font-size: 130%;
147
+ font-weight: bold;
148
+ }
149
+
150
+ h2 {
151
+ margin: 0.2ex;
152
+ font-size: 80%;
153
+ font-weight: normal;
154
+ }
155
+
156
+ .selenium a {
157
+ color: black;
158
+ text-decoration: none;
159
+ }
160
+
161
+ .selenium a:hover {
162
+ text-decoration: underline;
163
+ }
164
+
165
+ button, label {
166
+ cursor: pointer;
167
+ }
168
+
169
+ #stats {
170
+ margin: 0.5em auto 0.5em auto;
171
+ }
172
+
173
+ #stats th, #stats td {
174
+ text-align: left;
175
+ padding-left: 2px;
176
+ }
177
+
178
+ #stats th {
179
+ text-decoration: underline;
180
+ }
181
+
182
+ #stats td.count {
183
+ font-weight: bold;
184
+ text-align: right;
185
+ }
186
+
187
+ #testRuns {
188
+ color: green;
189
+ }
190
+
191
+ #testFailures {
192
+ color: red;
193
+ }
194
+
195
+ #commandPasses {
196
+ color: green;
197
+ }
198
+
199
+ #commandFailures {
200
+ color: red;
201
+ }
202
+
203
+ #commandErrors {
204
+ color: #f90;
205
+ }
206
+
207
+
208
+ /*---( Logging Console )---*/
209
+
210
+ #logging-console {
211
+ background: #fff;
212
+ font-size: 75%;
213
+ }
214
+
215
+ #logging-console #banner {
216
+ display: block;
217
+ width: 100%;
218
+ position: fixed;
219
+ top: 0;
220
+ background: #ddd;
221
+ border-bottom: 1px solid #666;
222
+ }
223
+
224
+ #logging-console #logLevelChooser {
225
+ float: right;
226
+ margin: 3px;
227
+ }
228
+
229
+ #logging-console ul {
230
+ list-style-type: none;
231
+ margin: 0px;
232
+ margin-top: 3em;
233
+ padding-left: 5px;
234
+ }
235
+
236
+ #logging-console li {
237
+ margin: 2px;
238
+ border-top: 1px solid #ccc;
239
+ }
240
+
241
+ #logging-console li.error {
242
+ font-weight: bold;
243
+ color: red;
244
+ }
245
+
246
+ #logging-console li.warn {
247
+ color: red;
248
+ }
249
+
250
+ #logging-console li.debug {
251
+ color: green;
252
+ }
253
+
254
+ div.executionOptions {
255
+ padding-left: 5em;
256
+ }
257
+
258
+ div.executionOptions label, div.executionOptions input {
259
+ display: block;
260
+ float: left;
261
+ }
262
+
263
+ div.executionOptions br {
264
+ clear: left;
265
+ }
266
+
267
+ #speedSlider {
268
+ text-align: left;
269
+ margin: 0px auto;
270
+ width: 260px;
271
+ line-height: 0px;
272
+ font-size: 0px;
273
+ padding: 0px;
274
+ }
275
+
276
+ #speedSlider #speedTrack {
277
+ background-color: #333;
278
+ width: 260px;
279
+ height: 2px;
280
+ line-height: 2px;
281
+ z-index: 1;
282
+ border: 1px solid;
283
+ border-color: #999 #ddd #ddd #999;
284
+ cursor: pointer;
285
+ }
286
+
287
+ #speedSlider #speedHandle {
288
+ width: 12px;
289
+ top: -8px;
290
+ background-color: #666;
291
+ position: relative;
292
+ margin: 0px;
293
+ height: 8px;
294
+ line-height: 8px;
295
+ z-index: 1;
296
+ border: 1px solid;
297
+ border-color: #999 #333 #333 #999;
298
+ cursor: pointer;
299
+ }