departr 0.4 → 0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/README.md +8 -2
- data/bin/departr-images +78 -0
- data/chrome/logo.png +0 -0
- data/chrome/manifest.json +17 -0
- data/chrome/newtab.html +85 -0
- data/chrome/newtab.js +19 -0
- data/departr.gemspec +9 -8
- data/lib/departr/commands.rb +1 -9
- data/lib/departr/config.rb +1 -7
- data/lib/departr/server.rb +48 -42
- data/lib/departr/settings.rb +7 -5
- data/public/javascripts/2_autocomplete.js +6 -2
- data/public/javascripts/{5_appliction.js → 4_appliction.js} +0 -24
- data/public/javascripts/{6_command.js → 5_command.js} +26 -9
- data/public/javascripts/9_run.js +11 -0
- data/screenshot.jpg +0 -0
- data/views/help.haml +9 -6
- data/views/index.haml +3 -54
- data/views/layout.haml +1 -0
- data/views/settings.haml +0 -32
- data/views/style.sass +74 -147
- metadata +58 -51
- data/Gemfile.lock +0 -30
- data/public/javascripts/4_coolclock.js +0 -325
- data/screenshot.png +0 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 40696450d3edaf3459d98c4b571d36420337fc50
         | 
| 4 | 
            +
              data.tar.gz: ea3887c825338d06d7213b2ff8aefdcbaec8d5d7
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 63a264efb01f7aa9e446433f47a04385a4f434dc6d94e04228bc655970d3cd68adfdd2d1fa8ead0fbc454924a9c3e4bb0c45af852d18d355e0483854803bb30d
         | 
| 7 | 
            +
              data.tar.gz: e8b0bb98b8aceaaff2e52747391d37d6560249f8cb32c46bf4fec59d03478748649e3cfb1a37a2ba78edb899d93479bad258a2fe3e3bc825476eb09c4f2fb147
         | 
    
        data/.gitignore
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -7,12 +7,18 @@ Departr is a smart and fast startpage to help you reach other web sites. | |
| 7 7 | 
             
            It's up and running here http://departr.solt.biz/
         | 
| 8 8 |  | 
| 9 9 | 
             
            Anyway, it's look like that :
         | 
| 10 | 
            -
            
         | 
| 11 11 |  | 
| 12 12 | 
             
            # How to install
         | 
| 13 13 |  | 
| 14 14 | 
             
                gem install departr
         | 
| 15 15 |  | 
| 16 | 
            +
            Then, run the departr-images to fetch backgrounds (you can run this task every day):
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                departr-images 500PX_CONSUMER_KEY 500PX_CONSUMER_SECRET 500PX_USERNAME 500PX_PASSWORD
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            You need to go there to regirster an application http://500px.com/settings/applications.
         | 
| 21 | 
            +
             | 
| 16 22 | 
             
            All you need now it to open your favorite code editor and create a file `config.ru` that looks like https://github.com/florentsolt/departr/blob/master/config.ru.example
         | 
| 17 23 | 
             
            Do not forget to create a RPX account on http://www.janrain.com/ and fill the config under the `rpx` section with your account infos.
         | 
| 18 24 |  | 
| @@ -22,4 +28,4 @@ Then run it : | |
| 22 28 |  | 
| 23 29 | 
             
            Or :
         | 
| 24 30 |  | 
| 25 | 
            -
                rackup
         | 
| 31 | 
            +
                rackup
         | 
    
        data/bin/departr-images
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            require 'oauth'
         | 
| 3 | 
            +
            require 'json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            if ARGV.size != 4
         | 
| 6 | 
            +
                puts "Usage: #{$0} CONSUMER_KEY CONSUMER_SECRET USERNAME PASSWORD"
         | 
| 7 | 
            +
                exit
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            CONSUMER_KEY = ARGV.shift
         | 
| 11 | 
            +
            CONSUMER_SECRET = ARGV.shift
         | 
| 12 | 
            +
            BASE_URL = 'https://api.500px.com'
         | 
| 13 | 
            +
            USERNAME = ARGV.shift
         | 
| 14 | 
            +
            PASSWORD = ARGV.shift
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, {
         | 
| 18 | 
            +
                :site               => BASE_URL,
         | 
| 19 | 
            +
                :request_token_path => "/v1/oauth/request_token",
         | 
| 20 | 
            +
                :access_token_path  => "/v1/oauth/access_token",
         | 
| 21 | 
            +
                :authorize_path     => "/v1/oauth/authorize"})
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            request_token = consumer.get_request_token()
         | 
| 24 | 
            +
            access_token = consumer.get_access_token(request_token, {}, {
         | 
| 25 | 
            +
                :x_auth_mode => 'client_auth',
         | 
| 26 | 
            +
                :x_auth_username => USERNAME,
         | 
| 27 | 
            +
                :x_auth_password => PASSWORD})
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            photos = []
         | 
| 30 | 
            +
            1.upto(4) do |page|
         | 
| 31 | 
            +
                data = JSON.parse(access_token.get("/v1/photos?rpp=100&feature=editors&image_size=2048&only=Landscapes&page=#{page}").body)
         | 
| 32 | 
            +
                photos += data['photos']
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            dir = File.join(__dir__, '..', 'public', 'images')
         | 
| 36 | 
            +
            Dir.mkdir(dir) if not File.exists? dir
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            photos.delete_if do |photo|
         | 
| 39 | 
            +
                photo['width'].to_i < 1200
         | 
| 40 | 
            +
            end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            photos.each do |photo|
         | 
| 43 | 
            +
                file = File.join(dir, "#{photo['id']}.jpg")
         | 
| 44 | 
            +
                if not File.exists? file
         | 
| 45 | 
            +
                  puts "Download #{file}"
         | 
| 46 | 
            +
                  system("curl -s '#{photo['image_url']}' -o #{file}")
         | 
| 47 | 
            +
                  system("jpegtran -optimize -copy none -progressive -outfile #{file} #{file}")
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
            end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            photos.delete_if do |photo|
         | 
| 52 | 
            +
              file = File.join(dir, "#{photo['id']}.jpg")
         | 
| 53 | 
            +
              md5 = `md5sum #{file}`.strip.split(' ').first
         | 
| 54 | 
            +
              if md5 == '92ec602c88283582b9e322ba7dffccde'
         | 
| 55 | 
            +
                # If the file is "Your image is loading..."
         | 
| 56 | 
            +
                puts "Skipping #{file}"
         | 
| 57 | 
            +
                File.unlink file
         | 
| 58 | 
            +
                true
         | 
| 59 | 
            +
              else
         | 
| 60 | 
            +
                false
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            File.open(File.join(__dir__, '..', 'lib', 'images.msh'), 'w') do |fd|
         | 
| 65 | 
            +
                fd.puts Marshal.dump(photos)
         | 
| 66 | 
            +
            end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            ids = photos.map do |photo|
         | 
| 69 | 
            +
              photo['id'].to_i
         | 
| 70 | 
            +
            end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            Dir[File.join(dir, "*.jpg")].each do |file|
         | 
| 73 | 
            +
              id = File.basename(file, '.jpg').to_i
         | 
| 74 | 
            +
              if not ids.include? id
         | 
| 75 | 
            +
                puts "Remove #{file}"
         | 
| 76 | 
            +
                File.unlink(file)
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         | 
    
        data/chrome/logo.png
    ADDED
    
    | Binary file | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
                "manifest_version": 2,
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                "name": "Departr",
         | 
| 5 | 
            +
                "description": "Departr is a smart and fast startpage to help you reach other web sites..",
         | 
| 6 | 
            +
                "version": "1.3",
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                "permissions": [ "cookies", "tabs", "http://departr.solt.biz/*" ],
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                "chrome_url_overrides": {
         | 
| 11 | 
            +
                    "newtab": "newtab.html"
         | 
| 12 | 
            +
                },
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                "icons": {
         | 
| 15 | 
            +
                    "128": "logo.png"
         | 
| 16 | 
            +
                }
         | 
| 17 | 
            +
            }
         | 
    
        data/chrome/newtab.html
    ADDED
    
    | @@ -0,0 +1,85 @@ | |
| 1 | 
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
         | 
| 2 | 
            +
            <html>
         | 
| 3 | 
            +
            <head>
         | 
| 4 | 
            +
            <title>Departr</title>
         | 
| 5 | 
            +
            <link href='/favicon.ico' rel='icon' type='image/png' />
         | 
| 6 | 
            +
            <meta content='text/html; charset=utf-8' http-equiv='content-type' />
         | 
| 7 | 
            +
            <script src='/newtab.js' type='text/javascript'></script>
         | 
| 8 | 
            +
            <style>
         | 
| 9 | 
            +
            * {
         | 
| 10 | 
            +
              font-family: "trebuchet MS", verdana, sans-serif;
         | 
| 11 | 
            +
            }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            body {
         | 
| 14 | 
            +
              padding: 0px;
         | 
| 15 | 
            +
              margin: 0px;
         | 
| 16 | 
            +
              height: 100%;
         | 
| 17 | 
            +
              overflow: hidden;
         | 
| 18 | 
            +
              background-color: rgba(238, 238, 238, 0.8);
         | 
| 19 | 
            +
            }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            html {
         | 
| 22 | 
            +
              height: 100%;
         | 
| 23 | 
            +
              overflow: hidden;
         | 
| 24 | 
            +
            }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            a, a:hover, a:link, a:visited {
         | 
| 27 | 
            +
              color: inherit;
         | 
| 28 | 
            +
            }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            #background {
         | 
| 31 | 
            +
              width: 100%;
         | 
| 32 | 
            +
              height: 100%;
         | 
| 33 | 
            +
              position: absolute;
         | 
| 34 | 
            +
              top: 0px;
         | 
| 35 | 
            +
              left: 0px;
         | 
| 36 | 
            +
              color: transparent;
         | 
| 37 | 
            +
              background-size: cover;
         | 
| 38 | 
            +
              background-position: 50% 50%;
         | 
| 39 | 
            +
              background-repeat: none;
         | 
| 40 | 
            +
              background-image: url(http://departr.solt.biz/background.jpg);
         | 
| 41 | 
            +
              z-index: -1;
         | 
| 42 | 
            +
            }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            #background:after {
         | 
| 45 | 
            +
              width: 100%;
         | 
| 46 | 
            +
              position: absolute;
         | 
| 47 | 
            +
              font-size: 14px;
         | 
| 48 | 
            +
              top: 0px;
         | 
| 49 | 
            +
              bottom: 2em;
         | 
| 50 | 
            +
              left: 0px;
         | 
| 51 | 
            +
              content: "";
         | 
| 52 | 
            +
              background-image: url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiYGBgePz//38GRhABAgABBgBFTAbfCBNE2AAAAABJRU5ErkJggg==");
         | 
| 53 | 
            +
            }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            #credits {
         | 
| 56 | 
            +
              background-color: rgba(255, 255, 255, 0.4);
         | 
| 57 | 
            +
              color: black;
         | 
| 58 | 
            +
              opacity: 0.8;
         | 
| 59 | 
            +
              filter: alpha(opacity=80);
         | 
| 60 | 
            +
              font-size: 14px;
         | 
| 61 | 
            +
              height: 2em;
         | 
| 62 | 
            +
              line-height: 2em;
         | 
| 63 | 
            +
              position: absolute;
         | 
| 64 | 
            +
              left: 0px;
         | 
| 65 | 
            +
              bottom: 0px;
         | 
| 66 | 
            +
              z-index: 0;
         | 
| 67 | 
            +
              width: 100%;
         | 
| 68 | 
            +
              text-align: right;
         | 
| 69 | 
            +
            }
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            #credits a {
         | 
| 72 | 
            +
              text-decoration: none;
         | 
| 73 | 
            +
              padding-right: 1em;
         | 
| 74 | 
            +
            }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            </style>
         | 
| 77 | 
            +
            </head>
         | 
| 78 | 
            +
            <body>
         | 
| 79 | 
            +
            <div id='background'></div>
         | 
| 80 | 
            +
            <div id='credits'>
         | 
| 81 | 
            +
                <a id='credits_link' href=""></a>
         | 
| 82 | 
            +
            </div>
         | 
| 83 | 
            +
            </body>
         | 
| 84 | 
            +
            </html>
         | 
| 85 | 
            +
             | 
    
        data/chrome/newtab.js
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            window.onload = function() {
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              chrome.cookies.get({ url: 'http://departr.solt.biz', name: 'bg_id'},
         | 
| 4 | 
            +
                function (cookie) {
         | 
| 5 | 
            +
                  if (cookie) {
         | 
| 6 | 
            +
                    var a = document.getElementById('credits_link')
         | 
| 7 | 
            +
                    a.href = "http://500px.com/photo/" + cookie.value;
         | 
| 8 | 
            +
                  }
         | 
| 9 | 
            +
              });
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              chrome.cookies.get({ url: 'http://departr.solt.biz', name: 'bg_user'},
         | 
| 12 | 
            +
                function (cookie) {
         | 
| 13 | 
            +
                  if (cookie) {
         | 
| 14 | 
            +
                    var a = document.getElementById('credits_link')
         | 
| 15 | 
            +
                    a.innerText = decodeURIComponent(cookie.value).replace(/\+/g," ");
         | 
| 16 | 
            +
                  }
         | 
| 17 | 
            +
              });
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            }
         | 
    
        data/departr.gemspec
    CHANGED
    
    | @@ -2,22 +2,23 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            Gem::Specification.new do |s|
         | 
| 4 4 | 
             
              s.name        = "departr"
         | 
| 5 | 
            -
              s.version     = 0. | 
| 6 | 
            -
              s.date        = ' | 
| 5 | 
            +
              s.version     = "0.6"
         | 
| 6 | 
            +
              s.date        = '2014-02-20'
         | 
| 7 7 | 
             
              s.platform    = Gem::Platform::RUBY
         | 
| 8 8 | 
             
              s.author      = "Florent Solt"
         | 
| 9 9 | 
             
              s.email       = "florent@solt.biz"
         | 
| 10 10 | 
             
              s.homepage    = "https://github.com/florentsolt/departr"
         | 
| 11 | 
            -
              s.summary     = "Departr | 
| 11 | 
            +
              s.summary     = "Departr!"
         | 
| 12 | 
            +
              s.description = "Departr is a smart and fast startpage to help you reach other web sites."
         | 
| 13 | 
            +
              s.license     = "MIT"
         | 
| 12 14 |  | 
| 13 15 | 
             
              s.files         = `git ls-files`.split("\n")
         | 
| 14 16 | 
             
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 15 17 | 
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 16 18 | 
             
              s.require_paths = ["lib"]
         | 
| 17 19 |  | 
| 18 | 
            -
              s.add_runtime_dependency(" | 
| 19 | 
            -
              s.add_runtime_dependency(" | 
| 20 | 
            -
              s.add_runtime_dependency(" | 
| 21 | 
            -
              s.add_runtime_dependency(" | 
| 22 | 
            -
              s.add_runtime_dependency("sinatra",           ["~> 1.3"])
         | 
| 20 | 
            +
              s.add_runtime_dependency("haml",              ["~> 4.0"])
         | 
| 21 | 
            +
              s.add_runtime_dependency("sass",              ["~> 3.2"])
         | 
| 22 | 
            +
              s.add_runtime_dependency("sinatra",           ["~> 1.4"])
         | 
| 23 | 
            +
              s.add_runtime_dependency("oauth",             ["~> 0.4"])
         | 
| 23 24 | 
             
            end
         | 
    
        data/lib/departr/commands.rb
    CHANGED
    
    | @@ -14,15 +14,7 @@ module Departr | |
| 14 14 | 
             
                  if File.exists? filename(provider, user)
         | 
| 15 15 | 
             
                    File.mtime(filename(provider, user))
         | 
| 16 16 | 
             
                  else
         | 
| 17 | 
            -
                     | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                def etag(provider, user)
         | 
| 22 | 
            -
                  begin
         | 
| 23 | 
            -
                    Digest::MD5.hexdigest(time(provider, user).to_s)
         | 
| 24 | 
            -
                  rescue
         | 
| 25 | 
            -
                    '-no-command-file-'
         | 
| 17 | 
            +
                    Time.at(0)
         | 
| 26 18 | 
             
                  end
         | 
| 27 19 | 
             
                end
         | 
| 28 20 |  | 
    
        data/lib/departr/config.rb
    CHANGED
    
    | @@ -10,19 +10,13 @@ module Departr | |
| 10 10 | 
             
                  :open_in_new_page => false,
         | 
| 11 11 | 
             
                  :default_search => "http://www.google.com/search?ie=UTF-8&oe=UTF-8&q=",
         | 
| 12 12 |  | 
| 13 | 
            -
                  :github => true,
         | 
| 14 | 
            -
                  :calendar => true,
         | 
| 15 | 
            -
                  :clock1 => "Europe/Paris",
         | 
| 16 | 
            -
                  :clock2 => "America/New_York",
         | 
| 17 | 
            -
                  :clock3 => "America/Los_Angeles",
         | 
| 18 | 
            -
             | 
| 19 13 | 
             
                  # Default commands
         | 
| 20 14 |  | 
| 21 15 | 
             
                  :commands => [
         | 
| 22 16 | 
             
                    {'name' => "google search for {words}", 'url' => "http://www.google.com/search?rls=en&q={words}&ie=UTF-8&oe=UTF-8"},
         | 
| 23 17 | 
             
                    {'name' => "google search for {words} in {lang}", 'url' => "http://www.google.com/search?rls={lang}&q={words}&ie=UTF-8&oe=UTF-8"},
         | 
| 24 18 | 
             
                    {'name' => "wikipedia search for {words}", 'url' => "http://en.wikipedia.org/wiki/{words}"},
         | 
| 25 | 
            -
                    {'name' => "twitter search for {words}", 'url' => " | 
| 19 | 
            +
                    {'name' => "twitter search for {words}", 'url' => "https://twitter.com/search?q={words}&src=typd"},
         | 
| 26 20 | 
             
                    {'name' => "youtube search for {words}", 'url' => "http://www.youtube.com/results?search_query={words}"},
         | 
| 27 21 | 
             
                    {'name' => "dailymotion search for {words}", 'url' => "http://www.dailymotion.com/relevance/search/{words}"},
         | 
| 28 22 | 
             
                    {'name' => "facebook search for {words}", 'url' => "http://www.facebook.com/search/?q={words}"},
         | 
    
        data/lib/departr/server.rb
    CHANGED
    
    | @@ -11,23 +11,7 @@ module Departr | |
| 11 11 | 
             
                  super
         | 
| 12 12 | 
             
                  Departr::Config.instance_eval(&blk) if block_given?
         | 
| 13 13 | 
             
                  @config = Config
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  # when called in the constructor, it remains persistant
         | 
| 16 | 
            -
                  # if not, it's rebuild every time
         | 
| 17 | 
            -
                  javascripts! if production?
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                def javascripts!
         | 
| 21 | 
            -
                  return @javascripts if not @javascripts.nil?
         | 
| 22 | 
            -
                  @javascripts = ''
         | 
| 23 | 
            -
                  Dir[File.join(settings.root, 'public', 'javascripts', '*.js')].sort.delete_if do |file|
         | 
| 24 | 
            -
                    not File.basename(file).match(/^\d+_/)
         | 
| 25 | 
            -
                  end.each do |file|
         | 
| 26 | 
            -
                    @javascripts << "\n/* #{File.basename(file)} */\n"
         | 
| 27 | 
            -
                    @javascripts << File.read(file)
         | 
| 28 | 
            -
                  end
         | 
| 29 | 
            -
                  @javascripts_checksum = Digest::SHA1.hexdigest(@javascripts)
         | 
| 30 | 
            -
                  @javascripts = JSMin.minify(@javascripts) if production?
         | 
| 14 | 
            +
                  @images = Marshal.load(File.read(File.join(__dir__, '..', 'images.msh')))
         | 
| 31 15 | 
             
                end
         | 
| 32 16 |  | 
| 33 17 | 
             
                #-----------------------------------------------------------------------------
         | 
| @@ -38,12 +22,12 @@ module Departr | |
| 38 22 |  | 
| 39 23 | 
             
                set :sass, {
         | 
| 40 24 | 
             
                  :cache_store => Sass::CacheStores::Memory.new,
         | 
| 41 | 
            -
                  :style => production?  | 
| 25 | 
            +
                  :style => Server.production? && :compressed || :expanded
         | 
| 42 26 | 
             
                }
         | 
| 43 27 |  | 
| 44 28 | 
             
                set :haml, {
         | 
| 45 29 | 
             
                  :format => :xhtml,
         | 
| 46 | 
            -
                  :ugly => production?
         | 
| 30 | 
            +
                  :ugly => Server.production?
         | 
| 47 31 | 
             
                }
         | 
| 48 32 |  | 
| 49 33 | 
             
                set :reload_templates, true if development?
         | 
| @@ -74,16 +58,6 @@ module Departr | |
| 74 58 | 
             
                    end
         | 
| 75 59 | 
             
                    check
         | 
| 76 60 | 
             
                  end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                  def clock_label(tz)
         | 
| 79 | 
            -
                    return ''.to_json if not tz
         | 
| 80 | 
            -
                    tz.split('/').last.gsub('_', ' ').to_json
         | 
| 81 | 
            -
                  end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                  def clock_offset(tz)
         | 
| 84 | 
            -
                    return 0 if not tz
         | 
| 85 | 
            -
                    TZInfo::Timezone.get(tz).current_period.utc_total_offset / 3600
         | 
| 86 | 
            -
                  end
         | 
| 87 61 | 
             
                end
         | 
| 88 62 |  | 
| 89 63 | 
             
                #-----------------------------------------------------------------------------
         | 
| @@ -92,16 +66,29 @@ module Departr | |
| 92 66 |  | 
| 93 67 | 
             
                get '/javascripts/all.js' do
         | 
| 94 68 | 
             
                  content_type :js
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                   | 
| 97 | 
            -
             | 
| 69 | 
            +
             | 
| 70 | 
            +
                  if not defined? @@javascripts or not Server.production?
         | 
| 71 | 
            +
                    @@javascripts = ''
         | 
| 72 | 
            +
                    @@javascripts_time = Time.at(0)
         | 
| 73 | 
            +
                    Dir[File.join(settings.root, 'public', 'javascripts', '*.js')].sort.delete_if do |file|
         | 
| 74 | 
            +
                      not File.basename(file).match(/^\d+_/)
         | 
| 75 | 
            +
                    end.each do |file|
         | 
| 76 | 
            +
                      @@javascripts << "\n/* #{File.basename(file)} */\n"
         | 
| 77 | 
            +
                      @@javascripts << File.read(file)
         | 
| 78 | 
            +
                      @@javascripts_time = File.mtime(file) if File.mtime(file) > @@javascripts_time
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                    @@javascripts = JSMin.minify(@@javascripts) if Server.production?
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  last_modified @@javascripts_time
         | 
| 84 | 
            +
                  @@javascripts
         | 
| 98 85 | 
             
                end
         | 
| 99 86 |  | 
| 100 87 | 
             
                get '/stylesheets/all.css' do
         | 
| 101 88 | 
             
                  content_type :css
         | 
| 102 | 
            -
                  if production?
         | 
| 89 | 
            +
                  if Server.production?
         | 
| 103 90 | 
             
                    time = File.mtime(File.join(settings.root, 'views', 'style.sass'))
         | 
| 104 | 
            -
                     | 
| 91 | 
            +
                    last_modified time
         | 
| 105 92 | 
             
                  end
         | 
| 106 93 | 
             
                  sass :style
         | 
| 107 94 | 
             
                end
         | 
| @@ -169,7 +156,7 @@ module Departr | |
| 169 156 | 
             
                get '/command/all' do
         | 
| 170 157 | 
             
                  auth!
         | 
| 171 158 | 
             
                  content_type :json
         | 
| 172 | 
            -
                  etag "command-" + Command.etag(@provider, @user) if production?
         | 
| 159 | 
            +
                  etag "command-" + Command.etag(@provider, @user) if Server.production?
         | 
| 173 160 | 
             
                  Command.get(@provider, @user).to_json
         | 
| 174 161 | 
             
                end
         | 
| 175 162 |  | 
| @@ -181,18 +168,37 @@ module Departr | |
| 181 168 | 
             
                  haml :help
         | 
| 182 169 | 
             
                end
         | 
| 183 170 |  | 
| 184 | 
            -
                get '/' do
         | 
| 171 | 
            +
                get '/background.jpg' do
         | 
| 172 | 
            +
                  background = @images.sample
         | 
| 173 | 
            +
                  response.set_cookie("bg_user", :value => background['user']['fullname'], :path => '/', :expires => Time.now + 60*60*24*365)
         | 
| 174 | 
            +
                  response.set_cookie("bg_id", :value => background['id'], :path => '/', :expires => Time.now + 60*60*24*365)
         | 
| 175 | 
            +
                  headers 'Cache-Control' => "no-cache, no-store, must-revalidate",
         | 
| 176 | 
            +
                    'Pragma' => 'no-cache',
         | 
| 177 | 
            +
                    'Expires' => '0'
         | 
| 178 | 
            +
                  redirect "/images/#{background['id']}.jpg"
         | 
| 179 | 
            +
                end
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                get '/javascripts/context.js' do
         | 
| 182 | 
            +
                  content_type :js
         | 
| 185 183 | 
             
                  if auth?
         | 
| 186 | 
            -
                     | 
| 187 | 
            -
                     | 
| 188 | 
            -
                     | 
| 184 | 
            +
                    last_modified [Command.time(@provider, @user), Settings.time(@provider, @user)].max if Server.production?
         | 
| 185 | 
            +
                    commands = Command.get(@provider, @user)
         | 
| 186 | 
            +
                    settings = Settings.get(@provider, @user)
         | 
| 189 187 | 
             
                  else
         | 
| 190 | 
            -
                    etag "default-#{Digest::SHA1.hexdigest(Command.default.inspect)}" if production?
         | 
| 191 188 | 
             
                    response.delete_cookie("user")
         | 
| 192 189 | 
             
                    response.delete_cookie("session")
         | 
| 193 | 
            -
                     | 
| 194 | 
            -
                     | 
| 190 | 
            +
                    commands = Command.default
         | 
| 191 | 
            +
                    settings = Settings.default
         | 
| 195 192 | 
             
                  end
         | 
| 193 | 
            +
                  "Command.data = #{commands.to_json};\n" +
         | 
| 194 | 
            +
                  "Settings = #{settings.to_json};"
         | 
| 195 | 
            +
                end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                get '/' do
         | 
| 198 | 
            +
                  dir = File.join(__dir__, '..', '..', 'views')
         | 
| 199 | 
            +
                  index = File.mtime(File.join(dir, 'index.haml')).to_i
         | 
| 200 | 
            +
                  layout = File.mtime(File.join(dir, 'layout.haml')).to_i
         | 
| 201 | 
            +
                  etag "#{layout}-#{index}" if Server.production?
         | 
| 196 202 | 
             
                  haml :index
         | 
| 197 203 | 
             
                end
         | 
| 198 204 | 
             
              end
         |