diff --git a/plugins/disabled-UiPassword/login.html b/plugins/disabled-UiPassword/login.html index 8880a7a1..10ed34fc 100644 --- a/plugins/disabled-UiPassword/login.html +++ b/plugins/disabled-UiPassword/login.html @@ -9,7 +9,7 @@ body { background-color: #323C4D; font-family: "Segoe UI", Helvetica, Arial; font-weight: lighter; font-size: 22px; color: #333; letter-spacing: 1px; color: white; overflow: hidden; } -.login { left: 50%; position: absolute; top: 50%; transform: translateX(-50%) translateY(-50%); width: 100%; max-width: 370px; text-align: center; } +.login { left: 50%; position: absolute; top: 50%; transform: translateX(-50%) translateY(-50%); -webkit-transform: translateX(-50%) translateY(-50%); width: 100%; max-width: 370px; text-align: center; } *:focus { outline: 0; } input[type=text], input[type=password] { @@ -66,7 +66,7 @@ label { vertical-align: -1px; color: #9EA5B3; transition: all 0.3s; }
- Log In + Log In @@ -86,10 +86,10 @@ function submit() { if (form.checkValidity()) { document.getElementById("login_button").className = "button login-anim" setTimeout(function () { - document.getElementById("login_form_submit").click() + form.submit() }, 1000) } else { - document.getElementById("login_form_submit").click() + form.submit() } return false } diff --git a/src/Config.py b/src/Config.py index 5da6c2c0..24dcbde7 100644 --- a/src/Config.py +++ b/src/Config.py @@ -8,7 +8,7 @@ class Config(object): def __init__(self, argv): self.version = "0.3.1" - self.rev = 324 + self.rev = 330 self.argv = argv self.action = None self.createParser() diff --git a/src/Debug/DebugReloader.py b/src/Debug/DebugReloader.py index 5308f3cb..1c643f6e 100644 --- a/src/Debug/DebugReloader.py +++ b/src/Debug/DebugReloader.py @@ -37,7 +37,11 @@ class DebugReloader: print "File system watcher failed: %s (on linux pyinotify not gevent compatible yet :( )" % err def changed(self, evt): - if not evt.path or "%s/" % config.data_dir in evt.path or evt.path.endswith("pyc") or time.time() - self.last_chaged < 1: + if ( + not evt.path or "%s/" % config.data_dir in evt.path or + not evt.path.endswith("py") or + time.time() - self.last_chaged < 1 + ): return False # Ignore *.pyc changes and no reload within 1 sec time.sleep(0.1) # Wait for lock release self.callback() diff --git a/src/Ui/UiRequest.py b/src/Ui/UiRequest.py index f5517ee7..7e37fcef 100644 --- a/src/Ui/UiRequest.py +++ b/src/Ui/UiRequest.py @@ -189,15 +189,16 @@ class UiRequest(object): if not site: return False - return self.renderWrapper(site, path, inner_path, title, extra_headers) + + self.sendHeader(extra_headers=extra_headers[:]) + return iter([self.renderWrapper(site, path, inner_path, title, extra_headers)]) + # Dont know why wrapping with iter necessary, but without it around 100x slower else: # Bad url return False def renderWrapper(self, site, path, inner_path, title, extra_headers): - self.sendHeader(extra_headers=extra_headers[:]) - file_inner_path = inner_path if not file_inner_path: file_inner_path = "index.html" # If inner path defaults to index.html @@ -236,7 +237,7 @@ class UiRequest(object): if content.get("viewport"): meta_tags += '' % cgi.escape(content["viewport"], True) - yield self.render( + return self.render( "src/Ui/template/wrapper.html", server_url=server_url, inner_path=inner_path, @@ -326,14 +327,15 @@ class UiRequest(object): return self.error400() # Stream a file to client - def actionFile(self, file_path, block_size=64 * 1024): + def actionFile(self, file_path, block_size=64 * 1024, send_header=True): if os.path.isfile(file_path): # Try to figure out content type by extension content_type = self.getContentType(file_path) # TODO: Dont allow external access: extra_headers= # [("Content-Security-Policy", "default-src 'unsafe-inline' data: http://localhost:43110 ws://localhost:43110")] - self.sendHeader(content_type=content_type) + if send_header: + self.sendHeader(content_type=content_type) if self.env["REQUEST_METHOD"] != "OPTIONS": file = open(file_path, "rb") while 1: diff --git a/src/Ui/media/Sidebar.coffee b/src/Ui/media/Fixbutton.coffee similarity index 64% rename from src/Ui/media/Sidebar.coffee rename to src/Ui/media/Fixbutton.coffee index fceff729..1eb4f2e7 100644 --- a/src/Ui/media/Sidebar.coffee +++ b/src/Ui/media/Fixbutton.coffee @@ -1,33 +1,32 @@ -class Sidebar +class Fixbutton constructor: -> - @initFixbutton() - - - initFixbutton: -> - $(".fixbutton-bg").on "mouseover", -> - $(@).stop().animate({"scale": 0.7}, 800, "easeOutElastic") + @dragging = false + $(".fixbutton-bg").on "mouseover", => + $(".fixbutton-bg").stop().animate({"scale": 0.7}, 800, "easeOutElastic") $(".fixbutton-burger").stop().animate({"opacity": 1.5, "left": 0}, 800, "easeOutElastic") $(".fixbutton-text").stop().animate({"opacity": 0, "left": 20}, 300, "easeOutCubic") - $(".fixbutton-bg").on "mouseout", -> - $(@).stop().animate({"scale": 0.6}, 300, "easeOutCubic") + $(".fixbutton-bg").on "mouseout", => + if $(".fixbutton").hasClass("dragging") + return true + $(".fixbutton-bg").stop().animate({"scale": 0.6}, 300, "easeOutCubic") $(".fixbutton-burger").stop().animate({"opacity": 0, "left": -20}, 300, "easeOutCubic") $(".fixbutton-text").stop().animate({"opacity": 1, "left": 0}, 300, "easeOutBack") - + ###$(".fixbutton-bg").on "click", -> return false ### - $(".fixbutton-bg").on "mousedown", -> + $(".fixbutton-bg").on "mousedown", => # $(".fixbutton-burger").stop().animate({"scale": 0.7, "left": 0}, 300, "easeOutCubic") #$("#inner-iframe").toggleClass("back") #$(".wrapper-iframe").stop().animate({"scale": 0.9}, 600, "easeOutCubic") #$("body").addClass("back") - $(".fixbutton-bg").on "mouseup", -> + $(".fixbutton-bg").on "mouseup", => # $(".fixbutton-burger").stop().animate({"scale": 1, "left": 0}, 600, "easeOutElastic") - -window.Sidebar = Sidebar + +window.Fixbutton = Fixbutton diff --git a/src/Ui/media/Wrapper.coffee b/src/Ui/media/Wrapper.coffee index deb7a823..b79d1c34 100644 --- a/src/Ui/media/Wrapper.coffee +++ b/src/Ui/media/Wrapper.coffee @@ -4,7 +4,7 @@ class Wrapper @loading = new Loading() @notifications = new Notifications($(".notifications")) - @sidebar = new Sidebar() + @fixbutton = new Fixbutton() window.addEventListener("message", @onMessageInner, false) @inner = document.getElementById("inner-iframe").contentWindow @@ -146,10 +146,10 @@ class Wrapper message.params = @toHtmlSafe(message.params) # Escape html if message.params[1] then type = message.params[1] else type = "text" caption = "OK" - + @displayPrompt message.params[0], type, caption, (res) => @sendInner {"cmd": "response", "to": message.id, "result": res} # Response to confirm - + actionSetViewport: (message) -> @@ -171,7 +171,7 @@ class Wrapper actionGetLocalStorage: (message) -> - $.when(@event_site_info).done => + $.when(@event_site_info).done => data = localStorage.getItem "site.#{@site_info.address}" if data then data = JSON.parse(data) @sendInner {"cmd": "response", "to": message.id, "result": data} @@ -197,7 +197,7 @@ class Wrapper if not @site_info then @reloadSiteInfo() ), 2000 - if @ws_error + if @ws_error @notifications.add("connection", "done", "Connection with UiServer Websocket recovered.", 6000) @ws_error = null @@ -236,7 +236,7 @@ class Wrapper params = {"file_status": window.file_inner_path} # Query the current required file status else params = {} - + @ws.cmd "siteInfo", params, (site_info) => @address = site_info.address @setSiteInfo site_info @@ -272,7 +272,7 @@ class Wrapper if not $(".loadingscreen").length # Loading screen already removed (loaded +2sec) @notifications.add("modified", "info", "New version of this page has just released.
Reload to see the modified content.") # File failed downloading - else if site_info.event[0] == "file_failed" + else if site_info.event[0] == "file_failed" @site_error = site_info.event[1] if site_info.settings.size > site_info.size_limit*1024*1024 # Site size too large and not displaying it yet @loading.showTooLarge(site_info) @@ -280,7 +280,7 @@ class Wrapper else @loading.printLine("#{site_info.event[1]} download failed", "error") # New peers found - else if site_info.event[0] == "peers_added" + else if site_info.event[0] == "peers_added" @loading.printLine("Peers found: #{site_info.peers}") if @loading.screen_visible and not @site_info # First site info display current peers diff --git a/src/Ui/media/Wrapper.css b/src/Ui/media/Wrapper.css index 4b2cbc42..a3e66a4f 100644 --- a/src/Ui/media/Wrapper.css +++ b/src/Ui/media/Wrapper.css @@ -4,7 +4,7 @@ a { color: black } .template { display: none !important } -#inner-iframe { width: 100%; height: 100%; position: absolute; border: 0px; transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out } +#inner-iframe { width: 100%; height: 100%; position: absolute; border: 0px } /*; transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out*/ #inner-iframe.back { transform: scale(0.95) translate(-300px, 0px); opacity: 0.4 } .button { padding: 5px 10px; margin-left: 10px; background-color: #FFF85F; border-bottom: 2px solid #CDBD1E; border-radius: 2px; text-decoration: none; transition: all 0.5s; } @@ -17,16 +17,16 @@ a { color: black } /* Fixbutton */ -.fixbutton { +.fixbutton { position: absolute; right: 35px; top: 15px; width: 40px; z-index: 999; - text-align: center; color: white; font-family: Consolas; font-size: 25px; line-height: 40px; + text-align: center; color: white; font-family: Consolas, Menlo, monospace; font-size: 25px; } -.fixbutton-bg { +.fixbutton-bg { border-radius: 80px; background-color: rgba(180, 180, 180, 0.5); cursor: pointer; display: block; width: 80px; height: 80px; transition: background-color 0.2s, box-shadow 0.5s; transform: scale(0.6); margin-left: -20px; margin-top: -20px; /* 2x size to prevent blur on anim */ /*box-shadow: inset 105px 260px 0px -200px rgba(0,0,0,0.1);*/ /* box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1); */ } -.fixbutton-text { pointer-events: none; position: absolute; z-index: 999; width: 40px; backface-visibility: hidden; perspective: 1000px } +.fixbutton-text { pointer-events: none; position: absolute; z-index: 999; width: 40px; backface-visibility: hidden; perspective: 1000px; line-height: 0px; padding-top: 20px } .fixbutton-burger { pointer-events: none; position: absolute; z-index: 999; width: 40px; opacity: 0; left: -20px; font-size: 48px; line-height: 32px } .fixbutton-bg:hover { background-color: #AF3BFF } .fixbutton-bg:active { background-color: #9E2FEA; top: 1px; transition: none } @@ -35,16 +35,16 @@ a { color: black } /* Notification */ .notifications { position: absolute; top: 0px; right: 80px; display: inline-block; z-index: 999; white-space: nowrap } -.notification { +.notification { position: relative; float: right; clear: both; margin: 10px; box-sizing: border-box; overflow: hidden; backface-visibility: hidden; perspective: 1000px; padding-bottom: 5px; - color: #4F4F4F; font-family: 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; /*border: 1px solid rgba(210, 206, 205, 0.2)*/ + color: #4F4F4F; font-family: 'Lucida Grande', 'Segoe UI', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; /*border: 1px solid rgba(210, 206, 205, 0.2)*/ } -.notification-icon { +.notification-icon { display: block; width: 50px; height: 50px; position: absolute; float: left; z-index: 1; text-align: center; background-color: #e74c3c; line-height: 45px; vertical-align: bottom; font-size: 40px; color: white; } -.notification .body { - max-width: 420px; padding-left: 14px; padding-right: 60px; height: 40px; vertical-align: middle; display: table; +.notification .body { + max-width: 560px; padding-left: 14px; padding-right: 60px; height: 40px; vertical-align: middle; display: table; background-color: white; left: 50px; top: 0px; position: relative; padding-top: 5px; padding-bottom: 5px; } .notification.long .body { padding-top: 10px; padding-bottom: 10px } @@ -60,7 +60,7 @@ a { color: black } /* Notification select */ .notification .select { - display: block; padding: 10px; margin-right: -32px; text-decoration: none; border-left: 3px solid #EEE; + display: block; padding: 10px; margin-right: -32px; text-decoration: none; border-left: 3px solid #EEE; margin-top: 1px; transition: all 0.3s; color: #666 } .notification .select:hover, .notification .select.active { background-color: #007AFF; border-left: 3px solid #5D68FF; color: white; transition: none } @@ -90,9 +90,9 @@ a { color: black } /* Console */ .console { line-height: 24px; font-family: monospace; font-size: 14px; color: #ADADAD; text-transform: uppercase; opacity: 0; transform: translateY(-20px); } .console-line:last-child { color: #6C6767 } -.console .cursor { - background-color: #999; color: #999; animation: pulse 1.5s infinite ease-in-out; margin-right: -9px; - display: inline-block; width: 9px; height: 19px; vertical-align: -4px; +.console .cursor { + background-color: #999; color: #999; animation: pulse 1.5s infinite ease-in-out; margin-right: -9px; + display: inline-block; width: 9px; height: 19px; vertical-align: -4px; } .console .console-error { color: #e74c3c; font-weight: bold; animation: pulse 2s infinite linear } .console .console-warning { color: #8e44ad; } @@ -120,14 +120,14 @@ a { color: black } .progressbar { background: #26C281; position: fixed; z-index: 100; top: 0; left: 0; width: 0%; height: 2px; transition: width 0.5s, opacity 1s; display: none } -.progressbar .peg { +.progressbar .peg { display: block; position: absolute; right: 0px; width: 100px; height: 100%; box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d; opacity: 1.0; transform: rotate(3deg) translate(0px, -4px); } /* Icons */ .icon-profile { font-size: 6px; top: 0em; border-radius: 0.7em 0.7em 0 0; background: #FFFFFF; width: 1.5em; height: 0.7em; position: relative; display: inline-block; margin-right: 4px } -.icon-profile::before { position: absolute; content: ""; top: -1em; left: 0.38em; width: 0.8em; height: 0.85em; border-radius: 50%; background: #FFFFFF } +.icon-profile::before { position: absolute; content: ""; top: -1em; left: 0.38em; width: 0.8em; height: 0.85em; border-radius: 50%; background: #FFFFFF } /* Animations */ diff --git a/src/Ui/media/all.css b/src/Ui/media/all.css index be2564b5..81e8a74f 100644 --- a/src/Ui/media/all.css +++ b/src/Ui/media/all.css @@ -9,7 +9,7 @@ a { color: black } .template { display: none !important } -#inner-iframe { width: 100%; height: 100%; position: absolute; border: 0px; -webkit-transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out ; -moz-transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out ; -o-transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out ; -ms-transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out ; transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out } +#inner-iframe { width: 100%; height: 100%; position: absolute; border: 0px } /*; transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.8s ease-in-out*/ #inner-iframe.back { -webkit-transform: scale(0.95) translate(-300px, 0px); -moz-transform: scale(0.95) translate(-300px, 0px); -o-transform: scale(0.95) translate(-300px, 0px); -ms-transform: scale(0.95) translate(-300px, 0px); transform: scale(0.95) translate(-300px, 0px) ; opacity: 0.4 } .button { padding: 5px 10px; margin-left: 10px; background-color: #FFF85F; border-bottom: 2px solid #CDBD1E; -webkit-border-radius: 2px; -moz-border-radius: 2px; -o-border-radius: 2px; -ms-border-radius: 2px; border-radius: 2px ; text-decoration: none; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -o-transition: all 0.5s; -ms-transition: all 0.5s; transition: all 0.5s ; } @@ -22,16 +22,16 @@ a { color: black } /* Fixbutton */ -.fixbutton { +.fixbutton { position: absolute; right: 35px; top: 15px; width: 40px; z-index: 999; - text-align: center; color: white; font-family: Consolas; font-size: 25px; line-height: 40px; + text-align: center; color: white; font-family: Consolas, Menlo, monospace; font-size: 25px; } -.fixbutton-bg { +.fixbutton-bg { -webkit-border-radius: 80px; -moz-border-radius: 80px; -o-border-radius: 80px; -ms-border-radius: 80px; border-radius: 80px ; background-color: rgba(180, 180, 180, 0.5); cursor: pointer; display: block; width: 80px; height: 80px; -webkit-transition: background-color 0.2s, box-shadow 0.5s; -moz-transition: background-color 0.2s, box-shadow 0.5s; -o-transition: background-color 0.2s, box-shadow 0.5s; -ms-transition: background-color 0.2s, box-shadow 0.5s; transition: background-color 0.2s, box-shadow 0.5s ; -webkit-transform: scale(0.6); -moz-transform: scale(0.6); -o-transform: scale(0.6); -ms-transform: scale(0.6); transform: scale(0.6) ; margin-left: -20px; margin-top: -20px; /* 2x size to prevent blur on anim */ /*box-shadow: inset 105px 260px 0px -200px rgba(0,0,0,0.1);*/ /* -webkit-box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1); -moz-box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1); -o-box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1); -ms-box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1); box-shadow: inset -75px 183px 0px -200px rgba(0,0,0,0.1) ; */ } -.fixbutton-text { pointer-events: none; position: absolute; z-index: 999; width: 40px; backface-visibility: hidden; -webkit-perspective: 1000px ; -moz-perspective: 1000px ; -o-perspective: 1000px ; -ms-perspective: 1000px ; perspective: 1000px } +.fixbutton-text { pointer-events: none; position: absolute; z-index: 999; width: 40px; backface-visibility: hidden; -webkit-perspective: 1000px; -moz-perspective: 1000px; -o-perspective: 1000px; -ms-perspective: 1000px; perspective: 1000px ; line-height: 0px; padding-top: 20px } .fixbutton-burger { pointer-events: none; position: absolute; z-index: 999; width: 40px; opacity: 0; left: -20px; font-size: 48px; line-height: 32px } .fixbutton-bg:hover { background-color: #AF3BFF } .fixbutton-bg:active { background-color: #9E2FEA; top: 1px; -webkit-transition: none ; -moz-transition: none ; -o-transition: none ; -ms-transition: none ; transition: none } @@ -40,16 +40,16 @@ a { color: black } /* Notification */ .notifications { position: absolute; top: 0px; right: 80px; display: inline-block; z-index: 999; white-space: nowrap } -.notification { +.notification { position: relative; float: right; clear: both; margin: 10px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box ; overflow: hidden; backface-visibility: hidden; -webkit-perspective: 1000px; -moz-perspective: 1000px; -o-perspective: 1000px; -ms-perspective: 1000px; perspective: 1000px ; padding-bottom: 5px; - color: #4F4F4F; font-family: 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; /*border: 1px solid rgba(210, 206, 205, 0.2)*/ + color: #4F4F4F; font-family: 'Lucida Grande', 'Segoe UI', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; /*border: 1px solid rgba(210, 206, 205, 0.2)*/ } -.notification-icon { +.notification-icon { display: block; width: 50px; height: 50px; position: absolute; float: left; z-index: 1; text-align: center; background-color: #e74c3c; line-height: 45px; vertical-align: bottom; font-size: 40px; color: white; } -.notification .body { - max-width: 420px; padding-left: 14px; padding-right: 60px; height: 40px; vertical-align: middle; display: table; +.notification .body { + max-width: 560px; padding-left: 14px; padding-right: 60px; height: 40px; vertical-align: middle; display: table; background-color: white; left: 50px; top: 0px; position: relative; padding-top: 5px; padding-bottom: 5px; } .notification.long .body { padding-top: 10px; padding-bottom: 10px } @@ -65,7 +65,7 @@ a { color: black } /* Notification select */ .notification .select { - display: block; padding: 10px; margin-right: -32px; text-decoration: none; border-left: 3px solid #EEE; + display: block; padding: 10px; margin-right: -32px; text-decoration: none; border-left: 3px solid #EEE; margin-top: 1px; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; -ms-transition: all 0.3s; transition: all 0.3s ; color: #666 } .notification .select:hover, .notification .select.active { background-color: #007AFF; border-left: 3px solid #5D68FF; color: white; -webkit-transition: none ; -moz-transition: none ; -o-transition: none ; -ms-transition: none ; transition: none } @@ -95,9 +95,9 @@ a { color: black } /* Console */ .console { line-height: 24px; font-family: monospace; font-size: 14px; color: #ADADAD; text-transform: uppercase; opacity: 0; -webkit-transform: translateY(-20px); -moz-transform: translateY(-20px); -o-transform: translateY(-20px); -ms-transform: translateY(-20px); transform: translateY(-20px) ; } .console-line:last-child { color: #6C6767 } -.console .cursor { - background-color: #999; color: #999; -webkit-animation: pulse 1.5s infinite ease-in-out; -moz-animation: pulse 1.5s infinite ease-in-out; -o-animation: pulse 1.5s infinite ease-in-out; -ms-animation: pulse 1.5s infinite ease-in-out; animation: pulse 1.5s infinite ease-in-out ; margin-right: -9px; - display: inline-block; width: 9px; height: 19px; vertical-align: -4px; +.console .cursor { + background-color: #999; color: #999; -webkit-animation: pulse 1.5s infinite ease-in-out; -moz-animation: pulse 1.5s infinite ease-in-out; -o-animation: pulse 1.5s infinite ease-in-out; -ms-animation: pulse 1.5s infinite ease-in-out; animation: pulse 1.5s infinite ease-in-out ; margin-right: -9px; + display: inline-block; width: 9px; height: 19px; vertical-align: -4px; } .console .console-error { color: #e74c3c; font-weight: bold; -webkit-animation: pulse 2s infinite linear ; -moz-animation: pulse 2s infinite linear ; -o-animation: pulse 2s infinite linear ; -ms-animation: pulse 2s infinite linear ; animation: pulse 2s infinite linear } .console .console-warning { color: #8e44ad; } @@ -125,14 +125,14 @@ a { color: black } .progressbar { background: #26C281; position: fixed; z-index: 100; top: 0; left: 0; width: 0%; height: 2px; -webkit-transition: width 0.5s, opacity 1s; -moz-transition: width 0.5s, opacity 1s; -o-transition: width 0.5s, opacity 1s; -ms-transition: width 0.5s, opacity 1s; transition: width 0.5s, opacity 1s ; display: none } -.progressbar .peg { +.progressbar .peg { display: block; position: absolute; right: 0px; width: 100px; height: 100%; -webkit-box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d; -moz-box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d; -o-box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d; -ms-box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d; box-shadow: 0 0 10px #AF3BFF, 0 0 5px #29d ; opacity: 1.0; -webkit-transform: rotate(3deg) translate(0px, -4px); -moz-transform: rotate(3deg) translate(0px, -4px); -o-transform: rotate(3deg) translate(0px, -4px); -ms-transform: rotate(3deg) translate(0px, -4px); transform: rotate(3deg) translate(0px, -4px) ; } /* Icons */ .icon-profile { font-size: 6px; top: 0em; -webkit-border-radius: 0.7em 0.7em 0 0; -moz-border-radius: 0.7em 0.7em 0 0; -o-border-radius: 0.7em 0.7em 0 0; -ms-border-radius: 0.7em 0.7em 0 0; border-radius: 0.7em 0.7em 0 0 ; background: #FFFFFF; width: 1.5em; height: 0.7em; position: relative; display: inline-block; margin-right: 4px } -.icon-profile::before { position: absolute; content: ""; top: -1em; left: 0.38em; width: 0.8em; height: 0.85em; -webkit-border-radius: 50%; -moz-border-radius: 50%; -o-border-radius: 50%; -ms-border-radius: 50%; border-radius: 50% ; background: #FFFFFF } +.icon-profile::before { position: absolute; content: ""; top: -1em; left: 0.38em; width: 0.8em; height: 0.85em; -webkit-border-radius: 50%; -moz-border-radius: 50%; -o-border-radius: 50%; -ms-border-radius: 50%; border-radius: 50% ; background: #FFFFFF } /* Animations */ diff --git a/src/Ui/media/all.js b/src/Ui/media/all.js index 0c5693fe..9e99b16e 100644 --- a/src/Ui/media/all.js +++ b/src/Ui/media/all.js @@ -154,7 +154,7 @@ jQuery.cssHooks['scale'] = { get: function(elem, computed, extra) { - var match = window.getComputedStyle(elem).transform.match("[0-9\.]+") + var match = window.getComputedStyle(elem)[transform_property].match("[0-9\.]+") if (match) { var scale = parseFloat(match[0]) return scale @@ -164,14 +164,14 @@ jQuery.cssHooks['scale'] = { }, set: function(elem, val) { //var transforms = $(elem).css("transform").match(/[0-9\.]+/g) - var transforms = window.getComputedStyle(elem).transform.match(/[0-9\.]+/g) + var transforms = window.getComputedStyle(elem)[transform_property].match(/[0-9\.]+/g) if (transforms) { transforms[0] = val transforms[3] = val //$(elem).css("transform", 'matrix('+transforms.join(", ")+")") - elem.style.transform = 'matrix('+transforms.join(", ")+')' + elem.style[transform_property] = 'matrix('+transforms.join(", ")+')' } else { - elem.style.transform = "scale("+val+")" + elem.style[transform_property] = "scale("+val+")" } } } @@ -181,6 +181,14 @@ jQuery.fx.step.scale = function(fx) { }; +if (window.getComputedStyle(document.body).transform) { + transform_property = "transform" +} else { + transform_property = "webkitTransform" +} + + + /* ---- src/Ui/media/lib/jquery.csslater.coffee ---- */ @@ -458,6 +466,69 @@ jQuery.extend( jQuery.easing, */ +/* ---- src/Ui/media/Fixbutton.coffee ---- */ + + +(function() { + var Fixbutton; + + Fixbutton = (function() { + function Fixbutton() { + this.dragging = false; + $(".fixbutton-bg").on("mouseover", (function(_this) { + return function() { + $(".fixbutton-bg").stop().animate({ + "scale": 0.7 + }, 800, "easeOutElastic"); + $(".fixbutton-burger").stop().animate({ + "opacity": 1.5, + "left": 0 + }, 800, "easeOutElastic"); + return $(".fixbutton-text").stop().animate({ + "opacity": 0, + "left": 20 + }, 300, "easeOutCubic"); + }; + })(this)); + $(".fixbutton-bg").on("mouseout", (function(_this) { + return function() { + if ($(".fixbutton").hasClass("dragging")) { + return true; + } + $(".fixbutton-bg").stop().animate({ + "scale": 0.6 + }, 300, "easeOutCubic"); + $(".fixbutton-burger").stop().animate({ + "opacity": 0, + "left": -20 + }, 300, "easeOutCubic"); + return $(".fixbutton-text").stop().animate({ + "opacity": 1, + "left": 0 + }, 300, "easeOutBack"); + }; + })(this)); + + /*$(".fixbutton-bg").on "click", -> + return false + */ + $(".fixbutton-bg").on("mousedown", (function(_this) { + return function() {}; + })(this)); + $(".fixbutton-bg").on("mouseup", (function(_this) { + return function() {}; + })(this)); + } + + return Fixbutton; + + })(); + + window.Fixbutton = Fixbutton; + +}).call(this); + + /* ---- src/Ui/media/Loading.coffee ---- */ @@ -681,61 +752,6 @@ jQuery.extend( jQuery.easing, }).call(this); -/* ---- src/Ui/media/Sidebar.coffee ---- */ - - -(function() { - var Sidebar; - - Sidebar = (function() { - function Sidebar() { - this.initFixbutton(); - } - - Sidebar.prototype.initFixbutton = function() { - $(".fixbutton-bg").on("mouseover", function() { - $(this).stop().animate({ - "scale": 0.7 - }, 800, "easeOutElastic"); - $(".fixbutton-burger").stop().animate({ - "opacity": 1.5, - "left": 0 - }, 800, "easeOutElastic"); - return $(".fixbutton-text").stop().animate({ - "opacity": 0, - "left": 20 - }, 300, "easeOutCubic"); - }); - $(".fixbutton-bg").on("mouseout", function() { - $(this).stop().animate({ - "scale": 0.6 - }, 300, "easeOutCubic"); - $(".fixbutton-burger").stop().animate({ - "opacity": 0, - "left": -20 - }, 300, "easeOutCubic"); - return $(".fixbutton-text").stop().animate({ - "opacity": 1, - "left": 0 - }, 300, "easeOutBack"); - }); - - /*$(".fixbutton-bg").on "click", -> - return false - */ - $(".fixbutton-bg").on("mousedown", function() {}); - return $(".fixbutton-bg").on("mouseup", function() {}); - }; - - return Sidebar; - - })(); - - window.Sidebar = Sidebar; - -}).call(this); - - /* ---- src/Ui/media/Wrapper.coffee ---- */ @@ -756,7 +772,7 @@ jQuery.extend( jQuery.easing, this.log("Created!"); this.loading = new Loading(); this.notifications = new Notifications($(".notifications")); - this.sidebar = new Sidebar(); + this.fixbutton = new Fixbutton(); window.addEventListener("message", this.onMessageInner, false); this.inner = document.getElementById("inner-iframe").contentWindow; this.ws = new ZeroWebsocket(ws_url); @@ -1218,4 +1234,4 @@ jQuery.extend( jQuery.easing, window.wrapper = new Wrapper(ws_url); -}).call(this); +}).call(this); \ No newline at end of file diff --git a/src/Ui/media/lib/jquery.cssanim.js b/src/Ui/media/lib/jquery.cssanim.js index 6b0aaf1b..be93a386 100644 --- a/src/Ui/media/lib/jquery.cssanim.js +++ b/src/Ui/media/lib/jquery.cssanim.js @@ -1,6 +1,6 @@ jQuery.cssHooks['scale'] = { get: function(elem, computed, extra) { - var match = window.getComputedStyle(elem).transform.match("[0-9\.]+") + var match = window.getComputedStyle(elem)[transform_property].match("[0-9\.]+") if (match) { var scale = parseFloat(match[0]) return scale @@ -10,18 +10,25 @@ jQuery.cssHooks['scale'] = { }, set: function(elem, val) { //var transforms = $(elem).css("transform").match(/[0-9\.]+/g) - var transforms = window.getComputedStyle(elem).transform.match(/[0-9\.]+/g) + var transforms = window.getComputedStyle(elem)[transform_property].match(/[0-9\.]+/g) if (transforms) { transforms[0] = val transforms[3] = val //$(elem).css("transform", 'matrix('+transforms.join(", ")+")") - elem.style.transform = 'matrix('+transforms.join(", ")+')' + elem.style[transform_property] = 'matrix('+transforms.join(", ")+')' } else { - elem.style.transform = "scale("+val+")" + elem.style[transform_property] = "scale("+val+")" } } } jQuery.fx.step.scale = function(fx) { jQuery.cssHooks['scale'].set(fx.elem, fx.now) -}; \ No newline at end of file +}; + + +if (window.getComputedStyle(document.body).transform) { + transform_property = "transform" +} else { + transform_property = "webkitTransform" +} diff --git a/src/Worker/Worker.py b/src/Worker/Worker.py index 09398e22..963aed54 100644 --- a/src/Worker/Worker.py +++ b/src/Worker/Worker.py @@ -47,9 +47,11 @@ class Worker(object): except Exception, err: self.manager.log.debug("%s: getFile error: %s" % (self.key, err)) buff = None - if self.running is False or task["done"] is True: # Worker no longer needed or got killed + if self.running is False: # Worker no longer needed or got killed self.manager.log.debug("%s: No longer needed, returning: %s" % (self.key, task["inner_path"])) break + if task["done"] is True: # Task done, try to find new one + continue if buff: # Download ok correct = site.content_manager.verifyFile(task["inner_path"], buff) else: # Download error diff --git a/src/lib/cssvendor/cssvendor.py b/src/lib/cssvendor/cssvendor.py index f7cb1ba5..49da87fb 100644 --- a/src/lib/cssvendor/cssvendor.py +++ b/src/lib/cssvendor/cssvendor.py @@ -7,7 +7,7 @@ def prefix(content): content, flags=re.DOTALL ) content = re.sub( - '([^-\*])(border-radius|box-shadow|transition|animation|box-sizing|' + + '([^-\*])(border-radius|box-shadow|appearance|transition|animation|box-sizing|' + 'transform|filter|perspective|animation-[a-z-]+): (.*?)([;}])', '\\1-webkit-\\2: \\3; -moz-\\2: \\3; -o-\\2: \\3; -ms-\\2: \\3; \\2: \\3 \\4', content )