diff --git a/customize.dist/cryptofist_small.png b/customize.dist/cryptofist_small.png new file mode 100644 index 000000000..14950b578 Binary files /dev/null and b/customize.dist/cryptofist_small.png differ diff --git a/customize.dist/index.css b/customize.dist/index.css index 8408a126f..9be8bfa50 100644 --- a/customize.dist/index.css +++ b/customize.dist/index.css @@ -1489,15 +1489,10 @@ h6 { a { cursor: pointer; - color: #35D7BB; + color: rgb(39, 176, 0); text-decoration: none } -a:hover,a:focus { - border-bottom-color: #35D7BB; - color: #dff9f4 -} - img { height: auto; max-width: 100% diff --git a/customize.dist/index.html b/customize.dist/index.html index 7d0bb9c75..6167282c6 100644 --- a/customize.dist/index.html +++ b/customize.dist/index.html @@ -20,8 +20,9 @@ margin-right: 5px; margin-left: 5px; } - .buttons h5 { - margin-bottom: 10px; + .buttons { + margin-bottom: 50px; + margin-top: 20px; } .button { padding: 2px 6px 2px 6px; @@ -30,48 +31,140 @@ border-bottom: 1px solid #333333; border-left: 1px solid #CCCCCC; } + + table.scroll { + /* width: 100%; */ /* Optional */ + /* border-collapse: collapse; */ + border-spacing: 0; + border: 2px solid black; + margin-top: 20px; + margin-bottom: 20px; + } + + table.scroll tbody, + table.scroll thead { display: block; } + + table.scroll tbody { + height: 100px; + overflow-y: auto; + overflow-x: hidden; + } + + tbody { border-top: 2px solid black; } + + tbody td, thead th { + /* width: 20%; */ /* Optional */ + border-right: 1px solid black; + /* white-space: nowrap; */ + padding-top: 0px; + padding-bottom: 0px; + padding-right: 20px; + } + + tbody td:last-child, thead th:last-child { + border-right: none; + } + Fork me on GitHub
-

CryptPad: Unity is Strength - Collaboration is Key

+
+ +

Unity is Strength - Collaboration is Key

+

CryptPad is the zero knowledge realtime collaborative editor. Encryption carried out in your web browser protects the data from the server, the cloud - and the NSA. This project uses the CKEditor Visual Editor and the ChainPad realtime - engine. The secret key is stored in the URL fragment identifier which is never sent to - the server but is available to javascript so by sharing the URL, you give authorization - to others who want to participate.

-

Security

-

CryptPad is private not anonymous. Privacy protects your data, anonymity protects you. - As such, it is possible for a collaborator on the pad to include some silly/ugly/nasty things - in a CryptPad such as an image which reveals your IP address when your browser automatically - loads it or a script which plays Rick Asleys's greatest hits. It is acceptable for anyone - who does not have the key to be able to change anything in the pad or add anything, even the - server.

-

The server does have a certain power, it can send you evil javascript which does the wrong - thing (leaks the key or the data back to the server or to someone else). This is however an - active attack which makes it detectable. The NSA really hates doing these because they might - get caught and laughed at and humiliated in front of the whole world (again). If you're making - the NSA mad enough for them to use an active attack against you, Great Success Highfive, now take - the battery out of your computer before it spawns Agent Smith.

+ and the NSA. This project uses the CKEditor Visual Editor + the ChainPad realtime engine and now + jQuery.sheet for realtime spreadsheet + editing! The secret encryption key is stored in the URL + fragment identifier which is + never sent to the server but is available to javascript so by sharing the URL, you give + authorization to others who want to participate.

+ +

How It Works

+

CryptPad uses a varient of the + Operational transformation + algorithm which is able to find distributed consensus using a Nakamoto Blockchain, a construct + popularized by Bitcoin. This way the + algorithm can avoid the need for a central server to resolve Operational Transform Edit + Conflicts and without the need for resolving conflicts, the server can be kept unaware of the + content which is being edited on the pad.

+ +

NOTE Pads and spreadsheets will be removed after 30 days of inactivity

- + +
Try it out!
+ + + + + +
+ +
diff --git a/www/common/toolbar.js b/www/common/toolbar.js index 039649940..e53e638ea 100644 --- a/www/common/toolbar.js +++ b/www/common/toolbar.js @@ -157,6 +157,26 @@ define([ lagElement.textContent = lagMsg; }; + // this is a little hack, it should go in it's own file. + var rememberPad = function () { + var recentPadsStr = localStorage['CryptPad_RECENTPADS']; + var recentPads = []; + if (recentPadsStr) { recentPads = JSON.parse(recentPadsStr); } + if (window.location.href.indexOf('#') === -1) { return; } + var now = new Date(); + var out = []; + for (var i = recentPads.length; i >= 0; i--) { + if (recentPads[i] && + now.getTime() - recentPads[i][1] < (1000*60*60*24*30) && + recentPads[i][0] !== window.location.href) + { + out.push(recentPads[i]); + } + } + out.push([window.location.href, now.getTime()]); + localStorage['CryptPad_RECENTPADS'] = JSON.stringify(out); + } + var create = function ($container, myUserName, realtime) { var toolbar = createRealtimeToolbar($container); createEscape(toolbar.find('.rtwysiwyg-toolbar-leftside')); @@ -164,6 +184,8 @@ define([ var spinner = createSpinner(toolbar.find('.rtwysiwyg-toolbar-rightside')); var lagElement = createLagElement(toolbar.find('.rtwysiwyg-toolbar-rightside')); + rememberPad(); + var connected = false; realtime.onUserListChange(function (userList) {