├── Procfile ├── migrations ├── 201409002828-add-invites-table.down.sql └── 201409002828-add-invites-table.up.sql ├── resources ├── vendor │ ├── sass │ │ ├── _grid-settings.scss │ │ ├── vendor │ │ │ ├── bourbon │ │ │ │ ├── settings │ │ │ │ │ ├── _px-to-em.scss │ │ │ │ │ ├── _asset-pipeline.scss │ │ │ │ │ └── _prefixer.scss │ │ │ │ ├── css3 │ │ │ │ │ ├── _appearance.scss │ │ │ │ │ ├── _user-select.scss │ │ │ │ │ ├── _calc.scss │ │ │ │ │ ├── _hyphens.scss │ │ │ │ │ ├── _box-sizing.scss │ │ │ │ │ ├── _filter.scss │ │ │ │ │ ├── _placeholder.scss │ │ │ │ │ ├── _perspective.scss │ │ │ │ │ ├── _backface-visibility.scss │ │ │ │ │ ├── _image-rendering.scss │ │ │ │ │ ├── _font-feature-settings.scss │ │ │ │ │ ├── _hidpi-media-query.scss │ │ │ │ │ ├── _transform.scss │ │ │ │ │ ├── _border-radius.scss │ │ │ │ │ ├── _font-face.scss │ │ │ │ │ ├── _keyframes.scss │ │ │ │ │ ├── _columns.scss │ │ │ │ │ ├── _linear-gradient.scss │ │ │ │ │ ├── _background-image.scss │ │ │ │ │ ├── _radial-gradient.scss │ │ │ │ │ ├── _animation.scss │ │ │ │ │ ├── _background.scss │ │ │ │ │ ├── _border-image.scss │ │ │ │ │ ├── _transition.scss │ │ │ │ │ └── _flex-box.scss │ │ │ │ ├── functions │ │ │ │ │ ├── _golden-ratio.scss │ │ │ │ │ ├── _strip-units.scss │ │ │ │ │ ├── _tint-shade.scss │ │ │ │ │ ├── _assign.scss │ │ │ │ │ ├── _px-to-rem.scss │ │ │ │ │ ├── _px-to-em.scss │ │ │ │ │ ├── _grid-width.scss │ │ │ │ │ ├── _color-lightness.scss │ │ │ │ │ ├── _unpack.scss │ │ │ │ │ ├── _transition-property-name.scss │ │ │ │ │ ├── _flex-grid.scss │ │ │ │ │ └── _modular-scale.scss │ │ │ │ ├── addons │ │ │ │ │ ├── _ellipsis.scss │ │ │ │ │ ├── _hide-text.scss │ │ │ │ │ ├── _word-wrap.scss │ │ │ │ │ ├── _font-family.scss │ │ │ │ │ ├── _size.scss │ │ │ │ │ ├── _clearfix.scss │ │ │ │ │ ├── _position.scss │ │ │ │ │ ├── _retina-image.scss │ │ │ │ │ ├── _prefixer.scss │ │ │ │ │ ├── _timing-functions.scss │ │ │ │ │ ├── _triangle.scss │ │ │ │ │ ├── _directional-values.scss │ │ │ │ │ └── _html5-input-types.scss │ │ │ │ ├── helpers │ │ │ │ │ ├── _shape-size-stripper.scss │ │ │ │ │ ├── _is-num.scss │ │ │ │ │ ├── _gradient-positions-parser.scss │ │ │ │ │ ├── _radial-positions-parser.scss │ │ │ │ │ ├── _convert-units.scss │ │ │ │ │ ├── _linear-angle-parser.scss │ │ │ │ │ ├── _render-gradients.scss │ │ │ │ │ ├── _linear-side-corner-parser.scss │ │ │ │ │ ├── _linear-gradient-parser.scss │ │ │ │ │ ├── _str-to-num.scss │ │ │ │ │ ├── _radial-gradient-parser.scss │ │ │ │ │ ├── _radial-arg-parser.scss │ │ │ │ │ └── _linear-positions-parser.scss │ │ │ │ ├── _bourbon-deprecated-upcoming.scss │ │ │ │ └── _bourbon.scss │ │ │ └── neat │ │ │ │ ├── grid │ │ │ │ ├── _grid.scss │ │ │ │ ├── _fill-parent.scss │ │ │ │ ├── _outer-container.scss │ │ │ │ ├── _pad.scss │ │ │ │ ├── _reset.scss │ │ │ │ ├── _row.scss │ │ │ │ ├── _shift.scss │ │ │ │ ├── _media.scss │ │ │ │ ├── _visual-grid.scss │ │ │ │ ├── _private.scss │ │ │ │ ├── _span-columns.scss │ │ │ │ ├── _omega.scss │ │ │ │ └── _to-deprecate.scss │ │ │ │ ├── _neat-helpers.scss │ │ │ │ ├── settings │ │ │ │ ├── _visual-grid.scss │ │ │ │ └── _grid.scss │ │ │ │ ├── functions │ │ │ │ ├── _new-breakpoint.scss │ │ │ │ └── _private.scss │ │ │ │ └── _neat.scss │ │ ├── base │ │ │ ├── extends │ │ │ │ ├── _clearfix.scss │ │ │ │ ├── _hide-text.scss │ │ │ │ ├── _errors.scss │ │ │ │ ├── _button.scss │ │ │ │ └── _flashes.scss │ │ │ ├── _buttons.scss │ │ │ ├── _grid-settings.scss │ │ │ ├── _tables.scss │ │ │ ├── _lists.scss │ │ │ ├── _base.scss │ │ │ ├── _forms.scss │ │ │ ├── _typography.scss │ │ │ └── _variables.scss │ │ └── screen.scss │ ├── .sass-cache │ │ ├── 2590cc521dc306970884ad7f8cfc159dd6afc016 │ │ │ ├── _grid.scssc │ │ │ ├── _pad.scssc │ │ │ ├── _row.scssc │ │ │ ├── _media.scssc │ │ │ ├── _omega.scssc │ │ │ ├── _private.scssc │ │ │ ├── _reset.scssc │ │ │ ├── _shift.scssc │ │ │ ├── _fill-parent.scssc │ │ │ ├── _span-columns.scssc │ │ │ ├── _to-deprecate.scssc │ │ │ ├── _visual-grid.scssc │ │ │ └── _outer-container.scssc │ │ ├── 2ac3e985e2eb359981a674df217cc55498dacb77 │ │ │ ├── _neat.scssc │ │ │ └── _neat-helpers.scssc │ │ ├── 566b44c052e6ccba6b827b32054e05860d86a64e │ │ │ ├── _size.scssc │ │ │ ├── _button.scssc │ │ │ ├── _clearfix.scssc │ │ │ ├── _ellipsis.scssc │ │ │ ├── _hide-text.scssc │ │ │ ├── _position.scssc │ │ │ ├── _prefixer.scssc │ │ │ ├── _triangle.scssc │ │ │ ├── _word-wrap.scssc │ │ │ ├── _retina-image.scssc │ │ │ ├── _html5-input-types.scssc │ │ │ ├── _timing-functions.scssc │ │ │ ├── _directional-values.scssc │ │ │ └── _font-family.scssc │ │ ├── 94425edb2a72138d60214051de0c34f254a44257 │ │ │ ├── _grid.scssc │ │ │ └── _visual-grid.scssc │ │ ├── b39e89d657d48732e3237f05b55bec21a5a196e6 │ │ │ ├── print.scssc │ │ │ ├── screen.scssc │ │ │ ├── _grid-settings.scssc │ │ │ └── ie.scssc │ │ ├── 0457440d010a5bc0f5aeed253ef0674c00f09101 │ │ │ ├── _columns.scssc │ │ │ ├── _filter.scssc │ │ │ ├── _flex-box.scssc │ │ │ ├── _font-face.scssc │ │ │ ├── _keyframes.scssc │ │ │ ├── _transform.scssc │ │ │ ├── _background.scssc │ │ │ ├── _border-image.scssc │ │ │ ├── _perspective.scssc │ │ │ ├── _placeholder.scssc │ │ │ ├── _transition.scssc │ │ │ ├── _border-radius.scssc │ │ │ ├── _background-image.scssc │ │ │ ├── _hidpi-media-query.scssc │ │ │ ├── _image-rendering.scssc │ │ │ ├── _linear-gradient.scssc │ │ │ ├── _radial-gradient.scssc │ │ │ ├── _backface-visibility.scssc │ │ │ ├── _font-feature-settings.scssc │ │ │ ├── _box-sizing.scssc │ │ │ ├── _user-select.scssc │ │ │ ├── _appearance.scssc │ │ │ ├── _hyphens.scssc │ │ │ └── _calc.scssc │ │ ├── 13f301492a0492d8ce849834e70a13367bc678ca │ │ │ ├── _bourbon.scssc │ │ │ └── _bourbon-deprecated-upcoming.scssc │ │ ├── 1e27e06ae485caf682eec0bdb211928b18002d0c │ │ │ ├── _button.scssc │ │ │ ├── _errors.scssc │ │ │ ├── _flashes.scssc │ │ │ ├── _clearfix.scssc │ │ │ └── _hide-text.scssc │ │ ├── 2e360eb5dcd099caa80f56eab7aafd70e2102b0a │ │ │ ├── _is-num.scssc │ │ │ ├── _str-to-num.scssc │ │ │ ├── _convert-units.scssc │ │ │ ├── _radial-arg-parser.scssc │ │ │ ├── _render-gradients.scssc │ │ │ ├── _linear-angle-parser.scssc │ │ │ ├── _linear-gradient-parser.scssc │ │ │ ├── _radial-gradient-parser.scssc │ │ │ ├── _linear-positions-parser.scssc │ │ │ ├── _radial-positions-parser.scssc │ │ │ ├── _gradient-positions-parser.scssc │ │ │ ├── _linear-side-corner-parser.scssc │ │ │ └── _shape-size-stripper.scssc │ │ ├── 85dfb5b9cba0d97f264918b4fde1516ed338276e │ │ │ ├── _assign.scssc │ │ │ ├── _unpack.scssc │ │ │ ├── _flex-grid.scssc │ │ │ ├── _px-to-em.scssc │ │ │ ├── _px-to-rem.scssc │ │ │ ├── _grid-width.scssc │ │ │ ├── _tint-shade.scssc │ │ │ ├── _modular-scale.scssc │ │ │ ├── _color-lightness.scssc │ │ │ ├── _transition-property-name.scssc │ │ │ ├── _golden-ratio.scssc │ │ │ └── _strip-units.scssc │ │ ├── abbb913140fda6ee480a50d69e02c1c01ef3d3bf │ │ │ ├── _private.scssc │ │ │ └── _new-breakpoint.scssc │ │ ├── b7a349d9ce25bbe005fa30fa608d80bf6e0ee61a │ │ │ └── _flash.scssc │ │ ├── d23f2099d0be0c265c36f13ba6a227c317985c5d │ │ │ ├── _buttons.scssc │ │ │ ├── _flashes.scssc │ │ │ ├── _forms.scssc │ │ │ ├── _lists.scssc │ │ │ ├── _tables.scssc │ │ │ ├── _variables.scssc │ │ │ ├── _typography.scssc │ │ │ └── _base.scssc │ │ ├── 684901e35837c50c0c0423e04ec4411d78ba316b │ │ │ └── _utilities.scssc │ │ ├── cdd937e495401b24ec06437f334f4d3382d48135 │ │ │ └── _normalize.scssc │ │ ├── ed7346ce6d7658e0db28923821aefa1501e66d60 │ │ │ └── _normalize-opentype.scssc │ │ ├── 75fcaf1b4852ceb732871195e41567cc2a7d8997 │ │ │ └── home │ │ │ │ └── seabre │ │ │ │ └── projects │ │ │ │ └── inviteyoself │ │ │ │ └── resources │ │ │ │ └── vendor │ │ │ │ └── sass │ │ │ │ ├── base │ │ │ │ └── _base.scssc │ │ │ │ └── vendor │ │ │ │ ├── neat │ │ │ │ ├── _neat.scssc │ │ │ │ └── _neat-helpers.scssc │ │ │ │ ├── bourbon │ │ │ │ └── _bourbon.scssc │ │ │ │ └── normalize │ │ │ │ └── _normalize.scssc │ │ ├── b41d6e719d67c490c9cc4a70cd1a56c730fd53a7 │ │ │ ├── _asset-pipeline.scssc │ │ │ ├── _px-to-em.scssc │ │ │ └── _prefixer.scssc │ │ └── f1bf4afd29a22151b1c7e206b5b01027a1c207b6 │ │ │ └── _reset.scssc │ └── config.rb ├── public │ ├── img │ │ └── seamless_paper_texture.png │ ├── md │ │ └── docs.md │ └── css │ │ └── screen.css ├── templates │ ├── about.html │ ├── invite.html │ └── base.html ├── log4j.properties └── inviteyoself-automator │ └── inviteyoself-automator.js ├── .gitignore ├── .buildpacks ├── src └── inviteyoself │ ├── db │ ├── schema.clj │ └── core.clj │ ├── middleware.clj │ ├── core.clj │ ├── layout.clj │ ├── repl.clj │ ├── routes │ └── invite.clj │ ├── tasks │ └── send_invites.clj │ └── handler.clj ├── test └── inviteyoself │ └── test │ └── handler.clj ├── LICENSE ├── project.clj └── README.md /Procfile: -------------------------------------------------------------------------------- 1 | web: lein start-production-server 2 | -------------------------------------------------------------------------------- /migrations/201409002828-add-invites-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE invites; 2 | -------------------------------------------------------------------------------- /resources/vendor/sass/_grid-settings.scss: -------------------------------------------------------------------------------- 1 | @import "vendor/neat/neat-helpers"; 2 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/settings/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | $em-base: 16px !default; 2 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/extends/_clearfix.scss: -------------------------------------------------------------------------------- 1 | %clearfix { 2 | @include clearfix; 3 | } 4 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/extends/_hide-text.scss: -------------------------------------------------------------------------------- 1 | %hide-text { 2 | @include hide-text; 3 | } 4 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/settings/_asset-pipeline.scss: -------------------------------------------------------------------------------- 1 | $asset-pipeline: false !default; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /lib 3 | /classes 4 | /checkouts 5 | pom.xml 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.env 10 | *.log 11 | -------------------------------------------------------------------------------- /resources/public/img/seamless_paper_texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seabre/inviteyoself/HEAD/resources/public/img/seamless_paper_texture.png -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_grid.scss: -------------------------------------------------------------------------------- 1 | @if $border-box-sizing == true { 2 | * { 3 | @include box-sizing(border-box); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_appearance.scss: -------------------------------------------------------------------------------- 1 | @mixin appearance ($value) { 2 | @include prefixer(appearance, $value, webkit moz ms o spec); 3 | } 4 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_user-select.scss: -------------------------------------------------------------------------------- 1 | @mixin user-select($arg: none) { 2 | @include prefixer(user-select, $arg, webkit moz ms spec); 3 | } 4 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_golden-ratio.scss: -------------------------------------------------------------------------------- 1 | @function golden-ratio($value, $increment) { 2 | @return modular-scale($value, $increment, $golden) 3 | } 4 | -------------------------------------------------------------------------------- /resources/templates/about.html: -------------------------------------------------------------------------------- 1 | {% extends "templates/base.html" %} 2 | {% block content %} 3 |

this is the story of inviteyoself... work in progress

4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /migrations/201409002828-add-invites-table.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE invites ( 2 | id serial PRIMARY KEY, 3 | email TEXT NOT NULL DEFAULT '', 4 | invited BOOLEAN NOT NULL DEFAULT 'f'); 5 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_calc.scss: -------------------------------------------------------------------------------- 1 | @mixin calc($property, $value) { 2 | #{$property}: -webkit-calc(#{$value}); 3 | #{$property}: calc(#{$value}); 4 | } 5 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_hyphens.scss: -------------------------------------------------------------------------------- 1 | @mixin hyphens($hyphenation: none) { 2 | // none | manual | auto 3 | @include prefixer(hyphens, $hyphenation, webkit moz ms spec); 4 | } -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_box-sizing.scss: -------------------------------------------------------------------------------- 1 | @mixin box-sizing ($box) { 2 | // content-box | border-box | inherit 3 | @include prefixer(box-sizing, $box, webkit moz spec); 4 | } 5 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_strip-units.scss: -------------------------------------------------------------------------------- 1 | // Srtips the units from a value. e.g. 12px -> 12 2 | 3 | @function strip-units($val) { 4 | @return ($val / ($val * 0 + 1)); 5 | } 6 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_fill-parent.scss: -------------------------------------------------------------------------------- 1 | @mixin fill-parent() { 2 | width: 100%; 3 | 4 | @if $border-box-sizing == false { 5 | @include box-sizing(border-box); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.buildpacks: -------------------------------------------------------------------------------- 1 | https://github.com/seabre/heroku-buildpack-casperjs.git#d803ffb58d8caccaefdc94d9d4ddefbed7e86251 2 | https://github.com/seabre/heroku-buildpack-clojure.git#dc7edf8f876654d41025565394caf2b51e8e596f 3 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_filter.scss: -------------------------------------------------------------------------------- 1 | @mixin filter($function: none) { 2 | // [ 3 | @include prefixer(perspective, $depth, webkit moz spec); 4 | } 5 | 6 | @mixin perspective-origin($value: 50% 50%) { 7 | @include prefixer(perspective-origin, $value, webkit moz spec); 8 | } 9 | -------------------------------------------------------------------------------- /src/inviteyoself/db/schema.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.db.schema 2 | (:require [environ.core :refer [env]]) 3 | ) 4 | 5 | (def db-spec 6 | {:subprotocol "postgresql" 7 | :subname (str "//" (env :db-host) "/" (env :db-name)) 8 | :user (env :db-user-name) 9 | :password (env :db-user-password)}) 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_tint-shade.scss: -------------------------------------------------------------------------------- 1 | // Add percentage of white to a color 2 | @function tint($color, $percent){ 3 | @return mix(white, $color, $percent); 4 | } 5 | 6 | // Add percentage of black to a color 7 | @function shade($color, $percent){ 8 | @return mix(black, $color, $percent); 9 | } 10 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_assign.scss: -------------------------------------------------------------------------------- 1 | @function assign-inputs($inputs, $pseudo: null) { 2 | $list : (); 3 | 4 | @each $input in $inputs { 5 | $input: unquote($input); 6 | $input: if($pseudo, $input + ":" + $pseudo, $input); 7 | $list: append($list, $input, comma); 8 | } 9 | 10 | @return $list; 11 | } -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/settings/_prefixer.scss: -------------------------------------------------------------------------------- 1 | // Variable settings for /addons/prefixer.scss 2 | $prefix-for-webkit: true !default; 3 | $prefix-for-mozilla: true !default; 4 | $prefix-for-microsoft: true !default; 5 | $prefix-for-opera: true !default; 6 | $prefix-for-spec: true !default; // required for keyframe mixin 7 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_reset.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-display { 2 | $container-display-table: false !global; 3 | } 4 | 5 | @mixin reset-layout-direction { 6 | $layout-direction: $default-layout-direction !global; 7 | } 8 | 9 | @mixin reset-all { 10 | @include reset-display; 11 | @include reset-layout-direction; 12 | } 13 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/settings/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | $visual-grid: false !default; // Display the base grid 2 | $visual-grid-color: #EEE !default; 3 | $visual-grid-index: back !default; // Show grid behind content (back) or overlay it over the content (front) 4 | $visual-grid-opacity: 0.4 !default; 5 | $visual-grid-breakpoints: () !default; 6 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_font-family.scss: -------------------------------------------------------------------------------- 1 | $georgia: Georgia, Cambria, "Times New Roman", Times, serif; 2 | $helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; 3 | $lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; 4 | $monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; 5 | $verdana: Verdana, Geneva, sans-serif; 6 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_backface-visibility.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Backface-visibility mixin 3 | //************************************************************************// 4 | @mixin backface-visibility($visibility) { 5 | @include prefixer(backface-visibility, $visibility, webkit spec); 6 | } 7 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_shape-size-stripper.scss: -------------------------------------------------------------------------------- 1 | @function _shape-size-stripper($shape-size) { 2 | $shape-size-spec: null; 3 | @each $value in $shape-size { 4 | @if ($value == "cover") or ($value == "contain") { 5 | $value: null; 6 | } 7 | $shape-size-spec: "#{$shape-size-spec} #{$value}"; 8 | } 9 | @return $shape-size-spec; 10 | } 11 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_is-num.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper for linear-gradient-parser 3 | //************************************************************************// 4 | @function _is-num($char) { 5 | $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9; 6 | $index: index($values, $char); 7 | @return if($index, true, false); 8 | } 9 | -------------------------------------------------------------------------------- /test/inviteyoself/test/handler.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.test.handler 2 | (:use clojure.test 3 | ring.mock.request 4 | inviteyoself.handler)) 5 | 6 | (deftest test-app 7 | (testing "main route" 8 | (let [response (app (request :get "/"))] 9 | (is (= (:status response) 200)))) 10 | 11 | (testing "not-found route" 12 | (let [response (app (request :get "/invalid"))] 13 | (is (= (:status response) 404))))) 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_size.scss: -------------------------------------------------------------------------------- 1 | @mixin size($size) { 2 | $height: nth($size, 1); 3 | $width: $height; 4 | 5 | @if length($size) > 1 { 6 | $height: nth($size, 2); 7 | } 8 | 9 | @if $height == auto or (type-of($height) == number and not unitless($height)) { 10 | height: $height; 11 | } 12 | 13 | @if $width == auto or (type-of($width) == number and not unitless($width)) { 14 | width: $width; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_image-rendering.scss: -------------------------------------------------------------------------------- 1 | @mixin image-rendering ($mode:auto) { 2 | 3 | @if ($mode == crisp-edges) { 4 | -ms-interpolation-mode: nearest-neighbor; // IE8+ 5 | image-rendering: -moz-crisp-edges; 6 | image-rendering: -o-crisp-edges; 7 | image-rendering: -webkit-optimize-contrast; 8 | image-rendering: crisp-edges; 9 | } 10 | 11 | @else { 12 | image-rendering: $mode; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_px-to-rem.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to rems 2 | // eg. for a relational value of 12px write rem(12) 3 | // Assumes $em-base is the font-size of 4 | 5 | @function rem($pxval) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | 10 | $base: $em-base; 11 | @if not unitless($base) { 12 | $base: strip-units($base); 13 | } 14 | @return ($pxval / $base) * 1rem; 15 | } 16 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/_grid-settings.scss: -------------------------------------------------------------------------------- 1 | @import "neat-helpers"; // or "../neat/neat-helpers" when not in Rails 2 | 3 | // Neat Overrides 4 | // $column: 90px; 5 | // $gutter: 30px; 6 | // $grid-columns: 12; 7 | // $max-width: em(1088); 8 | 9 | // Neat Breakpoints 10 | $medium-screen: em(640); 11 | $large-screen: em(860); 12 | 13 | $medium-screen-up: new-breakpoint(min-width $medium-screen 4); 14 | $large-screen-up: new-breakpoint(min-width $large-screen 8); 15 | -------------------------------------------------------------------------------- /resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Root logger option 2 | log4j.rootLogger=INFO, stdout 3 | 4 | # Korma logging configuration 5 | log4j.logger.com.mchange=WARN, stdout 6 | 7 | # Direct log messages to stdout 8 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 9 | log4j.appender.stdout.Target=System.out 10 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 11 | log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 12 | 13 | 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to ems 2 | // eg. for a relational value of 12px write em(12) when the parent is 16px 3 | // if the parent is another value say 24px write em(12, 24) 4 | 5 | @function em($pxval, $base: $em-base) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | @if not unitless($base) { 10 | $base: strip-units($base); 11 | } 12 | @return ($pxval / $base) * 1em; 13 | } 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_row.scss: -------------------------------------------------------------------------------- 1 | @mixin row($display: block, $direction: $default-layout-direction) { 2 | @include clearfix; 3 | $layout-direction: $direction !global; 4 | 5 | @if $display == table { 6 | display: table; 7 | @include fill-parent; 8 | table-layout: fixed; 9 | $container-display-table: true !global; 10 | } 11 | 12 | @else { 13 | display: block; 14 | $container-display-table: false !global; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/_bourbon-deprecated-upcoming.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // These mixins/functions are deprecated 3 | // They will be removed in the next MAJOR version release 4 | //************************************************************************// 5 | @mixin inline-block { 6 | display: inline-block; 7 | @warn "inline-block mixin is deprecated and will be removed in the next major version release"; 8 | } 9 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/_tables.scss: -------------------------------------------------------------------------------- 1 | table { 2 | border-collapse: collapse; 3 | margin: ($base-spacing / 2) 0; 4 | table-layout: fixed; 5 | width: 100%; 6 | } 7 | 8 | th { 9 | border-bottom: 1px solid darken($base-border-color, 15); 10 | font-weight: bold; 11 | padding: ($base-spacing / 2) 0; 12 | text-align: left; 13 | } 14 | 15 | td { 16 | border-bottom: $base-border; 17 | padding: ($base-spacing / 2) 0; 18 | } 19 | 20 | tr, 21 | td, 22 | th { 23 | vertical-align: middle; 24 | } 25 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_grid-width.scss: -------------------------------------------------------------------------------- 1 | @function grid-width($n) { 2 | @return $n * $gw-column + ($n - 1) * $gw-gutter; 3 | } 4 | 5 | // The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function. 6 | // 7 | // $gw-column: 100px; // Column Width 8 | // $gw-gutter: 40px; // Gutter Width 9 | // 10 | // div { 11 | // width: grid-width(4); // returns 520px; 12 | // margin-left: $gw-gutter; // returns 40px; 13 | // } 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/settings/_grid.scss: -------------------------------------------------------------------------------- 1 | $column: golden-ratio(1em, 3) !default; // Column width 2 | $gutter: golden-ratio(1em, 1) !default; // Gutter between each two columns 3 | $grid-columns: 12 !default; // Total number of columns in the grid 4 | $max-width: em(1088) !default; // Max-width of the outer container 5 | $border-box-sizing: true !default; // Makes all elements have a border-box layout 6 | $default-feature: min-width; // Default @media feature for the breakpoint() mixin 7 | $default-layout-direction: LTR !default; 8 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_font-feature-settings.scss: -------------------------------------------------------------------------------- 1 | // Font feature settings mixin and property default. 2 | // Examples: @include font-feature-settings("liga"); 3 | // @include font-feature-settings("lnum" false); 4 | // @include font-feature-settings("pnum" 1, "kern" 0); 5 | // @include font-feature-settings("ss01", "ss02"); 6 | 7 | @mixin font-feature-settings($settings...) { 8 | @if length($settings) == 0 { $settings: none; } 9 | @include prefixer(font-feature-settings, $settings, webkit moz ms spec); 10 | } -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_hidpi-media-query.scss: -------------------------------------------------------------------------------- 1 | // HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/) 2 | @mixin hidpi($ratio: 1.3) { 3 | @media only screen and (-webkit-min-device-pixel-ratio: $ratio), 4 | only screen and (min--moz-device-pixel-ratio: $ratio), 5 | only screen and (-o-min-device-pixel-ratio: #{$ratio}/1), 6 | only screen and (min-resolution: #{round($ratio*96)}dpi), 7 | only screen and (min-resolution: #{$ratio}dppx) { 8 | @content; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/extends/_button.scss: -------------------------------------------------------------------------------- 1 | %button { 2 | -webkit-font-smoothing: antialiased; 3 | background-color: $base-button-color; 4 | border-radius: $base-border-radius; 5 | color: white; 6 | display: inline-block; 7 | font-size: $base-font-size; 8 | font-weight: bold; 9 | line-height: 1; 10 | padding: 0.75em 1em; 11 | text-decoration: none; 12 | 13 | &:hover { 14 | background-color: $hover-button-color; 15 | color: white; 16 | } 17 | 18 | &:disabled { 19 | cursor: not-allowed; 20 | opacity: 0.5; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/functions/_new-breakpoint.scss: -------------------------------------------------------------------------------- 1 | @function new-breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | 3 | @if length($query) == 1 { 4 | $query: $default-feature nth($query, 1) $total-columns; 5 | } 6 | 7 | @else if length($query) % 2 == 0 { 8 | $query: append($query, $total-columns); 9 | } 10 | 11 | @if not belongs-to($query, $visual-grid-breakpoints) { 12 | $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global; 13 | } 14 | 15 | @return $query; 16 | } 17 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_color-lightness.scss: -------------------------------------------------------------------------------- 1 | // Programatically determines whether a color is light or dark 2 | // Returns a boolean 3 | // More details here http://robots.thoughtbot.com/closer-look-color-lightness 4 | 5 | @function is-light($hex-color) { 6 | $-local-red: red(rgba($hex-color, 1.0)); 7 | $-local-green: green(rgba($hex-color, 1.0)); 8 | $-local-blue: blue(rgba($hex-color, 1.0)); 9 | 10 | $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; 11 | 12 | @return $-local-lightness > .6; 13 | } 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/_neat.scss: -------------------------------------------------------------------------------- 1 | // Bourbon Neat 1.6.0.pre 2 | // MIT Licensed 3 | // Copyright (c) 2012-2013 thoughtbot, inc. 4 | 5 | // Helpers 6 | @import "neat-helpers"; 7 | 8 | // Grid 9 | @import "grid/private"; 10 | @import "grid/reset"; 11 | @import "grid/grid"; 12 | @import "grid/omega"; 13 | @import "grid/outer-container"; 14 | @import "grid/span-columns"; 15 | @import "grid/row"; 16 | @import "grid/shift"; 17 | @import "grid/pad"; 18 | @import "grid/fill-parent"; 19 | @import "grid/media"; 20 | @import "grid/to-deprecate"; 21 | @import "grid/visual-grid"; 22 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_gradient-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _gradient-positions-parser($gradient-type, $gradient-positions) { 2 | @if $gradient-positions 3 | and ($gradient-type == linear) 4 | and (type-of($gradient-positions) != color) { 5 | $gradient-positions: _linear-positions-parser($gradient-positions); 6 | } 7 | @else if $gradient-positions 8 | and ($gradient-type == radial) 9 | and (type-of($gradient-positions) != color) { 10 | $gradient-positions: _radial-positions-parser($gradient-positions); 11 | } 12 | @return $gradient-positions; 13 | } 14 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_transform.scss: -------------------------------------------------------------------------------- 1 | @mixin transform($property: none) { 2 | // none | 3 | @include prefixer(transform, $property, webkit moz ms o spec); 4 | } 5 | 6 | @mixin transform-origin($axes: 50%) { 7 | // x-axis - left | center | right | length | % 8 | // y-axis - top | center | bottom | length | % 9 | // z-axis - length 10 | @include prefixer(transform-origin, $axes, webkit moz ms o spec); 11 | } 12 | 13 | @mixin transform-style ($style: flat) { 14 | @include prefixer(transform-style, $style, webkit moz ms o spec); 15 | } 16 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/_lists.scss: -------------------------------------------------------------------------------- 1 | ul, 2 | ol { 3 | margin: 0; 4 | padding: 0; 5 | list-style-type: none; 6 | 7 | &%default-ul { 8 | list-style-type: disc; 9 | margin-bottom: $base-spacing / 2; 10 | padding-left: $base-spacing; 11 | } 12 | 13 | &%default-ol { 14 | list-style-type: decimal; 15 | margin-bottom: $base-spacing / 2; 16 | padding-left: $base-spacing; 17 | } 18 | } 19 | 20 | dl { 21 | margin-bottom: $base-spacing / 2; 22 | 23 | dt { 24 | font-weight: bold; 25 | margin-top: $base-spacing / 2; 26 | } 27 | 28 | dd { 29 | margin: 0; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_unpack.scss: -------------------------------------------------------------------------------- 1 | // Convert shorthand to the 4-value syntax 2 | 3 | @function unpack($shorthand) { 4 | @if length($shorthand) == 1 { 5 | @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); 6 | } 7 | @else if length($shorthand) == 2 { 8 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); 9 | } 10 | @else if length($shorthand) == 3 { 11 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); 12 | } 13 | @else { 14 | @return $shorthand; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_radial-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-positions-parser($gradient-pos) { 2 | $shape-size: nth($gradient-pos, 1); 3 | $pos: nth($gradient-pos, 2); 4 | $shape-size-spec: _shape-size-stripper($shape-size); 5 | 6 | $pre-spec: unquote(if($pos, "#{$pos}, ", null)) 7 | unquote(if($shape-size, "#{$shape-size},", null)); 8 | $pos-spec: if($pos, "at #{$pos}", null); 9 | 10 | $spec: "#{$shape-size-spec} #{$pos-spec}"; 11 | 12 | // Add comma 13 | @if ($spec != ' ') { 14 | $spec: "#{$spec}," 15 | } 16 | 17 | @return $pre-spec $spec; 18 | } 19 | -------------------------------------------------------------------------------- /resources/vendor/sass/base/_base.scss: -------------------------------------------------------------------------------- 1 | /* Bitters 0.10.0 2 | * http://bitters.bourbon.io 3 | * Copyright 2013-2014 thoughtbot, inc. 4 | * MIT License */ 5 | 6 | // Variables 7 | @import "variables"; 8 | 9 | // Neat Settings -- uncomment if using Neat -- must be imported before Neat 10 | // @import "grid-settings"; 11 | 12 | // Extends 13 | @import "extends/button"; 14 | @import "extends/clearfix"; 15 | @import "extends/errors"; 16 | @import "extends/flashes"; 17 | @import "extends/hide-text"; 18 | 19 | // Typography and Elements 20 | @import "typography"; 21 | @import "forms"; 22 | @import "tables"; 23 | @import "lists"; 24 | @import "buttons"; 25 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_shift.scss: -------------------------------------------------------------------------------- 1 | @mixin shift($n-columns: 1) { 2 | @include shift-in-context($n-columns); 3 | } 4 | 5 | @mixin shift-in-context($shift: $columns of $container-columns) { 6 | $n-columns: nth($shift, 1); 7 | $parent-columns: container-shift($shift) !global; 8 | 9 | $direction: get-direction($layout-direction, $default-layout-direction); 10 | $opposite-direction: get-opposite-direction($direction); 11 | 12 | margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns); 13 | 14 | // Reset nesting context 15 | $parent-columns: $grid-columns !global; 16 | } 17 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // Modern micro clearfix provides an easy way to contain floats without adding additional markup. 2 | // 3 | // Example usage: 4 | // 5 | // // Contain all floats within .wrapper 6 | // .wrapper { 7 | // @include clearfix; 8 | // .content, 9 | // .sidebar { 10 | // float : left; 11 | // } 12 | // } 13 | 14 | @mixin clearfix { 15 | &:after { 16 | content:""; 17 | display:table; 18 | clear:both; 19 | } 20 | } 21 | 22 | // Acknowledgements 23 | // Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php) 24 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/home/seabre/projects/inviteyoself/resources/vendor/sass/base/_base.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | da39a3ee5e6b4b0d3255bfef95601890afd80709 3 | o:Sass::Tree::RootNode 4 | :@children[:@templateI":ET: 5 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso; ; i;i: 6 | @fileI"\(NOT IMPORTED) /home/seabre/projects/inviteyoself/resources/vendor/sass/base/_base.scss;T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor;T:@same_name_warningso:Set: 8 | @hash{: @options{ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/neat/_neat.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | da39a3ee5e6b4b0d3255bfef95601890afd80709 3 | o:Sass::Tree::RootNode 4 | :@children[:@templateI":ET: 5 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso; ; i;i: 6 | @fileI"c(NOT IMPORTED) /home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/neat/_neat.scss;T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor;T:@same_name_warningso:Set: 8 | @hash{: @options{ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/_bourbon.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | da39a3ee5e6b4b0d3255bfef95601890afd80709 3 | o:Sass::Tree::RootNode 4 | :@children[:@templateI":ET: 5 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso; ; i;i: 6 | @fileI"i(NOT IMPORTED) /home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/_bourbon.scss;T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor;T:@same_name_warningso:Set: 8 | @hash{: @options{ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/neat/_neat-helpers.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | da39a3ee5e6b4b0d3255bfef95601890afd80709 3 | o:Sass::Tree::RootNode 4 | :@children[:@templateI":ET: 5 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso; ; i;i: 6 | @fileI"k(NOT IMPORTED) /home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/neat/_neat-helpers.scss;T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor;T:@same_name_warningso:Set: 8 | @hash{: @options{ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/normalize/_normalize.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | da39a3ee5e6b4b0d3255bfef95601890afd80709 3 | o:Sass::Tree::RootNode 4 | :@children[:@templateI":ET: 5 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso; ; i;i: 6 | @fileI"m(NOT IMPORTED) /home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/normalize/_normalize.scss;T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor;T:@same_name_warningso:Set: 8 | @hash{: @options{ -------------------------------------------------------------------------------- /resources/vendor/sass/base/extends/_flashes.scss: -------------------------------------------------------------------------------- 1 | @mixin flash($color) { 2 | background: $color; 3 | color: darken($color, 60); 4 | 5 | a { 6 | color: darken($color, 70); 7 | 8 | &:hover { 9 | color: darken($color, 90); 10 | } 11 | } 12 | } 13 | 14 | %flash-base { 15 | font-weight: bold; 16 | margin-bottom: $base-spacing / 2; 17 | padding: $base-spacing / 2; 18 | } 19 | 20 | %flash-alert { 21 | @extend %flash-base; 22 | @include flash($alert-color); 23 | } 24 | 25 | %flash-error { 26 | @extend %flash-base; 27 | @include flash($error-color); 28 | } 29 | 30 | %flash-notice { 31 | @extend %flash-base; 32 | @include flash($notice-color); 33 | } 34 | 35 | %flash-success { 36 | @extend %flash-base; 37 | @include flash($success-color); 38 | } 39 | -------------------------------------------------------------------------------- /resources/templates/invite.html: -------------------------------------------------------------------------------- 1 | {% extends "templates/base.html" %} 2 | {% block content %} 3 |

This slack team has open invites! Invite yoself!

4 | 5 | {% if not fresh %} 6 | {% if not valid %} 7 |
8 | {{errors.email}} 9 |
10 | {% else %} 11 |
12 | Success! You should receive an invite pretty soon. 13 |
14 | {% endif %} 15 | {% endif %} 16 |
17 |

18 | Your Email Address 19 | 20 |

21 |
22 | 23 |
24 |
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /src/inviteyoself/middleware.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.middleware 2 | (:require [taoensso.timbre :as timbre] 3 | [selmer.parser :as parser] 4 | [environ.core :refer [env]] 5 | [selmer.middleware :refer [wrap-error-page]] 6 | [prone.middleware :refer [wrap-exceptions]] 7 | [noir-exception.core :refer [wrap-internal-error]])) 8 | 9 | (defn log-request [handler] 10 | (fn [req] 11 | (timbre/debug req) 12 | (handler req))) 13 | 14 | (def development-middleware 15 | [wrap-error-page 16 | wrap-exceptions]) 17 | 18 | (def production-middleware 19 | [#(wrap-internal-error % :log (fn [e] (timbre/error e)))]) 20 | 21 | (defn load-middleware [] 22 | (concat (when (env :dev) development-middleware) 23 | production-middleware)) 24 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_convert-units.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for str-to-num fn. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _convert-units($number, $unit) { 6 | $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn'; 7 | $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn; 8 | $index: index($strings, $unit); 9 | 10 | @if not $index { 11 | @warn "Unknown unit `#{$unit}`."; 12 | @return false; 13 | } 14 | @return $number * nth($units, $index); 15 | } 16 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/b39e89d657d48732e3237f05b55bec21a5a196e6/_grid-settings.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 527bee6724cfec96eb25e5891a37996e2c43124b 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::ImportNode :@imported_filenameI"vendor/neat/neat-helpers:ET;[:@template0: 4 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i(: 5 | @fileI"Q/home/seabre/projects/inviteyoself/resources/vendor/sass/_grid-settings.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 6 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 7 | @hash{: @options{:@imported_file0; 8 | I")@import "vendor/neat/neat-helpers"; 9 | ; T; i; o; ;o;; i;i;o;; i;i;@ ;@:@has_childrenT;@ -------------------------------------------------------------------------------- /src/inviteyoself/db/core.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.db.core 2 | (:use korma.core 3 | [korma.db :only (defdb)]) 4 | (:require [inviteyoself.db.schema :as schema])) 5 | 6 | (defdb db schema/db-spec) 7 | 8 | (defentity invites) 9 | 10 | (defn create-invite [invite] 11 | (insert invites 12 | (values invite))) 13 | 14 | (defn unique? [email] 15 | (= (:cnt 16 | (first 17 | (select invites 18 | (where (= :email email)) 19 | (aggregate (count :*) :cnt)))) 0)) 20 | 21 | (defn all-not-invited [lmt] 22 | (select invites 23 | (where (= :invited false)) 24 | (limit lmt))) 25 | 26 | (defn delete-all-invited [] 27 | (delete invites 28 | (where (= :invited true)))) 29 | 30 | (defn set-invited [ids] 31 | (update invites 32 | (set-fields {:invited true}) 33 | (where {:id [in ids]}))) 34 | 35 | -------------------------------------------------------------------------------- /resources/vendor/sass/screen.scss: -------------------------------------------------------------------------------- 1 | @import "vendor/bourbon/bourbon"; 2 | @import "grid-settings"; 3 | @import "vendor/neat/neat"; 4 | @import "base/base"; 5 | @import "vendor/normalize/normalize"; 6 | 7 | body { 8 | background-image:url('/img/seamless_paper_texture.png'); 9 | background-repeat:repeat; 10 | } 11 | 12 | header { 13 | text-align: center; 14 | h1 { 15 | font-family: 'Pinyon Script', cursive; 16 | font-size: $base-font-size * 4; 17 | } 18 | } 19 | 20 | section { 21 | @include outer-container; 22 | max-width: em(640); 23 | 24 | form { 25 | @include span-columns(12); 26 | } 27 | } 28 | 29 | #invite_submit { 30 | //margin-left: auto; 31 | //margin-right: 0; 32 | text-align: right; 33 | } 34 | 35 | .error { 36 | @extend %flash-error; 37 | } 38 | 39 | .success { 40 | @extend %flash-success; 41 | } 42 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_transition-property-name.scss: -------------------------------------------------------------------------------- 1 | // Return vendor-prefixed property names if appropriate 2 | // Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background 3 | //************************************************************************// 4 | @function transition-property-names($props, $vendor: false) { 5 | $new-props: (); 6 | 7 | @each $prop in $props { 8 | $new-props: append($new-props, transition-property-name($prop, $vendor), comma); 9 | } 10 | 11 | @return $new-props; 12 | } 13 | 14 | @function transition-property-name($prop, $vendor: false) { 15 | // put other properties that need to be prefixed here aswell 16 | @if $vendor and $prop == transform { 17 | @return unquote('-'+$vendor+'-'+$prop); 18 | } 19 | @else { 20 | @return $prop; 21 | } 22 | } -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_position.scss: -------------------------------------------------------------------------------- 1 | @mixin position ($position: relative, $coordinates: null null null null) { 2 | 3 | @if type-of($position) == list { 4 | $coordinates: $position; 5 | $position: relative; 6 | } 7 | 8 | $coordinates: unpack($coordinates); 9 | 10 | $top: nth($coordinates, 1); 11 | $right: nth($coordinates, 2); 12 | $bottom: nth($coordinates, 3); 13 | $left: nth($coordinates, 4); 14 | 15 | position: $position; 16 | 17 | @if ($top and $top == auto) or (type-of($top) == number) { 18 | top: $top; 19 | } 20 | 21 | @if ($right and $right == auto) or (type-of($right) == number) { 22 | right: $right; 23 | } 24 | 25 | @if ($bottom and $bottom == auto) or (type-of($bottom) == number) { 26 | bottom: $bottom; 27 | } 28 | 29 | @if ($left and $left == auto) or (type-of($left) == number) { 30 | left: $left; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_linear-angle-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-angle-parser($image, $first-val, $prefix, $suffix) { 3 | $offset: null; 4 | $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); 5 | $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); 6 | 7 | @if ($unit-long == "grad") or 8 | ($unit-long == "turn") { 9 | $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); 10 | } 11 | 12 | @else if ($unit-short == "deg") or 13 | ($unit-short == "rad") { 14 | $offset: if($unit-short == "deg", -90 * 3, 1.6rad); 15 | } 16 | 17 | @if $offset { 18 | $num: _str-to-num($first-val); 19 | 20 | @return ( 21 | webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, 22 | spec-image: $image 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/inviteyoself/core.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.core 2 | (:require 3 | [inviteyoself.handler :refer [app]] 4 | [ring.middleware.reload :as reload] 5 | [org.httpkit.server :as http-kit] 6 | [taoensso.timbre :as timbre]) 7 | (:gen-class)) 8 | 9 | ;contains function that can be used to stop http-kit server 10 | (defonce server 11 | (atom nil)) 12 | 13 | (defn dev? [args] (some #{"-dev"} args)) 14 | 15 | (defn parse-port [args] 16 | (if-let [port (->> args (remove #{"-dev"}) first)] 17 | (Integer/parseInt port) 18 | 3000)) 19 | 20 | (defn- start-server [port args] 21 | (reset! server 22 | (http-kit/run-server 23 | (if (dev? args) (reload/wrap-reload app) app) 24 | {:port port}))) 25 | 26 | (defn- stop-server [] 27 | (@server)) 28 | 29 | (defn -main [& args] 30 | (let [port (parse-port args)] 31 | (start-server port args) 32 | (timbre/info "server started on port:" port))) 33 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/b41d6e719d67c490c9cc4a70cd1a56c730fd53a7/_asset-pipeline.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | bff5ef8a859a7e5f467323262aeb71047fda6814 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::VariableNode : 4 | @nameI"asset-pipeline:ET: 5 | @expro: Sass::Script::Tree::Literal : @valueo:Sass::Script::Value::Bool; F: @options{: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position;i: @offseti: @end_poso;;i;i: 7 | @fileI"j/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/settings/_asset-pipeline.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @guardedT: @global0;[;i;o; ;o;;i;i;o;;i;i%;@;@;@ :@templateI"&$asset-pipeline: false !default; 10 | ; T;i;o; ;o;;i;i;o;;i;i;@;@:@has_childrenT;@ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_border-radius.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Shorthand Border-radius mixins 3 | //************************************************************************// 4 | @mixin border-top-radius($radii) { 5 | @include prefixer(border-top-left-radius, $radii, spec); 6 | @include prefixer(border-top-right-radius, $radii, spec); 7 | } 8 | 9 | @mixin border-bottom-radius($radii) { 10 | @include prefixer(border-bottom-left-radius, $radii, spec); 11 | @include prefixer(border-bottom-right-radius, $radii, spec); 12 | } 13 | 14 | @mixin border-left-radius($radii) { 15 | @include prefixer(border-top-left-radius, $radii, spec); 16 | @include prefixer(border-bottom-left-radius, $radii, spec); 17 | } 18 | 19 | @mixin border-right-radius($radii) { 20 | @include prefixer(border-top-right-radius, $radii, spec); 21 | @include prefixer(border-bottom-right-radius, $radii, spec); 22 | } 23 | -------------------------------------------------------------------------------- /resources/vendor/config.rb: -------------------------------------------------------------------------------- 1 | require 'compass/import-once/activate' 2 | # Require any additional compass plugins here. 3 | 4 | # Set this to the root of your project when deployed: 5 | http_path = "../public/" 6 | css_dir = "../public/css" 7 | sass_dir = "sass" 8 | images_dir = "../public/img" 9 | javascripts_dir = "../js" 10 | 11 | # You can select your preferred output style here (can be overridden via the command line): 12 | output_style = :compressed 13 | 14 | # To enable relative paths to assets via compass helper functions. Uncomment: 15 | # relative_assets = true 16 | 17 | # To disable debugging comments that display the original location of your selectors. Uncomment: 18 | # line_comments = false 19 | 20 | 21 | # If you prefer the indented syntax, you might want to regenerate this 22 | # project again passing --syntax sass, or you can uncomment this: 23 | # preferred_syntax = :sass 24 | # and then run: 25 | # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 26 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_render-gradients.scss: -------------------------------------------------------------------------------- 1 | // User for linear and radial gradients within background-image or border-image properties 2 | 3 | @function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { 4 | $pre-spec: null; 5 | $spec: null; 6 | $vendor-gradients: null; 7 | @if $gradient-type == linear { 8 | @if $gradient-positions { 9 | $pre-spec: nth($gradient-positions, 1); 10 | $spec: nth($gradient-positions, 2); 11 | } 12 | } 13 | @else if $gradient-type == radial { 14 | $pre-spec: nth($gradient-positions, 1); 15 | $spec: nth($gradient-positions, 2); 16 | } 17 | 18 | @if $vendor { 19 | $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); 20 | } 21 | @else if $vendor == false { 22 | $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; 23 | $vendor-gradients: unquote($vendor-gradients); 24 | } 25 | @return $vendor-gradients; 26 | } 27 | -------------------------------------------------------------------------------- /resources/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | inviteyoself 10 | 11 | 12 | {% style "http://fonts.googleapis.com/css?family=Pinyon+Script" %} 13 | {% style "/css/screen.css" %} 14 | 15 | 16 | 17 | 18 |
19 |

inviteyoself

20 |
21 |
22 | {% block content %} 23 | {% endblock %} 24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/f1bf4afd29a22151b1c7e206b5b01027a1c207b6/_reset.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | df78759f0fe6b88a633d20d26581ca4cdb829111 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::ImportNode :@imported_filenameI"reset/utilities:ET;[:@template0:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position: 4 | @linei: @offseti: @end_poso;;i;i: 5 | @fileI"^/home/seabre/.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0/stylesheets/compass/_reset.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 6 | @rootI"J/home/seabre/.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0/stylesheets; F:@same_name_warningso:Set: 7 | @hash{;i: @options{:@imported_file0o:Sass::Tree::MixinNode: 8 | @nameI"global-reset; T: 9 | @args[:@keywords{: @splat0:@kwarg_splat0;[;i; o; ; o;;i;i;o;;i;i;@ ;@;@; 10 | I"8@import "reset/utilities"; 11 | 12 | @include global-reset; 13 | ; T:@has_childrenT;@;i; o; ; o;;i;i;o;;i;i;@ ;@ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/b41d6e719d67c490c9cc4a70cd1a56c730fd53a7/_px-to-em.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 14880c373629b1e71abf17d6dc147ca56126856a 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::VariableNode : 4 | @nameI" em-base:ET: 5 | @expro: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::Number 6 | ; i:@numerator_units[I"px; T:@denominator_units[:@originalI" 16px; F: @options{: 7 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position;i: @offseti: @end_poso;;i;i: 8 | @fileI"d/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/settings/_px-to-em.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 9 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 10 | @hash{:@filename@: @guardedT: @global0;[;i;o; ;o;;i;i;o;;i;i;@;@;@:@templateI"$em-base: 16px !default; 11 | ; T;i;o; ;o;;i;i;o;;i;i;@;@:@has_childrenT;@ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_retina-image.scss: -------------------------------------------------------------------------------- 1 | @mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { 2 | @if $asset-pipeline { 3 | background-image: image-url("#{$filename}.#{$extension}"); 4 | } 5 | @else { 6 | background-image: url("#{$filename}.#{$extension}"); 7 | } 8 | 9 | @include hidpi { 10 | @if $asset-pipeline { 11 | @if $retina-filename { 12 | background-image: image-url("#{$retina-filename}.#{$extension}"); 13 | } 14 | @else { 15 | background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); 16 | } 17 | } 18 | 19 | @else { 20 | @if $retina-filename { 21 | background-image: url("#{$retina-filename}.#{$extension}"); 22 | } 23 | @else { 24 | background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); 25 | } 26 | } 27 | 28 | background-size: $background-size; 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_linear-side-corner-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { 3 | $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 ); 4 | $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); 5 | $val-3: null; 6 | $has-val-3: str-index($val-2, " "); 7 | 8 | @if $has-val-3 { 9 | $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); 10 | $val-2: str-slice($val-2, 0, $has-val-3 - 1); 11 | } 12 | 13 | $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); 14 | $pos: unquote($pos + ""); 15 | 16 | // Use old spec for webkit 17 | @if $val-1 == "to" { 18 | @return ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ); 22 | } 23 | 24 | // Bring the code up to spec 25 | @else { 26 | @return ( 27 | webkit-image: -webkit- + $image, 28 | spec-image: $prefix + "to " + $pos + $suffix 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Sean Brewer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_media.scss: -------------------------------------------------------------------------------- 1 | @mixin media($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | @if length($query) == 1 { 3 | @media screen and ($default-feature: nth($query, 1)) { 4 | $default-grid-columns: $grid-columns; 5 | $grid-columns: $total-columns !global; 6 | @content; 7 | $grid-columns: $default-grid-columns !global; 8 | } 9 | } 10 | 11 | @else { 12 | $loopTo: length($query); 13 | $mediaQuery: 'screen and '; 14 | $default-grid-columns: $grid-columns; 15 | $grid-columns: $total-columns !global; 16 | 17 | @if length($query) % 2 != 0 { 18 | $grid-columns: nth($query, $loopTo) !global; 19 | $loopTo: $loopTo - 1; 20 | } 21 | 22 | $i: 1; 23 | @while $i <= $loopTo { 24 | $mediaQuery: $mediaQuery + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') '; 25 | 26 | @if ($i + 1) != $loopTo { 27 | $mediaQuery: $mediaQuery + 'and '; 28 | } 29 | 30 | $i: $i + 2; 31 | } 32 | 33 | @media #{$mediaQuery} { 34 | @content; 35 | $grid-columns: $default-grid-columns !global; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_font-face.scss: -------------------------------------------------------------------------------- 1 | // Order of the includes matters, and it is: normal, bold, italic, bold+italic. 2 | 3 | @mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: $asset-pipeline) { 4 | @font-face { 5 | font-family: $font-family; 6 | font-weight: $weight; 7 | font-style: $style; 8 | 9 | @if $asset-pipeline == true { 10 | src: font-url('#{$file-path}.eot'); 11 | src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'), 12 | font-url('#{$file-path}.woff') format('woff'), 13 | font-url('#{$file-path}.ttf') format('truetype'), 14 | font-url('#{$file-path}.svg##{$font-family}') format('svg'); 15 | } @else { 16 | src: url('#{$file-path}.eot'); 17 | src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'), 18 | url('#{$file-path}.woff') format('woff'), 19 | url('#{$file-path}.ttf') format('truetype'), 20 | url('#{$file-path}.svg##{$font-family}') format('svg'); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/b39e89d657d48732e3237f05b55bec21a5a196e6/ie.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 55d03cbe8dc4482082815585822d80503557fdcb 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::CommentNode 4 | : @value[I"/* Welcome to Compass. Use this file to write IE specific override styles. 5 | * Import this file using the following HTML or equivalent: 6 | * */:ET: 9 | @type: normal;[: 10 | @linei: @options{:@templateI"/* Welcome to Compass. Use this file to write IE specific override styles. 11 | * Import this file using the following HTML or equivalent: 12 | * */ 15 | ; T:@has_childrenT; @ ; i:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i: 16 | @fileI"E/home/seabre/projects/inviteyoself/resources/vendor/sass/ie.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 17 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 18 | @hash{ -------------------------------------------------------------------------------- /src/inviteyoself/layout.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.layout 2 | (:require [selmer.parser :as parser] 3 | [clojure.string :as s] 4 | [ring.util.response :refer [content-type response]] 5 | [compojure.response :refer [Renderable]] 6 | [environ.core :refer [env]])) 7 | 8 | (def template-path "templates/") 9 | 10 | (deftype RenderableTemplate [template params] 11 | Renderable 12 | (render [this request] 13 | (content-type 14 | (->> (assoc params 15 | (keyword (s/replace template #".html" "-selected")) "active" 16 | :dev (env :dev) 17 | :servlet-context 18 | (if-let [context (:servlet-context request)] 19 | ;; If we're not inside a serlvet environment (for 20 | ;; example when using mock requests), then 21 | ;; .getContextPath might not exist 22 | (try (.getContextPath context) 23 | (catch IllegalArgumentException _ context)))) 24 | (parser/render-file (str template-path template)) 25 | response) 26 | "text/html; charset=utf-8"))) 27 | 28 | (defn render [template & [params]] 29 | (RenderableTemplate. template params)) 30 | 31 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/1e27e06ae485caf682eec0bdb211928b18002d0c/_clearfix.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 2662d9bf50fbc383f6e4178b563be47a98f3a1b4 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::RuleNode: 4 | @rule[I"%clearfix:ET:@selector_source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position: 5 | @linei: @offseti: @end_poso; ;i;i: 6 | @fileI"Y/home/seabre/projects/inviteyoself/resources/vendor/sass/base/extends/_clearfix.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 8 | @hash{: 9 | @tabsi;[o:Sass::Tree::MixinNode: 10 | @nameI" clearfix; T: 11 | @args[:@keywords{: @splat0:@kwarg_splat0;[;i:@source_rangeo; ; o; ;i;i;o; ;i;i;@ ;@: @options{;i; o; ; o; ;i;i;o; ;i;i;@ ;@:@has_childrenT;!@:@parsed_ruleso:"Sass::Selector::CommaSequence: @members[o:Sass::Selector::Sequence;%[o:#Sass::Selector::SimpleSequence ;%[o: Sass::Selector::Placeholder;[I" clearfix; T;i:@filenameI"; T: @subject0: @sourceso;;{; o; ; o; ;i;i;o; ;i;i;@(;0;i;)@(;i;)@(:@templateI"(%clearfix { 12 | @include clearfix; 13 | } 14 | ; T;i; o; ; o; ;i;i;o; ;i;i;@ ;@;"T;!@ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/1e27e06ae485caf682eec0bdb211928b18002d0c/_hide-text.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | bbebf84ee0a20da03358f70bba39c050742bb539 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::RuleNode: 4 | @rule[I"%hide-text:ET:@selector_source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position: 5 | @linei: @offseti: @end_poso; ;i;i: 6 | @fileI"Z/home/seabre/projects/inviteyoself/resources/vendor/sass/base/extends/_hide-text.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 7 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 8 | @hash{: 9 | @tabsi;[o:Sass::Tree::MixinNode: 10 | @nameI"hide-text; T: 11 | @args[:@keywords{: @splat0:@kwarg_splat0;[;i:@source_rangeo; ; o; ;i;i;o; ;i;i;@ ;@: @options{;i; o; ; o; ;i;i;o; ;i;i;@ ;@:@has_childrenT;!@:@parsed_ruleso:"Sass::Selector::CommaSequence: @members[o:Sass::Selector::Sequence;%[o:#Sass::Selector::SimpleSequence ;%[o: Sass::Selector::Placeholder;[I"hide-text; T;i:@filenameI"; T: @subject0: @sourceso;;{; o; ; o; ;i;i;o; ;i;i;@(;0;i;)@(;i;)@(:@templateI"*%hide-text { 12 | @include hide-text; 13 | } 14 | ; T;i; o; ; o; ;i;i;o; ;i;i;@ ;@;"T;!@ -------------------------------------------------------------------------------- /src/inviteyoself/repl.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.repl 2 | (:use inviteyoself.handler 3 | ring.server.standalone 4 | [ring.middleware file-info file])) 5 | 6 | (defonce server (atom nil)) 7 | 8 | (defn get-handler [] 9 | ;; #'app expands to (var app) so that when we reload our code, 10 | ;; the server is forced to re-resolve the symbol in the var 11 | ;; rather than having its own copy. When the root binding 12 | ;; changes, the server picks it up without having to restart. 13 | (-> #'app 14 | ; Makes static assets in $PROJECT_DIR/resources/public/ available. 15 | (wrap-file "resources") 16 | ; Content-Type, Content-Length, and Last Modified headers for files in body 17 | (wrap-file-info))) 18 | 19 | (defn start-server 20 | "used for starting the server in development mode from REPL" 21 | [& [port]] 22 | (let [port (if port (Integer/parseInt port) 3000)] 23 | (reset! server 24 | (serve (get-handler) 25 | {:port port 26 | :init init 27 | :auto-reload? true 28 | :destroy destroy 29 | :join? false})) 30 | (println (str "You can view the site at http://localhost:" port)))) 31 | 32 | (defn stop-server [] 33 | (.stop @server) 34 | (reset! server nil)) 35 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_linear-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 0, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $has-multiple-vals: str-index($first-val, " "); 12 | $has-single-position: unquote(_position-flipper($first-val) + ""); 13 | $has-angle: _is-num(str-slice($first-val, 0, 0)); 14 | 15 | @if $has-multiple-vals { 16 | $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); 17 | } 18 | 19 | @else if $has-single-position != "" { 20 | $pos: unquote($has-single-position + ""); 21 | 22 | $gradients: ( 23 | webkit-image: -webkit- + $image, 24 | spec-image: $prefix + "to " + $pos + $suffix 25 | ); 26 | } 27 | 28 | @else if $has-angle { 29 | // Rotate degree for webkit 30 | $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); 31 | } 32 | 33 | @else { 34 | $gradients: ( 35 | webkit-image: -webkit- + $image, 36 | spec-image: $image 37 | ); 38 | } 39 | 40 | @return $gradients; 41 | } 42 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_keyframes.scss: -------------------------------------------------------------------------------- 1 | // Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content 2 | @mixin keyframes($name) { 3 | $original-prefix-for-webkit: $prefix-for-webkit; 4 | $original-prefix-for-mozilla: $prefix-for-mozilla; 5 | $original-prefix-for-microsoft: $prefix-for-microsoft; 6 | $original-prefix-for-opera: $prefix-for-opera; 7 | $original-prefix-for-spec: $prefix-for-spec; 8 | 9 | @if $original-prefix-for-webkit { 10 | @include disable-prefix-for-all(); 11 | $prefix-for-webkit: true !global; 12 | @-webkit-keyframes #{$name} { 13 | @content; 14 | } 15 | } 16 | @if $original-prefix-for-mozilla { 17 | @include disable-prefix-for-all(); 18 | $prefix-for-mozilla: true !global; 19 | @-moz-keyframes #{$name} { 20 | @content; 21 | } 22 | } 23 | 24 | $prefix-for-webkit: $original-prefix-for-webkit !global; 25 | $prefix-for-mozilla: $original-prefix-for-mozilla !global; 26 | $prefix-for-microsoft: $original-prefix-for-microsoft !global; 27 | $prefix-for-opera: $original-prefix-for-opera !global; 28 | $prefix-for-spec: $original-prefix-for-spec !global; 29 | 30 | @if $original-prefix-for-spec { 31 | @keyframes #{$name} { 32 | @content; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @mixin grid-column-gradient($values...) { 2 | background-image: deprecated-webkit-gradient(linear, left top, left bottom, $values); 3 | background-image: -webkit-linear-gradient(left, $values); 4 | background-image: -moz-linear-gradient(left, $values); 5 | background-image: -ms-linear-gradient(left, $values); 6 | background-image: -o-linear-gradient(left, $values); 7 | background-image: unquote("linear-gradient(left, #{$values})"); 8 | } 9 | 10 | @if $visual-grid == true or $visual-grid == yes { 11 | body:before { 12 | content: ''; 13 | display: inline-block; 14 | @include grid-column-gradient(gradient-stops($grid-columns)); 15 | height: 100%; 16 | left: 0; 17 | margin: 0 auto; 18 | max-width: $max-width; 19 | opacity: $visual-grid-opacity; 20 | position: fixed; 21 | right: 0; 22 | width: 100%; 23 | pointer-events: none; 24 | 25 | @if $visual-grid-index == back { 26 | z-index: -1; 27 | } 28 | 29 | @else if $visual-grid-index == front { 30 | z-index: 9999; 31 | } 32 | 33 | @each $breakpoint in $visual-grid-breakpoints { 34 | @if $breakpoint != nil { 35 | @include media($breakpoint) { 36 | @include grid-column-gradient(gradient-stops($grid-columns)); 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_prefixer.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Example: @include prefixer(border-radius, $radii, webkit ms spec); 3 | //************************************************************************// 4 | // Variables located in /settings/_prefixer.scss 5 | 6 | @mixin prefixer ($property, $value, $prefixes) { 7 | @each $prefix in $prefixes { 8 | @if $prefix == webkit { 9 | @if $prefix-for-webkit { 10 | -webkit-#{$property}: $value; 11 | } 12 | } 13 | @else if $prefix == moz { 14 | @if $prefix-for-mozilla { 15 | -moz-#{$property}: $value; 16 | } 17 | } 18 | @else if $prefix == ms { 19 | @if $prefix-for-microsoft { 20 | -ms-#{$property}: $value; 21 | } 22 | } 23 | @else if $prefix == o { 24 | @if $prefix-for-opera { 25 | -o-#{$property}: $value; 26 | } 27 | } 28 | @else if $prefix == spec { 29 | @if $prefix-for-spec { 30 | #{$property}: $value; 31 | } 32 | } 33 | @else { 34 | @warn "Unrecognized prefix: #{$prefix}"; 35 | } 36 | } 37 | } 38 | 39 | @mixin disable-prefix-for-all() { 40 | $prefix-for-webkit: false !global; 41 | $prefix-for-mozilla: false !global; 42 | $prefix-for-microsoft: false !global; 43 | $prefix-for-opera: false !global; 44 | $prefix-for-spec: false !global; 45 | } 46 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_private.scss: -------------------------------------------------------------------------------- 1 | $parent-columns: $grid-columns !default; 2 | $fg-column: $column; 3 | $fg-gutter: $gutter; 4 | $fg-max-columns: $grid-columns; 5 | $container-display-table: false !default; 6 | $layout-direction: nil !default; 7 | 8 | @function flex-grid($columns, $container-columns: $fg-max-columns) { 9 | $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; 10 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 11 | @return percentage($width / $container-width); 12 | } 13 | 14 | @function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { 15 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 16 | @return percentage($gutter / $container-width); 17 | } 18 | 19 | @function grid-width($n) { 20 | @return $n * $gw-column + ($n - 1) * $gw-gutter; 21 | } 22 | 23 | @function get-parent-columns($columns) { 24 | @if $columns != $grid-columns { 25 | $parent-columns: $columns !global; 26 | } @else { 27 | $parent-columns: $grid-columns !global; 28 | } 29 | 30 | @return $parent-columns; 31 | } 32 | 33 | @function is-display-table($container-is-display-table, $display) { 34 | $display-table: false; 35 | 36 | @if $container-is-display-table == true { 37 | $display-table: true; 38 | } @else if $display == table { 39 | $display-table: true; 40 | } 41 | 42 | @return $display-table; 43 | } 44 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_span-columns.scss: -------------------------------------------------------------------------------- 1 | @mixin span-columns($span: $columns of $container-columns, $display: block) { 2 | $columns: nth($span, 1); 3 | $container-columns: container-span($span); 4 | 5 | // Set nesting context (used by shift()) 6 | $parent-columns: get-parent-columns($container-columns) !global; 7 | 8 | $direction: get-direction($layout-direction, $default-layout-direction); 9 | $opposite-direction: get-opposite-direction($direction); 10 | 11 | $display-table: is-display-table($container-display-table, $display); 12 | 13 | @if $display-table { 14 | display: table-cell; 15 | width: percentage($columns / $container-columns); 16 | } @else { 17 | float: #{$opposite-direction}; 18 | 19 | @if $display != no-display { 20 | display: block; 21 | } 22 | 23 | @if $display == collapse { 24 | @warn "The 'collapse' argument will be deprecated. Use 'block-collapse' instead." 25 | } 26 | 27 | @if $display == collapse or $display == block-collapse { 28 | width: flex-grid($columns, $container-columns) + flex-gutter($container-columns); 29 | 30 | &:last-child { 31 | width: flex-grid($columns, $container-columns); 32 | } 33 | 34 | } @else { 35 | margin-#{$direction}: flex-gutter($container-columns); 36 | width: flex-grid($columns, $container-columns); 37 | 38 | &:last-child { 39 | margin-#{$direction}: 0; 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_columns.scss: -------------------------------------------------------------------------------- 1 | @mixin columns($arg: auto) { 2 | // || 3 | @include prefixer(columns, $arg, webkit moz spec); 4 | } 5 | 6 | @mixin column-count($int: auto) { 7 | // auto || integer 8 | @include prefixer(column-count, $int, webkit moz spec); 9 | } 10 | 11 | @mixin column-gap($length: normal) { 12 | // normal || length 13 | @include prefixer(column-gap, $length, webkit moz spec); 14 | } 15 | 16 | @mixin column-fill($arg: auto) { 17 | // auto || length 18 | @include prefixer(column-fill, $arg, webkit moz spec); 19 | } 20 | 21 | @mixin column-rule($arg) { 22 | // || || 23 | @include prefixer(column-rule, $arg, webkit moz spec); 24 | } 25 | 26 | @mixin column-rule-color($color) { 27 | @include prefixer(column-rule-color, $color, webkit moz spec); 28 | } 29 | 30 | @mixin column-rule-style($style: none) { 31 | // none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid 32 | @include prefixer(column-rule-style, $style, webkit moz spec); 33 | } 34 | 35 | @mixin column-rule-width ($width: none) { 36 | @include prefixer(column-rule-width, $width, webkit moz spec); 37 | } 38 | 39 | @mixin column-span($arg: none) { 40 | // none || all 41 | @include prefixer(column-span, $arg, webkit moz spec); 42 | } 43 | 44 | @mixin column-width($length: auto) { 45 | // auto || length 46 | @include prefixer(column-width, $length, webkit moz spec); 47 | } 48 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_str-to-num.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for linear/radial-gradient-parsers. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _str-to-num($string) { 6 | // Matrices 7 | $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; 8 | $numbers: 0 1 2 3 4 5 6 7 8 9; 9 | 10 | // Result 11 | $result: 0; 12 | $divider: 0; 13 | $minus: false; 14 | 15 | // Looping through all characters 16 | @for $i from 1 through str-length($string) { 17 | $character: str-slice($string, $i, $i); 18 | $index: index($strings, $character); 19 | 20 | @if $character == '-' { 21 | $minus: true; 22 | } 23 | 24 | @else if $character == '.' { 25 | $divider: 1; 26 | } 27 | 28 | @else { 29 | @if not $index { 30 | $result: if($minus, $result * -1, $result); 31 | @return _convert-units($result, str-slice($string, $i)); 32 | } 33 | 34 | $number: nth($numbers, $index); 35 | 36 | @if $divider == 0 { 37 | $result: $result * 10; 38 | } 39 | 40 | @else { 41 | // Move the decimal dot to the left 42 | $divider: $divider * 10; 43 | $number: $number / $divider; 44 | } 45 | 46 | $result: $result + $number; 47 | } 48 | } 49 | @return if($minus, $result * -1, $result); 50 | } 51 | -------------------------------------------------------------------------------- /src/inviteyoself/routes/invite.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.routes.invite 2 | (:require [compojure.core :refer :all] 3 | [inviteyoself.db.core :as invite] 4 | [red-tape.core :refer [defform]] 5 | [red-tape.cleaners :as cleaners] 6 | [inviteyoself.layout :as layout]) 7 | (:use [slingshot.slingshot :only [throw+]] 8 | [ring.util.response]) 9 | (:import [org.apache.commons.validator.routines EmailValidator])) 10 | 11 | (defn ensure-valid-email [email] 12 | (if (not (.isValid (EmailValidator/getInstance) email)) 13 | (throw+ "Email is not valid!") 14 | email)) 15 | 16 | (defn ensure-unique-email [email] 17 | (if (not (invite/unique? email)) 18 | (throw+ "You've already submitted an invite recently!") 19 | email)) 20 | 21 | (defform invite-form {} 22 | :email [clojure.string/trim 23 | cleaners/non-blank 24 | ensure-valid-email 25 | ensure-unique-email]) 26 | 27 | (defn handle-get 28 | ([req] 29 | (handle-get req (invite-form))) 30 | ([req form] 31 | (layout/render 32 | "invite.html" form))) 33 | 34 | (defn handle-post [req] 35 | (let [data (:params req) 36 | form (invite-form data)] 37 | (if (:valid form) 38 | (let [{:keys [email]} (:results form)] 39 | (invite/create-invite {:email email}) 40 | (handle-get req form)) 41 | (handle-get req form)))) 42 | 43 | 44 | (defroutes invite-routes 45 | (GET "/" [] handle-get) 46 | (POST "/" [] handle-post)) 47 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_linear-gradient.scss: -------------------------------------------------------------------------------- 1 | @mixin linear-gradient($pos, $G1, $G2: null, 2 | $G3: null, $G4: null, 3 | $G5: null, $G6: null, 4 | $G7: null, $G8: null, 5 | $G9: null, $G10: null, 6 | $fallback: null) { 7 | // Detect what type of value exists in $pos 8 | $pos-type: type-of(nth($pos, 1)); 9 | $pos-spec: null; 10 | $pos-degree: null; 11 | 12 | // If $pos is missing from mixin, reassign vars and add default position 13 | @if ($pos-type == color) or (nth($pos, 1) == "transparent") { 14 | $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5; 15 | $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos; 16 | $pos: null; 17 | } 18 | 19 | @if $pos { 20 | $positions: _linear-positions-parser($pos); 21 | $pos-degree: nth($positions, 1); 22 | $pos-spec: nth($positions, 2); 23 | } 24 | 25 | $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; 26 | 27 | // Set $G1 as the default fallback color 28 | $fallback-color: nth($G1, 1); 29 | 30 | // If $fallback is a color use that color as the fallback color 31 | @if (type-of($fallback) == color) or ($fallback == "transparent") { 32 | $fallback-color: $fallback; 33 | } 34 | 35 | background-color: $fallback-color; 36 | background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome 37 | background-image: unquote("linear-gradient(#{$pos-spec}#{$full})"); 38 | } 39 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_radial-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 0, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $is-spec-syntax: str-index($first-val, "at"); 12 | 13 | @if $is-spec-syntax and $is-spec-syntax > 1 { 14 | $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); 15 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 16 | $pos: append($pos, $keyword, comma); 17 | 18 | $gradients: ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ) 22 | } 23 | 24 | @else if $is-spec-syntax == 1 { 25 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 26 | 27 | $gradients: ( 28 | webkit-image: -webkit- + $prefix + $pos + $suffix, 29 | spec-image: $image 30 | ) 31 | } 32 | 33 | @else if str-index($image, "cover") or str-index($image, "contain") { 34 | @warn "Radial-gradient needs to be updated to conform to latest spec."; 35 | 36 | $gradients: ( 37 | webkit-image: null, 38 | spec-image: $image 39 | ) 40 | } 41 | 42 | @else { 43 | $gradients: ( 44 | webkit-image: -webkit- + $image, 45 | spec-image: $image 46 | ) 47 | } 48 | 49 | @return $gradients; 50 | } 51 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_background-image.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background-image property for adding multiple background images with 3 | // gradients, or for stringing multiple gradients together. 4 | //************************************************************************// 5 | 6 | @mixin background-image($images...) { 7 | $webkit-images: (); 8 | $spec-images: (); 9 | 10 | @each $image in $images { 11 | $webkit-image: (); 12 | $spec-image: (); 13 | 14 | @if (type-of($image) == string) { 15 | $url-str: str-slice($image, 0, 3); 16 | $gradient-type: str-slice($image, 0, 6); 17 | 18 | @if $url-str == "url" { 19 | $webkit-image: $image; 20 | $spec-image: $image; 21 | } 22 | 23 | @else if $gradient-type == "linear" { 24 | $gradients: _linear-gradient-parser($image); 25 | $webkit-image: map-get($gradients, webkit-image); 26 | $spec-image: map-get($gradients, spec-image); 27 | } 28 | 29 | @else if $gradient-type == "radial" { 30 | $gradients: _radial-gradient-parser($image); 31 | $webkit-image: map-get($gradients, webkit-image); 32 | $spec-image: map-get($gradients, spec-image); 33 | } 34 | } 35 | 36 | $webkit-images: append($webkit-images, $webkit-image, comma); 37 | $spec-images: append($spec-images, $spec-image, comma); 38 | } 39 | 40 | background-image: $webkit-images; 41 | background-image: $spec-images; 42 | } 43 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_radial-gradient.scss: -------------------------------------------------------------------------------- 1 | // Requires Sass 3.1+ 2 | @mixin radial-gradient($G1, $G2, 3 | $G3: null, $G4: null, 4 | $G5: null, $G6: null, 5 | $G7: null, $G8: null, 6 | $G9: null, $G10: null, 7 | $pos: null, 8 | $shape-size: null, 9 | $fallback: null) { 10 | 11 | $data: _radial-arg-parser($G1, $G2, $pos, $shape-size); 12 | $G1: nth($data, 1); 13 | $G2: nth($data, 2); 14 | $pos: nth($data, 3); 15 | $shape-size: nth($data, 4); 16 | 17 | $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; 18 | 19 | // Strip deprecated cover/contain for spec 20 | $shape-size-spec: _shape-size-stripper($shape-size); 21 | 22 | // Set $G1 as the default fallback color 23 | $first-color: nth($full, 1); 24 | $fallback-color: nth($first-color, 1); 25 | 26 | @if (type-of($fallback) == color) or ($fallback == "transparent") { 27 | $fallback-color: $fallback; 28 | } 29 | 30 | // Add Commas and spaces 31 | $shape-size: if($shape-size, '#{$shape-size}, ', null); 32 | $pos: if($pos, '#{$pos}, ', null); 33 | $pos-spec: if($pos, 'at #{$pos}', null); 34 | $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} '); 35 | 36 | background-color: $fallback-color; 37 | background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); 38 | background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); 39 | } 40 | -------------------------------------------------------------------------------- /src/inviteyoself/tasks/send_invites.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.tasks.send-invites 2 | (:require [inviteyoself.db.core :as invite] 3 | [environ.core :refer [env]]) 4 | (:use [clojure.java.shell :only [sh]]) 5 | (:gen-class)) 6 | 7 | (def invite-limit 10) 8 | (def automator-path "resources/inviteyoself-automator/inviteyoself-automator.js") 9 | 10 | (defn get-from-maps [kwd vec] 11 | (map #(kwd %) vec)) 12 | 13 | (defn automator-args [subdomain username password emails] 14 | ["casperjs" 15 | automator-path 16 | (str "--subdomain=" subdomain) 17 | (str "--username=" username) 18 | (str "--password=" password) 19 | (str "--emails=" emails)]) 20 | 21 | (defn run-inviteyoself-automator [subdomain username password emails] 22 | (:exit (apply sh (automator-args subdomain username password emails)))) 23 | 24 | (defn -main [& args] 25 | ; clean up folks already invited 26 | (invite/delete-all-invited) 27 | (if (> (count (invite/all-not-invited invite-limit)) 0) 28 | (let [not-invited (invite/all-not-invited invite-limit) 29 | status-code (run-inviteyoself-automator 30 | (env :slack-subdomain) 31 | (env :slack-username) 32 | (env :slack-password) 33 | (clojure.string/join "," (get-from-maps :email not-invited)))] 34 | (if (= status-code 0) 35 | (do 36 | (invite/set-invited (get-from-maps :id not-invited)) 37 | (println "Success!") 38 | (System/exit 0)) 39 | (do 40 | (println "Failed!") 41 | (System/exit 1)))) 42 | (println "No invitations need to be sent!"))) 43 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_omega.scss: -------------------------------------------------------------------------------- 1 | // Remove last element gutter 2 | @mixin omega($query: block, $direction: default) { 3 | $table: if(belongs-to(table, $query), true, false); 4 | $auto: if(belongs-to(auto, $query), true, false); 5 | 6 | @if $direction != default { 7 | @warn "The omega mixin will no longer take a $direction argument. To change the layout direction, use row($direction) or set $default-layout-direction instead." 8 | } @else { 9 | $direction: get-direction($layout-direction, $default-layout-direction); 10 | } 11 | 12 | @if $table { 13 | @warn "The omega mixin no longer removes padding in table layouts." 14 | } 15 | 16 | @if length($query) == 1 { 17 | @if $auto { 18 | &:last-child { 19 | margin-#{$direction}: 0; 20 | } 21 | } 22 | 23 | @else if contains-display-value($query) and $table == false { 24 | margin-#{$direction}: 0; 25 | } 26 | 27 | @else { 28 | @include nth-child($query, $direction); 29 | } 30 | } 31 | 32 | @else if length($query) == 2 { 33 | @if $auto { 34 | &:last-child { 35 | margin-#{$direction}: 0; 36 | } 37 | } 38 | 39 | @else { 40 | @include nth-child(nth($query, 1), $direction); 41 | } 42 | } 43 | 44 | @else { 45 | @warn "Too many arguments passed to the omega() mixin." 46 | } 47 | } 48 | 49 | @mixin nth-child($query, $direction) { 50 | $opposite-direction: get-opposite-direction($direction); 51 | 52 | &:nth-child(#{$query}) { 53 | margin-#{$direction}: 0; 54 | } 55 | 56 | @if type-of($query) == number { 57 | &:nth-child(#{$query}+1) { 58 | clear: $opposite-direction; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/85dfb5b9cba0d97f264918b4fde1516ed338276e/_golden-ratio.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 807ea5c7de586073f7b87c8112c54caa8e3f11ad 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::FunctionNode : 4 | @nameI"golden-ratio:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I" 6 | value; T:@underscored_nameI" 7 | value; T: 8 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i#: 9 | @fileI"i/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/functions/_golden-ratio.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 10 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 11 | @hash{:@filename@: @options{0[o; ;I"increment; T; I"increment; T; i;o; ;o;; i;i%;o;; i;i/;@;@;@;@0: @splat0;[o:Sass::Tree::ReturnNode 12 | : 13 | @expro: Sass::Script::Tree::Funcall;I"modular-scale; T; 14 | [o; ;I" 15 | value; T; I" 16 | value; T; i;o; ;o;; i;i;o;; i;i$;@;@;@;@o; ;I"increment; T; I"increment; T; i;o; ;o;; i;i&;o;; i;i0;@;@;@;@o; ;I" golden; T; I" golden; T; i;o; ;o;; i;i2;o;; i;i9;@;@;@;@:@keywordso:Sass::Util::NormalizedMap:@key_strings{: @map{;0:@kwarg_splat0; i;o; ;o;; i;i;o;; i;i:;@;@;@;@;[; i;o; ;o;; i;i;o;; i;i;@;@;@; i;o; ;o;; i;i;o;; i;i1;@;@:@has_childrenT;@:@templateI"i@function golden-ratio($value, $increment) { 17 | @return modular-scale($value, $increment, $golden) 18 | } 19 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;'T;@ -------------------------------------------------------------------------------- /resources/vendor/sass/base/_forms.scss: -------------------------------------------------------------------------------- 1 | fieldset { 2 | background: lighten($base-border-color, 10); 3 | border: $base-border; 4 | margin: 0 0 ($base-spacing / 2) 0; 5 | padding: $base-spacing; 6 | } 7 | 8 | input, 9 | label, 10 | select { 11 | display: block; 12 | font-family: $form-font-family; 13 | font-size: $form-font-size; 14 | } 15 | 16 | label { 17 | font-weight: bold; 18 | margin-bottom: $base-spacing / 4; 19 | 20 | &.required:after { 21 | content: "*"; 22 | } 23 | 24 | abbr { 25 | display: none; 26 | } 27 | } 28 | 29 | textarea, 30 | #{$all-text-inputs}, 31 | select[multiple=multiple] { 32 | @include box-sizing(border-box); 33 | @include transition(border-color); 34 | background-color: white; 35 | border-radius: $form-border-radius; 36 | border: 1px solid $form-border-color; 37 | box-shadow: $form-box-shadow; 38 | font-family: $form-font-family; 39 | font-size: $form-font-size; 40 | margin-bottom: $base-spacing / 2; 41 | padding: ($base-spacing / 3) ($base-spacing / 3); 42 | width: 100%; 43 | 44 | &:hover { 45 | border-color: $form-border-color-hover; 46 | } 47 | 48 | &:focus { 49 | border-color: $form-border-color-focus; 50 | box-shadow: $form-box-shadow-focus; 51 | outline: none; 52 | } 53 | } 54 | 55 | textarea { 56 | resize: vertical; 57 | } 58 | 59 | input[type="search"] { 60 | @include appearance(none); 61 | } 62 | 63 | input[type="checkbox"], 64 | input[type="radio"] { 65 | display: inline; 66 | margin-right: $base-spacing / 4; 67 | } 68 | 69 | input[type="file"] { 70 | padding-bottom: $base-spacing / 2; 71 | width: 100%; 72 | } 73 | 74 | select { 75 | margin-bottom: $base-spacing; 76 | max-width: 100%; 77 | width: auto; 78 | } 79 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_flex-grid.scss: -------------------------------------------------------------------------------- 1 | // Flexible grid 2 | @function flex-grid($columns, $container-columns: $fg-max-columns) { 3 | $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; 4 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 5 | @return percentage($width / $container-width); 6 | } 7 | 8 | // Flexible gutter 9 | @function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { 10 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 11 | @return percentage($gutter / $container-width); 12 | } 13 | 14 | // The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function. 15 | // This function takes the fluid grid equation (target / context = result) and uses columns to help define each. 16 | // 17 | // The calculation presumes that your column structure will be missing the last gutter: 18 | // 19 | // -- column -- gutter -- column -- gutter -- column 20 | // 21 | // $fg-column: 60px; // Column Width 22 | // $fg-gutter: 25px; // Gutter Width 23 | // $fg-max-columns: 12; // Total Columns For Main Container 24 | // 25 | // div { 26 | // width: flex-grid(4); // returns (315px / 995px) = 31.65829%; 27 | // margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%; 28 | // 29 | // p { 30 | // width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; 31 | // float: left; 32 | // margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%; 33 | // } 34 | // 35 | // blockquote { 36 | // float: left; 37 | // width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; 38 | // } 39 | // } -------------------------------------------------------------------------------- /resources/vendor/sass/base/_typography.scss: -------------------------------------------------------------------------------- 1 | body { 2 | -webkit-font-smoothing: antialiased; 3 | background-color: $base-background-color; 4 | color: $base-font-color; 5 | font-family: $base-font-family; 6 | font-size: $base-font-size; 7 | line-height: $base-line-height; 8 | } 9 | 10 | h1, 11 | h2, 12 | h3, 13 | h4, 14 | h5, 15 | h6 { 16 | font-family: $header-font-family; 17 | line-height: $header-line-height; 18 | margin: 0; 19 | text-rendering: optimizeLegibility; // Fix the character spacing for headings 20 | } 21 | 22 | h1 { 23 | font-size: $h1-font-size; 24 | } 25 | 26 | h2 { 27 | font-size: $h2-font-size; 28 | } 29 | 30 | h3 { 31 | font-size: $h3-font-size; 32 | } 33 | 34 | h4 { 35 | font-size: $h4-font-size; 36 | } 37 | 38 | h5 { 39 | font-size: $h5-font-size; 40 | } 41 | 42 | h6 { 43 | font-size: $h6-font-size; 44 | } 45 | 46 | p { 47 | margin: 0 0 ($base-spacing / 2); 48 | } 49 | 50 | a { 51 | @include transition(color 0.1s linear); 52 | color: $base-link-color; 53 | text-decoration: none; 54 | 55 | &:hover { 56 | color: $hover-link-color; 57 | } 58 | 59 | &:active, &:focus { 60 | color: $hover-link-color; 61 | outline: none; 62 | } 63 | } 64 | 65 | hr { 66 | border-bottom: $base-border; 67 | border-left: none; 68 | border-right: none; 69 | border-top: none; 70 | margin: $base-spacing 0; 71 | } 72 | 73 | img, 74 | picture { 75 | margin: 0; 76 | max-width: 100%; 77 | } 78 | 79 | blockquote { 80 | border-left: 2px solid $base-border-color; 81 | color: lighten($base-font-color, 15); 82 | margin: $base-spacing 0; 83 | padding-left: $base-spacing / 2; 84 | } 85 | 86 | cite { 87 | color: lighten($base-font-color, 25); 88 | font-style: italic; 89 | 90 | &:before { 91 | content: "\2014 \00A0"; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/functions/_modular-scale.scss: -------------------------------------------------------------------------------- 1 | // Scaling Variables 2 | $golden: 1.618; 3 | $minor-second: 1.067; 4 | $major-second: 1.125; 5 | $minor-third: 1.2; 6 | $major-third: 1.25; 7 | $perfect-fourth: 1.333; 8 | $augmented-fourth: 1.414; 9 | $perfect-fifth: 1.5; 10 | $minor-sixth: 1.6; 11 | $major-sixth: 1.667; 12 | $minor-seventh: 1.778; 13 | $major-seventh: 1.875; 14 | $octave: 2; 15 | $major-tenth: 2.5; 16 | $major-eleventh: 2.667; 17 | $major-twelfth: 3; 18 | $double-octave: 4; 19 | 20 | @function modular-scale($value, $increment, $ratio) { 21 | $v1: nth($value, 1); 22 | $v2: nth($value, length($value)); 23 | $value: $v1; 24 | 25 | // scale $v2 to just above $v1 26 | @while $v2 > $v1 { 27 | $v2: ($v2 / $ratio); // will be off-by-1 28 | } 29 | @while $v2 < $v1 { 30 | $v2: ($v2 * $ratio); // will fix off-by-1 31 | } 32 | 33 | // check AFTER scaling $v2 to prevent double-counting corner-case 34 | $double-stranded: $v2 > $v1; 35 | 36 | @if $increment > 0 { 37 | @for $i from 1 through $increment { 38 | @if $double-stranded and ($v1 * $ratio) > $v2 { 39 | $value: $v2; 40 | $v2: ($v2 * $ratio); 41 | } @else { 42 | $v1: ($v1 * $ratio); 43 | $value: $v1; 44 | } 45 | } 46 | } 47 | 48 | @if $increment < 0 { 49 | // adjust $v2 to just below $v1 50 | @if $double-stranded { 51 | $v2: ($v2 / $ratio); 52 | } 53 | 54 | @for $i from $increment through -1 { 55 | @if $double-stranded and ($v1 / $ratio) < $v2 { 56 | $value: $v2; 57 | $v2: ($v2 / $ratio); 58 | } @else { 59 | $v1: ($v1 / $ratio); 60 | $value: $v1; 61 | } 62 | } 63 | } 64 | 65 | @return $value; 66 | } 67 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_animation.scss: -------------------------------------------------------------------------------- 1 | // http://www.w3.org/TR/css3-animations/#the-animation-name-property- 2 | // Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. 3 | 4 | // Official animation shorthand property. 5 | @mixin animation ($animations...) { 6 | @include prefixer(animation, $animations, webkit moz spec); 7 | } 8 | 9 | // Individual Animation Properties 10 | @mixin animation-name ($names...) { 11 | @include prefixer(animation-name, $names, webkit moz spec); 12 | } 13 | 14 | 15 | @mixin animation-duration ($times...) { 16 | @include prefixer(animation-duration, $times, webkit moz spec); 17 | } 18 | 19 | 20 | @mixin animation-timing-function ($motions...) { 21 | // ease | linear | ease-in | ease-out | ease-in-out 22 | @include prefixer(animation-timing-function, $motions, webkit moz spec); 23 | } 24 | 25 | 26 | @mixin animation-iteration-count ($values...) { 27 | // infinite | 28 | @include prefixer(animation-iteration-count, $values, webkit moz spec); 29 | } 30 | 31 | 32 | @mixin animation-direction ($directions...) { 33 | // normal | alternate 34 | @include prefixer(animation-direction, $directions, webkit moz spec); 35 | } 36 | 37 | 38 | @mixin animation-play-state ($states...) { 39 | // running | paused 40 | @include prefixer(animation-play-state, $states, webkit moz spec); 41 | } 42 | 43 | 44 | @mixin animation-delay ($times...) { 45 | @include prefixer(animation-delay, $times, webkit moz spec); 46 | } 47 | 48 | 49 | @mixin animation-fill-mode ($modes...) { 50 | // none | forwards | backwards | both 51 | @include prefixer(animation-fill-mode, $modes, webkit moz spec); 52 | } 53 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_timing-functions.scss: -------------------------------------------------------------------------------- 1 | // CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) 2 | // Timing functions are the same as demo'ed here: http://jqueryui.com/resources/demos/effect/easing.html 3 | 4 | // EASE IN 5 | $ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); 6 | $ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); 7 | $ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); 8 | $ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); 9 | $ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); 10 | $ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); 11 | $ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); 12 | $ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); 13 | 14 | // EASE OUT 15 | $ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); 16 | $ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); 17 | $ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); 18 | $ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); 19 | $ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); 20 | $ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); 21 | $ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); 22 | $ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); 23 | 24 | // EASE IN OUT 25 | $ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); 26 | $ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); 27 | $ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); 28 | $ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); 29 | $ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); 30 | $ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); 31 | $ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); 32 | $ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); 33 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/0457440d010a5bc0f5aeed253ef0674c00f09101/_box-sizing.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | c5370108803c21cdaa4d572d2b0a3002f3c6e1aa 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI"box-sizing:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I"box; T:@underscored_nameI"box; T: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i: 7 | @fileI"b/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/css3/_box-sizing.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @options{0: @splat0;[o:Sass::Tree::CommentNode 10 | : @value[I"./* content-box | border-box | inherit */; T: 11 | @type: silent;[; i;@o:Sass::Tree::MixinNode;I" prefixer; T; 12 | [o: Sass::Script::Tree::Literal ; o: Sass::Script::Value::String; I"box-sizing; T;!:identifier;@; i;o; ;o;; i;i;o;; i;i$;@;@;@o; ;I"box; T; I"box; T; i;o; ;o;; i;i&;o;; i;i*;@;@;@;@o:$Sass::Script::Tree::ListLiteral :@elements[o;$ ; o;%; I" webkit; T;!;&;@; i;o; ;o;; i;i,;o;; i;i2;@;@;@o;$ ; o;%; I"moz; T;!;&;@; i;o; ;o;; i;i3;o;; i;i6;@;@;@o;$ ; o;%; I" spec; T;!;&;@; i;o; ;o;; i;i7;o;; i;i;;@;@;@:@separator: 13 | space; i;o; ;o;; i;i+;o;; i;i;;@;@;@;@:@keywordso:Sass::Util::NormalizedMap:@key_strings{: @map{;0:@kwarg_splat0;[; i;o; ;o;; i;i;o;; i;i<;@;@;@; i;o; ;o;; i;i;o;; i;i;@;@:@has_childrenT;@:@templateI"|@mixin box-sizing ($box) { 14 | // content-box | border-box | inherit 15 | @include prefixer(box-sizing, $box, webkit moz spec); 16 | } 17 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;0T;@ -------------------------------------------------------------------------------- /resources/public/md/docs.md: -------------------------------------------------------------------------------- 1 |
2 |

Database Configuration is Required

3 |

Before continuing please follow the steps below to configure your database connection and run the necessary migrations.

4 |
    5 |
  1. Create the database for your application. 6 |
  2. Update the connection parameters for the database in the inviteyoself.db.schema namespace of your application. 7 |
  3. Update the connection URL nn the project.clj under the :ragtime key with your database name and login. 8 |
  4. Run lein ragtime migrate in the root of the project to create the tables. 9 |
  5. Restart the application. 10 |
11 |
12 | 13 | ### Managing Your Middleware 14 | 15 | Request middleware functions are located under the `inviteyoself.middleware` namespace. 16 | A request logging helper called `log-request` has already been defined for you there. 17 | 18 | This namespace also defines two vectors for organizing the middleware called `development-middleware` and `production-middleware`. 19 | Any middleware that you only wish to run in development mode, such as `log-request`, should be added to the first vector. 20 | 21 | ### Here are some links to get started 22 | 23 | 1. [HTML templating](http://www.luminusweb.net/docs/html_templating.md) 24 | 2. [Accessing the database](http://www.luminusweb.net/docs/database.md) 25 | 3. [Serving static resources](http://www.luminusweb.net/docs/static_resources.md) 26 | 4. [Setting response types](http://www.luminusweb.net/docs/responses.md) 27 | 5. [Defining routes](http://www.luminusweb.net/docs/routes.md) 28 | 6. [Adding middleware](http://www.luminusweb.net/docs/middleware.md) 29 | 7. [Sessions and cookies](http://www.luminusweb.net/docs/sessions_cookies.md) 30 | 8. [Security](http://www.luminusweb.net/docs/security.md) 31 | 9. [Deploying the application](http://www.luminusweb.net/docs/deployment.md) 32 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/85dfb5b9cba0d97f264918b4fde1516ed338276e/_strip-units.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 619ad2f45e59b01c5dd5d6990ce327d08113a4b9 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::CommentNode 4 | : @value[I"9/* Srtips the units from a value. e.g. 12px -> 12 */:ET: 5 | @type: silent;[: 6 | @linei: @options{o:Sass::Tree::FunctionNode : 7 | @nameI"strip-units; T: 8 | @args[[o:!Sass::Script::Tree::Variable ;I"val; T:@underscored_nameI"val; T; i:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i : 9 | @fileI"h/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/functions/_strip-units.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 10 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 11 | @hash{:@filename@; @ 0: @splat0;[o:Sass::Tree::ReturnNode 12 | : 13 | @expro:"Sass::Script::Tree::Operation :@operand1o; ;I"val; T;I"val; T; i ;o; ;o;; i ;i;o;; i ;i;@;@;!@; @ :@operand2o;% ;&o;% ;&o; ;I"val; T;I"val; T; i ;o; ;o;; i ;i;o;; i ;i;@;@;!@; @ ;'o: Sass::Script::Tree::Literal ;o: Sass::Script::Value::Number 14 | ;i:@numerator_units[:@denominator_units[:@originalI"0; F; @ ; i ;o; ;o;; i ;i ;o;; i ;i!;@;@;!@:@operator: 15 | times; i ;o; ;@*;o;; i ;i!;@;@;!@; @ ;'o;( ;o;) 16 | ;i;*[;+@/;,I"1; F; @ ; i ;o; ;o;; i ;i$;o;; i ;i%;@;@;!@;-: plus; i ;o; ;@*;o;; i ;i%;@;@;!@; @ ;-:div; i ;o; ;@";o;; i ;i&;@;@;!@; @ ;[; i ;o; ;o;; i ;i;o;; i ;i';@;@; @ ; i;o; ;o;; i;i;o;; i;i";@;@:@has_childrenT; @ :@templateI"{// Srtips the units from a value. e.g. 12px -> 12 17 | 18 | @function strip-units($val) { 19 | @return ($val / ($val * 0 + 1)); 20 | } 21 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;1T; @ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/0457440d010a5bc0f5aeed253ef0674c00f09101/_user-select.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 803ee137e7db2aad4fbe56b965f27358276b5f25 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI"user-select:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I"arg; T:@underscored_nameI"arg; T: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i: 7 | @fileI"c/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/css3/_user-select.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @options{o: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::String;I" none; T: 10 | @type:identifier;@; i;o; ;o;; i;i;o;; i;i#;@;@;@: @splat0;[o:Sass::Tree::MixinNode;I" prefixer; T; 11 | [o; ;o; ;I"user-select; T;!;";@; i;o; ;o;; i;i;o;; i;i%;@;@;@o; ;I"arg; T; I"arg; T; i;o; ;o;; i;i';o;; i;i+;@;@;@;@o:$Sass::Script::Tree::ListLiteral :@elements[ o; ;o; ;I" webkit; T;!;";@; i;o; ;o;; i;i-;o;; i;i3;@;@;@o; ;o; ;I"moz; T;!;";@; i;o; ;o;; i;i4;o;; i;i7;@;@;@o; ;o; ;I"ms; T;!;";@; i;o; ;o;; i;i8;o;; i;i:;@;@;@o; ;o; ;I" spec; T;!;";@; i;o; ;o;; i;i;;o;; i;i?;@;@;@:@separator: 12 | space; i;o; ;o;; i;i,;o;; i;i?;@;@;@;@:@keywordso:Sass::Util::NormalizedMap:@key_strings{: @map{;#0:@kwarg_splat0;[; i;o; ;o;; i;i;o;; i;i@;@;@;@; i;o; ;o;; i;i;o;; i;i%;@;@:@has_childrenT;@:@templateI"d@mixin user-select($arg: none) { 13 | @include prefixer(user-select, $arg, webkit moz ms spec); 14 | } 15 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;.T;@ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/0457440d010a5bc0f5aeed253ef0674c00f09101/_appearance.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | bb214da69cbaca2730b496ea3ba5c204499954bb 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI"appearance:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I" 6 | value; T:@underscored_nameI" 7 | value; T: 8 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i: 9 | @fileI"b/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/css3/_appearance.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 10 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 11 | @hash{:@filename@: @options{0: @splat0;[o:Sass::Tree::MixinNode;I" prefixer; T; 12 | [o: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::String;!I"appearance; T: 13 | @type:identifier;@; i;o; ;o;; i;i;o;; i;i$;@;@;@o; ;I" 14 | value; T; I" 15 | value; T; i;o; ;o;; i;i&;o;; i;i,;@;@;@;@o:$Sass::Script::Tree::ListLiteral :@elements[ 16 | o; ;!o;";!I" webkit; T;#;$;@; i;o; ;o;; i;i.;o;; i;i4;@;@;@o; ;!o;";!I"moz; T;#;$;@; i;o; ;o;; i;i5;o;; i;i8;@;@;@o; ;!o;";!I"ms; T;#;$;@; i;o; ;o;; i;i9;o;; i;i;;@;@;@o; ;!o;";!I"o; T;#;$;@; i;o; ;o;; i;i<;o;; i;i=;@;@;@o; ;!o;";!I" spec; T;#;$;@; i;o; ;o;; i;i>;o;; i;iB;@;@;@:@separator: 17 | space; i;o; ;o;; i;i-;o;; i;iB;@;@;@;@:@keywordso:Sass::Util::NormalizedMap:@key_strings{: @map{;0:@kwarg_splat0;[; i;o; ;o;; i;i;o;; i;iC;@;@;@; i;o; ;o;; i;i;o;; i;i!;@;@:@has_childrenT;@:@templateI"c@mixin appearance ($value) { 18 | @include prefixer(appearance, $value, webkit moz ms o spec); 19 | } 20 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;.T;@ -------------------------------------------------------------------------------- /resources/vendor/sass/base/_variables.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | $sans-serif: $helvetica; 3 | $serif: $georgia; 4 | $base-font-family: $sans-serif; 5 | $header-font-family: $base-font-family; 6 | 7 | // Font Sizes 8 | $base-font-size: 1em; 9 | $h1-font-size: $base-font-size * 2.25; 10 | $h2-font-size: $base-font-size * 2; 11 | $h3-font-size: $base-font-size * 1.75; 12 | $h4-font-size: $base-font-size * 1.5; 13 | $h5-font-size: $base-font-size * 1.25; 14 | $h6-font-size: $base-font-size; 15 | 16 | // Line height 17 | $base-line-height: 1.5; 18 | $header-line-height: 1.25; 19 | 20 | // Other Sizes 21 | $base-border-radius: 3px; 22 | $base-spacing: $base-line-height * 1em; 23 | $base-z-index: 0; 24 | 25 | // Colors 26 | $blue: #477DCA; 27 | $pink: #FF69B4; 28 | $dark-gray: #333; 29 | $medium-gray: #999; 30 | $light-gray: #DDD; 31 | $light-red: #FBE3E4; 32 | $light-yellow: #FFF6BF; 33 | $light-green: #E6EFC2; 34 | 35 | // Background Color 36 | $base-background-color: white; 37 | 38 | // Font Colors 39 | $base-font-color: $dark-gray; 40 | $base-accent-color: $pink; 41 | 42 | // Link Colors 43 | $base-link-color: $base-accent-color; 44 | $hover-link-color: darken($base-accent-color, 15); 45 | $base-button-color: $base-link-color; 46 | $hover-button-color: $hover-link-color; 47 | 48 | // Flash Colors 49 | $alert-color: $light-yellow; 50 | $error-color: $light-red; 51 | $notice-color: lighten($base-accent-color, 40); 52 | $success-color: $light-green; 53 | 54 | // Border color 55 | $base-border-color: $light-gray; 56 | $base-border: 1px solid $base-border-color; 57 | 58 | // Forms 59 | $form-border-color: $base-border-color; 60 | $form-border-color-hover: darken($base-border-color, 10); 61 | $form-border-color-focus: $base-accent-color; 62 | $form-border-radius: $base-border-radius; 63 | $form-box-shadow: inset 0 1px 3px rgba(black,0.06); 64 | $form-box-shadow-focus: $form-box-shadow, 0 0 5px rgba(darken($form-border-color-focus, 5), 0.7); 65 | $form-font-size: $base-font-size; 66 | $form-font-family: $base-font-family; 67 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/b41d6e719d67c490c9cc4a70cd1a56c730fd53a7/_prefixer.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 0b0f9f8f114b9b16fe65281e685fb685f46b37c7 3 | o:Sass::Tree::RootNode :@children[ o:Sass::Tree::CommentNode 4 | : @value[I"6/* Variable settings for /addons/prefixer.scss */:ET: 5 | @type: silent;[: 6 | @linei: @options{o:Sass::Tree::VariableNode : 7 | @nameI"prefix-for-webkit; T: 8 | @expro: Sass::Script::Tree::Literal ;o:Sass::Script::Value::Bool;T; @ ; i:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i!: 9 | @fileI"d/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/settings/_prefixer.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 10 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 11 | @hash{:@filename@: @guardedT: @global0;[; i;o; ;o;; i;i;o;; i;i*;@;@; @ o; ;I"prefix-for-mozilla; T;o; ;@; i;o; ;o;; i;i;o;; i;i!;@;@;!@;"T;#0;[; i;o; ;o;; i;i;o;; i;i*;@;@; @ o; ;I"prefix-for-microsoft; T;o; ;@; i ;o; ;o;; i ;i;o;; i ;i!;@;@;!@;"T;#0;[; i ;o; ;o;; i ;i;o;; i ;i*;@;@; @ o; ;I"prefix-for-opera; T;o; ;@; i 12 | ;o; ;o;; i 13 | ;i;o;; i 14 | ;i!;@;@;!@;"T;#0;[; i 15 | ;o; ;o;; i 16 | ;i;o;; i 17 | ;i*;@;@; @ o; ;I"prefix-for-spec; T;o; ;@; i ;o; ;o;; i ;i;o;; i ;i!;@;@;!@;"T;#0;[; i ;o; ;o;; i ;i;o;; i ;i*;@;@; @ o; 18 | ;[I"&/* required for keyframe mixin */; T; 19 | ; ;[; i ; @ :@templateI" // Variable settings for /addons/prefixer.scss 20 | $prefix-for-webkit: true !default; 21 | $prefix-for-mozilla: true !default; 22 | $prefix-for-microsoft: true !default; 23 | $prefix-for-opera: true !default; 24 | $prefix-for-spec: true !default; // required for keyframe mixin 25 | ; T; i;o; ;o;; i;i;o;; i;i;@;@:@has_childrenT; @ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_background.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background property for adding multiple backgrounds using shorthand 3 | // notation. 4 | //************************************************************************// 5 | 6 | @mixin background($backgrounds...) { 7 | $webkit-backgrounds: (); 8 | $spec-backgrounds: (); 9 | 10 | @each $background in $backgrounds { 11 | $webkit-background: (); 12 | $spec-background: (); 13 | $background-type: type-of($background); 14 | 15 | @if $background-type == string or list { 16 | $background-str: if($background-type == list, nth($background, 1), $background); 17 | 18 | $url-str: str-slice($background-str, 0, 3); 19 | $gradient-type: str-slice($background-str, 0, 6); 20 | 21 | @if $url-str == "url" { 22 | $webkit-background: $background; 23 | $spec-background: $background; 24 | } 25 | 26 | @else if $gradient-type == "linear" { 27 | $gradients: _linear-gradient-parser("#{$background}"); 28 | $webkit-background: map-get($gradients, webkit-image); 29 | $spec-background: map-get($gradients, spec-image); 30 | } 31 | 32 | @else if $gradient-type == "radial" { 33 | $gradients: _radial-gradient-parser("#{$background}"); 34 | $webkit-background: map-get($gradients, webkit-image); 35 | $spec-background: map-get($gradients, spec-image); 36 | } 37 | 38 | @else { 39 | $webkit-background: $background; 40 | $spec-background: $background; 41 | } 42 | } 43 | 44 | @else { 45 | $webkit-background: $background; 46 | $spec-background: $background; 47 | } 48 | 49 | $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); 50 | $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); 51 | } 52 | 53 | background: $webkit-backgrounds; 54 | background: $spec-backgrounds; 55 | } 56 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/grid/_to-deprecate.scss: -------------------------------------------------------------------------------- 1 | @mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | @warn "The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump."; 3 | 4 | @if length($query) == 1 { 5 | @media screen and ($default-feature: nth($query, 1)) { 6 | $default-grid-columns: $grid-columns; 7 | $grid-columns: $total-columns; 8 | @content; 9 | $grid-columns: $default-grid-columns; 10 | } 11 | } 12 | 13 | @else if length($query) == 2 { 14 | @media screen and (nth($query, 1): nth($query, 2)) { 15 | $default-grid-columns: $grid-columns; 16 | $grid-columns: $total-columns; 17 | @content; 18 | $grid-columns: $default-grid-columns; 19 | } 20 | } 21 | 22 | @else if length($query) == 3 { 23 | @media screen and (nth($query, 1): nth($query, 2)) { 24 | $default-grid-columns: $grid-columns; 25 | $grid-columns: nth($query, 3); 26 | @content; 27 | $grid-columns: $default-grid-columns; 28 | } 29 | } 30 | 31 | @else if length($query) == 4 { 32 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 33 | $default-grid-columns: $grid-columns; 34 | $grid-columns: $total-columns; 35 | @content; 36 | $grid-columns: $default-grid-columns; 37 | } 38 | } 39 | 40 | @else if length($query) == 5 { 41 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 42 | $default-grid-columns: $grid-columns; 43 | $grid-columns: nth($query, 5); 44 | @content; 45 | $grid-columns: $default-grid-columns; 46 | } 47 | } 48 | 49 | @else { 50 | @warn "Wrong number of arguments for breakpoint(). Read the documentation for more details."; 51 | } 52 | } 53 | 54 | @mixin nth-omega($nth, $display: block, $direction: default) { 55 | @warn "The nth-omega() mixin is deprecated. Please use omega() instead."; 56 | @include omega($nth $display, $direction); 57 | } 58 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/0457440d010a5bc0f5aeed253ef0674c00f09101/_hyphens.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 7fd4bb1bbca508533d4cd98d572a352cf5b88148 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI" hyphens:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I"hyphenation; T:@underscored_nameI"hyphenation; T: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i!: 7 | @fileI"_/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/css3/_hyphens.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @options{o: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::String;I" none; T: 10 | @type:identifier;@; i;o; ;o;; i;i#;o;; i;i';@;@;@: @splat0;[o:Sass::Tree::CommentNode 11 | ;[I"/* none | manual | auto */; T;!: silent;[; i;@o:Sass::Tree::MixinNode;I" prefixer; T; 12 | [o; ;o; ;I" hyphens; T;!;";@; i;o; ;o;; i;i;o;; i;i!;@;@;@o; ;I"hyphenation; T; I"hyphenation; T; i;o; ;o;; i;i#;o;; i;i/;@;@;@;@o:$Sass::Script::Tree::ListLiteral :@elements[ o; ;o; ;I" webkit; T;!;";@; i;o; ;o;; i;i1;o;; i;i7;@;@;@o; ;o; ;I"moz; T;!;";@; i;o; ;o;; i;i8;o;; i;i;;@;@;@o; ;o; ;I"ms; T;!;";@; i;o; ;o;; i;i<;o;; i;i>;@;@;@o; ;o; ;I" spec; T;!;";@; i;o; ;o;; i;i?;o;; i;iC;@;@;@:@separator: 13 | space; i;o; ;o;; i;i0;o;; i;iC;@;@;@;@:@keywordso:Sass::Util::NormalizedMap:@key_strings{: @map{;#0:@kwarg_splat0;[; i;o; ;o;; i;i;o;; i;iD;@;@;@; i;o; ;o;; i;i;o;; i;i);@;@:@has_childrenT;@:@templateI"~@mixin hyphens($hyphenation: none) { 14 | // none | manual | auto 15 | @include prefixer(hyphens, $hyphenation, webkit moz ms spec); 16 | }; T; i;o; ;o;; i;i;o;; i;i;@;@;0T;@ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_border-image.scss: -------------------------------------------------------------------------------- 1 | @mixin border-image($borders...) { 2 | $webkit-borders: (); 3 | $spec-borders: (); 4 | 5 | @each $border in $borders { 6 | $webkit-border: (); 7 | $spec-border: (); 8 | $border-type: type-of($border); 9 | 10 | @if $border-type == string or list { 11 | $border-str: if($border-type == list, nth($border, 1), $border); 12 | 13 | $url-str: str-slice($border-str, 0, 3); 14 | $gradient-type: str-slice($border-str, 0, 6); 15 | 16 | @if $url-str == "url" { 17 | $webkit-border: $border; 18 | $spec-border: $border; 19 | } 20 | 21 | @else if $gradient-type == "linear" { 22 | $gradients: _linear-gradient-parser("#{$border}"); 23 | $webkit-border: map-get($gradients, webkit-image); 24 | $spec-border: map-get($gradients, spec-image); 25 | } 26 | 27 | @else if $gradient-type == "radial" { 28 | $gradients: _radial-gradient-parser("#{$border}"); 29 | $webkit-border: map-get($gradients, webkit-image); 30 | $spec-border: map-get($gradients, spec-image); 31 | } 32 | 33 | @else { 34 | $webkit-border: $border; 35 | $spec-border: $border; 36 | } 37 | } 38 | 39 | @else { 40 | $webkit-border: $border; 41 | $spec-border: $border; 42 | } 43 | 44 | $webkit-borders: append($webkit-borders, $webkit-border, comma); 45 | $spec-borders: append($spec-borders, $spec-border, comma); 46 | } 47 | 48 | -webkit-border-image: $webkit-borders; 49 | border-image: $spec-borders; 50 | border-style: solid; 51 | } 52 | 53 | //Examples: 54 | // @include border-image(url("image.png")); 55 | // @include border-image(url("image.png") 20 stretch); 56 | // @include border-image(linear-gradient(45deg, orange, yellow)); 57 | // @include border-image(linear-gradient(45deg, orange, yellow) stretch); 58 | // @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); 59 | // @include border-image(radial-gradient(top, cover, orange, yellow, orange)); 60 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_radial-arg-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-arg-parser($G1, $G2, $pos, $shape-size) { 2 | @each $value in $G1, $G2 { 3 | $first-val: nth($value, 1); 4 | $pos-type: type-of($first-val); 5 | $spec-at-index: null; 6 | 7 | // Determine if spec was passed to mixin 8 | @if type-of($value) == list { 9 | $spec-at-index: if(index($value, at), index($value, at), false); 10 | } 11 | @if $spec-at-index { 12 | @if $spec-at-index > 1 { 13 | @for $i from 1 through ($spec-at-index - 1) { 14 | $shape-size: $shape-size nth($value, $i); 15 | } 16 | @for $i from ($spec-at-index + 1) through length($value) { 17 | $pos: $pos nth($value, $i); 18 | } 19 | } 20 | @else if $spec-at-index == 1 { 21 | @for $i from ($spec-at-index + 1) through length($value) { 22 | $pos: $pos nth($value, $i); 23 | } 24 | } 25 | $G1: null; 26 | } 27 | 28 | // If not spec calculate correct values 29 | @else { 30 | @if ($pos-type != color) or ($first-val != "transparent") { 31 | @if ($pos-type == number) 32 | or ($first-val == "center") 33 | or ($first-val == "top") 34 | or ($first-val == "right") 35 | or ($first-val == "bottom") 36 | or ($first-val == "left") { 37 | 38 | $pos: $value; 39 | 40 | @if $pos == $G1 { 41 | $G1: null; 42 | } 43 | } 44 | 45 | @else if 46 | ($first-val == "ellipse") 47 | or ($first-val == "circle") 48 | or ($first-val == "closest-side") 49 | or ($first-val == "closest-corner") 50 | or ($first-val == "farthest-side") 51 | or ($first-val == "farthest-corner") 52 | or ($first-val == "contain") 53 | or ($first-val == "cover") { 54 | 55 | $shape-size: $value; 56 | 57 | @if $value == $G1 { 58 | $G1: null; 59 | } 60 | 61 | @else if $value == $G2 { 62 | $G2: null; 63 | } 64 | } 65 | } 66 | } 67 | } 68 | @return $G1, $G2, $pos, $shape-size; 69 | } 70 | -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject 2 | inviteyoself 3 | "0.1.0-SNAPSHOT" 4 | :description 5 | "Allow people to invite themselves to your slack team." 6 | :ring 7 | {:handler inviteyoself.handler/app, 8 | :init inviteyoself.handler/init, 9 | :destroy inviteyoself.handler/destroy} 10 | :ragtime 11 | {:migrations ragtime.sql.files/migrations, 12 | :database 13 | "jdbc:postgresql://localhost/inviteyoself?user=postgres&password=password"} 14 | :plugins 15 | [[lein-ring "0.8.10"] 16 | [lein-environ "0.5.0"] 17 | [lein-ancient "0.5.5"] 18 | [ragtime/ragtime.lein "0.3.6"]] 19 | :url 20 | "http://example.com/FIXME" 21 | :profiles 22 | {:uberjar {:aot :all}, 23 | :production 24 | {:ring 25 | {:open-browser? false, :stacktraces? false, :auto-reload? false}}, 26 | :dev 27 | {:dependencies 28 | [[ring-mock "0.1.5"] 29 | [ring/ring-devel "1.3.1"] 30 | [pjstadig/humane-test-output "0.6.0"]], 31 | :injections 32 | [(require 'pjstadig.humane-test-output) 33 | (pjstadig.humane-test-output/activate!)], 34 | :env {:dev true :db-user-name "postgres" :db-user-password "password" :db-host "localhost" :db-name "inviteyoself"}}} 35 | :main 36 | inviteyoself.core 37 | :jvm-opts 38 | ["-server"] 39 | :dependencies 40 | [[lib-noir "0.8.9"] 41 | [log4j 42 | "1.2.17" 43 | :exclusions 44 | [javax.mail/mail 45 | javax.jms/jms 46 | com.sun.jdmk/jmxtools 47 | com.sun.jmx/jmxri]] 48 | [http-kit "2.1.18"] 49 | [prone "0.6.0"] 50 | [noir-exception "0.2.2"] 51 | [com.taoensso/timbre "3.3.1"] 52 | [com.taoensso/tower "3.0.1"] 53 | [korma "0.4.0"] 54 | [selmer "0.7.1"] 55 | [org.clojure/clojure "1.6.0"] 56 | [environ "1.0.0"] 57 | [ring-server "0.3.1"] 58 | [postgresql/postgresql "9.1-901-1.jdbc4"] 59 | [ragtime "0.3.6"] 60 | [red-tape "1.0.0"] 61 | [commons-validator "1.4.0"] 62 | [slingshot "0.10.3"]] 63 | :repl-options 64 | {:init-ns inviteyoself.repl} 65 | :min-lein-version "2.0.0" 66 | :aliases {"start-production-server" ["with-profile" "production" "trampoline" "ring" "server"] 67 | "send-invites" ["trampoline" "run" "-m" "inviteyoself.tasks.send-invites"] 68 | }) 69 | -------------------------------------------------------------------------------- /src/inviteyoself/handler.clj: -------------------------------------------------------------------------------- 1 | (ns inviteyoself.handler 2 | (:require [compojure.core :refer [defroutes]] 3 | [inviteyoself.routes.invite :refer [invite-routes]] 4 | [inviteyoself.middleware :refer [load-middleware]] 5 | [noir.response :refer [redirect]] 6 | [noir.util.middleware :refer [app-handler]] 7 | [compojure.route :as route] 8 | [taoensso.timbre :as timbre] 9 | [taoensso.timbre.appenders.rotor :as rotor] 10 | [selmer.parser :as parser] 11 | [environ.core :refer [env]])) 12 | 13 | (defroutes base-routes 14 | (route/resources "/") 15 | (route/not-found "Not Found")) 16 | 17 | (defn init 18 | "init will be called once when 19 | app is deployed as a servlet on 20 | an app server such as Tomcat 21 | put any initialization code here" 22 | [] 23 | (timbre/set-config! 24 | [:appenders :rotor] 25 | {:min-level :info 26 | :enabled? true 27 | :async? false ; should be always false for rotor 28 | :max-message-per-msecs nil 29 | :fn rotor/appender-fn}) 30 | 31 | (timbre/set-config! 32 | [:shared-appender-config :rotor] 33 | {:path "inviteyoself.log" :max-size (* 512 1024) :backlog 10}) 34 | 35 | (if (env :dev) (parser/cache-off!)) 36 | (timbre/info "inviteyoself started successfully")) 37 | 38 | (defn destroy 39 | "destroy will be called when your application 40 | shuts down, put any clean up code here" 41 | [] 42 | (timbre/info "inviteyoself is shutting down...") 43 | (timbre/info "shutdown complete!")) 44 | 45 | (def app (app-handler 46 | ;; add your application routes here 47 | [invite-routes base-routes] 48 | ;; add custom middleware here 49 | :middleware (load-middleware) 50 | ;; timeout sessions after 30 minutes 51 | :session-options {:timeout (* 60 30) 52 | :timeout-response (redirect "/")} 53 | ;; add access rules here 54 | :access-rules [] 55 | ;; serialize/deserialize the following data formats 56 | ;; available formats: 57 | ;; :json :json-kw :yaml :yaml-kw :edn :yaml-in-html 58 | :formats [:json-kw :edn])) 59 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/2590cc521dc306970884ad7f8cfc159dd6afc016/_outer-container.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 3390bb39661797f73c901133e966356ca6b7279e 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI"outer-container:ET: 5 | @args[: @splat0;[o:Sass::Tree::MixinNode;I" clearfix; T; 6 | [:@keywords{; 0:@kwarg_splat0;[: 7 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position;i: @offseti: @end_poso;;i;i: 8 | @fileI"d/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/neat/grid/_outer-container.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 9 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 10 | @hash{: @options{o:Sass::Tree::PropNode;[I"max-width; T: @valueo:!Sass::Script::Tree::Variable ;I"max-width; T:@underscored_nameI"max_width; T;i;o; ;o;;i;i;o;;i;i;@;@:@filename@;@: 11 | @tabsi:@prop_syntax:new;[;i;o; ;o;;i;i;o;;i;i;@;@:@name_source_rangeo; ;@$;o;;i;i;@;@:@value_source_rangeo; ;o;;i;i;@%;@;@;@o;;[I" margin; T; o: Sass::Script::Tree::Literal; o: Sass::Script::Value::String; I"; T: 12 | @type:identifier;@;i ;o; ;o;;i ;i;o;;i ;i;@;@;$i;%;&;[o;;[I" left; T; o;); o;*; I" auto; T;+;,;@;i 13 | ;o; ;o;;i 14 | ;i;o;;i 15 | ;i;@;@;$i;%;&;[;i 16 | ;o; ;o;;i 17 | ;i 18 | ;o;;i 19 | ;i;@;@;'o; ;@?;o;;i 20 | ;i;@;@;(o; ;o;;i 21 | ;i;@@;@;@;@o;;[I" 22 | right; T; o;); o;*; I" auto; T;+;,;@;i ;o; ;o;;i ;i;o;;i ;i;@;@;$i;%;&;[;i ;o; ;o;;i ;i 23 | ;o;;i ;i;@;@;'o; ;@P;o;;i ;i;@;@;(o; ;o;;i ;i;@Q;@;@;@;i ;o; ;o;;i ;i;o;;i ;i;@;@;'o; ;@W;o;;i ;i;@;@;(o; ;o;;i ;i;@X;@;@;@:@has_childrenT;i;o; ;o;;i;i;o;;i;i;@;@;-T;@:@templateI"@mixin outer-container { 24 | @include clearfix; 25 | max-width: $max-width; 26 | margin: { 27 | left: auto; 28 | right: auto; 29 | } 30 | } 31 | ; T;i;o; ;o;;i;i;o;;i;i;@;@;-T;@ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/helpers/_linear-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-positions-parser($pos) { 2 | $type: type-of(nth($pos, 1)); 3 | $spec: null; 4 | $degree: null; 5 | $side: null; 6 | $corner: null; 7 | $length: length($pos); 8 | // Parse Side and corner positions 9 | @if ($length > 1) { 10 | @if nth($pos, 1) == "to" { // Newer syntax 11 | $side: nth($pos, 2); 12 | 13 | @if $length == 2 { // eg. to top 14 | // Swap for backwards compatability 15 | $degree: _position-flipper(nth($pos, 2)); 16 | } 17 | @else if $length == 3 { // eg. to top left 18 | $corner: nth($pos, 3); 19 | } 20 | } 21 | @else if $length == 2 { // Older syntax ("top left") 22 | $side: _position-flipper(nth($pos, 1)); 23 | $corner: _position-flipper(nth($pos, 2)); 24 | } 25 | 26 | @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { 27 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 28 | } 29 | @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { 30 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 31 | } 32 | @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { 33 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 34 | } 35 | @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { 36 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 37 | } 38 | $spec: to $side $corner; 39 | } 40 | @else if $length == 1 { 41 | // Swap for backwards compatability 42 | @if $type == string { 43 | $degree: $pos; 44 | $spec: to _position-flipper($pos); 45 | } 46 | @else { 47 | $degree: -270 - $pos; //rotate the gradient opposite from spec 48 | $spec: $pos; 49 | } 50 | } 51 | $degree: unquote($degree + ","); 52 | $spec: unquote($spec + ","); 53 | @return $degree $spec; 54 | } 55 | 56 | @function _position-flipper($pos) { 57 | @return if($pos == left, right, null) 58 | if($pos == right, left, null) 59 | if($pos == top, bottom, null) 60 | if($pos == bottom, top, null); 61 | } 62 | -------------------------------------------------------------------------------- /resources/inviteyoself-automator/inviteyoself-automator.js: -------------------------------------------------------------------------------- 1 | var casper = require('casper').create({ 2 | viewportSize: {width: 950, height: 950}, 3 | pageSettings: { 4 | userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' 5 | } 6 | }); 7 | 8 | var subdomain = casper.cli.get("subdomain"), 9 | username = casper.cli.get("username"), 10 | password = casper.cli.get("password"), 11 | emails = casper.cli.get("emails"), 12 | invitePage = 'https://' + subdomain + '.slack.com/admin/invites/full'; 13 | 14 | casper.start(invitePage, function() { 15 | this.fill('form[action="/"]', { 16 | 'email': username, 17 | 'password': password 18 | }, true); 19 | }); 20 | 21 | casper.waitForUrl(invitePage, function() { 22 | this.click('a[onclick="TS.web.admin_invites.switchView(\'bulk\');"]'); 23 | }); 24 | 25 | casper.waitFor(function check() { 26 | return this.evaluate(function() { 27 | return document.querySelector('#bulk_invites').getAttribute('class') === ''; 28 | }); 29 | }, function() { 30 | this.evaluate(function(emails) { 31 | var method = 'users.admin.parseEmails', 32 | unixtime = Math.round(new Date().getTime() / 1000), 33 | url = TS.boot_data.api_url + method + "?t=" + unixtime, 34 | args = { 35 | emails: emails, 36 | set_active: 'true', 37 | token: TS.boot_data.api_token 38 | }; 39 | TS.api.ajax_call(url, method, args, function(data) { 40 | data.emails.forEach(function(email) { 41 | var method = 'users.admin.invite', 42 | unixtime = Math.round(new Date().getTime() / 1000), 43 | url = TS.boot_data.api_url + method + "?t=" + unixtime, 44 | args = { 45 | email: email.email, 46 | first_name: email.first_name || '', 47 | last_name: email.last_name || '', 48 | set_active: 'true', 49 | token: TS.boot_data.api_token 50 | }; 51 | TS.api.ajax_call(url, method, args, function(data) { 52 | if (data.ok || data.error == 'sent_recently' || data.error == 'already_invited') { 53 | document.getElementById('invite_sending_success').style.display = ''; 54 | } 55 | }); 56 | }); 57 | }); 58 | }, { emails: emails }); 59 | }); 60 | 61 | casper.waitUntilVisible('#invite_sending_success'); 62 | 63 | casper.run(); 64 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/0457440d010a5bc0f5aeed253ef0674c00f09101/_calc.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 30d5b9d1baedc2df31ae977c7ba86ed1e1431414 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::MixinDefNode : 4 | @nameI" calc:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I" property; T:@underscored_nameI" property; T: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti: @end_poso;; i;i: 7 | @fileI"\/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/css3/_calc.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @options{0[o; ;I" 10 | value; T; I" 11 | value; T; i;o; ;o;; i;i;o;; i;i#;@;@;@;@0: @splat0;[o:Sass::Tree::PropNode;[o; ;I" property; T; I" property; T; i;o; ;o;; i;i 12 | ;o;; i;i;@;@;@;@: @valueo:&Sass::Script::Tree::Interpolation: @beforeo: Sass::Script::Tree::Literal ; o: Sass::Script::Value::String; I"-webkit-calc(; T: 13 | @type:identifier;@; i;o; ;o;; i;i;o;; i;i#;@;@;@: @mido; ;I" 14 | value; T; I" 15 | value; T; i;o; ;o;; i;i%;o;; i;i+;@;@;@;@: @aftero;# ; o;$; I"); T;%;&;@; i;o; ;o;; i;i,;o;; i;i-;@;@;@:@whitespace_beforeF:@whitespace_afterF:@originally_textF; i;o; ;@,;o;; i;i-;@;@;@;@: 16 | @tabsi:@prop_syntax:new;[; i;o; ;o;; i;i;o;; i;i-;@;@:@name_source_rangeo; ;@>;o;; i;i;@;@:@value_source_rangeo; ;o;; i;i;@?;@;@;@o;;[o; ;I" property; T; I" property; T; i;o; ;o;; i;i 17 | ;o;; i;i;@;@;@;@; o;!;"o;# ; o;$; I" 18 | calc(; T;%;&;@; i;o; ;o;; i;i;o;; i;i#;@;@;@;'o; ;I" 19 | value; T; I" 20 | value; T; i;o; ;o;; i;i%;o;; i;i+;@;@;@;@;(o;# ; o;$; I"); T;%;&;@; i;o; ;o;; i;i,;o;; i;i-;@;@;@;)F;*F;+F; i;o; ;@Q;o;; i;i-;@;@;@;@;,i;-;.;[; i;o; ;o;; i;i;o;; i;i-;@;@;/o; ;@c;o;; i;i;@;@;0o; ;o;; i;i;@d;@;@;@; i;o; ;o;; i;i;o;; i;i%;@;@:@has_childrenT;@:@templateI"z@mixin calc($property, $value) { 21 | #{$property}: -webkit-calc(#{$value}); 22 | #{$property}: calc(#{$value}); 23 | } 24 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;1T;@ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/_bourbon.scss: -------------------------------------------------------------------------------- 1 | // Settings 2 | @import "settings/prefixer"; 3 | @import "settings/px-to-em"; 4 | @import "settings/asset-pipeline"; 5 | 6 | // Custom Helpers 7 | @import "helpers/convert-units"; 8 | @import "helpers/gradient-positions-parser"; 9 | @import "helpers/is-num"; 10 | @import "helpers/linear-angle-parser"; 11 | @import "helpers/linear-gradient-parser"; 12 | @import "helpers/linear-positions-parser"; 13 | @import "helpers/linear-side-corner-parser"; 14 | @import "helpers/radial-arg-parser"; 15 | @import "helpers/radial-positions-parser"; 16 | @import "helpers/radial-gradient-parser"; 17 | @import "helpers/render-gradients"; 18 | @import "helpers/shape-size-stripper"; 19 | @import "helpers/str-to-num"; 20 | 21 | // Custom Functions 22 | @import "functions/assign"; 23 | @import "functions/color-lightness"; 24 | @import "functions/flex-grid"; 25 | @import "functions/golden-ratio"; 26 | @import "functions/grid-width"; 27 | @import "functions/modular-scale"; 28 | @import "functions/px-to-em"; 29 | @import "functions/px-to-rem"; 30 | @import "functions/strip-units"; 31 | @import "functions/tint-shade"; 32 | @import "functions/transition-property-name"; 33 | @import "functions/unpack"; 34 | 35 | // CSS3 Mixins 36 | @import "css3/animation"; 37 | @import "css3/appearance"; 38 | @import "css3/backface-visibility"; 39 | @import "css3/background"; 40 | @import "css3/background-image"; 41 | @import "css3/border-image"; 42 | @import "css3/border-radius"; 43 | @import "css3/box-sizing"; 44 | @import "css3/calc"; 45 | @import "css3/columns"; 46 | @import "css3/filter"; 47 | @import "css3/flex-box"; 48 | @import "css3/font-face"; 49 | @import "css3/font-feature-settings"; 50 | @import "css3/hyphens"; 51 | @import "css3/hidpi-media-query"; 52 | @import "css3/image-rendering"; 53 | @import "css3/keyframes"; 54 | @import "css3/linear-gradient"; 55 | @import "css3/perspective"; 56 | @import "css3/radial-gradient"; 57 | @import "css3/transform"; 58 | @import "css3/transition"; 59 | @import "css3/user-select"; 60 | @import "css3/placeholder"; 61 | 62 | // Addons & other mixins 63 | @import "addons/button"; 64 | @import "addons/clearfix"; 65 | @import "addons/directional-values"; 66 | @import "addons/ellipsis"; 67 | @import "addons/font-family"; 68 | @import "addons/hide-text"; 69 | @import "addons/html5-input-types"; 70 | @import "addons/position"; 71 | @import "addons/prefixer"; 72 | @import "addons/retina-image"; 73 | @import "addons/size"; 74 | @import "addons/timing-functions"; 75 | @import "addons/triangle"; 76 | @import "addons/word-wrap"; 77 | 78 | // Soon to be deprecated Mixins 79 | @import "bourbon-deprecated-upcoming"; 80 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_transition.scss: -------------------------------------------------------------------------------- 1 | // Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. 2 | // Example: @include transition (all 2s ease-in-out); 3 | // @include transition (opacity 1s ease-in 2s, width 2s ease-out); 4 | // @include transition-property (transform, opacity); 5 | 6 | @mixin transition ($properties...) { 7 | // Fix for vendor-prefix transform property 8 | $needs-prefixes: false; 9 | $webkit: (); 10 | $moz: (); 11 | $spec: (); 12 | 13 | // Create lists for vendor-prefixed transform 14 | @each $list in $properties { 15 | @if nth($list, 1) == "transform" { 16 | $needs-prefixes: true; 17 | $list1: -webkit-transform; 18 | $list2: -moz-transform; 19 | $list3: (); 20 | 21 | @each $var in $list { 22 | $list3: join($list3, $var); 23 | 24 | @if $var != "transform" { 25 | $list1: join($list1, $var); 26 | $list2: join($list2, $var); 27 | } 28 | } 29 | 30 | $webkit: append($webkit, $list1); 31 | $moz: append($moz, $list2); 32 | $spec: append($spec, $list3); 33 | } 34 | 35 | // Create lists for non-prefixed transition properties 36 | @else { 37 | $webkit: append($webkit, $list, comma); 38 | $moz: append($moz, $list, comma); 39 | $spec: append($spec, $list, comma); 40 | } 41 | } 42 | 43 | @if $needs-prefixes { 44 | -webkit-transition: $webkit; 45 | -moz-transition: $moz; 46 | transition: $spec; 47 | } 48 | @else { 49 | @if length($properties) >= 1 { 50 | @include prefixer(transition, $properties, webkit moz spec); 51 | } 52 | 53 | @else { 54 | $properties: all 0.15s ease-out 0s; 55 | @include prefixer(transition, $properties, webkit moz spec); 56 | } 57 | } 58 | } 59 | 60 | @mixin transition-property ($properties...) { 61 | -webkit-transition-property: transition-property-names($properties, 'webkit'); 62 | -moz-transition-property: transition-property-names($properties, 'moz'); 63 | transition-property: transition-property-names($properties, false); 64 | } 65 | 66 | @mixin transition-duration ($times...) { 67 | @include prefixer(transition-duration, $times, webkit moz spec); 68 | } 69 | 70 | @mixin transition-timing-function ($motions...) { 71 | // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() 72 | @include prefixer(transition-timing-function, $motions, webkit moz spec); 73 | } 74 | 75 | @mixin transition-delay ($times...) { 76 | @include prefixer(transition-delay, $times, webkit moz spec); 77 | } 78 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/d23f2099d0be0c265c36f13ba6a227c317985c5d/_base.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 0f3c0012fa361dd46741ab77e341a260bb1dfe69 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::CommentNode 4 | : @value[I"m/* Bitters 0.10.0 5 | * http://bitters.bourbon.io 6 | * Copyright 2013-2014 thoughtbot, inc. 7 | * MIT License */:ET: 8 | @type: normal;[: 9 | @linei: @options{o; 10 | ;[I"/* Variables */; T; 11 | : silent;[; i ; @ o:Sass::Tree::ImportNode :@imported_filenameI"variables; T;[:@template0; i :@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i : @offseti: @end_poso;; i ;i: 12 | @fileI"M/home/seabre/projects/inviteyoself/resources/vendor/sass/base/_base.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 13 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 14 | @hash{; @ :@imported_file0o; 15 | ;[I"o/* Neat Settings -- uncomment if using Neat -- must be imported before Neat 16 | * @import "grid-settings"; */; T; 17 | ;;[; i; @ o; 18 | ;[I"/* Extends */; T; 19 | ;;[; i; @ o; ;I"extends/button; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I"extends/clearfix; T;[;0; i;o; ;o;; i;i;o;; i;i ;@;@; @ ; 0o; ;I"extends/errors; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I"extends/flashes; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I"extends/hide-text; T;[;0; i;o; ;o;; i;i;o;; i;i!;@;@; @ ; 0o; 20 | ;[I""/* Typography and Elements */; T; 21 | ;;[; i; @ o; ;I"typography; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I" 22 | forms; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I" tables; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I" 23 | lists; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0o; ;I" buttons; T;[;0; i;o; ;o;; i;i;o;; i;i;@;@; @ ; 0;I"/* Bitters 0.10.0 24 | * http://bitters.bourbon.io 25 | * Copyright 2013-2014 thoughtbot, inc. 26 | * MIT License */ 27 | 28 | // Variables 29 | @import "variables"; 30 | 31 | // Neat Settings -- uncomment if using Neat -- must be imported before Neat 32 | // @import "grid-settings"; 33 | 34 | // Extends 35 | @import "extends/button"; 36 | @import "extends/clearfix"; 37 | @import "extends/errors"; 38 | @import "extends/flashes"; 39 | @import "extends/hide-text"; 40 | 41 | // Typography and Elements 42 | @import "typography"; 43 | @import "forms"; 44 | @import "tables"; 45 | @import "lists"; 46 | @import "buttons"; 47 | ; T; i;o; ;o;; i;i;o;; i;i;@;@:@has_childrenT; @ -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_triangle.scss: -------------------------------------------------------------------------------- 1 | @mixin triangle ($size, $color, $direction) { 2 | height: 0; 3 | width: 0; 4 | 5 | $width: nth($size, 1); 6 | $height: nth($size, length($size)); 7 | 8 | $foreground-color: nth($color, 1); 9 | $background-color: if(length($color) == 2, nth($color, 2), transparent); 10 | 11 | @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { 12 | 13 | $width: $width / 2; 14 | $height: if(length($size) > 1, $height, $height/2); 15 | 16 | @if $direction == up { 17 | border-left: $width solid $background-color; 18 | border-right: $width solid $background-color; 19 | border-bottom: $height solid $foreground-color; 20 | 21 | } @else if $direction == right { 22 | border-top: $width solid $background-color; 23 | border-bottom: $width solid $background-color; 24 | border-left: $height solid $foreground-color; 25 | 26 | } @else if $direction == down { 27 | border-left: $width solid $background-color; 28 | border-right: $width solid $background-color; 29 | border-top: $height solid $foreground-color; 30 | 31 | } @else if $direction == left { 32 | border-top: $width solid $background-color; 33 | border-bottom: $width solid $background-color; 34 | border-right: $height solid $foreground-color; 35 | } 36 | } 37 | 38 | @else if ($direction == up-right) or ($direction == up-left) { 39 | border-top: $height solid $foreground-color; 40 | 41 | @if $direction == up-right { 42 | border-left: $width solid $background-color; 43 | 44 | } @else if $direction == up-left { 45 | border-right: $width solid $background-color; 46 | } 47 | } 48 | 49 | @else if ($direction == down-right) or ($direction == down-left) { 50 | border-bottom: $height solid $foreground-color; 51 | 52 | @if $direction == down-right { 53 | border-left: $width solid $background-color; 54 | 55 | } @else if $direction == down-left { 56 | border-right: $width solid $background-color; 57 | } 58 | } 59 | 60 | @else if ($direction == inset-up) { 61 | border-width: $height $width; 62 | border-style: solid; 63 | border-color: $background-color $background-color $foreground-color; 64 | } 65 | 66 | @else if ($direction == inset-down) { 67 | border-width: $height $width; 68 | border-style: solid; 69 | border-color: $foreground-color $background-color $background-color; 70 | } 71 | 72 | @else if ($direction == inset-right) { 73 | border-width: $width $height; 74 | border-style: solid; 75 | border-color: $background-color $background-color $background-color $foreground-color; 76 | } 77 | 78 | @else if ($direction == inset-left) { 79 | border-width: $width $height; 80 | border-style: solid; 81 | border-color: $background-color $foreground-color $background-color $background-color; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/neat/functions/_private.scss: -------------------------------------------------------------------------------- 1 | // Checks if a number is even 2 | @function is-even($int) { 3 | @if $int%2 == 0 { 4 | @return true; 5 | } 6 | 7 | @return false; 8 | } 9 | 10 | // Checks if an element belongs to a list 11 | @function belongs-to($tested-item, $list) { 12 | @each $item in $list { 13 | @if $item == $tested-item { 14 | @return true; 15 | } 16 | } 17 | 18 | @return false; 19 | } 20 | 21 | // Contains display value 22 | @function contains-display-value($query) { 23 | @if belongs-to(table, $query) or belongs-to(block, $query) or belongs-to(inline-block, $query) or belongs-to(inline, $query) { 24 | @return true; 25 | } 26 | 27 | @return false; 28 | } 29 | 30 | // Parses the first argument of span-columns() 31 | @function container-span($span: $span) { 32 | @if length($span) == 3 { 33 | $container-columns: nth($span, 3); 34 | @return $container-columns; 35 | } 36 | 37 | @else if length($span) == 2 { 38 | $container-columns: nth($span, 2); 39 | @return $container-columns; 40 | } 41 | 42 | @else { 43 | @return $grid-columns; 44 | } 45 | } 46 | 47 | @function container-shift($shift: $shift) { 48 | $parent-columns: $grid-columns !global !default; 49 | 50 | @if length($shift) == 3 { 51 | $container-columns: nth($shift, 3); 52 | @return $container-columns; 53 | } 54 | 55 | @else if length($shift) == 2 { 56 | $container-columns: nth($shift, 2); 57 | @return $container-columns; 58 | } 59 | 60 | @else { 61 | @return $parent-columns; 62 | } 63 | } 64 | 65 | // Generates a striped background 66 | @function gradient-stops($grid-columns, $color: $visual-grid-color) { 67 | $transparent: rgba(0,0,0,0); 68 | 69 | $column-width: flex-grid(1, $grid-columns); 70 | $gutter-width: flex-gutter($grid-columns); 71 | $column-offset: $column-width; 72 | 73 | $values: ($transparent 0, $color 0); 74 | 75 | @for $i from 1 to $grid-columns*2 { 76 | @if is-even($i) { 77 | $values: append($values, $transparent $column-offset, comma); 78 | $values: append($values, $color $column-offset, comma); 79 | $column-offset: $column-offset + $column-width; 80 | } 81 | 82 | @else { 83 | $values: append($values, $color $column-offset, comma); 84 | $values: append($values, $transparent $column-offset, comma); 85 | $column-offset: $column-offset + $gutter-width; 86 | } 87 | } 88 | 89 | @return $values; 90 | } 91 | 92 | // Layout direction 93 | @function get-direction($layout, $default) { 94 | $direction: nil; 95 | 96 | @if $layout == LTR or $layout == RTL { 97 | $direction: direction-from-layout($layout); 98 | } @else { 99 | $direction: direction-from-layout($default); 100 | } 101 | 102 | @return $direction; 103 | } 104 | 105 | @function direction-from-layout($layout) { 106 | $direction: nil; 107 | 108 | @if $layout == LTR { 109 | $direction: right; 110 | } @else { 111 | $direction: left; 112 | } 113 | 114 | @return $direction; 115 | } 116 | 117 | @function get-opposite-direction($direction) { 118 | $opposite-direction: left; 119 | 120 | @if $direction == left { 121 | $opposite-direction: right; 122 | } 123 | 124 | @return $opposite-direction; 125 | } 126 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_directional-values.scss: -------------------------------------------------------------------------------- 1 | // directional-property mixins are shorthands 2 | // for writing properties like the following 3 | // 4 | // @include margin(null 0 10px); 5 | // ------ 6 | // margin-right: 0; 7 | // margin-bottom: 10px; 8 | // margin-left: 0; 9 | // 10 | // - or - 11 | // 12 | // @include border-style(dotted null); 13 | // ------ 14 | // border-top-style: dotted; 15 | // border-bottom-style: dotted; 16 | // 17 | // ------ 18 | // 19 | // Note: You can also use false instead of null 20 | 21 | @function collapse-directionals($vals) { 22 | $output: null; 23 | 24 | $A: nth( $vals, 1 ); 25 | $B: if( length($vals) < 2, $A, nth($vals, 2)); 26 | $C: if( length($vals) < 3, $A, nth($vals, 3)); 27 | $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) )); 28 | 29 | @if $A == 0 { $A: 0 } 30 | @if $B == 0 { $B: 0 } 31 | @if $C == 0 { $C: 0 } 32 | @if $D == 0 { $D: 0 } 33 | 34 | @if $A == $B and $A == $C and $A == $D { $output: $A } 35 | @else if $A == $C and $B == $D { $output: $A $B } 36 | @else if $B == $D { $output: $A $B $C } 37 | @else { $output: $A $B $C $D } 38 | 39 | @return $output; 40 | } 41 | 42 | @function contains-falsy($list) { 43 | @each $item in $list { 44 | @if not $item { 45 | @return true; 46 | } 47 | } 48 | 49 | @return false; 50 | } 51 | 52 | @mixin directional-property($pre, $suf, $vals) { 53 | // Property Names 54 | $top: $pre + "-top" + if($suf, "-#{$suf}", ""); 55 | $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); 56 | $left: $pre + "-left" + if($suf, "-#{$suf}", ""); 57 | $right: $pre + "-right" + if($suf, "-#{$suf}", ""); 58 | $all: $pre + if($suf, "-#{$suf}", ""); 59 | 60 | $vals: collapse-directionals($vals); 61 | 62 | @if contains-falsy($vals) { 63 | @if nth($vals, 1) { #{$top}: nth($vals, 1); } 64 | 65 | @if length($vals) == 1 { 66 | @if nth($vals, 1) { #{$right}: nth($vals, 1); } 67 | } @else { 68 | @if nth($vals, 2) { #{$right}: nth($vals, 2); } 69 | } 70 | 71 | // prop: top/bottom right/left 72 | @if length($vals) == 2 { 73 | @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } 74 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 75 | 76 | // prop: top right/left bottom 77 | } @else if length($vals) == 3 { 78 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 79 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 80 | 81 | // prop: top right bottom left 82 | } @else if length($vals) == 4 { 83 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 84 | @if nth($vals, 4) { #{$left}: nth($vals, 4); } 85 | } 86 | 87 | // prop: top/right/bottom/left 88 | } @else { 89 | #{$all}: $vals; 90 | } 91 | } 92 | 93 | @mixin margin($vals...) { 94 | @include directional-property(margin, false, $vals...); 95 | } 96 | 97 | @mixin padding($vals...) { 98 | @include directional-property(padding, false, $vals...); 99 | } 100 | 101 | @mixin border-style($vals...) { 102 | @include directional-property(border, style, $vals...); 103 | } 104 | 105 | @mixin border-color($vals...) { 106 | @include directional-property(border, color, $vals...); 107 | } 108 | 109 | @mixin border-width($vals...) { 110 | @include directional-property(border, width, $vals...); 111 | } 112 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/addons/_html5-input-types.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Generate a variable ($all-text-inputs) with a list of all html5 3 | // input types that have a text-based input, excluding textarea. 4 | // http://diveintohtml5.org/forms.html 5 | //************************************************************************// 6 | $inputs-list: 'input[type="email"]', 7 | 'input[type="number"]', 8 | 'input[type="password"]', 9 | 'input[type="search"]', 10 | 'input[type="tel"]', 11 | 'input[type="text"]', 12 | 'input[type="url"]', 13 | 14 | // Webkit & Gecko may change the display of these in the future 15 | 'input[type="color"]', 16 | 'input[type="date"]', 17 | 'input[type="datetime"]', 18 | 'input[type="datetime-local"]', 19 | 'input[type="month"]', 20 | 'input[type="time"]', 21 | 'input[type="week"]'; 22 | 23 | // Bare inputs 24 | //************************************************************************// 25 | $all-text-inputs: assign-inputs($inputs-list); 26 | 27 | // Hover Pseudo-class 28 | //************************************************************************// 29 | $all-text-inputs-hover: assign-inputs($inputs-list, hover); 30 | 31 | // Focus Pseudo-class 32 | //************************************************************************// 33 | $all-text-inputs-focus: assign-inputs($inputs-list, focus); 34 | 35 | 36 | 37 | // You must use interpolation on the variable: 38 | // #{$all-text-inputs} 39 | // #{$all-text-inputs-hover} 40 | // #{$all-text-inputs-focus} 41 | 42 | // Example 43 | //************************************************************************// 44 | // #{$all-text-inputs}, textarea { 45 | // border: 1px solid red; 46 | // } 47 | 48 | 49 | 50 | //************************************************************************// 51 | // Generate a variable ($all-button-inputs) with a list of all html5 52 | // input types that have a button-based input, excluding button. 53 | //************************************************************************// 54 | $inputs-button-list: 'input[type="button"]', 55 | 'input[type="reset"]', 56 | 'input[type="submit"]'; 57 | 58 | // Bare inputs 59 | //************************************************************************// 60 | $all-button-inputs: assign-inputs($inputs-button-list); 61 | 62 | // Hover Pseudo-class 63 | //************************************************************************// 64 | $all-button-inputs-hover: assign-inputs($inputs-button-list, hover); 65 | 66 | // Focus Pseudo-class 67 | //************************************************************************// 68 | $all-button-inputs-focus: assign-inputs($inputs-button-list, focus); 69 | 70 | // Active Pseudo-class 71 | //************************************************************************// 72 | $all-button-inputs-active: assign-inputs($inputs-button-list, active); 73 | 74 | 75 | 76 | // You must use interpolation on the variable: 77 | // #{$all-button-inputs} 78 | // #{$all-button-inputs-hover} 79 | // #{$all-button-inputs-focus} 80 | // #{$all-button-inputs-active} 81 | 82 | // Example 83 | //************************************************************************// 84 | // #{$all-button-inputs}, button { 85 | // border: 1px solid red; 86 | // } 87 | -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/566b44c052e6ccba6b827b32054e05860d86a64e/_font-family.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | 3d8ba824de0b9fa67d115f0827fd214ddbdbffc5 3 | o:Sass::Tree::RootNode :@children[ 4 | o:Sass::Tree::VariableNode : 5 | @nameI" georgia:ET: 6 | @expro:$Sass::Script::Tree::ListLiteral :@elements[ 7 | o: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::String;I" Georgia; T: 8 | @type:identifier: @options{: 9 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position;i: @offseti: @end_poso;;i;i: 10 | @fileI"e/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/addons/_font-family.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 11 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 12 | @hash{:@filename@o; ;o;;I" Cambria; T;;;@;i;o; ;o;;i;i;o;;i;i ;@;@;"@o; ;o;;I"Times New Roman; T;: string;@;i;o; ;o;;i;i";o;;i;i3;@;@;"@o; ;o;;I" 13 | Times; T;;;@;i;o; ;o;;i;i5;o;;i;i:;@;@;"@o; ;o;;I" 14 | serif; T;;;@;i;o; ;o;;i;i<;o;;i;iA;@;@;"@:@separator: 15 | comma;i;o; ;o;;i;i;o;;i;i;@;@;"@;@: @guarded0: @global0;[;i;o; ;o;;i;i;o;;i;iA;@;@;@o; ;I"helvetica; T; 16 | o; ; [ 17 | o; ;o;;I"Helvetica Neue; T;;#;@;i;o; ;o;;i;i;o;;i;i";@;@;"@o; ;o;;I"Helvetica; T;;;@;i;o; ;o;;i;i$;o;;i;i-;@;@;"@o; ;o;;I" Roboto; T;;;@;i;o; ;o;;i;i/;o;;i;i5;@;@;"@o; ;o;;I" 18 | Arial; T;;;@;i;o; ;o;;i;i7;o;;i;i<;@;@;"@o; ;o;;I"sans-serif; T;;;@;i;o; ;o;;i;i>;o;;i;iH;@;@;"@;$;%;i;o; ;o;;i;i;o;;i;i";@;@;"@;@;&0;'0;[;i;o; ;o;;i;i;o;;i;iH;@;@;@o; ;I"lucida-grande; T; 19 | o; ; [ 20 | o; ;o;;I"Lucida Grande; T;;#;@;i;o; ;o;;i;i;o;;i;i%;@;@;"@o; ;o;;I" Tahoma; T;;;@;i;o; ;o;;i;i';o;;i;i-;@;@;"@o; ;o;;I" Verdana; T;;;@;i;o; ;o;;i;i/;o;;i;i6;@;@;"@o; ;o;;I" 21 | Arial; T;;;@;i;o; ;o;;i;i8;o;;i;i=;@;@;"@o; ;o;;I"sans-serif; T;;;@;i;o; ;o;;i;i?;o;;i;iI;@;@;"@;$;%;i;o; ;o;;i;i;o;;i;i%;@;@;"@;@;&0;'0;[;i;o; ;o;;i;i;o;;i;iI;@;@;@o; ;I"monospace; T; 22 | o; ; [ o; ;o;;I"Bitstream Vera Sans Mono; T;;#;@;i ;o; ;o;;i ;i;o;;i ;i,;@;@;"@o; ;o;;I" Consolas; T;;;@;i ;o; ;o;;i ;i.;o;;i ;i6;@;@;"@o; ;o;;I" Courier; T;;;@;i ;o; ;o;;i ;i8;o;;i ;i?;@;@;"@o; ;o;;I"monospace; T;;;@;i ;o; ;o;;i ;iA;o;;i ;iJ;@;@;"@;$;%;i ;o; ;o;;i ;i;o;;i ;i,;@;@;"@;@;&0;'0;[;i ;o; ;o;;i ;i;o;;i ;iJ;@;@;@o; ;I" verdana; T; 23 | o; ; [o; ;o;;I" Verdana; T;;;@;i 24 | ;o; ;o;;i 25 | ;i;o;;i 26 | ;i;@;@;"@o; ;o;;I" Geneva; T;;;@;i 27 | ;o; ;o;;i 28 | ;i;o;;i 29 | ;i;@;@;"@o; ;o;;I"sans-serif; T;;;@;i 30 | ;o; ;o;;i 31 | ;i!;o;;i 32 | ;i+;@;@;"@;$;%;i 33 | ;o; ;o;;i 34 | ;i;o;;i 35 | ;i;@;@;"@;@;&0;'0;[;i 36 | ;o; ;o;;i 37 | ;i;o;;i 38 | ;i+;@;@;@:@templateI"3$georgia: Georgia, Cambria, "Times New Roman", Times, serif; 39 | $helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; 40 | $lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; 41 | $monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; 42 | $verdana: Verdana, Geneva, sans-serif; 43 | ; T;i;o; ;o;;i;i;o;;i;i;@;@:@has_childrenT;@ -------------------------------------------------------------------------------- /resources/vendor/.sass-cache/2e360eb5dcd099caa80f56eab7aafd70e2102b0a/_shape-size-stripper.scssc: -------------------------------------------------------------------------------- 1 | 3.3.14 (Maptastic Maple) 2 | d236801e46a03c7f93d27e90c5bd760e760d5847 3 | o:Sass::Tree::RootNode :@children[o:Sass::Tree::FunctionNode : 4 | @nameI"_shape-size-stripper:ET: 5 | @args[[o:!Sass::Script::Tree::Variable ;I"shape-size; T:@underscored_nameI"shape_size; T: 6 | @linei:@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i: @offseti%: @end_poso;; i;i0: 7 | @fileI"n/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/helpers/_shape-size-stripper.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 8 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 9 | @hash{:@filename@: @options{0: @splat0;[o:Sass::Tree::VariableNode ;I"shape-size-spec; T: 10 | @expro: Sass::Script::Tree::Literal : @valueo:Sass::Script::Value::Null;"0;@; i;o; ;o;; i;i;o;; i;i;@;@;@: @guarded0: @global0;[; i;o; ;o;; i;i ;o;; i;i;@;@;@o:Sass::Tree::EachNode : 11 | @vars[I" 12 | value; T: 13 | @listo; ;I"shape-size; T; I"shape_size; T; i;o; ;o;; i;i;o;; i;i#;@;@;@;@;[u:Sass::Tree::IfNode[o:"Sass::Script::Tree::Operation :@operand1o; ;o:!Sass::Script::Tree::Variable : 14 | @nameI" 15 | value:ET:@underscored_nameI" 16 | value; T: 17 | @linei :@source_rangeo:Sass::Source::Range :@start_poso:Sass::Source::Position; i : @offseti: @end_poso;; i ;i: 18 | @fileI"n/home/seabre/projects/inviteyoself/resources/vendor/sass/vendor/bourbon/helpers/_shape-size-stripper.scss; T:@importere:"Compass::ImportOnce::Importero: Sass::Importers::Filesystem: 19 | @rootI"8/home/seabre/projects/inviteyoself/resources/vendor; T:@same_name_warningso:Set: 20 | @hash{:@filename@: @options{:@operand2o: Sass::Script::Tree::Literal : @valueo: Sass::Script::Value::String;I" 21 | cover; T: 22 | @type: string;@; i ; o; ;o;; i ;i;o;; i ;i ;@;@;@:@operator:eq; i ; o; ;@ ;o;; i ;i ;@;@;@;@;o; ;o; ;I" 23 | value; T; 24 | I" 25 | value; T; i ; o; ;o;; i ;i&;o;; i ;i,;@;@;@;@;o; ;o;;I" contain; T; ;!;@; i ; o; ;o;; i ;i0;o;; i ;i9;@;@;@;";#; i ; o; ;@!;o;; i ;i9;@;@;@;@;":or; i ; o; ;@ ;o;; i ;i;;@;@;@;@0[o:Sass::Tree::VariableNode ;I" 26 | value; T: 27 | @expro; ;o:Sass::Script::Value::Null;0;@; i 28 | ; o; ;o;; i 29 | ;i;o;; i 30 | ;i;@;@;@: @guarded0: @global0:@children[; i 31 | ; o; ;o;; i 32 | ;i ;o;; i 33 | ;i;@;@;@o; ;I"shape-size-spec; T; o:,Sass::Script::Tree::StringInterpolation : @beforeo;! ;"o: Sass::Script::Value::String;"I"; T: 34 | @type: string;@; i ;o; ;o;; i ;i;o;; i ;i;@;@;@: @mido; ;I"shape-size-spec; T; I"shape_size_spec; T; i ;o; ;o;; i ;i;o;; i ;i/;@;@;@;@: @aftero;* ;+o;! ;"o;,;"I" ; T;-;.;@; i ;o; ;o;; i ;i0;o;; i ;i1;@;@;@;/o; ;I" 35 | value; T; I" 36 | value; T; i ;o; ;o;; i ;i3;o;; i ;i9;@;@;@;@;0o;! ;"o;,;"I"; T;-;.;@; i ;o; ;o;; i ;i:;o;; i ;i;;@;@;@; i ;o; ;@B;o;; i ;i;;@;@;@;@; i ;o; ;@5;o;; i ;i;;@;@;@;@;$0;%0;[; i ;o; ;o;; i ;i ;o;; i ;i;;@;@;@; i;o; ;o;; i;i;o;; i;i$;@;@:@has_childrenT;@o:Sass::Tree::ReturnNode 37 | ; o; ;I"shape-size-spec; T; I"shape_size_spec; T; i;o; ;o;; i;i;o;; i;i ;@;@;@;@;[; i;o; ;o;; i;i;o;; i;i ;@;@;@; i;o; ;o;; i;i;o;; i;i2;@;@;1T;@:@templateI"@function _shape-size-stripper($shape-size) { 38 | $shape-size-spec: null; 39 | @each $value in $shape-size { 40 | @if ($value == "cover") or ($value == "contain") { 41 | $value: null; 42 | } 43 | $shape-size-spec: "#{$shape-size-spec} #{$value}"; 44 | } 45 | @return $shape-size-spec; 46 | } 47 | ; T; i;o; ;o;; i;i;o;; i;i;@;@;1T;@ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # inviteyoself 2 | 3 | Allow people to invite themselves to your [Slack](https://slack.com) team. 4 | 5 | This makes a website where users enter their email, and an invite will automatically be mailed to them from your Slack. Users can accept the invitation and join your Slack without needing you (the admin) to do any work. 6 | 7 | **Note**: This is _not_ using the Slack API, it is mechanizing the website. So you have to give Heroku (or your own server) your actual admin email and password, not an API token. 8 | 9 | ## Important Note 10 | 11 | This has only been tested with the free plan, but it _should_ work with a paid plan too. If it doesn't, please [file a ticket](https://github.com/seabre/inviteyoself/issues). 12 | 13 | ## Installation 14 | 15 | This was setup for [Heroku](https://www.heroku.com), so that is the suggested platform. Otherwise, you will need to provide leiningen, postgres, and casperjs yourself. 16 | 17 | * Install [leiningen](https://github.com/technomancy/leiningen) using its install script (don't use `apt`). 18 | * Clone this project and `cd` into its directory.. 19 | * Add an application to Heroku. 20 | * Add a Heroku git remote to this project: 21 | 22 | ```bash 23 | heroku git:remote -a yourherokuapp` 24 | ``` 25 | 26 | * Add [Postgres](https://www.heroku.com/postgres) to your application: 27 | 28 | ```bash 29 | heroku addons:add heroku-postgresql:dev 30 | ``` 31 | 32 | * Add [Heroku scheduler](https://scheduler.heroku.com) to your application: 33 | 34 | ```bash 35 | heroku addons:add scheduler 36 | ``` 37 | 38 | * Set the [environment variables](#environment-variables) for the application, substituting your own values for those shown. Start with the Slack details: 39 | 40 | ```bash 41 | heroku config:add SLACK_SUBDOMAIN=yourteam 42 | heroku config:add SLACK_USERNAME=youremail 43 | heroku config:add SLACK_PASSWORD=yourpassword 44 | ``` 45 | 46 | * Then set your Postgres details. Find them by visiting your app's Resources tab in Heroku, then clicking the "Heroku Postgres :: Aqua" link. This should take you to a page with your assigned Postgres DB settings. 47 | 48 | ```bash 49 | heroku config:add DB_HOST=yourhost 50 | heroku config:add DB_NAME=yourdatabase 51 | heroku config:add DB_USER_NAME=youruser 52 | heroku config:add DB_USER_PASSWORD=yourpassword 53 | ``` 54 | 55 | * Finally, set the buildpack URL to a specific URL: 56 | 57 | ```bash 58 | heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git 59 | ``` 60 | 61 | * Run the migrations (**locally**). Substitute the all-caps variables below for the same values you set on your Heroku server in the previous step. 62 | 63 | ```bash 64 | lein ragtime migrate -d "jdbc:postgresql://DB_HOST:5432/DB_NAME?user=DB_USER_NAME&password=DB_USER_PASSWORD&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory" 65 | ``` 66 | 67 | * Visit [Heroku scheduler](https://scheduler.heroku.com) in your browser and add the following task to run every 10 minutes: `lein send-invites` 68 | 69 | * Push to Heroku to deploy the app: 70 | 71 | ```bash 72 | git push heroku master 73 | ``` 74 | 75 | * Visit the app in the browser at `https://yourappname.herokuapp.com` and give it a shot! Test it with something other than your own admin email, of course. 76 | 77 | ### Environment Variables 78 | 79 | To set an environment variable, run `heroku config:add NAME_OF_VARIABLE=SOMEVALUE` in the root of your project. 80 | 81 | * `SLACK_SUBDOMAIN` 82 | * The subdomain for your Slack team. e.g. If your Slack team url is `https://myslackteam.slack.com`, your subdomain is `myslackteam`. 83 | * `SLACK_USERNAME` 84 | * The username for an admin user on the Slack team. Should be an email address. 85 | * `SLACK_PASSWORD` 86 | * The password for the `SLACK_USERNAME`. 87 | * `DB_HOST` 88 | * The postgres host. 89 | * `DB_NAME` 90 | * The name of the database in Postgres that the application will be using. 91 | * `DB_USER_NAME` 92 | * The postgres database user to access `DB_NAME`. 93 | * `DB_USER_PASSWORD` 94 | * The password for `DB_USER_NAME`. 95 | * `BUILDPACK_URL` 96 | * This should always be: `https://github.com/ddollar/heroku-buildpack-multi.git` 97 | 98 | ## Local development 99 | 100 | If you're developing this app locally, you **will** need the following: casperjs, postgres, leiningen, java (OpenJDK 6 and 7 both work.) 101 | 102 | ### Styles 103 | 104 | I'm using compass to compile sass. Run `compass watch` from `resources/vendor/` and edit the sass files in the sass folder. 105 | 106 | ## Environment Variables 107 | 108 | In project.clj, look for `{:dev true :db-user-name "postgres" :db-user-password "password" :db-host "localhost" :db-name "inviteyoself"}`, these correspond to the environment variables above. Add the correct keys and values for your system. 109 | 110 | ## Running 111 | 112 | To start a web server for the application, run: `lein ring server`. 113 | 114 | If you want to run the invite runner, run: `lein send-invites`. 115 | 116 | ## License 117 | 118 | Under the [MIT License](LICENSE). 119 | -------------------------------------------------------------------------------- /resources/public/css/screen.css: -------------------------------------------------------------------------------- 1 | *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}button,input[type="submit"]{-webkit-font-smoothing:antialiased;background-color:hotpink;border-radius:3px;color:white;display:inline-block;font-size:1em;font-weight:bold;line-height:1;padding:0.75em 1em;text-decoration:none}button:hover,input[type="submit"]:hover{background-color:#ff1c8e;color:white}button:disabled,input[type="submit"]:disabled{cursor:not-allowed;opacity:0.5}.error,.success{font-weight:bold;margin-bottom:0.75em;padding:0.75em}.error{background:#fbe3e4;color:#96151b}.error a{color:#6a0f13}.error a:hover{color:#110203}.success{background:#e6efc2;color:#56651a}.success a{color:#333c10}.success a:hover{color:#000}body{-webkit-font-smoothing:antialiased;background-color:#fff;color:#333;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1em;line-height:1.5}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;line-height:1.25;margin:0;text-rendering:optimizeLegibility}h1{font-size:2.25em}h2{font-size:2em}h3{font-size:1.75em}h4{font-size:1.5em}h5{font-size:1.25em}h6{font-size:1em}p{margin:0 0 0.75em}a{-webkit-transition:color 0.1s linear;-moz-transition:color 0.1s linear;transition:color 0.1s linear;color:hotpink;text-decoration:none}a:hover{color:#ff1c8e}a:active,a:focus{color:#ff1c8e;outline:none}hr{border-bottom:1px solid #ddd;border-left:none;border-right:none;border-top:none;margin:1.5em 0}img,picture{margin:0;max-width:100%}blockquote{border-left:2px solid #ddd;color:#595959;margin:1.5em 0;padding-left:0.75em}cite{color:#737373;font-style:italic}cite:before{content:"\2014 \00A0"}fieldset{background:#f7f7f7;border:1px solid #ddd;margin:0 0 0.75em 0;padding:1.5em}input,label,select{display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1em}label{font-weight:bold;margin-bottom:0.375em}label.required:after{content:"*"}label abbr{display:none}textarea,input[type="email"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="url"],input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="time"],input[type="week"],select[multiple=multiple]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color;-moz-transition:border-color;transition:border-color;background-color:white;border-radius:3px;border:1px solid #ddd;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06);font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1em;margin-bottom:0.75em;padding:0.5em 0.5em;width:100%}textarea:hover,input[type="email"]:hover,input[type="number"]:hover,input[type="password"]:hover,input[type="search"]:hover,input[type="tel"]:hover,input[type="text"]:hover,input[type="url"]:hover,input[type="color"]:hover,input[type="date"]:hover,input[type="datetime"]:hover,input[type="datetime-local"]:hover,input[type="month"]:hover,input[type="time"]:hover,input[type="week"]:hover,select[multiple=multiple]:hover{border-color:#c4c4c4}textarea:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="url"]:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,select[multiple=multiple]:focus{border-color:hotpink;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06),0 0 5px rgba(255,80,167,0.7);outline:none}textarea{resize:vertical}input[type="search"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none}input[type="checkbox"],input[type="radio"]{display:inline;margin-right:0.375em}input[type="file"]{padding-bottom:0.75em;width:100%}select{margin-bottom:1.5em;max-width:100%;width:auto}table{border-collapse:collapse;margin:0.75em 0;table-layout:fixed;width:100%}th{border-bottom:1px solid #b7b7b7;font-weight:bold;padding:0.75em 0;text-align:left}td{border-bottom:1px solid #ddd;padding:0.75em 0}tr,td,th{vertical-align:middle}ul,ol{margin:0;padding:0;list-style-type:none}dl{margin-bottom:0.75em}dl dt{font-weight:bold;margin-top:0.75em}dl dd{margin:0}button,input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;border:none;cursor:pointer;user-select:none;vertical-align:middle;white-space:nowrap}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}body{background-image:url("/img/seamless_paper_texture.png");background-repeat:repeat}header{text-align:center}header h1{font-family:'Pinyon Script', cursive;font-size:4em}section{max-width:68em;margin-left:auto;margin-right:auto;max-width:40em}section:after{content:"";display:table;clear:both}section form{float:left;display:block;margin-right:2.35765%;width:100%}section form:last-child{margin-right:0}#invite_submit{text-align:right} 2 | -------------------------------------------------------------------------------- /resources/vendor/sass/vendor/bourbon/css3/_flex-box.scss: -------------------------------------------------------------------------------- 1 | // CSS3 Flexible Box Model and property defaults 2 | 3 | // Custom shorthand notation for flexbox 4 | @mixin box($orient: inline-axis, $pack: start, $align: stretch) { 5 | @include display-box; 6 | @include box-orient($orient); 7 | @include box-pack($pack); 8 | @include box-align($align); 9 | } 10 | 11 | @mixin display-box { 12 | display: -webkit-box; 13 | display: -moz-box; 14 | display: -ms-flexbox; // IE 10 15 | display: box; 16 | } 17 | 18 | @mixin box-orient($orient: inline-axis) { 19 | // horizontal|vertical|inline-axis|block-axis|inherit 20 | @include prefixer(box-orient, $orient, webkit moz spec); 21 | } 22 | 23 | @mixin box-pack($pack: start) { 24 | // start|end|center|justify 25 | @include prefixer(box-pack, $pack, webkit moz spec); 26 | -ms-flex-pack: $pack; // IE 10 27 | } 28 | 29 | @mixin box-align($align: stretch) { 30 | // start|end|center|baseline|stretch 31 | @include prefixer(box-align, $align, webkit moz spec); 32 | -ms-flex-align: $align; // IE 10 33 | } 34 | 35 | @mixin box-direction($direction: normal) { 36 | // normal|reverse|inherit 37 | @include prefixer(box-direction, $direction, webkit moz spec); 38 | -ms-flex-direction: $direction; // IE 10 39 | } 40 | 41 | @mixin box-lines($lines: single) { 42 | // single|multiple 43 | @include prefixer(box-lines, $lines, webkit moz spec); 44 | } 45 | 46 | @mixin box-ordinal-group($int: 1) { 47 | @include prefixer(box-ordinal-group, $int, webkit moz spec); 48 | -ms-flex-order: $int; // IE 10 49 | } 50 | 51 | @mixin box-flex($value: 0.0) { 52 | @include prefixer(box-flex, $value, webkit moz spec); 53 | -ms-flex: $value; // IE 10 54 | } 55 | 56 | @mixin box-flex-group($int: 1) { 57 | @include prefixer(box-flex-group, $int, webkit moz spec); 58 | } 59 | 60 | // CSS3 Flexible Box Model and property defaults 61 | // Unified attributes for 2009, 2011, and 2012 flavours. 62 | 63 | // 2009 - display (box | inline-box) 64 | // 2011 - display (flexbox | inline-flexbox) 65 | // 2012 - display (flex | inline-flex) 66 | @mixin display($value) { 67 | // flex | inline-flex 68 | @if $value == "flex" { 69 | // 2009 70 | display: -webkit-box; 71 | display: -moz-box; 72 | display: box; 73 | 74 | // 2012 75 | display: -webkit-flex; 76 | display: -moz-flex; 77 | display: -ms-flexbox; // 2011 (IE 10) 78 | display: flex; 79 | } 80 | 81 | @elseif $value == "inline-flex" { 82 | display: -webkit-inline-box; 83 | display: -moz-inline-box; 84 | display: inline-box; 85 | 86 | display: -webkit-inline-flex; 87 | display: -moz-inline-flex; 88 | display: -ms-inline-flexbox; 89 | display: inline-flex; 90 | } 91 | 92 | @else { 93 | display: $value; 94 | } 95 | } 96 | 97 | // 2009 - box-flex (integer) 98 | // 2011 - flex (decimal | width decimal) 99 | // 2012 - flex (integer integer width) 100 | @mixin flex($value) { 101 | 102 | // Grab flex-grow for older browsers. 103 | $flex-grow: nth($value, 1); 104 | 105 | // 2009 106 | @include prefixer(box-flex, $flex-grow, webkit moz spec); 107 | 108 | // 2011 (IE 10), 2012 109 | @include prefixer(flex, $value, webkit moz ms spec); 110 | } 111 | 112 | // 2009 - box-orient ( horizontal | vertical | inline-axis | block-axis) 113 | // - box-direction (normal | reverse) 114 | // 2011 - flex-direction (row | row-reverse | column | column-reverse) 115 | // 2012 - flex-direction (row | row-reverse | column | column-reverse) 116 | @mixin flex-direction($value: row) { 117 | 118 | // Alt values. 119 | $value-2009: $value; 120 | $value-2011: $value; 121 | $direction: "normal"; 122 | 123 | @if $value == row { 124 | $value-2009: horizontal; 125 | } 126 | 127 | @elseif $value == "row-reverse" { 128 | $value-2009: horizontal; 129 | $direction: reverse; 130 | } 131 | 132 | @elseif $value == column { 133 | $value-2009: vertical; 134 | } 135 | 136 | @elseif $value == "column-reverse" { 137 | $value-2009: vertical; 138 | $direction: reverse; 139 | } 140 | 141 | // 2009 142 | @include prefixer(box-orient, $value-2009, webkit moz spec); 143 | @if $direction == "reverse" { 144 | @include prefixer(box-direction, $direction, webkit moz spec); 145 | } 146 | 147 | // 2012 148 | @include prefixer(flex-direction, $value, webkit moz spec); 149 | 150 | // 2011 (IE 10) 151 | -ms-flex-direction: $value; 152 | } 153 | 154 | // 2009 - box-lines (single | multiple) 155 | // 2011 - flex-wrap (nowrap | wrap | wrap-reverse) 156 | // 2012 - flex-wrap (nowrap | wrap | wrap-reverse) 157 | @mixin flex-wrap($value: nowrap) { 158 | 159 | // Alt values. 160 | $alt-value: $value; 161 | @if $value == nowrap { 162 | $alt-value: single; 163 | } 164 | 165 | @elseif $value == wrap { 166 | $alt-value: multiple; 167 | } 168 | 169 | @elseif $value == "wrap-reverse" { 170 | $alt-value: multiple; 171 | } 172 | 173 | @include prefixer(box-lines, $alt-value, webkit moz spec); 174 | @include prefixer(flex-wrap, $value, webkit moz ms spec); 175 | } 176 | 177 | // 2009 - TODO: parse values into flex-direction/flex-wrap 178 | // 2011 - TODO: parse values into flex-direction/flex-wrap 179 | // 2012 - flex-flow (flex-direction || flex-wrap) 180 | @mixin flex-flow($value) { 181 | @include prefixer(flex-flow, $value, webkit moz spec); 182 | } 183 | 184 | // 2009 - box-ordinal-group (integer) 185 | // 2011 - flex-order (integer) 186 | // 2012 - order (integer) 187 | @mixin order($int: 0) { 188 | // 2009 189 | @include prefixer(box-ordinal-group, $int, webkit moz spec); 190 | 191 | // 2012 192 | @include prefixer(order, $int, webkit moz spec); 193 | 194 | // 2011 (IE 10) 195 | -ms-flex-order: $int; 196 | } 197 | 198 | // 2012 - flex-grow (number) 199 | @mixin flex-grow($number: 0) { 200 | @include prefixer(flex-grow, $number, webkit moz spec); 201 | -ms-flex-positive: $number; 202 | } 203 | 204 | // 2012 - flex-shrink (number) 205 | @mixin flex-shrink($number: 1) { 206 | @include prefixer(flex-shrink, $number, webkit moz spec); 207 | -ms-flex-negative: $number; 208 | } 209 | 210 | // 2012 - flex-basis (number) 211 | @mixin flex-basis($width: auto) { 212 | @include prefixer(flex-basis, $width, webkit moz spec); 213 | -ms-flex-preferred-size: $width; 214 | } 215 | 216 | // 2009 - box-pack (start | end | center | justify) 217 | // 2011 - flex-pack (start | end | center | justify) 218 | // 2012 - justify-content (flex-start | flex-end | center | space-between | space-around) 219 | @mixin justify-content ($value: flex-start) { 220 | 221 | // Alt values. 222 | $alt-value: $value; 223 | @if $value == "flex-start" { 224 | $alt-value: start; 225 | } 226 | 227 | @elseif $value == "flex-end" { 228 | $alt-value: end; 229 | } 230 | 231 | @elseif $value == "space-between" { 232 | $alt-value: justify; 233 | } 234 | 235 | @elseif $value == "space-around" { 236 | $alt-value: center; 237 | } 238 | 239 | // 2009 240 | @include prefixer(box-pack, $alt-value, webkit moz spec); 241 | 242 | // 2012 243 | @include prefixer(justify-content, $value, webkit moz ms o spec); 244 | 245 | // 2011 (IE 10) 246 | -ms-flex-pack: $alt-value; 247 | } 248 | 249 | // 2009 - box-align (start | end | center | baseline | stretch) 250 | // 2011 - flex-align (start | end | center | baseline | stretch) 251 | // 2012 - align-items (flex-start | flex-end | center | baseline | stretch) 252 | @mixin align-items($value: stretch) { 253 | 254 | $alt-value: $value; 255 | 256 | @if $value == "flex-start" { 257 | $alt-value: start; 258 | } 259 | 260 | @elseif $value == "flex-end" { 261 | $alt-value: end; 262 | } 263 | 264 | // 2009 265 | @include prefixer(box-align, $alt-value, webkit moz spec); 266 | 267 | // 2012 268 | @include prefixer(align-items, $value, webkit moz ms o spec); 269 | 270 | // 2011 (IE 10) 271 | -ms-flex-align: $alt-value; 272 | } 273 | 274 | // 2011 - flex-item-align (auto | start | end | center | baseline | stretch) 275 | // 2012 - align-self (auto | flex-start | flex-end | center | baseline | stretch) 276 | @mixin align-self($value: auto) { 277 | 278 | $value-2011: $value; 279 | @if $value == "flex-start" { 280 | $value-2011: start; 281 | } 282 | 283 | @elseif $value == "flex-end" { 284 | $value-2011: end; 285 | } 286 | 287 | // 2012 288 | @include prefixer(align-self, $value, webkit moz spec); 289 | 290 | // 2011 (IE 10) 291 | -ms-flex-item-align: $value-2011; 292 | } 293 | 294 | // 2011 - flex-line-pack (start | end | center | justify | distribute | stretch) 295 | // 2012 - align-content (flex-start | flex-end | center | space-between | space-around | stretch) 296 | @mixin align-content($value: stretch) { 297 | 298 | $value-2011: $value; 299 | @if $value == "flex-start" { 300 | $value-2011: start; 301 | } 302 | 303 | @elseif $value == "flex-end" { 304 | $value-2011: end; 305 | } 306 | 307 | @elseif $value == "space-between" { 308 | $value-2011: justify; 309 | } 310 | 311 | @elseif $value == "space-around" { 312 | $value-2011: distribute; 313 | } 314 | 315 | // 2012 316 | @include prefixer(align-content, $value, webkit moz spec); 317 | 318 | // 2011 (IE 10) 319 | -ms-flex-line-pack: $value-2011; 320 | } 321 | 322 | --------------------------------------------------------------------------------