Ver a proveniência

docker, previews, tor, bugfixes

* implemented docker
* added previews (markdown, html, text, video, audio)
* added tor support
* several bugfixes
tags/v1.0.0
Remco há 9 anos
ascendente
cometimento
6b251ec7a8
63 ficheiros alterados com 4402 adições e 308 eliminações
  1. +16
    -0
      .dockerignore
  2. +6
    -0
      .ebextensions/01config_nginx.config
  3. +1
    -0
      .gitignore
  4. +1
    -1
      Dockerfile
  5. +33
    -3
      Gruntfile.js
  6. +10
    -0
      README.md
  7. +2
    -0
      package.json
  8. +110
    -36
      transfersh-server/handlers.go
  9. +23
    -15
      transfersh-server/main.go
  10. +1
    -1
      transfersh-server/static/404.html
  11. +132
    -0
      transfersh-server/static/download.audio.html
  12. +134
    -0
      transfersh-server/static/download.code.html
  13. +116
    -0
      transfersh-server/static/download.html
  14. +126
    -0
      transfersh-server/static/download.image.html
  15. +124
    -0
      transfersh-server/static/download.markdown.html
  16. +129
    -0
      transfersh-server/static/download.video.html
  17. BIN
     
  18. +5
    -5
      transfersh-server/static/images/terminal-top.svg
  19. +6
    -0
      transfersh-server/static/images/tor.svg
  20. +5
    -0
      transfersh-server/static/includes/download-bottom.html
  21. +10
    -0
      transfersh-server/static/includes/download-btn.html
  22. +6
    -0
      transfersh-server/static/includes/download-top.html
  23. +36
    -0
      transfersh-server/static/includes/footer.html
  24. +15
    -0
      transfersh-server/static/includes/ga.html
  25. +12
    -0
      transfersh-server/static/includes/head.html
  26. +2
    -0
      transfersh-server/static/includes/js.html
  27. +15
    -0
      transfersh-server/static/includes/navigation.html
  28. +132
    -94
      transfersh-server/static/index.html
  29. +3
    -3
      transfersh-server/static/scripts/main.js
  30. +1
    -1
      transfersh-server/static/styles/main.css
  31. +46
    -2
      transfersh-server/storage.go
  32. +172
    -0
      transfersh-server/utils.go
  33. +47
    -0
      transfersh-web/download.audio.html
  34. +143
    -0
      transfersh-web/download.code.html
  35. +31
    -0
      transfersh-web/download.html
  36. +41
    -0
      transfersh-web/download.image.html
  37. +39
    -0
      transfersh-web/download.markdown.html
  38. +44
    -0
      transfersh-web/download.video.html
  39. BIN
     
  40. +5
    -5
      transfersh-web/images/terminal-top.svg
  41. +6
    -0
      transfersh-web/images/tor.svg
  42. +5
    -0
      transfersh-web/includes/download-bottom.html
  43. +10
    -0
      transfersh-web/includes/download-btn.html
  44. +6
    -0
      transfersh-web/includes/download-top.html
  45. +36
    -0
      transfersh-web/includes/footer.html
  46. +15
    -0
      transfersh-web/includes/ga.html
  47. +14
    -0
      transfersh-web/includes/head.html
  48. +9
    -0
      transfersh-web/includes/js.html
  49. +15
    -0
      transfersh-web/includes/navigation.html
  50. +54
    -92
      transfersh-web/index.html
  51. +61
    -0
      transfersh-web/scripts/clipboard.js
  52. +86
    -8
      transfersh-web/scripts/main.js
  53. +1296
    -0
      transfersh-web/scripts/showdown.js
  54. +0
    -1
      transfersh-web/scripts/typewriter-bundle.min.js
  55. +3
    -3
      transfersh-web/styles/bootstrap.less
  56. +8
    -6
      transfersh-web/styles/includes/global.less
  57. +9
    -3
      transfersh-web/styles/includes/home.less
  58. +21
    -1
      transfersh-web/styles/includes/pages.less
  59. +200
    -0
      transfersh-web/styles/includes/preview.less
  60. +16
    -14
      transfersh-web/styles/includes/reviews.less
  61. +750
    -13
      transfersh-web/styles/main.css
  62. +1
    -1
      transfersh-web/styles/main.css.map
  63. +1
    -0
      transfersh-web/styles/main.less

+ 16
- 0
.dockerignore Ver ficheiro

@@ -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

+ 6
- 0
.ebextensions/01config_nginx.config Ver ficheiro

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

+ 1
- 0
.gitignore Ver ficheiro

@@ -13,3 +13,4 @@ bower_components/
node_modules/ node_modules/


transfersh-server/run.sh transfersh-server/run.sh
.elasticbeanstalk/

transfersh-server/Dockerfile → Dockerfile Ver ficheiro

@@ -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 ./

+ 33
- 3
Gruntfile.js Ver ficheiro

@@ -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'
]); ]);
};
};

+ 10
- 0
README.md Ver ficheiro

@@ -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.


+ 2
- 0
package.json Ver ficheiro

@@ -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",


+ 110
- 36
transfersh-server/handlers.go Ver ficheiro

@@ -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
} }


+ 23
- 15
transfersh-server/main.go Ver ficheiro

@@ -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{


+ 1
- 1
transfersh-server/static/404.html Ver ficheiro

@@ -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>

+ 132
- 0
transfersh-server/static/download.audio.html Ver ficheiro

@@ -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>

+ 134
- 0
transfersh-server/static/download.code.html Ver ficheiro

@@ -0,0 +1,134 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{.Filename}} - transfer.sh</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css">

<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<script src="scripts/vendor/modernizr.js"></script>
</head>

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

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

<section id="home">
<div class="wrapper">
<h2>
{{.Filename}}</h2>
<a href="{{.Url}}"></a>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">

</div>
<div id="terminal" class="terminal">
<div id="code"></div>
</div>



</div>

</div>

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

</section>


<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>

<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

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

<script src="scripts/main.js"></script>
<script>

var text = "# Markdown *works*.";

var converter = new Showdown.converter();
var html = converter.makeHtml(text);
$('#md-preview').append(html);

</script>


</body>

</html>

+ 116
- 0
transfersh-server/static/download.html Ver ficheiro

@@ -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>

+ 126
- 0
transfersh-server/static/download.image.html Ver ficheiro

@@ -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>

+ 124
- 0
transfersh-server/static/download.markdown.html Ver ficheiro

@@ -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>

+ 129
- 0
transfersh-server/static/download.video.html Ver ficheiro

@@ -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>


+ 5
- 5
transfersh-server/static/images/terminal-top.svg Ver ficheiro

@@ -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


+ 6
- 0
transfersh-server/static/images/tor.svg
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 5
- 0
transfersh-server/static/includes/download-bottom.html Ver ficheiro

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

+ 10
- 0
transfersh-server/static/includes/download-btn.html Ver ficheiro

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

+ 6
- 0
transfersh-server/static/includes/download-top.html Ver ficheiro

@@ -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/>

+ 36
- 0
transfersh-server/static/includes/footer.html Ver ficheiro

@@ -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]-->


+ 15
- 0
transfersh-server/static/includes/ga.html Ver ficheiro

@@ -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>

+ 12
- 0
transfersh-server/static/includes/head.html Ver ficheiro

@@ -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>

+ 2
- 0
transfersh-server/static/includes/js.html Ver ficheiro

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

+ 15
- 0
transfersh-server/static/includes/navigation.html Ver ficheiro

@@ -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>

+ 132
- 94
transfersh-server/static/index.html Ver ficheiro

@@ -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">
&mdash; Dave Sims (@FloifyDave)</a>
&mdash; Dave Sims (@FloifyDave)</a>
</blockquote> </blockquote>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
<a href="https://twitter.com/kareemk/status/517029789191118849">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
<a href="https://twitter.com/drakpz/status/517008058841829376">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
</a>
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a> <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a>
</blockquote> </blockquote>
</div> </div>
@@ -303,14 +327,18 @@
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
<a href="https://twitter.com/jacoblindgren11/status/516975006501203968">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
</a>
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a>
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a> </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
<a href="https://twitter.com/arvestad/status/519507976491499521">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
</a>
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a> <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a>
</blockquote> </blockquote>
</div> </div>
@@ -320,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>

+ 3
- 3
transfersh-server/static/scripts/main.js
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 1
- 1
transfersh-server/static/styles/main.css
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 46
- 2
transfersh-server/storage.go Ver ficheiro

@@ -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


+ 172
- 0
transfersh-server/utils.go Ver ficheiro

@@ -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)
}

+ 47
- 0
transfersh-web/download.audio.html Ver ficheiro

@@ -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>

+ 143
- 0
transfersh-web/download.code.html Ver ficheiro

@@ -0,0 +1,143 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{.Filename}} - transfer.sh</title>
<meta name="description" content="Easy and fast file sharing from the command-line.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<link rel="stylesheet" href="styles/main.css">

<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:100,200,300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
<!-- build:js scripts/vendor/modernizr.js -->
<script src="bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
</head>

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

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

<section id="home">
<div class="wrapper">
<h2>
{{.Filename}}</h2>
<a href="{{.Url}}"></a>
<div class="row animated fadeInDown">
<div id="from-terminal" class=" box col-md-8 col-md-offset-2 col-xs-12">
<div class="terminal-top">

</div>
<div id="terminal" class="terminal">
<div id="code"></div>
</div>



</div>

</div>

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

</section>


<script>
(function() {
var uv = document.createElement('script');
uv.type = 'text/javascript';
uv.async = true;
uv.src = '//widget.uservoice.com/5rkATbLIm8ClJQeOirOhFg.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(uv, s)
})()
</script>

<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

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

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

var text = "# Markdown *works*.";

var converter = new Showdown.converter();
var html = converter.makeHtml(text);
$('#md-preview').append(html);

</script>


</body>

</html>

+ 31
- 0
transfersh-web/download.html Ver ficheiro

@@ -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>

+ 41
- 0
transfersh-web/download.image.html Ver ficheiro

@@ -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>

+ 39
- 0
transfersh-web/download.markdown.html Ver ficheiro

@@ -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>

+ 44
- 0
transfersh-web/download.video.html Ver ficheiro

@@ -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>


+ 5
- 5
transfersh-web/images/terminal-top.svg Ver ficheiro

@@ -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


+ 6
- 0
transfersh-web/images/tor.svg
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 5
- 0
transfersh-web/includes/download-bottom.html Ver ficheiro

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

+ 10
- 0
transfersh-web/includes/download-btn.html Ver ficheiro

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

+ 6
- 0
transfersh-web/includes/download-top.html Ver ficheiro

@@ -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/>

+ 36
- 0
transfersh-web/includes/footer.html Ver ficheiro

@@ -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]-->


+ 15
- 0
transfersh-web/includes/ga.html Ver ficheiro

@@ -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>

+ 14
- 0
transfersh-web/includes/head.html Ver ficheiro

@@ -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>

+ 9
- 0
transfersh-web/includes/js.html Ver ficheiro

@@ -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 -->

+ 15
- 0
transfersh-web/includes/navigation.html Ver ficheiro

@@ -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>

+ 54
- 92
transfersh-web/index.html Ver ficheiro

@@ -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">
&mdash; Dave Sims (@FloifyDave)</a>
&mdash; Dave Sims (@FloifyDave)</a>
</blockquote> </blockquote>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
<a href="https://twitter.com/kareemk/status/517029789191118849">
<img class="twitter-profile" src="images/reviews/kareem.jpg" alt="">
</a>
<p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a> <p><a href="https://twitter.com/dutchcoders">@dutchcoders</a> love transfer.sh! any change we can *pay* for a self-hosted version?</p><a href="https://twitter.com/kareemk/status/517029789191118849">&mdash; Kareem Kouddous (@kareemk) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
<a href="https://twitter.com/drakpz/status/517008058841829376">
<img class="twitter-profile" src="images/reviews/pg.jpeg" alt="">
</a>
<p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a> <p><a href="http://t.co/JomAmqWYEB">http://t.co/JomAmqWYEB</a> by <a href="https://twitter.com/dutchcoders">@dutchcoders</a> is pure awesomeness! any chance of source on github? :-)</p><a href="https://twitter.com/drakpz/status/517008058841829376">&mdash; PJ Spagnolatti (@drakpz)</a>
</blockquote> </blockquote>
</div> </div>
@@ -305,14 +301,18 @@
<div class="row"> <div class="row">
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
<a href="https://twitter.com/jacoblindgren11/status/516975006501203968">
<img class="twitter-profile" src="images/reviews/jacob.jpg" alt="">
</a>
<p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a> <p>Love transfer.sh! Will be using it from now on! Thanks for the amazing service we can use from the CLI <a href="https://twitter.com/dutchcoders">@dutchcoders</a>
</p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a> </p><a href="https://twitter.com/jacoblindgren11/status/516975006501203968">&mdash; Jacob Lindgren (@jacoblindgren11) </a>
</blockquote> </blockquote>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-md-6 col-xs-12">
<blockquote class="twitter-tweet" lang="en"> <blockquote class="twitter-tweet" lang="en">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
<a href="https://twitter.com/arvestad/status/519507976491499521">
<img class="twitter-profile" src="images/reviews/lars.jpg" alt="">
</a>
<p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a> <p>transfer.sh is my latest fav service! Try simple command-line and web file sharing! <a href="https://t.co/FSrsb1JKJd">https://t.co/FSrsb1JKJd</a>&#10;Thanks <a href="https://twitter.com/dutchcoders">@dutchcoders</a> !</p> <a href="https://twitter.com/arvestad/status/519507976491499521">&mdash; Lars Arvestad (@arvestad)</a>
</blockquote> </blockquote>
</div> </div>
@@ -322,7 +322,7 @@


<section id="share"> <section id="share">
<div class="wrapper"> <div class="wrapper">
<h2>Share the love</h2>
<h2 class="page-title">Share the love</h2>
<ul class="share-buttons"> <ul class="share-buttons">
<li> <li>
<a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i> <a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Ftransfer.sh&t=" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <i class="icon-facebook"></i>
@@ -343,71 +343,33 @@
</div> </div>
</section> </section>



<section id="contact"> <section id="contact">
<div class="wrapper"> <div class="wrapper">
<i class="icon-mail"></i> <i class="icon-mail"></i>
<h2>
<h2 class="page-title">
Any questions? Any questions?
</h2> </h2>
<a href="#" data-uv-trigger class="btn-cta">contact us</a> <a href="#" data-uv-trigger class="btn-cta">contact us</a>
</div> </div>
</section> </section>


<footer>

<section id="tor">
<div class="wrapper"> <div class="wrapper">
<img src="images/Logo-orange.png" alt="Founded in Holland">
<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>




+ 61
- 0
transfersh-web/scripts/clipboard.js Ver ficheiro

@@ -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);
})();

+ 86
- 8
transfersh-web/scripts/main.js Ver ficheiro

@@ -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);
})();
};

})(); })();

+ 1296
- 0
transfersh-web/scripts/showdown.js
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 0
- 1
transfersh-web/scripts/typewriter-bundle.min.js
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 3
- 3
transfersh-web/styles/bootstrap.less Ver ficheiro

@@ -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


+ 8
- 6
transfersh-web/styles/includes/global.less Ver ficheiro

@@ -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;
} }


+ 9
- 3
transfersh-web/styles/includes/home.less Ver ficheiro

@@ -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
- 1
transfersh-web/styles/includes/pages.less Ver ficheiro

@@ -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;


+ 200
- 0
transfersh-web/styles/includes/preview.less Ver ficheiro

@@ -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;
}

+ 16
- 14
transfersh-web/styles/includes/reviews.less Ver ficheiro

@@ -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;
}
}

+ 750
- 13
transfersh-web/styles/main.css Ver ficheiro

@@ -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 */

+ 1
- 1
transfersh-web/styles/main.css.map
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 1
- 0
transfersh-web/styles/main.less Ver ficheiro

@@ -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";





Carregando…
Cancelar
Guardar