Commit 59108664 by swdanielli

client side event, code clean, ux modification, some corner case handling

parent 17765d8c
...@@ -4,7 +4,13 @@ import json, string, random, re ...@@ -4,7 +4,13 @@ import json, string, random, re
import pkg_resources import pkg_resources
from eventtracking import tracker try:
from eventtracking import tracker
except:
class tracker:
@staticmethod
def emit(a,b):
pass
from mako.template import Template from mako.template import Template
from mako.lookup import TemplateLookup from mako.lookup import TemplateLookup
...@@ -224,14 +230,16 @@ class RecommenderXBlock(XBlock): ...@@ -224,14 +230,16 @@ class RecommenderXBlock(XBlock):
resource_log['old_' + field] = self.recommendations[idx][field] resource_log['old_' + field] = self.recommendations[idx][field]
resource_log[field] = data[field] resource_log[field] = data[field]
# check url for redundancy # check url for redundancy
for recom in self.recommendations: if self.recommendations[idx]['url'] != data['url']:
if self.recommendations[idx]['url'] == data['url']: for recom in self.recommendations:
continue if recom['url'] == data['url']:
if recom['url'] == data['url']: resource_log['error'] = 'existing url'
resource_log['error'] = 'existing url' for field in valid_fields:
print "provided url is existing" resource_log['dup_' + field] = self.recommendations[self.recommendations.index(recom)][field]
tracker.emit('edit_resource', resource_log) resource_log['dup_id'] = self.recommendations[self.recommendations.index(recom)]['id']
return {"Success": False} print "provided url is existing"
tracker.emit('edit_resource', resource_log)
return {"Success": False}
for key in data: for key in data:
if key == 'resource': if key == 'resource':
...@@ -290,6 +298,7 @@ class RecommenderXBlock(XBlock): ...@@ -290,6 +298,7 @@ class RecommenderXBlock(XBlock):
frag.add_css_url("//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css") frag.add_css_url("//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css")
frag.add_javascript_url("//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js") frag.add_javascript_url("//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js")
frag.add_css(self.resource_string("static/css/recommender.css")) frag.add_css(self.resource_string("static/css/recommender.css"))
frag.add_javascript(self.resource_string("static/js/src/cats.js"))
frag.add_javascript(self.resource_string("static/js/src/recommender.js")) frag.add_javascript(self.resource_string("static/js/src/recommender.js"))
frag.initialize_js('RecommenderXBlock') frag.initialize_js('RecommenderXBlock')
return frag return frag
......
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
.recommender_block p { .recommender_block p {
cursor: pointer; cursor: pointer;
}.hidden { display: none;} }
.hidden { display: none;}
.recommender_block { .recommender_block {
width : 100%; width : 100%;
...@@ -17,17 +19,27 @@ ...@@ -17,17 +19,27 @@
float: left; float: left;
} }
.recommender_row_top { .recommender_row_top, .recommender_modify_title_container {
/* overflow:scroll; /* overflow:scroll;
max-height:200px;*/ max-height:200px;*/
font-size: 20px; font-size: 20px;
background-color:rgb(204, 198, 198); padding-top: 0.5em;
padding-left: 0.5em;
background-color: #f5efef;
height: 40px;
color: darkgray;
} }
.recommender_row { .recommender_row {
height: 380px; height: 380px;
} }
.recommender_title {
flex-grow : 1;
max-height: 65px;
overflow-y: scroll;
}
.question { .question {
width:700px; width:700px;
} }
...@@ -61,13 +73,9 @@ ...@@ -61,13 +73,9 @@
padding : 0 0 10 0; padding : 0 0 10 0;
} }
.recommender_title {
flex-grow : 1;
}
.recommender_modify { .recommender_modify {
width: 700px; width: 700px;
float: left; /* float: left; */
} }
.descriptionImg { .descriptionImg {
...@@ -95,6 +103,7 @@ ...@@ -95,6 +103,7 @@
width: 100%; width: 100%;
text-align: center; text-align: center;
cursor: default; cursor: default;
font-weight: 900;
} }
.recommender_recommendations { display: table; } .recommender_recommendations { display: table; }
...@@ -135,7 +144,7 @@ ...@@ -135,7 +144,7 @@
.recommender_vote_arrow_down, .recommender_vote_arrow_up, .recommender_title, .resource_edit_button, .flagResource, .resource_add_button, .hide-show, .paginationCell, .backToViewButton { cursor: pointer; } .recommender_vote_arrow_down, .recommender_vote_arrow_up, .recommender_title, .resource_edit_button, .flagResource, .resource_add_button, .hide-show, .paginationCell, .backToViewButton { cursor: pointer; }
.resource_add_button { float: left; font-weight: bold; } .resource_add_button { text-align: right; font-weight: bold; }
.resource_edit_button { float: left; } .resource_edit_button { float: left; }
.addSourceBlockTitle, .editSourceBlockTitle, .flagSourceBlockTitle { .addSourceBlockTitle, .editSourceBlockTitle, .flagSourceBlockTitle {
margin-bottom: 1em; margin-bottom: 1em;
...@@ -153,22 +162,34 @@ ...@@ -153,22 +162,34 @@
} }
.backToViewButton { color: #1d9dd9; float: left; } .backToViewButton { color: #1d9dd9; float: left; }
.recommender_modify_title { position: relative; left: 50px; overflow: auto; }
.ui-icon.problematic { .ui-icon.problematic {
background-image: url(http://download.jqueryui.com/themeroller/images/ui-icons_ff0000_256x240.png); background-image: url(http://download.jqueryui.com/themeroller/images/ui-icons_ff0000_256x240.png);
} }
.in_title, .edit_title {
height: 75px;
position: relative;
margin-left: 0.5em;
width:100%;
}
.in_url, .edit_url, .flag_reason {
height: 25px;
position: relative;
margin-left: 0.5em;
width:100%;
}
.resource_hovered { background-color:#F2F7FA } .resource_hovered { background-color:#F2F7FA }
.recommender_modify_title_container { background: rgb(204, 198, 198); font-size: 20px; } .recommender_modify_title { float: right; padding-right: 2em; overflow: auto; }
.nonevoting { color: rgb(204, 198, 198); } .nonevoting { color: #bdbdb4; }
.hide-show-icon { margin-left: 0.5em; } .hide-show-icon { margin-left: 0.5em; }
.recommender_vote_score.upvoting, .recommender_vote_arrow_up.upvoting { color: rgb(69, 194, 10); } .recommender_vote_score.upvoting, .recommender_vote_arrow_up.upvoting { color: rgb(69, 194, 10); }
.recommender_vote_score.downvoting, .recommender_vote_arrow_down.downvoting { color: red; } .recommender_vote_score.downvoting, .recommender_vote_arrow_down.downvoting { color: red; }
.recommender_vote_arrow_up.downvoting, .recommender_vote_arrow_down.upvoting { color: rgb(204, 198, 198); } .recommender_vote_arrow_up.downvoting, .recommender_vote_arrow_down.upvoting { color: #bdb4b4; }
.downArrowIcon:before { content: '▼'; } .downArrowIcon:before { content: '▼'; }
...@@ -177,7 +198,8 @@ ...@@ -177,7 +198,8 @@
.rightArrowIcon:before { content: '►'; } .rightArrowIcon:before { content: '►'; }
.leftArrowIcon:before { content: '◄'; } .leftArrowIcon:before { content: '◄'; }
.moreIcon:before { content: '...'; } .moreIcon:before { content: '...'; }
.lightgreyBg { background-color: lightgrey; } .lightgreyBg { background-color: #f5efef; }
a { word-break: break-all; }
a:link { color: black; } a:link { color: black; }
form { margin: 0em; } form { margin: 0em; }
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<div class="recommender_recommendations"> <div class="recommender_recommendations">
<div class="recommender_content"> <div class="recommender_content">
<div class="recommender_row_top hide-show resource_list_expanded"> <div class="recommender_row_top hide-show resource_list_expanded">
Related resources<div class='recommender_panel'><span class="resource_add_button plusIcon"></span> <span class='hide-show-icon upArrowIcon'></span> </div> Related resources<div class='recommender_panel'> <span class='hide-show-icon upArrowIcon'></span> </div>
</div> </div>
<div class='recommender_row_inner'> <div class='recommender_row_inner'>
<div class="recommender_row"> <div class="recommender_row">
...@@ -34,10 +34,19 @@ ...@@ -34,10 +34,19 @@
<%include file="resourcebox.html" args="id=elem['id'],title=elem['title'],votes=elem['votes'],url=elem['url'],description=elem['description'],isProblematic=flagMode,problematicReason=reason,voteMode=voteMode" /> <%include file="resourcebox.html" args="id=elem['id'],title=elem['title'],votes=elem['votes'],url=elem['url'],description=elem['description'],isProblematic=flagMode,problematicReason=reason,voteMode=voteMode" />
% endfor % endfor
</div> </div>
<div class='pagination'> </div> <div class="resource_add_button">Add new resource &gt;&gt;</div>
<div class='pagination'>
<div class="paginationRowTemplate hidden">
<div class="paginationCell leftArrowIcon"></div>
<div class="paginationCell moreIcon leftMoreIcon" style="cursor: default;"></div>
<div class="paginationCell lightgreyBg"></div>
<div class="paginationCell moreIcon rightMoreIcon" style="cursor: default;"></div>
<div class="paginationCell rightArrowIcon"></div>
</div>
</div>
<div class="recommender_description"> <div class="recommender_description">
<div class="descriptionImg"> <div class="descriptionImg">
<div> This is a list of resources your fellow students <div class='descriptionIntro'> This is a list of resources your fellow students
thought might be helpful. If you find another useful thought might be helpful. If you find another useful
resource, either on edx.org or elsewhere, please add resource, either on edx.org or elsewhere, please add
it. If you can improve the description or preview of a it. If you can improve the description or preview of a
...@@ -45,6 +54,8 @@ ...@@ -45,6 +54,8 @@
helpful, upvote it. If it&rsquo;s not so helpful, downvote helpful, upvote it. If it&rsquo;s not so helpful, downvote
it. If it has issues (illegal material, incorrect, etc.), it. If it has issues (illegal material, incorrect, etc.),
please flag it and let us know the reason. </div> please flag it and let us know the reason. </div>
<img class="previewingImg hidden" src="" style="height: 100%" />
</div> </div>
</div> </div>
</div> </div>
...@@ -55,7 +66,6 @@ ...@@ -55,7 +66,6 @@
<div class="flagSourceBlockTitle">Why would you like to flag this resource?</div> <div class="flagSourceBlockTitle">Why would you like to flag this resource?</div>
<input type="text" <input type="text"
class="flag_reason" class="flag_reason"
style="height: 25px; position: relative; left: 10px; width:100%"
name="flag_rationale" name="flag_rationale"
placeholder="Reason for why this resource should be removed"/><br/> placeholder="Reason for why this resource should be removed"/><br/>
<input type="button" value="Flag resource" class="flag_reason_submit" style="margin-top: 0.5em;"> <input type="button" value="Flag resource" class="flag_reason_submit" style="margin-top: 0.5em;">
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="recommender_resource"> <div class="recommender_resource">
<div class="recommender_vote_box"> <div class="recommender_vote_box">
<div class="recommender_vote_arrow_up ${voteMode}" role="button" aria-label="upvote" tabindex="0"><b></b></div> <div class="recommender_vote_arrow_up ${voteMode}" role="button" aria-label="upvote" tabindex="0"><b></b></div>
<div class="recommender_vote_score ${voteMode}"><b>${votes}</b></div> <div class="recommender_vote_score ${voteMode}">${votes}</div>
<div class="recommender_vote_arrow_down ${voteMode}" role="button" aria-label="downvote" tabindex="0"><b></b></div> <div class="recommender_vote_arrow_down ${voteMode}" role="button" aria-label="downvote" tabindex="0"><b></b></div>
</div> </div>
<div class="recommender_blurb"> <div class="recommender_blurb">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment