* implemented docker * added previews (markdown, html, text, video, audio) * added tor support * several bugfixestags/v1.0.0
@@ -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 |
@@ -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;" |
@@ -13,3 +13,4 @@ bower_components/ | |||||
node_modules/ | node_modules/ | ||||
transfersh-server/run.sh | transfersh-server/run.sh | ||||
.elasticbeanstalk/ |
@@ -5,7 +5,7 @@ RUN mkdir -p /go/src/app | |||||
WORKDIR /go/src/app | WORKDIR /go/src/app | ||||
# Copy the local package files to the container's workspace. | # Copy the local package files to the container's workspace. | ||||
ADD . /go/src/app | |||||
ADD ./transfersh-server /go/src/app | |||||
# install dependencies | # install dependencies | ||||
RUN go get ./ | RUN go get ./ |
@@ -28,6 +28,10 @@ module.exports = function (grunt) { | |||||
gruntfile: { | gruntfile: { | ||||
files: ['Gruntfile.js'] | files: ['Gruntfile.js'] | ||||
}, | }, | ||||
includes: { | |||||
files: ['<%= yeoman.app %>/*.html', '.tmp/*.html'], | |||||
tasks: ['includes:server'] | |||||
}, | |||||
livereload: { | livereload: { | ||||
options: { | options: { | ||||
livereload: '<%= connect.options.livereload %>' | livereload: '<%= connect.options.livereload %>' | ||||
@@ -37,7 +41,8 @@ module.exports = function (grunt) { | |||||
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', | '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', | ||||
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', | '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', | ||||
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' | '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' | ||||
] | |||||
], | |||||
tasks: ['includes:server'] | |||||
} | } | ||||
}, | }, | ||||
connect: { | connect: { | ||||
@@ -112,6 +117,27 @@ module.exports = function (grunt) { | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
includes: { | |||||
build: { | |||||
cwd: '<%= yeoman.app %>', | |||||
src: ['*.html', 'includes/*.html'], | |||||
dest: '<%= yeoman.dist %>', | |||||
options: { | |||||
flatten: true, | |||||
banner: '' | |||||
} | |||||
}, | |||||
server: { | |||||
cwd: '<%= yeoman.app %>', | |||||
src: ['*.html', 'includes/*.html'], | |||||
dest: '.tmp/', | |||||
options: { | |||||
flatten: true, | |||||
banner: '' | |||||
} | |||||
} | |||||
}, | |||||
// not used since Uglify task does concat, | // not used since Uglify task does concat, | ||||
// but still available if needed | // but still available if needed | ||||
/*concat: { | /*concat: { | ||||
@@ -240,6 +266,7 @@ module.exports = function (grunt) { | |||||
grunt.task.run([ | grunt.task.run([ | ||||
'clean:server', | 'clean:server', | ||||
'less', | 'less', | ||||
'includes:server', | |||||
'copy:server', | 'copy:server', | ||||
'connect:livereload', | 'connect:livereload', | ||||
'watch' | 'watch' | ||||
@@ -260,14 +287,17 @@ module.exports = function (grunt) { | |||||
grunt.registerTask('build', [ | grunt.registerTask('build', [ | ||||
'clean:dist', | 'clean:dist', | ||||
'copy:server', | 'copy:server', | ||||
'useminPrepare', | 'useminPrepare', | ||||
'concurrent', | 'concurrent', | ||||
'cssmin', | 'cssmin', | ||||
'concat', | 'concat', | ||||
'includes:build', | |||||
'uglify', | 'uglify', | ||||
'copy', | 'copy', | ||||
'usemin' | |||||
'usemin', | |||||
]); | ]); | ||||
grunt.registerTask('default', [ | grunt.registerTask('default', [ | ||||
@@ -275,4 +305,4 @@ module.exports = function (grunt) { | |||||
'test', | 'test', | ||||
'build' | 'build' | ||||
]); | ]); | ||||
}; | |||||
}; |
@@ -62,6 +62,16 @@ go run transfersh-server/*.go -provider=local --port 8080 --temp=/tmp/ --basedir | |||||
go build -o transfersh-server *.go | go build -o transfersh-server *.go | ||||
``` | ``` | ||||
## Docker | |||||
For easy deployment we've enabled Docker deployment. | |||||
``` | |||||
cd ./transfer-server/ | |||||
docker build -t transfersh . | |||||
docker run --publish 8080:8080 --rm transfersh --provider local --basedir /tmp/ | |||||
``` | |||||
## Contributions | ## Contributions | ||||
Contributions are welcome. | Contributions are welcome. | ||||
@@ -18,6 +18,8 @@ | |||||
"grunt-contrib-less": "~0.11.4", | "grunt-contrib-less": "~0.11.4", | ||||
"grunt-contrib-uglify": "~0.6.0", | "grunt-contrib-uglify": "~0.6.0", | ||||
"grunt-contrib-watch": "~0.6.1", | "grunt-contrib-watch": "~0.6.1", | ||||
"grunt-include-replace": "^2.0.0", | |||||
"grunt-includes": "^0.4.5", | |||||
"grunt-rev": "~0.1.0", | "grunt-rev": "~0.1.0", | ||||
"grunt-svgmin": "1.0.0", | "grunt-svgmin": "1.0.0", | ||||
"grunt-usemin": "~2.4.0", | "grunt-usemin": "~2.4.0", | ||||
@@ -35,9 +35,9 @@ import ( | |||||
"errors" | "errors" | ||||
"fmt" | "fmt" | ||||
"github.com/dutchcoders/go-clamd" | "github.com/dutchcoders/go-clamd" | ||||
"github.com/golang/gddo/httputil/header" | |||||
"github.com/gorilla/mux" | "github.com/gorilla/mux" | ||||
"github.com/kennygrant/sanitize" | "github.com/kennygrant/sanitize" | ||||
"github.com/russross/blackfriday" | |||||
html_template "html/template" | html_template "html/template" | ||||
"io" | "io" | ||||
"io/ioutil" | "io/ioutil" | ||||
@@ -57,23 +57,94 @@ func healthHandler(w http.ResponseWriter, r *http.Request) { | |||||
fmt.Fprintf(w, "Approaching Neutral Zone, all systems normal and functioning.") | fmt.Fprintf(w, "Approaching Neutral Zone, all systems normal and functioning.") | ||||
} | } | ||||
// this handler will output html or text, depending on the | |||||
// support of the client (Accept header). | |||||
/* 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) { | |||||
func viewHandler(w http.ResponseWriter, r *http.Request) { | |||||
// vars := mux.Vars(r) | |||||
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 | |||||
} | |||||
actual := header.ParseAccept(r.Header, "Accept") | |||||
var templatePath string | |||||
var content html_template.HTML | |||||
html := false | |||||
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 | |||||
} | |||||
for _, s := range actual { | |||||
if s.Value == "text/html" { | |||||
html = true | |||||
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" | |||||
} | } | ||||
if 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) | |||||
if acceptsHtml(r.Header) { | |||||
tmpl, err := html_template.ParseFiles("static/index.html") | tmpl, err := html_template.ParseFiles("static/index.html") | ||||
if err != nil { | if err != nil { | ||||
@@ -106,7 +177,7 @@ func notFoundHandler(w http.ResponseWriter, r *http.Request) { | |||||
func postHandler(w http.ResponseWriter, r *http.Request) { | func postHandler(w http.ResponseWriter, r *http.Request) { | ||||
if err := r.ParseMultipartForm(_24K); nil != err { | if err := r.ParseMultipartForm(_24K); nil != err { | ||||
log.Println(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, "Error occured copying to output stream", 500) | http.Error(w, "Error occured copying to output stream", 500) | ||||
return | return | ||||
} | } | ||||
@@ -128,7 +199,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |||||
var err error | var err error | ||||
if f, err = fheader.Open(); err != nil { | if f, err = fheader.Open(); err != nil { | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -137,7 +208,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |||||
n, err := io.CopyN(&b, f, _24K+1) | n, err := io.CopyN(&b, f, _24K+1) | ||||
if err != nil && err != io.EOF { | if err != nil && err != io.EOF { | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -155,7 +226,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |||||
if err != nil { | if err != nil { | ||||
os.Remove(file.Name()) | os.Remove(file.Name()) | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -170,7 +241,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |||||
log.Printf("Uploading %s %s %d %s", token, filename, contentLength, contentType) | log.Printf("Uploading %s %s %d %s", token, filename, contentLength, contentType) | ||||
if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { | if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
@@ -199,7 +270,9 @@ func scanHandler(w http.ResponseWriter, r *http.Request) { | |||||
response, err := c.ScanStream(reader) | response, err := c.ScanStream(reader) | ||||
if err != nil { | if err != nil { | ||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | |||||
} | } | ||||
var b string | var b string | ||||
@@ -237,7 +310,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) { | |||||
n, err := io.CopyN(&b, f, _24K+1) | n, err := io.CopyN(&b, f, _24K+1) | ||||
if err != nil && err != io.EOF { | if err != nil && err != io.EOF { | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -245,7 +318,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) { | |||||
if n > _24K { | if n > _24K { | ||||
file, err := ioutil.TempFile(config.Temp, "transfer-") | file, err := ioutil.TempFile(config.Temp, "transfer-") | ||||
if err != nil { | if err != nil { | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -255,8 +328,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) { | |||||
n, err = io.Copy(file, io.MultiReader(&b, f)) | n, err = io.Copy(file, io.MultiReader(&b, f)) | ||||
if err != nil { | if err != nil { | ||||
os.Remove(file.Name()) | os.Remove(file.Name()) | ||||
log.Print(err) | |||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, err.Error(), 500) | http.Error(w, err.Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -282,6 +354,7 @@ func putHandler(w http.ResponseWriter, r *http.Request) { | |||||
var err error | var err error | ||||
if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { | if err = storage.Put(token, filename, reader, contentType, uint64(contentLength)); err != nil { | ||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, errors.New("Could not save file").Error(), 500) | http.Error(w, errors.New("Could not save file").Error(), 500) | ||||
return | return | ||||
} | } | ||||
@@ -307,10 +380,17 @@ func zipHandler(w http.ResponseWriter, r *http.Request) { | |||||
zw := zip.NewWriter(w) | zw := zip.NewWriter(w) | ||||
for _, key := range strings.Split(files, ",") { | for _, key := range strings.Split(files, ",") { | ||||
token := sanitize.Path(strings.Split(key, "/")[0]) | |||||
if strings.HasPrefix(key, "/") { | |||||
key = key[1:] | |||||
} | |||||
key = strings.Replace(key, "\\", "/", -1) | |||||
token := strings.Split(key, "/")[0] | |||||
filename := sanitize.Path(strings.Split(key, "/")[1]) | filename := sanitize.Path(strings.Split(key, "/")[1]) | ||||
reader, _, _, err := storage.Get(token, filename) | reader, _, _, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
if err.Error() == "The specified key does not exist." { | if err.Error() == "The specified key does not exist." { | ||||
http.Error(w, "File not found", 404) | http.Error(w, "File not found", 404) | ||||
@@ -371,8 +451,14 @@ func tarGzHandler(w http.ResponseWriter, r *http.Request) { | |||||
defer zw.Close() | defer zw.Close() | ||||
for _, key := range strings.Split(files, ",") { | for _, key := range strings.Split(files, ",") { | ||||
if strings.HasPrefix(key, "/") { | |||||
key = key[1:] | |||||
} | |||||
key = strings.Replace(key, "\\", "/", -1) | |||||
token := strings.Split(key, "/")[0] | token := strings.Split(key, "/")[0] | ||||
filename := strings.Split(key, "/")[1] | |||||
filename := sanitize.Path(strings.Split(key, "/")[1]) | |||||
reader, _, contentLength, err := storage.Get(token, filename) | reader, _, contentLength, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
@@ -482,23 +568,11 @@ func getHandler(w http.ResponseWriter, r *http.Request) { | |||||
w.Header().Set("Content-Type", contentType) | w.Header().Set("Content-Type", contentType) | ||||
w.Header().Set("Content-Length", strconv.FormatUint(contentLength, 10)) | w.Header().Set("Content-Length", strconv.FormatUint(contentLength, 10)) | ||||
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") | w.Header().Set("Connection", "close") | ||||
if _, err = io.Copy(w, reader); err != nil { | if _, err = io.Copy(w, reader); err != nil { | ||||
log.Printf("%s", err.Error()) | |||||
http.Error(w, "Error occured copying to output stream", 500) | http.Error(w, "Error occured copying to output stream", 500) | ||||
return | return | ||||
} | } | ||||
@@ -33,7 +33,9 @@ import ( | |||||
"github.com/gorilla/mux" | "github.com/gorilla/mux" | ||||
"log" | "log" | ||||
"math/rand" | "math/rand" | ||||
"mime" | |||||
"net/http" | "net/http" | ||||
"net/url" | |||||
"os" | "os" | ||||
"time" | "time" | ||||
) | ) | ||||
@@ -86,23 +88,27 @@ func main() { | |||||
r.HandleFunc("/({files:.*}).tar.gz", tarGzHandler).Methods("GET") | r.HandleFunc("/({files:.*}).tar.gz", tarGzHandler).Methods("GET") | ||||
r.HandleFunc("/download/{token}/{filename}", getHandler).Methods("GET") | r.HandleFunc("/download/{token}/{filename}", getHandler).Methods("GET") | ||||
/*r.HandleFunc("/{token}/{filename}", viewHandler).MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool { | |||||
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("/{token}/{filename}", getHandler).Methods("GET") | ||||
r.HandleFunc("/get/{token}/{filename}", getHandler).Methods("GET") | r.HandleFunc("/get/{token}/{filename}", getHandler).Methods("GET") | ||||
@@ -156,7 +162,9 @@ func main() { | |||||
log.Panic("Error while creating storage.") | log.Panic("Error while creating storage.") | ||||
} | } | ||||
log.Printf("Transfer.sh server started. :%v using temp folder: %s", *port, config.Temp) | |||||
mime.AddExtensionType(".md", "text/x-markdown") | |||||
log.Printf("Transfer.sh server started. :\nlistening on port: %v\nusing temp folder: %s\nusing storage provider: %s", *port, config.Temp, *provider) | |||||
log.Printf("---------------------------") | log.Printf("---------------------------") | ||||
s := &http.Server{ | s := &http.Server{ | ||||
@@ -154,4 +154,4 @@ | |||||
<script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> | <script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> | ||||
</div> | </div> | ||||
</body> | </body> | ||||
</html> | |||||
</html> |
@@ -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> |
@@ -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> | |||||
<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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -45,14 +45,14 @@ | |||||
</rdf:RDF> | </rdf:RDF> | ||||
</metadata> | </metadata> | ||||
<g | <g | ||||
transform="translate(-93.957497,-365.26607)" | |||||
transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)" | |||||
id="layer1"> | id="layer1"> | ||||
<path | <path | ||||
d="m 85.371201,355.16455 789.901059,0 0,49.98291 -789.901059,0 z" | |||||
d="m 93.957497,365.85895 750.000003,0 0,31.76074 -750.000003,0 z" | |||||
id="rect4487" | id="rect4487" | ||||
style="fill:#85b5bb;fill-opacity:1;stroke:none" /> | style="fill:#85b5bb;fill-opacity:1;stroke:none" /> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.446)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9192)" | |||||
id="g24" | id="g24" | ||||
style="fill:#ff7050"> | style="fill:#ff7050"> | ||||
<g | <g | ||||
@@ -78,7 +78,7 @@ | |||||
</g> | </g> | ||||
</g> | </g> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.507)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9802)" | |||||
id="g40" | id="g40" | ||||
style="fill:#ffed5d"> | style="fill:#ffed5d"> | ||||
<g | <g | ||||
@@ -104,7 +104,7 @@ | |||||
</g> | </g> | ||||
</g> | </g> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1453.4765)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1454.9497)" | |||||
id="g56" | id="g56" | ||||
style="fill:#93de7f"> | style="fill:#93de7f"> | ||||
<g | <g | ||||
@@ -0,0 +1,5 @@ | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<br/> | |||||
</section> |
@@ -0,0 +1,10 @@ | |||||
<div> | |||||
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> | |||||
<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> |
@@ -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/> |
@@ -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]--> | |||||
@@ -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> |
@@ -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> |
@@ -0,0 +1,2 @@ | |||||
<script src="/scripts/main.js"></script> | |||||
@@ -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> |
@@ -11,16 +11,16 @@ | |||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
<title>transfer.sh - Easy and fast file sharing from the command-line.</title> | <title>transfer.sh - Easy and fast file sharing from the command-line.</title> | ||||
<meta name="description" content="Easy and fast file sharing from the command-line."> | <meta name="description" content="Easy and fast file sharing from the command-line."> | ||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||||
<!-- Place favicon.ico and apple-touch-icon.png in the root directory --> | <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> | ||||
<link rel="stylesheet" href="styles/main.css"> | |||||
<link 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> | </head> | ||||
<body> | <body> | ||||
<script> | <script> | ||||
@@ -39,21 +39,25 @@ | |||||
ga('send', 'pageview'); | ga('send', 'pageview'); | ||||
</script> | </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> | ||||
</div> | |||||
<section id="home"> | <section id="home"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Easy file sharing from the command line</h2> | Easy file sharing from the command line</h2> | ||||
<div class="row animated fadeInDown"> | <div class="row animated fadeInDown"> | ||||
<div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12"> | <div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12"> | ||||
@@ -75,19 +79,20 @@ | |||||
<code> | <code> | ||||
<br> | <br> | ||||
<span class="code-title"># Upload from web</span> | <span class="code-title"># Upload from web</span> | ||||
<br>Drag your files here, or <a class="browse" href="#"> click to browse.</a> | |||||
<br>Drag your files here, or <a class="browse" href="#"> click to browse. <br/></a> | |||||
</code> | </code> | ||||
<input type="file" multiple="multiple" style="display: none"> | |||||
<ul class="queue"> | |||||
<input type="file" multiple="multiple" style='display: none;' /> | |||||
<ul class='queue'> | |||||
<li> | <li> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
<div class="all-files"> | |||||
<div class='all-files'> | |||||
<br> | <br> | ||||
<div> | <div> | ||||
<span class="code-title"># Download all your files</span> | <span class="code-title"># Download all your files</span> | ||||
<br> | |||||
<br> | |||||
<br/> | |||||
<br/> | |||||
<a class="download-zip btn-cta" href="#">zip</a> <a class="download-tar btn-cta" href="#">tar.gz</a> | <a class="download-zip btn-cta" href="#">zip</a> <a class="download-tar btn-cta" href="#">tar.gz</a> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -95,16 +100,16 @@ | |||||
</div> | </div> | ||||
<div> | <div> | ||||
<a href="#features" class="btn-cta btn-home">learn more </a> | |||||
<a href="#features" class="btn-cta btn-home">learn more</i> </a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div></section> | |||||
</section> | |||||
<section id="features"> | <section id="features"> | ||||
<div class="wrapper container"> | <div class="wrapper container"> | ||||
<div class="row animated fadeInDown"> | |||||
<div class="row animated fadeInDown "> | |||||
<div class="col-md-3 col-xs-6"> | <div class="col-md-3 col-xs-6"> | ||||
<i class="icon-terminal"></i> | <i class="icon-terminal"></i> | ||||
<h3>Made for use with shell</h3> | <h3>Made for use with shell</h3> | ||||
@@ -122,7 +127,7 @@ | |||||
<h3>Files stored for 14 days</h3> | <h3>Files stored for 14 days</h3> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="row animated fadeInDown"> | |||||
<div class="row animated fadeInDown"> | |||||
<div class="col-md-offset-3 col-md-3 col-xs-6"> | <div class="col-md-offset-3 col-md-3 col-xs-6"> | ||||
<i class="icon-tag"></i> | <i class="icon-tag"></i> | ||||
<h3>For free</h3> | <h3>For free</h3> | ||||
@@ -139,11 +144,11 @@ | |||||
<section id="samples"> | <section id="samples"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Sample use cases | Sample use cases | ||||
</h2> | </h2> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6"> | |||||
<div class="col-md-6 "> | |||||
<h3>How to upload</h3> | <h3>How to upload</h3> | ||||
<div class="terminal-top"> | <div class="terminal-top"> | ||||
@@ -159,20 +164,21 @@ | |||||
</code> | </code> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="col-md-6"> | |||||
<div class="col-md-6 "> | |||||
<h3>Create an alias and add it to .bashrc or .zshrc</h3> | <h3>Create an alias and add it to .bashrc or .zshrc</h3> | ||||
<div class="terminal-top"> | <div class="terminal-top"> | ||||
</div> | </div> | ||||
<div class="terminal"> | <div class="terminal"> | ||||
<code> | <code> | ||||
<span class="code-title"># Add this to .bashrc or its equivalent</span> | <span class="code-title"># Add this to .bashrc or its equivalent</span> | ||||
<br>transfer() { | |||||
<br># 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/>transfer() { | |||||
<br># write to output to tmpfile because of progress bar | |||||
<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> | <span class="code-title"># Now you can use transfer command</span> | ||||
<br>$ transfer hello.txt | <br>$ transfer hello.txt | ||||
</code> | </code> | ||||
@@ -183,9 +189,9 @@ | |||||
<a class="btn-cta" data-target="#coll" data-toggle="collapse">More examples</a> | <a class="btn-cta" data-target="#coll" data-toggle="collapse">More examples</a> | ||||
<div class="collapse" id="coll"> | |||||
<div class="collapse " id="coll"> | |||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6"> | |||||
<div class="col-md-6 "> | |||||
<h3>Upload multiple files at once</h3> | <h3>Upload multiple files at once</h3> | ||||
<div class="terminal-top"> | <div class="terminal-top"> | ||||
</div> | </div> | ||||
@@ -196,13 +202,13 @@ | |||||
<br> | <br> | ||||
<span class="code-title"># Combining downloads as zip or tar archive</span> | <span class="code-title"># Combining downloads as zip or tar archive</span> | ||||
<br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).tar.gz | <br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).tar.gz | ||||
<br>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).zip | |||||
<br/>$ curl https://transfer.sh/(15HKz/hello.txt,15HKz/hello.txt).zip | |||||
</code> | </code> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="col-md-6"> | |||||
<div class="col-md-6 "> | |||||
<h3>Encrypt your files before the transfer</h3> | <h3>Encrypt your files before the transfer</h3> | ||||
<div class="terminal-top"> | <div class="terminal-top"> | ||||
</div> | </div> | ||||
@@ -229,7 +235,8 @@ | |||||
<span class="code-title"># Scan for malware or viruses using Clamav</span> | <span class="code-title"># Scan for malware or viruses using Clamav</span> | ||||
<br>$ wget http://www.eicar.org/download/eicar.com | <br>$ wget http://www.eicar.org/download/eicar.com | ||||
<br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan | <br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan | ||||
<br><br> | |||||
<br> | |||||
<br> | |||||
<span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> | <span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> | ||||
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal | <br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal | ||||
<br> | <br> | ||||
@@ -243,7 +250,7 @@ | |||||
<div class="terminal"> | <div class="terminal"> | ||||
<code> | <code> | ||||
<span class="code-title"># Backup, encrypt and transfer</span> | <span class="code-title"># Backup, encrypt and transfer</span> | ||||
<br>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt </code> | |||||
<br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt</code> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -255,7 +262,7 @@ | |||||
<div class="terminal"> | <div class="terminal"> | ||||
<code> | <code> | ||||
<span class="code-title"># Transfer and send email with link (uses alias)</span> | <span class="code-title"># Transfer and send email with link (uses alias)</span> | ||||
<br>$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com | |||||
<br/>$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com | |||||
</code> | </code> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -274,28 +281,45 @@ | |||||
</div> | </div> | ||||
</section> | </section> | ||||
<section id="share"> | |||||
<div class="wrapper"> | |||||
<h2 class="page-title">Follow on GitHub</h2> | |||||
<br> | |||||
<br> | |||||
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=follow&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="250" height="50"></iframe> | |||||
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="200" height="50"></iframe> | |||||
</div> | |||||
</section> | |||||
<section id="reviews"> | <section id="reviews"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-8 col-md-offset-2 col-xs-12"> | <div class="col-md-8 col-md-offset-2 col-xs-12"> | ||||
<blockquote class="twitter-tweet tweet-xl" lang="en"> | <blockquote class="twitter-tweet tweet-xl" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> | |||||
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> | |||||
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> | |||||
</a> | |||||
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> | <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> | ||||
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> | <a href="https://twitter.com/FloifyDave/status/517383101425516544"> | ||||
— Dave Sims (@FloifyDave)</a> | |||||
— Dave Sims (@FloifyDave)</a> | |||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> | |||||
<a href="https://twitter.com/kareemk/status/517029789191118849"> | |||||
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> | |||||
</a> | |||||
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">— Kareem Kouddous (@kareemk) </a> | <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">— Kareem Kouddous (@kareemk) </a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> | |||||
<a href="https://twitter.com/drakpz/status/517008058841829376"> | |||||
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> | |||||
</a> | |||||
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">— PJ Spagnolatti (@drakpz)</a> | <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">— PJ Spagnolatti (@drakpz)</a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
@@ -303,14 +327,18 @@ | |||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> | |||||
<a href="https://twitter.com/jacoblindgren11/status/516975006501203968"> | |||||
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> | |||||
</a> | |||||
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> | <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> | ||||
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">— Jacob Lindgren (@jacoblindgren11) </a> | </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">— Jacob Lindgren (@jacoblindgren11) </a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> | |||||
<a href="https://twitter.com/arvestad/status/519507976491499521"> | |||||
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> | |||||
</a> | |||||
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a> Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">— Lars Arvestad (@arvestad)</a> | <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a> Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">— Lars Arvestad (@arvestad)</a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
@@ -320,83 +348,93 @@ | |||||
<section id="share"> | <section id="share"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2>Share the love</h2> | |||||
<h2 class="page-title">Share the love</h2> | |||||
<ul class="share-buttons"> | <ul class="share-buttons"> | ||||
<li> | <li> | ||||
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false"> <i class="icon-facebook"></i> | |||||
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i> | |||||
</a> | </a> | ||||
</li> | </li> | ||||
<li> | <li> | ||||
<a href="https://twitter.com/intent/tweet?source=http%3A%2F%2Ftransfer.sh&text=:%20http%3A%2F%2Ftransfer.sh" target="_blank" title="Tweet" onclick="window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(document.title) + ':%20' + encodeURIComponent(document.URL)); return false"> <i class="icon-twitter"></i> | |||||
</a></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> | <li> | ||||
<a href="https://plus.google.com/share?url=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on Google+" onclick="window.open('https://plus.google.com/share?url=' + encodeURIComponent(document.URL)); return false"> <i class="icon-gplus"></i> | |||||
<a href="https://plus.google.com/share?url=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on Google+" onclick="window.open('https://plus.google.com/share?url=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-gplus"></i> | |||||
</a> | </a> | ||||
</li> | </li> | ||||
<li> | <li> | ||||
<a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Ftransfer.sh&title=&summary=&source=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on LinkedIn" onclick="window.open('http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.URL) + '&title=' + encodeURIComponent(document.title)); return false"> <i class="icon-linkedin"></i> | |||||
<a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Ftransfer.sh&title=&summary=&source=http%3A%2F%2Ftransfer.sh" target="_blank" title="Share on LinkedIn" onclick="window.open('http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.URL) + '&title=' + encodeURIComponent(document.title)); return false;"> <i class="icon-linkedin"></i> | |||||
</a> | </a> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
</div> | </div> | ||||
</section> | </section> | ||||
<section id="contact"> | <section id="contact"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<i class="icon-mail"></i> | <i class="icon-mail"></i> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Any questions? | Any questions? | ||||
</h2> | </h2> | ||||
<a href="#" data-uv-trigger class="btn-cta">contact us</a> | <a href="#" data-uv-trigger class="btn-cta">contact us</a> | ||||
</div> | </div> | ||||
</section> | </section> | ||||
<section id="tor"> | |||||
<div class="wrapper"> | |||||
<a href="https://torproject.com"><img src="images/tor.svg" alt=""></a><br/> | |||||
<a href="https://jxm5d6emw5rknovg.onion/">https://jxm5d6emw5rknovg.onion/</a> | |||||
</div> | |||||
</section> | |||||
<footer> | <footer> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<img src="images/Logo-orange.png" alt="Founded in Holland"> | |||||
<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> | </p> | ||||
</div> | </div> | ||||
</footer> | </footer> | ||||
<a href="https://github.com/dutchcoders/transfer.sh/"> | |||||
<img style="position: absolute; top: 0; right: 0; border: 0" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"> | |||||
</a> | |||||
<script> | |||||
(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> | </body> | ||||
</html> | |||||
</html> |
@@ -4,6 +4,7 @@ import ( | |||||
"fmt" | "fmt" | ||||
"github.com/goamz/goamz/s3" | "github.com/goamz/goamz/s3" | ||||
"io" | "io" | ||||
"mime" | |||||
"os" | "os" | ||||
"path/filepath" | "path/filepath" | ||||
"strconv" | "strconv" | ||||
@@ -11,6 +12,7 @@ import ( | |||||
type Storage interface { | type Storage interface { | ||||
Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) | Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) | ||||
Head(token string, filename string) (contentType string, contentLength uint64, err error) | |||||
Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error | Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error | ||||
} | } | ||||
@@ -23,6 +25,21 @@ func NewLocalStorage(basedir string) (*LocalStorage, error) { | |||||
return &LocalStorage{basedir: basedir}, nil | return &LocalStorage{basedir: basedir}, nil | ||||
} | } | ||||
func (s *LocalStorage) Head(token string, filename string) (contentType string, contentLength uint64, err error) { | |||||
path := filepath.Join(s.basedir, token, filename) | |||||
var fi os.FileInfo | |||||
if fi, err = os.Lstat(path); err != nil { | |||||
return | |||||
} | |||||
contentLength = uint64(fi.Size()) | |||||
contentType = mime.TypeByExtension(filepath.Ext(filename)) | |||||
return | |||||
} | |||||
func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | ||||
path := filepath.Join(s.basedir, token, filename) | path := filepath.Join(s.basedir, token, filename) | ||||
@@ -33,11 +50,12 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, | |||||
var fi os.FileInfo | var fi os.FileInfo | ||||
if fi, err = os.Lstat(path); err != nil { | if fi, err = os.Lstat(path); err != nil { | ||||
return | |||||
} | } | ||||
contentLength = uint64(fi.Size()) | contentLength = uint64(fi.Size()) | ||||
contentType = "" | |||||
contentType = mime.TypeByExtension(filepath.Ext(filename)) | |||||
return | return | ||||
} | } | ||||
@@ -80,13 +98,39 @@ func NewS3Storage() (*S3Storage, error) { | |||||
return &S3Storage{bucket: bucket}, nil | return &S3Storage{bucket: bucket}, nil | ||||
} | } | ||||
func (s *S3Storage) Head(token string, filename string) (contentType string, contentLength uint64, err error) { | |||||
key := fmt.Sprintf("%s/%s", token, filename) | |||||
// content type , content length | |||||
response, err := s.bucket.Head(key, map[string][]string{}) | |||||
if err != nil { | |||||
return | |||||
} | |||||
contentType = response.Header.Get("Content-Type") | |||||
contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0) | |||||
if err != nil { | |||||
return | |||||
} | |||||
return | |||||
} | |||||
func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | ||||
key := fmt.Sprintf("%s/%s", token, filename) | key := fmt.Sprintf("%s/%s", token, filename) | ||||
// content type , content length | // content type , content length | ||||
response, err := s.bucket.GetResponse(key) | response, err := s.bucket.GetResponse(key) | ||||
contentType = "" | |||||
if err != nil { | |||||
return | |||||
} | |||||
contentType = response.Header.Get("Content-Type") | |||||
contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0) | contentLength, err = strconv.ParseUint(response.Header.Get("Content-Length"), 10, 0) | ||||
if err != nil { | |||||
return | |||||
} | |||||
reader = response.Body | reader = response.Body | ||||
return | return | ||||
@@ -27,8 +27,11 @@ package main | |||||
import ( | import ( | ||||
"github.com/goamz/goamz/aws" | "github.com/goamz/goamz/aws" | ||||
"github.com/goamz/goamz/s3" | "github.com/goamz/goamz/s3" | ||||
"github.com/golang/gddo/httputil/header" | |||||
"math" | |||||
"net/http" | "net/http" | ||||
"net/mail" | "net/mail" | ||||
"strconv" | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
) | ) | ||||
@@ -44,6 +47,163 @@ func getBucket() (*s3.Bucket, error) { | |||||
return b, nil | return b, nil | ||||
} | } | ||||
func formatNumber(format string, s uint64) string { | |||||
return RenderFloat(format, float64(s)) | |||||
} | |||||
var renderFloatPrecisionMultipliers = [10]float64{ | |||||
1, | |||||
10, | |||||
100, | |||||
1000, | |||||
10000, | |||||
100000, | |||||
1000000, | |||||
10000000, | |||||
100000000, | |||||
1000000000, | |||||
} | |||||
var renderFloatPrecisionRounders = [10]float64{ | |||||
0.5, | |||||
0.05, | |||||
0.005, | |||||
0.0005, | |||||
0.00005, | |||||
0.000005, | |||||
0.0000005, | |||||
0.00000005, | |||||
0.000000005, | |||||
0.0000000005, | |||||
} | |||||
func RenderFloat(format string, n float64) string { | |||||
// Special cases: | |||||
// NaN = "NaN" | |||||
// +Inf = "+Infinity" | |||||
// -Inf = "-Infinity" | |||||
if math.IsNaN(n) { | |||||
return "NaN" | |||||
} | |||||
if n > math.MaxFloat64 { | |||||
return "Infinity" | |||||
} | |||||
if n < -math.MaxFloat64 { | |||||
return "-Infinity" | |||||
} | |||||
// default format | |||||
precision := 2 | |||||
decimalStr := "." | |||||
thousandStr := "," | |||||
positiveStr := "" | |||||
negativeStr := "-" | |||||
if len(format) > 0 { | |||||
// If there is an explicit format directive, | |||||
// then default values are these: | |||||
precision = 9 | |||||
thousandStr = "" | |||||
// collect indices of meaningful formatting directives | |||||
formatDirectiveChars := []rune(format) | |||||
formatDirectiveIndices := make([]int, 0) | |||||
for i, char := range formatDirectiveChars { | |||||
if char != '#' && char != '0' { | |||||
formatDirectiveIndices = append(formatDirectiveIndices, i) | |||||
} | |||||
} | |||||
if len(formatDirectiveIndices) > 0 { | |||||
// Directive at index 0: | |||||
// Must be a '+' | |||||
// Raise an error if not the case | |||||
// index: 0123456789 | |||||
// +0.000,000 | |||||
// +000,000.0 | |||||
// +0000.00 | |||||
// +0000 | |||||
if formatDirectiveIndices[0] == 0 { | |||||
if formatDirectiveChars[formatDirectiveIndices[0]] != '+' { | |||||
panic("RenderFloat(): invalid positive sign directive") | |||||
} | |||||
positiveStr = "+" | |||||
formatDirectiveIndices = formatDirectiveIndices[1:] | |||||
} | |||||
// Two directives: | |||||
// First is thousands separator | |||||
// Raise an error if not followed by 3-digit | |||||
// 0123456789 | |||||
// 0.000,000 | |||||
// 000,000.00 | |||||
if len(formatDirectiveIndices) == 2 { | |||||
if (formatDirectiveIndices[1] - formatDirectiveIndices[0]) != 4 { | |||||
panic("RenderFloat(): thousands separator directive must be followed by 3 digit-specifiers") | |||||
} | |||||
thousandStr = string(formatDirectiveChars[formatDirectiveIndices[0]]) | |||||
formatDirectiveIndices = formatDirectiveIndices[1:] | |||||
} | |||||
// One directive: | |||||
// Directive is decimal separator | |||||
// The number of digit-specifier following the separator indicates wanted precision | |||||
// 0123456789 | |||||
// 0.00 | |||||
// 000,0000 | |||||
if len(formatDirectiveIndices) == 1 { | |||||
decimalStr = string(formatDirectiveChars[formatDirectiveIndices[0]]) | |||||
precision = len(formatDirectiveChars) - formatDirectiveIndices[0] - 1 | |||||
} | |||||
} | |||||
} | |||||
// generate sign part | |||||
var signStr string | |||||
if n >= 0.000000001 { | |||||
signStr = positiveStr | |||||
} else if n <= -0.000000001 { | |||||
signStr = negativeStr | |||||
n = -n | |||||
} else { | |||||
signStr = "" | |||||
n = 0.0 | |||||
} | |||||
// split number into integer and fractional parts | |||||
intf, fracf := math.Modf(n + renderFloatPrecisionRounders[precision]) | |||||
// generate integer part string | |||||
intStr := strconv.Itoa(int(intf)) | |||||
// add thousand separator if required | |||||
if len(thousandStr) > 0 { | |||||
for i := len(intStr); i > 3; { | |||||
i -= 3 | |||||
intStr = intStr[:i] + thousandStr + intStr[i:] | |||||
} | |||||
} | |||||
// no fractional part, we can leave now | |||||
if precision == 0 { | |||||
return signStr + intStr | |||||
} | |||||
// generate fractional part | |||||
fracStr := strconv.Itoa(int(fracf * renderFloatPrecisionMultipliers[precision])) | |||||
// may need padding | |||||
if len(fracStr) < precision { | |||||
fracStr = "000000000000000"[:precision-len(fracStr)] + fracStr | |||||
} | |||||
return signStr + intStr + decimalStr + fracStr | |||||
} | |||||
func RenderInteger(format string, n int) string { | |||||
return RenderFloat(format, float64(n)) | |||||
} | |||||
// Request.RemoteAddress contains port, which we want to remove i.e.: | // Request.RemoteAddress contains port, which we want to remove i.e.: | ||||
// "[::1]:58292" => "[::1]" | // "[::1]:58292" => "[::1]" | ||||
func ipAddrFromRemoteAddr(s string) string { | func ipAddrFromRemoteAddr(s string) string { | ||||
@@ -78,3 +238,15 @@ func encodeRFC2047(String string) string { | |||||
addr := mail.Address{String, ""} | addr := mail.Address{String, ""} | ||||
return strings.Trim(addr.String(), " <>") | return strings.Trim(addr.String(), " <>") | ||||
} | } | ||||
func acceptsHtml(hdr http.Header) bool { | |||||
actual := header.ParseAccept(hdr, "Accept") | |||||
for _, s := range actual { | |||||
if s.Value == "text/html" { | |||||
return (true) | |||||
} | |||||
} | |||||
return (false) | |||||
} |
@@ -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> |
@@ -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> | |||||
<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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -45,14 +45,14 @@ | |||||
</rdf:RDF> | </rdf:RDF> | ||||
</metadata> | </metadata> | ||||
<g | <g | ||||
transform="translate(-93.957497,-365.26607)" | |||||
transform="matrix(1,0,0,0.94456233,-93.957497,-345.57658)" | |||||
id="layer1"> | id="layer1"> | ||||
<path | <path | ||||
d="m 85.371201,355.16455 789.901059,0 0,49.98291 -789.901059,0 z" | |||||
d="m 93.957497,365.85895 750.000003,0 0,31.76074 -750.000003,0 z" | |||||
id="rect4487" | id="rect4487" | ||||
style="fill:#85b5bb;fill-opacity:1;stroke:none" /> | style="fill:#85b5bb;fill-opacity:1;stroke:none" /> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.446)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9192)" | |||||
id="g24" | id="g24" | ||||
style="fill:#ff7050"> | style="fill:#ff7050"> | ||||
<g | <g | ||||
@@ -78,7 +78,7 @@ | |||||
</g> | </g> | ||||
</g> | </g> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1453.507)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-114.5591,1454.9802)" | |||||
id="g40" | id="g40" | ||||
style="fill:#ffed5d"> | style="fill:#ffed5d"> | ||||
<g | <g | ||||
@@ -104,7 +104,7 @@ | |||||
</g> | </g> | ||||
</g> | </g> | ||||
<g | <g | ||||
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1453.4765)" | |||||
transform="matrix(1.4512649,0,0,-1.4512649,-115.0147,1454.9497)" | |||||
id="g56" | id="g56" | ||||
style="fill:#93de7f"> | style="fill:#93de7f"> | ||||
<g | <g | ||||
@@ -0,0 +1,5 @@ | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<br/> | |||||
</section> |
@@ -0,0 +1,10 @@ | |||||
<div> | |||||
<a href="#" id="copy-link-btn" class="btn-cta btn">copy link</a> | |||||
<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> |
@@ -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/> |
@@ -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]--> | |||||
@@ -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> |
@@ -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> |
@@ -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 --> | |||||
@@ -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> |
@@ -6,22 +6,8 @@ | |||||
<html class="no-js"> | <html class="no-js"> | ||||
<!--<![endif]--> | <!--<![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='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> | |||||
include "includes/head.html" | |||||
<body> | <body> | ||||
@@ -41,24 +27,14 @@ | |||||
ga('send', 'pageview'); | ga('send', 'pageview'); | ||||
</script> | </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"> | <section id="home"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Easy file sharing from the command line</h2> | Easy file sharing from the command line</h2> | ||||
<div class="row animated fadeInDown"> | <div class="row animated fadeInDown"> | ||||
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12"> | |||||
<div id="from-terminal" class="box col-md-8 col-md-offset-2 col-xs-12"> | |||||
<div class="terminal-top"> | <div class="terminal-top"> | ||||
</div> | </div> | ||||
@@ -77,7 +53,8 @@ | |||||
<code> | <code> | ||||
<br> | <br> | ||||
<span class="code-title"># Upload from web</span> | <span class="code-title"># Upload from web</span> | ||||
<br>Drag your files here, or <a class="browse" href="#"> click to browse.</a> | |||||
<br>Drag your files here, or <a class="browse" href="#"> click to browse. <br/></a> | |||||
</code> | </code> | ||||
<input type="file" multiple="multiple" style='display: none;' /> | <input type="file" multiple="multiple" style='display: none;' /> | ||||
<ul class='queue'> | <ul class='queue'> | ||||
@@ -141,7 +118,7 @@ | |||||
<section id="samples"> | <section id="samples"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Sample use cases | Sample use cases | ||||
</h2> | </h2> | ||||
<div class="row"> | <div class="row"> | ||||
@@ -168,9 +145,10 @@ | |||||
<div class="terminal"> | <div class="terminal"> | ||||
<code> | <code> | ||||
<span class="code-title"># Add this to .bashrc or its equivalent</span> | <span class="code-title"># Add this to .bashrc or its equivalent</span> | ||||
<br/>transfer() { | |||||
<br># 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/>transfer() { | |||||
<br># write to output to tmpfile because of progress bar | |||||
<br>tmpfile=$( mktemp -t transferXXX ); basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; cat $tmpfile; rm -f $tmpfile; | |||||
<br/>} | |||||
<br/> | <br/> | ||||
<br/>alias transfer=transfer | <br/>alias transfer=transfer | ||||
<br/> | <br/> | ||||
@@ -231,7 +209,8 @@ | |||||
<span class="code-title"># Scan for malware or viruses using Clamav</span> | <span class="code-title"># Scan for malware or viruses using Clamav</span> | ||||
<br>$ wget http://www.eicar.org/download/eicar.com | <br>$ wget http://www.eicar.org/download/eicar.com | ||||
<br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan | <br>$ curl -X PUT --upload-file ./eicar.com https://transfer.sh/eicar.com/scan | ||||
<br><br> | |||||
<br> | |||||
<br> | |||||
<span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> | <span class="code-title"># Upload malware to VirusTotal, get a permalink in return</span> | ||||
<br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal | <br>$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal | ||||
<br> | <br> | ||||
@@ -245,7 +224,7 @@ | |||||
<div class="terminal"> | <div class="terminal"> | ||||
<code> | <code> | ||||
<span class="code-title"># Backup, encrypt and transfer</span> | <span class="code-title"># Backup, encrypt and transfer</span> | ||||
<br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt </code> | |||||
<br/>$ mysqldump --all-databases|gzip|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt</code> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -276,28 +255,45 @@ | |||||
</div> | </div> | ||||
</section> | </section> | ||||
<section id="share"> | |||||
<div class="wrapper"> | |||||
<h2 class="page-title">Follow on GitHub</h2> | |||||
<br> | |||||
<br> | |||||
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=follow&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="250" height="50"></iframe> | |||||
<iframe src="//ghbtns.com/github-btn.html?user=dutchcoders&repo=transfer.sh&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="200" height="50"></iframe> | |||||
</div> | |||||
</section> | |||||
<section id="reviews"> | <section id="reviews"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-8 col-md-offset-2 col-xs-12"> | <div class="col-md-8 col-md-offset-2 col-xs-12"> | ||||
<blockquote class="twitter-tweet tweet-xl" lang="en"> | <blockquote class="twitter-tweet tweet-xl" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> | |||||
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> | |||||
<img class="twitter-profile" src="images/reviews/dave.jpg" alt=""> | |||||
</a> | |||||
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> | <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> Thanks for transfer.sh. Just used it for a production purpose for a customer. So great, so easy, so https. :)</p> | ||||
<a href="https://twitter.com/FloifyDave/status/517383101425516544"> | <a href="https://twitter.com/FloifyDave/status/517383101425516544"> | ||||
— Dave Sims (@FloifyDave)</a> | |||||
— Dave Sims (@FloifyDave)</a> | |||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> | |||||
<a href="https://twitter.com/kareemk/status/517029789191118849"> | |||||
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt=""> | |||||
</a> | |||||
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">— Kareem Kouddous (@kareemk) </a> | <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">— Kareem Kouddous (@kareemk) </a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> | |||||
<a href="https://twitter.com/drakpz/status/517008058841829376"> | |||||
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt=""> | |||||
</a> | |||||
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">— PJ Spagnolatti (@drakpz)</a> | <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">— PJ Spagnolatti (@drakpz)</a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
@@ -305,14 +301,18 @@ | |||||
<div class="row"> | <div class="row"> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> | |||||
<a href="https://twitter.com/jacoblindgren11/status/516975006501203968"> | |||||
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt=""> | |||||
</a> | |||||
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> | <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> | ||||
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">— Jacob Lindgren (@jacoblindgren11) </a> | </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">— Jacob Lindgren (@jacoblindgren11) </a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
<div class="col-md-6 col-xs-12"> | <div class="col-md-6 col-xs-12"> | ||||
<blockquote class="twitter-tweet" lang="en"> | <blockquote class="twitter-tweet" lang="en"> | ||||
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> | |||||
<a href="https://twitter.com/arvestad/status/519507976491499521"> | |||||
<img class="twitter-profile" src="images/reviews/lars.jpg" alt=""> | |||||
</a> | |||||
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a> Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">— Lars Arvestad (@arvestad)</a> | <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a> Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">— Lars Arvestad (@arvestad)</a> | ||||
</blockquote> | </blockquote> | ||||
</div> | </div> | ||||
@@ -322,7 +322,7 @@ | |||||
<section id="share"> | <section id="share"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<h2>Share the love</h2> | |||||
<h2 class="page-title">Share the love</h2> | |||||
<ul class="share-buttons"> | <ul class="share-buttons"> | ||||
<li> | <li> | ||||
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i> | <a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i> | ||||
@@ -343,71 +343,33 @@ | |||||
</div> | </div> | ||||
</section> | </section> | ||||
<section id="contact"> | <section id="contact"> | ||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<i class="icon-mail"></i> | <i class="icon-mail"></i> | ||||
<h2> | |||||
<h2 class="page-title"> | |||||
Any questions? | Any questions? | ||||
</h2> | </h2> | ||||
<a href="#" data-uv-trigger class="btn-cta">contact us</a> | <a href="#" data-uv-trigger class="btn-cta">contact us</a> | ||||
</div> | </div> | ||||
</section> | </section> | ||||
<footer> | |||||
<section id="tor"> | |||||
<div class="wrapper"> | <div class="wrapper"> | ||||
<img src="images/Logo-orange.png" alt="Founded in Holland"> | |||||
<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> | </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> | </body> | ||||
@@ -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); | |||||
})(); |
@@ -18,10 +18,18 @@ $(document).ready(function() { | |||||
(function() { | (function() { | ||||
var files = Array() | var files = Array() | ||||
var queue = Array() | |||||
function upload(file) { | |||||
$(window).bind('beforeunload', function(){ | |||||
if (queue.length==0) | |||||
return; | |||||
return 'There are still ' + queue.length + ' files being uploaded.'; | |||||
}); | |||||
function upload(file) { | |||||
$('.browse').addClass('uploading'); | $('.browse').addClass('uploading'); | ||||
var li = $('<li style="clear:both;"/>'); | var li = $('<li style="clear:both;"/>'); | ||||
li.append($('<div><div class="upload-progress"><span></span><div class="bar" style="width:0%;">####################################################</div></div><p>Uploading... ' + file.name + '</p></div>')); | li.append($('<div><div class="upload-progress"><span></span><div class="bar" style="width:0%;">####################################################</div></div><p>Uploading... ' + file.name + '</p></div>')); | ||||
@@ -33,7 +41,8 @@ $(document).ready(function() { | |||||
var pc = parseInt((e.loaded / e.total * 100)); | var pc = parseInt((e.loaded / e.total * 100)); | ||||
$('.upload-progress', $(li)).show(); | $('.upload-progress', $(li)).show(); | ||||
$('.upload-progress .bar', $(li)).css('width', pc + "%"); | $('.upload-progress .bar', $(li)).css('width', pc + "%"); | ||||
$('.upload-progress span ').empty().append(pc + "%"); | |||||
$('.upload-progress span ', $(li)).empty().append(pc + "%"); | |||||
}, false); | }, false); | ||||
xhr.onreadystatechange = function(e) { | xhr.onreadystatechange = function(e) { | ||||
@@ -47,8 +56,13 @@ $(document).ready(function() { | |||||
$(li).html('<span>Error (' + xhr.status + ') during upload of file ' + file.name + '</span>'); | $(li).html('<span>Error (' + xhr.status + ') during upload of file ' + file.name + '</span>'); | ||||
} | } | ||||
files.push(xhr.responseText.replace("https://transfer.sh/", "").replace("\n", "")); | |||||
// 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-zip").attr("href", URI("(" + files.join(",") + ").zip").absoluteTo(location.href).toString()); | ||||
$(".download-tar").attr("href", URI("(" + files.join(",") + ").tar.gz").absoluteTo(location.href).toString()); | $(".download-tar").attr("href", URI("(" + files.join(",") + ").tar.gz").absoluteTo(location.href).toString()); | ||||
@@ -56,7 +70,9 @@ $(document).ready(function() { | |||||
$(".all-files").addClass('show'); | $(".all-files").addClass('show'); | ||||
} | } | ||||
}; | }; | ||||
// should queue all uploads. | // should queue all uploads. | ||||
queue.push(xhr); | |||||
// start upload | // start upload | ||||
xhr.open("PUT", '/' + file.name, true); | xhr.open("PUT", '/' + file.name, true); | ||||
@@ -73,13 +89,12 @@ $(document).ready(function() { | |||||
$('#web').addClass('dragged'); | $('#web').addClass('dragged'); | ||||
}).bind("dragleave", function(event) { | }).bind("dragleave", function(event) { | ||||
$('#terminal').removeClass('dragged'); | $('#terminal').removeClass('dragged'); | ||||
$('#web').removeClass('dragged'); | |||||
$('#web').removeClass('dragged'); | |||||
}).bind("drop dragdrop", function(event) { | }).bind("drop dragdrop", function(event) { | ||||
var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files; | var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files; | ||||
$.each(files, function(index, file) { | $.each(files, function(index, file) { | ||||
console.debug(file); | |||||
upload(file); | upload(file); | ||||
}); | }); | ||||
@@ -93,12 +108,75 @@ $(document).ready(function() { | |||||
}); | }); | ||||
$('input[type=file]').on('change', function(event) { | $('input[type=file]').on('change', function(event) { | ||||
$.each(this.files, function(index, file) { | $.each(this.files, function(index, file) { | ||||
if (file instanceof Blob) { | if (file instanceof Blob) { | ||||
upload(file); | upload(file); | ||||
} | } | ||||
}); | }); | ||||
}); | |||||
}); | |||||
// 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); | |||||
})(); | |||||
}; | |||||
})(); | })(); |
@@ -9,10 +9,10 @@ | |||||
// Core CSS | // Core CSS | ||||
@import "../bower_components/bootstrap/less/scaffolding.less"; | @import "../bower_components/bootstrap/less/scaffolding.less"; | ||||
@import "../bower_components/bootstrap/less/type.less"; | @import "../bower_components/bootstrap/less/type.less"; | ||||
/* @import "../bower_components/bootstrap/less/code.less"; */ | |||||
// @import "../bower_components/bootstrap/less/code.less"; | |||||
@import "../bower_components/bootstrap/less/grid.less"; | @import "../bower_components/bootstrap/less/grid.less"; | ||||
//@import "../bower_components/bootstrap/less/tables.less"; | |||||
//@import "../bower_components/bootstrap/less/forms.less"; | |||||
@import "../bower_components/bootstrap/less/tables.less"; | |||||
@import "../bower_components/bootstrap/less/forms.less"; | |||||
//@import "../bower_components/bootstrap/less/buttons.less"; | //@import "../bower_components/bootstrap/less/buttons.less"; | ||||
// Components | // Components | ||||
@@ -1,4 +1,9 @@ | |||||
body { | |||||
max-width: 2000px; | |||||
margin: 0 auto; | |||||
} | |||||
.browsehappy { | .browsehappy { | ||||
margin: 0.2em 0; | margin: 0.2em 0; | ||||
background: orange; | background: orange; | ||||
@@ -10,8 +15,8 @@ | |||||
margin-top: 30px; | margin-top: 30px; | ||||
ul { | ul { | ||||
list-style: none; | list-style: none; | ||||
max-width: 300px; | |||||
margin: 0 auto; | |||||
max-width: 400px; | |||||
marghomein: 0 auto; | |||||
} | } | ||||
li { | li { | ||||
display: inline-block; | display: inline-block; | ||||
@@ -41,8 +46,7 @@ | |||||
} | } | ||||
h2 { | |||||
.page-title { | |||||
text-align: center; | text-align: center; | ||||
font-size: 35px; | font-size: 35px; | ||||
@media (min-width: @screen-sm-min) { | @media (min-width: @screen-sm-min) { | ||||
@@ -90,8 +94,6 @@ a { | |||||
} | } | ||||
} | } | ||||
::selection { | ::selection { | ||||
background: @red; | background: @red; | ||||
} | } | ||||
@@ -1,14 +1,14 @@ | |||||
#home { | #home { | ||||
text-align: center; | text-align: center; | ||||
h2 { | |||||
.page-title { | |||||
font-size: 30px; | font-size: 30px; | ||||
} | } | ||||
@media (min-width: @screen-sm-min) { | @media (min-width: @screen-sm-min) { | ||||
padding: 50px; | padding: 50px; | ||||
h2 { | |||||
.page-title { | |||||
font-size: 45px; | font-size: 45px; | ||||
margin-top: -20px; | margin-top: -20px; | ||||
margin-bottom: 45px; | |||||
margin-bottom: 20px; | |||||
} | } | ||||
} | } | ||||
.btn-home { | .btn-home { | ||||
@@ -68,7 +68,12 @@ | |||||
} | } | ||||
.terminal { | .terminal { | ||||
a { | |||||
color: #fff | |||||
} | |||||
.border-top-radius (0); | .border-top-radius (0); | ||||
.border-bottom-radius (5px); | .border-bottom-radius (5px); | ||||
background: @dark-blue; | background: @dark-blue; | ||||
// background: url(../images/terminal.svg); | // background: url(../images/terminal.svg); | ||||
@@ -93,6 +98,7 @@ | |||||
span { | span { | ||||
float: right; | float: right; | ||||
} | } | ||||
padding-top: 4px; | |||||
} | } | ||||
.all-files { | .all-files { | ||||
@@ -21,7 +21,7 @@ | |||||
h4 { | h4 { | ||||
margin-top: 30px; | margin-top: 30px; | ||||
} | } | ||||
padding: 50px 0; | |||||
padding: 75px 0; | |||||
text-align: center; | text-align: center; | ||||
.btn-cta { | .btn-cta { | ||||
margin: 30px 0; | margin: 30px 0; | ||||
@@ -61,6 +61,26 @@ | |||||
} | } | ||||
} | } | ||||
#github { | |||||
text-align: center; | |||||
padding: 50px 0; | |||||
} | |||||
#tor { | |||||
text-align: center; | |||||
img { | |||||
max-width: 100px; | |||||
margin: 0 auto; | |||||
margin-bottom: 10px; | |||||
} | |||||
background: @light-gray; | |||||
padding: 50px 0; | |||||
a { | |||||
font-size: 20px; | |||||
} | |||||
} | |||||
footer { | footer { | ||||
text-align: center; | text-align: center; | ||||
@@ -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; | |||||
} |
@@ -23,7 +23,7 @@ blockquote.twitter-tweet { | |||||
margin: 0 auto; | margin: 0 auto; | ||||
} | } | ||||
@media (max-width: @screen-xs) { | @media (max-width: @screen-xs) { | ||||
.twitter-profile { | |||||
.twitter-profile { | |||||
display:none!important; | display:none!important; | ||||
} | } | ||||
} | } | ||||
@@ -43,17 +43,19 @@ blockquote.twitter-tweet a { | |||||
outline: 0 none; | outline: 0 none; | ||||
} | } | ||||
blockquote.twitter-tweet a:hover, | |||||
blockquote.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; | |||||
} | |||||
} |
@@ -622,7 +622,6 @@ address { | |||||
font-style: normal; | font-style: normal; | ||||
line-height: 1.42857143; | line-height: 1.42857143; | ||||
} | } | ||||
/* @import "../bower_components/bootstrap/less/code.less"; */ | |||||
.container { | .container { | ||||
margin-right: auto; | margin-right: auto; | ||||
margin-left: auto; | margin-left: auto; | ||||
@@ -1316,6 +1315,538 @@ address { | |||||
margin-left: 0%; | margin-left: 0%; | ||||
} | } | ||||
} | } | ||||
table { | |||||
max-width: 100%; | |||||
background-color: transparent; | |||||
} | |||||
th { | |||||
text-align: left; | |||||
} | |||||
.table { | |||||
width: 100%; | |||||
margin-bottom: 20px; | |||||
} | |||||
.table > thead > tr > th, | |||||
.table > tbody > tr > th, | |||||
.table > tfoot > tr > th, | |||||
.table > thead > tr > td, | |||||
.table > tbody > tr > td, | |||||
.table > tfoot > tr > td { | |||||
padding: 8px; | |||||
line-height: 1.42857143; | |||||
vertical-align: top; | |||||
border-top: 1px solid #dddddd; | |||||
} | |||||
.table > thead > tr > th { | |||||
vertical-align: bottom; | |||||
border-bottom: 2px solid #dddddd; | |||||
} | |||||
.table > caption + thead > tr:first-child > th, | |||||
.table > colgroup + thead > tr:first-child > th, | |||||
.table > thead:first-child > tr:first-child > th, | |||||
.table > caption + thead > tr:first-child > td, | |||||
.table > colgroup + thead > tr:first-child > td, | |||||
.table > thead:first-child > tr:first-child > td { | |||||
border-top: 0; | |||||
} | |||||
.table > tbody + tbody { | |||||
border-top: 2px solid #dddddd; | |||||
} | |||||
.table .table { | |||||
background-color: #ffffff; | |||||
} | |||||
.table-condensed > thead > tr > th, | |||||
.table-condensed > tbody > tr > th, | |||||
.table-condensed > tfoot > tr > th, | |||||
.table-condensed > thead > tr > td, | |||||
.table-condensed > tbody > tr > td, | |||||
.table-condensed > tfoot > tr > td { | |||||
padding: 5px; | |||||
} | |||||
.table-bordered { | |||||
border: 1px solid #dddddd; | |||||
} | |||||
.table-bordered > thead > tr > th, | |||||
.table-bordered > tbody > tr > th, | |||||
.table-bordered > tfoot > tr > th, | |||||
.table-bordered > thead > tr > td, | |||||
.table-bordered > tbody > tr > td, | |||||
.table-bordered > tfoot > tr > td { | |||||
border: 1px solid #dddddd; | |||||
} | |||||
.table-bordered > thead > tr > th, | |||||
.table-bordered > thead > tr > td { | |||||
border-bottom-width: 2px; | |||||
} | |||||
.table-striped > tbody > tr:nth-child(odd) > td, | |||||
.table-striped > tbody > tr:nth-child(odd) > th { | |||||
background-color: #f9f9f9; | |||||
} | |||||
.table-hover > tbody > tr:hover > td, | |||||
.table-hover > tbody > tr:hover > th { | |||||
background-color: #f5f5f5; | |||||
} | |||||
table col[class*="col-"] { | |||||
position: static; | |||||
float: none; | |||||
display: table-column; | |||||
} | |||||
table td[class*="col-"], | |||||
table th[class*="col-"] { | |||||
float: none; | |||||
display: table-cell; | |||||
} | |||||
.table > thead > tr > .active, | |||||
.table > tbody > tr > .active, | |||||
.table > tfoot > tr > .active, | |||||
.table > thead > .active > td, | |||||
.table > tbody > .active > td, | |||||
.table > tfoot > .active > td, | |||||
.table > thead > .active > th, | |||||
.table > tbody > .active > th, | |||||
.table > tfoot > .active > th { | |||||
background-color: #f5f5f5; | |||||
} | |||||
.table-hover > tbody > tr > .active:hover, | |||||
.table-hover > tbody > .active:hover > td, | |||||
.table-hover > tbody > .active:hover > th { | |||||
background-color: #e8e8e8; | |||||
} | |||||
.table > thead > tr > .success, | |||||
.table > tbody > tr > .success, | |||||
.table > tfoot > tr > .success, | |||||
.table > thead > .success > td, | |||||
.table > tbody > .success > td, | |||||
.table > tfoot > .success > td, | |||||
.table > thead > .success > th, | |||||
.table > tbody > .success > th, | |||||
.table > tfoot > .success > th { | |||||
background-color: #dff0d8; | |||||
} | |||||
.table-hover > tbody > tr > .success:hover, | |||||
.table-hover > tbody > .success:hover > td, | |||||
.table-hover > tbody > .success:hover > th { | |||||
background-color: #d0e9c6; | |||||
} | |||||
.table > thead > tr > .danger, | |||||
.table > tbody > tr > .danger, | |||||
.table > tfoot > tr > .danger, | |||||
.table > thead > .danger > td, | |||||
.table > tbody > .danger > td, | |||||
.table > tfoot > .danger > td, | |||||
.table > thead > .danger > th, | |||||
.table > tbody > .danger > th, | |||||
.table > tfoot > .danger > th { | |||||
background-color: #f2dede; | |||||
} | |||||
.table-hover > tbody > tr > .danger:hover, | |||||
.table-hover > tbody > .danger:hover > td, | |||||
.table-hover > tbody > .danger:hover > th { | |||||
background-color: #ebcccc; | |||||
} | |||||
.table > thead > tr > .warning, | |||||
.table > tbody > tr > .warning, | |||||
.table > tfoot > tr > .warning, | |||||
.table > thead > .warning > td, | |||||
.table > tbody > .warning > td, | |||||
.table > tfoot > .warning > td, | |||||
.table > thead > .warning > th, | |||||
.table > tbody > .warning > th, | |||||
.table > tfoot > .warning > th { | |||||
background-color: #fcf8e3; | |||||
} | |||||
.table-hover > tbody > tr > .warning:hover, | |||||
.table-hover > tbody > .warning:hover > td, | |||||
.table-hover > tbody > .warning:hover > th { | |||||
background-color: #faf2cc; | |||||
} | |||||
@media (max-width: 767px) { | |||||
.table-responsive { | |||||
width: 100%; | |||||
margin-bottom: 15px; | |||||
overflow-y: hidden; | |||||
overflow-x: scroll; | |||||
-ms-overflow-style: -ms-autohiding-scrollbar; | |||||
border: 1px solid #dddddd; | |||||
-webkit-overflow-scrolling: touch; | |||||
} | |||||
.table-responsive > .table { | |||||
margin-bottom: 0; | |||||
} | |||||
.table-responsive > .table > thead > tr > th, | |||||
.table-responsive > .table > tbody > tr > th, | |||||
.table-responsive > .table > tfoot > tr > th, | |||||
.table-responsive > .table > thead > tr > td, | |||||
.table-responsive > .table > tbody > tr > td, | |||||
.table-responsive > .table > tfoot > tr > td { | |||||
white-space: nowrap; | |||||
} | |||||
.table-responsive > .table-bordered { | |||||
border: 0; | |||||
} | |||||
.table-responsive > .table-bordered > thead > tr > th:first-child, | |||||
.table-responsive > .table-bordered > tbody > tr > th:first-child, | |||||
.table-responsive > .table-bordered > tfoot > tr > th:first-child, | |||||
.table-responsive > .table-bordered > thead > tr > td:first-child, | |||||
.table-responsive > .table-bordered > tbody > tr > td:first-child, | |||||
.table-responsive > .table-bordered > tfoot > tr > td:first-child { | |||||
border-left: 0; | |||||
} | |||||
.table-responsive > .table-bordered > thead > tr > th:last-child, | |||||
.table-responsive > .table-bordered > tbody > tr > th:last-child, | |||||
.table-responsive > .table-bordered > tfoot > tr > th:last-child, | |||||
.table-responsive > .table-bordered > thead > tr > td:last-child, | |||||
.table-responsive > .table-bordered > tbody > tr > td:last-child, | |||||
.table-responsive > .table-bordered > tfoot > tr > td:last-child { | |||||
border-right: 0; | |||||
} | |||||
.table-responsive > .table-bordered > tbody > tr:last-child > th, | |||||
.table-responsive > .table-bordered > tfoot > tr:last-child > th, | |||||
.table-responsive > .table-bordered > tbody > tr:last-child > td, | |||||
.table-responsive > .table-bordered > tfoot > tr:last-child > td { | |||||
border-bottom: 0; | |||||
} | |||||
} | |||||
fieldset { | |||||
padding: 0; | |||||
margin: 0; | |||||
border: 0; | |||||
} | |||||
legend { | |||||
display: block; | |||||
width: 100%; | |||||
padding: 0; | |||||
margin-bottom: 20px; | |||||
font-size: 21px; | |||||
line-height: inherit; | |||||
color: #333333; | |||||
border: 0; | |||||
border-bottom: 1px solid #e5e5e5; | |||||
} | |||||
label { | |||||
display: inline-block; | |||||
margin-bottom: 5px; | |||||
font-weight: bold; | |||||
} | |||||
input[type="search"] { | |||||
-webkit-box-sizing: border-box; | |||||
-moz-box-sizing: border-box; | |||||
box-sizing: border-box; | |||||
} | |||||
input[type="radio"], | |||||
input[type="checkbox"] { | |||||
margin: 4px 0 0; | |||||
margin-top: 1px \9; | |||||
/* IE8-9 */ | |||||
line-height: normal; | |||||
} | |||||
input[type="file"] { | |||||
display: block; | |||||
} | |||||
select[multiple], | |||||
select[size] { | |||||
height: auto; | |||||
} | |||||
select optgroup { | |||||
font-size: inherit; | |||||
font-style: inherit; | |||||
font-family: inherit; | |||||
} | |||||
input[type="file"]:focus, | |||||
input[type="radio"]:focus, | |||||
input[type="checkbox"]:focus { | |||||
outline: thin dotted; | |||||
outline: 5px auto -webkit-focus-ring-color; | |||||
outline-offset: -2px; | |||||
} | |||||
input[type="number"]::-webkit-outer-spin-button, | |||||
input[type="number"]::-webkit-inner-spin-button { | |||||
height: auto; | |||||
} | |||||
output { | |||||
display: block; | |||||
padding-top: 7px; | |||||
font-size: 14px; | |||||
line-height: 1.42857143; | |||||
color: #555555; | |||||
vertical-align: middle; | |||||
} | |||||
.form-control { | |||||
display: block; | |||||
width: 100%; | |||||
height: 34px; | |||||
padding: 6px 12px; | |||||
font-size: 14px; | |||||
line-height: 1.42857143; | |||||
color: #555555; | |||||
vertical-align: middle; | |||||
background-color: #ffffff; | |||||
background-image: none; | |||||
border: 1px solid #cccccc; | |||||
border-radius: 4px; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | |||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | |||||
} | |||||
.form-control:focus { | |||||
border-color: #66afe9; | |||||
outline: 0; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); | |||||
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); | |||||
} | |||||
.form-control:-moz-placeholder { | |||||
color: #999999; | |||||
} | |||||
.form-control::-moz-placeholder { | |||||
color: #999999; | |||||
opacity: 1; | |||||
} | |||||
.form-control:-ms-input-placeholder { | |||||
color: #999999; | |||||
} | |||||
.form-control::-webkit-input-placeholder { | |||||
color: #999999; | |||||
} | |||||
.form-control[disabled], | |||||
.form-control[readonly], | |||||
fieldset[disabled] .form-control { | |||||
cursor: not-allowed; | |||||
background-color: #eeeeee; | |||||
} | |||||
textarea.form-control { | |||||
height: auto; | |||||
} | |||||
.form-group { | |||||
margin-bottom: 15px; | |||||
} | |||||
.radio, | |||||
.checkbox { | |||||
display: block; | |||||
min-height: 20px; | |||||
margin-top: 10px; | |||||
margin-bottom: 10px; | |||||
padding-left: 20px; | |||||
vertical-align: middle; | |||||
} | |||||
.radio label, | |||||
.checkbox label { | |||||
display: inline; | |||||
margin-bottom: 0; | |||||
font-weight: normal; | |||||
cursor: pointer; | |||||
} | |||||
.radio input[type="radio"], | |||||
.radio-inline input[type="radio"], | |||||
.checkbox input[type="checkbox"], | |||||
.checkbox-inline input[type="checkbox"] { | |||||
float: left; | |||||
margin-left: -20px; | |||||
} | |||||
.radio + .radio, | |||||
.checkbox + .checkbox { | |||||
margin-top: -5px; | |||||
} | |||||
.radio-inline, | |||||
.checkbox-inline { | |||||
display: inline-block; | |||||
padding-left: 20px; | |||||
margin-bottom: 0; | |||||
vertical-align: middle; | |||||
font-weight: normal; | |||||
cursor: pointer; | |||||
} | |||||
.radio-inline + .radio-inline, | |||||
.checkbox-inline + .checkbox-inline { | |||||
margin-top: 0; | |||||
margin-left: 10px; | |||||
} | |||||
input[type="radio"][disabled], | |||||
input[type="checkbox"][disabled], | |||||
.radio[disabled], | |||||
.radio-inline[disabled], | |||||
.checkbox[disabled], | |||||
.checkbox-inline[disabled], | |||||
fieldset[disabled] input[type="radio"], | |||||
fieldset[disabled] input[type="checkbox"], | |||||
fieldset[disabled] .radio, | |||||
fieldset[disabled] .radio-inline, | |||||
fieldset[disabled] .checkbox, | |||||
fieldset[disabled] .checkbox-inline { | |||||
cursor: not-allowed; | |||||
} | |||||
.input-sm { | |||||
height: 30px; | |||||
padding: 5px 10px; | |||||
font-size: 12px; | |||||
line-height: 1.5; | |||||
border-radius: 3px; | |||||
} | |||||
select.input-sm { | |||||
height: 30px; | |||||
line-height: 30px; | |||||
} | |||||
textarea.input-sm { | |||||
height: auto; | |||||
} | |||||
.input-lg { | |||||
height: 46px; | |||||
padding: 10px 16px; | |||||
font-size: 18px; | |||||
line-height: 1.33; | |||||
border-radius: 6px; | |||||
} | |||||
select.input-lg { | |||||
height: 46px; | |||||
line-height: 46px; | |||||
} | |||||
textarea.input-lg { | |||||
height: auto; | |||||
} | |||||
.has-warning .help-block, | |||||
.has-warning .control-label, | |||||
.has-warning .radio, | |||||
.has-warning .checkbox, | |||||
.has-warning .radio-inline, | |||||
.has-warning .checkbox-inline { | |||||
color: #8a6d3b; | |||||
} | |||||
.has-warning .form-control { | |||||
border-color: #8a6d3b; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
} | |||||
.has-warning .form-control:focus { | |||||
border-color: #66512c; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; | |||||
} | |||||
.has-warning .input-group-addon { | |||||
color: #8a6d3b; | |||||
border-color: #8a6d3b; | |||||
background-color: #fcf8e3; | |||||
} | |||||
.has-error .help-block, | |||||
.has-error .control-label, | |||||
.has-error .radio, | |||||
.has-error .checkbox, | |||||
.has-error .radio-inline, | |||||
.has-error .checkbox-inline { | |||||
color: #a94442; | |||||
} | |||||
.has-error .form-control { | |||||
border-color: #a94442; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
} | |||||
.has-error .form-control:focus { | |||||
border-color: #843534; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||||
} | |||||
.has-error .input-group-addon { | |||||
color: #a94442; | |||||
border-color: #a94442; | |||||
background-color: #f2dede; | |||||
} | |||||
.has-success .help-block, | |||||
.has-success .control-label, | |||||
.has-success .radio, | |||||
.has-success .checkbox, | |||||
.has-success .radio-inline, | |||||
.has-success .checkbox-inline { | |||||
color: #3c763d; | |||||
} | |||||
.has-success .form-control { | |||||
border-color: #3c763d; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
} | |||||
.has-success .form-control:focus { | |||||
border-color: #2b542c; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; | |||||
} | |||||
.has-success .input-group-addon { | |||||
color: #3c763d; | |||||
border-color: #3c763d; | |||||
background-color: #dff0d8; | |||||
} | |||||
.form-control-static { | |||||
margin-bottom: 0; | |||||
} | |||||
.help-block { | |||||
display: block; | |||||
margin-top: 5px; | |||||
margin-bottom: 10px; | |||||
color: #7b7b7b; | |||||
} | |||||
@media (min-width: 768px) { | |||||
.form-inline .form-group { | |||||
display: inline-block; | |||||
margin-bottom: 0; | |||||
vertical-align: middle; | |||||
} | |||||
.form-inline .form-control { | |||||
display: inline-block; | |||||
} | |||||
.form-inline select.form-control { | |||||
width: auto; | |||||
} | |||||
.form-inline .radio, | |||||
.form-inline .checkbox { | |||||
display: inline-block; | |||||
margin-top: 0; | |||||
margin-bottom: 0; | |||||
padding-left: 0; | |||||
} | |||||
.form-inline .radio input[type="radio"], | |||||
.form-inline .checkbox input[type="checkbox"] { | |||||
float: none; | |||||
margin-left: 0; | |||||
} | |||||
} | |||||
.form-horizontal .control-label, | |||||
.form-horizontal .radio, | |||||
.form-horizontal .checkbox, | |||||
.form-horizontal .radio-inline, | |||||
.form-horizontal .checkbox-inline { | |||||
margin-top: 0; | |||||
margin-bottom: 0; | |||||
padding-top: 7px; | |||||
} | |||||
.form-horizontal .radio, | |||||
.form-horizontal .checkbox { | |||||
min-height: 27px; | |||||
} | |||||
.form-horizontal .form-group { | |||||
margin-left: -35px; | |||||
margin-right: -35px; | |||||
} | |||||
.form-horizontal .form-group:before, | |||||
.form-horizontal .form-group:after { | |||||
content: " "; | |||||
display: table; | |||||
} | |||||
.form-horizontal .form-group:after { | |||||
clear: both; | |||||
} | |||||
.form-horizontal .form-group:before, | |||||
.form-horizontal .form-group:after { | |||||
content: " "; | |||||
display: table; | |||||
} | |||||
.form-horizontal .form-group:after { | |||||
clear: both; | |||||
} | |||||
.form-horizontal .form-control-static { | |||||
padding-top: 7px; | |||||
} | |||||
@media (min-width: 768px) { | |||||
.form-horizontal .control-label { | |||||
text-align: right; | |||||
} | |||||
} | |||||
.fade { | .fade { | ||||
opacity: 0; | opacity: 0; | ||||
-webkit-transition: opacity 0.15s linear; | -webkit-transition: opacity 0.15s linear; | ||||
@@ -5358,6 +5889,10 @@ body { | |||||
-o-animation-duration: 0.75s; | -o-animation-duration: 0.75s; | ||||
animation-duration: 0.75s; | animation-duration: 0.75s; | ||||
} | } | ||||
body { | |||||
max-width: 2000px; | |||||
margin: 0 auto; | |||||
} | |||||
.browsehappy { | .browsehappy { | ||||
margin: 0.2em 0; | margin: 0.2em 0; | ||||
background: orange; | background: orange; | ||||
@@ -5369,8 +5904,8 @@ body { | |||||
} | } | ||||
#navigation ul { | #navigation ul { | ||||
list-style: none; | list-style: none; | ||||
max-width: 300px; | |||||
margin: 0 auto; | |||||
max-width: 400px; | |||||
marghomein: 0 auto; | |||||
} | } | ||||
#navigation li { | #navigation li { | ||||
display: inline-block; | display: inline-block; | ||||
@@ -5397,12 +5932,12 @@ body { | |||||
font-size: 15px; | font-size: 15px; | ||||
color: #3b3b3b; | color: #3b3b3b; | ||||
} | } | ||||
h2 { | |||||
.page-title { | |||||
text-align: center; | text-align: center; | ||||
font-size: 35px; | font-size: 35px; | ||||
} | } | ||||
@media (min-width: 768px) { | @media (min-width: 768px) { | ||||
h2 { | |||||
.page-title { | |||||
font-size: 50px; | font-size: 50px; | ||||
} | } | ||||
} | } | ||||
@@ -5482,17 +6017,17 @@ a:hover { | |||||
#home { | #home { | ||||
text-align: center; | text-align: center; | ||||
} | } | ||||
#home h2 { | |||||
#home .page-title { | |||||
font-size: 30px; | font-size: 30px; | ||||
} | } | ||||
@media (min-width: 768px) { | @media (min-width: 768px) { | ||||
#home { | #home { | ||||
padding: 50px; | padding: 50px; | ||||
} | } | ||||
#home h2 { | |||||
#home .page-title { | |||||
font-size: 45px; | font-size: 45px; | ||||
margin-top: -20px; | margin-top: -20px; | ||||
margin-bottom: 45px; | |||||
margin-bottom: 20px; | |||||
} | } | ||||
} | } | ||||
#home .btn-home { | #home .btn-home { | ||||
@@ -5561,6 +6096,9 @@ a:hover { | |||||
backbground-repeat: no-repeat; | backbground-repeat: no-repeat; | ||||
background-size: cover; | background-size: cover; | ||||
} | } | ||||
.terminal a { | |||||
color: #ffffff; | |||||
} | |||||
.terminal-top { | .terminal-top { | ||||
border-top-right-radius: 5px; | border-top-right-radius: 5px; | ||||
border-top-left-radius: 5px; | border-top-left-radius: 5px; | ||||
@@ -5571,6 +6109,7 @@ a:hover { | |||||
} | } | ||||
.upload-progress { | .upload-progress { | ||||
max-width: 80%; | max-width: 80%; | ||||
padding-top: 4px; | |||||
} | } | ||||
.upload-progress .bar { | .upload-progress .bar { | ||||
word-wrap: normal; | word-wrap: normal; | ||||
@@ -5603,7 +6142,7 @@ a:hover { | |||||
font-size: 100px; | font-size: 100px; | ||||
} | } | ||||
#samples { | #samples { | ||||
padding: 50px 0; | |||||
padding: 75px 0; | |||||
text-align: center; | text-align: center; | ||||
} | } | ||||
#samples h4 { | #samples h4 { | ||||
@@ -5643,6 +6182,23 @@ a:hover { | |||||
color: #fff; | color: #fff; | ||||
text-decoration: none; | text-decoration: none; | ||||
} | } | ||||
#github { | |||||
text-align: center; | |||||
padding: 50px 0; | |||||
} | |||||
#tor { | |||||
text-align: center; | |||||
background: #f6f8f8; | |||||
padding: 50px 0; | |||||
} | |||||
#tor img { | |||||
max-width: 100px; | |||||
margin: 0 auto; | |||||
margin-bottom: 10px; | |||||
} | |||||
#tor a { | |||||
font-size: 20px; | |||||
} | |||||
footer { | footer { | ||||
text-align: center; | text-align: center; | ||||
background: #36535a; | background: #36535a; | ||||
@@ -5720,10 +6276,6 @@ blockquote.twitter-tweet a { | |||||
text-decoration: none; | text-decoration: none; | ||||
outline: 0 none; | outline: 0 none; | ||||
} | } | ||||
blockquote.twitter-tweet a:hover, | |||||
blockquote.twitter-tweet a:focus { | |||||
text-decoration: underline; | |||||
} | |||||
blockquote.tweet-xl p { | blockquote.tweet-xl p { | ||||
font-size: 22px; | font-size: 22px; | ||||
line-height: 25px; | line-height: 25px; | ||||
@@ -5731,6 +6283,14 @@ blockquote.tweet-xl p { | |||||
blockquote.tweet-xl a { | blockquote.tweet-xl a { | ||||
font-size: 22px; | font-size: 22px; | ||||
} | } | ||||
@media (max-width: 480px) { | |||||
blockquote.tweet-xl p { | |||||
font-size: 17px; | |||||
} | |||||
blockquote.tweet-xl a { | |||||
font-size: 17px; | |||||
} | |||||
} | |||||
@font-face { | @font-face { | ||||
font-family: "transfersh"; | font-family: "transfersh"; | ||||
src: url("../fonts/transfersh.eot"); | src: url("../fonts/transfersh.eot"); | ||||
@@ -5807,4 +6367,181 @@ blockquote.tweet-xl a { | |||||
.icon-gplus:before { | .icon-gplus:before { | ||||
content: "p"; | content: "p"; | ||||
} | } | ||||
.preview-wrapper { | |||||
padding-bottom: 30px; | |||||
} | |||||
html { | |||||
min-height: 100%; | |||||
} | |||||
#download { | |||||
position: static; | |||||
} | |||||
#download footer { | |||||
bottom: 0; | |||||
left: 0; | |||||
width: 100%; | |||||
position: absolute; | |||||
z-index: -1; | |||||
} | |||||
.preview-image { | |||||
padding: 0; | |||||
padding: 0px; | |||||
} | |||||
.preview-image img { | |||||
margin: 0 auto; | |||||
display: block; | |||||
max-width: 800px; | |||||
max-width: 100%; | |||||
} | |||||
.overlay { | |||||
position: fixed; | |||||
z-index: 100; | |||||
top: 0; | |||||
left: 0; | |||||
right: 0; | |||||
bottom: 0; | |||||
background-color: rgba(0, 0, 0, 0.1); | |||||
visibility: hidden; | |||||
opacity: 0; | |||||
transition: opacity 0.2s ease; | |||||
} | |||||
.active .overlay { | |||||
visibility: visible; | |||||
opacity: 1; | |||||
} | |||||
.copy-link-wrapper { | |||||
z-index: 200; | |||||
padding: 2em; | |||||
position: fixed; | |||||
top: 50%; | |||||
left: 50%; | |||||
width: 50%; | |||||
max-width: 500px; | |||||
min-width: 300px; | |||||
background-color: #85b5bb; | |||||
border-radius: 2px; | |||||
transform: translateX(-50%) translateY(-50%); | |||||
transition: opacity 0.2s ease; | |||||
clip: rect(1px 1px 1px 1px); | |||||
opacity: 0; | |||||
top: -9999999px; | |||||
left: -9999999px; | |||||
} | |||||
.active .copy-link-wrapper { | |||||
clip: auto; | |||||
opacity: 1; | |||||
top: 50%; | |||||
left: 50%; | |||||
} | |||||
.copy-link-wrapper p { | |||||
font-size: 20px; | |||||
color: #fff; | |||||
} | |||||
.copy-link-wrapper input { | |||||
background-color: #f6f8f8; | |||||
color: #3b3b3b; | |||||
border: 0; | |||||
font-size: 1em; | |||||
padding: 1em; | |||||
margin: 0; | |||||
width: 100%; | |||||
border-radius: 2px; | |||||
white-space: nowrap; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
} | |||||
.copy-link-wrapper .error { | |||||
text-align: center; | |||||
color: #E7483B; | |||||
display: block; | |||||
padding: 0.5em; | |||||
} | |||||
#md-preview { | |||||
padding-bottom: 30px; | |||||
} | |||||
video { | |||||
margin: 0 auto; | |||||
width: 100%; | |||||
} | |||||
.wrap { | |||||
width: 40%; | |||||
height: 40%; | |||||
margin: 20px auto; | |||||
} | |||||
video { | |||||
width: 100%; | |||||
} | |||||
video::-webkit-media-controls-enclosure { | |||||
padding: 0px; | |||||
height: 50px; | |||||
} | |||||
video::-webkit-media-controls-panel { | |||||
opacity: 1 !important; | |||||
display: -webkit-flex !important; | |||||
margin-top: 50px; | |||||
height: 50px; | |||||
background-color: #36535a; | |||||
border-radius: 0 0 10px 10px; | |||||
} | |||||
video::-webkit-media-controls-timeline { | |||||
height: 12px; | |||||
padding: 0px; | |||||
border: 0px; | |||||
} | |||||
video::-webkit-media-controls-volume-slider, | |||||
video::-webkit-media-controls-timeline { | |||||
height: 12px; | |||||
border-radius: 5px; | |||||
min-width: 15px; | |||||
} | |||||
video::-webkit-media-controls-volume-slider::-webkit-media-slider-container, | |||||
video::-webkit-media-controls-timeline::-webkit-media-slider-container { | |||||
border: 0px; | |||||
border-radius: 5px; | |||||
background-color: #85b5bb; | |||||
cursor: pointer; | |||||
} | |||||
::-webkit-media-slider-thumb { | |||||
-webkit-appearance: none; | |||||
background: red; | |||||
} | |||||
video::-webkit-media-controls-play-button { | |||||
cursor: pointer; | |||||
} | |||||
video::-webkit-media-controls-play-button:hover { | |||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; | |||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); | |||||
opacity: 0.7; | |||||
} | |||||
video::-webkit-media-controls-fullscreen-button { | |||||
-webkit-appearance: none; | |||||
background-color: transparent; | |||||
cursor: pointer; | |||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAABACAYAAADF2C3zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3MDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3MTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQyQkE2QUZGNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQyQkE2QjAwNzkzQjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+1z7uaAAAAVhJREFUeNrsljFuAjEQRb3ACZByii2pECmgySFIGoiUGsEKiaQAimwTToCggSYSNUoJHSfgFJwhMt9oHBlj8Ga2SAqP9KQV7PPY4y1+9PDYEZ4agaHrj4Lwl5LHXFkvsOXKatt1jjykzrq2WeW+Jb6Bhp5BySOvQQLuaKEPYwYnOQLSkpTwBfbUqQam9hDVtieOyaoOGxDTAtNrV9UFqTEc/UGUQeXWmfSZB6BqXMc3aIFlFllY4hP49N2h66p2YJXly3HJ92ABihxZVRPM6BqvViSlFNwqiBwV5CAHOchBDnKQ/5/si4/iOUn5YX0+ec0X1mkBXljH1nlhncTfh3WIF2EdR/gJ677OKqwfdOqHmJ4Nsd17PwU5E/yWgJieY/Biv6MoUVjvOe61j+cGuuwpsLvDOl5KjeFkDusRtiSNKZ6FdXTlhXWIfxTWcf58YR0L3AzrRwEGAJoOgCMfh6hiAAAAAElFTkSuQmCC); | |||||
background-size: 16px 64px; | |||||
background-position: center 8px; | |||||
background-repeat: no-repeat; | |||||
} | |||||
video::-webkit-media-controls-mute-button { | |||||
-webkit-appearance: none; | |||||
background-color: transparent; | |||||
cursor: pointer; | |||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAABACAYAAAATffeWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2N0Q1MjA3NDc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2N0Q1MjA3NTc5NjYxMUUyQjQzRjk5Mjc1MTU5Qjk0NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY3RDUyMDcyNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3RDUyMDczNzk2NjExRTJCNDNGOTkyNzUxNTlCOTQ1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Gp0GRAAAATdJREFUeNpidIsuYMABwoF4BhCvB+IkXIqYcIj7APEiIBYA4jg0OREgLsJnQAgQrwJiNiifGU3eFIi7gDgPxGEBYnYg1gBiDqizQX5ixOEyCyDeC8SNQNwJxJtABuwHYksGwoAR6q3tQFwKxGlAnMtEpGYQ+A+1NROI+aDedGdiIA2sAWJWaDhcBGIVUg1ABqz4ohEXAMXQbyA+DcRaQHwHZMBxIjWDArEcmrg+AXEYEO8ExYIjUjRGQuOXEUcgghLVOahBoAQ1GWTAT2iAgMBJID4BxPOhBqIDkJwnENcDcQkQP8AWBiuAOBiIf0H5f9HkT0NdMAFfIG4D4gggfgtNPMjgDRD3wgPm////DJSAUQNGDRg1YNSAUQNGDRg1YNSA4WhAUnHraI9ltMcy2mMZDD0WgAADADYlybDQKXdAAAAAAElFTkSuQmCC); | |||||
background-size: 16px 64px; | |||||
background-position: center 8px; | |||||
background-repeat: no-repeat; | |||||
} | |||||
video::-webkit-media-controls-fullscreen-button:hover { | |||||
-webkit-appearance: none; | |||||
background-position: center -42px; | |||||
} | |||||
video::-webkit-media-controls-mute-button:hover { | |||||
-webkit-appearance: none; | |||||
background-position: center -43px; | |||||
} | |||||
video::-webkit-media-controls-current-time-display, | |||||
video::-webkit-media-controls-time-remaining-display { | |||||
font-size: 13px; | |||||
font-weight: normal; | |||||
} | |||||
/*# sourceMappingURL=/styles/main.css.map */ | /*# sourceMappingURL=/styles/main.css.map */ |
@@ -9,5 +9,6 @@ | |||||
@import "includes/pages"; | @import "includes/pages"; | ||||
@import "includes/reviews"; | @import "includes/reviews"; | ||||
@import "includes/transfersh-icons"; | @import "includes/transfersh-icons"; | ||||
@import "includes/preview"; | |||||