From 3bc9c7496cf64b37bf7069a0013802c22b43e70b Mon Sep 17 00:00:00 2001 From: Ibrahim Awwal Date: Tue, 11 Sep 2012 19:15:18 -0700 Subject: [PATCH 01/14] Update discussion setup instructions to clarify that you need to specify a course id for seed_permissions_roles, and also the script itself to tell you that. --- doc/discussion.md | 6 +++--- .../management/commands/seed_permissions_roles.py | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/discussion.md b/doc/discussion.md index 4f8ab9a01a..2446485497 100644 --- a/doc/discussion.md +++ b/doc/discussion.md @@ -9,7 +9,7 @@ If you haven't done so already: brew install mongodb Make sure that you have mongodb running. You can simply open a new terminal tab and type: - + mongod ## Installing elasticsearch @@ -72,9 +72,9 @@ For convenience, add the following environment variables to the terminal (assumi export DJANGO_SETTINGS_MODULE=lms.envs.dev export PYTHONPATH=. -Now initialzie roles and permissions: +Now initialzie roles and permissions, providing a course id eg.: - django-admin.py seed_permissions_roles + django-admin.py seed_permissions_roles "MITx/6.002x/2012_Fall" To assign yourself as a moderator, use the following command (assuming your username is "test", and the course id is "MITx/6.002x/2012_Fall"): diff --git a/lms/djangoapps/django_comment_client/management/commands/seed_permissions_roles.py b/lms/djangoapps/django_comment_client/management/commands/seed_permissions_roles.py index 5987d5c677..f303abf930 100644 --- a/lms/djangoapps/django_comment_client/management/commands/seed_permissions_roles.py +++ b/lms/djangoapps/django_comment_client/management/commands/seed_permissions_roles.py @@ -7,8 +7,10 @@ class Command(BaseCommand): help = 'Seed default permisssions and roles' def handle(self, *args, **options): - if len(args) != 1: - raise CommandError("The number of arguments does not match. ") + if len(args) == 0: + raise CommandError("Please provide a course id") + if len(args) > 1: + raise CommandError("Too many arguments") course_id = args[0] administrator_role = Role.objects.get_or_create(name="Administrator", course_id=course_id)[0] moderator_role = Role.objects.get_or_create(name="Moderator", course_id=course_id)[0] From a9009981457574b5b6f6ee210c9b20f5484b76a0 Mon Sep 17 00:00:00 2001 From: Arjun Singh Date: Wed, 12 Sep 2012 04:32:32 -0700 Subject: [PATCH 02/14] Fix anonymity leak; fix editing when rendering from main page. --- lms/djangoapps/django_comment_client/forum/views.py | 2 ++ lms/djangoapps/django_comment_client/utils.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 76b00a62cd..8804623f4b 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -282,6 +282,8 @@ def single_thread(request, course_id, discussion_id, thread_id): thread['courseware_location'] = courseware_context['courseware_location'] thread['courseware_title'] = courseware_context['courseware_title'] + threads = [utils.safe_content(thread) for thread in threads] + #recent_active_threads = cc.search_recent_active_threads( # course_id, # recursive=False, diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index 1a24bdf565..a4ab9342d2 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -273,7 +273,7 @@ def safe_content(content): 'created_at', 'updated_at', 'depth', 'type', 'commentable_id', 'comments_count', 'at_position_list', 'children', 'highlighted_title', 'highlighted_body', - 'courseware_title', 'courseware_location' + 'courseware_title', 'courseware_location', 'tags' ] if content.get('anonymous') is False: From 452414da373515d2fe4c200d1f22aa1c9cb5389e Mon Sep 17 00:00:00 2001 From: Arjun Singh Date: Wed, 12 Sep 2012 06:13:46 -0700 Subject: [PATCH 03/14] Kill requests for loading responses when selecting another thread. This ensures that the thread you're viewing has the right responses loaded. --- lms/static/coffee/src/discussion/discussion_router.coffee | 1 + lms/static/coffee/src/discussion/utils.coffee | 3 ++- .../src/discussion/views/discussion_thread_view.coffee | 7 ++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lms/static/coffee/src/discussion/discussion_router.coffee b/lms/static/coffee/src/discussion/discussion_router.coffee index 53ada7a596..274e7f2675 100644 --- a/lms/static/coffee/src/discussion/discussion_router.coffee +++ b/lms/static/coffee/src/discussion/discussion_router.coffee @@ -26,6 +26,7 @@ if Backbone? @thread = @discussion.get(thread_id) @setActiveThread() if(@main) + @main.cleanup() @main.undelegateEvents() @main = new DiscussionThreadView(el: $(".discussion-column"), model: @thread) diff --git a/lms/static/coffee/src/discussion/utils.coffee b/lms/static/coffee/src/discussion/utils.coffee index 07a23a4ca6..c65a3c15fd 100644 --- a/lms/static/coffee/src/discussion/utils.coffee +++ b/lms/static/coffee/src/discussion/utils.coffee @@ -71,7 +71,7 @@ class @DiscussionUtil params["loadingCallback"].apply(params["$loading"]) else params["$loading"].loading() - $.ajax(params).always -> + request = $.ajax(params).always -> if $elem $elem.removeAttr("disabled") if params["$loading"] @@ -79,6 +79,7 @@ class @DiscussionUtil params["loadedCallback"].apply(params["$loading"]) else params["$loading"].loaded() + return request @get: ($elem, url, data, success) -> @safeAjax diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee index f56a47b85d..82d00255ae 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee @@ -23,10 +23,15 @@ if Backbone? @renderResponses() @ + cleanup: -> + if @responsesRequest? + @responsesRequest.abort() + renderResponses: -> - DiscussionUtil.safeAjax + @responsesRequest = DiscussionUtil.safeAjax url: "/courses/#{$$course_id}/discussion/forum/#{@model.get('commentable_id')}/threads/#{@model.id}" success: (data, textStatus, xhr) => + @responsesRequest = null @$el.find(".loading").remove() Content.loadContentInfos(data['annotated_content_info']) comments = new Comments(data['content']['children']) From ff94541e40be41e30622cc04900be2641cb9dacd Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Tue, 11 Sep 2012 11:30:05 -0400 Subject: [PATCH 04/14] tweaked inline hide/show and new post buttons --- .../discussion/discussion_module_view.coffee | 30 ++++++++++++------- lms/static/sass/_discussion.scss | 10 +++---- .../discussion/_discussion_module.html | 1 + .../mustache/_inline_discussion.mustache | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lms/static/coffee/src/discussion/discussion_module_view.coffee b/lms/static/coffee/src/discussion/discussion_module_view.coffee index d7a555f004..2d2f3eaa04 100644 --- a/lms/static/coffee/src/discussion/discussion_module_view.coffee +++ b/lms/static/coffee/src/discussion/discussion_module_view.coffee @@ -9,7 +9,8 @@ if Backbone? paginationTemplate: -> DiscussionUtil.getTemplate("_pagination") page_re: /\?discussion_page=(\d+)/ initialize: -> - # Set the page if it was set in the URL. This is used to allow deep linking to pages + @toggleDiscussionBtn = @$(".discussion-show") + # Set the page if it was set in the URL. This is used to allow deep linking to pages match = @page_re.exec(window.location.href) if match @page = parseInt(match[1]) @@ -18,31 +19,38 @@ if Backbone? toggleNewPost: (event) -> event.preventDefault() - if @newPostForm.is(':hidden') + if !@newPostForm + @toggleDiscussion() + @isWaitingOnNewPost = true; + return + if @showed @newPostForm.slideDown(300) else - @newPostForm.slideUp(300) + @newPostForm.show() + @toggleDiscussionBtn.addClass('shown') + @toggleDiscussionBtn.find('.button-text').html("Hide Discussion") + @$("section.discussion").slideDown() + @showed = true hideNewPost: (event) -> event.preventDefault() @newPostForm.slideUp(300) toggleDiscussion: (event) -> - thisButton = $(event.target).closest('a') if @showed @$("section.discussion").slideUp() - thisButton.removeClass('shown') - thisButton.find('.button-text').html("Show Discussion") + @toggleDiscussionBtn.removeClass('shown') + @toggleDiscussionBtn.find('.button-text').html("Show Discussion") @showed = false else - thisButton.addClass('shown') - thisButton.find('.button-text').html("Hide Discussion") + @toggleDiscussionBtn.addClass('shown') + @toggleDiscussionBtn.find('.button-text').html("Hide Discussion") if @retrieved @$("section.discussion").slideDown() @showed = true else - $elem = $(event.target) + $elem = @toggleDiscussionBtn @loadPage $elem loadPage: ($elem)=> @@ -59,7 +67,7 @@ if Backbone? renderDiscussion: ($elem, response, textStatus, discussionId) => window.user = new DiscussionUser(response.user_info) Content.loadContentInfos(response.annotated_content_info) - $elem.html("Hide Discussion") + # $elem.html("Hide Discussion") @discussion = new Discussion() @discussion.reset(response.discussion_data, {silent: false}) $discussion = $(Mustache.render $("script#_inline_discussion").html(), {'threads':response.discussion_data, 'discussionId': discussionId}) @@ -77,6 +85,8 @@ if Backbone? @retrieved = true @showed = true @renderPagination(2, response.num_pages) + if @isWaitingOnNewPost + @newPostForm.show() addThread: (thread, collection, options) => # TODO: When doing pagination, this will need to repaginate. Perhaps just reload page 1? diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 8bc4a30d8f..8386314ef9 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -1620,7 +1620,7 @@ body.discussion { .discussion-module { @extend .discussion-body; margin: 20px 0; - padding: 20px 20px 28px 20px; + padding: 20px; background: #f6f6f6 !important; border-radius: 3px; @@ -1634,9 +1634,8 @@ body.discussion { } .discussion-show { - display: block; - width: 200px; - margin: auto; + position: relative; + top: 3px; font-size: 14px; text-align: center; @@ -1660,10 +1659,11 @@ body.discussion { .new-post-btn { display: inline-block; + float: right; } section.discussion { - margin-top: 20px; + margin-top: 30px; .threads { margin-top: 20px; diff --git a/lms/templates/discussion/_discussion_module.html b/lms/templates/discussion/_discussion_module.html index 5c44495c08..bb172093f6 100644 --- a/lms/templates/discussion/_discussion_module.html +++ b/lms/templates/discussion/_discussion_module.html @@ -2,4 +2,5 @@ diff --git a/lms/templates/discussion/mustache/_inline_discussion.mustache b/lms/templates/discussion/mustache/_inline_discussion.mustache index de15431ca1..22c0564426 100644 --- a/lms/templates/discussion/mustache/_inline_discussion.mustache +++ b/lms/templates/discussion/mustache/_inline_discussion.mustache @@ -1,5 +1,5 @@
- New Post +
From d88de5218191b3e7ce4c3f821f1eadb099903436 Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Tue, 11 Sep 2012 11:53:20 -0400 Subject: [PATCH 05/14] fixed jump to top on browse buttons --- .../src/discussion/views/discussion_thread_list_view.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index fef8b311a7..4cf1ef7198 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -142,6 +142,7 @@ if Backbone? setTimeout (-> @$(".post-search-field").focus()), 200 toggleTopicDrop: (event) => + event.preventDefault() event.stopPropagation() @$(".search").removeClass('is-open') @$(".browse").addClass('is-open') From 87dcd07112629fa30abc8e217db13f2302d3e6e1 Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Tue, 11 Sep 2012 14:08:57 -0400 Subject: [PATCH 06/14] delayed appearance of spinner in thread so things are less jumpy --- .../src/discussion/views/discussion_thread_view.coffee | 6 +++++- lms/static/sass/_discussion.scss | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee index 82d00255ae..f97bb2dddd 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee @@ -14,6 +14,7 @@ if Backbone? render: -> @template = _.template($("#thread-template").html()) @$el.html(@template(@model.toJSON())) + @$el.find(".loading").hide() @delegateEvents() @renderShowView() @@ -27,7 +28,10 @@ if Backbone? if @responsesRequest? @responsesRequest.abort() - renderResponses: -> + renderResponses: -> + setTimeout(=> + @$el.find(".loading").show() + , 200) @responsesRequest = DiscussionUtil.safeAjax url: "/courses/#{$$course_id}/discussion/forum/#{@model.get('commentable_id')}/threads/#{@model.id}" success: (data, textStatus, xhr) => diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 8386314ef9..2e3aed996f 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -1309,7 +1309,7 @@ body.discussion { > li { position: relative; margin: 0 -10px 30px; - padding: 26px 30px 30px; + padding: 26px 30px 20px; border-radius: 3px; border: 1px solid #b2b2b2; box-shadow: 0 1px 3px rgba(0, 0, 0, .15); @@ -1573,6 +1573,7 @@ body.discussion { .discussion-reply-new { padding: 20px; @include clearfix; + @include transition(opacity .2s); h4 { font-size: 16px; From 7098b2e65817ff66b389c379168b1c004f22b751 Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Tue, 11 Sep 2012 14:26:30 -0400 Subject: [PATCH 07/14] cleaned up loading animation in post-list --- common/static/images/spinner-on-grey.gif | Bin 0 -> 6981 bytes common/static/images/spinner.gif | Bin 6942 -> 7033 bytes lms/static/sass/_discussion.scss | 6 ++++++ 3 files changed, 6 insertions(+) create mode 100644 common/static/images/spinner-on-grey.gif diff --git a/common/static/images/spinner-on-grey.gif b/common/static/images/spinner-on-grey.gif new file mode 100644 index 0000000000000000000000000000000000000000..f43d52e4f4d8311e6530b1f2b84c12d4a5c36e97 GIT binary patch literal 6981 zcmd6rX;@R&x`6l2xHHcogamd%0%1r<0)!BzB!m!>Xwg~^#||es?Qm0zQskJ@5r+25PJ@@`-{c(TYJUkD{&RTn| z_2&J)_3f2kVAZD=a{(@J!wEck^yuNkhf`Bi_wV1od-v|mn>V*?*>d~#?JvLl^4o8} zot&J!diCmq2M_MuyZ6mE-%LzQY~Q|pWMm{541WFf*MUIb^5x67Zr$3kW5>Y2!0FSc zckSAB;>3wBzWCz$_3KBE9=&qq%D#R3#>U3(+_|%L>(;${_io#^?X%B5JAC-?xpU_R z2M53U>Z@zlt{psh@Y1DAyLa#2xpU`-AAUGAG<5dt*+Yj8-MDe%;>C*}ee}^MpL}xR z!iD|&_a8WLV03i!{Q2|8j~_pE>eR;{f4pbUp7HVVW5TOt&6_tre*E~!lPBMO_Z{&6^(Fb4GCgnB^SP$NJgrKN1<`q;mx`tp!j|INV)TDz zPF+oL>FedSa7p=JE32}k_YWMF!j)xN(m$n6Q%|eOEw8Awy}h9P`M0OfDt-I)()2QE zPBxrbXQ-Q3Gq1e17_OT)w`!rGE=yWmR$WqVK;MThCrRO7n$*6YB{hYvSqjN~%t$Nrbg(jW$V*{^^vO6ho@cpiP5+eM!;L7L>hem}#;8Iu`mV zOIlG|TVqH{dh^XURc|J%su%n9)$7xKyT|YKO);ga z^*Wt7&!W?6G(Ww_waI#`CjGa*1yu`ci>pe@e;cR{;Yf8<9${3m?MtI(KPfCdNn^S}P)8}-MsPj z3*@*@g4x&YlT;`pM~2Cr^xz9Y1z-^vKBY(BVTLA3U&s-{9Uo zyLWxGbH~7k+qZ4qviXDlO&d4#_4fF?*LSUZf9-o~R>-m{83ZI)k&FQcg*z&D;mRz&Rn3J8AnPEuRr|D8tlC>Ijl1iDF5Fe+AjgiZu zr4l$QQY?xPh6}>@JT8aLVlwD7Duqmfhy*+ii$PP2=052+X| zZ4(fev|Fu9wIlWeACqWKo=`WUqWfA-;&7luB@9Ge@PHF^IxSIVRKf3EaL}bhB0cW0 zEGvl6`Tyjn!#_)=NQT007br8-4m1x}o%1$v63d=GC_UD~d&=H=D`2XJc>GeBb@tQ@ zfW+o+Ez$r(J^{;jcS3DC$7YH2u<>I3nZ>I!yxs}dq-lx7nsaNG#uY%ivpmdkBZ&7& zQs*eL0u|#(WbWUubi+tf3o$jG3#45=M%YotIZeOXW(=~0sfBIgo)J@SO#L5ovhyO1 zOt~sQEEt#R1xjy9Q5*d<6xOlNM` z0RX#z9N8YBOlkK38|(mh#^Gyn>))ieHM%tL! zgbIwY*9cPhhvwa4m0($9{G_rVU>f#z5^>X@l4NALG=^z2c9#s3@!8?jAC0mjG_tma z`oRO!2j}QGk@AO{>k9I=)cBgI_ol7DM{4<>RBa2q(Qx7|MnFKL-l8j8o{h?C! zsH`}F+87ySN0xcw6H!1ds7ywv&FQcjRl<%{YY2phHftP8NY}YKdQ(9c5}yvo`E|nN zM8QY99ivV_W7sE4=lPDsFuNRfUwlsDcn)q|*LeU~pPc-8{FSb+KoE%3#Ky85H=MUY zD#&_jOMCbT^Dj)~BB*cZxgj@#(bY}CWx1IPX;PhFs5ifvX{uOVYV0n>fMgHuqS5Pd zPY3ADH9@x#kf$|29dmh)*Ecx`T!qW@wJs(_dqq7HhxhR*2H6Wnrm7S~KlgqOm%koe`WX25wCd!duK`1$i+k0i2>70vHTrQsWl?;{--Qt%)9Mq=nzwz=7Q$0^~M7om%cUehgsEWJoQ^ZH(a7si*q9 zMh}5TxU!!ETPqQHw%qZf-&5uu%hlQC$h=@s3Y`o;!qHVK$$z@VX~)b|$!ip}+# zq`1sEJBM&*$#eFp{wx0c3WTBL1*%^5yGH6eo^&z`;o>bGY>DJqq~a~fGGn3ya-gIr ztaP|VB}@uSk4Hf%auN-2oKdA)BT$F?kj&WRoZby6$jwY73?!x-@@=ZUYNlKc zIqj1CL$Njp4MaxLcyzSTE{@CyWRTYJ!!8pDQTi-%FkziXf16Mc87`4zMQmFK$O{Pb z1cUYY2Tcxk%&B0nzXkDhD%SK{jxAlH{qYCv(2N2KnY(yQUsG7%UIDJ;GFv>y5nx>> z#2j*)fR>oLp!z`&TR+=@kyWT&F<29EQFi|faM*(((wkv*?U4I54>xh!&~RlFsc;j$ zp{3BYgdv)h_;k*Y2O{D`zC}_PtoQEbR21or?zso$B(maG_mKI@^k?NO3O7H|pvjI8 z0V7K^u{nuojLBjtD6!lOmaStIYLrUI^&t#%WPV@rs`obQlF|^4B+J~R(PTxY8-;^m zVew9Tn(5=nEDFj?DN7m`#MwF7mIz4%t&6Ae!^5*9I9;CHJ4|Ml!fH+1`p5~W zR|;%BHWr!t+E1L7rQTeDLfX?m&_;r=0!`-7@B`D9x8&{3GXKbE8<7G1^y0{Zwq|1L zoLNTZ&^b0>FEY$|=r`l(&}{0{ewh(?KON6{3d|ZIrQO>(3dB_;~DM0B8*#iEch(GAlYp552U`nQA%grCRVVKJG~vRRwa$c>|{k5LSz zS;^b&qU4h@S&oCK&s1m?*e)=2-Tme#uP>PEQxY_ynw0?mlcpLQzuO8Ts`-WyC9WvMg z#<>@^__+U~k&SNP#l2+-WHRh>U*6J%)>wa3Vma`sR+A)KPY!`1W~OCZT2NFbGRlda z$4v|GMD1ePG%-GelBvzJ_L(;3qo|Vgh%`p8(DsCnmmIe%; z-fRPctdndeJY*|gF%0@~Y^n=zjkB=?E8GAV2LRTL2&jAWC~NjME=+?1uAw5JT)aj$ ze&@(nFo3;6aKGNsLZNfkC`bc)w??mB_AFvVD28j*rs6}y=t`6VipdgT#iPi`jNF*a z&a~`M5Gs8LhnLFe+t?q9&{TvZic+TL>N7{eO<5>n7H2&LI;2z*x7!mWCs?*D2Z_xN zKwuXxlBLnaiunl?c08%e1Kmze&f|#13F3zyd+fVExptI#OnBl?Bz8~l)nynarMYly z6x+NcnO-zd#@=@e*Gl^{;J|tSnSfxet zPqxU15ZR~|%D&8vsDTkt2o_zvf8|bX|2~rh?{uV)4}D1AYA1(Bp!=T1fl1+z#bU6F z6p@A23mi0=p2Bu{D3KW%`I%BaA3uKIX^&)~r2=z)5CGrxG>;Yu>fJ~ajj1Iq=qd5y z1RTrcrZU2ks2nd;f!YAbf6AT=_z^rFz~Uem(|sYDl|Iuww!9SN5R6#B*s}946t>aU zXJZ{%-VT^M^qvQ2j!`0n?d?Sx+jv0kXcs6z@JK_LFl8_ZlD0-;OU05Q^^y+H>HK0^ zE1dB?hC*V$ZV4DWy=^bFJxebV2U4c;*wPR&tT;r4fm*|mwt1uplz6C<5ehsm+lSD} zVhX!&RSX)J+%yOYLGkylj8W`M3(w{|9Yp-$0n#={igqm9Vs%i7ME<8h7tLykh%lwl zq|z@jT^{jGi6obV!_n#YJ$BSe^E)!ZYS&PZLQ>{F0^Xzls5j4Ob}zvQM6=jn z%W)bgP(#e_j#zr~^nQ!qD+A>AFVj~KUpw9!E?y1P?JFZS3N>pKA9Q2AbbjI@{hXe@ zSPnK?)sMU8v5=YRwF<%Hd0-Z#R!sze(Rhf{)oxUR-;GdcD)EUPb$Y+2ku~?oA;I5D zhE0Id2aqUI9A>}sS;VmX1PF>3<3hwRcyR(75~0~93fG2a4Gy_u6&i&xdT|?#k5B2P zZ1_b%3Ia-r+c_)66kh*cZ649-AkhzQ$NI+kF(_QF!U3XKq*8kqR>8HVh4V2q(q*vA z!?_Wjt;Ar_r=EKrd$`3C!4*J)G2?nT+{CVehSUInI2Dgq4}$JIAow`$cIcspYB$H% z-~w^iz6Pv=yo-SmaZHxw+GraP7cT zP3=fGjnHX!&%fG0fa7|m|9z^WpqVX)UAKPhz%`2u;+i(mED&nl{mRR2Hdb+i3E*Y+ zO`Rw~y!)O>3`570#bi7!L=2?!(S0|h7Ms-OX(X=fObEpyFQtu&A|T>ZRP&?c0I8RNE)RZEtA&7@ zAb8h{Mm<+=w?DGqBWa6A$7p1ib4^eMP;= z(pfU-I)W!L4ey?6Htinil}GG36bPo~(fK)|>7#=;TCh;W+=4+`f-LMPLsE2W>GI|hs`=EtXm!jgzM0AR~< zQqw9_$9Rb5aoG250rt|wBakTG;dC4yJLd!0fhZpC*oBF;^e>c3aTuXst?_@_+?O&U71Gc27!X6HMomrYF6?Wj;!;&5gT`xX zdkJY(0>AMp0Kj3dOa$7npiZ99%zUu?Dq(SDRM~4aCd_Cn&5~IMv2c}y7d=%}d^-lW zBwQoC%N(gi7F!)!K(btV{KD4!%*W7!VL!}^4KuD@Hy<;;TpUiO&gzlo;`V11DrzF2 zKT7$C9YhI{upr9Hfogzl#-Zq_K9s<6Y7+@HijODx9P8Hm>C%lU92}DB+}zdJvVf zzCZg2-Ns=okxm4RgEc1UQ7Y-%PDQuT-;6#$`Xs~yScZ0_hq$swtPg8uj0Nj)E? za8O)HgkAlPrBovRAUVaskfY~5f;CP6jc0KJmc^8Rsyy$cT}q(vRm?j{N6$NMu-OTM z$7s z&R#IaNezGK1^~Vc-5Ob?rUUYn!tP-G5zCSisO*O8!F4Z@oTn{Q&$JwyjzP*M12a;N zu^1BF)4}>#jUKCG@xW@-qzjRz=Ca^^_azKN!){;*-?7gggRc4W8;N+~uctTo z-#HLOoDLLLi{0Dmj zwC!{$=mb>EkD>*wz&7-#PwG?()M{qZ=~g?Ph!zag$S^^Gx735VoRUJ1OG*k;Ij%S0 zIUF)xsC$|}{Zd^wS|TKL|+k z>3o|og@n LY8(wEu8jW%lPb@I literal 0 HcmV?d00001 diff --git a/common/static/images/spinner.gif b/common/static/images/spinner.gif index b2f94cd12c351160f0a5ec8aa0a9b7f7f2e16d81..e23eb78abeb906886c32b1ee64af229c1bbbf0c3 100644 GIT binary patch delta 5942 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

)Ia&hhv}VhcW$?fr9W z1_Ru<+1234;#02^9GCafM~MubnuW6CV8i0-cv=gt6x#qN>RPu3_37%aDzvL4?< ze71r$8|OlcW~84eLA?8nA)L%LqQPC^D`bo%TB%h41dlxS;d~ll800Gui6H{;sbYWA z{8I!!6s&_b9?mi=rq&1mkW1f0ibWn-oNk81R^rGuP*>dOvUKYTR$-olio-?36xi~! zy<$9Kd9kIkc8n=AD2Mlt;DO7^iNRp5P&SmFuS`!GeXA^<`7%!ul*t&cxkSY|=gUjo zFptgQN}vIL7CthH5P?*B6COZ0MQLejI}<@f$k!;)Ypm5{VH{S!R=I{OIBn$aobc-^Zc+I{ z_~M%d_E&P&z-@xe{cfsrixF>e67Wr&vUPuI4uf0eG5W?leBa#Mx1Y1@pyC45w`eyt zz5Zmwk|dQF{P_4^(th$gyIK||;%X~9f7GnFdH?-R>!wR(w)6rnYXuJG;4-*Xi8!Ct zi3%iK9loA9k}TYIjD;%*Wxe@!oUu?V#KH-gFA84(z-|@6*G;6smEX=9J7mc(JY050 z?Z;D9Ixq%>@)3SC`jbZS@b^wzVxTjiN6#>ZO*+Od?iQLL)*ES@oJ7`~Y8lO!mppjF zYN}+0N!Qc|4i8Z;+J5&5Iu|l;YA16yk5?YPUeBWDlZnuy(*`p+vKSqYw1P%PaGB-; zJVB&RlqBM@CA~3yR(lD%9ivAe(xKk}5%oGa7!hX)a3pMQ!7GzV7J9v23`p*y;vh{sj^+K(^vD)GQ!U;E$jIlxfDd4jF+=rck~>T}g$7+7d5~A__G*0vh5PQCEvx>tR*Glbo>~w z$Xlmwo?^JTrOl1c&TeZGkJ#1q&(b)8!k+shN^1*5lr2ARpE}jlu~wG7MKs9Z5@WLZ zhwYb?K|f2LI@wnZuHF&L_SWVsY|bZhY_jK$Pa!(^&nFnWMt$VV zItCD65`)1fVr`g0#k<6G?e2%#FVQ4Rpiw zmyiiIhl09XZ@vY*K@ssd5-!_~pGjtctL+f`l2FG-ues)T({IWQh=NwJyWM>^CPo-Z z`@8xpj9c)tGF%Q_n~R||wqXSuHdfmAN?ui1y~@Sf#p%-xbm7Ca**TcnO)(^%p>Wjw zD%er4KG#`i0{Du8xynn}41cYtN2B=KZ09^BTz9CidXY>O6mD9wFA(n1Nmw@{jbkZb zaic1iE9W1YRN5pb{KKVN_qsJ@n+%TXslfoHNVu*iYV&v0jxZ{vw0RjNJ{gnkO`l{w zTFV9EMlcz|wcH>?Y=ZeD2B{Sf3(&RQzY;7e-0pU{2B01~1LtDWv6%kRmz(IrMDUXc2Vz}mk=Q&;uHC293F?-F;kx00_#PIKm z7E!5Cs1xeLpx)WXqo$iMA$rQsfrx_5?oz*Dvw6A=Q5DRE+gBu6R2cIbXcZ%SntETu z^@tu&75VyzyN$>=!Hh_7$H*gR^t(I&^*kaX$A^c{8LoOLA4;Wyl*Ghvm21I`Q?f<+ zu~4VYvdzK^N=`lsAgTfYZx)omBVZMYCZ-mCNTVrq=Oe*ihx zWro*yZ~HkMr4X3i{I#uv%bWM?yu9XYyCS`Pt4_Gk)QStmzu5(z+ZHC?bzhUbZYmI& z>oXoGUp&{w*ZL{V#|dVY*4~}iyqJa~CP};3^%*bDv~iz))=F z`=67O`2X*X-hUh%F^?O^YIfDPdUUA`O?cD@1fb0oOQUu9aZUizxsx|s|knxd6 zz+~Yg2RtqpNE|v$Vn7}+1wU|vwSq7`$YOX5VPR)fq@C{xsKg9~{)(&(CCn!z&{wHc z3eC1fHbNexBvhE delta 5827 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 diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 2e3aed996f..21f22c3593 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -1006,8 +1006,14 @@ body.discussion { .post-list { background-color: #ddd; + .loading { padding: 15px 0; + background: #f6f6f6; + + .loading-animation { + background-image: url(../images/spinner-on-grey.gif); + } } a { From 9ef83b0ca564a4c4f62a2a09632c63ea0571c055 Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Wed, 12 Sep 2012 10:19:25 -0400 Subject: [PATCH 08/14] edit post style clean up --- lms/static/sass/_discussion.scss | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 21f22c3593..301572b14f 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -274,20 +274,23 @@ body.discussion { width: 100%; margin-bottom: 20px; @include clearfix; + @include box-sizing(border-box); + + .form-row { + margin-top: 20px; + } + .post-cancel { @include white-button; - border-color: #444; float: left; margin: 10px 0 0 15px; } .post-update { - @include blue-button; float: left; height: 37px; margin-top: 10px; - border-color: #333; padding-bottom: 2px; &:hover { @@ -301,13 +304,28 @@ body.discussion { padding: 0 10px; box-sizing: border-box; border-radius: 3px; - border: 1px solid #333; + border: 1px solid #aaa; font-size: 16px; - font-family: 'Open Sans', sans-serif; + font-family: $sans-serif; color: #333; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15) inset; } + .tagsinput { + padding: 10px; + @include box-sizing(border-box); + border: 1px solid #aaa; + border-radius: 3px; + background: #fff; + font-family: 'Monaco', monospace; + font-size: 13px; + line-height: 1.6; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) inset; + + span.tag { + margin-bottom: 0; + } + } } .new-post-form { @@ -2172,4 +2190,4 @@ body.discussion { .wmd-spacer3 { left: 300px; } -} +} \ No newline at end of file From d1292949bef68252e88acac1d4b1be32c3e6370a Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Wed, 12 Sep 2012 11:03:18 -0400 Subject: [PATCH 09/14] fixed spinner positioning on inline discussions --- lms/static/sass/_discussion.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 301572b14f..16474e7b33 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -1644,6 +1644,7 @@ body.discussion { .discussion-module { @extend .discussion-body; + position: relative; margin: 20px 0; padding: 20px; background: #f6f6f6 !important; @@ -1658,6 +1659,10 @@ body.discussion { } } + .loading-animation { + background-image: url(../images/spinner-on-grey.gif); + } + .discussion-show { position: relative; top: 3px; From 1a402f7fda3c18ac2ac1e2b1fdc174edb1e89893 Mon Sep 17 00:00:00 2001 From: Matthew Mongeau Date: Wed, 12 Sep 2012 10:52:51 -0400 Subject: [PATCH 10/14] Mark responses and comments as staff --- lms/djangoapps/django_comment_client/forum/views.py | 2 ++ lms/djangoapps/django_comment_client/utils.py | 8 ++++++++ lms/static/coffee/src/discussion/utils.coffee | 5 +++++ .../src/discussion/views/response_comment_view.coffee | 5 +++++ .../src/discussion/views/thread_response_view.coffee | 6 ++++++ lms/templates/discussion/index.html | 4 ++-- lms/templates/discussion/single_thread.html | 2 +- 7 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 8804623f4b..32e2117508 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -236,6 +236,7 @@ def forum_form_discussion(request, course_id): 'annotated_content_info': saxutils.escape(json.dumps(annotated_content_info),escapedict), 'course_id': course.id, 'category_map': category_map, + 'roles': saxutils.escape(json.dumps(utils.get_role_ids(course_id)), escapedict), } # print "start rendering.." return render_to_response('discussion/index.html', context) @@ -315,6 +316,7 @@ def single_thread(request, course_id, discussion_id, thread_id): 'thread_id': thread_id, 'threads': saxutils.escape(json.dumps(threads), escapedict), 'category_map': category_map, + 'roles': saxutils.escape(json.dumps(utils.get_role_ids(course_id)), escapedict), } return render_to_response('discussion/single_thread.html', context) diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index a4ab9342d2..4ceea6b82c 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -39,6 +39,14 @@ def strip_blank(dic): def merge_dict(dic1, dic2): return dict(dic1.items() + dic2.items()) +def get_role_ids(course_id): + roles = Role.objects.filter(course_id=course_id) + staff = list(User.objects.filter(is_staff=True).values_list('id', flat=True)) + roles_with_ids = {'Staff': staff} + for role in roles: + roles_with_ids[role.name] = list(role.users.values_list('id', flat=True)) + return roles_with_ids + def get_full_modules(): global _FULLMODULES if not _FULLMODULES: diff --git a/lms/static/coffee/src/discussion/utils.coffee b/lms/static/coffee/src/discussion/utils.coffee index c65a3c15fd..52a0b510ac 100644 --- a/lms/static/coffee/src/discussion/utils.coffee +++ b/lms/static/coffee/src/discussion/utils.coffee @@ -15,6 +15,11 @@ class @DiscussionUtil @getTemplate: (id) -> $("script##{id}").html() + @isStaff: (user_id) -> + ids = $("#discussion-container").data("roles") + staff = _.union(ids['Staff'], ids['Moderator'], ids['Administrator']) + _.include(staff, parseInt(user_id)) + @bulkUpdateContentInfo: (infos) -> for id, info of infos Content.getContent(id).updateInfo(info) diff --git a/lms/static/coffee/src/discussion/views/response_comment_view.coffee b/lms/static/coffee/src/discussion/views/response_comment_view.coffee index 34cbaac7ad..fbd3b917a1 100644 --- a/lms/static/coffee/src/discussion/views/response_comment_view.coffee +++ b/lms/static/coffee/src/discussion/views/response_comment_view.coffee @@ -18,6 +18,7 @@ if Backbone? @initLocal() @delegateEvents() @renderAttrs() + @markAsStaff() @$el.find(".timeago").timeago() @convertMath() @ @@ -29,3 +30,7 @@ if Backbone? body.children("p").each (index, elem) -> $(elem).replaceWith($(elem).html()) MathJax.Hub.Queue ["Typeset", MathJax.Hub, body[0]] + + markAsStaff: -> + if DiscussionUtil.isStaff(@model.get("user_id")) + @$el.find("a").after('staff') diff --git a/lms/static/coffee/src/discussion/views/thread_response_view.coffee b/lms/static/coffee/src/discussion/views/thread_response_view.coffee index f4719800cc..c6f0643de6 100644 --- a/lms/static/coffee/src/discussion/views/thread_response_view.coffee +++ b/lms/static/coffee/src/discussion/views/thread_response_view.coffee @@ -18,6 +18,7 @@ if Backbone? @renderAttrs() @$el.find(".posted-details").timeago() @convertMath() + @markAsStaff() @renderComments() @ @@ -26,6 +27,11 @@ if Backbone? element.html DiscussionUtil.postMathJaxProcessor DiscussionUtil.markdownWithHighlight element.html() MathJax.Hub.Queue ["Typeset", MathJax.Hub, element[0]] + markAsStaff: -> + if DiscussionUtil.isStaff(@model.get("user_id")) + @$el.addClass("staff") + @$el.prepend('

staff
') + renderComments: -> comments = new Comments() comments.comparator = (comment) -> diff --git a/lms/templates/discussion/index.html b/lms/templates/discussion/index.html index 53cbe2d9ed..a0cdcdcb44 100644 --- a/lms/templates/discussion/index.html +++ b/lms/templates/discussion/index.html @@ -23,7 +23,7 @@ -
+
@@ -36,4 +36,4 @@
<%include file="_underscore_templates.html" /> -<%include file="_thread_list_template.html" /> \ No newline at end of file +<%include file="_thread_list_template.html" /> diff --git a/lms/templates/discussion/single_thread.html b/lms/templates/discussion/single_thread.html index 2ddeae4613..0cc1f28b24 100644 --- a/lms/templates/discussion/single_thread.html +++ b/lms/templates/discussion/single_thread.html @@ -24,7 +24,7 @@ <%include file="_new_post.html" /> -
+
From 18b5a1f5a21760ba4e41cd996f46189e091d7805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s=20Rocha?= Date: Wed, 12 Sep 2012 13:20:04 -0400 Subject: [PATCH 11/14] Temporary fix to get the discussion profile page rendering --- lms/djangoapps/django_comment_client/forum/views.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 32e2117508..3dc1d08b67 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -83,7 +83,7 @@ def render_discussion(request, course_id, threads, *args, **kwargs): thread['courseware_title'] = courseware_context['courseware_title'] context = { - #'threads': map(utils.safe_content, threads), # TODO Delete, this is redundant with discussion_data + 'threads': map(utils.safe_content, threads), # TODO Delete, this is redundant with discussion_data 'discussion_id': discussion_id, 'user_id': user_id, 'course_id': course_id, @@ -328,6 +328,13 @@ def user_profile(request, course_id, user_id): try: profiled_user = cc.User(id=user_id, course_id=course_id) + query_params = { + 'page': request.GET.get('page', 1), + 'per_page': THREADS_PER_PAGE, # more than threads_per_page to show more activities + } + + threads, page, num_pages = profiled_user.active_threads(query_params) + query_params['page'] = page query_params['num_pages'] = num_pages From 1d71a2cfbd047cb4f662f60d665b377242051b8c Mon Sep 17 00:00:00 2001 From: Tom Giannattasio Date: Wed, 12 Sep 2012 13:39:57 -0400 Subject: [PATCH 12/14] tweaked usernames so they were more prominent throughout --- lms/static/sass/_discussion.scss | 25 ++++++++++++++++--- .../discussion/_underscore_templates.html | 5 ++-- .../mustache/_inline_thread.mustache | 6 +++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 16474e7b33..fddf937a5e 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -1255,6 +1255,12 @@ body.discussion { font-style: italic; color: #888; + .username { + display: block; + font-size: 16px; + font-weight: 700; + } + span { font-style: italic; } @@ -1745,6 +1751,16 @@ body.discussion { padding-bottom: 0; margin-bottom: 15px; + .posted-details { + margin-top: 4px; + + .username { + display: inline; + font-size: 14px; + font-weight: 700; + } + } + h3 { font-size: 19px; font-weight: 700; @@ -1788,13 +1804,16 @@ body.discussion { margin-top: 10px; header { - padding-bottom: 0em; - margin-bottom: 5px; + padding-bottom: 0; + margin-bottom: 15px; .posted-by { - font-size: 0.8em; + float: left; + margin-right: 5px; + font-size: 16px; } } + .response-body { margin-bottom: 0.2em; font-size: 14px; diff --git a/lms/templates/discussion/_underscore_templates.html b/lms/templates/discussion/_underscore_templates.html index 2c3585bb58..6c951b2253 100644 --- a/lms/templates/discussion/_underscore_templates.html +++ b/lms/templates/discussion/_underscore_templates.html @@ -25,10 +25,11 @@ + ${'<%- votes["up_count"] %>'}

${'<%- title %>'}

- ${'<%- created_at %>'} by ${"<% if (!obj.anonymous) { %>"} - ${'<%- username %>'} + ${'<%- username %>'} ${"<% } else {print('anonymous');} %>"} + ${'<%- created_at %>'} + diff --git a/lms/templates/discussion/mustache/_inline_thread.mustache b/lms/templates/discussion/mustache/_inline_thread.mustache index 3875c9e7bc..a874b728ce 100644 --- a/lms/templates/discussion/mustache/_inline_thread.mustache +++ b/lms/templates/discussion/mustache/_inline_thread.mustache @@ -5,13 +5,15 @@ + {{votes.up_count}}

{{title}}

- {{created_at}} by {{#user}} - {{username}} + {{username}} {{/user}} {{^user}} anonymous {{/user}} + + {{created_at}} + From d425f525b8e5d07bde42697361f127290f32e848 Mon Sep 17 00:00:00 2001 From: Matthew Mongeau Date: Wed, 12 Sep 2012 16:43:38 -0400 Subject: [PATCH 13/14] Display tags. --- .../coffee/src/discussion/discussion_router.coffee | 3 +++ .../views/discussion_thread_list_view.coffee | 5 +++++ .../discussion/views/discussion_thread_view.coffee | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/lms/static/coffee/src/discussion/discussion_router.coffee b/lms/static/coffee/src/discussion/discussion_router.coffee index 274e7f2675..14ee1b52f3 100644 --- a/lms/static/coffee/src/discussion/discussion_router.coffee +++ b/lms/static/coffee/src/discussion/discussion_router.coffee @@ -33,6 +33,9 @@ if Backbone? @main.render() @main.on "thread:responses:rendered", => @nav.updateSidebar() + @main.on "tag:selected", (tag) => + search = "[#{tag}]" + @nav.setAndSearchFor(search) navigateToThread: (thread_id) => thread = @discussion.get(thread_id) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index 4cf1ef7198..4613595161 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -236,6 +236,11 @@ if Backbone? text = @$(".post-search-field").val() @searchFor(text) + setAndSearchFor: (text) -> + @showSearch() + @$(".post-search-field").val(text) + @searchFor(text) + searchFor: (text, callback, value) -> @current_search = text url = DiscussionUtil.urlFor("search") diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee index f97bb2dddd..d53a447880 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee @@ -3,6 +3,7 @@ if Backbone? events: "click .discussion-submit-post": "submitComment" + "click .thread-tag": "tagSelected" $: (selector) -> @$el.find(selector) @@ -19,6 +20,7 @@ if Backbone? @renderShowView() @renderAttrs() + @renderTags() @$("span.timeago").timeago() @makeWmdEditor "reply-body" @renderResponses() @@ -28,6 +30,16 @@ if Backbone? if @responsesRequest? @responsesRequest.abort() + renderTags: -> + tags = $('

') + for tag in @model.get("tags") + tags.append("#{tag}") + @$(".post-body").after(tags) + + tagSelected: (e) -> + @trigger "tag:selected", $(e.target).html() + + renderResponses: -> setTimeout(=> @$el.find(".loading").show() From ba56afae7c91c1047c93b10be6d23aa1a8454c3a Mon Sep 17 00:00:00 2001 From: Matthew Mongeau Date: Wed, 12 Sep 2012 16:57:19 -0400 Subject: [PATCH 14/14] Clear search when clicking topic dropdown. --- .../src/discussion/views/discussion_thread_list_view.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index 4613595161..e0502d892a 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -144,6 +144,8 @@ if Backbone? toggleTopicDrop: (event) => event.preventDefault() event.stopPropagation() + if @current_search != "" + @clearSearch() @$(".search").removeClass('is-open') @$(".browse").addClass('is-open') @$(".browse").toggleClass('is-dropped')