commit 409d3f26e25a1a75da9752df1ccc20978a1fa479 Author: Gregory Eremin Date: Mon Jul 8 21:04:59 2013 +0700 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..54b7261 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.rb diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..a2cdc3d --- /dev/null +++ b/Gemfile @@ -0,0 +1,9 @@ +source 'https://rubygems.org' + +gem 'sinatra' +gem 'sequel' +gem 'pg' +gem 'pygments.rb' + +gem 'haml' +gem 'sass' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..041c9ba --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,32 @@ +GEM + remote: https://rubygems.org/ + specs: + haml (4.0.3) + tilt + pg (0.15.1) + posix-spawn (0.3.6) + pygments.rb (0.5.1) + posix-spawn (~> 0.3.6) + yajl-ruby (~> 1.1.0) + rack (1.5.2) + rack-protection (1.5.0) + rack + sass (3.2.9) + sequel (4.0.0) + sinatra (1.4.3) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (~> 1.3, >= 1.3.4) + tilt (1.4.1) + yajl-ruby (1.1.0) + +PLATFORMS + ruby + +DEPENDENCIES + haml + pg + pygments.rb + sass + sequel + sinatra diff --git a/application.rb b/application.rb new file mode 100644 index 0000000..18be0fc --- /dev/null +++ b/application.rb @@ -0,0 +1,32 @@ +require 'securerandom' +require 'bundler/setup' +require 'sinatra' +require 'sequel' +require 'haml' + +require File.expand_path('../config', __FILE__) + +DB = Sequel.connect(CONFIG[:database_url]) +DB.create_table :pastes do + primary_key :id + String :handle + String :type + Text :contents +end unless DB.table_exists? :pastes + +set :public_folder, 'public' + +get '/' do + haml :form, layout: :default +end + +post '/' do + id = DB[:pastes].insert(handle: SecureRandom.hex, contents: params[:contents]) + record = DB[:pastes].where(id: id).first + redirect "/#{id}/#{record[:handle]}" +end + +get '/:id/:handle' do + @record = DB[:pastes].where(id: params[:id], handle: params[:handle]).first + haml :show, layout: :default +end diff --git a/config.example.rb b/config.example.rb new file mode 100644 index 0000000..9b2c9e6 --- /dev/null +++ b/config.example.rb @@ -0,0 +1,3 @@ +CONFIG = { + database_url: 'postgres://pastemaster:pastemaster@localhost:5432/pastemaster' +} diff --git a/public/normalize.css b/public/normalize.css new file mode 100644 index 0000000..6adf56e --- /dev/null +++ b/public/normalize.css @@ -0,0 +1,396 @@ +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 8/9. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/public/pastemaster.css b/public/pastemaster.css new file mode 100644 index 0000000..4c24c1e --- /dev/null +++ b/public/pastemaster.css @@ -0,0 +1,47 @@ +* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +body, input, select { + font-family: 'Helvetica', Arial, sans-serif; + font-size: 150%; +} + +.container { + position: absolute; + top: 10%; + left: 10%; + width: 80%; + height: 80%; +} + +textarea, input { + outline: none; +} + +textarea { + width: 100%; + height: 20em; + line-height: 120%; + resize: none; + border-style: solid; + border-color: #ddd; + border-radius: 5px; + padding: .5em; +} + +input[type="submit"] { + display: inline-block; + margin: .3em 0; + background-color: #fafafa; + border-color: #ddd; + border-radius: 4px; + border-width: 1px; + font-size: 1em; + padding: .2em .5em; +} +.row.centered { + text-align: center; +} + +p { + width: 100%; +} diff --git a/views/default.haml b/views/default.haml new file mode 100644 index 0000000..79aab1b --- /dev/null +++ b/views/default.haml @@ -0,0 +1,8 @@ +!!! +%html + %head + %title Pastemaster + %link{ rel: 'stylesheet', href: '/normalize.css?v2.1.2' } + %link{ rel: 'stylesheet', href: '/pastemaster.css?r1' } + %body + .container= yield diff --git a/views/form.haml b/views/form.haml new file mode 100644 index 0000000..2b33d87 --- /dev/null +++ b/views/form.haml @@ -0,0 +1,8 @@ +%form{ action: '/', method: 'post', 'accept-charset' => 'UTF-8' } + .row{ style: 'display: none' } + %select{ name: 'type' } + %option{ value: 'text_plain' } Plain Text + .row + %textarea{ name: 'contents' } + .row.centered + %input{ type: 'submit' } diff --git a/views/show.haml b/views/show.haml new file mode 100644 index 0000000..1ba719b --- /dev/null +++ b/views/show.haml @@ -0,0 +1,5 @@ +%p + - if @record + = @record[:contents] + - else + Sorry no have mister