sn-revisions 0.1.0
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/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +37 -0
- data/app/assets/config/revisions_manifest.js +2 -0
- data/app/assets/javascripts/revisions/application.js +13 -0
- data/app/assets/javascripts/revisions/extension.js +2 -0
- data/app/assets/javascripts/revisions/home.js +2 -0
- data/app/assets/javascripts/revisions/items.js +2 -0
- data/app/assets/javascripts/revisions/revisions.js +2 -0
- data/app/assets/stylesheets/revisions/application.css +32 -0
- data/app/assets/stylesheets/revisions/extension.css +4 -0
- data/app/assets/stylesheets/revisions/home.css.scss +19 -0
- data/app/assets/stylesheets/revisions/items.css +4 -0
- data/app/assets/stylesheets/revisions/revisions.css +4 -0
- data/app/controllers/revisions/application_controller.rb +25 -0
- data/app/controllers/revisions/extension_controller.rb +46 -0
- data/app/controllers/revisions/home_controller.rb +24 -0
- data/app/controllers/revisions/items_controller.rb +20 -0
- data/app/controllers/revisions/revisions_controller.rb +17 -0
- data/app/helpers/revisions/application_helper.rb +4 -0
- data/app/helpers/revisions/extension_helper.rb +4 -0
- data/app/helpers/revisions/home_helper.rb +4 -0
- data/app/helpers/revisions/items_helper.rb +4 -0
- data/app/helpers/revisions/revisions_helper.rb +4 -0
- data/app/jobs/revisions/application_job.rb +4 -0
- data/app/models/revisions/application_record.rb +5 -0
- data/app/models/revisions/item.rb +37 -0
- data/app/models/revisions/revision.rb +5 -0
- data/app/models/revisions/user.rb +6 -0
- data/app/views/layouts/revisions/application.html.erb +14 -0
- data/app/views/revisions/home/index.html.haml +52 -0
- data/config/routes.rb +11 -0
- data/db/migrate/20170211000200_create_revisions_items.rb +12 -0
- data/db/migrate/20170211000426_create_revisions_revisions.rb +15 -0
- data/db/migrate/20170211001350_create_revisions_users.rb +8 -0
- data/lib/revisions/engine.rb +8 -0
- data/lib/revisions/version.rb +3 -0
- data/lib/revisions.rb +6 -0
- data/lib/tasks/revisions_tasks.rake +4 -0
- metadata +99 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4f460ba8848953e112bd65cce86087f9cbc94599
|
4
|
+
data.tar.gz: 71e86814e0c89437dc81b9394bd21262583c3cad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b62494241c021ad1ef98976bce8b8b9729177055523be5905b7299a4cca67425523feb723b773070679e1bb6b4807444fbc84defd2fc6af0572c995b0a6b08f9
|
7
|
+
data.tar.gz: fa2840c85d43b55fdb35af2ef8530bde23558374c0d54c90fcd4f8a2d6331ae76ace870056e19581b8a1f868adeedd420b557abd20cf8b0c1fd5efe92f959dae
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2017
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Revisions
|
2
|
+
Short description and motivation.
|
3
|
+
|
4
|
+
## Usage
|
5
|
+
How to use my plugin.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'revisions'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
```bash
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
```bash
|
21
|
+
$ gem install revisions
|
22
|
+
```
|
23
|
+
|
24
|
+
## Contributing
|
25
|
+
Contribution directions go here.
|
26
|
+
|
27
|
+
## License
|
28
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Revisions'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
require 'bundler/gem_tasks'
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'lib'
|
31
|
+
t.libs << 'test'
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
33
|
+
t.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
task default: :test
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
16
|
+
|
17
|
+
html, body {
|
18
|
+
font-family: sans-serif;
|
19
|
+
-webkit-font-smoothing: antialiased;
|
20
|
+
margin: 20px;
|
21
|
+
}
|
22
|
+
|
23
|
+
h1 {
|
24
|
+
margin-top: 2rem;
|
25
|
+
margin-bottom: 1rem;
|
26
|
+
font-weight: normal;
|
27
|
+
color: black;
|
28
|
+
|
29
|
+
border-bottom: 1px solid black;
|
30
|
+
font-size: 2em;
|
31
|
+
margin: 0.67em 0;
|
32
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/*
|
2
|
+
Place all the styles related to the matching controller here.
|
3
|
+
They will automatically be included in application.css.
|
4
|
+
*/
|
5
|
+
|
6
|
+
.button-link {
|
7
|
+
border: 0;
|
8
|
+
background-color: black;
|
9
|
+
color: white;
|
10
|
+
padding: 10px;
|
11
|
+
font-weight: bold;
|
12
|
+
font-size: 15px;
|
13
|
+
min-width: 150px;
|
14
|
+
cursor: pointer;
|
15
|
+
|
16
|
+
&:hover {
|
17
|
+
text-decoration: underline;
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Revisions
|
2
|
+
class ApplicationController < ActionController::Base
|
3
|
+
protect_from_forgery with: :null_session
|
4
|
+
attr_accessor :current_user
|
5
|
+
|
6
|
+
before_action :authenticate_user
|
7
|
+
|
8
|
+
def authenticate_user
|
9
|
+
user = Revisions::User.find(params[:uid])
|
10
|
+
if user.key != params[:key]
|
11
|
+
render_unauthorized
|
12
|
+
return
|
13
|
+
end
|
14
|
+
self.current_user = user
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_url(path)
|
18
|
+
"#{Revisions.mount_host}/#{params[:user_key]}/#{params[:email]}/#{Revisions.mount_name}/#{path}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def render_unauthorized
|
22
|
+
render :json => {:error => {:tag => "unauthorized", :message => "You are unauthorized to access this page."}}, :status => 401
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_dependency "revisions/application_controller"
|
2
|
+
|
3
|
+
module Revisions
|
4
|
+
class ExtensionController < ApplicationController
|
5
|
+
|
6
|
+
def index
|
7
|
+
key = params[:key]
|
8
|
+
actions = []
|
9
|
+
|
10
|
+
item_uuid = params[:item_uuid]
|
11
|
+
if item_uuid
|
12
|
+
item = current_user.items.find_by_item_uuid(item_uuid)
|
13
|
+
end
|
14
|
+
|
15
|
+
if item
|
16
|
+
item.revisions.each_with_index do |rev, index|
|
17
|
+
action = {
|
18
|
+
:label => "#{rev.num} - #{rev.created_at.strftime('%a %b %d, %Y at %I:%M%p %Z')}" + (index == 0 ? " (current)" : ""),
|
19
|
+
:desc => "",
|
20
|
+
:verb => "nested",
|
21
|
+
:context => "Item",
|
22
|
+
:content_types => ["Note"],
|
23
|
+
:subactions => [
|
24
|
+
{
|
25
|
+
:label => "Preview",
|
26
|
+
:desc => "",
|
27
|
+
:url => build_url("#{rev.id}?uid=#{params[:uid]}&key=#{params[:key]}"),
|
28
|
+
:verb => "render",
|
29
|
+
},
|
30
|
+
{
|
31
|
+
:label => "Restore",
|
32
|
+
:desc => "",
|
33
|
+
:url => build_url("#{rev.id}?uid=#{params[:uid]}&key=#{params[:key]}"),
|
34
|
+
:verb => "get",
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
actions.push(action)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
render :json => {:name => "Note History", :supported_types => [:Note], :actions => actions}
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_dependency "revisions/application_controller"
|
2
|
+
|
3
|
+
module Revisions
|
4
|
+
class HomeController < ApplicationController
|
5
|
+
|
6
|
+
skip_before_action :authenticate_user
|
7
|
+
|
8
|
+
def index
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
def register
|
13
|
+
user = Revisions::User.new
|
14
|
+
user.key = Digest::SHA256.hexdigest(SecureRandom.random_bytes(32))
|
15
|
+
user.save
|
16
|
+
|
17
|
+
@server_url = build_url("items?key=#{user.key}&uid=#{user.id}")
|
18
|
+
@client_url = build_url("ext?key=#{user.key}&uid=#{user.id}")
|
19
|
+
|
20
|
+
render "index"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_dependency "revisions/application_controller"
|
2
|
+
|
3
|
+
module Revisions
|
4
|
+
class ItemsController < ApplicationController
|
5
|
+
|
6
|
+
def save
|
7
|
+
items = params[:items]
|
8
|
+
items.each do |item_hash|
|
9
|
+
item = current_user.items.find_or_create_by(:item_uuid => item_hash["uuid"])
|
10
|
+
item.add_revision(item_hash["content"], item_hash["enc_item_key"], item_hash["auth_hash"])
|
11
|
+
item.condense_history
|
12
|
+
if item.content_type == nil
|
13
|
+
item.content_type = item_hash["content_type"]
|
14
|
+
item.save
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_dependency "revisions/application_controller"
|
2
|
+
|
3
|
+
module Revisions
|
4
|
+
class RevisionsController < ApplicationController
|
5
|
+
|
6
|
+
def show
|
7
|
+
revision = Revision.find(params[:id])
|
8
|
+
if revision.item.user_id != current_user.id
|
9
|
+
render_unauthorized
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
13
|
+
render :json => {:item => revision.as_json.merge({:uuid => revision.item.item_uuid, :content_type => revision.item.content_type})}
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Revisions
|
2
|
+
class Item < ApplicationRecord
|
3
|
+
|
4
|
+
has_many :revisions, -> { order 'created_at desc' }
|
5
|
+
|
6
|
+
def add_revision(content, item_key, auth_hash)
|
7
|
+
revision = self.revisions.new
|
8
|
+
revision.content = content
|
9
|
+
revision.enc_item_key = item_key
|
10
|
+
revision.auth_hash = auth_hash
|
11
|
+
revision.save
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def condense_history
|
16
|
+
# revisions past 30 days are limited to 1 revision per day
|
17
|
+
# any revision within 30 days is capped to 30-days_from_today revisions per day
|
18
|
+
# so if there are 50 revisions from 5 days ago, 50 - (30-5) = 25 revisions are allowed
|
19
|
+
days = 30
|
20
|
+
min_revs = 3
|
21
|
+
days.times do |days_from_today|
|
22
|
+
date = Time.now.utc.to_date - days_from_today
|
23
|
+
num_revs_allowed = days - days_from_today + min_revs
|
24
|
+
revs = self.revisions.where(:created_at => date.midnight..date.end_of_day).pluck(:id)
|
25
|
+
if revs.length > num_revs_allowed
|
26
|
+
num_to_remove = revs.length - num_revs_allowed
|
27
|
+
num_to_remove.times do |time|
|
28
|
+
index = revs.length/2 - 1
|
29
|
+
Revision.destroy(revs[index])
|
30
|
+
revs.delete_at(index)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Revisions</title>
|
5
|
+
<%= stylesheet_link_tag "revisions/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "revisions/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
%h1 Note History Extension for Standard Notes
|
2
|
+
%p The note history extension keeps track of changes, and allows you to restore a note to a previous version.
|
3
|
+
|
4
|
+
- if @server_url
|
5
|
+
%p
|
6
|
+
%strong
|
7
|
+
Your secret
|
8
|
+
%span{:style => "text-decoration:underline;"} server extension
|
9
|
+
URL is:
|
10
|
+
= @server_url
|
11
|
+
%p
|
12
|
+
%strong
|
13
|
+
Your secret
|
14
|
+
%span{:style => "text-decoration:underline;"} app extension
|
15
|
+
URL is:
|
16
|
+
= @client_url
|
17
|
+
- else
|
18
|
+
= button_to "Generate URLs", {:controller => "home", :action => "register", :method => "post"}, {:class => "button-link"}
|
19
|
+
%h3 Instructions
|
20
|
+
|
21
|
+
%p
|
22
|
+
%strong To get started:
|
23
|
+
%ol
|
24
|
+
%li Press "Generate URLs" above to generate your server and app extension URLs.
|
25
|
+
|
26
|
+
%p Once you've generated your URLs, it's time to register the extensions.
|
27
|
+
|
28
|
+
%p
|
29
|
+
%strong To register your server extension:
|
30
|
+
%ol
|
31
|
+
%li In the Standard Notes app, find and click "Account" in the lower left corner.
|
32
|
+
%li Click "Standard File Dashboard".
|
33
|
+
%li After logging in, click "Extensions" in the left panel.
|
34
|
+
%li In the add new extension section, paste in the server secret URL, and submit.
|
35
|
+
%p Registering the server extension allows your main Standard File server to forward encrypted data to the Note History extension server.
|
36
|
+
|
37
|
+
%p
|
38
|
+
%strong To register your app extension:
|
39
|
+
%ol
|
40
|
+
%li In the Standard Notes app, find and click "Extensions" in the lower left corner.
|
41
|
+
%li Click "Add new extension".
|
42
|
+
%li Paste in the app secret URL and submit.
|
43
|
+
|
44
|
+
%p The app extension allows you to view previous versions of the note.
|
45
|
+
|
46
|
+
%p
|
47
|
+
%strong To restore a note to a previous version:
|
48
|
+
|
49
|
+
%ol
|
50
|
+
%li In the Standard Notes app, select the note you'd like to revisit.
|
51
|
+
%li Click "Extensions" under the note title.
|
52
|
+
%li Here you'll see all of the revisions for this note. You can preview the content of each version before choosing to restore to that version.
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateRevisionsItems < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :revisions_items do |t|
|
4
|
+
t.string :item_uuid, limit: 36, null: false
|
5
|
+
t.string :content_type
|
6
|
+
t.integer :user_id
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :revisions_items, :item_uuid
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateRevisionsRevisions < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :revisions_revisions do |t|
|
4
|
+
t.text :content, :limit => 16.megabytes - 1
|
5
|
+
t.string :enc_item_key
|
6
|
+
t.string :auth_hash
|
7
|
+
|
8
|
+
t.integer :item_id
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
|
12
|
+
add_index :revisions_revisions, :item_id
|
13
|
+
add_index :revisions_revisions, :created_at
|
14
|
+
end
|
15
|
+
end
|
data/lib/revisions.rb
ADDED
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sn-revisions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Standard Notes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.0.1
|
27
|
+
description: The Note History extension for Standard Notes allows you to track changes
|
28
|
+
to your notes, and restore them to previous versions.
|
29
|
+
email:
|
30
|
+
- hello@standardnotes.org
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- MIT-LICENSE
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- app/assets/config/revisions_manifest.js
|
39
|
+
- app/assets/javascripts/revisions/application.js
|
40
|
+
- app/assets/javascripts/revisions/extension.js
|
41
|
+
- app/assets/javascripts/revisions/home.js
|
42
|
+
- app/assets/javascripts/revisions/items.js
|
43
|
+
- app/assets/javascripts/revisions/revisions.js
|
44
|
+
- app/assets/stylesheets/revisions/application.css
|
45
|
+
- app/assets/stylesheets/revisions/extension.css
|
46
|
+
- app/assets/stylesheets/revisions/home.css.scss
|
47
|
+
- app/assets/stylesheets/revisions/items.css
|
48
|
+
- app/assets/stylesheets/revisions/revisions.css
|
49
|
+
- app/controllers/revisions/application_controller.rb
|
50
|
+
- app/controllers/revisions/extension_controller.rb
|
51
|
+
- app/controllers/revisions/home_controller.rb
|
52
|
+
- app/controllers/revisions/items_controller.rb
|
53
|
+
- app/controllers/revisions/revisions_controller.rb
|
54
|
+
- app/helpers/revisions/application_helper.rb
|
55
|
+
- app/helpers/revisions/extension_helper.rb
|
56
|
+
- app/helpers/revisions/home_helper.rb
|
57
|
+
- app/helpers/revisions/items_helper.rb
|
58
|
+
- app/helpers/revisions/revisions_helper.rb
|
59
|
+
- app/jobs/revisions/application_job.rb
|
60
|
+
- app/models/revisions/application_record.rb
|
61
|
+
- app/models/revisions/item.rb
|
62
|
+
- app/models/revisions/revision.rb
|
63
|
+
- app/models/revisions/user.rb
|
64
|
+
- app/views/layouts/revisions/application.html.erb
|
65
|
+
- app/views/revisions/home/index.html.haml
|
66
|
+
- config/routes.rb
|
67
|
+
- db/migrate/20170211000200_create_revisions_items.rb
|
68
|
+
- db/migrate/20170211000426_create_revisions_revisions.rb
|
69
|
+
- db/migrate/20170211001350_create_revisions_users.rb
|
70
|
+
- lib/revisions.rb
|
71
|
+
- lib/revisions/engine.rb
|
72
|
+
- lib/revisions/version.rb
|
73
|
+
- lib/tasks/revisions_tasks.rake
|
74
|
+
homepage: https://standardnotes.org
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
metadata: {}
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
requirements: []
|
93
|
+
rubyforge_project:
|
94
|
+
rubygems_version: 2.4.8
|
95
|
+
signing_key:
|
96
|
+
specification_version: 4
|
97
|
+
summary: The Note History extension for Standard Notes allows you to track changes
|
98
|
+
to your notes, and restore them to previous versions.
|
99
|
+
test_files: []
|