Rafał Pitoń 12 лет назад
Родитель
Сommit
691ecb5f50

+ 4 - 0
misago/apps/threadtype/posting/forms.py

@@ -16,6 +16,10 @@ class PostingForm(FloodProtectionMixin, Form, ValidatePostLengthMixin):
     def __init__(self, data=None, file=None, request=None, forum=None, thread=None, *args, **kwargs):
         self.forum = forum
         self.thread = thread
+        if data and thread:
+            data = data.copy()
+            if not 'thread_weight' in data:
+                data['thread_weight'] = thread.weight
         super(PostingForm, self).__init__(data, file, request=request, *args, **kwargs)
 
     def finalize_form(self):

+ 69 - 58
misago/markdown/extensions/quotes.py

@@ -1,58 +1,69 @@
-import re
-import markdown
-from markdown.util import etree
-
-# Global vars
-QUOTE_AUTHOR_RE = re.compile(r'^(?P<arrows>(>|\s)+)?@(?P<username>(\w|\d)+)$')
-
-class QuoteTitlesExtension(markdown.Extension):
-    def extendMarkdown(self, md):
-        md.registerExtension(self)
-        md.preprocessors.add('mi_quote_title',
-                             QuoteTitlesPreprocessor(md),
-                             '>fenced_code_block')
-        md.postprocessors.add('mi_quote_title',
-                              QuoteTitlesPostprocessor(md),
-                              '_end')
-
-
-class QuoteTitlesPreprocessor(markdown.preprocessors.Preprocessor):
-    def __init__(self, md):
-        markdown.preprocessors.Preprocessor.__init__(self, md)
-
-    def run(self, lines):
-        clean = []
-        for l, line in enumerate(lines):
-            try:
-                if line.strip():
-                    at_match = QUOTE_AUTHOR_RE.match(line.strip())
-                    if at_match and lines[l + 1].strip()[0] == '>':
-                        username = '<%(token)s:quotetitle>@%(name)s</%(token)s:quotetitle>' % {'token': self.markdown.mi_token, 'name': at_match.group('username')}
-                        if at_match.group('arrows'):
-                            clean.append('> %s%s' % (at_match.group('arrows'), username))
-                        else:
-                            clean.append('> %s' % username)
-                    else:
-                        clean.append(line)
-                else:
-                    clean.append(line)
-            except IndexError:
-                clean.append(line)
-        return clean
-
-
-class QuoteTitlesPostprocessor(markdown.postprocessors.Postprocessor):
-    def run(self, text):
-        text = text.replace('&lt;%s:quotetitle&gt;' % self.markdown.mi_token, '<h3><quotetitle>')
-        text = text.replace('&lt;/%s:quotetitle&gt;' % self.markdown.mi_token, '</quotetitle></h3>')
-        lines = text.splitlines()
-        clean = []
-        for l, line in enumerate(lines):
-            clean.append(line)
-            try:
-                if line == '<blockquote>':
-                    if lines[l + 1][0:7] != '<p><h3>':
-                        clean.append('<h3><quotesingletitle></h3>')
-            except IndexError:
-                pass
-        return '\r\n'.join(clean)
+import re
+import markdown
+from markdown.util import etree
+
+# Global vars
+QUOTE_AUTHOR_RE = re.compile(r'^(?P<arrows>(>|\s)+)?@(?P<username>(\w|\d)+)$')
+
+class QuoteTitlesExtension(markdown.Extension):
+    def extendMarkdown(self, md):
+        md.registerExtension(self)
+        md.preprocessors.add('mi_quote_title',
+                             QuoteTitlesPreprocessor(md),
+                             '>fenced_code_block')
+        md.postprocessors.add('mi_quote_title',
+                              QuoteTitlesPostprocessor(md),
+                              '_end')
+
+
+class QuoteTitlesPreprocessor(markdown.preprocessors.Preprocessor):
+    def __init__(self, md):
+        markdown.preprocessors.Preprocessor.__init__(self, md)
+
+    def run(self, lines):
+        clean = []
+        for l, line in enumerate(lines):
+            try:
+                if line.strip():
+                    at_match = QUOTE_AUTHOR_RE.match(line.strip())
+                    if at_match and lines[l + 1].strip()[0] == '>':
+                        username = '<%(token)s:quotetitle>@%(name)s</%(token)s:quotetitle>' % {'token': self.markdown.mi_token, 'name': at_match.group('username')}
+                        if at_match.group('arrows'):
+                            clean.append('> %s%s' % (at_match.group('arrows'), username))
+                        else:
+                            clean.append('> %s' % username)
+                    else:
+                        clean.append(line)
+                else:
+                    clean.append(line)
+            except IndexError:
+                clean.append(line)
+        return clean
+
+
+class QuoteTitlesPostprocessor(markdown.postprocessors.Postprocessor):
+    def run(self, text):
+        text = text.replace('&lt;%s:quotetitle&gt;' % self.markdown.mi_token, '<quotetitle>')
+        text = text.replace('&lt;/%s:quotetitle&gt;' % self.markdown.mi_token, '</quotetitle>')
+        lines = text.splitlines()
+        clean = []
+        for l, line in enumerate(lines):
+            clean.append(line)
+            try:
+                if line == '<blockquote>':
+                    if lines[l + 1][0:15] != '<p><quotetitle>':
+                        clean.append('<header><quotesingletitle></header>')
+                        clean.append('<article>')
+                if line == '</blockquote>':
+                    clean[-1] = '</article>'
+                    clean.append('</blockquote>')
+                if line.strip()[0:15] == '<p><quotetitle>':
+                    line = line.strip()
+                    header = line[3:-4]
+                    clean[-1] = '<header>%s</header>' % header
+                    clean.append('<article>')
+                    if line[-4:] != '</p>':
+                        clean.append('<p>')
+            except IndexError:
+                pass
+        return '\r\n'.join(clean).replace('<p>\r\n', '<p>')

+ 1 - 4
misago/markdown/factory.py

@@ -48,7 +48,7 @@ def signature_markdown(acl, text):
     del md.parser.blockprocessors['hr']
     del md.parser.blockprocessors['olist']
     del md.parser.blockprocessors['ulist']
-    
+
     return md.convert(text)
 
 
@@ -72,9 +72,6 @@ def post_markdown(text):
 
 
 def tidy_markdown(md, text):
-    text = text.replace('<p><h3><quotetitle>', '<article><header><quotetitle>')
-    text = text.replace('</quotetitle></h3></p>', '</quotetitle></header></article>')
-    text = text.replace('</quotetitle></h3><br>\r\n', '</quotetitle></header></article>\r\n<p>')
     text = text.replace('\r\n<p></p>', '')
     return md, text
 

+ 6 - 6
static/cranefly/css/cranefly.css

@@ -800,8 +800,8 @@ textarea{resize:vertical}
 .btn.btn-warning{background-color:#e59119;border-color:#ce8217;color:rgba(255,255,255,0.85);text-shadow:0 1px 0 #ad6704}.btn.btn-warning:hover,.btn.btn-warning:active{color:#fff}.btn.btn-warning:hover:enabled,.btn.btn-warning:active:enabled{background-color:#f89406;border-color:#df8505}
 .btn.btn-danger{background-color:#cf402e;border-color:#ba3a29;color:rgba(255,255,255,0.85);text-shadow:0 1px 0 #902d20}.btn.btn-danger:hover,.btn.btn-danger:active{color:#fff}.btn.btn-danger:hover:enabled,.btn.btn-danger:active:enabled{background-color:#e82c15;border-color:#d12813}
 .btn.btn-inverse{background-color:#333;border-color:#262626;color:rgba(255,255,255,0.85);text-shadow:0 1px 0 #0d0d0d}.btn.btn-inverse:hover,.btn.btn-inverse:active{color:#fff}.btn.btn-inverse:hover:enabled,.btn.btn-inverse:active:enabled{background-color:#262626;border-color:#1a1a1a}
-.btn.btn-link{background:none;border:none;opacity:.7;filter:alpha(opacity=70);color:#333}.btn.btn-link:hover,.btn.btn-link:active,.btn.btn-link:focus{opacity:1;filter:alpha(opacity=100)}.btn.btn-link:hover:enabled,.btn.btn-link:active:enabled,.btn.btn-link:focus:enabled{text-decoration:none}
-a.btn-link:hover,a.btn-link:active,a.btn-link:focus{opacity:.9;filter:alpha(opacity=90);color:#333;text-decoration:none}
+.btn.btn-link{background:none;border:none;color:#999}.btn.btn-link:hover,.btn.btn-link:active,.btn.btn-link:focus{color:#333}.btn.btn-link:hover:enabled,.btn.btn-link:active:enabled,.btn.btn-link:focus:enabled{text-decoration:none}
+a.btn-link:hover,a.btn-link:active,a.btn-link:focus{color:#333;text-decoration:none}
 .pagination{margin:0;padding:0}.pagination .count{margin-right:10.5px;padding:4px 0;color:#999}
 .pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul li{float:left;margin:0;margin-right:4.666666666666667px;padding:0}.pagination ul li a:link,.pagination ul li a:visited{background-color:#fff;border:1px solid #f0f0f0;border-radius:3px;padding:3px 7px;color:#999}.pagination ul li a:link i,.pagination ul li a:visited i{opacity:.55;filter:alpha(opacity=55)}
 .pagination ul li a:active,.pagination ul li a:hover{border:1px solid #999;color:#555}.pagination ul li a:active i,.pagination ul li a:hover i{opacity:1;filter:alpha(opacity=100)}
@@ -824,14 +824,14 @@ a.btn-link:hover,a.btn-link:active,a.btn-link:focus{opacity:.9;filter:alpha(opac
 .markdown h3,.markdown article h3{font-size:16.8px}
 .markdown h4,.markdown article h4{font-size:14px}
 .markdown hr,.markdown article hr{border:none;border-top:1px solid #eee;margin:20px 0}
-.markdown blockquote,.markdown article blockquote{border-left-color:#e1e1e1;padding:4.666666666666667px 14px}.markdown blockquote header,.markdown article blockquote header{padding-bottom:10px;font-size:15.400000000000002px;font-weight:bold;line-height:20px}
+.markdown blockquote,.markdown article blockquote{border-left-color:#e1e1e1;padding:4.666666666666667px 14px;margin:10px}.markdown blockquote header,.markdown article blockquote header{padding-bottom:10px;font-size:15.400000000000002px;font-weight:bold;line-height:20px}
 .markdown blockquote p,.markdown article blockquote p{margin:0 0 10px;font-size:14px}
 .markdown blockquote blockquote,.markdown article blockquote blockquote{opacity:.85;filter:alpha(opacity=85)}
-.markdown code,.markdown article code{background-color:#333;border:none;color:#eee;font-size:14px}
+.markdown code,.markdown article code{background-color:#333;border-color:#000;color:#eee;text-shadow:0 1px 0 #000}
 .markdown pre,.markdown article pre{background-color:#222;padding:7px 14px}.markdown pre code,.markdown article pre code{background:none;border:none;color:#eee;font-size:11.9px}
 .markdown img,.markdown article img{background-color:#fff;border-radius:3px;margin:10px 0}
-.markdown pre,.markdown article pre,.markdown blockquote,.markdown article blockquote,.markdown iframe,.markdown article iframe{margin-top:20px;margin-bottom:20px}.markdown pre>:first-child,.markdown article pre>:first-child,.markdown blockquote>:first-child,.markdown article blockquote>:first-child,.markdown iframe>:first-child,.markdown article iframe>:first-child{margin-top:0}
-.markdown pre>:last-child,.markdown article pre>:last-child,.markdown blockquote>:last-child,.markdown article blockquote>:last-child,.markdown iframe>:last-child,.markdown article iframe>:last-child{margin-bottom:0}
+.markdown pre,.markdown article pre,.markdown blockquote,.markdown article blockquote,.markdown iframe,.markdown article iframe{margin-top:20px;margin-bottom:20px}.markdown pre article>:first-child,.markdown article pre article>:first-child,.markdown blockquote article>:first-child,.markdown article blockquote article>:first-child,.markdown iframe article>:first-child,.markdown article iframe article>:first-child{margin-top:0}
+.markdown pre article>:last-child,.markdown article pre article>:last-child,.markdown blockquote article>:last-child,.markdown article blockquote article>:last-child,.markdown iframe article>:last-child,.markdown article iframe article>:last-child{margin-bottom:0}
 .markdown .emoji,.markdown article .emoji{background:none;border-radius:0;margin:0;vertical-align:middle}
 .markdown h1 .emoji,.markdown article h1 .emoji{width:27.8px;height:27.8px}
 .markdown h2 .emoji,.markdown article h2 .emoji{width:25px;height:25px}

+ 2 - 6
static/cranefly/css/cranefly/buttons.less

@@ -120,15 +120,13 @@
   &.btn-link {
     background: none;
     border: none;
-    .opacity(70);
 
-    color: @textColor;
+    color: @grayLight;
 
     &:hover, &:active, &:focus {
-      .opacity(100);
+    	color: @textColor;
 
       &:enabled {
-
         text-decoration: none;
       }
     }
@@ -137,8 +135,6 @@
 
 a.btn-link {
   &:hover, &:active, &:focus {
-    .opacity(90);
-
     color: @textColor;
     text-decoration: none;
   }

+ 10 - 7
static/cranefly/css/cranefly/markdown.less

@@ -42,6 +42,7 @@
   blockquote {
     border-left-color: darken(@grayLighter, 5%);
     padding: (@baseFontSize / 3) @baseFontSize;
+    margin: @baseLineHeight / 2;
 
     header {
       padding-bottom: (@baseLineHeight / 2);
@@ -64,10 +65,10 @@
 
   code {
     background-color: @grayDark;
-    border: none;
+    border-color: @black;
 
     color: @grayLighter;
-    font-size: @baseFontSize;
+    text-shadow: 0px 1px 0px @black;
   }
 
   pre {
@@ -94,12 +95,14 @@
     margin-top: @baseLineHeight;
     margin-bottom: @baseLineHeight;
 
-    &>:first-child {
-      margin-top: 0px;
-    }
+    article{
+      &>:first-child {
+        margin-top: 0px;
+      }
 
-    &>:last-child {
-      margin-bottom: 0px;
+      &>:last-child {
+        margin-bottom: 0px;
+      }
     }
   }
 

+ 2 - 2
templates/cranefly/private_threads/posting.html

@@ -167,7 +167,7 @@
 
 {% macro get_button() -%}
 {% if action == 'new_thread' -%}
-{% trans %}Post Thread{% endtrans %}
+{% trans %}Start Thread{% endtrans %}
 {%- elif action == 'new_reply' -%}
 {% trans %}Post Reply{% endtrans %}
 {%- else -%}
@@ -178,4 +178,4 @@
 
 {% macro get_extra() %}
   <button id="editor-preview" name="preview" type="submit" class="btn pull-right">{% trans %}Preview{% endtrans %}</button>
-{% endmacro %}
+{% endmacro %}

+ 2 - 2
templates/cranefly/threads/posting.html

@@ -181,7 +181,7 @@
 
 {% macro get_button() -%}
 {% if action == 'new_thread' -%}
-{% trans %}Post Thread{% endtrans %}
+{% trans %}Start Thread{% endtrans %}
 {%- elif action == 'new_reply' -%}
 {% trans %}Post Reply{% endtrans %}
 {%- else -%}
@@ -192,4 +192,4 @@
 
 {% macro get_extra() %}
   <button id="editor-preview" name="preview" type="submit" class="btn pull-right">{% trans %}Preview{% endtrans %}</button>
-{% endmacro %}
+{% endmacro %}