Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
ed2e6dc8
Commit
ed2e6dc8
authored
Oct 24, 2017
by
Harry Rein
Committed by
GitHub
Oct 24, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #16306 from edx/HarryRein/responsive-dashboard
Harry rein/responsive dashboard
parents
0084b3b4
889e9880
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
33 additions
and
71 deletions
+33
-71
common/djangoapps/terrain/steps.py
+3
-3
lms/djangoapps/courseware/features/registration.py
+2
-2
lms/static/sass/_header.scss
+5
-6
lms/static/sass/features/_course-search.scss
+2
-5
lms/static/sass/features/_learner-profile.scss
+5
-0
lms/static/sass/multicourse/_dashboard.scss
+0
-0
lms/static/sass/search/_search.scss
+5
-17
lms/templates/dashboard.html
+6
-5
openedx/features/course_search/static/course_search/js/spec/course_search_spec.js
+1
-24
openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js
+0
-2
openedx/features/course_search/static/course_search/templates/dashboard_search_results.underscore
+0
-1
themes/edx.org/lms/templates/dashboard.html
+4
-6
No files found.
common/djangoapps/terrain/steps.py
View file @
ed2e6dc8
...
@@ -53,12 +53,12 @@ def i_visit_the_homepage(step):
...
@@ -53,12 +53,12 @@ def i_visit_the_homepage(step):
@step
(
u'I (?:visit|access|open) the dashboard$'
)
@step
(
u'I (?:visit|access|open) the dashboard$'
)
def
i_visit_the_dashboard
(
step
):
def
i_visit_the_dashboard
(
step
):
world
.
visit
(
'/dashboard'
)
world
.
visit
(
'/dashboard'
)
assert
world
.
is_css_present
(
'.
container.
dashboard'
)
assert
world
.
is_css_present
(
'.dashboard'
)
@step
(
'I should be on the dashboard page$'
)
@step
(
'I should be on the dashboard page$'
)
def
i_should_be_on_the_dashboard
(
step
):
def
i_should_be_on_the_dashboard
(
step
):
assert
world
.
is_css_present
(
'.
container.
dashboard'
)
assert
world
.
is_css_present
(
'.dashboard'
)
assert
'Dashboard'
in
world
.
browser
.
title
assert
'Dashboard'
in
world
.
browser
.
title
...
@@ -166,7 +166,7 @@ def i_am_logged_in(step):
...
@@ -166,7 +166,7 @@ def i_am_logged_in(step):
world
.
create_user
(
'robot'
,
'test'
)
world
.
create_user
(
'robot'
,
'test'
)
world
.
log_in
(
username
=
'robot'
,
password
=
'test'
)
world
.
log_in
(
username
=
'robot'
,
password
=
'test'
)
world
.
browser
.
visit
(
lettuce
.
django
.
django_url
(
'/'
))
world
.
browser
.
visit
(
lettuce
.
django
.
django_url
(
'/'
))
dash_css
=
'.
container.
dashboard'
dash_css
=
'.dashboard'
assert
world
.
is_css_present
(
dash_css
)
assert
world
.
is_css_present
(
dash_css
)
...
...
lms/djangoapps/courseware/features/registration.py
View file @
ed2e6dc8
...
@@ -11,7 +11,7 @@ def i_register_for_the_course(_step, course):
...
@@ -11,7 +11,7 @@ def i_register_for_the_course(_step, course):
url
=
django_url
(
'courses/
%
s/about'
%
world
.
scenario_dict
[
'COURSE'
]
.
id
.
to_deprecated_string
())
url
=
django_url
(
'courses/
%
s/about'
%
world
.
scenario_dict
[
'COURSE'
]
.
id
.
to_deprecated_string
())
world
.
browser
.
visit
(
url
)
world
.
browser
.
visit
(
url
)
world
.
css_click
(
'.intro a.register'
)
world
.
css_click
(
'.intro a.register'
)
assert
world
.
is_css_present
(
'.
container.
dashboard'
)
assert
world
.
is_css_present
(
'.dashboard'
)
@step
(
'I register to audit the course$'
)
@step
(
'I register to audit the course$'
)
...
@@ -27,7 +27,7 @@ def i_register_to_audit_the_course(_step):
...
@@ -27,7 +27,7 @@ def i_register_to_audit_the_course(_step):
ignored_exceptions
=
AttributeError
ignored_exceptions
=
AttributeError
)
)
time
.
sleep
(
1
)
time
.
sleep
(
1
)
assert
world
.
is_css_present
(
'.
container.
dashboard'
)
assert
world
.
is_css_present
(
'.dashboard'
)
@step
(
u'I should see an empty dashboard message'
)
@step
(
u'I should see an empty dashboard message'
)
...
...
lms/static/sass/_header.scss
View file @
ed2e6dc8
...
@@ -20,14 +20,14 @@
...
@@ -20,14 +20,14 @@
a
{
a
{
@include
float
(
left
);
@include
float
(
left
);
@include
margin
(
$baseline
/
2
,
0
,
0
,
$baseline
);
@include
margin
(
$baseline
*
0
.75
,
0
,
0
,
$baseline
*
2
);
display
:
block
;
display
:
block
;
.logo
{
.logo
{
@include
float
(
left
);
@include
float
(
left
);
width
:
$header-logo-width
;
height
:
$header-logo-height
;
}
}
@include
media-breakpoint-down
(
sm
)
{
@include
media-breakpoint-down
(
sm
)
{
...
@@ -90,7 +90,7 @@
...
@@ -90,7 +90,7 @@
a
{
a
{
color
:
theme-color
(
"secondary"
);
color
:
theme-color
(
"secondary"
);
padding
:
$baseline
*
0
.35
$baseline
*
1
.25
$baseline
*
0
.75
;
padding
:
$baseline
*
0
.35
$baseline
*
1
.25
$baseline
;
font-weight
:
$font-weight-normal
;
font-weight
:
$font-weight-normal
;
display
:
inline-block
;
display
:
inline-block
;
margin-bottom
:
-1
*
$baseline
/
2
;
margin-bottom
:
-1
*
$baseline
/
2
;
...
@@ -112,8 +112,7 @@
...
@@ -112,8 +112,7 @@
.secondary
{
.secondary
{
@include
float
(
right
);
@include
float
(
right
);
@include
margin
(
$baseline
*
0
.75
,
$baseline
*
2
,
0
,
0
);
margin
:
$baseline
*
0
.6
$baseline
0
0
;
// All navigation items
// All navigation items
.nav-item
{
.nav-item
{
...
@@ -230,7 +229,7 @@
...
@@ -230,7 +229,7 @@
.hamburger-menu
{
.hamburger-menu
{
@include
left
(
22px
);
@include
left
(
22px
);
position
:
absolute
;
position
:
absolute
;
top
:
$baseline
;
top
:
$baseline
*
1
.25
;
width
:
30px
;
width
:
30px
;
height
:
20px
;
height
:
20px
;
-webkit-transform
:
rotate
(
0deg
);
-webkit-transform
:
rotate
(
0deg
);
...
...
lms/static/sass/features/_course-search.scss
View file @
ed2e6dc8
...
@@ -23,8 +23,6 @@
...
@@ -23,8 +23,6 @@
}
}
.search-results-item
{
.search-results-item
{
@include
padding-right
(
140px
);
position
:
relative
;
position
:
relative
;
border-top
:
1px
solid
$border-color
;
border-top
:
1px
solid
$border-color
;
padding
:
$baseline
(
$baseline
/
2
);
padding
:
$baseline
(
$baseline
/
2
);
...
@@ -52,10 +50,9 @@
...
@@ -52,10 +50,9 @@
}
}
.result-link
{
.result-link
{
@include
right
(
$baseline
/
2
);
@include
float
(
right
);
@include
padding-left
(
$baseline
/
4
);
position
:
absolute
;
top
:
$baseline
;
line-height
:
1
.6em
;
line-height
:
1
.6em
;
}
}
...
...
lms/static/sass/features/_learner-profile.scss
View file @
ed2e6dc8
...
@@ -273,6 +273,11 @@
...
@@ -273,6 +273,11 @@
border
:
none
;
border
:
none
;
box-shadow
:
none
;
box-shadow
:
none
;
padding
:
0
;
padding
:
0
;
@media
(
max-width
:
$learner-profile-container-flex
)
{
// Switch to map-get($grid-breakpoints,md) for bootstrap
max-width
:
calc
(
100%
-
40px
);
min-width
:
auto
;
}
}
}
.u-field-title
{
.u-field-title
{
...
...
lms/static/sass/multicourse/_dashboard.scss
View file @
ed2e6dc8
This diff is collapsed.
Click to expand it.
lms/static/sass/search/_search.scss
View file @
ed2e6dc8
...
@@ -81,8 +81,6 @@
...
@@ -81,8 +81,6 @@
}
}
.search-results-item
{
.search-results-item
{
@include
padding-right
(
140px
);
position
:
relative
;
position
:
relative
;
border-bottom
:
1px
solid
$gray-l4
;
border-bottom
:
1px
solid
$gray-l4
;
padding
:
$baseline
(
$baseline
/
2
);
padding
:
$baseline
(
$baseline
/
2
);
...
@@ -119,12 +117,10 @@
...
@@ -119,12 +117,10 @@
}
}
.result-link
{
.result-link
{
@include
right
(
$baseline
/
2
);
@include
float
(
right
);
@include
padding-left
(
$baseline
/
4
);
position
:
absolute
;
top
:
$baseline
;
line-height
:
1
.6em
;
line-height
:
1
.6em
;
text-transform
:
uppercase
;
}
}
.search-results-ellipsis
{
.search-results-ellipsis
{
...
@@ -155,12 +151,8 @@
...
@@ -155,12 +151,8 @@
.dashboard-search-bar
{
.dashboard-search-bar
{
@include
float
(
right
);
margin
:
0
0
$baseline
;
@include
margin-left
(
flex-gutter
());
display
:
block
;
margin-bottom
:
$baseline
;
padding
:
0
;
width
:
flex-grid
(
3
);
label
{
label
{
@extend
%t-regular
;
@extend
%t-regular
;
...
@@ -181,12 +173,8 @@
...
@@ -181,12 +173,8 @@
}
}
.dashboard-search-results
{
.dashboard-search-results
{
@include
float
(
left
);
margin
:
0
0
$baseline
;
margin
:
0
;
padding
:
0
;
padding
:
0
;
width
:
flex-grid
(
9
);
min-height
:
300px
;
.search-info
{
.search-info
{
padding-bottom
:
lh
(
1
.75
);
padding-bottom
:
lh
(
1
.75
);
...
...
lms/templates/dashboard.html
View file @
ed2e6dc8
...
@@ -102,7 +102,9 @@ from openedx.core.djangolib.markup import HTML, Text
...
@@ -102,7 +102,9 @@ from openedx.core.djangolib.markup import HTML, Text
</div>
</div>
<main
id=
"main"
aria-label=
"Content"
tabindex=
"-1"
>
<main
id=
"main"
aria-label=
"Content"
tabindex=
"-1"
>
<div
class=
"container dashboard"
id=
"dashboard-main"
>
<div
class=
"dashboard"
id=
"dashboard-main"
>
<div
class=
"main-container"
>
<div
class=
"my-courses"
id=
"my-courses"
>
<div
class=
"my-courses"
id=
"my-courses"
>
<
%
include
file=
"learner_dashboard/_dashboard_navigation_courses.html"
/>
<
%
include
file=
"learner_dashboard/_dashboard_navigation_courses.html"
/>
...
@@ -160,7 +162,8 @@ from openedx.core.djangolib.markup import HTML, Text
...
@@ -160,7 +162,8 @@ from openedx.core.djangolib.markup import HTML, Text
</div>
</div>
% endif
% endif
</div>
</div>
</div>
<div
class=
"side-container"
>
%if sidebar_account_activation_message:
%if sidebar_account_activation_message:
<div
class=
"sidebar-notification"
>
<div
class=
"sidebar-notification"
>
${sidebar_account_activation_message | n, decode.utf8}
${sidebar_account_activation_message | n, decode.utf8}
...
@@ -182,9 +185,6 @@ from openedx.core.djangolib.markup import HTML, Text
...
@@ -182,9 +185,6 @@ from openedx.core.djangolib.markup import HTML, Text
</div>
</div>
</form>
</form>
</div>
</div>
% endif
% if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'):
<div
id=
"dashboard-search-results"
class=
"search-results dashboard-search-results"
></div>
<div
id=
"dashboard-search-results"
class=
"search-results dashboard-search-results"
></div>
% endif
% endif
...
@@ -212,6 +212,7 @@ from openedx.core.djangolib.markup import HTML, Text
...
@@ -212,6 +212,7 @@ from openedx.core.djangolib.markup import HTML, Text
</div>
</div>
% endif
% endif
</div>
</div>
</div>
</main>
</main>
<div
id=
"email-settings-modal"
class=
"modal"
aria-hidden=
"true"
>
<div
id=
"email-settings-modal"
class=
"modal"
aria-hidden=
"true"
>
...
...
openedx/features/course_search/static/course_search/js/spec/course_search_spec.js
View file @
ed2e6dc8
...
@@ -351,23 +351,18 @@ define([
...
@@ -351,23 +351,18 @@ define([
describe
(
'SearchResultsView'
,
function
()
{
describe
(
'SearchResultsView'
,
function
()
{
function
showsLoadingMessage
()
{
function
showsLoadingMessage
()
{
this
.
resultsView
.
showLoadingMessage
();
this
.
resultsView
.
showLoadingMessage
();
expect
(
this
.
resultsView
.
$contentElement
).
toBeHidden
();
expect
(
this
.
resultsView
.
$el
).
toBeVisible
();
expect
(
this
.
resultsView
.
$el
).
toBeVisible
();
expect
(
this
.
resultsView
.
$el
).
not
.
toBeEmpty
();
expect
(
this
.
resultsView
.
$el
).
not
.
toBeEmpty
();
}
}
function
showsErrorMessage
()
{
function
showsErrorMessage
()
{
this
.
resultsView
.
showErrorMessage
();
this
.
resultsView
.
showErrorMessage
();
expect
(
this
.
resultsView
.
$contentElement
).
toBeHidden
();
expect
(
this
.
resultsView
.
$el
).
toBeVisible
();
expect
(
this
.
resultsView
.
$el
).
toBeVisible
();
expect
(
this
.
resultsView
.
$el
).
not
.
toBeEmpty
();
expect
(
this
.
resultsView
.
$el
).
not
.
toBeEmpty
();
}
}
function
returnsToContent
()
{
function
returnsToContent
()
{
this
.
resultsView
.
clear
();
this
.
resultsView
.
clear
();
expect
(
this
.
resultsView
.
$contentElement
).
toHaveCss
({
display
:
this
.
contentElementDisplayValue
});
expect
(
this
.
resultsView
.
$el
).
toBeHidden
();
expect
(
this
.
resultsView
.
$el
).
toBeHidden
();
expect
(
this
.
resultsView
.
$el
).
toBeEmpty
();
expect
(
this
.
resultsView
.
$el
).
toBeEmpty
();
}
}
...
@@ -484,16 +479,6 @@ define([
...
@@ -484,16 +479,6 @@ define([
it
(
'shows a link to load more results'
,
showsMoreResultsLink
);
it
(
'shows a link to load more results'
,
showsMoreResultsLink
);
it
(
'triggers an event for next page'
,
triggersNextPageEvent
);
it
(
'triggers an event for next page'
,
triggersNextPageEvent
);
it
(
'shows a spinner when loading more results'
,
showsLoadMoreSpinner
);
it
(
'shows a spinner when loading more results'
,
showsLoadMoreSpinner
);
it
(
'returns back to courses'
,
function
()
{
var
onReset
=
jasmine
.
createSpy
(
'onReset'
);
this
.
resultsView
.
on
(
'reset'
,
onReset
);
this
.
resultsView
.
render
();
expect
(
this
.
resultsView
.
$el
.
find
(
'a.search-back-to-courses'
)).
toExist
();
this
.
resultsView
.
$el
.
find
(
'.search-back-to-courses'
).
click
();
expect
(
onReset
).
toHaveBeenCalled
();
expect
(
this
.
resultsView
.
$contentElement
).
toBeVisible
();
expect
(
this
.
resultsView
.
$el
).
toBeHidden
();
});
});
});
});
});
...
@@ -502,9 +487,6 @@ define([
...
@@ -502,9 +487,6 @@ define([
function
showsLoadingMessage
()
{
function
showsLoadingMessage
()
{
$
(
'.search-field'
).
val
(
'search string'
);
$
(
'.search-field'
).
val
(
'search string'
);
$
(
'.search-button'
).
trigger
(
'click'
);
$
(
'.search-button'
).
trigger
(
'click'
);
if
(
this
.
$contentElement
)
{
expect
(
this
.
$contentElement
).
toBeHidden
();
}
expect
(
this
.
$searchResults
).
toBeVisible
();
expect
(
this
.
$searchResults
).
toBeVisible
();
expect
(
this
.
$searchResults
).
not
.
toBeEmpty
();
expect
(
this
.
$searchResults
).
not
.
toBeEmpty
();
}
}
...
@@ -556,13 +538,11 @@ define([
...
@@ -556,13 +538,11 @@ define([
$
(
'.cancel-button'
).
trigger
(
'click'
);
$
(
'.cancel-button'
).
trigger
(
'click'
);
AjaxHelpers
.
skipResetRequest
(
requests
);
AjaxHelpers
.
skipResetRequest
(
requests
);
// there should be no results
// there should be no results
expect
(
this
.
$contentElement
).
toHaveCss
({
display
:
this
.
contentElementDisplayValue
});
expect
(
this
.
$searchResults
).
toBeHidden
();
expect
(
this
.
$searchResults
).
toBeHidden
();
}
}
function
clearsResults
()
{
function
clearsResults
()
{
$
(
'.cancel-button'
).
trigger
(
'click'
);
$
(
'.cancel-button'
).
trigger
(
'click'
);
expect
(
this
.
$contentElement
).
toHaveCss
({
display
:
this
.
contentElementDisplayValue
});
expect
(
this
.
$searchResults
).
toBeHidden
();
expect
(
this
.
$searchResults
).
toBeHidden
();
}
}
...
@@ -636,7 +616,6 @@ define([
...
@@ -636,7 +616,6 @@ define([
DashboardSearchFactory
();
DashboardSearchFactory
();
spyOn
(
Backbone
.
history
,
'navigate'
);
spyOn
(
Backbone
.
history
,
'navigate'
);
this
.
$contentElement
=
$
(
'#my-courses'
);
this
.
contentElementDisplayValue
=
'block'
;
this
.
contentElementDisplayValue
=
'block'
;
this
.
$searchResults
=
$
(
'.search-results'
);
this
.
$searchResults
=
$
(
'.search-results'
);
});
});
...
@@ -670,9 +649,7 @@ define([
...
@@ -670,9 +649,7 @@ define([
}
}
}]
}]
});
});
expect
(
$
(
'.search-back-to-courses'
)).
toExist
();
$
(
'.search-form .cancel-button'
).
trigger
(
'click'
);
$
(
'.search-back-to-courses'
).
trigger
(
'click'
);
expect
(
this
.
$contentElement
).
toBeVisible
();
expect
(
this
.
$searchResults
).
toBeHidden
();
expect
(
this
.
$searchResults
).
toBeHidden
();
expect
(
this
.
$searchResults
).
toBeEmpty
();
expect
(
this
.
$searchResults
).
toBeEmpty
();
});
});
...
...
openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js
View file @
ed2e6dc8
...
@@ -12,12 +12,10 @@
...
@@ -12,12 +12,10 @@
)
{
)
{
return
SearchResultsView
.
extend
({
return
SearchResultsView
.
extend
({
el
:
'.search-results'
,
el
:
'.search-results'
,
contentElement
:
'#my-courses, #profile-sidebar'
,
resultsTemplate
:
dashboardSearchResultsTemplate
,
resultsTemplate
:
dashboardSearchResultsTemplate
,
itemTemplate
:
dashboardSearchItemTemplate
,
itemTemplate
:
dashboardSearchItemTemplate
,
events
:
{
events
:
{
'click .search-load-next'
:
'loadNext'
,
'click .search-load-next'
:
'loadNext'
,
'click .search-back-to-courses'
:
'backToCourses'
},
},
backToCourses
:
function
()
{
backToCourses
:
function
()
{
...
...
openedx/features/course_search/static/course_search/templates/dashboard_search_results.underscore
View file @
ed2e6dc8
<header class="search-info">
<header class="search-info">
<a class="search-back-to-courses" href="#"><%- gettext("Back to Dashboard") %></a>
<h2><%- gettext("Search Results") %></h2>
<h2><%- gettext("Search Results") %></h2>
<div class="search-count"><%- totalCountMsg %></div>
<div class="search-count"><%- totalCountMsg %></div>
</header>
</header>
...
...
themes/edx.org/lms/templates/dashboard.html
View file @
ed2e6dc8
...
@@ -102,8 +102,8 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
...
@@ -102,8 +102,8 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
</div>
</div>
<section
class=
"
container
dashboard"
id=
"dashboard-main"
>
<section
class=
"dashboard"
id=
"dashboard-main"
>
<main
id=
"main"
aria-label=
"Content"
tabindex=
"-1"
>
<main
class=
"main-container"
id=
"main"
aria-label=
"Content"
tabindex=
"-1"
>
<section
class=
"my-courses"
id=
"my-courses"
>
<section
class=
"my-courses"
id=
"my-courses"
>
<header
class=
"wrapper-header-courses"
>
<header
class=
"wrapper-header-courses"
>
<h2
class=
"header-courses"
>
${_("My Courses")}
</h2>
<h2
class=
"header-courses"
>
${_("My Courses")}
</h2>
...
@@ -159,7 +159,7 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
...
@@ -159,7 +159,7 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
% endif
% endif
</section>
</section>
</main>
</main>
<div
class=
"side-container"
>
%if sidebar_account_activation_message:
%if sidebar_account_activation_message:
<div
class=
"sidebar-notification"
>
<div
class=
"sidebar-notification"
>
${sidebar_account_activation_message | n, decode.utf8}
${sidebar_account_activation_message | n, decode.utf8}
...
@@ -181,9 +181,6 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
...
@@ -181,9 +181,6 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
</div>
</div>
</form>
</form>
</div>
</div>
% endif
% if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'):
<section
id=
"dashboard-search-results"
class=
"search-results dashboard-search-results"
></section>
<section
id=
"dashboard-search-results"
class=
"search-results dashboard-search-results"
></section>
% endif
% endif
...
@@ -226,6 +223,7 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
...
@@ -226,6 +223,7 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
</section>
</section>
</section>
</section>
% endif
% endif
</div>
</section>
</section>
<section
id=
"email-settings-modal"
class=
"modal"
aria-hidden=
"true"
>
<section
id=
"email-settings-modal"
class=
"modal"
aria-hidden=
"true"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment