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/
transfersh-server/run.sh
.elasticbeanstalk/

View file

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

View file

@ -28,6 +28,10 @@ module.exports = function (grunt) {
gruntfile: {
files: ['Gruntfile.js']
},
includes: {
files: ['<%= yeoman.app %>/*.html', '.tmp/*.html'],
tasks: ['includes:server']
},
livereload: {
options: {
livereload: '<%= connect.options.livereload %>'
@ -37,7 +41,8 @@ module.exports = function (grunt) {
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
],
tasks: ['includes:server']
}
},
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,
// but still available if needed
/*concat: {
@ -240,6 +266,7 @@ module.exports = function (grunt) {
grunt.task.run([
'clean:server',
'less',
'includes:server',
'copy:server',
'connect:livereload',
'watch'
@ -260,14 +287,17 @@ module.exports = function (grunt) {
grunt.registerTask('build', [
'clean:dist',
'copy:server',
'useminPrepare',
'concurrent',
'cssmin',
'concat',
'includes:build',
'uglify',
'copy',
'usemin'
'usemin',
]);
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
```
## 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 are welcome.

View file

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

View file

@ -35,9 +35,9 @@ import (
"errors"
"fmt"
"github.com/dutchcoders/go-clamd"
"github.com/golang/gddo/httputil/header"
"github.com/gorilla/mux"
"github.com/kennygrant/sanitize"
"github.com/russross/blackfriday"
html_template "html/template"
"io"
"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.")
}
/* 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
// support of the client (Accept header).
func viewHandler(w http.ResponseWriter, r *http.Request) {
// vars := mux.Vars(r)
actual := header.ParseAccept(r.Header, "Accept")
html := false
for _, s := range actual {
if s.Value == "text/html" {
html = true
}
}
if html {
if acceptsHtml(r.Header) {
tmpl, err := html_template.ParseFiles("static/index.html")
if err != nil {
@ -106,7 +177,7 @@ func notFoundHandler(w http.ResponseWriter, r *http.Request) {
func postHandler(w http.ResponseWriter, r *http.Request) {
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)
return
}
@ -128,7 +199,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
var err error
if f, err = fheader.Open(); err != nil {
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -137,7 +208,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
n, err := io.CopyN(&b, f, _24K+1)
if err != nil && err != io.EOF {
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -155,7 +226,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
if err != nil {
os.Remove(file.Name())
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -170,7 +241,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Uploading %s %s %d %s", token, filename, contentLength, contentType)
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)
return
@ -199,7 +270,9 @@ func scanHandler(w http.ResponseWriter, r *http.Request) {
response, err := c.ScanStream(reader)
if err != nil {
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
var b string
@ -237,7 +310,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
n, err := io.CopyN(&b, f, _24K+1)
if err != nil && err != io.EOF {
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -245,7 +318,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
if n > _24K {
file, err := ioutil.TempFile(config.Temp, "transfer-")
if err != nil {
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -255,8 +328,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
n, err = io.Copy(file, io.MultiReader(&b, f))
if err != nil {
os.Remove(file.Name())
log.Print(err)
log.Printf("%s", err.Error())
http.Error(w, err.Error(), 500)
return
}
@ -282,6 +354,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) {
var err error
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)
return
}
@ -307,10 +380,17 @@ func zipHandler(w http.ResponseWriter, r *http.Request) {
zw := zip.NewWriter(w)
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])
reader, _, _, err := storage.Get(token, filename)
if err != nil {
if err.Error() == "The specified key does not exist." {
http.Error(w, "File not found", 404)
@ -371,8 +451,14 @@ func tarGzHandler(w http.ResponseWriter, r *http.Request) {
defer zw.Close()
for _, key := range strings.Split(files, ",") {
if strings.HasPrefix(key, "/") {
key = key[1:]
}
key = strings.Replace(key, "\\", "/", -1)
token := strings.Split(key, "/")[0]
filename := strings.Split(key, "/")[1]
filename := sanitize.Path(strings.Split(key, "/")[1])
reader, _, contentLength, err := storage.Get(token, filename)
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-Length", strconv.FormatUint(contentLength, 10))
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("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename))
w.Header().Set("Connection", "close")
if _, err = io.Copy(w, reader); err != nil {
log.Printf("%s", err.Error())
http.Error(w, "Error occured copying to output stream", 500)
return
}

View file

@ -33,7 +33,9 @@ import (
"github.com/gorilla/mux"
"log"
"math/rand"
"mime"
"net/http"
"net/url"
"os"
"time"
)
@ -86,23 +88,27 @@ func main() {
r.HandleFunc("/({files:.*}).tar.gz", tarGzHandler).Methods("GET")
r.HandleFunc("/download/{token}/{filename}", getHandler).Methods("GET")
/*r.HandleFunc("/{token}/{filename}", viewHandler).MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
u, err := url.Parse(r.Referer())
if err != nil {
log.Fatal(err)
return true
}
r.HandleFunc("/{token}/{filename}", previewHandler).MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) (match bool) {
match = false
if u.Host == "transfer.sh" {
return false
}
// The file will show a preview page when opening the link in browser directly or
// 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 == "" {
return false
}
match = (r.Referer() == "")
return true
}).Methods("GET")*/
u, err := url.Parse(r.Referer())
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("/get/{token}/{filename}", getHandler).Methods("GET")
@ -156,7 +162,9 @@ func main() {
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("---------------------------")
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>
</metadata>
<g
transform="translate(-93.957497,-365.26607)"
transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)"
id="layer1">
<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"
style="fill:#85b5bb;fill-opacity:1;stroke:none" />
<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"
style="fill:#ff7050">
<g
@ -78,7 +78,7 @@
</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"
style="fill:#ffed5d">
<g
@ -104,7 +104,7 @@
</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"
style="fill:#93de7f">
<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">
<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">
<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>
<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>
<script>
@ -39,21 +39,25 @@
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 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>
</div>
<section id="home">
<div class="wrapper">
<h2>
<h2 class="page-title">
Easy file sharing from the command line</h2>
<div class="row animated fadeInDown">
<div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12">
@ -75,19 +79,20 @@
<code>
<br>
<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>
<input type="file" multiple="multiple" style="display: none">
<ul class="queue">
<input type="file" multiple="multiple" style='display: none;' />
<ul class='queue'>
<li>
</li>
</ul>
<div class="all-files">
<div class='all-files'>
<br>
<div>
<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>
</div>
</div>
@ -95,16 +100,16 @@
</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></section>
</section>
<section id="features">
<div class="wrapper container">
<div class="row animated fadeInDown">
<div class="row animated fadeInDown ">
<div class="col-md-3 col-xs-6">
<i class="icon-terminal"></i>
<h3>Made for use with shell</h3>
@ -122,7 +127,7 @@
<h3>Files stored for 14 days</h3>
</div>
</div>
<div class="row animated fadeInDown">
<div class="row animated fadeInDown">
<div class="col-md-offset-3 col-md-3 col-xs-6">
<i class="icon-tag"></i>
<h3>For free</h3>
@ -139,11 +144,11 @@
<section id="samples">
<div class="wrapper">
<h2>
<h2 class="page-title">
Sample use cases
</h2>
<div class="row">
<div class="col-md-6">
<div class="col-md-6 ">
<h3>How to upload</h3>
<div class="terminal-top">
@ -159,20 +164,21 @@
</code>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6 ">
<h3>Create an alias and add it to .bashrc or .zshrc</h3>
<div class="terminal-top">
</div>
<div class="terminal">
<code>
<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>tmpfile=$( mktemp -t transferXXX ); curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile; cat $tmpfile; rm -f $tmpfile; }
<br>
<br>alias transfer=transfer
<br>
<br>
<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/>
<span class="code-title"># Now you can use transfer command</span>
<br>$ transfer hello.txt
</code>
@ -183,9 +189,9 @@
<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="col-md-6">
<div class="col-md-6 ">
<h3>Upload multiple files at once</h3>
<div class="terminal-top">
</div>
@ -196,13 +202,13 @@
<br>
<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).zip
<br/>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).zip
</code>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6 ">
<h3>Encrypt your files before the transfer</h3>
<div class="terminal-top">
</div>
@ -229,7 +235,8 @@
<span class="code-title"># Scan for malware or viruses using Clamav</span>
<br>$ wget http://www.eicar.org/download/eicar.com
<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>
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal
<br>
@ -243,7 +250,7 @@
<div class="terminal">
<code>
<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>
@ -255,7 +262,7 @@
<div class="terminal">
<code>
<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>
</div>
</div>
@ -274,28 +281,45 @@
</div>
</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">
<div class="wrapper">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-xs-12">
<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>
<a href="https://twitter.com/FloifyDave/status/517383101425516544">
&mdash; Dave Sims (@FloifyDave)</a>
&mdash; Dave Sims (@FloifyDave)</a>
</blockquote>
</div>
</div>
<div class="row">
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
@ -303,14 +327,18 @@
<div class="row">
<div class="col-md-6 col-xs-12">
<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><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote>
</div>
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
@ -320,82 +348,92 @@
<section id="share">
<div class="wrapper">
<h2>Share the love</h2>
<h2 class="page-title">Share the love</h2>
<ul class="share-buttons">
<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>
</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></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>
</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>
</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>
</li>
</ul>
</div>
</section>
<section id="contact">
<div class="wrapper">
<i class="icon-mail"></i>
<h2>
<h2 class="page-title">
Any questions?
</h2>
<a href="#" data-uv-trigger class="btn-cta">contact us</a>
</div>
</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>
<div class="wrapper">
<img src="images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
<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/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>
(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>
<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>
<!--[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>

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"
"github.com/goamz/goamz/s3"
"io"
"mime"
"os"
"path/filepath"
"strconv"
@ -11,6 +12,7 @@ import (
type Storage interface {
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
}
@ -23,6 +25,21 @@ func NewLocalStorage(basedir string) (*LocalStorage, error) {
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) {
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
if fi, err = os.Lstat(path); err != nil {
return
}
contentLength = uint64(fi.Size())
contentType = ""
contentType = mime.TypeByExtension(filepath.Ext(filename))
return
}
@ -80,13 +98,39 @@ func NewS3Storage() (*S3Storage, error) {
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) {
key := fmt.Sprintf("%s/%s", token, filename)
// content type , content length
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)
if err != nil {
return
}
reader = response.Body
return

View file

@ -27,8 +27,11 @@ package main
import (
"github.com/goamz/goamz/aws"
"github.com/goamz/goamz/s3"
"github.com/golang/gddo/httputil/header"
"math"
"net/http"
"net/mail"
"strconv"
"strings"
"time"
)
@ -44,6 +47,163 @@ func getBucket() (*s3.Bucket, error) {
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.:
// "[::1]:58292" => "[::1]"
func ipAddrFromRemoteAddr(s string) string {
@ -78,3 +238,15 @@ func encodeRFC2047(String string) string {
addr := mail.Address{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>
</metadata>
<g
transform="translate(-93.957497,-365.26607)"
transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)"
id="layer1">
<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"
style="fill:#85b5bb;fill-opacity:1;stroke:none" />
<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"
style="fill:#ff7050">
<g
@ -78,7 +78,7 @@
</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"
style="fill:#ffed5d">
<g
@ -104,7 +104,7 @@
</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"
style="fill:#93de7f">
<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">
<!--<![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">
include "includes/head.html"
<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>
@ -41,24 +27,14 @@
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>
include "includes/navigation.html"
<section id="home">
<div class="wrapper">
<h2>
<h2 class="page-title">
Easy file sharing from the command line</h2>
<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>
@ -77,7 +53,8 @@
<code>
<br>
<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>
<input type="file" multiple="multiple" style='display: none;' />
<ul class='queue'>
@ -141,7 +118,7 @@
<section id="samples">
<div class="wrapper">
<h2>
<h2 class="page-title">
Sample use cases
</h2>
<div class="row">
@ -170,7 +147,8 @@
<span class="code-title"># Add this to .bashrc or its equivalent</span>
<br/>transfer() {
<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/>
@ -231,7 +209,8 @@
<span class="code-title"># Scan for malware or viruses using Clamav</span>
<br>$ wget http://www.eicar.org/download/eicar.com
<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>
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal
<br>
@ -245,7 +224,7 @@
<div class="terminal">
<code>
<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>
@ -276,28 +255,45 @@
</div>
</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">
<div class="wrapper">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-xs-12">
<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>
<a href="https://twitter.com/FloifyDave/status/517383101425516544">
&mdash; Dave Sims (@FloifyDave)</a>
&mdash; Dave Sims (@FloifyDave)</a>
</blockquote>
</div>
</div>
<div class="row">
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
@ -305,14 +301,18 @@
<div class="row">
<div class="col-md-6 col-xs-12">
<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><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote>
</div>
<div class="col-md-6 col-xs-12">
<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>
</blockquote>
</div>
@ -322,7 +322,7 @@
<section id="share">
<div class="wrapper">
<h2>Share the love</h2>
<h2 class="page-title">Share the love</h2>
<ul class="share-buttons">
<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>
@ -343,71 +343,33 @@
</div>
</section>
<section id="contact">
<div class="wrapper">
<i class="icon-mail"></i>
<h2>
<h2 class="page-title">
Any questions?
</h2>
<a href="#" data-uv-trigger class="btn-cta">contact us</a>
</div>
</section>
<footer>
<section id="tor">
<div class="wrapper">
<img src="images/Logo-orange.png" alt="Founded in Holland">
<p>Made with <i class="icon-heart"></i> by <a href="http://dutchcoders.io/" title="Dutch Coders">Dutch Coders</a>
</p>
<a href="https://torproject.com"><img src="images/tor.svg" alt=""></a><br/>
<a href="https://jxm5d6emw5rknovg.onion/">https://jxm5d6emw5rknovg.onion/</a>
</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>
(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>
include "includes/footer.html"
include "includes/js.html"
<!--[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>

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() {
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) {
$('.browse').addClass('uploading');
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>'));
@ -33,7 +41,8 @@ $(document).ready(function() {
var pc = parseInt((e.loaded / e.total * 100));
$('.upload-progress', $(li)).show();
$('.upload-progress .bar', $(li)).css('width', pc + "%");
$('.upload-progress span ').empty().append(pc + "%");
$('.upload-progress span ', $(li)).empty().append(pc + "%");
}, false);
xhr.onreadystatechange = function(e) {
@ -47,8 +56,13 @@ $(document).ready(function() {
$(li).html('<span>Error (' + xhr.status + ') during upload of file ' + file.name + '</span>');
}
files.push(xhr.responseText.replace("https://transfer.sh/", "").replace("\n", ""));
// files.push(URI(xhr.responseText).absoluteTo(location.href).toString());
// file uploaded successfully, remove from queue
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-tar").attr("href", URI("(" + files.join(",") + ").tar.gz").absoluteTo(location.href).toString());
@ -56,7 +70,9 @@ $(document).ready(function() {
$(".all-files").addClass('show');
}
};
// should queue all uploads.
queue.push(xhr);
// start upload
xhr.open("PUT", '/' + file.name, true);
@ -79,7 +95,6 @@ $(document).ready(function() {
var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files;
$.each(files, function(index, file) {
console.debug(file);
upload(file);
});
@ -93,7 +108,6 @@ $(document).ready(function() {
});
$('input[type=file]').on('change', function(event) {
$.each(this.files, function(index, file) {
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
@import "../bower_components/bootstrap/less/scaffolding.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/tables.less";
//@import "../bower_components/bootstrap/less/forms.less";
@import "../bower_components/bootstrap/less/tables.less";
@import "../bower_components/bootstrap/less/forms.less";
//@import "../bower_components/bootstrap/less/buttons.less";
// Components

View file

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

View file

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

View file

@ -21,7 +21,7 @@
h4 {
margin-top: 30px;
}
padding: 50px 0;
padding: 75px 0;
text-align: center;
.btn-cta {
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 {
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;
}
@media (max-width: @screen-xs) {
.twitter-profile {
.twitter-profile {
display:none!important;
}
}
@ -43,17 +43,19 @@ blockquote.twitter-tweet a {
outline: 0 none;
}
blockquote.twitter-tweet a:hover,
blockquote.twitter-tweet a:focus {
text-decoration: underline;
blockquote.tweet-xl {
p {
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;
line-height: 1.42857143;
}
/* @import "../bower_components/bootstrap/less/code.less"; */
.container {
margin-right: auto;
margin-left: auto;
@ -1316,6 +1315,538 @@ address {
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 {
opacity: 0;
-webkit-transition: opacity 0.15s linear;
@ -5358,6 +5889,10 @@ body {
-o-animation-duration: 0.75s;
animation-duration: 0.75s;
}
body {
max-width: 2000px;
margin: 0 auto;
}
.browsehappy {
margin: 0.2em 0;
background: orange;
@ -5369,8 +5904,8 @@ body {
}
#navigation ul {
list-style: none;
max-width: 300px;
margin: 0 auto;
max-width: 400px;
marghomein: 0 auto;
}
#navigation li {
display: inline-block;
@ -5397,12 +5932,12 @@ body {
font-size: 15px;
color: #3b3b3b;
}
h2 {
.page-title {
text-align: center;
font-size: 35px;
}
@media (min-width: 768px) {
h2 {
.page-title {
font-size: 50px;
}
}
@ -5482,17 +6017,17 @@ a:hover {
#home {
text-align: center;
}
#home h2 {
#home .page-title {
font-size: 30px;
}
@media (min-width: 768px) {
#home {
padding: 50px;
}
#home h2 {
#home .page-title {
font-size: 45px;
margin-top: -20px;
margin-bottom: 45px;
margin-bottom: 20px;
}
}
#home .btn-home {
@ -5561,6 +6096,9 @@ a:hover {
backbground-repeat: no-repeat;
background-size: cover;
}
.terminal a {
color: #ffffff;
}
.terminal-top {
border-top-right-radius: 5px;
border-top-left-radius: 5px;
@ -5571,6 +6109,7 @@ a:hover {
}
.upload-progress {
max-width: 80%;
padding-top: 4px;
}
.upload-progress .bar {
word-wrap: normal;
@ -5603,7 +6142,7 @@ a:hover {
font-size: 100px;
}
#samples {
padding: 50px 0;
padding: 75px 0;
text-align: center;
}
#samples h4 {
@ -5643,6 +6182,23 @@ a:hover {
color: #fff;
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 {
text-align: center;
background: #36535a;
@ -5720,10 +6276,6 @@ blockquote.twitter-tweet a {
text-decoration: none;
outline: 0 none;
}
blockquote.twitter-tweet a:hover,
blockquote.twitter-tweet a:focus {
text-decoration: underline;
}
blockquote.tweet-xl p {
font-size: 22px;
line-height: 25px;
@ -5731,6 +6283,14 @@ blockquote.tweet-xl p {
blockquote.tweet-xl a {
font-size: 22px;
}
@media (max-width: 480px) {
blockquote.tweet-xl p {
font-size: 17px;
}
blockquote.tweet-xl a {
font-size: 17px;
}
}
@font-face {
font-family: "transfersh";
src: url("../fonts/transfersh.eot");
@ -5807,4 +6367,181 @@ blockquote.tweet-xl a {
.icon-gplus:before {
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 */

File diff suppressed because one or more lines are too long

View file

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