# HG changeset patch
# User neko259 <neko259@gmail.com>
# Date 2018-06-15 14:23:48
# Node ID ed3f943b8d7911dddf142197935f00b68de4ef5f
# Parent  d2d9582cf87d15a6c84ea2fb1548f5288a7adf30

Added ability to rollover thread

diff --git a/boards/locale/ru/LC_MESSAGES/djangojs.mo b/boards/locale/ru/LC_MESSAGES/djangojs.mo
index f4ad6611e0f3aba6d912e1b72d80d2785ed84d17..098f013ad30539edb10172134fd562bc28f64cd2
GIT binary patch
literal 1871
zc${sM&rcj>7{}itpk1v$+Nv?p_+nDhrkQ1yV#I+h-Lgx&aTnHQ!RT$e^L81Xo!QLH
zR-15WAw~@tBGG6}tTvv!7(fsfT6*#5;hlpQ5B@m$2k610-)CkvATY_hpLw76`+lDv
zll|>v=VuJh(^$`A{e<-bmUWDU&mZ7Z;Gf_L@Ne)T@K^_9kAq#{li+FaQSeMhq)T-~
z_eQ`@@b&n78axhO1D~Kg;7M>6On^(V@0aoUcky{E_Wc=r4E#0D`xm%@n*Ie<?7v5{
z)8Ox&(fL2%OH^kUW2eBg;IrUx%nJA-)zKB{7s2Piuezc+Y=V8@FJO{<x+9+fuot}A
z9qF8S|8aLT$8|6Z2H+t0%)^*jG}3T>)Kf>iKf(4M>Ye6*bYcI;_np!FsP|Lxp6Z2t
zIOj)L)Hi)cqzY#qJ{iN{mQ&R&?)hf*9pSQ!EBH;P$-Sm4M%ZQDrp0yJ;D)e-FW9J4
zZ!~?=uJMxdMlzXX*)Yx<j_0@E{TWy22Fo@ZmRZ$(;c-vsZgqy`4AT#P+LEiLA^N--
z=UtYs>oo|;Mi?4rc^hfkWpP`t3s!J+1BoeV2{LXwKELiXZG)8^%W`f&7u!w>o0PmR
zJP)>XV^X*z5U%UEJ<OzR(XYp1Rhu3wxz5|7>MMCenHH{RI=043nbFrWS8{whSDwsI
zj3>&X;kdq1^lGM|TyEAprQ&EjQJSbIqo~2hB_)gAHQukLURKms6?K582DO1#&Z`$x
z6+)#fZkXPl?#*1LtQ04dY=&Q*(2Du<Z%vHn5(VA!m5Qs|o~8SatMRd^LV=HGia9=<
zD`xVAOPOr8oSU4y2&r9bq5-8M^t#3inei)ARPu14aLF>0j$7N)pwwc%nA__wl~fa>
zj_nH@>25Y4@Wp$6U&GQ(dx%$Obk`Gpda5#}4DRWutn0#6a(30Bfopv5n&~G>R@2oj
zWz2Ewp2qD)xb@N(hIsUvK5L&zsp)iz_x5snReRE@6d&O#*TVh9bbtG3I6XkG;SF^-
zrSjR?=n6FIIowI%PXD=~1e2f2UAZb(<eJ<H=7L2ocM#Y{U?*6V_k#u5;=%1;PHrK%
z5!_;OIauJqJoMPf4U&v7`8h6-%l*jZP=L!Vy0lKdZOJ!s1<oG?p9FL5zlHpEzl6&N
za+i`HjH8?lc`uk}@@o{k72KBFT&}}^l_XR>6uWYb$uH!lyhl~GlO71{v$`v{gImD@
zMf)gmID}2IqI=8X5NJ$0;cc`XypOJ+!2B?Y75QUiD_i&@%4Hf5ir%6G9C7kmiw1(g
z{*lU+Xk0%a{XA628_wb`oXPv6*f+F^y;`uQ=q`;Q`Vdjq?XJSmI+J%0dk~hlMhYbU
sziY4*=DHJnhzzT32{}d|c%_FO+2qEN;b7@#b&DO$3xmU@99Fg1f7)orAOHXW

diff --git a/boards/locale/ru/LC_MESSAGES/djangojs.po b/boards/locale/ru/LC_MESSAGES/djangojs.po
--- a/boards/locale/ru/LC_MESSAGES/djangojs.po
+++ b/boards/locale/ru/LC_MESSAGES/djangojs.po
@@ -91,3 +91,7 @@ msgstr "Изменить тему"
 
 msgid "Hide/show"
 msgstr "Скрыть/показать"
+
+msgid "Rollover thread"
+msgstr "Перекатить тред"
+
diff --git a/boards/locale/uk/LC_MESSAGES/djangojs.mo b/boards/locale/uk/LC_MESSAGES/djangojs.mo
index 6af7339f8c6d886e8d1bc760c82eebd3604b3cc9..11a21da7ea372064ae07299bac68e562a68b1edc
GIT binary patch
literal 1991
zc$}4!PiP!f9LHZ{Qrp#5t$#pNd_h_o>uhF|h;fr`I?ZmI#oc7x{3&{y?!0bBXJ?j~
z*=iw5lOpsG2$UK@57m<tMA9YOBu$fEJc)-lR|QcJJc}2Pet$EwiIE0$VCM7Q?|pxN
z-|o-HIzMH2p2hnj-tX|fgx5O2!si$8DezbD2>2)X2za1_v7=xY_$2rY_!xM+BhsZh
zBEJ!^6MQ>9p8*ep7r`ee4|oim0~6p<9QX71{C0f45y$-jd>s5S&igyqLQQ{xuVMdf
zXVlA2;B(*~;H%)FF2-H~`@tUY0{A>Q555e3(G}(0jP2jYy5C|RJ;>Nea1eX})WIb9
z(ZR_78*qT?14n2+k1{q4YTy|7F&K|DoFDbn5$}(%-G^$RIUsG=|KWd}(fp|Qr{g{K
zk96Uj578aO_lQ*C%)>`B3~o6U-Qu2aR^Asb(_F!?I1TPKTrtAV>NdSxw+(IxOZb9~
zI<<PkH|;7fITw=2B+G_&UUxjdz4m8ap&KmQs9R=5_l3tjp}Un?mNQI0{In%wrXhO0
zS?2?mujy3?DU2}EoaJq#X_v)qy(U<}(G4V~q$S9>?fCqX)36Ozb}Y-e3|$;{QrM*A
zHQ{*(OCFQLC4q2V$L(e&WsANZi&brUtmHcHiHfh}4P{2Sp6S?WUeZS2($44jOs+hc
zpBPV+Mcr|IrRY^nLpj^1ddifO=84k8lroAMd^jmt^q%H@YU*`GeN#~fcxo^`@Wv^%
zUsWMg%Hp!=?dsmiX=SB2p=32aHjysoPrW-ao=X&T&sU~g-S#Zqcic2TH(e<3ajlr+
z!?~iCFPzb`*>Y}j@-(D&wSfkdDWTWWyr7MrpQe(B3xzY5nRMLht_GzR^Tph5f2pLJ
z7<Fu4*hqJ!4uLN|^n2@;ZrVe<GON3u@H5j>=aj)+9hG%SxJu5hI5hAyAG~P#iIUZD
zbxS$txHT`$?RvQNGW|n5T4qk#$5U!1lj0{%a9XO}nN*68aFwUS{pn0!`)D{bK+DiW
z9ZsoyZZ2|xM(u%53O;>3LkT8t%5AwSSAqq(&gCXH_vDJ)3>M{<T$dX>m=6|$Wf)t*
zRVKeCQIkFoWDAR}V0nbe&){(<@(r%R8V1|P%n_3!P)?k!N764LS_`g1@(EVW;977K
zX%~@vsr`?UH}*PF2_#*Haa-PpxrLIqf~8Q2SUU-~LI>2q<Sn@!Tt_kYxLgHLUD(@7
z*khAQzK_LLyR1Fiy@8NmJt{Uz)4Nm39qL1_wPW0%3Bu5fD})!vX<K)fjKL!QyC}Pf
z&1$erty4CNf?4dj1Gy3n7HQ$P(2hWjhf})s@S#w+7UiX=8#pC<i{uouh1lCv?!yMQ
zU$_;NI*&Wq!~k|~E3DzGFldv$VP2%AY2PJbH>dK$$*sa=fvS3d1Z(tL3a-mmH~aT=
TqD%cR#$b`{|Eu^v2MF{xPYNJC

diff --git a/boards/locale/uk/LC_MESSAGES/djangojs.po b/boards/locale/uk/LC_MESSAGES/djangojs.po
--- a/boards/locale/uk/LC_MESSAGES/djangojs.po
+++ b/boards/locale/uk/LC_MESSAGES/djangojs.po
@@ -91,3 +91,7 @@ msgstr "Змінити нитку"
 
 msgid "Hide/show"
 msgstr "Приховати/відобразити"
+
+msgid "Rollover thread"
+msgstr "Перекотити нитку"
+
diff --git a/boards/static/js/main.js b/boards/static/js/main.js
--- a/boards/static/js/main.js
+++ b/boards/static/js/main.js
@@ -328,6 +328,15 @@ function addContextMenu() {
                             }
                         },
                         visible: hasIp && canDeletePost
+                    },
+                    rollover: {
+                        name: gettext('Rollover thread'),
+                        callback: function(key, opt) {
+                            if (confirm(gettext('Are you sure?'))) {
+                                window.location = '/all/?t_from_id=' + postId + '#form';
+                            }
+                        },
+                        visible: isOpening
                     }
                 }
             };
diff --git a/boards/views/all_threads.py b/boards/views/all_threads.py
--- a/boards/views/all_threads.py
+++ b/boards/views/all_threads.py
@@ -57,9 +57,24 @@ class AllThreadsView(BaseBoardView, Pagi
             SETTING_SUBSCRIBE_BY_DEFAULT, False)
 
         if not form:
-            form = ThreadForm(error_class=PlainErrorList,
-                              initial={FORM_TAGS: self.tag_name,
-                                       'subscribe': subscribe_by_default})
+            t_from_id = request.GET.get('t_from_id')
+            if t_from_id:
+                source_op = Post.objects.get(id=int(t_from_id))
+                tags_str = ' '.join([tag.get_name() for tag in source_op.get_thread().get_tags()])
+                post_link = '[post]{}[/post]'.format(source_op.id)  #FIXME To constants
+                new_title = source_op.get_title() + ' NEW'  # TODO More intelligent name change
+
+                form = ThreadForm(error_class=PlainErrorList,
+                                  initial={
+                                      FORM_TAGS: tags_str,
+                                      'subscribe': subscribe_by_default,
+                                      FORM_TEXT: post_link,
+                                      FORM_TITLE: new_title,
+                                      })
+            else:
+                form = ThreadForm(error_class=PlainErrorList,
+                                  initial={FORM_TAGS: self.tag_name,
+                                           'subscribe': subscribe_by_default})
 
         self.settings_manager = get_settings_manager(request)