itemengine-cypress-automation 1.0.90 → 1.0.92
Sign up to get free protection for your applications and to get access to all the features.
- package/cypress/e2e/ILC/Desmos/desmosGeometryToolPreviewContents.smoke.js +1 -1
- package/cypress/e2e/ILC/DrawingResponse/drawingResponseGradingViewAndCorrectAnswerViewContents.smoke.js +3 -3
- package/cypress/e2e/ILC/EssayResponse/essayResponseEquationEditor.smoke.js +418 -0
- package/cypress/e2e/ILC/EssayResponse/previewContentsForAllViews.smoke.js +1 -1
- package/cypress/e2e/ILC/EssayResponseBasic/gradingViewAndCorrectAnswerViewContents.smoke.js +1 -1
- package/cypress/e2e/ILC/EssayResponseBasic/previewContentsForAllViews.smoke.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/previewContentsForAllViews.smoke.js +0 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/HeaderSection.js +79 -0
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/conditionalCheckboxScoring.js +335 -0
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/editTabScoringSection.js +64 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/setLimitSection.js +334 -0
- package/cypress/e2e/ILC/ReadingRuler/readingRulerEditTabBasicsSection.js +180 -0
- package/cypress/e2e/ILC/ReadingRuler/readingRulerHeaderSection.js +55 -0
- package/cypress/e2e/ILC/ReadingRuler/readingRulerPreviewTab.js +257 -0
- package/cypress/e2e/ILC/ReadingRuler/readingrulerPreviewContents.smoke.js +68 -0
- package/cypress/e2e/ILC/TextEntryMath/evaluationMethodsWithoutSetResponse.js +773 -0
- package/cypress/e2e/ILC/TextEntryMath/responseEvaluationMethodsAndCustomSettings.js +1 -1
- package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +50 -50
- package/cypress/fixtures/theme/ilc.json +1 -1
- package/cypress/pages/components/commonComponents.js +1 -1
- package/cypress/pages/components/desmosToolComponent.js +1 -1
- package/cypress/pages/components/equationEditorFlyout.js +118 -7
- package/cypress/pages/components/essayResponseCommonComponents.js +26 -1
- package/cypress/pages/components/figOverImageCanvasComponent.js +1 -1
- package/cypress/pages/drawingResponsePage.js +1 -1
- package/cypress/pages/essayResponsePage.js +106 -1
- package/cypress/pages/fillInTheGapsOverImageTextPage.js +270 -8
- package/cypress/pages/readingRulerPage.js +64 -5
- package/cypress/pages/textEntryMathPage.js +112 -8
- package/package.json +1 -1
- package/scripts/sorry-cypress.mjs +1 -1
@@ -0,0 +1,257 @@
|
|
1
|
+
import { readingRulerPage } from "../../../pages";
|
2
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
3
|
+
import utilities from "../../../support/helpers/utilities";
|
4
|
+
const css = Cypress.env('css');
|
5
|
+
|
6
|
+
describe('Create Item page - Reading ruler: Preview Tab', () => {
|
7
|
+
before(() => {
|
8
|
+
cy.loginAs('admin');
|
9
|
+
});
|
10
|
+
|
11
|
+
describe('\'Conditional checkboxes\'- Preview Tab', () => {
|
12
|
+
abortEarlySetup();
|
13
|
+
before(() => {
|
14
|
+
cy.log('Navigating to \'Reading ruler\' resource tool');
|
15
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
16
|
+
});
|
17
|
+
|
18
|
+
it('When \'Display button to student\' checkbox is checked by default, then reading ruler button should be displayed in Preview tab', () => {
|
19
|
+
readingRulerPage.steps.verifyDisplayButtonToStudentCheckboxIsChecked();
|
20
|
+
cy.log('Switching to Preview Tab')
|
21
|
+
readingRulerPage.steps.switchToPreviewTab();
|
22
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRulerButton(), 'visible')
|
23
|
+
});
|
24
|
+
|
25
|
+
it('When user unchecks the \'Display button to student\' checkbox then reading ruler button should not be displayed in Preview tab', () => {
|
26
|
+
cy.log('Switching to Edit Tab')
|
27
|
+
readingRulerPage.steps.switchToEditTab();
|
28
|
+
readingRulerPage.steps.uncheckDisplayButtonToStudentCheckbox();
|
29
|
+
cy.log('Switching to Preview Tab')
|
30
|
+
readingRulerPage.steps.switchToPreviewTab();
|
31
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRulerButton(), 'notExist')
|
32
|
+
});
|
33
|
+
|
34
|
+
it('Accessibility of preview tab when reading ruler button is not displayed', { tags: 'a11y' }, () => {
|
35
|
+
cy.checkAccessibility(readingRulerPage.previewWrapper());
|
36
|
+
});
|
37
|
+
|
38
|
+
it('When \'Allow student to resize\' checkbox is checked by default and user selects \'Drag handle\' ruler style then the resize buttons on the reading ruler should be displayed in enabled state in Preview tab', () => {
|
39
|
+
cy.log('Switching to Edit Tab');
|
40
|
+
readingRulerPage.steps.switchToEditTab();
|
41
|
+
readingRulerPage.steps.checkDisplayButtonToStudentCheckbox();
|
42
|
+
readingRulerPage.steps.verifyAllowStudentToResizeCheckboxIsChecked();
|
43
|
+
readingRulerPage.steps.selectRulerStyle('Drag handle');
|
44
|
+
cy.log('Switching to Preview Tab');
|
45
|
+
readingRulerPage.steps.switchToPreviewTab();
|
46
|
+
readingRulerPage.steps.clickOnReadingRulerButton();
|
47
|
+
readingRulerPage.steps.verifyResizeButtonsEnabled();
|
48
|
+
});
|
49
|
+
|
50
|
+
// Failing due to https://redmine.zeuslearning.com/issues/528044
|
51
|
+
it('Accessbility of reading ruler and reading ruler button', { tags: 'a11y' }, () => {
|
52
|
+
cy.checkAccessibility(readingRulerPage.readingRulerButton());
|
53
|
+
cy.checkAccessibility(readingRulerPage.readingRuler());
|
54
|
+
});
|
55
|
+
|
56
|
+
it('When user unchecks the \'Allow student to resize\' checkbox then the resize buttons on the reading ruler should be displayed in disabled state in Preview tab', () => {
|
57
|
+
cy.log('Switching to Edit Tab')
|
58
|
+
readingRulerPage.steps.switchToEditTab();
|
59
|
+
readingRulerPage.steps.uncheckAllowStudentToResizeCheckbox();
|
60
|
+
cy.log('Switching to Preview Tab')
|
61
|
+
readingRulerPage.steps.switchToPreviewTab();
|
62
|
+
readingRulerPage.steps.clickOnReadingRulerButton();
|
63
|
+
readingRulerPage.steps.verifyResizeButtonDisabled();
|
64
|
+
});
|
65
|
+
|
66
|
+
// Failing due to https://redmine.zeuslearning.com/issues/528044
|
67
|
+
it('Accessbility of reading ruler when \'Allow student to resize\' checkbox is unchecked', { tags: 'a11y' }, () => {
|
68
|
+
cy.checkAccessibility(readingRulerPage.readingRuler());
|
69
|
+
});
|
70
|
+
|
71
|
+
it('When user checks the \'Visible on landing\' checkbox then switches to Preview tab, reading ruler button should be in selected state and reading ruler should be displayed in the preview tab', () => {
|
72
|
+
cy.log('Switching to Edit Tab')
|
73
|
+
readingRulerPage.steps.switchToEditTab();
|
74
|
+
readingRulerPage.steps.checkVisibleOnLandingCheckbox();
|
75
|
+
cy.log('Switching to Preview Tab')
|
76
|
+
readingRulerPage.steps.switchToPreviewTab();
|
77
|
+
readingRulerPage.steps.verifySelectedStateOfReadingRulerButton();
|
78
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRuler(), 'visible');
|
79
|
+
});
|
80
|
+
|
81
|
+
it('When user clicks on the \'Close\' button on the reading ruler then the reading ruler should close and reading ruler button should be in unselected state in the Preview tab', () => {
|
82
|
+
readingRulerPage.steps.clickOnCloseButtonInReadingRuler();
|
83
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRuler(), 'notExist');
|
84
|
+
readingRulerPage.steps.verifyUnselectedStateOfReadingRulerButton();
|
85
|
+
});
|
86
|
+
|
87
|
+
it('When user unchecks the \'Visible on landing\' checkbox then the reading ruler should not be visible and reading ruler button should be in unselected state in the Preview tab', () => {
|
88
|
+
cy.log('Switching to Edit Tab')
|
89
|
+
readingRulerPage.steps.switchToEditTab();
|
90
|
+
readingRulerPage.steps.uncheckVisibleOnLandingCheckbox();
|
91
|
+
cy.log('Switching to Preview Tab')
|
92
|
+
readingRulerPage.steps.switchToPreviewTab();
|
93
|
+
readingRulerPage.steps.verifyUnselectedStateOfReadingRulerButton();
|
94
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRuler(), 'notExist');
|
95
|
+
});
|
96
|
+
});
|
97
|
+
|
98
|
+
describe('Preview Tab contents', () => {
|
99
|
+
abortEarlySetup();
|
100
|
+
before(() => {
|
101
|
+
cy.log('Navigating to \'Reading ruler\' resource tool');
|
102
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
103
|
+
});
|
104
|
+
|
105
|
+
it('When \'Display button to student\' and \'Allow student to resize\' checkbox are checked and user selects \'Drag handle\' ruler style and when user switches to preview tab, reading ruler button should be displayed in unselected state', () => {
|
106
|
+
readingRulerPage.steps.verifyDisplayButtonToStudentCheckboxIsChecked();
|
107
|
+
readingRulerPage.steps.verifyAllowStudentToResizeCheckboxIsChecked();
|
108
|
+
readingRulerPage.steps.selectRulerStyle('Drag handle');
|
109
|
+
cy.log('Switching to Preview Tab')
|
110
|
+
readingRulerPage.steps.switchToPreviewTab();
|
111
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRulerButton(), 'visible');
|
112
|
+
readingRulerPage.steps.verifyUnselectedStateOfReadingRulerButton();
|
113
|
+
});
|
114
|
+
|
115
|
+
it('CSS of active and default state of \'ReadingRuler\' button in Preview tab', { tags: 'css' }, () => {
|
116
|
+
readingRulerPage.steps.hoverOnReadingRulerButton();
|
117
|
+
utilities.verifyCSS(readingRulerPage.readingRulerButton(), {
|
118
|
+
'border': `1px solid ${css.color.activeButtons}`,
|
119
|
+
'background-color': css.color.figActiveComponentBg
|
120
|
+
});
|
121
|
+
readingRulerPage.steps.hoverAwayFromReadingRulerButton();
|
122
|
+
utilities.verifyCSS(readingRulerPage.readingRulerButton(), {
|
123
|
+
'border': `1px solid ${css.color.secondaryBtnBorder}`,
|
124
|
+
'background-color': css.color.defaultBackground
|
125
|
+
});
|
126
|
+
});
|
127
|
+
|
128
|
+
it('When user clicks on the reading ruler button, reading ruler should be displayed in Preview Tab and reading ruler button should be in selected state', () => {
|
129
|
+
readingRulerPage.steps.clickOnReadingRulerButton();
|
130
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRuler(), 'visible');
|
131
|
+
readingRulerPage.steps.verifySelectedStateOfReadingRulerButton();
|
132
|
+
});
|
133
|
+
|
134
|
+
it('Drag handle button, resize buttons, and close button should be visible and displayed in enabled state in Preview tab ', () => {
|
135
|
+
const buttons = [readingRulerPage.dragButton, readingRulerPage.topResizeButton, readingRulerPage.bottomResizeButton, readingRulerPage.closeButton, readingRulerPage.resizeButton]
|
136
|
+
buttons.forEach(button => {
|
137
|
+
utilities.verifyElementVisibilityState(button(), 'visible');
|
138
|
+
});
|
139
|
+
readingRulerPage.steps.verifyResizeButtonsEnabled();
|
140
|
+
readingRulerPage.steps.verifyCloseButtonEnabled();
|
141
|
+
readingRulerPage.steps.verifyDragButtonEnabled();
|
142
|
+
});
|
143
|
+
|
144
|
+
it('CSS of Drag handle button, resize buttons, and close button in default state', { tags: 'css' }, () => {
|
145
|
+
const buttons = [readingRulerPage.dragButton, readingRulerPage.topResizeButton, readingRulerPage.bottomResizeButton, readingRulerPage.closeButton, readingRulerPage.resizeButton]
|
146
|
+
buttons.forEach(button => {
|
147
|
+
utilities.verifyCSS(button(), {
|
148
|
+
'color': css.color.primaryBtn,
|
149
|
+
'font-weight': css.fontWeight.medium
|
150
|
+
});
|
151
|
+
});
|
152
|
+
});
|
153
|
+
|
154
|
+
it('CSS of Drag handle button, resize buttons, and close button in hover state', { tags: 'css' }, () => {
|
155
|
+
const buttons = [readingRulerPage.dragButton, readingRulerPage.topResizeButton, readingRulerPage.bottomResizeButton, readingRulerPage.closeButton, readingRulerPage.resizeButton]
|
156
|
+
buttons.forEach(button => {
|
157
|
+
button()
|
158
|
+
.realHover()
|
159
|
+
utilities.verifyCSS(button(), {
|
160
|
+
'background-color': css.color.activeButtons
|
161
|
+
});
|
162
|
+
});
|
163
|
+
});
|
164
|
+
|
165
|
+
it('When user deselects the reading ruler button then the button should be displayed in unselected state and the reading ruler should not display in Preview tab', () => {
|
166
|
+
readingRulerPage.steps.clickOnReadingRulerButton();
|
167
|
+
readingRulerPage.steps.verifyUnselectedStateOfReadingRulerButton();
|
168
|
+
utilities.verifyElementVisibilityState(readingRulerPage.readingRuler(), 'notExist');
|
169
|
+
});
|
170
|
+
});
|
171
|
+
|
172
|
+
describe('Opacity section - Preview tab', () => {
|
173
|
+
abortEarlySetup();
|
174
|
+
before(() => {
|
175
|
+
cy.log('Navigating to \'Reading ruler\' resource tool');
|
176
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
177
|
+
cy.log('Checking visible on landing checkbox')
|
178
|
+
readingRulerPage.steps.checkVisibleOnLandingCheckbox();
|
179
|
+
cy.log('Switching to Preview Tab')
|
180
|
+
readingRulerPage.steps.switchToPreviewTab();
|
181
|
+
});
|
182
|
+
|
183
|
+
it('When the opacity value is set to 80 percent by default then the opacity of the ruler should be set to 88 percent in the preview tab', () => {
|
184
|
+
readingRulerPage.steps.verifyReadingRulerOpacityInPreviewTab(0.8);
|
185
|
+
});
|
186
|
+
|
187
|
+
it('When the user changes the opacity value from the opacity slider in the edit tab then the opacity of ruler should also change accordingly in the preview tab', () => {
|
188
|
+
cy.log('Switching to Edit Tab')
|
189
|
+
readingRulerPage.steps.switchToEditTab();
|
190
|
+
readingRulerPage.steps.clickOnOpacitySlider();
|
191
|
+
cy.log('Switching to Preview Tab')
|
192
|
+
readingRulerPage.steps.switchToPreviewTab();
|
193
|
+
readingRulerPage.steps.verifyReadingRulerOpacityInPreviewTab(0.5);
|
194
|
+
});
|
195
|
+
|
196
|
+
it('When the user changes the opacity value from the opacity input field in the edit tab then the opacity of ruler should also change accordingly in the preview tab', () => {
|
197
|
+
cy.log('Switching to Edit Tab')
|
198
|
+
readingRulerPage.steps.switchToEditTab();
|
199
|
+
readingRulerPage.steps.addInputToOpacityInputField(30);
|
200
|
+
cy.log('Switching to Preview Tab')
|
201
|
+
readingRulerPage.steps.switchToPreviewTab();
|
202
|
+
readingRulerPage.steps.verifyReadingRulerOpacityInPreviewTab(0.3);
|
203
|
+
});
|
204
|
+
});
|
205
|
+
|
206
|
+
describe('Color section- Preview tab', () => {
|
207
|
+
abortEarlySetup();
|
208
|
+
before(() => {
|
209
|
+
cy.log('Navigating to \'Reading ruler\' resource tool');
|
210
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
211
|
+
cy.log('Checking visible on landing checkbox')
|
212
|
+
readingRulerPage.steps.checkVisibleOnLandingCheckbox();
|
213
|
+
});
|
214
|
+
|
215
|
+
it('When \'Grey\' is the selected color in the color section by default then the color of the ruler should be set to grey in the preview tab', () => {
|
216
|
+
readingRulerPage.steps.verifyColorBlockSelectedState(0);
|
217
|
+
cy.log('Switching to Preview Tab')
|
218
|
+
readingRulerPage.steps.switchToPreviewTab();
|
219
|
+
readingRulerPage.steps.verifyReadingRulerColorInPreviewTab(0);
|
220
|
+
});
|
221
|
+
|
222
|
+
it('When the user changes the color of the ruler in the edit tab then the color of the ruler should also change accordingly in the preview tab', () => {
|
223
|
+
cy.log('Switching to Edit Tab')
|
224
|
+
readingRulerPage.steps.switchToEditTab();
|
225
|
+
readingRulerPage.steps.selectColorBlock(1);
|
226
|
+
cy.log('Switching to Preview Tab')
|
227
|
+
readingRulerPage.steps.switchToPreviewTab();
|
228
|
+
readingRulerPage.steps.verifyReadingRulerColorInPreviewTab(1);
|
229
|
+
});
|
230
|
+
});
|
231
|
+
|
232
|
+
describe('Default number of lines section - Preview tab', () => {
|
233
|
+
abortEarlySetup();
|
234
|
+
before(() => {
|
235
|
+
cy.log('Navigating to \'Reading ruler\' resource tool');
|
236
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
237
|
+
cy.log('Checking visible on landing checkbox');
|
238
|
+
readingRulerPage.steps.selectRulerStyle('Drag handle');
|
239
|
+
readingRulerPage.steps.checkVisibleOnLandingCheckbox();
|
240
|
+
cy.log('Switching to Preview Tab')
|
241
|
+
readingRulerPage.steps.switchToPreviewTab();
|
242
|
+
});
|
243
|
+
|
244
|
+
it('When the default number of lines value is set to 4 by default and user has selected \'Drag handle\' in ruler style section then the height and size of the ruler should be set to 168px and 68px respectively in the preview tab', () => {
|
245
|
+
readingRulerPage.steps.verifyHeightAndSizeOfReadingRuler(208, 108);
|
246
|
+
});
|
247
|
+
|
248
|
+
it('When user changes the value of default number of lines value in the edit tab then the height and size of ruler should also change accordingly in the preview tab', () => {
|
249
|
+
cy.log('Switching to Edit Tab')
|
250
|
+
readingRulerPage.steps.switchToEditTab();
|
251
|
+
readingRulerPage.steps.addInputToDefaultNumberOfLinesInputField('5');
|
252
|
+
cy.log('Switching to Preview Tab')
|
253
|
+
readingRulerPage.steps.switchToPreviewTab();
|
254
|
+
readingRulerPage.steps.verifyHeightAndSizeOfReadingRuler(230, 130);
|
255
|
+
});
|
256
|
+
});
|
257
|
+
});
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import { readingRulerPage, itemPreviewPage, studentViewPage } from "../../../pages";
|
2
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
3
|
+
import utilities from "../../../support/helpers/utilities";
|
4
|
+
let previewContentViews = ['Question preview', 'Item view', 'Item preview', 'Student view', 'Grading view', 'Correct answer view'];
|
5
|
+
const views = utilities.getViews(previewContentViews);
|
6
|
+
var itemReferenceID = "";
|
7
|
+
|
8
|
+
describe('Preview tab contents for all views', () => {
|
9
|
+
before(() => {
|
10
|
+
cy.loginAs('admin');
|
11
|
+
});
|
12
|
+
|
13
|
+
views.forEach((view) => {
|
14
|
+
describe(`Preview tab contents - ${view}`, { tags: 'smoke' }, () => {
|
15
|
+
abortEarlySetup();
|
16
|
+
before(() => {
|
17
|
+
switch (view) {
|
18
|
+
case 'Question preview':
|
19
|
+
cy.log('Navigating to reading ruler resource type');
|
20
|
+
readingRulerPage.steps.navigateToCreateResource('reading ruler');
|
21
|
+
readingRulerPage.steps.checkVisibleOnLandingCheckbox();
|
22
|
+
readingRulerPage.steps.selectColorBlock(2);
|
23
|
+
readingRulerPage.steps.addInputToOpacityInputField(30);
|
24
|
+
readingRulerPage.steps.addInputToDefaultNumberOfLinesInputField(5);
|
25
|
+
readingRulerPage.steps.switchToPreviewTab();
|
26
|
+
break;
|
27
|
+
case 'Item view':
|
28
|
+
cy.visit(`/item-engine/demo/edit-item/${utilities.base64Encoding(itemReferenceID)}`);
|
29
|
+
break;
|
30
|
+
case 'Item preview':
|
31
|
+
cy.visit(`/item-engine/demo/edit-item/${utilities.base64Encoding(itemReferenceID)}`);
|
32
|
+
readingRulerPage.steps.switchToPreviewTab();
|
33
|
+
break;
|
34
|
+
case 'Student view':
|
35
|
+
cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceID)}`);
|
36
|
+
break;
|
37
|
+
case 'Grading view':
|
38
|
+
cy.visit(`/item-engine/demo/render-item/grading-view/${utilities.base64Encoding(itemReferenceID)}`);
|
39
|
+
break;
|
40
|
+
case 'Correct answer view':
|
41
|
+
cy.visit(`/item-engine/demo/render-item/correct-answer-view/${utilities.base64Encoding(itemReferenceID)}`);
|
42
|
+
break;
|
43
|
+
default:
|
44
|
+
throw new Error('Invalid view');
|
45
|
+
}
|
46
|
+
});
|
47
|
+
|
48
|
+
after(() => {
|
49
|
+
if (view === 'Question preview') {
|
50
|
+
readingRulerPage.steps.clickOnSaveQuestionButton();
|
51
|
+
utilities.verifyElementVisibilityState(itemPreviewPage.referenceID(), 'visible');
|
52
|
+
itemReferenceID = itemPreviewPage.steps.getItemReferenceID();
|
53
|
+
}
|
54
|
+
if (view === 'Student view') {
|
55
|
+
studentViewPage.steps.submitResponse();
|
56
|
+
utilities.verifyElementVisibilityState(studentViewPage.buttonGoToGradingView(), 'exist');
|
57
|
+
}
|
58
|
+
});
|
59
|
+
|
60
|
+
it('\'Reading ruler\' should be displayed with \'30 percent\' opacity and in \'Blue\' color', () => {
|
61
|
+
readingRulerPage.steps.verifyReadingRulerExistInPreviewTab();
|
62
|
+
readingRulerPage.steps.verifyReadingRulerOpacityInPreviewTab('0.3');
|
63
|
+
readingRulerPage.steps.verifyReadingRulerColorInPreviewTab(2);
|
64
|
+
readingRulerPage.steps.verifyHeightAndSizeOfReadingRuler(510, 130);
|
65
|
+
});
|
66
|
+
});
|
67
|
+
});
|
68
|
+
});
|