solutus 0.1.0 → 0.1.1
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 +4 -4
 - data/lib/solutus.rb +139 -20
 - data/resources/editBlog.html +39 -9
 - data/resources/editPage.html +25 -8
 - data/resources/index.html +9 -1
 - data/resources/login.html +29 -0
 - metadata +2 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7de81fd93b57d53407c0e146559143c7ac95237bb21199afd0d3aeea017c5b94
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3dce67dce9f05d447159a53517311f1892efa92a719db866322fd055a6442920
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4d9c10aa6739895a94e3949d123579393e3c38c4ef6f699f68479f2af6006dcde21a424b23d01c50e45a8e980568fa240e1df185fe786c354dd39efe71a3f340
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2664ed3b5e4c2c9edfe072cf2a9200173697d93154bc62ad5c47c6289df4d1d21641af1884178a526814c72ed3f9d3966d5f6a6983ae4ba6571d9d0977d74f0a
         
     | 
    
        data/lib/solutus.rb
    CHANGED
    
    | 
         @@ -5,6 +5,11 @@ require 'mustache' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'redcarpet'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'json'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'nokogiri'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'digest'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            #TODO: Add support for tags
         
     | 
| 
      
 11 
     | 
    
         
            +
            #TODO: Make stress tests
         
     | 
| 
      
 12 
     | 
    
         
            +
            #TODO: Fix bug : day being off with time in file
         
     | 
| 
       8 
13 
     | 
    
         | 
| 
       9 
14 
     | 
    
         
             
            class Solutus
         
     | 
| 
       10 
15 
     | 
    
         
             
                ARCHIVE = "archive"
         
     | 
| 
         @@ -18,8 +23,10 @@ class Solutus 
     | 
|
| 
       18 
23 
     | 
    
         
             
                SITE_PAGES_PATH = File.join("pages", "site-pages")
         
     | 
| 
       19 
24 
     | 
    
         
             
                POSTS_PATH = File.join("pages", "posts")
         
     | 
| 
       20 
25 
     | 
    
         
             
                BLOG_DATE_FORMAT = "%b %e, %Y"
         
     | 
| 
      
 26 
     | 
    
         
            +
                BLOG_DATE_DATA = "%Y-%m-%e %I:%M:%S"
         
     | 
| 
       21 
27 
     | 
    
         
             
                SETTINGS_FILE = "settings.yml"
         
     | 
| 
       22 
28 
     | 
    
         
             
                CACHE = ".solutus-cache"
         
     | 
| 
      
 29 
     | 
    
         
            +
                PASSWORD_FILE = "password.txt"
         
     | 
| 
       23 
30 
     | 
    
         
             
                DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"]
         
     | 
| 
       24 
31 
     | 
    
         | 
| 
       25 
32 
     | 
    
         
             
                @@blog_urls = Hash.new
         
     | 
| 
         @@ -39,35 +46,70 @@ class Solutus 
     | 
|
| 
       39 
46 
     | 
    
         
             
                        YAML.load(yml_text)
         
     | 
| 
       40 
47 
     | 
    
         
             
                    rescue
         
     | 
| 
       41 
48 
     | 
    
         
             
                        puts "Not a Solutus Project (yet) --- settings.yml not found"
         
     | 
| 
      
 49 
     | 
    
         
            +
                        false
         
     | 
| 
       42 
50 
     | 
    
         
             
                    end
         
     | 
| 
       43 
51 
     | 
    
         
             
                end
         
     | 
| 
       44 
52 
     | 
    
         | 
| 
       45 
53 
     | 
    
         
             
                class Solutus_Server < Sinatra::Base
         
     | 
| 
      
 54 
     | 
    
         
            +
                    enable :sessions
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
       46 
56 
     | 
    
         
             
                    set :public_folder, SITE_PATH
         
     | 
| 
      
 57 
     | 
    
         
            +
                    set :environment, :production
         
     | 
| 
       47 
58 
     | 
    
         | 
| 
       48 
59 
     | 
    
         
             
                    configure do
         
     | 
| 
       49 
60 
     | 
    
         
             
                        glob = Solutus.load_settings
         
     | 
| 
       50 
61 
     | 
    
         
             
                        set :global_settings, glob
         
     | 
| 
       51 
62 
     | 
    
         
             
                    end
         
     | 
| 
       52 
63 
     | 
    
         | 
| 
      
 64 
     | 
    
         
            +
                    class ServerStache < Mustache 
         
     | 
| 
      
 65 
     | 
    
         
            +
                    end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       53 
67 
     | 
    
         
             
                    get "/" do
         
     | 
| 
       54 
68 
     | 
    
         
             
                        send_file File.join(settings.public_folder, 'index.html')
         
     | 
| 
       55 
69 
     | 
    
         
             
                    end
         
     | 
| 
       56 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                    post "/login" do
         
     | 
| 
      
 72 
     | 
    
         
            +
                        if !params["password"]
         
     | 
| 
      
 73 
     | 
    
         
            +
                            return 'no password'
         
     | 
| 
      
 74 
     | 
    
         
            +
                        end
         
     | 
| 
      
 75 
     | 
    
         
            +
                        given_password_hash = Digest::MD5.hexdigest params["password"]
         
     | 
| 
      
 76 
     | 
    
         
            +
                        password = File.read(PASSWORD_FILE)
         
     | 
| 
      
 77 
     | 
    
         
            +
                        puts given_password_hash.to_s
         
     | 
| 
      
 78 
     | 
    
         
            +
                        puts "password on file:" + password.to_s
         
     | 
| 
      
 79 
     | 
    
         
            +
                        if given_password_hash.to_s == password.to_s
         
     | 
| 
      
 80 
     | 
    
         
            +
                            session[:verified] = true
         
     | 
| 
      
 81 
     | 
    
         
            +
                            redirect "/edit"
         
     | 
| 
      
 82 
     | 
    
         
            +
                        else
         
     | 
| 
      
 83 
     | 
    
         
            +
                            render_login("Wrong password")
         
     | 
| 
      
 84 
     | 
    
         
            +
                        end
         
     | 
| 
      
 85 
     | 
    
         
            +
                    end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       57 
87 
     | 
    
         
             
                    get "/reset" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 89 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
       58 
91 
     | 
    
         
             
                        Solutus.command("build")
         
     | 
| 
       59 
92 
     | 
    
         
             
                        redirect "/"
         
     | 
| 
       60 
93 
     | 
    
         
             
                    end
         
     | 
| 
       61 
94 
     | 
    
         | 
| 
       62 
95 
     | 
    
         
             
                    get "/edit" do
         
     | 
| 
      
 96 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 97 
     | 
    
         
            +
                            return render_login()
         
     | 
| 
      
 98 
     | 
    
         
            +
                        end
         
     | 
| 
       63 
99 
     | 
    
         
             
                        render_index
         
     | 
| 
       64 
100 
     | 
    
         
             
                    end
         
     | 
| 
       65 
101 
     | 
    
         | 
| 
       66 
102 
     | 
    
         
             
                    get "/editpage" do
         
     | 
| 
      
 103 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 104 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 105 
     | 
    
         
            +
                        end
         
     | 
| 
       67 
106 
     | 
    
         
             
                        render_edit_page(params["page-path"])
         
     | 
| 
       68 
107 
     | 
    
         
             
                    end
         
     | 
| 
       69 
108 
     | 
    
         | 
| 
       70 
109 
     | 
    
         
             
                    post "/savepage" do
         
     | 
| 
      
 110 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 111 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 112 
     | 
    
         
            +
                        end
         
     | 
| 
       71 
113 
     | 
    
         
             
                        path = params["path"]
         
     | 
| 
       72 
114 
     | 
    
         | 
| 
       73 
115 
     | 
    
         
             
                        f = File.open(path, "r")
         
     | 
| 
         @@ -90,16 +132,29 @@ class Solutus 
     | 
|
| 
       90 
132 
     | 
    
         
             
                    end
         
     | 
| 
       91 
133 
     | 
    
         | 
| 
       92 
134 
     | 
    
         
             
                    post "/newpost" do
         
     | 
| 
       93 
     | 
    
         
            -
                         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 136 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 137 
     | 
    
         
            +
                        end
         
     | 
| 
      
 138 
     | 
    
         
            +
                        title = params["post-title"].gsub(/[^a-zA-Z0-9\-]/,"").strip
         
     | 
| 
      
 139 
     | 
    
         
            +
                        if title.empty?
         
     | 
| 
      
 140 
     | 
    
         
            +
                            return "Error"
         
     | 
| 
      
 141 
     | 
    
         
            +
                        end
         
     | 
| 
      
 142 
     | 
    
         
            +
                        path = Solutus.command("new", "post", title)
         
     | 
| 
      
 143 
     | 
    
         
            +
                        Solutus.command("build")
         
     | 
| 
       95 
144 
     | 
    
         
             
                        render_edit_post(path)
         
     | 
| 
       96 
145 
     | 
    
         
             
                    end
         
     | 
| 
       97 
146 
     | 
    
         | 
| 
       98 
147 
     | 
    
         
             
                    get "/editpost" do
         
     | 
| 
      
 148 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 149 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 150 
     | 
    
         
            +
                        end
         
     | 
| 
       99 
151 
     | 
    
         
             
                        render_edit_post(*params["post-path"].split(","))
         
     | 
| 
       100 
152 
     | 
    
         
             
                    end
         
     | 
| 
       101 
153 
     | 
    
         | 
| 
       102 
154 
     | 
    
         
             
                    post "/savepost" do
         
     | 
| 
      
 155 
     | 
    
         
            +
                        if !session[:verified]
         
     | 
| 
      
 156 
     | 
    
         
            +
                            return render_login("You were logged out.")
         
     | 
| 
      
 157 
     | 
    
         
            +
                        end
         
     | 
| 
       103 
158 
     | 
    
         
             
                        path = params["path"]
         
     | 
| 
       104 
159 
     | 
    
         
             
                        f = File.open(path, "r")
         
     | 
| 
       105 
160 
     | 
    
         
             
                        yml_text = ""
         
     | 
| 
         @@ -109,6 +164,7 @@ class Solutus 
     | 
|
| 
       109 
164 
     | 
    
         
             
                        f.close
         
     | 
| 
       110 
165 
     | 
    
         
             
                        data = YAML.load(yml_text)
         
     | 
| 
       111 
166 
     | 
    
         
             
                        data["title"] = params["title"]
         
     | 
| 
      
 167 
     | 
    
         
            +
                        data["subtitle"] = params["subtitle"]
         
     | 
| 
       112 
168 
     | 
    
         
             
                        new_contents = YAML.dump(data)
         
     | 
| 
       113 
169 
     | 
    
         
             
                        new_contents += "---\n"
         
     | 
| 
       114 
170 
     | 
    
         
             
                        new_contents += params["markdown"]
         
     | 
| 
         @@ -137,7 +193,7 @@ class Solutus 
     | 
|
| 
       137 
193 
     | 
    
         
             
                        else
         
     | 
| 
       138 
194 
     | 
    
         
             
                            send_404
         
     | 
| 
       139 
195 
     | 
    
         
             
                        end
         
     | 
| 
       140 
     | 
    
         
            -
                    end
         
     | 
| 
      
 196 
     | 
    
         
            +
                    end            
         
     | 
| 
       141 
197 
     | 
    
         | 
| 
       142 
198 
     | 
    
         
             
                    def send_404
         
     | 
| 
       143 
199 
     | 
    
         
             
                        send_file File.join(path_to_resources, "404.html")
         
     | 
| 
         @@ -147,9 +203,6 @@ class Solutus 
     | 
|
| 
       147 
203 
     | 
    
         
             
                        File.join(File.dirname(File.expand_path(__FILE__)), '../resources')
         
     | 
| 
       148 
204 
     | 
    
         
             
                    end
         
     | 
| 
       149 
205 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
                    class ServerStache < Mustache 
         
     | 
| 
       151 
     | 
    
         
            -
                    end
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
206 
     | 
    
         
             
                    def render_edit_page(path)
         
     | 
| 
       154 
207 
     | 
    
         
             
                        f = File.open(File.join(path_to_resources, "editPage.html"), "r")
         
     | 
| 
       155 
208 
     | 
    
         
             
                        template = ""
         
     | 
| 
         @@ -170,6 +223,11 @@ class Solutus 
     | 
|
| 
       170 
223 
     | 
    
         | 
| 
       171 
224 
     | 
    
         
             
                        result[:title] = data["title"]
         
     | 
| 
       172 
225 
     | 
    
         
             
                        result[:path] = path
         
     | 
| 
      
 226 
     | 
    
         
            +
                        link = path.split("/")[-1].split(".")[0]
         
     | 
| 
      
 227 
     | 
    
         
            +
                        if ["error", "index"].include?(link)
         
     | 
| 
      
 228 
     | 
    
         
            +
                            link = link + ".html"
         
     | 
| 
      
 229 
     | 
    
         
            +
                        end
         
     | 
| 
      
 230 
     | 
    
         
            +
                        result[:link] = link
         
     | 
| 
       173 
231 
     | 
    
         
             
                        settings.global_settings.each do |key, val|
         
     | 
| 
       174 
232 
     | 
    
         
             
                            result[key.to_sym] = val
         
     | 
| 
       175 
233 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -200,10 +258,19 @@ class Solutus 
     | 
|
| 
       200 
258 
     | 
    
         
             
                        data = YAML.load(file_contents)
         
     | 
| 
       201 
259 
     | 
    
         | 
| 
       202 
260 
     | 
    
         
             
                        result[:title] = data["title"]
         
     | 
| 
      
 261 
     | 
    
         
            +
                        result[:date] = data["date"].strftime(BLOG_DATE_FORMAT)
         
     | 
| 
       203 
262 
     | 
    
         
             
                        result[:markdown] = file_contents.split("---")[-1]
         
     | 
| 
       204 
263 
     | 
    
         
             
                        result[:link] = url
         
     | 
| 
       205 
264 
     | 
    
         
             
                        result[:canview] = url != "/"
         
     | 
| 
       206 
265 
     | 
    
         
             
                        result[:path] = path
         
     | 
| 
      
 266 
     | 
    
         
            +
                        result[:subtitle] = data["subtitle"]
         
     | 
| 
      
 267 
     | 
    
         
            +
                        result.render
         
     | 
| 
      
 268 
     | 
    
         
            +
                    end
         
     | 
| 
      
 269 
     | 
    
         
            +
             
     | 
| 
      
 270 
     | 
    
         
            +
                    def render_login(message="")
         
     | 
| 
      
 271 
     | 
    
         
            +
                        ServerStache.template = File.read(File.join(path_to_resources, "login.html"))
         
     | 
| 
      
 272 
     | 
    
         
            +
                        result = ServerStache.new
         
     | 
| 
      
 273 
     | 
    
         
            +
                        result[:message] = message
         
     | 
| 
       207 
274 
     | 
    
         
             
                        result.render
         
     | 
| 
       208 
275 
     | 
    
         
             
                    end
         
     | 
| 
       209 
276 
     | 
    
         | 
| 
         @@ -286,7 +353,9 @@ class Solutus 
     | 
|
| 
       286 
353 
     | 
    
         
             
                            deploy
         
     | 
| 
       287 
354 
     | 
    
         
             
                        else 
         
     | 
| 
       288 
355 
     | 
    
         
             
                            if args.length >= 2
         
     | 
| 
       289 
     | 
    
         
            -
                                if args[0] == " 
     | 
| 
      
 356 
     | 
    
         
            +
                                if args[0] == "password"
         
     | 
| 
      
 357 
     | 
    
         
            +
                                    create_password(args[1])
         
     | 
| 
      
 358 
     | 
    
         
            +
                                elsif args[0] == "create"
         
     | 
| 
       290 
359 
     | 
    
         
             
                                    new_project(args[1])
         
     | 
| 
       291 
360 
     | 
    
         
             
                                else
         
     | 
| 
       292 
361 
     | 
    
         
             
                                    if args.length >= 3
         
     | 
| 
         @@ -328,6 +397,9 @@ class Solutus 
     | 
|
| 
       328 
397 
     | 
    
         
             
                def self.build
         
     | 
| 
       329 
398 
     | 
    
         
             
                    puts "Solutus is building the static site"
         
     | 
| 
       330 
399 
     | 
    
         
             
                    settings_data = load_settings
         
     | 
| 
      
 400 
     | 
    
         
            +
                    if settings_data == false
         
     | 
| 
      
 401 
     | 
    
         
            +
                        return
         
     | 
| 
      
 402 
     | 
    
         
            +
                    end
         
     | 
| 
       331 
403 
     | 
    
         | 
| 
       332 
404 
     | 
    
         
             
                    if File.directory?(BUILD_PATH)
         
     | 
| 
       333 
405 
     | 
    
         
             
                        FileUtils.remove_dir(BUILD_PATH)
         
     | 
| 
         @@ -367,6 +439,7 @@ class Solutus 
     | 
|
| 
       367 
439 
     | 
    
         
             
                        yaml_data[entry] = contents
         
     | 
| 
       368 
440 
     | 
    
         
             
                        data = YAML.load(contents)
         
     | 
| 
       369 
441 
     | 
    
         
             
                        date = data["date"]
         
     | 
| 
      
 442 
     | 
    
         
            +
                        subtitle = data.fetch("subtitle", "")
         
     | 
| 
       370 
443 
     | 
    
         
             
                        relative_dir = File.join(date.year.to_s, date.month.to_s, date.day.to_s, entry.split(".")[0])
         
     | 
| 
       371 
444 
     | 
    
         
             
                        year = date.year.to_s
         
     | 
| 
       372 
445 
     | 
    
         
             
                        if !@@blog_urls.key?(year)
         
     | 
| 
         @@ -376,7 +449,8 @@ class Solutus 
     | 
|
| 
       376 
449 
     | 
    
         
             
                            "title" => data["title"], 
         
     | 
| 
       377 
450 
     | 
    
         
             
                            "url" => File.join(ARCHIVE, relative_dir),
         
     | 
| 
       378 
451 
     | 
    
         
             
                            "file_path" => path,
         
     | 
| 
       379 
     | 
    
         
            -
                            "date" => date
         
     | 
| 
      
 452 
     | 
    
         
            +
                            "date" => date,
         
     | 
| 
      
 453 
     | 
    
         
            +
                            "subtitle" => subtitle
         
     | 
| 
       380 
454 
     | 
    
         
             
                        })
         
     | 
| 
       381 
455 
     | 
    
         
             
                    end
         
     | 
| 
       382 
456 
     | 
    
         | 
| 
         @@ -385,7 +459,16 @@ class Solutus 
     | 
|
| 
       385 
459 
     | 
    
         
             
                    get_recents(recents_count).reverse.each do |post|
         
     | 
| 
       386 
460 
     | 
    
         
             
                        url = post["url"]
         
     | 
| 
       387 
461 
     | 
    
         
             
                        title = post["title"]
         
     | 
| 
       388 
     | 
    
         
            -
                         
     | 
| 
      
 462 
     | 
    
         
            +
                        date = prettify_date(post["date"])
         
     | 
| 
      
 463 
     | 
    
         
            +
                        subtitle = post["subtitle"]
         
     | 
| 
      
 464 
     | 
    
         
            +
             
     | 
| 
      
 465 
     | 
    
         
            +
                        block = <<HERE
         
     | 
| 
      
 466 
     | 
    
         
            +
            <div class="solutus-recents-block">
         
     | 
| 
      
 467 
     | 
    
         
            +
                <a class="solutus-blog-thumbnail" href="/#{url}">#{title}</a> - #{date}
         
     | 
| 
      
 468 
     | 
    
         
            +
                <div class="solutus-blog-subtitle"><i>#{subtitle}</i></div>
         
     | 
| 
      
 469 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 470 
     | 
    
         
            +
            HERE
         
     | 
| 
      
 471 
     | 
    
         
            +
                        recents += block
         
     | 
| 
       389 
472 
     | 
    
         
             
                    end
         
     | 
| 
       390 
473 
     | 
    
         | 
| 
       391 
474 
     | 
    
         
             
                    yaml_data.each do |entry, contents|
         
     | 
| 
         @@ -457,12 +540,13 @@ class Solutus 
     | 
|
| 
       457 
540 
     | 
    
         
             
                        sorted.each do |hash|
         
     | 
| 
       458 
541 
     | 
    
         
             
                            url = hash["url"]
         
     | 
| 
       459 
542 
     | 
    
         
             
                            title = hash["title"]
         
     | 
| 
       460 
     | 
    
         
            -
                            pretty_date = hash["date"] 
     | 
| 
       461 
     | 
    
         
            -
             
     | 
| 
       462 
     | 
    
         
            -
                            content += "<div class=\"solutus-blog- 
     | 
| 
       463 
     | 
    
         
            -
                            content += "< 
     | 
| 
       464 
     | 
    
         
            -
                            content += " 
     | 
| 
       465 
     | 
    
         
            -
                            content += "</div 
     | 
| 
      
 543 
     | 
    
         
            +
                            pretty_date = prettify_date(hash["date"])
         
     | 
| 
      
 544 
     | 
    
         
            +
                            content += "<div class=\"solutus-blog-block\">\n"
         
     | 
| 
      
 545 
     | 
    
         
            +
                            content += "    <div class=\"solutus-blog-title\">\n"
         
     | 
| 
      
 546 
     | 
    
         
            +
                            content += "        <a href=\"/#{url}\">#{title}</a>\n"
         
     | 
| 
      
 547 
     | 
    
         
            +
                            content += "    </div>\n"
         
     | 
| 
      
 548 
     | 
    
         
            +
                            content += "    <div>#{pretty_date}</div>\n"
         
     | 
| 
      
 549 
     | 
    
         
            +
                            content += "</div>\n"
         
     | 
| 
       466 
550 
     | 
    
         
             
                        end
         
     | 
| 
       467 
551 
     | 
    
         
             
                    end
         
     | 
| 
       468 
552 
     | 
    
         
             
                    path = File.join(SITE_PATH, ARCHIVE, "index.html")
         
     | 
| 
         @@ -507,8 +591,17 @@ class Solutus 
     | 
|
| 
       507 
591 
     | 
    
         
             
                end
         
     | 
| 
       508 
592 
     | 
    
         | 
| 
       509 
593 
     | 
    
         
             
                def self.new_page(title)
         
     | 
| 
       510 
     | 
    
         
            -
                     
     | 
| 
       511 
     | 
    
         
            -
                     
     | 
| 
      
 594 
     | 
    
         
            +
                    title = title.gsub(/\s+/, "").gsub(/[^a-zA-Z0-9\-]/, "").strip
         
     | 
| 
      
 595 
     | 
    
         
            +
                    if title.empty?
         
     | 
| 
      
 596 
     | 
    
         
            +
                        puts "Bad name"
         
     | 
| 
      
 597 
     | 
    
         
            +
                        return
         
     | 
| 
      
 598 
     | 
    
         
            +
                    end
         
     | 
| 
      
 599 
     | 
    
         
            +
                    if ["edit"].include?(title)
         
     | 
| 
      
 600 
     | 
    
         
            +
                        puts "Can't use #{title} as a page name."
         
     | 
| 
      
 601 
     | 
    
         
            +
                        return
         
     | 
| 
      
 602 
     | 
    
         
            +
                    end
         
     | 
| 
      
 603 
     | 
    
         
            +
                
         
     | 
| 
      
 604 
     | 
    
         
            +
                    path = File.join(SITE_PAGES_PATH, title + ".yml")
         
     | 
| 
       512 
605 
     | 
    
         
             
                    if File.file?(path)
         
     | 
| 
       513 
606 
     | 
    
         
             
                        puts "Page with that name already exists."
         
     | 
| 
       514 
607 
     | 
    
         
             
                        return
         
     | 
| 
         @@ -531,7 +624,7 @@ HERE 
     | 
|
| 
       531 
624 
     | 
    
         | 
| 
       532 
625 
     | 
    
         
             
                def self.new_post(title)
         
     | 
| 
       533 
626 
     | 
    
         
             
                    i = 1
         
     | 
| 
       534 
     | 
    
         
            -
                    new_title = title.gsub(/\s+/, "")
         
     | 
| 
      
 627 
     | 
    
         
            +
                    new_title = title.gsub(/\s+/, "").gsub(/[^a-zA-Z0-9\-]/, "").strip
         
     | 
| 
       535 
628 
     | 
    
         
             
                    if title.empty?
         
     | 
| 
       536 
629 
     | 
    
         
             
                        puts "Empty title"
         
     | 
| 
       537 
630 
     | 
    
         
             
                        return ""
         
     | 
| 
         @@ -545,11 +638,12 @@ HERE 
     | 
|
| 
       545 
638 
     | 
    
         
             
                            break
         
     | 
| 
       546 
639 
     | 
    
         
             
                        end
         
     | 
| 
       547 
640 
     | 
    
         
             
                    end
         
     | 
| 
       548 
     | 
    
         
            -
                    date = Time.now.strftime( 
     | 
| 
      
 641 
     | 
    
         
            +
                    date = Time.now.strftime(BLOG_DATE_DATA)
         
     | 
| 
       549 
642 
     | 
    
         
             
                    text = <<HERE
         
     | 
| 
       550 
643 
     | 
    
         
             
            ---
         
     | 
| 
       551 
644 
     | 
    
         
             
            title: #{title}
         
     | 
| 
       552 
645 
     | 
    
         
             
            date: #{date}
         
     | 
| 
      
 646 
     | 
    
         
            +
            subtitle: Another new blog post
         
     | 
| 
       553 
647 
     | 
    
         
             
            ---
         
     | 
| 
       554 
648 
     | 
    
         
             
            *This is a temporary blog post page!*
         
     | 
| 
       555 
649 
     | 
    
         
             
            HERE
         
     | 
| 
         @@ -574,6 +668,10 @@ HERE 
     | 
|
| 
       574 
668 
     | 
    
         
             
                    end
         
     | 
| 
       575 
669 
     | 
    
         
             
                end
         
     | 
| 
       576 
670 
     | 
    
         | 
| 
      
 671 
     | 
    
         
            +
                def self.prettify_date(date)
         
     | 
| 
      
 672 
     | 
    
         
            +
                    date.strftime("%b %e") + DAY_ENDINGS[date.strftime("%e").to_i]
         
     | 
| 
      
 673 
     | 
    
         
            +
                end
         
     | 
| 
      
 674 
     | 
    
         
            +
                    
         
     | 
| 
       577 
675 
     | 
    
         
             
                def self.get_recents(count)
         
     | 
| 
       578 
676 
     | 
    
         
             
                    res = Array.new
         
     | 
| 
       579 
677 
     | 
    
         
             
                    @@blog_urls.each do |yr, arr|
         
     | 
| 
         @@ -601,7 +699,23 @@ HERE 
     | 
|
| 
       601 
699 
     | 
    
         
             
                    result
         
     | 
| 
       602 
700 
     | 
    
         
             
                end
         
     | 
| 
       603 
701 
     | 
    
         | 
| 
      
 702 
     | 
    
         
            +
                def self.create_password(password)
         
     | 
| 
      
 703 
     | 
    
         
            +
                    content = Digest::MD5.hexdigest password
         
     | 
| 
      
 704 
     | 
    
         
            +
                    if File.file?(PASSWORD_FILE)
         
     | 
| 
      
 705 
     | 
    
         
            +
                        FileUtils.rm(PASSWORD_FILE)
         
     | 
| 
      
 706 
     | 
    
         
            +
                    end
         
     | 
| 
      
 707 
     | 
    
         
            +
                    f = File.new(PASSWORD_FILE, "w")
         
     | 
| 
      
 708 
     | 
    
         
            +
                    f.write(content)
         
     | 
| 
      
 709 
     | 
    
         
            +
                    f.close
         
     | 
| 
      
 710 
     | 
    
         
            +
                    puts "Wrote password to password.txt"
         
     | 
| 
      
 711 
     | 
    
         
            +
                end
         
     | 
| 
      
 712 
     | 
    
         
            +
             
     | 
| 
       604 
713 
     | 
    
         
             
                def self.new_project(name)
         
     | 
| 
      
 714 
     | 
    
         
            +
                    name = name.gsub(/[^a-zA-Z0-9\-]/, "").strip
         
     | 
| 
      
 715 
     | 
    
         
            +
                    if name == ""
         
     | 
| 
      
 716 
     | 
    
         
            +
                        puts "Invalid name"
         
     | 
| 
      
 717 
     | 
    
         
            +
                        return
         
     | 
| 
      
 718 
     | 
    
         
            +
                    end
         
     | 
| 
       605 
719 
     | 
    
         
             
                    if File.directory?(name)
         
     | 
| 
       606 
720 
     | 
    
         
             
                        puts "Invalid name, already a folder with that name"
         
     | 
| 
       607 
721 
     | 
    
         
             
                        print "Overwrite? [Y/n]"
         
     | 
| 
         @@ -664,6 +778,8 @@ HERE 
     | 
|
| 
       664 
778 
     | 
    
         
             
                        {{{date}}}
         
     | 
| 
       665 
779 
     | 
    
         
             
                    {{/blog}}
         
     | 
| 
       666 
780 
     | 
    
         
             
                    {{{content}}}
         
     | 
| 
      
 781 
     | 
    
         
            +
                    <h3>Recent Posts</h3>
         
     | 
| 
      
 782 
     | 
    
         
            +
                    {{{recents}}}
         
     | 
| 
       667 
783 
     | 
    
         
             
                    <small style="display: block; text-align: center;">© {{year}} {{author}}</small>
         
     | 
| 
       668 
784 
     | 
    
         
             
                    {{{watermark}}}
         
     | 
| 
       669 
785 
     | 
    
         
             
                </div>
         
     | 
| 
         @@ -672,9 +788,11 @@ HERE 
     | 
|
| 
       672 
788 
     | 
    
         
             
            </html>
         
     | 
| 
       673 
789 
     | 
    
         
             
            HERE
         
     | 
| 
       674 
790 
     | 
    
         | 
| 
      
 791 
     | 
    
         
            +
                    datetime = Time.now.strftime(BLOG_DATE_DATA)
         
     | 
| 
       675 
792 
     | 
    
         
             
                    test_file = <<HERE
         
     | 
| 
       676 
793 
     | 
    
         
             
            title: Example Blog Post
         
     | 
| 
       677 
     | 
    
         
            -
            date:  
     | 
| 
      
 794 
     | 
    
         
            +
            date: #{datetime}
         
     | 
| 
      
 795 
     | 
    
         
            +
            subtitle: an example post...
         
     | 
| 
       678 
796 
     | 
    
         
             
            ---
         
     | 
| 
       679 
797 
     | 
    
         
             
            *This is an example blog post page!*
         
     | 
| 
       680 
798 
     | 
    
         
             
            HERE
         
     | 
| 
         @@ -692,6 +810,7 @@ HERE 
     | 
|
| 
       692 
810 
     | 
    
         | 
| 
       693 
811 
     | 
    
         
             
                    files = {
         
     | 
| 
       694 
812 
     | 
    
         
             
                        File.join(name, "settings.yml") => settings_file,
         
     | 
| 
      
 813 
     | 
    
         
            +
                        File.join(name, ".gitignore") => PASSWORD_FILE + "\n",
         
     | 
| 
       695 
814 
     | 
    
         
             
                        File.join(name, "static", "css", "styles.css") => styles_file,
         
     | 
| 
       696 
815 
     | 
    
         
             
                        File.join(name, "templates", "default.html") => default_file,
         
     | 
| 
       697 
816 
     | 
    
         
             
                        File.join(name, "pages", "posts", "test.md") => test_file,
         
     | 
    
        data/resources/editBlog.html
    CHANGED
    
    | 
         @@ -16,6 +16,14 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
                    h1, h2, h3 {
         
     | 
| 
       17 
17 
     | 
    
         
             
                        line-height:1.2
         
     | 
| 
       18 
18 
     | 
    
         
             
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    input[type=text] {
         
     | 
| 
      
 21 
     | 
    
         
            +
                        width: 500px;
         
     | 
| 
      
 22 
     | 
    
         
            +
                    }
         
     | 
| 
      
 23 
     | 
    
         
            +
                    a {
         
     | 
| 
      
 24 
     | 
    
         
            +
                        text-decoration: none;
         
     | 
| 
      
 25 
     | 
    
         
            +
                        color: #4286f4;
         
     | 
| 
      
 26 
     | 
    
         
            +
                    }
         
     | 
| 
       19 
27 
     | 
    
         
             
                </style>
         
     | 
| 
       20 
28 
     | 
    
         
             
                <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
         
     | 
| 
       21 
29 
     | 
    
         
             
                <script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
         
     | 
| 
         @@ -23,29 +31,51 @@ 
     | 
|
| 
       23 
31 
     | 
    
         
             
            </head>
         
     | 
| 
       24 
32 
     | 
    
         | 
| 
       25 
33 
     | 
    
         
             
            <body>
         
     | 
| 
       26 
     | 
    
         
            -
                <h1>Editing <span style="border: 1px  
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
                <p 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                 
     | 
| 
      
 34 
     | 
    
         
            +
                <h1>Editing <span style="border: 1px dotted gray" id="title-input" contenteditable>{{title}}</span></h1>
         
     | 
| 
      
 35 
     | 
    
         
            +
                <code>{{path}}</code> ({{date}})
         
     | 
| 
      
 36 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 37 
     | 
    
         
            +
                    [<a href="/edit">Back to Edit</a>]
         
     | 
| 
      
 38 
     | 
    
         
            +
                    {{#canview}}
         
     | 
| 
      
 39 
     | 
    
         
            +
                    [<a href="{{link}}">View on Site</a>]
         
     | 
| 
      
 40 
     | 
    
         
            +
                    {{/canview}}
         
     | 
| 
      
 41 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 42 
     | 
    
         
            +
                <hr>
         
     | 
| 
      
 43 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 44 
     | 
    
         
            +
                    <button id="solutus-save-button" type="submit">Save</button>
         
     | 
| 
      
 45 
     | 
    
         
            +
                    <b><span id="solutus-status">Saved.</span></b>
         
     | 
| 
      
 46 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                <p>Subtitle: <input type="text" value="{{subtitle}}" placeholder="Subtitle text" id="solutus-subtitle-input"/></p>
         
     | 
| 
       34 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                <textarea id="solutus-mde">{{{markdown}}}</textarea>
         
     | 
| 
      
 51 
     | 
    
         
            +
                <p style="text-align: center;">
         
     | 
| 
      
 52 
     | 
    
         
            +
                    <small>Powered by <a href="https://github.com/jeromew21/solutus">Solutus</a></small>
         
     | 
| 
      
 53 
     | 
    
         
            +
                </p>
         
     | 
| 
       35 
54 
     | 
    
         
             
                <script>
         
     | 
| 
       36 
55 
     | 
    
         
             
                    var simplemde = new SimpleMDE({ element: document.getElementById("solutus-mde") });
         
     | 
| 
       37 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
                    function updateStatus(status) {
         
     | 
| 
      
 58 
     | 
    
         
            +
                        $("#solutus-status").html(status);
         
     | 
| 
      
 59 
     | 
    
         
            +
                    }
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       38 
61 
     | 
    
         
             
                    function save() {
         
     | 
| 
      
 62 
     | 
    
         
            +
                        updateStatus("Saving...")
         
     | 
| 
       39 
63 
     | 
    
         
             
                        $.post("/savepost", {
         
     | 
| 
       40 
64 
     | 
    
         
             
                            "path": "{{path}}",
         
     | 
| 
       41 
65 
     | 
    
         
             
                            "title": $("#title-input").html(),
         
     | 
| 
       42 
     | 
    
         
            -
                            "markdown": simplemde.value()
         
     | 
| 
      
 66 
     | 
    
         
            +
                            "markdown": simplemde.value(),
         
     | 
| 
      
 67 
     | 
    
         
            +
                            "subtitle": $("#solutus-subtitle-input").val()
         
     | 
| 
       43 
68 
     | 
    
         
             
                        }, function(response) {
         
     | 
| 
       44 
69 
     | 
    
         
             
                            console.log(response);
         
     | 
| 
      
 70 
     | 
    
         
            +
                            updateStatus("Saved.");
         
     | 
| 
       45 
71 
     | 
    
         
             
                        });
         
     | 
| 
       46 
72 
     | 
    
         
             
                    }
         
     | 
| 
       47 
73 
     | 
    
         | 
| 
       48 
74 
     | 
    
         
             
                    $("#solutus-save-button").click(save);
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                    $(document).keydown(function() {
         
     | 
| 
      
 77 
     | 
    
         
            +
                        updateStatus("Unsaved changes.")
         
     | 
| 
      
 78 
     | 
    
         
            +
                    })
         
     | 
| 
       49 
79 
     | 
    
         
             
                </script>
         
     | 
| 
       50 
80 
     | 
    
         
             
            </body>
         
     | 
| 
       51 
81 
     | 
    
         
             
            </html>
         
     | 
    
        data/resources/editPage.html
    CHANGED
    
    | 
         @@ -4,36 +4,53 @@ 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                <style type="text/css">
         
     | 
| 
       6 
6 
     | 
    
         
             
                    #solutus-editmenu {
         
     | 
| 
       7 
     | 
    
         
            -
                         
     | 
| 
       8 
     | 
    
         
            -
                         
     | 
| 
       9 
     | 
    
         
            -
                        padding: 15px;
         
     | 
| 
      
 7 
     | 
    
         
            +
                        font-family: "Segoe UI", sans-serif;
         
     | 
| 
      
 8 
     | 
    
         
            +
                        display: table-row;
         
     | 
| 
       10 
9 
     | 
    
         
             
                        background-color: #eeeeee;
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                    }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    .solutus-edit-block {
         
     | 
| 
      
 13 
     | 
    
         
            +
                        display: table-cell;
         
     | 
| 
      
 14 
     | 
    
         
            +
                        padding: 8px 12px 8px 12px;
         
     | 
| 
       12 
15 
     | 
    
         
             
                    }
         
     | 
| 
       13 
16 
     | 
    
         
             
                </style>
         
     | 
| 
       14 
17 
     | 
    
         
             
                {{{stylesheets}}}
         
     | 
| 
       15 
18 
     | 
    
         
             
            </head>
         
     | 
| 
       16 
19 
     | 
    
         | 
| 
       17 
20 
     | 
    
         
             
            <body>
         
     | 
| 
       18 
     | 
    
         
            -
                <div  
     | 
| 
       19 
     | 
    
         
            -
                    < 
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                <div style="display: table;">
         
     | 
| 
      
 22 
     | 
    
         
            +
                    <div id="solutus-editmenu">
         
     | 
| 
      
 23 
     | 
    
         
            +
                        <div class="solutus-edit-block"><a href="/edit">Back to Edit</a></div>               
         
     | 
| 
      
 24 
     | 
    
         
            +
                        <div class="solutus-edit-block">Editing <a href="{{link}}"><b>{{title}}</b></a> @ <code>{{path}}</code></div>
         
     | 
| 
      
 25 
     | 
    
         
            +
                        <div class="solutus-edit-block"><button type="button" class="btn btn-primary" id="solutus-save-button">Save</button></div>   
         
     | 
| 
      
 26 
     | 
    
         
            +
                        <div class="solutus-edit-block"><b><span id="solutus-status"></span></b></div>
         
     | 
| 
      
 27 
     | 
    
         
            +
                    </div>
         
     | 
| 
       22 
28 
     | 
    
         
             
                </div>
         
     | 
| 
       23 
29 
     | 
    
         
             
                {{{everything}}}
         
     | 
| 
       24 
30 
     | 
    
         
             
                {{{scripts}}}
         
     | 
| 
       25 
31 
     | 
    
         
             
                <script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"></script>
         
     | 
| 
       26 
32 
     | 
    
         
             
                <script>
         
     | 
| 
      
 33 
     | 
    
         
            +
                    function updateStatus(status) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                        $("#solutus-status").html(status);
         
     | 
| 
      
 35 
     | 
    
         
            +
                    }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       27 
37 
     | 
    
         
             
                    function save() {
         
     | 
| 
      
 38 
     | 
    
         
            +
                        updateStatus("Saving...")
         
     | 
| 
       28 
39 
     | 
    
         
             
                        $.post("/savepage", {
         
     | 
| 
       29 
40 
     | 
    
         
             
                            "path": "{{path}}",
         
     | 
| 
       30 
41 
     | 
    
         
             
                            "content": $("#solutus-content").html()
         
     | 
| 
       31 
42 
     | 
    
         
             
                        }, function(response) {
         
     | 
| 
       32 
43 
     | 
    
         
             
                            console.log(response);
         
     | 
| 
      
 44 
     | 
    
         
            +
                            updateStatus("Saved.");
         
     | 
| 
       33 
45 
     | 
    
         
             
                        });
         
     | 
| 
       34 
46 
     | 
    
         
             
                    }
         
     | 
| 
       35 
47 
     | 
    
         | 
| 
       36 
48 
     | 
    
         
             
                    $("#solutus-save-button").click(save);
         
     | 
| 
      
 49 
     | 
    
         
            +
                    $("#solutus-content").keydown(function() {
         
     | 
| 
      
 50 
     | 
    
         
            +
                        updateStatus("Unsaved changes.")
         
     | 
| 
      
 51 
     | 
    
         
            +
                    })
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    updateStatus("Saved.");
         
     | 
| 
       37 
54 
     | 
    
         
             
                </script>
         
     | 
| 
       38 
55 
     | 
    
         
             
            </body>
         
     | 
| 
       39 
56 
     | 
    
         
             
            </html>
         
     | 
    
        data/resources/index.html
    CHANGED
    
    | 
         @@ -16,12 +16,17 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
                    h1, h2, h3 {
         
     | 
| 
       17 
17 
     | 
    
         
             
                        line-height:1.2
         
     | 
| 
       18 
18 
     | 
    
         
             
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    a {
         
     | 
| 
      
 21 
     | 
    
         
            +
                        text-decoration: none;
         
     | 
| 
      
 22 
     | 
    
         
            +
                        color: #4286f4;
         
     | 
| 
      
 23 
     | 
    
         
            +
                    }
         
     | 
| 
       19 
24 
     | 
    
         
             
                </style>
         
     | 
| 
       20 
25 
     | 
    
         
             
            </head>
         
     | 
| 
       21 
26 
     | 
    
         | 
| 
       22 
27 
     | 
    
         
             
            <body>
         
     | 
| 
       23 
28 
     | 
    
         
             
                <h1>Editing {{name}}</h1>
         
     | 
| 
       24 
     | 
    
         
            -
                <p 
     | 
| 
      
 29 
     | 
    
         
            +
                <p>[<a href="/">View Site</a>]</p>
         
     | 
| 
       25 
30 
     | 
    
         
             
                <p>
         
     | 
| 
       26 
31 
     | 
    
         
             
                    <form method="get" action="/editpage">
         
     | 
| 
       27 
32 
     | 
    
         
             
                        <fieldset>
         
     | 
| 
         @@ -49,5 +54,8 @@ 
     | 
|
| 
       49 
54 
     | 
    
         
             
                        </fieldset>
         
     | 
| 
       50 
55 
     | 
    
         
             
                    </form>
         
     | 
| 
       51 
56 
     | 
    
         
             
                </p>
         
     | 
| 
      
 57 
     | 
    
         
            +
                <p style="text-align: center;">
         
     | 
| 
      
 58 
     | 
    
         
            +
                    <small>Powered by <a href="https://github.com/jeromew21/solutus">Solutus</a></small>
         
     | 
| 
      
 59 
     | 
    
         
            +
                </p>
         
     | 
| 
       52 
60 
     | 
    
         
             
            </body>
         
     | 
| 
       53 
61 
     | 
    
         
             
            </html>
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 3 
     | 
    
         
            +
                <title>Log in to edit</title>
         
     | 
| 
      
 4 
     | 
    
         
            +
                <style type="text/css">
         
     | 
| 
      
 5 
     | 
    
         
            +
                    body {
         
     | 
| 
      
 6 
     | 
    
         
            +
                        margin:40px auto;
         
     | 
| 
      
 7 
     | 
    
         
            +
                        background-color: #eeeeee;
         
     | 
| 
      
 8 
     | 
    
         
            +
                        max-width:650px;
         
     | 
| 
      
 9 
     | 
    
         
            +
                        line-height:1.6;
         
     | 
| 
      
 10 
     | 
    
         
            +
                        font-size:18px;
         
     | 
| 
      
 11 
     | 
    
         
            +
                        color:#444;
         
     | 
| 
      
 12 
     | 
    
         
            +
                        padding:0 10px;
         
     | 
| 
      
 13 
     | 
    
         
            +
                        font-family: "Segoe UI", sans-serif;
         
     | 
| 
      
 14 
     | 
    
         
            +
                    }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    h1, h2, h3 {
         
     | 
| 
      
 17 
     | 
    
         
            +
                        line-height:1.2
         
     | 
| 
      
 18 
     | 
    
         
            +
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
                </style>
         
     | 
| 
      
 20 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 23 
     | 
    
         
            +
                <h1>Login</h1>
         
     | 
| 
      
 24 
     | 
    
         
            +
                {{message}}
         
     | 
| 
      
 25 
     | 
    
         
            +
                <form method="post" action="/login">
         
     | 
| 
      
 26 
     | 
    
         
            +
                    <p>Password: <input type="password" name="password" />
         
     | 
| 
      
 27 
     | 
    
         
            +
                </form>
         
     | 
| 
      
 28 
     | 
    
         
            +
            </body>
         
     | 
| 
      
 29 
     | 
    
         
            +
            </html>
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: solutus
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jerome Wei
         
     | 
| 
         @@ -79,6 +79,7 @@ files: 
     | 
|
| 
       79 
79 
     | 
    
         
             
            - resources/editBlog.html
         
     | 
| 
       80 
80 
     | 
    
         
             
            - resources/editPage.html
         
     | 
| 
       81 
81 
     | 
    
         
             
            - resources/index.html
         
     | 
| 
      
 82 
     | 
    
         
            +
            - resources/login.html
         
     | 
| 
       82 
83 
     | 
    
         
             
            homepage: https://github.com/jeromew21/solutus
         
     | 
| 
       83 
84 
     | 
    
         
             
            licenses:
         
     | 
| 
       84 
85 
     | 
    
         
             
            - MIT
         
     |