Syntax highlighting support
This commit is contained in:
		
							parent
							
								
									0a455e2b3e
								
							
						
					
					
						commit
						df03286266
					
				@ -10,6 +10,6 @@ $ ->
 | 
			
		||||
  $contents.focus()
 | 
			
		||||
 | 
			
		||||
  # Binding submit event to new button
 | 
			
		||||
  $button.on 'click', ->
 | 
			
		||||
  $button.on 'mouseup', ->
 | 
			
		||||
    $form.submit()
 | 
			
		||||
    false
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,11 @@
 | 
			
		||||
 | 
			
		||||
body, input, select {
 | 
			
		||||
  font-family: Helvetica, Arial, sans-serif;
 | 
			
		||||
  font-size: 1.2em;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
textarea, pre {
 | 
			
		||||
  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
 | 
			
		||||
  font-size: 1.2em;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
html, body, form {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@ -27,6 +27,14 @@ h1 {
 | 
			
		||||
  text-transform: uppercase;
 | 
			
		||||
  color: #ccc;
 | 
			
		||||
}
 | 
			
		||||
.linenos {
 | 
			
		||||
  padding-right: .5em;
 | 
			
		||||
  color: #ccc;
 | 
			
		||||
  border-right: #eee 1px solid;
 | 
			
		||||
}
 | 
			
		||||
.code {
 | 
			
		||||
  padding-left: .5em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								app/paste.rb
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								app/paste.rb
									
									
									
									
									
								
							@ -1,20 +1,21 @@
 | 
			
		||||
class Paste
 | 
			
		||||
  attr_reader :contents
 | 
			
		||||
  attr_reader :contents, :type
 | 
			
		||||
 | 
			
		||||
  class << self
 | 
			
		||||
    def find(id)
 | 
			
		||||
      record = DB[:pastes].where(id: id).first
 | 
			
		||||
      record ? new(record[:contents]) : nil
 | 
			
		||||
      record ? new(record[:contents], record[:type]) : nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def initialize(contents)
 | 
			
		||||
  def initialize(contents, type = nil)
 | 
			
		||||
    @contents = contents
 | 
			
		||||
    @type = type
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def save
 | 
			
		||||
    encrypt!
 | 
			
		||||
    DB[:pastes].insert(contents: contents)
 | 
			
		||||
    DB[:pastes].insert(contents: contents, type: type)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def decrypt(key)
 | 
			
		||||
@ -34,4 +35,16 @@ class Paste
 | 
			
		||||
  def decrypt!
 | 
			
		||||
    @contents = Encryptor.decrypt(value: Base64.decode64(contents), key: key)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def highlighted
 | 
			
		||||
    Pygments.highlight(@contents, lexer: 'ruby', options: { linenos: 'table' })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def paragraph
 | 
			
		||||
    "<pre>#{@contents}</pre>"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def html
 | 
			
		||||
    type ? highlighted : paragraph
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,7 @@ require 'slim'
 | 
			
		||||
require 'coffee_script'
 | 
			
		||||
require 'stylus'
 | 
			
		||||
require 'stylus/tilt'
 | 
			
		||||
require 'pygments'
 | 
			
		||||
 | 
			
		||||
require 'lib/error_pages'
 | 
			
		||||
require 'lib/assets'
 | 
			
		||||
@ -46,8 +47,9 @@ class Pastemaster < Sinatra::Application
 | 
			
		||||
 | 
			
		||||
    begin
 | 
			
		||||
      @paste.decrypt(params[:key])
 | 
			
		||||
 | 
			
		||||
      slim :show, layout: :default
 | 
			
		||||
    rescue => Error
 | 
			
		||||
    rescue OpenSSL::Cipher::CipherError
 | 
			
		||||
      forbidden
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										69
									
								
								public/pygments_solarized_modified.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								public/pygments_solarized_modified.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
			
		||||
/* .highlight { background-color: #ffffcc } */
 | 
			
		||||
.highlight .c { color: #586E75 } /* Comment */
 | 
			
		||||
.highlight .err { color: #538181 } /* Error */
 | 
			
		||||
.highlight .g { color: #538181 } /* Generic */
 | 
			
		||||
.highlight .k { color: #859900 } /* Keyword */
 | 
			
		||||
.highlight .l { color: #538181 } /* Literal */
 | 
			
		||||
.highlight .n { color: #538181 } /* Name */
 | 
			
		||||
.highlight .o { color: #859900 } /* Operator */
 | 
			
		||||
.highlight .x { color: #CB4B16 } /* Other */
 | 
			
		||||
.highlight .p { color: #538181 } /* Punctuation */
 | 
			
		||||
.highlight .cm { color: #586E75 } /* Comment.Multiline */
 | 
			
		||||
.highlight .cp { color: #859900 } /* Comment.Preproc */
 | 
			
		||||
.highlight .c1 { color: #586E75 } /* Comment.Single */
 | 
			
		||||
.highlight .cs { color: #859900 } /* Comment.Special */
 | 
			
		||||
.highlight .gd { color: #2AA198 } /* Generic.Deleted */
 | 
			
		||||
.highlight .ge { color: #538181; font-style: italic } /* Generic.Emph */
 | 
			
		||||
.highlight .gr { color: #DC322F } /* Generic.Error */
 | 
			
		||||
.highlight .gh { color: #CB4B16 } /* Generic.Heading */
 | 
			
		||||
.highlight .gi { color: #859900 } /* Generic.Inserted */
 | 
			
		||||
.highlight .go { color: #538181 } /* Generic.Output */
 | 
			
		||||
.highlight .gp { color: #538181 } /* Generic.Prompt */
 | 
			
		||||
.highlight .gs { color: #538181; font-weight: bold } /* Generic.Strong */
 | 
			
		||||
.highlight .gu { color: #CB4B16 } /* Generic.Subheading */
 | 
			
		||||
.highlight .gt { color: #538181 } /* Generic.Traceback */
 | 
			
		||||
.highlight .kc { color: #CB4B16 } /* Keyword.Constant */
 | 
			
		||||
.highlight .kd { color: #268BD2 } /* Keyword.Declaration */
 | 
			
		||||
.highlight .kn { color: #859900 } /* Keyword.Namespace */
 | 
			
		||||
.highlight .kp { color: #859900 } /* Keyword.Pseudo */
 | 
			
		||||
.highlight .kr { color: #268BD2 } /* Keyword.Reserved */
 | 
			
		||||
.highlight .kt { color: #DC322F } /* Keyword.Type */
 | 
			
		||||
.highlight .ld { color: #538181 } /* Literal.Date */
 | 
			
		||||
.highlight .m { color: #2AA198 } /* Literal.Number */
 | 
			
		||||
.highlight .s { color: #2AA198 } /* Literal.String */
 | 
			
		||||
.highlight .na { color: #538181 } /* Name.Attribute */
 | 
			
		||||
.highlight .nb { color: #B58900 } /* Name.Builtin */
 | 
			
		||||
.highlight .nc { color: #268BD2 } /* Name.Class */
 | 
			
		||||
.highlight .no { color: #CB4B16 } /* Name.Constant */
 | 
			
		||||
.highlight .nd { color: #268BD2 } /* Name.Decorator */
 | 
			
		||||
.highlight .ni { color: #CB4B16 } /* Name.Entity */
 | 
			
		||||
.highlight .ne { color: #CB4B16 } /* Name.Exception */
 | 
			
		||||
.highlight .nf { color: #268BD2 } /* Name.Function */
 | 
			
		||||
.highlight .nl { color: #538181 } /* Name.Label */
 | 
			
		||||
.highlight .nn { color: #538181 } /* Name.Namespace */
 | 
			
		||||
.highlight .nx { color: #538181 } /* Name.Other */
 | 
			
		||||
.highlight .py { color: #538181 } /* Name.Property */
 | 
			
		||||
.highlight .nt { color: #268BD2 } /* Name.Tag */
 | 
			
		||||
.highlight .nv { color: #268BD2 } /* Name.Variable */
 | 
			
		||||
.highlight .ow { color: #859900 } /* Operator.Word */
 | 
			
		||||
.highlight .w { color: #538181 } /* Text.Whitespace */
 | 
			
		||||
.highlight .mf { color: #2AA198 } /* Literal.Number.Float */
 | 
			
		||||
.highlight .mh { color: #2AA198 } /* Literal.Number.Hex */
 | 
			
		||||
.highlight .mi { color: #2AA198 } /* Literal.Number.Integer */
 | 
			
		||||
.highlight .mo { color: #2AA198 } /* Literal.Number.Oct */
 | 
			
		||||
.highlight .sb { color: #586E75 } /* Literal.String.Backtick */
 | 
			
		||||
.highlight .sc { color: #2AA198 } /* Literal.String.Char */
 | 
			
		||||
.highlight .sd { color: #538181 } /* Literal.String.Doc */
 | 
			
		||||
.highlight .s2 { color: #2AA198 } /* Literal.String.Double */
 | 
			
		||||
.highlight .se { color: #CB4B16 } /* Literal.String.Escape */
 | 
			
		||||
.highlight .sh { color: #538181 } /* Literal.String.Heredoc */
 | 
			
		||||
.highlight .si { color: #2AA198 } /* Literal.String.Interpol */
 | 
			
		||||
.highlight .sx { color: #2AA198 } /* Literal.String.Other */
 | 
			
		||||
.highlight .sr { color: #DC322F } /* Literal.String.Regex */
 | 
			
		||||
.highlight .s1 { color: #2AA198 } /* Literal.String.Single */
 | 
			
		||||
.highlight .ss { color: #2AA198 } /* Literal.String.Symbol */
 | 
			
		||||
.highlight .bp { color: #268BD2 } /* Name.Builtin.Pseudo */
 | 
			
		||||
.highlight .vc { color: #268BD2 } /* Name.Variable.Class */
 | 
			
		||||
.highlight .vg { color: #268BD2 } /* Name.Variable.Global */
 | 
			
		||||
.highlight .vi { color: #268BD2 } /* Name.Variable.Instance */
 | 
			
		||||
.highlight .il { color: #2AA198 } /* Literal.Number.Integer.Long */
 | 
			
		||||
@ -4,6 +4,7 @@ html
 | 
			
		||||
    title Pastemaster
 | 
			
		||||
    link rel="stylesheet" href="/normalize.css?v2.1.2"
 | 
			
		||||
    link rel="stylesheet" href="/assets/pastemaster.css?r1"
 | 
			
		||||
    link rel="stylesheet" href="/pygments_solarized_modified.css?r1"
 | 
			
		||||
  body
 | 
			
		||||
    h1
 | 
			
		||||
      strong Paste
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
form#pasteform action="/" method="post" accept-charset="UTF-8"
 | 
			
		||||
  textarea#contents name="contents"
 | 
			
		||||
  input#submitbtn type="submit" value="Save"
 | 
			
		||||
  a#submitlnk href="" role="submit" Save
 | 
			
		||||
  a#submitlnk href="#" role="submit" Save
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
pre= @paste.contents
 | 
			
		||||
== @paste.html
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user