docker, previews, tor, bugfixes

* implemented docker
* added previews (markdown, html, text, video, audio)
* added tor support
* several bugfixes
This commit is contained in:
Remco 2014-11-13 21:41:43 +01:00
parent 6c85472240
commit 6b251ec7a8
63 changed files with 4401 additions and 307 deletions

16
.dockerignore Normal file
View file

@ -0,0 +1,16 @@
build
pkg
dist
src
bin
*.pyc
*.egg-info
.vagrant
.git
.tmp
bower_components
node_modules
extras
build
transfersh-server/run.sh
.elasticbeanstalk

View file

@ -0,0 +1,6 @@
files:
"/etc/nginx/conf.d/client_max_body_size.conf":
mode: "000644"
owner: root
group: root
content: "client_max_body_size 0;"

1
.gitignore vendored
View file

@ -13,3 +13,4 @@ bower_components/
node_modules/ node_modules/
transfersh-server/run.sh transfersh-server/run.sh
.elasticbeanstalk/

View file

@ -5,7 +5,7 @@ RUN mkdir -p /go/src/app
WORKDIR /go/src/app WORKDIR /go/src/app
# Copy the local package files to the container's workspace. # Copy the local package files to the container's workspace.
ADD . /go/src/app ADD ./transfersh-server /go/src/app
# install dependencies # install dependencies
RUN go get ./ RUN go get ./

View file

@ -28,6 +28,10 @@ module.exports = function (grunt) {
gruntfile: { gruntfile: {
files: ['Gruntfile.js'] files: ['Gruntfile.js']
}, },
includes: {
files: ['<%= yeoman.app %>/*.html', '.tmp/*.html'],
tasks: ['includes:server']
},
livereload: { livereload: {
options: { options: {
livereload: '<%= connect.options.livereload %>' livereload: '<%= connect.options.livereload %>'
@ -37,7 +41,8 @@ module.exports = function (grunt) {
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
] ],
tasks: ['includes:server']
} }
}, },
connect: { connect: {
@ -112,6 +117,27 @@ module.exports = function (grunt) {
} }
} }
}, },
includes: {
build: {
cwd: '<%= yeoman.app %>',
src: ['*.html', 'includes/*.html'],
dest: '<%= yeoman.dist %>',
options: {
flatten: true,
banner: ''
}
},
server: {
cwd: '<%= yeoman.app %>',
src: ['*.html', 'includes/*.html'],
dest: '.tmp/',
options: {
flatten: true,
banner: ''
}
}
},
// not used since Uglify task does concat, // not used since Uglify task does concat,
// but still available if needed // but still available if needed
/*concat: { /*concat: {
@ -240,6 +266,7 @@ module.exports = function (grunt) {
grunt.task.run([ grunt.task.run([
'clean:server', 'clean:server',
'less', 'less',
'includes:server',
'copy:server', 'copy:server',
'connect:livereload', 'connect:livereload',
'watch' 'watch'
@ -260,14 +287,17 @@ module.exports = function (grunt) {
grunt.registerTask('build', [ grunt.registerTask('build', [
'clean:dist', 'clean:dist',
'copy:server', 'copy:server',
'useminPrepare', 'useminPrepare',
'concurrent', 'concurrent',
'cssmin', 'cssmin',
'concat', 'concat',
'includes:build',
'uglify', 'uglify',
'copy', 'copy',
'usemin' 'usemin',
]); ]);
grunt.registerTask('default', [ grunt.registerTask('default', [

View file

@ -62,6 +62,16 @@ go run transfersh-server/*.go -provider=local --port 8080 --temp=/tmp/ --basedir
go build -o transfersh-server *.go go build -o transfersh-server *.go
``` ```
## Docker
For easy deployment we've enabled Docker deployment.
```
cd ./transfer-server/
docker build -t transfersh .
docker run --publish 8080:8080 --rm transfersh --provider local --basedir /tmp/
```
## Contributions ## Contributions
Contributions are welcome. Contributions are welcome.

View file

@ -18,6 +18,8 @@
"grunt-contrib-less": "~0.11.4", "grunt-contrib-less": "~0.11.4",
"grunt-contrib-uglify": "~0.6.0", "grunt-contrib-uglify": "~0.6.0",
"grunt-contrib-watch": "~0.6.1", "grunt-contrib-watch": "~0.6.1",
"grunt-include-replace": "^2.0.0",
"grunt-includes": "^0.4.5",
"grunt-rev": "~0.1.0", "grunt-rev": "~0.1.0",
"grunt-svgmin": "1.0.0", "grunt-svgmin": "1.0.0",
"grunt-usemin": "~2.4.0", "grunt-usemin": "~2.4.0",

View file

@ -35,9 +35,9 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/dutchcoders/go-clamd" "github.com/dutchcoders/go-clamd"
"github.com/golang/gddo/httputil/header"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/kennygrant/sanitize" "github.com/kennygrant/sanitize"
"github.com/russross/blackfriday"
html_template "html/template" html_template "html/template"
"io" "io"
"io/ioutil" "io/ioutil"
@ -57,23 +57,94 @@ func healthHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Approaching Neutral Zone, all systems normal and functioning.") fmt.Fprintf(w, "Approaching Neutral Zone, all systems normal and functioning.")
} }
/* The preview handler will show a preview of the content for browsers (accept type text/html), and referer is not transfer.sh */
func previewHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
token := vars["token"]
filename := vars["filename"]
contentType, contentLength, err := storage.Head(token, filename)
if err != nil {
http.Error(w, http.StatusText(404), 404)
return
}
var templatePath string
var content html_template.HTML
switch {
case strings.HasPrefix(contentType, "image/"):
templatePath = "download.image.html"
case strings.HasPrefix(contentType, "video/"):
templatePath = "download.video.html"
case strings.HasPrefix(contentType, "audio/"):
templatePath = "download.audio.html"
case strings.HasPrefix(contentType, "text/"):
templatePath = "download.markdown.html"
var reader io.ReadCloser
if reader, _, _, err = storage.Get(token, filename); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var data []byte
if data, err = ioutil.ReadAll(reader); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if strings.HasPrefix(contentType, "text/x-markdown") || strings.HasPrefix(contentType, "text/markdown") {
output := blackfriday.MarkdownCommon(data)
content = html_template.HTML(output)
} else if strings.HasPrefix(contentType, "text/plain") {
content = html_template.HTML(fmt.Sprintf("<pre>%s</pre>", data))
} else {
content = html_template.HTML(data)
}
templatePath = "download.markdown.html"
default:
templatePath = "download.html"
}
tmpl, err := html_template.New(templatePath).Funcs(html_template.FuncMap{"format": formatNumber}).ParseFiles("static/" + templatePath)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
data := struct {
ContentType string
Content html_template.HTML
Filename string
Url string
ContentLength uint64
}{
contentType,
content,
filename,
r.URL.String(),
contentLength,
}
if err := tmpl.ExecuteTemplate(w, templatePath, data); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
// this handler will output html or text, depending on the // this handler will output html or text, depending on the
// support of the client (Accept header). // support of the client (Accept header).
func viewHandler(w http.ResponseWriter, r *http.Request) { func viewHandler(w http.ResponseWriter, r *http.Request) {
// vars := mux.Vars(r) // vars := mux.Vars(r)
actual := header.ParseAccept(r.Header, "Accept") if acceptsHtml(r.Header) {
html := false
for _, s := range actual {
if s.Value == "text/html" {
html = true
}
}
if html {
tmpl, err := html_template.ParseFiles("static/index.html") tmpl, err := html_template.ParseFiles("static/index.html")
if err != nil { if err != nil {
@ -106,7 +177,7 @@ func notFoundHandler(w http.ResponseWriter, r *http.Request) {
func postHandler(w http.ResponseWriter, r *http.Request) { func postHandler(w http.ResponseWriter, r *http.Request) {
if err := r.ParseMultipartForm(_24K); nil != err { if err := r.ParseMultipartForm(_24K); nil != err {
log.Println(err) log.Printf("%s", err.Error())
http.Error(w, "Error occured copying to output stream", 500) http.Error(w, "Error occured copying to output stream", 500)
return return
} }
@ -128,7 +199,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
var err error var err error
if f, err = fheader.Open(); err != nil { if f, err = fheader.Open(); err != nil {
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -137,7 +208,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
n, err := io.CopyN(&b, f, _24K+1) n, err := io.CopyN(&b, f, _24K+1)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -155,7 +226,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
os.Remove(file.Name()) os.Remove(file.Name())
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -170,7 +241,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Uploading %s %s %d %s", token, filename, contentLength, contentType) log.Printf("Uploading %s %s %d %s", token, filename, contentLength, contentType)
if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil {
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
@ -199,7 +270,9 @@ func scanHandler(w http.ResponseWriter, r *http.Request) {
response, err := c.ScanStream(reader) response, err := c.ScanStream(reader)
if err != nil { if err != nil {
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return
} }
var b string var b string
@ -237,7 +310,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
n, err := io.CopyN(&b, f, _24K+1) n, err := io.CopyN(&b, f, _24K+1)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -245,7 +318,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
if n > _24K { if n > _24K {
file, err := ioutil.TempFile(config.Temp, "transfer-") file, err := ioutil.TempFile(config.Temp, "transfer-")
if err != nil { if err != nil {
log.Print(err) log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -255,8 +328,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
n, err = io.Copy(file, io.MultiReader(&b, f)) n, err = io.Copy(file, io.MultiReader(&b, f))
if err != nil { if err != nil {
os.Remove(file.Name()) os.Remove(file.Name())
log.Printf("%s", err.Error())
log.Print(err)
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return
} }
@ -282,6 +354,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
var err error var err error
if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil {
log.Printf("%s", err.Error())
http.Error(w, errors.New("Could not save file").Error(), 500) http.Error(w, errors.New("Could not save file").Error(), 500)
return return
} }
@ -307,10 +380,17 @@ func zipHandler(w http.ResponseWriter, r *http.Request) {
zw := zip.NewWriter(w) zw := zip.NewWriter(w)
for _, key := range strings.Split(files, ",") { for _, key := range strings.Split(files, ",") {
token := sanitize.Path(strings.Split(key, "/")[0]) if strings.HasPrefix(key, "/") {
key = key[1:]
}
key = strings.Replace(key, "\\", "/", -1)
token := strings.Split(key, "/")[0]
filename := sanitize.Path(strings.Split(key, "/")[1]) filename := sanitize.Path(strings.Split(key, "/")[1])
reader, _, _, err := storage.Get(token, filename) reader, _, _, err := storage.Get(token, filename)
if err != nil { if err != nil {
if err.Error() == "The specified key does not exist." { if err.Error() == "The specified key does not exist." {
http.Error(w, "File not found", 404) http.Error(w, "File not found", 404)
@ -371,8 +451,14 @@ func tarGzHandler(w http.ResponseWriter, r *http.Request) {
defer zw.Close() defer zw.Close()
for _, key := range strings.Split(files, ",") { for _, key := range strings.Split(files, ",") {
if strings.HasPrefix(key, "/") {
key = key[1:]
}
key = strings.Replace(key, "\\", "/", -1)
token := strings.Split(key, "/")[0] token := strings.Split(key, "/")[0]
filename := strings.Split(key, "/")[1] filename := sanitize.Path(strings.Split(key, "/")[1])
reader, _, contentLength, err := storage.Get(token, filename) reader, _, contentLength, err := storage.Get(token, filename)
if err != nil { if err != nil {
@ -482,23 +568,11 @@ func getHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", contentType) w.Header().Set("Content-Type", contentType)
w.Header().Set("Content-Length", strconv.FormatUint(contentLength, 10)) w.Header().Set("Content-Length", strconv.FormatUint(contentLength, 10))
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename))
mediaType, _, _ := mime.ParseMediaType(contentType)
switch {
case mediaType == "text/html":
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename))
break
case strings.HasPrefix(mediaType, "text"):
case mediaType == "":
break
default:
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename))
}
w.Header().Set("Connection", "close") w.Header().Set("Connection", "close")
if _, err = io.Copy(w, reader); err != nil { if _, err = io.Copy(w, reader); err != nil {
log.Printf("%s", err.Error())
http.Error(w, "Error occured copying to output stream", 500) http.Error(w, "Error occured copying to output stream", 500)
return return
} }

View file

@ -33,7 +33,9 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"log" "log"
"math/rand" "math/rand"
"mime"
"net/http" "net/http"
"net/url"
"os" "os"
"time" "time"
) )
@ -86,23 +88,27 @@ func main() {
r.HandleFunc("/({files:.*}).tar.gz", tarGzHandler).Methods("GET") r.HandleFunc("/({files:.*}).tar.gz", tarGzHandler).Methods("GET")
r.HandleFunc("/download/{token}/{filename}", getHandler).Methods("GET") r.HandleFunc("/download/{token}/{filename}", getHandler).Methods("GET")
/*r.HandleFunc("/{token}/{filename}", viewHandler).MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool { r.HandleFunc("/{token}/{filename}", previewHandler).MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) (match bool) {
u, err := url.Parse(r.Referer()) match = false
if err != nil {
log.Fatal(err)
return true
}
if u.Host == "transfer.sh" { // The file will show a preview page when opening the link in browser directly or
return false // from external link. If the referer url path and current path are the same it will be
} // downloaded.
if !acceptsHtml(r.Header) {
return false
}
if u.Host == "" { match = (r.Referer() == "")
return false
}
return true u, err := url.Parse(r.Referer())
}).Methods("GET")*/ if err != nil {
log.Fatal(err)
return
}
match = match || (u.Path != r.URL.Path)
return
}).Methods("GET")
r.HandleFunc("/{token}/{filename}", getHandler).Methods("GET") r.HandleFunc("/{token}/{filename}", getHandler).Methods("GET")
r.HandleFunc("/get/{token}/{filename}", getHandler).Methods("GET") r.HandleFunc("/get/{token}/{filename}", getHandler).Methods("GET")
@ -156,7 +162,9 @@ func main() {
log.Panic("Error while creating storage.") log.Panic("Error while creating storage.")
} }
log.Printf("Transfer.sh server started. :%v using temp folder: %s", *port, config.Temp) mime.AddExtensionType(".md", "text/x-markdown")
log.Printf("Transfer.sh server started. :\nlistening on port: %v\nusing temp folder: %s\nusing storage provider: %s", *port, config.Temp, *provider)
log.Printf("---------------------------") log.Printf("---------------------------")
s := &http.Server{ s := &http.Server{

View file

@ -0,0 +1,132 @@
</html>
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<audio controls>
<source src="{{.Url}}" type="{{.ContentType}}">
</audio>
</div>
</div>
</div>
<br/>
<div>
</section>
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
</body>
</html>

View file

@ -0,0 +1,134 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{.Filename}} - transfer.sh</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<h1>transfer.sh</h1>
<ul class="hidden-xs">
<li><a href="#samples">sample use cases</a>
</li>
<li><a href="#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<h2>
{{.Filename}}</h2>
<a href="{{.Url}}"></a>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal">
<div id="code"></div>
</div>
</div>
</div>
<div>
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> &nbsp;&nbsp;
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a>
<div id="copy-link-wrapper" class="copy-link-wrapper">
<p>Press Ctrl / CMD + C to copy link to your clipboard.</p>
<input readonly="readonly" type="text" value="{{.Url}}" />
</div>
<div id="overlay" class="overlay"></div>
</div>
<script src="scripts/clipboard.js"></script>
</section>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script>
(function(b, o, i, l, e, r) {
b.GoogleAnalyticsObject = l;
b[l] || (b[l] =
function() {
(b[l].q = b[l].q || []).push(arguments)
});
b[l].l = +new Date;
e = o.createElement(i);
r = o.getElementsByTagName(i)[0];
e.src = '//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e, r)
}(window, document, 'script', 'ga'));
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<script src="scripts/main.js"></script>
<script>
var text = "# Markdown *works*.";
var converter = new Showdown.converter();
var html = converter.makeHtml(text);
$('#md-preview').append(html);
</script>
</body>
</html>

View file

@ -0,0 +1,116 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>
</div>
</section>
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
</body>
</html>

View file

@ -0,0 +1,126 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<img src="{{.Url}}" alt="">
</div>
</div>
</div>
<br/>
<div>
<div>
</section>
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
</body>
</html>

View file

@ -0,0 +1,124 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal">
<div id="md-preview">{{.Content}}</div>
</div>
</div>
</div>
<br/>
</section>
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
</body>
</html>

View file

@ -0,0 +1,129 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<video controls>
<source src="{{.Url}}" type="{{.ContentType}}">
</video>
</div>
</div>
</div>
<br/>
<div>
</section>
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -45,14 +45,14 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<g <g
transform="translate(-93.957497,-365.26607)" transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)"
id="layer1"> id="layer1">
<path <path
d="m 85.371201,355.16455 789.901059,0 0,49.98291 -789.901059,0 z" d="m 93.957497,365.85895 750.000003,0 0,31.76074 -750.000003,0 z"
id="rect4487" id="rect4487"
style="fill:#85b5bb;fill-opacity:1;stroke:none" /> style="fill:#85b5bb;fill-opacity:1;stroke:none" />
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.446)" transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9192)"
id="g24" id="g24"
style="fill:#ff7050"> style="fill:#ff7050">
<g <g
@ -78,7 +78,7 @@
</g> </g>
</g> </g>
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.507)" transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9802)"
id="g40" id="g40"
style="fill:#ffed5d"> style="fill:#ffed5d">
<g <g
@ -104,7 +104,7 @@
</g> </g>
</g> </g>
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1453.4765)" transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1454.9497)"
id="g56" id="g56"
style="fill:#93de7f"> style="fill:#93de7f">
<g <g

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,5 @@
</div>
</div>
</div>
<br/>
</section>

View file

@ -0,0 +1,10 @@
<div>
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> &nbsp;&nbsp;
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a>
<div id="copy-link-wrapper" class="copy-link-wrapper">
<p>Press Ctrl / CMD + C to copy link to your clipboard.</p>
<input readonly="readonly" type="text" value="{{.Url}}" />
</div>
<div id="overlay" class="overlay"></div>
</div>
<script src="scripts/clipboard.js"></script>

View file

@ -0,0 +1,6 @@
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>

View file

@ -0,0 +1,36 @@
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

View file

@ -0,0 +1,15 @@
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>

View file

@ -0,0 +1,12 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="/scripts/vendor/modernizr.js"></script>
</head>

View file

@ -0,0 +1,2 @@
<script src="/scripts/main.js"></script>

View file

@ -0,0 +1,15 @@
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>

View file

@ -11,16 +11,16 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title> <title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line."> <meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory --> <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css"> <link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300" rel="stylesheet" type="text/css"> <link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400" rel="stylesheet" type="text/css"> <script src="/scripts/vendor/modernizr.js"></script>
<link href="http://fonts.googleapis.com/css?family=Droid+Sans+Mono" rel="stylesheet" type="text/css">
<script src="scripts/vendor/modernizr.js"></script>
</head> </head>
<body> <body>
<script> <script>
@ -39,21 +39,25 @@
ga('send', 'pageview'); ga('send', 'pageview');
</script> </script>
<div id="navigation"> <div id="navigation">
<div class="wrapper"> <div class="wrapper">
<h1>transfer.sh</h1> <a href="/">
<ul class="hidden-xs"> <h1>transfer.sh</h1>
<li><a href="#samples">sample use cases</a> </a>
</li> <ul class="hidden-xs">
<li><a href="#contact">contact us</a> <li><a href="/">home</a>
</li> </li>
</ul> <li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div> </div>
</div>
<section id="home"> <section id="home">
<div class="wrapper"> <div class="wrapper">
<h2> <h2 class="page-title">
Easy file sharing from the command line</h2> Easy file sharing from the command line</h2>
<div class="row animated fadeInDown"> <div class="row animated fadeInDown">
<div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12"> <div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12">
@ -75,19 +79,20 @@
<code> <code>
<br> <br>
<span class="code-title"># Upload from web</span> <span class="code-title"># Upload from web</span>
<br>Drag your files here, or <a class="browse" href="#"> click to browse.</a> <br>Drag your files here, or <a class="browse" href="#"> click to browse. <br/></a>
</code> </code>
<input type="file" multiple="multiple" style="display: none"> <input type="file" multiple="multiple" style='display: none;' />
<ul class="queue"> <ul class='queue'>
<li> <li>
</li> </li>
</ul> </ul>
<div class="all-files"> <div class='all-files'>
<br> <br>
<div> <div>
<span class="code-title"># Download all your files</span> <span class="code-title"># Download all your files</span>
<br> <br/>
<br> <br/>
<a class="download-zip btn-cta" href="#">zip</a> <a class="download-tar btn-cta" href="#">tar.gz</a> <a class="download-zip btn-cta" href="#">zip</a> <a class="download-tar btn-cta" href="#">tar.gz</a>
</div> </div>
</div> </div>
@ -95,16 +100,16 @@
</div> </div>
<div> <div>
<a href="#features" class="btn-cta btn-home">learn more </a> <a href="#features" class="btn-cta btn-home">learn more</i> </a>
</div> </div>
</div> </div>
</div></section> </section>
<section id="features"> <section id="features">
<div class="wrapper container"> <div class="wrapper container">
<div class="row animated fadeInDown"> <div class="row animated fadeInDown ">
<div class="col-md-3 col-xs-6"> <div class="col-md-3 col-xs-6">
<i class="icon-terminal"></i> <i class="icon-terminal"></i>
<h3>Made for use with shell</h3> <h3>Made for use with shell</h3>
@ -122,7 +127,7 @@
<h3>Files stored for 14 days</h3> <h3>Files stored for 14 days</h3>
</div> </div>
</div> </div>
<div class="row animated fadeInDown"> <div class="row animated fadeInDown">
<div class="col-md-offset-3 col-md-3 col-xs-6"> <div class="col-md-offset-3 col-md-3 col-xs-6">
<i class="icon-tag"></i> <i class="icon-tag"></i>
<h3>For free</h3> <h3>For free</h3>
@ -139,11 +144,11 @@
<section id="samples"> <section id="samples">
<div class="wrapper"> <div class="wrapper">
<h2> <h2 class="page-title">
Sample use cases Sample use cases
</h2> </h2>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6 ">
<h3>How to upload</h3> <h3>How to upload</h3>
<div class="terminal-top"> <div class="terminal-top">
@ -159,20 +164,21 @@
</code> </code>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6 ">
<h3>Create an alias and add it to .bashrc or .zshrc</h3> <h3>Create an alias and add it to .bashrc or .zshrc</h3>
<div class="terminal-top"> <div class="terminal-top">
</div> </div>
<div class="terminal"> <div class="terminal">
<code> <code>
<span class="code-title"># Add this to .bashrc or its equivalent</span> <span class="code-title"># Add this to .bashrc or its equivalent</span>
<br>transfer() { <br/>transfer() {
<br># write to output to tmpfile because of progress bar <br># write to output to tmpfile because of progress bar
<br>tmpfile=$( mktemp -t transferXXX ); curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile; cat $tmpfile; rm -f $tmpfile; } <br>tmpfile=$( mktemp -t transferXXX ); basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; cat $tmpfile; rm -f $tmpfile;
<br> <br/>}
<br>alias transfer=transfer <br/>
<br> <br/>alias transfer=transfer
<br> <br/>
<br/>
<span class="code-title"># Now you can use transfer command</span> <span class="code-title"># Now you can use transfer command</span>
<br>$ transfer hello.txt <br>$ transfer hello.txt
</code> </code>
@ -183,9 +189,9 @@
<a class="btn-cta" data-target="#coll" data-toggle="collapse">More examples</a> <a class="btn-cta" data-target="#coll" data-toggle="collapse">More examples</a>
<div class="collapse" id="coll"> <div class="collapse " id="coll">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6 ">
<h3>Upload multiple files at once</h3> <h3>Upload multiple files at once</h3>
<div class="terminal-top"> <div class="terminal-top">
</div> </div>
@ -196,13 +202,13 @@
<br> <br>
<span class="code-title"># Combining downloads as zip or tar archive</span> <span class="code-title"># Combining downloads as zip or tar archive</span>
<br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).tar.gz <br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).tar.gz
<br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).zip <br/>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).zip
</code> </code>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6 ">
<h3>Encrypt your files before the transfer</h3> <h3>Encrypt your files before the transfer</h3>
<div class="terminal-top"> <div class="terminal-top">
</div> </div>
@ -229,7 +235,8 @@
<span class="code-title"># Scan for malware or viruses using Clamav</span> <span class="code-title"># Scan for malware or viruses using Clamav</span>
<br>$ wget http://www.eicar.org/download/eicar.com <br>$ wget http://www.eicar.org/download/eicar.com
<br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan <br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan
<br><br> <br>
<br>
<span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> <span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span>
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal <br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal
<br> <br>
@ -243,7 +250,7 @@
<div class="terminal"> <div class="terminal">
<code> <code>
<span class="code-title"># Backup, encrypt and transfer</span> <span class="code-title"># Backup, encrypt and transfer</span>
<br>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt </code> <br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt</code>
</div> </div>
</div> </div>
</div> </div>
@ -255,7 +262,7 @@
<div class="terminal"> <div class="terminal">
<code> <code>
<span class="code-title"># Transfer and send email with link (uses alias)</span> <span class="code-title"># Transfer and send email with link (uses alias)</span>
<br>$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com <br/>$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com
</code> </code>
</div> </div>
</div> </div>
@ -274,28 +281,45 @@
</div> </div>
</section> </section>
<section id="share">
<div class="wrapper">
<h2 class="page-title">Follow on GitHub</h2>
<br>
<br>
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=follow&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="250" height="50"></iframe>
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="200" height="50"></iframe>
</div>
</section>
<section id="reviews"> <section id="reviews">
<div class="wrapper"> <div class="wrapper">
<div class="row"> <div class="row">
<div class="col-md-8 col-md-offset-2 col-xs-12"> <div class="col-md-8 col-md-offset-2 col-xs-12">
<blockquote class="twitter-tweet tweet-xl" lang="en"> <blockquote class="twitter-tweet tweet-xl" lang="en">
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> <a href="https://twitter.com/FloifyDave/status/517383101425516544">
<img class="twitter-profile" src="images/reviews/dave.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p>
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> <a href="https://twitter.com/FloifyDave/status/517383101425516544">
&mdash; Dave Sims (@FloifyDave)</a> &mdash; Dave Sims (@FloifyDave)</a>
</blockquote> </blockquote>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> <a href="https://twitter.com/kareemk/status/517029789191118849">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> <a href="https://twitter.com/drakpz/status/517008058841829376">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
</a>
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a> <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a>
</blockquote> </blockquote>
</div> </div>
@ -303,14 +327,18 @@
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> <a href="https://twitter.com/jacoblindgren11/status/516975006501203968">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
</a>
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a>
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a> </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> <a href="https://twitter.com/arvestad/status/519507976491499521">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
</a>
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a> <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a>
</blockquote> </blockquote>
</div> </div>
@ -320,82 +348,92 @@
<section id="share"> <section id="share">
<div class="wrapper"> <div class="wrapper">
<h2>Share the love</h2> <h2 class="page-title">Share the love</h2>
<ul class="share-buttons"> <ul class="share-buttons">
<li> <li>
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false"> <i class="icon-facebook"></i> <a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i>
</a> </a>
</li> </li>
<li> <li>
<a href="https://twitter.com/intent/tweet?source=http%3A%2F%2Ftransfer.sh&text=:%20http%3A%2F%2Ftransfer.sh" target="_blank" title="Tweet" onclick="window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(document.title) + ':%20' + encodeURIComponent(document.URL)); return false"> <i class="icon-twitter"></i> <a href="https://twitter.com/intent/tweet?source=http%3A%2F%2Ftransfer.sh&text=:%20http%3A%2F%2Ftransfer.sh" target="_blank" title="Tweet" onclick="window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(document.title) + ':%20' + encodeURIComponent(document.URL)); return false;"> <i class="icon-twitter"></i>
</a></li> </li>
<li> <li>
<a href="https://plus.google.com/share?url=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on Google+" onclick="window.open('https://plus.google.com/share?url=' + encodeURIComponent(document.URL)); return false"> <i class="icon-gplus"></i> <a href="https://plus.google.com/share?url=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on Google+" onclick="window.open('https://plus.google.com/share?url=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-gplus"></i>
</a> </a>
</li> </li>
<li> <li>
<a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Ftransfer.sh&title=&summary=&source=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on LinkedIn" onclick="window.open('http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.URL) + '&title=' + encodeURIComponent(document.title)); return false"> <i class="icon-linkedin"></i> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Ftransfer.sh&title=&summary=&source=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on LinkedIn" onclick="window.open('http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.URL) + '&title=' + encodeURIComponent(document.title)); return false;"> <i class="icon-linkedin"></i>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
</section> </section>
<section id="contact"> <section id="contact">
<div class="wrapper"> <div class="wrapper">
<i class="icon-mail"></i> <i class="icon-mail"></i>
<h2> <h2 class="page-title">
Any questions? Any questions?
</h2> </h2>
<a href="#" data-uv-trigger class="btn-cta">contact us</a> <a href="#" data-uv-trigger class="btn-cta">contact us</a>
</div> </div>
</section> </section>
<section id="tor">
<div class="wrapper">
<a href="https://torproject.com"><img src="images/tor.svg" alt=""></a><br/>
<a href="https://jxm5d6emw5rknovg.onion/">https://jxm5d6emw5rknovg.onion/</a>
</div>
</section>
<footer> <footer>
<div class="wrapper"> <div class="wrapper">
<img src="images/Logo-orange.png" alt="Founded in Holland"> <div style="">
<p>Made with <i class="icon-heart"></i> by <a href="http://dutchcoders.io/" title="Dutch Coders">Dutch Coders</a> <a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p> </p>
</div> </div>
</footer> </footer>
<a href="https://github.com/dutchcoders/transfer.sh/">
<img style="position: absolute; top: 0; right: 0; border: 0" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
<script> <a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
(function() {
var uv = document.createElement('script'); <script>
uv.type = 'text/javascript'; (function() {
uv.async = true; var uv = document.createElement('script');
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js'; uv.type = 'text/javascript';
var s = document.getElementsByTagName('script')[0]; uv.async = true;
s.parentNode.insertBefore(uv, s) uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
})() var s = document.getElementsByTagName('script')[0];
</script> s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script src="/scripts/main.js"></script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script>
(function(b, o, i, l, e, r) {
b.GoogleAnalyticsObject = l;
b[l] || (b[l] =
function() {
(b[l].q = b[l].q || []).push(arguments)
});
b[l].l = +new Date;
e = o.createElement(i);
r = o.getElementsByTagName(i)[0];
e.src = '//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e, r)
}(window, document, 'script', 'ga'));
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<script src="scripts/main.js"></script>
</body> </body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"github.com/goamz/goamz/s3" "github.com/goamz/goamz/s3"
"io" "io"
"mime"
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
@ -11,6 +12,7 @@ import (
type Storage interface { type Storage interface {
Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error)
Head(token string, filename string) (contentType string, contentLength uint64, err error)
Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error
} }
@ -23,6 +25,21 @@ func NewLocalStorage(basedir string) (*LocalStorage, error) {
return &LocalStorage{basedir: basedir}, nil return &LocalStorage{basedir: basedir}, nil
} }
func (s *LocalStorage) Head(token string, filename string) (contentType string, contentLength uint64, err error) {
path := filepath.Join(s.basedir, token, filename)
var fi os.FileInfo
if fi, err = os.Lstat(path); err != nil {
return
}
contentLength = uint64(fi.Size())
contentType = mime.TypeByExtension(filepath.Ext(filename))
return
}
func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) {
path := filepath.Join(s.basedir, token, filename) path := filepath.Join(s.basedir, token, filename)
@ -33,11 +50,12 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser,
var fi os.FileInfo var fi os.FileInfo
if fi, err = os.Lstat(path); err != nil { if fi, err = os.Lstat(path); err != nil {
return
} }
contentLength = uint64(fi.Size()) contentLength = uint64(fi.Size())
contentType = "" contentType = mime.TypeByExtension(filepath.Ext(filename))
return return
} }
@ -80,13 +98,39 @@ func NewS3Storage() (*S3Storage, error) {
return &S3Storage{bucket: bucket}, nil return &S3Storage{bucket: bucket}, nil
} }
func (s *S3Storage) Head(token string, filename string) (contentType string, contentLength uint64, err error) {
key := fmt.Sprintf("%s/%s", token, filename)
// content type , content length
response, err := s.bucket.Head(key, map[string][]string{})
if err != nil {
return
}
contentType = response.Header.Get("Content-Type")
contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0)
if err != nil {
return
}
return
}
func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) {
key := fmt.Sprintf("%s/%s", token, filename) key := fmt.Sprintf("%s/%s", token, filename)
// content type , content length // content type , content length
response, err := s.bucket.GetResponse(key) response, err := s.bucket.GetResponse(key)
contentType = "" if err != nil {
return
}
contentType = response.Header.Get("Content-Type")
contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0) contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0)
if err != nil {
return
}
reader = response.Body reader = response.Body
return return

View file

@ -27,8 +27,11 @@ package main
import ( import (
"github.com/goamz/goamz/aws" "github.com/goamz/goamz/aws"
"github.com/goamz/goamz/s3" "github.com/goamz/goamz/s3"
"github.com/golang/gddo/httputil/header"
"math"
"net/http" "net/http"
"net/mail" "net/mail"
"strconv"
"strings" "strings"
"time" "time"
) )
@ -44,6 +47,163 @@ func getBucket() (*s3.Bucket, error) {
return b, nil return b, nil
} }
func formatNumber(format string, s uint64) string {
return RenderFloat(format, float64(s))
}
var renderFloatPrecisionMultipliers = [10]float64{
1,
10,
100,
1000,
10000,
100000,
1000000,
10000000,
100000000,
1000000000,
}
var renderFloatPrecisionRounders = [10]float64{
0.5,
0.05,
0.005,
0.0005,
0.00005,
0.000005,
0.0000005,
0.00000005,
0.000000005,
0.0000000005,
}
func RenderFloat(format string, n float64) string {
// Special cases:
// NaN = "NaN"
// +Inf = "+Infinity"
// -Inf = "-Infinity"
if math.IsNaN(n) {
return "NaN"
}
if n > math.MaxFloat64 {
return "Infinity"
}
if n < -math.MaxFloat64 {
return "-Infinity"
}
// default format
precision := 2
decimalStr := "."
thousandStr := ","
positiveStr := ""
negativeStr := "-"
if len(format) > 0 {
// If there is an explicit format directive,
// then default values are these:
precision = 9
thousandStr = ""
// collect indices of meaningful formatting directives
formatDirectiveChars := []rune(format)
formatDirectiveIndices := make([]int, 0)
for i, char := range formatDirectiveChars {
if char != '#' && char != '0' {
formatDirectiveIndices = append(formatDirectiveIndices, i)
}
}
if len(formatDirectiveIndices) > 0 {
// Directive at index 0:
// Must be a '+'
// Raise an error if not the case
// index: 0123456789
// +0.000,000
// +000,000.0
// +0000.00
// +0000
if formatDirectiveIndices[0] == 0 {
if formatDirectiveChars[formatDirectiveIndices[0]] != '+' {
panic("RenderFloat(): invalid positive sign directive")
}
positiveStr = "+"
formatDirectiveIndices = formatDirectiveIndices[1:]
}
// Two directives:
// First is thousands separator
// Raise an error if not followed by 3-digit
// 0123456789
// 0.000,000
// 000,000.00
if len(formatDirectiveIndices) == 2 {
if (formatDirectiveIndices[1] - formatDirectiveIndices[0]) != 4 {
panic("RenderFloat(): thousands separator directive must be followed by 3 digit-specifiers")
}
thousandStr = string(formatDirectiveChars[formatDirectiveIndices[0]])
formatDirectiveIndices = formatDirectiveIndices[1:]
}
// One directive:
// Directive is decimal separator
// The number of digit-specifier following the separator indicates wanted precision
// 0123456789
// 0.00
// 000,0000
if len(formatDirectiveIndices) == 1 {
decimalStr = string(formatDirectiveChars[formatDirectiveIndices[0]])
precision = len(formatDirectiveChars) - formatDirectiveIndices[0] - 1
}
}
}
// generate sign part
var signStr string
if n >= 0.000000001 {
signStr = positiveStr
} else if n <= -0.000000001 {
signStr = negativeStr
n = -n
} else {
signStr = ""
n = 0.0
}
// split number into integer and fractional parts
intf, fracf := math.Modf(n + renderFloatPrecisionRounders[precision])
// generate integer part string
intStr := strconv.Itoa(int(intf))
// add thousand separator if required
if len(thousandStr) > 0 {
for i := len(intStr); i > 3; {
i -= 3
intStr = intStr[:i] + thousandStr + intStr[i:]
}
}
// no fractional part, we can leave now
if precision == 0 {
return signStr + intStr
}
// generate fractional part
fracStr := strconv.Itoa(int(fracf * renderFloatPrecisionMultipliers[precision]))
// may need padding
if len(fracStr) < precision {
fracStr = "000000000000000"[:precision-len(fracStr)] + fracStr
}
return signStr + intStr + decimalStr + fracStr
}
func RenderInteger(format string, n int) string {
return RenderFloat(format, float64(n))
}
// Request.RemoteAddress contains port, which we want to remove i.e.: // Request.RemoteAddress contains port, which we want to remove i.e.:
// "[::1]:58292" => "[::1]" // "[::1]:58292" => "[::1]"
func ipAddrFromRemoteAddr(s string) string { func ipAddrFromRemoteAddr(s string) string {
@ -78,3 +238,15 @@ func encodeRFC2047(String string) string {
addr := mail.Address{String, ""} addr := mail.Address{String, ""}
return strings.Trim(addr.String(), " <>") return strings.Trim(addr.String(), " <>")
} }
func acceptsHtml(hdr http.Header) bool {
actual := header.ParseAccept(hdr, "Accept")
for _, s := range actual {
if s.Value == "text/html" {
return (true)
}
}
return (false)
}

View file

@ -0,0 +1,47 @@
</html>
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
include "includes/head.html"
<body id="download">
include "includes/ga.html"
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
include "includes/download-top.html"
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<audio controls>
<source src="{{.Url}}" type="{{.ContentType}}">
</audio>
</div>
</div>
</div>
<br/>
<div>
</section>
include "includes/footer.html"
include "includes/js.html"
</body>
</html>

View file

@ -0,0 +1,143 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{.Filename}} - transfer.sh</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<!-- build:js scripts/vendor/modernizr.js -->
<script src="bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
</head>
<body id="download">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<div id="navigation">
<div class="wrapper">
<h1>transfer.sh</h1>
<ul class="hidden-xs">
<li><a href="#samples">sample use cases</a>
</li>
<li><a href="#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home">
<div class="wrapper">
<h2>
{{.Filename}}</h2>
<a href="{{.Url}}"></a>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal">
<div id="code"></div>
</div>
</div>
</div>
<div>
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> &nbsp;&nbsp;
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a>
<div id="copy-link-wrapper" class="copy-link-wrapper">
<p>Press Ctrl / CMD + C to copy link to your clipboard.</p>
<input readonly="readonly" type="text" value="{{.Url}}" />
</div>
<div id="overlay" class="overlay"></div>
</div>
<script src="scripts/clipboard.js"></script>
</section>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script>
(function(b, o, i, l, e, r) {
b.GoogleAnalyticsObject = l;
b[l] || (b[l] =
function() {
(b[l].q = b[l].q || []).push(arguments)
});
b[l].l = +new Date;
e = o.createElement(i);
r = o.getElementsByTagName(i)[0];
e.src = '//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e, r)
}(window, document, 'script', 'ga'));
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<!-- build:js scripts/main.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/uri.js/src/URI.min.js"></script>
<script src="bower_components/bootstrap/js/transition.js"></script>
<script src="bower_components/bootstrap/js/collapse.js"></script>
<script src="/scripts/showdown.js"></script>
<script src="/scripts/main.js"></script>
<!-- endbuild -->
<script>
var text = "# Markdown *works*.";
var converter = new Showdown.converter();
var html = converter.makeHtml(text);
$('#md-preview').append(html);
</script>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
include "includes/head.html"
<body id="download">
include "includes/ga.html"
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
include "includes/download-top.html"
</div>
</section>
include "includes/footer.html"
include "includes/js.html"
</body>
</html>

View file

@ -0,0 +1,41 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
include "includes/head.html"
<body id="download">
include "includes/ga.html"
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
include "includes/download-top.html"
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<img src="{{.Url}}" alt="">
</div>
</div>
</div>
<br/>
<div>
<div>
</section>
include "includes/footer.html"
include "includes/js.html"
</body>
</html>

View file

@ -0,0 +1,39 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
include "includes/head.html"
<body id="download">
include "includes/ga.html"
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
include "includes/download-top.html"
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal">
<div id="md-preview">{{.Content}}</div>
</div>
</div>
</div>
<br/>
</section>
include "includes/footer.html"
include "includes/js.html"
</body>
</html>

View file

@ -0,0 +1,44 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->
include "includes/head.html"
<body id="download">
include "includes/ga.html"
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
include "includes/download-top.html"
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">
</div>
<div id="terminal" class="terminal preview-image">
<video controls>
<source src="{{.Url}}" type="{{.ContentType}}">
</video>
</div>
</div>
</div>
<br/>
<div>
</section>
include "includes/footer.html"
include "includes/js.html"
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View file

@ -45,14 +45,14 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<g <g
transform="translate(-93.957497,-365.26607)" transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)"
id="layer1"> id="layer1">
<path <path
d="m 85.371201,355.16455 789.901059,0 0,49.98291 -789.901059,0 z" d="m 93.957497,365.85895 750.000003,0 0,31.76074 -750.000003,0 z"
id="rect4487" id="rect4487"
style="fill:#85b5bb;fill-opacity:1;stroke:none" /> style="fill:#85b5bb;fill-opacity:1;stroke:none" />
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.446)" transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9192)"
id="g24" id="g24"
style="fill:#ff7050"> style="fill:#ff7050">
<g <g
@ -78,7 +78,7 @@
</g> </g>
</g> </g>
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.507)" transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9802)"
id="g40" id="g40"
style="fill:#ffed5d"> style="fill:#ffed5d">
<g <g
@ -104,7 +104,7 @@
</g> </g>
</g> </g>
<g <g
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1453.4765)" transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1454.9497)"
id="g56" id="g56"
style="fill:#93de7f"> style="fill:#93de7f">
<g <g

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,5 @@
</div>
</div>
</div>
<br/>
</section>

View file

@ -0,0 +1,10 @@
<div>
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> &nbsp;&nbsp;
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a>
<div id="copy-link-wrapper" class="copy-link-wrapper">
<p>Press Ctrl / CMD + C to copy link to your clipboard.</p>
<input readonly="readonly" type="text" value="{{.Url}}" />
</div>
<div id="overlay" class="overlay"></div>
</div>
<script src="scripts/clipboard.js"></script>

View file

@ -0,0 +1,6 @@
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>
<a href="{{.Url}}" class="btn-cta btn"> download</i> </a> <br/><br/>

View file

@ -0,0 +1,36 @@
<footer>
<div class="wrapper">
<div style="">
<a href="bitcoin:164ybRMLbg1dhhWWiUkXtiNr7jUhMKdJqH" label="Bitcoin+Donation" style="word-wrap: break-word;">
<img border="0" src=" /images/bitcoin.png" style="margin: 0 auto;;">
</a>
</div>
<br/>
<br/>
<img src="/images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://blog.dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
</div>
</footer>
<a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

View file

@ -0,0 +1,15 @@
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>

View file

@ -0,0 +1,14 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="/styles/main.css">
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<!-- build:js /scripts/vendor/modernizr.js -->
<script src="bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
</head>

View file

@ -0,0 +1,9 @@
<!-- build:js /scripts/main.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/uri.js/src/URI.min.js"></script>
<script src="bower_components/bootstrap/js/transition.js"></script>
<script src="bower_components/bootstrap/js/collapse.js"></script>
<script src="/scripts/showdown.js"></script>
<script src="/scripts/main.js"></script>
<!-- endbuild -->

View file

@ -0,0 +1,15 @@
<div id="navigation">
<div class="wrapper">
<a href="/">
<h1>transfer.sh</h1>
</a>
<ul class="hidden-xs">
<li><a href="/">home</a>
</li>
<li><a href="/#samples">sample use cases</a>
</li>
<li><a href="/#contact">contact us</a>
</li>
</ul>
</div>
</div>

View file

@ -6,22 +6,8 @@
<html class="no-js"> <html class="no-js">
<!--<![endif]--> <!--<![endif]-->
<head> include "includes/head.html"
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>transfer.sh - Easy and fast file sharing from the command-line.</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<!-- build:js scripts/vendor/modernizr.js -->
<script src="bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
</head>
<body> <body>
@ -41,24 +27,14 @@
ga('send', 'pageview'); ga('send', 'pageview');
</script> </script>
<div id="navigation"> include "includes/navigation.html"
<div class="wrapper">
<h1>transfer.sh</h1>
<ul class="hidden-xs">
<li><a href="#samples">sample use cases</a>
</li>
<li><a href="#contact">contact us</a>
</li>
</ul>
</div>
</div>
<section id="home"> <section id="home">
<div class="wrapper"> <div class="wrapper">
<h2> <h2 class="page-title">
Easy file sharing from the command line</h2> Easy file sharing from the command line</h2>
<div class="row animated fadeInDown"> <div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12"> <div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top"> <div class="terminal-top">
</div> </div>
@ -77,7 +53,8 @@
<code> <code>
<br> <br>
<span class="code-title"># Upload from web</span> <span class="code-title"># Upload from web</span>
<br>Drag your files here, or <a class="browse" href="#"> click to browse.</a> <br>Drag your files here, or <a class="browse" href="#"> click to browse. <br/></a>
</code> </code>
<input type="file" multiple="multiple" style='display: none;' /> <input type="file" multiple="multiple" style='display: none;' />
<ul class='queue'> <ul class='queue'>
@ -141,7 +118,7 @@
<section id="samples"> <section id="samples">
<div class="wrapper"> <div class="wrapper">
<h2> <h2 class="page-title">
Sample use cases Sample use cases
</h2> </h2>
<div class="row"> <div class="row">
@ -170,7 +147,8 @@
<span class="code-title"># Add this to .bashrc or its equivalent</span> <span class="code-title"># Add this to .bashrc or its equivalent</span>
<br/>transfer() { <br/>transfer() {
<br># write to output to tmpfile because of progress bar <br># write to output to tmpfile because of progress bar
<br>tmpfile=$( mktemp -t transferXXX ); curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile; cat $tmpfile; rm -f $tmpfile; } <br>tmpfile=$( mktemp -t transferXXX ); basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; cat $tmpfile; rm -f $tmpfile;
<br/>}
<br/> <br/>
<br/>alias transfer=transfer <br/>alias transfer=transfer
<br/> <br/>
@ -231,7 +209,8 @@
<span class="code-title"># Scan for malware or viruses using Clamav</span> <span class="code-title"># Scan for malware or viruses using Clamav</span>
<br>$ wget http://www.eicar.org/download/eicar.com <br>$ wget http://www.eicar.org/download/eicar.com
<br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan <br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan
<br><br> <br>
<br>
<span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> <span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span>
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal <br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal
<br> <br>
@ -245,7 +224,7 @@
<div class="terminal"> <div class="terminal">
<code> <code>
<span class="code-title"># Backup, encrypt and transfer</span> <span class="code-title"># Backup, encrypt and transfer</span>
<br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt </code> <br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt</code>
</div> </div>
</div> </div>
</div> </div>
@ -276,28 +255,45 @@
</div> </div>
</section> </section>
<section id="share">
<div class="wrapper">
<h2 class="page-title">Follow on GitHub</h2>
<br>
<br>
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=follow&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="250" height="50"></iframe>
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="200" height="50"></iframe>
</div>
</section>
<section id="reviews"> <section id="reviews">
<div class="wrapper"> <div class="wrapper">
<div class="row"> <div class="row">
<div class="col-md-8 col-md-offset-2 col-xs-12"> <div class="col-md-8 col-md-offset-2 col-xs-12">
<blockquote class="twitter-tweet tweet-xl" lang="en"> <blockquote class="twitter-tweet tweet-xl" lang="en">
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> <a href="https://twitter.com/FloifyDave/status/517383101425516544">
<img class="twitter-profile" src="images/reviews/dave.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p>
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> <a href="https://twitter.com/FloifyDave/status/517383101425516544">
&mdash; Dave Sims (@FloifyDave)</a> &mdash; Dave Sims (@FloifyDave)</a>
</blockquote> </blockquote>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> <a href="https://twitter.com/kareemk/status/517029789191118849">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> <a href="https://twitter.com/drakpz/status/517008058841829376">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
</a>
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a> <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a>
</blockquote> </blockquote>
</div> </div>
@ -305,14 +301,18 @@
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> <a href="https://twitter.com/jacoblindgren11/status/516975006501203968">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
</a>
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a>
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a> </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> <a href="https://twitter.com/arvestad/status/519507976491499521">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
</a>
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a> <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a>
</blockquote> </blockquote>
</div> </div>
@ -322,7 +322,7 @@
<section id="share"> <section id="share">
<div class="wrapper"> <div class="wrapper">
<h2>Share the love</h2> <h2 class="page-title">Share the love</h2>
<ul class="share-buttons"> <ul class="share-buttons">
<li> <li>
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i> <a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i>
@ -343,71 +343,33 @@
</div> </div>
</section> </section>
<section id="contact"> <section id="contact">
<div class="wrapper"> <div class="wrapper">
<i class="icon-mail"></i> <i class="icon-mail"></i>
<h2> <h2 class="page-title">
Any questions? Any questions?
</h2> </h2>
<a href="#" data-uv-trigger class="btn-cta">contact us</a> <a href="#" data-uv-trigger class="btn-cta">contact us</a>
</div> </div>
</section> </section>
<footer>
<section id="tor">
<div class="wrapper"> <div class="wrapper">
<img src="images/Logo-orange.png" alt="Founded in Holland"> <a href="https://torproject.com"><img src="images/tor.svg" alt=""></a><br/>
<p>Made with <i class="icon-heart"></i> by <a href="http://dutchcoders.io/" title="Dutch Coders">Dutch Coders</a> <a href="https://jxm5d6emw5rknovg.onion/">https://jxm5d6emw5rknovg.onion/</a>
</p>
</div> </div>
</footer> </section>
<a href="https://github.com/dutchcoders/transfer.sh/">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
<script> include "includes/footer.html"
(function() {
var uv = document.createElement('script'); include "includes/js.html"
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<script>
(function(b, o, i, l, e, r) {
b.GoogleAnalyticsObject = l;
b[l] || (b[l] =
function() {
(b[l].q = b[l].q || []).push(arguments)
});
b[l].l = +new Date;
e = o.createElement(i);
r = o.getElementsByTagName(i)[0];
e.src = '//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e, r)
}(window, document, 'script', 'ga'));
ga('create', 'UA-40833733-1', 'transfer.sh');
ga('send', 'pageview');
</script>
<!-- build:js scripts/main.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/highlightjs/highlight.pack.js"></script>
<!-- </*script*/ src="bower_components/typed.js/js/typed.js"></script> -->
<script src="bower_components/uri.js/src/URI.min.js"></script>
<script src="bower_components/bootstrap/js/transition.js"></script>
<script src="bower_components/bootstrap/js/collapse.js"></script>
<script src="scripts/typewriter-bundle.js"></script>
<script src="scripts/main.js"></script>
<!-- endbuild -->
</body> </body>

View file

@ -0,0 +1,61 @@
(function() {
var copylinkbtn = document.getElementById("copy-link-btn"),
copylink = document.getElementById("copy-link-wrapper"),
overlay = document.getElementById("overlay");
var url = "http://url"
copylinkbtn.addEventListener("click", function(e) {
e.preventDefault();
var error = document.getElementsByClassName('error');
while (error[0]) {
error[0].parentNode.removeChild(error[0]);
}
document.body.className += ' active';
copylink.children[1].value = url;
copylink.children[1].focus();
copylink.children[1].select();
return (false);
}, false);
overlay.addEventListener("click", function(e) {
e.preventDefault();
document.body.className = '';
return (false);
}, false);
copylink.children[2].addEventListener("keydown", function(e) {
var error = document.getElementsByClassName('error');
while (error[0]) {
error[0].parentNode.removeChild(error[0]);
}
setTimeout(function() {
if((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2])) {
document.body.className = '';
} else if((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2]) === false) {
var error = document.createElement('span');
error.className = 'error';
var errortext = document.createTextNode('The link was not copied, make sure the entire text is selected.');
error.appendChild(errortext);
copylink.appendChild(error);
}
}, 100);
function isTextSelected(input) {
if (typeof input.selectionStart == "number") {
return input.selectionStart == 0 && input.selectionEnd == input.value.length;
} else if (typeof document.selection != "undefined") {
input.focus();
return document.selection.createRange().text == input.value;
}
}
}, false);
})();

View file

@ -18,10 +18,18 @@ $(document).ready(function() {
(function() { (function() {
var files = Array() var files = Array()
var queue = Array()
$(window).bind('beforeunload', function(){
if (queue.length==0)
return;
return 'There are still ' + queue.length + ' files being uploaded.';
});
function upload(file) { function upload(file) {
$('.browse').addClass('uploading'); $('.browse').addClass('uploading');
var li = $('<li style="clear:both;"/>'); var li = $('<li style="clear:both;"/>');
li.append($('<div><div class="upload-progress"><span></span><div class="bar" style="width:0%;">####################################################</div></div><p>Uploading... ' + file.name + '</p></div>')); li.append($('<div><div class="upload-progress"><span></span><div class="bar" style="width:0%;">####################################################</div></div><p>Uploading... ' + file.name + '</p></div>'));
@ -33,7 +41,8 @@ $(document).ready(function() {
var pc = parseInt((e.loaded / e.total * 100)); var pc = parseInt((e.loaded / e.total * 100));
$('.upload-progress', $(li)).show(); $('.upload-progress', $(li)).show();
$('.upload-progress .bar', $(li)).css('width', pc + "%"); $('.upload-progress .bar', $(li)).css('width', pc + "%");
$('.upload-progress span ').empty().append(pc + "%"); $('.upload-progress span ', $(li)).empty().append(pc + "%");
}, false); }, false);
xhr.onreadystatechange = function(e) { xhr.onreadystatechange = function(e) {
@ -47,8 +56,13 @@ $(document).ready(function() {
$(li).html('<span>Error (' + xhr.status + ') during upload of file ' + file.name + '</span>'); $(li).html('<span>Error (' + xhr.status + ') during upload of file ' + file.name + '</span>');
} }
files.push(xhr.responseText.replace("https://transfer.sh/", "").replace("\n", "")); // file uploaded successfully, remove from queue
// files.push(URI(xhr.responseText).absoluteTo(location.href).toString()); var index = queue.indexOf(xhr);
if (index > -1) {
queue.splice(index, 1);
}
files.push(URI(xhr.responseText.replace("\n", "")).path());
$(".download-zip").attr("href", URI("(" + files.join(",") + ").zip").absoluteTo(location.href).toString()); $(".download-zip").attr("href", URI("(" + files.join(",") + ").zip").absoluteTo(location.href).toString());
$(".download-tar").attr("href", URI("(" + files.join(",") + ").tar.gz").absoluteTo(location.href).toString()); $(".download-tar").attr("href", URI("(" + files.join(",") + ").tar.gz").absoluteTo(location.href).toString());
@ -56,7 +70,9 @@ $(document).ready(function() {
$(".all-files").addClass('show'); $(".all-files").addClass('show');
} }
}; };
// should queue all uploads. // should queue all uploads.
queue.push(xhr);
// start upload // start upload
xhr.open("PUT", '/' + file.name, true); xhr.open("PUT", '/' + file.name, true);
@ -79,7 +95,6 @@ $(document).ready(function() {
var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files; var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files;
$.each(files, function(index, file) { $.each(files, function(index, file) {
console.debug(file);
upload(file); upload(file);
}); });
@ -93,7 +108,6 @@ $(document).ready(function() {
}); });
$('input[type=file]').on('change', function(event) { $('input[type=file]').on('change', function(event) {
$.each(this.files, function(index, file) { $.each(this.files, function(index, file) {
if (file instanceof Blob) { if (file instanceof Blob) {
@ -101,4 +115,68 @@ $(document).ready(function() {
} }
}); });
}); });
// clipboard
if (window.location.href.indexOf("download") > -1 ) {
(function() {
var copylinkbtn = document.getElementById("copy-link-btn"),
copylink = document.getElementById("copy-link-wrapper"),
overlay = document.getElementById("overlay");
var url = "http://url"
copylinkbtn.addEventListener("click", function() {
var error = document.getElementsByClassName('error');
while (error[0]) {
error[0].parentNode.removeChild(error[0]);
}
document.body.className += ' active';
copylink.children[1].value = url;
copylink.children[1].focus();
copylink.children[1].select();
}, false);
overlay.addEventListener("click", function() {
document.body.className = '';
}, false);
copylink.children[1].addEventListener("keydown", function(e) {
var error = document.getElementsByClassName('error');
while (error[0]) {
error[0].parentNode.removeChild(error[0]);
}
setTimeout(function() {
if ((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2])) {
document.body.className = '';
} else if ((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2]) === false) {
var error = document.createElement('span');
error.className = 'error';
var errortext = document.createTextNode('The link was not copied, make sure the entire text is selected.');
error.appendChild(errortext);
copylink.appendChild(error);
}
}, 100);
function isTextSelected(input) {
if (typeof input.selectionStart == "number") {
return input.selectionStart == 0 && input.selectionEnd == input.value.length;
} else if (typeof document.selection != "undefined") {
input.focus();
return document.selection.createRange().text == input.value;
}
}
}, false);
})();
};
})(); })();

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -9,10 +9,10 @@
// Core CSS // Core CSS
@import "../bower_components/bootstrap/less/scaffolding.less"; @import "../bower_components/bootstrap/less/scaffolding.less";
@import "../bower_components/bootstrap/less/type.less"; @import "../bower_components/bootstrap/less/type.less";
/* @import "../bower_components/bootstrap/less/code.less"; */ // @import "../bower_components/bootstrap/less/code.less";
@import "../bower_components/bootstrap/less/grid.less"; @import "../bower_components/bootstrap/less/grid.less";
//@import "../bower_components/bootstrap/less/tables.less"; @import "../bower_components/bootstrap/less/tables.less";
//@import "../bower_components/bootstrap/less/forms.less"; @import "../bower_components/bootstrap/less/forms.less";
//@import "../bower_components/bootstrap/less/buttons.less"; //@import "../bower_components/bootstrap/less/buttons.less";
// Components // Components

View file

@ -1,4 +1,9 @@
body {
max-width: 2000px;
margin: 0 auto;
}
.browsehappy { .browsehappy {
margin: 0.2em 0; margin: 0.2em 0;
background: orange; background: orange;
@ -10,8 +15,8 @@
margin-top: 30px; margin-top: 30px;
ul { ul {
list-style: none; list-style: none;
max-width: 300px; max-width: 400px;
margin: 0 auto; marghomein: 0 auto;
} }
li { li {
display: inline-block; display: inline-block;
@ -41,8 +46,7 @@
} }
.page-title {
h2 {
text-align: center; text-align: center;
font-size: 35px; font-size: 35px;
@media (min-width: @screen-sm-min) { @media (min-width: @screen-sm-min) {
@ -90,8 +94,6 @@ a {
} }
} }
::selection { ::selection {
background: @red; background: @red;
} }

View file

@ -1,14 +1,14 @@
#home { #home {
text-align: center; text-align: center;
h2 { .page-title {
font-size: 30px; font-size: 30px;
} }
@media (min-width: @screen-sm-min) { @media (min-width: @screen-sm-min) {
padding: 50px; padding: 50px;
h2 { .page-title {
font-size: 45px; font-size: 45px;
margin-top: -20px; margin-top: -20px;
margin-bottom: 45px; margin-bottom: 20px;
} }
} }
.btn-home { .btn-home {
@ -68,7 +68,12 @@
} }
.terminal { .terminal {
a {
color: #fff
}
.border-top-radius (0); .border-top-radius (0);
.border-bottom-radius (5px); .border-bottom-radius (5px);
background: @dark-blue; background: @dark-blue;
// background: url(../images/terminal.svg); // background: url(../images/terminal.svg);
@ -93,6 +98,7 @@
span { span {
float: right; float: right;
} }
padding-top: 4px;
} }
.all-files { .all-files {

View file

@ -21,7 +21,7 @@
h4 { h4 {
margin-top: 30px; margin-top: 30px;
} }
padding: 50px 0; padding: 75px 0;
text-align: center; text-align: center;
.btn-cta { .btn-cta {
margin: 30px 0; margin: 30px 0;
@ -61,6 +61,26 @@
} }
} }
#github {
text-align: center;
padding: 50px 0;
}
#tor {
text-align: center;
img {
max-width: 100px;
margin: 0 auto;
margin-bottom: 10px;
}
background: @light-gray;
padding: 50px 0;
a {
font-size: 20px;
}
}
footer { footer {
text-align: center; text-align: center;

View file

@ -0,0 +1,200 @@
.preview-wrapper {
padding-bottom: 30px;
}
html {
min-height:100%;
}
#download {
position: static;
footer {
bottom: 0;
left: 0;
width: 100%;
position: absolute;
z-index: -1;
}
}
.preview-image {
img {
margin: 0 auto;
display:block;
max-width: 800px;
max-width: 100%;
}
padding: 0;
padding: 0px;
}
.overlay {
position: fixed;
z-index: 100;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0,0,0,0.10);
visibility: hidden;
opacity: 0;
transition: opacity 0.2s ease;
.active & {
visibility: visible;
opacity: 1;
}
}
.copy-link-wrapper {
z-index: 200;
padding: 2em;
position: fixed;
top: 50%;
left: 50%;
width: 50%;
max-width: 500px;
min-width: 300px;
background-color: @blue;
border-radius: 2px;
transform: translateX(-50%) translateY(-50%);
opacity: 0;
transition: opacity 0.2s ease;
clip:rect(1px 1px 1px 1px);
opacity: 0;
top: -9999999px;
left: -9999999px;
.active & {
clip: auto;
opacity: 1;
top: 50%;
left: 50%;
}
p {
font-size: 20px;
color: #fff;
}
input {
background-color: @light-gray;
color: @text-color;
border: 0;
font-size: 1em;
padding: 1em;
margin: 0;
width: 100%;
border-radius: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.error {
text-align: center;
color: #E7483B;
display: block;
padding: 0.5em;
}
}
#md-preview,{
padding-bottom: 30px;
}
video {
margin: 0 auto;
width: 100%;
}
.wrap {
width: 40%;
height: 40%;
margin: 20px auto;
}
video {
width: 100%;
}
video::-webkit-media-controls-enclosure {
padding: 0px;
height: 50px;
}
video::-webkit-media-controls-panel {
opacity: 1 !important;
display: -webkit-flex !important;
margin-top: 50px;
height: 50px;
background-color: @dark-blue;
border-radius: 0 0 10px 10px;
}
video::-webkit-media-controls-timeline {
height: 12px;
padding: 0px;
border: 0px;
}
video::-webkit-media-controls-volume-slider, video::-webkit-media-controls-timeline {
height: 12px;
border-radius: 5px;
min-width: 15px;
}
video::-webkit-media-controls-volume-slider::-webkit-media-slider-container, video::-webkit-media-controls-timeline::-webkit-media-slider-container {
border: 0px;
border-radius: 5px;
background-color: @blue;
cursor: pointer;
}
::-webkit-media-slider-thumb {
-webkit-appearance: none;
background: red;
}
video::-webkit-media-controls-play-button {
cursor: pointer;
}
video::-webkit-media-controls-play-button:hover {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
opacity: 0.7;
}
video::-webkit-media-controls-fullscreen-button {
-webkit-appearance: none;
background-color: transparent;
cursor: pointer;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAABACAYAAADF2C3zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3MDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3MTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQyQkE2QUZGNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQyQkE2QjAwNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+1z7uaAAAAVhJREFUeNrsljFuAjEQRb3ACZByii2pECmgySFIGoiUGsEKiaQAimwTToCggSYSNUoJHSfgFJwhMt9oHBlj8Ga2SAqP9KQV7PPY4y1+9PDYEZ4agaHrj4Lwl5LHXFkvsOXKatt1jjykzrq2WeW+Jb6Bhp5BySOvQQLuaKEPYwYnOQLSkpTwBfbUqQam9hDVtieOyaoOGxDTAtNrV9UFqTEc/UGUQeXWmfSZB6BqXMc3aIFlFllY4hP49N2h66p2YJXly3HJ92ABihxZVRPM6BqvViSlFNwqiBwV5CAHOchBDnKQ/5/si4/iOUn5YX0+ec0X1mkBXljH1nlhncTfh3WIF2EdR/gJ677OKqwfdOqHmJ4Nsd17PwU5E/yWgJieY/Biv6MoUVjvOe61j+cGuuwpsLvDOl5KjeFkDusRtiSNKZ6FdXTlhXWIfxTWcf58YR0L3AzrRwEGAJoOgCMfh6hiAAAAAElFTkSuQmCC);
background-size: 16px 64px;
background-position: center 8px;
background-repeat: no-repeat;
}
video::-webkit-media-controls-mute-button {
-webkit-appearance: none;
background-color: transparent;
cursor: pointer;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAABACAYAAAATffeWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3NDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3NTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY3RDUyMDcyNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3RDUyMDczNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Gp0GRAAAATdJREFUeNpidIsuYMABwoF4BhCvB+IkXIqYcIj7APEiIBYA4jg0OREgLsJnQAgQrwJiNiifGU3eFIi7gDgPxGEBYnYg1gBiDqizQX5ixOEyCyDeC8SNQNwJxJtABuwHYksGwoAR6q3tQFwKxGlAnMtEpGYQ+A+1NROI+aDedGdiIA2sAWJWaDhcBGIVUg1ABqz4ohEXAMXQbyA+DcRaQHwHZMBxIjWDArEcmrg+AXEYEO8ExYIjUjRGQuOXEUcgghLVOahBoAQ1GWTAT2iAgMBJID4BxPOhBqIDkJwnENcDcQkQP8AWBiuAOBiIf0H5f9HkT0NdMAFfIG4D4gggfgtNPMjgDRD3wgPm////DJSAUQNGDRg1YNSAUQNGDRg1YNSA4WhAUnHraI9ltMcy2mMZDD0WgAADADYlybDQKXdAAAAAAElFTkSuQmCC);
background-size: 16px 64px;
background-position: center 8px;
background-repeat: no-repeat;
}
video::-webkit-media-controls-fullscreen-button:hover {
-webkit-appearance: none;
background-position: center -42px;
}
video::-webkit-media-controls-mute-button:hover {
-webkit-appearance: none;
background-position: center -43px;
}
video::-webkit-media-controls-current-time-display, video::-webkit-media-controls-time-remaining-display {
font-size: 13px;
font-weight: normal;
}

View file

@ -23,7 +23,7 @@ blockquote.twitter-tweet {
margin: 0 auto; margin: 0 auto;
} }
@media (max-width: @screen-xs) { @media (max-width: @screen-xs) {
.twitter-profile { .twitter-profile {
display:none!important; display:none!important;
} }
} }
@ -43,17 +43,19 @@ blockquote.twitter-tweet a {
outline: 0 none; outline: 0 none;
} }
blockquote.twitter-tweet a:hover, blockquote.tweet-xl {
blockquote.twitter-tweet a:focus { p {
text-decoration: underline; font-size: 22px;
line-height: 25px;
}
a {
font-size: 22px;
}
@media (max-width: @screen-xs) {
p {
font-size: 17px;}
a {
font-size: 17px;
}
}
} }
blockquote.tweet-xl {
p {
font-size: 22px;
line-height: 25px;
}
a {
font-size: 22px;
}
}

View file

@ -622,7 +622,6 @@ address {
font-style: normal; font-style: normal;
line-height: 1.42857143; line-height: 1.42857143;
} }
/* @import "../bower_components/bootstrap/less/code.less"; */
.container { .container {
margin-right: auto; margin-right: auto;
margin-left: auto; margin-left: auto;
@ -1316,6 +1315,538 @@ address {
margin-left: 0%; margin-left: 0%;
} }
} }
table {
max-width: 100%;
background-color: transparent;
}
th {
text-align: left;
}
.table {
width: 100%;
margin-bottom: 20px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #dddddd;
}
.table > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #dddddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
border-top: 0;
}
.table > tbody + tbody {
border-top: 2px solid #dddddd;
}
.table .table {
background-color: #ffffff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
padding: 5px;
}
.table-bordered {
border: 1px solid #dddddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #dddddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover > td,
.table-hover > tbody > tr:hover > th {
background-color: #f5f5f5;
}
table col[class*="col-"] {
position: static;
float: none;
display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
float: none;
display: table-cell;
}
.table > thead > tr > .active,
.table > tbody > tr > .active,
.table > tfoot > tr > .active,
.table > thead > .active > td,
.table > tbody > .active > td,
.table > tfoot > .active > td,
.table > thead > .active > th,
.table > tbody > .active > th,
.table > tfoot > .active > th {
background-color: #f5f5f5;
}
.table-hover > tbody > tr > .active:hover,
.table-hover > tbody > .active:hover > td,
.table-hover > tbody > .active:hover > th {
background-color: #e8e8e8;
}
.table > thead > tr > .success,
.table > tbody > tr > .success,
.table > tfoot > tr > .success,
.table > thead > .success > td,
.table > tbody > .success > td,
.table > tfoot > .success > td,
.table > thead > .success > th,
.table > tbody > .success > th,
.table > tfoot > .success > th {
background-color: #dff0d8;
}
.table-hover > tbody > tr > .success:hover,
.table-hover > tbody > .success:hover > td,
.table-hover > tbody > .success:hover > th {
background-color: #d0e9c6;
}
.table > thead > tr > .danger,
.table > tbody > tr > .danger,
.table > tfoot > tr > .danger,
.table > thead > .danger > td,
.table > tbody > .danger > td,
.table > tfoot > .danger > td,
.table > thead > .danger > th,
.table > tbody > .danger > th,
.table > tfoot > .danger > th {
background-color: #f2dede;
}
.table-hover > tbody > tr > .danger:hover,
.table-hover > tbody > .danger:hover > td,
.table-hover > tbody > .danger:hover > th {
background-color: #ebcccc;
}
.table > thead > tr > .warning,
.table > tbody > tr > .warning,
.table > tfoot > tr > .warning,
.table > thead > .warning > td,
.table > tbody > .warning > td,
.table > tfoot > .warning > td,
.table > thead > .warning > th,
.table > tbody > .warning > th,
.table > tfoot > .warning > th {
background-color: #fcf8e3;
}
.table-hover > tbody > tr > .warning:hover,
.table-hover > tbody > .warning:hover > td,
.table-hover > tbody > .warning:hover > th {
background-color: #faf2cc;
}
@media (max-width: 767px) {
.table-responsive {
width: 100%;
margin-bottom: 15px;
overflow-y: hidden;
overflow-x: scroll;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #dddddd;
-webkit-overflow-scrolling: touch;
}
.table-responsive > .table {
margin-bottom: 0;
}
.table-responsive > .table > thead > tr > th,
.table-responsive > .table > tbody > tr > th,
.table-responsive > .table > tfoot > tr > th,
.table-responsive > .table > thead > tr > td,
.table-responsive > .table > tbody > tr > td,
.table-responsive > .table > tfoot > tr > td {
white-space: nowrap;
}
.table-responsive > .table-bordered {
border: 0;
}
.table-responsive > .table-bordered > thead > tr > th:first-child,
.table-responsive > .table-bordered > tbody > tr > th:first-child,
.table-responsive > .table-bordered > tfoot > tr > th:first-child,
.table-responsive > .table-bordered > thead > tr > td:first-child,
.table-responsive > .table-bordered > tbody > tr > td:first-child,
.table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.table-responsive > .table-bordered > thead > tr > th:last-child,
.table-responsive > .table-bordered > tbody > tr > th:last-child,
.table-responsive > .table-bordered > tfoot > tr > th:last-child,
.table-responsive > .table-bordered > thead > tr > td:last-child,
.table-responsive > .table-bordered > tbody > tr > td:last-child,
.table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.table-responsive > .table-bordered > tbody > tr:last-child > th,
.table-responsive > .table-bordered > tfoot > tr:last-child > th,
.table-responsive > .table-bordered > tbody > tr:last-child > td,
.table-responsive > .table-bordered > tfoot > tr:last-child > td {
border-bottom: 0;
}
}
fieldset {
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: 20px;
font-size: 21px;
line-height: inherit;
color: #333333;
border: 0;
border-bottom: 1px solid #e5e5e5;
}
label {
display: inline-block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="search"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9;
/* IE8-9 */
line-height: normal;
}
input[type="file"] {
display: block;
}
select[multiple],
select[size] {
height: auto;
}
select optgroup {
font-size: inherit;
font-style: inherit;
font-family: inherit;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
height: auto;
}
output {
display: block;
padding-top: 7px;
font-size: 14px;
line-height: 1.42857143;
color: #555555;
vertical-align: middle;
}
.form-control {
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555555;
vertical-align: middle;
background-color: #ffffff;
background-image: none;
border: 1px solid #cccccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control:-moz-placeholder {
color: #999999;
}
.form-control::-moz-placeholder {
color: #999999;
opacity: 1;
}
.form-control:-ms-input-placeholder {
color: #999999;
}
.form-control::-webkit-input-placeholder {
color: #999999;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
cursor: not-allowed;
background-color: #eeeeee;
}
textarea.form-control {
height: auto;
}
.form-group {
margin-bottom: 15px;
}
.radio,
.checkbox {
display: block;
min-height: 20px;
margin-top: 10px;
margin-bottom: 10px;
padding-left: 20px;
vertical-align: middle;
}
.radio label,
.checkbox label {
display: inline;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
float: left;
margin-left: -20px;
}
.radio + .radio,
.checkbox + .checkbox {
margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
.radio[disabled],
.radio-inline[disabled],
.checkbox[disabled],
.checkbox-inline[disabled],
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"],
fieldset[disabled] .radio,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox,
fieldset[disabled] .checkbox-inline {
cursor: not-allowed;
}
.input-sm {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
select.input-sm {
height: 30px;
line-height: 30px;
}
textarea.input-sm {
height: auto;
}
.input-lg {
height: 46px;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
select.input-lg {
height: 46px;
line-height: 46px;
}
textarea.input-lg {
height: auto;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline {
color: #8a6d3b;
}
.has-warning .form-control {
border-color: #8a6d3b;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
border-color: #66512c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
color: #8a6d3b;
border-color: #8a6d3b;
background-color: #fcf8e3;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline {
color: #a94442;
}
.has-error .form-control {
border-color: #a94442;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
border-color: #843534;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
color: #a94442;
border-color: #a94442;
background-color: #f2dede;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline {
color: #3c763d;
}
.has-success .form-control {
border-color: #3c763d;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
border-color: #2b542c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
color: #3c763d;
border-color: #3c763d;
background-color: #dff0d8;
}
.form-control-static {
margin-bottom: 0;
}
.help-block {
display: block;
margin-top: 5px;
margin-bottom: 10px;
color: #7b7b7b;
}
@media (min-width: 768px) {
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .form-control {
display: inline-block;
}
.form-inline select.form-control {
width: auto;
}
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
padding-left: 0;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: none;
margin-left: 0;
}
}
.form-horizontal .control-label,
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
margin-top: 0;
margin-bottom: 0;
padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
min-height: 27px;
}
.form-horizontal .form-group {
margin-left: -35px;
margin-right: -35px;
}
.form-horizontal .form-group:before,
.form-horizontal .form-group:after {
content: " ";
display: table;
}
.form-horizontal .form-group:after {
clear: both;
}
.form-horizontal .form-group:before,
.form-horizontal .form-group:after {
content: " ";
display: table;
}
.form-horizontal .form-group:after {
clear: both;
}
.form-horizontal .form-control-static {
padding-top: 7px;
}
@media (min-width: 768px) {
.form-horizontal .control-label {
text-align: right;
}
}
.fade { .fade {
opacity: 0; opacity: 0;
-webkit-transition: opacity 0.15s linear; -webkit-transition: opacity 0.15s linear;
@ -5358,6 +5889,10 @@ body {
-o-animation-duration: 0.75s; -o-animation-duration: 0.75s;
animation-duration: 0.75s; animation-duration: 0.75s;
} }
body {
max-width: 2000px;
margin: 0 auto;
}
.browsehappy { .browsehappy {
margin: 0.2em 0; margin: 0.2em 0;
background: orange; background: orange;
@ -5369,8 +5904,8 @@ body {
} }
#navigation ul { #navigation ul {
list-style: none; list-style: none;
max-width: 300px; max-width: 400px;
margin: 0 auto; marghomein: 0 auto;
} }
#navigation li { #navigation li {
display: inline-block; display: inline-block;
@ -5397,12 +5932,12 @@ body {
font-size: 15px; font-size: 15px;
color: #3b3b3b; color: #3b3b3b;
} }
h2 { .page-title {
text-align: center; text-align: center;
font-size: 35px; font-size: 35px;
} }
@media (min-width: 768px) { @media (min-width: 768px) {
h2 { .page-title {
font-size: 50px; font-size: 50px;
} }
} }
@ -5482,17 +6017,17 @@ a:hover {
#home { #home {
text-align: center; text-align: center;
} }
#home h2 { #home .page-title {
font-size: 30px; font-size: 30px;
} }
@media (min-width: 768px) { @media (min-width: 768px) {
#home { #home {
padding: 50px; padding: 50px;
} }
#home h2 { #home .page-title {
font-size: 45px; font-size: 45px;
margin-top: -20px; margin-top: -20px;
margin-bottom: 45px; margin-bottom: 20px;
} }
} }
#home .btn-home { #home .btn-home {
@ -5561,6 +6096,9 @@ a:hover {
backbground-repeat: no-repeat; backbground-repeat: no-repeat;
background-size: cover; background-size: cover;
} }
.terminal a {
color: #ffffff;
}
.terminal-top { .terminal-top {
border-top-right-radius: 5px; border-top-right-radius: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
@ -5571,6 +6109,7 @@ a:hover {
} }
.upload-progress { .upload-progress {
max-width: 80%; max-width: 80%;
padding-top: 4px;
} }
.upload-progress .bar { .upload-progress .bar {
word-wrap: normal; word-wrap: normal;
@ -5603,7 +6142,7 @@ a:hover {
font-size: 100px; font-size: 100px;
} }
#samples { #samples {
padding: 50px 0; padding: 75px 0;
text-align: center; text-align: center;
} }
#samples h4 { #samples h4 {
@ -5643,6 +6182,23 @@ a:hover {
color: #fff; color: #fff;
text-decoration: none; text-decoration: none;
} }
#github {
text-align: center;
padding: 50px 0;
}
#tor {
text-align: center;
background: #f6f8f8;
padding: 50px 0;
}
#tor img {
max-width: 100px;
margin: 0 auto;
margin-bottom: 10px;
}
#tor a {
font-size: 20px;
}
footer { footer {
text-align: center; text-align: center;
background: #36535a; background: #36535a;
@ -5720,10 +6276,6 @@ blockquote.twitter-tweet a {
text-decoration: none; text-decoration: none;
outline: 0 none; outline: 0 none;
} }
blockquote.twitter-tweet a:hover,
blockquote.twitter-tweet a:focus {
text-decoration: underline;
}
blockquote.tweet-xl p { blockquote.tweet-xl p {
font-size: 22px; font-size: 22px;
line-height: 25px; line-height: 25px;
@ -5731,6 +6283,14 @@ blockquote.tweet-xl p {
blockquote.tweet-xl a { blockquote.tweet-xl a {
font-size: 22px; font-size: 22px;
} }
@media (max-width: 480px) {
blockquote.tweet-xl p {
font-size: 17px;
}
blockquote.tweet-xl a {
font-size: 17px;
}
}
@font-face { @font-face {
font-family: "transfersh"; font-family: "transfersh";
src: url("../fonts/transfersh.eot"); src: url("../fonts/transfersh.eot");
@ -5807,4 +6367,181 @@ blockquote.tweet-xl a {
.icon-gplus:before { .icon-gplus:before {
content: "p"; content: "p";
} }
.preview-wrapper {
padding-bottom: 30px;
}
html {
min-height: 100%;
}
#download {
position: static;
}
#download footer {
bottom: 0;
left: 0;
width: 100%;
position: absolute;
z-index: -1;
}
.preview-image {
padding: 0;
padding: 0px;
}
.preview-image img {
margin: 0 auto;
display: block;
max-width: 800px;
max-width: 100%;
}
.overlay {
position: fixed;
z-index: 100;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.1);
visibility: hidden;
opacity: 0;
transition: opacity 0.2s ease;
}
.active .overlay {
visibility: visible;
opacity: 1;
}
.copy-link-wrapper {
z-index: 200;
padding: 2em;
position: fixed;
top: 50%;
left: 50%;
width: 50%;
max-width: 500px;
min-width: 300px;
background-color: #85b5bb;
border-radius: 2px;
transform: translateX(-50%) translateY(-50%);
transition: opacity 0.2s ease;
clip: rect(1px 1px 1px 1px);
opacity: 0;
top: -9999999px;
left: -9999999px;
}
.active .copy-link-wrapper {
clip: auto;
opacity: 1;
top: 50%;
left: 50%;
}
.copy-link-wrapper p {
font-size: 20px;
color: #fff;
}
.copy-link-wrapper input {
background-color: #f6f8f8;
color: #3b3b3b;
border: 0;
font-size: 1em;
padding: 1em;
margin: 0;
width: 100%;
border-radius: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.copy-link-wrapper .error {
text-align: center;
color: #E7483B;
display: block;
padding: 0.5em;
}
#md-preview {
padding-bottom: 30px;
}
video {
margin: 0 auto;
width: 100%;
}
.wrap {
width: 40%;
height: 40%;
margin: 20px auto;
}
video {
width: 100%;
}
video::-webkit-media-controls-enclosure {
padding: 0px;
height: 50px;
}
video::-webkit-media-controls-panel {
opacity: 1 !important;
display: -webkit-flex !important;
margin-top: 50px;
height: 50px;
background-color: #36535a;
border-radius: 0 0 10px 10px;
}
video::-webkit-media-controls-timeline {
height: 12px;
padding: 0px;
border: 0px;
}
video::-webkit-media-controls-volume-slider,
video::-webkit-media-controls-timeline {
height: 12px;
border-radius: 5px;
min-width: 15px;
}
video::-webkit-media-controls-volume-slider::-webkit-media-slider-container,
video::-webkit-media-controls-timeline::-webkit-media-slider-container {
border: 0px;
border-radius: 5px;
background-color: #85b5bb;
cursor: pointer;
}
::-webkit-media-slider-thumb {
-webkit-appearance: none;
background: red;
}
video::-webkit-media-controls-play-button {
cursor: pointer;
}
video::-webkit-media-controls-play-button:hover {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
opacity: 0.7;
}
video::-webkit-media-controls-fullscreen-button {
-webkit-appearance: none;
background-color: transparent;
cursor: pointer;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAABACAYAAADF2C3zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3MDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3MTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQyQkE2QUZGNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQyQkE2QjAwNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+1z7uaAAAAVhJREFUeNrsljFuAjEQRb3ACZByii2pECmgySFIGoiUGsEKiaQAimwTToCggSYSNUoJHSfgFJwhMt9oHBlj8Ga2SAqP9KQV7PPY4y1+9PDYEZ4agaHrj4Lwl5LHXFkvsOXKatt1jjykzrq2WeW+Jb6Bhp5BySOvQQLuaKEPYwYnOQLSkpTwBfbUqQam9hDVtieOyaoOGxDTAtNrV9UFqTEc/UGUQeXWmfSZB6BqXMc3aIFlFllY4hP49N2h66p2YJXly3HJ92ABihxZVRPM6BqvViSlFNwqiBwV5CAHOchBDnKQ/5/si4/iOUn5YX0+ec0X1mkBXljH1nlhncTfh3WIF2EdR/gJ677OKqwfdOqHmJ4Nsd17PwU5E/yWgJieY/Biv6MoUVjvOe61j+cGuuwpsLvDOl5KjeFkDusRtiSNKZ6FdXTlhXWIfxTWcf58YR0L3AzrRwEGAJoOgCMfh6hiAAAAAElFTkSuQmCC);
background-size: 16px 64px;
background-position: center 8px;
background-repeat: no-repeat;
}
video::-webkit-media-controls-mute-button {
-webkit-appearance: none;
background-color: transparent;
cursor: pointer;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAABACAYAAAATffeWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3NDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3NTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY3RDUyMDcyNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3RDUyMDczNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Gp0GRAAAATdJREFUeNpidIsuYMABwoF4BhCvB+IkXIqYcIj7APEiIBYA4jg0OREgLsJnQAgQrwJiNiifGU3eFIi7gDgPxGEBYnYg1gBiDqizQX5ixOEyCyDeC8SNQNwJxJtABuwHYksGwoAR6q3tQFwKxGlAnMtEpGYQ+A+1NROI+aDedGdiIA2sAWJWaDhcBGIVUg1ABqz4ohEXAMXQbyA+DcRaQHwHZMBxIjWDArEcmrg+AXEYEO8ExYIjUjRGQuOXEUcgghLVOahBoAQ1GWTAT2iAgMBJID4BxPOhBqIDkJwnENcDcQkQP8AWBiuAOBiIf0H5f9HkT0NdMAFfIG4D4gggfgtNPMjgDRD3wgPm////DJSAUQNGDRg1YNSAUQNGDRg1YNSA4WhAUnHraI9ltMcy2mMZDD0WgAADADYlybDQKXdAAAAAAElFTkSuQmCC);
background-size: 16px 64px;
background-position: center 8px;
background-repeat: no-repeat;
}
video::-webkit-media-controls-fullscreen-button:hover {
-webkit-appearance: none;
background-position: center -42px;
}
video::-webkit-media-controls-mute-button:hover {
-webkit-appearance: none;
background-position: center -43px;
}
video::-webkit-media-controls-current-time-display,
video::-webkit-media-controls-time-remaining-display {
font-size: 13px;
font-weight: normal;
}
/*# sourceMappingURL=/styles/main.css.map */ /*# sourceMappingURL=/styles/main.css.map */

File diff suppressed because one or more lines are too long

View file

@ -9,5 +9,6 @@
@import "includes/pages"; @import "includes/pages";
@import "includes/reviews"; @import "includes/reviews";
@import "includes/transfersh-icons"; @import "includes/transfersh-icons";
@import "includes/preview";