remove sharing
This commit is contained in:
@@ -87,7 +87,6 @@ module.exports = function(grunt) {
|
|||||||
'vendor/assets/bower_components/lodash/dist/lodash.min.js',
|
'vendor/assets/bower_components/lodash/dist/lodash.min.js',
|
||||||
'vendor/assets/bower_components/restangular/dist/restangular.js',
|
'vendor/assets/bower_components/restangular/dist/restangular.js',
|
||||||
'vendor/assets/bower_components/marked/lib/marked.js',
|
'vendor/assets/bower_components/marked/lib/marked.js',
|
||||||
'vendor/assets/bower_components/ng-dialog/js/ngDialog.min.js',
|
|
||||||
'vendor/assets/javascripts/crypto/*.js'
|
'vendor/assets/javascripts/crypto/*.js'
|
||||||
],
|
],
|
||||||
dest: 'vendor/assets/javascripts/lib.js',
|
dest: 'vendor/assets/javascripts/lib.js',
|
||||||
@@ -100,9 +99,7 @@ module.exports = function(grunt) {
|
|||||||
|
|
||||||
css: {
|
css: {
|
||||||
src: [
|
src: [
|
||||||
'vendor/assets/stylesheets/app.css',
|
'vendor/assets/stylesheets/app.css'
|
||||||
'vendor/assets/bower_components/ng-dialog/css/ngDialog.css',
|
|
||||||
'vendor/assets/bower_components/ng-dialog/css/ngDialog-theme-default.css',
|
|
||||||
],
|
],
|
||||||
dest: 'vendor/assets/stylesheets/app.css'
|
dest: 'vendor/assets/stylesheets/app.css'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ if(window.crypto.subtle) {
|
|||||||
|
|
||||||
angular.module('app.frontend', [
|
angular.module('app.frontend', [
|
||||||
'ui.router',
|
'ui.router',
|
||||||
'restangular',
|
'restangular'
|
||||||
'ngDialog'
|
|
||||||
])
|
])
|
||||||
|
|
||||||
.config(function (RestangularProvider, apiControllerProvider) {
|
.config(function (RestangularProvider, apiControllerProvider) {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
class BaseCtrl {
|
class BaseCtrl {
|
||||||
constructor($rootScope, modelManager, apiController, dbManager) {
|
constructor($rootScope, modelManager, apiController, dbManager) {
|
||||||
apiController.getCurrentUser(function(){});
|
|
||||||
dbManager.openDatabase(null, function(){
|
dbManager.openDatabase(null, function(){
|
||||||
// new database, delete syncToken so that items can be refetched entirely from server
|
// new database, delete syncToken so that items can be refetched entirely from server
|
||||||
apiController.clearSyncToken();
|
apiController.clearSyncToken();
|
||||||
|
|||||||
@@ -171,7 +171,6 @@ angular.module('app.frontend')
|
|||||||
this.onContentFocus = function() {
|
this.onContentFocus = function() {
|
||||||
this.showSampler = false;
|
this.showSampler = false;
|
||||||
$rootScope.$broadcast("editorFocused");
|
$rootScope.$broadcast("editorFocused");
|
||||||
this.editingUrl = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onNameBlur = function() {
|
this.onNameBlur = function() {
|
||||||
@@ -202,64 +201,8 @@ angular.module('app.frontend')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.editUrlPressed = function() {
|
|
||||||
this.showMenu = false;
|
|
||||||
var url = this.publicUrlForNote(this.note);
|
|
||||||
url = url.replace(this.note.presentation_name, "");
|
|
||||||
this.url = {base: url, token : this.note.presentation_name};
|
|
||||||
this.editingUrl = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.saveUrl = function($event) {
|
|
||||||
$event.target.blur();
|
|
||||||
|
|
||||||
var original = this.note.presentation_name;
|
|
||||||
this.note.presentation_name = this.url.token;
|
|
||||||
this.note.setDirty(true);
|
|
||||||
|
|
||||||
apiController.sync(function(response){
|
|
||||||
if(response && response.error) {
|
|
||||||
this.note.presentation_name = original;
|
|
||||||
this.url.token = original;
|
|
||||||
alert("This URL is not available.");
|
|
||||||
} else {
|
|
||||||
this.editingUrl = false;
|
|
||||||
}
|
|
||||||
}.bind(this))
|
|
||||||
}
|
|
||||||
|
|
||||||
this.shareNote = function() {
|
|
||||||
|
|
||||||
function openInNewTab(url) {
|
|
||||||
var a = document.createElement("a");
|
|
||||||
a.target = "_blank";
|
|
||||||
a.href = url;
|
|
||||||
a.click();
|
|
||||||
}
|
|
||||||
|
|
||||||
apiController.shareItem(this.note, function(note){
|
|
||||||
openInNewTab(this.publicUrlForNote(note));
|
|
||||||
}.bind(this))
|
|
||||||
this.showMenu = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.unshareNote = function() {
|
|
||||||
apiController.unshareItem(this.note, function(note){
|
|
||||||
|
|
||||||
})
|
|
||||||
this.showMenu = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.publicUrlForNote = function() {
|
|
||||||
return this.note.presentationURL();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.clickedMenu = function() {
|
this.clickedMenu = function() {
|
||||||
if(this.note.locked) {
|
this.showMenu = !this.showMenu;
|
||||||
alert("This note has been shared without an account, and can therefore not be changed.")
|
|
||||||
} else {
|
|
||||||
this.showMenu = !this.showMenu;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.deleteNote = function() {
|
this.deleteNote = function() {
|
||||||
|
|||||||
@@ -67,29 +67,6 @@ angular.module('app.frontend')
|
|||||||
this.removeTag()(this.tag);
|
this.removeTag()(this.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selectedTagShare = function() {
|
|
||||||
this.showMenu = false;
|
|
||||||
|
|
||||||
if(!apiController.isUserSignedIn()) {
|
|
||||||
alert("You must be signed in to share a tag.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.tag.all) {
|
|
||||||
alert("You cannot share the 'All' tag.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
apiController.shareItem(this.tag, function(response){})
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedTagUnshare = function() {
|
|
||||||
this.showMenu = false;
|
|
||||||
apiController.unshareItem(this.tag, function(response){
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectFirstNote = function(createNew) {
|
this.selectFirstNote = function(createNew) {
|
||||||
var visibleNotes = this.tag.notes.filter(function(note){
|
var visibleNotes = this.tag.notes.filter(function(note){
|
||||||
return note.visible;
|
return note.visible;
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
angular.module('app.frontend')
|
|
||||||
.controller('UsernameModalCtrl', function ($scope, apiController, Restangular, callback, $timeout) {
|
|
||||||
$scope.formData = {};
|
|
||||||
|
|
||||||
$scope.saveUsername = function() {
|
|
||||||
apiController.setUsername($scope.formData.username, function(response){
|
|
||||||
var username = response.username;
|
|
||||||
callback(username);
|
|
||||||
$scope.closeThisDialog();
|
|
||||||
})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -115,15 +115,6 @@ class Item {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
referencesAffectedBySharingChange() {
|
|
||||||
// should be overriden to determine which references should be decrypted/encrypted
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
isPublic() {
|
|
||||||
return this.presentation_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
isEncrypted() {
|
isEncrypted() {
|
||||||
return this.encryptionEnabled() && this.content.substring(0, 3) === '001' ? true : false;
|
return this.encryptionEnabled() && this.content.substring(0, 3) === '001' ? true : false;
|
||||||
}
|
}
|
||||||
@@ -131,9 +122,4 @@ class Item {
|
|||||||
encryptionEnabled() {
|
encryptionEnabled() {
|
||||||
return this.enc_item_key;
|
return this.enc_item_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
presentationURL() {
|
|
||||||
return this.presentation_url;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,19 +65,6 @@ class Note extends Item {
|
|||||||
return this.tags;
|
return this.tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
referencesAffectedBySharingChange() {
|
|
||||||
return super.referencesAffectedBySharingChange();
|
|
||||||
}
|
|
||||||
|
|
||||||
get hasOnePublicTag() {
|
|
||||||
for (var tag of this.tags) {
|
|
||||||
if(tag.isPublic()) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
safeText() {
|
safeText() {
|
||||||
return this.text || "";
|
return this.text || "";
|
||||||
}
|
}
|
||||||
@@ -90,14 +77,6 @@ class Note extends Item {
|
|||||||
return {uuid: this.uuid}
|
return {uuid: this.uuid}
|
||||||
}
|
}
|
||||||
|
|
||||||
isSharedIndividually() {
|
|
||||||
return this.presentation_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
isPublic() {
|
|
||||||
return super.isPublic() || this.hasOnePublicTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
get content_type() {
|
get content_type() {
|
||||||
return "Note";
|
return "Note";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,8 +62,4 @@ class Tag extends Item {
|
|||||||
allReferencedObjects() {
|
allReferencedObjects() {
|
||||||
return this.notes;
|
return this.notes;
|
||||||
}
|
}
|
||||||
|
|
||||||
referencesAffectedBySharingChange() {
|
|
||||||
return this.notes;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,13 +20,22 @@ angular.module('app.frontend')
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this.$get = function($rootScope, Restangular, modelManager, ngDialog, dbManager) {
|
this.$get = function($rootScope, Restangular, modelManager, dbManager) {
|
||||||
return new ApiController($rootScope, Restangular, modelManager, ngDialog, dbManager);
|
return new ApiController($rootScope, Restangular, modelManager, dbManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ApiController($rootScope, Restangular, modelManager, ngDialog, dbManager) {
|
function ApiController($rootScope, Restangular, modelManager, dbManager) {
|
||||||
|
|
||||||
this.user = {};
|
var userData = localStorage.getItem("user");
|
||||||
|
if(userData) {
|
||||||
|
this.user = JSON.parse(userData);
|
||||||
|
} else {
|
||||||
|
// legacy, check for uuid
|
||||||
|
var idData = localStorage.getItem("uuid");
|
||||||
|
if(idData) {
|
||||||
|
this.user = {uuid: idData};
|
||||||
|
}
|
||||||
|
}
|
||||||
this.syncToken = localStorage.getItem("syncToken");
|
this.syncToken = localStorage.getItem("syncToken");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -64,10 +73,6 @@ angular.module('app.frontend')
|
|||||||
return localStorage.getItem("jwt");
|
return localStorage.getItem("jwt");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.userId = function() {
|
|
||||||
return localStorage.getItem("uuid");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.getAuthParamsForEmail = function(email, callback) {
|
this.getAuthParamsForEmail = function(email, callback) {
|
||||||
var request = Restangular.one("auth", "params");
|
var request = Restangular.one("auth", "params");
|
||||||
request.get({email: email}).then(function(response){
|
request.get({email: email}).then(function(response){
|
||||||
@@ -79,22 +84,6 @@ angular.module('app.frontend')
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
this.getCurrentUser = function(callback) {
|
|
||||||
if(!localStorage.getItem("jwt")) {
|
|
||||||
callback(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Restangular.one("users/current").get().then(function(response){
|
|
||||||
var user = response.plain();
|
|
||||||
_.merge(this.user, user);
|
|
||||||
callback();
|
|
||||||
}.bind(this))
|
|
||||||
.catch(function(response){
|
|
||||||
console.log("Error getting current user", response);
|
|
||||||
callback(response.data);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
this.login = function(email, password, callback) {
|
this.login = function(email, password, callback) {
|
||||||
this.getAuthParamsForEmail(email, function(authParams){
|
this.getAuthParamsForEmail(email, function(authParams){
|
||||||
if(!authParams) {
|
if(!authParams) {
|
||||||
@@ -108,7 +97,7 @@ angular.module('app.frontend')
|
|||||||
_.merge(request, params);
|
_.merge(request, params);
|
||||||
request.post().then(function(response){
|
request.post().then(function(response){
|
||||||
localStorage.setItem("jwt", response.token);
|
localStorage.setItem("jwt", response.token);
|
||||||
localStorage.setItem("uuid", response.user.uuid);
|
localStorage.setItem("user", JSON.stringify(response.user));
|
||||||
localStorage.setItem("auth_params", JSON.stringify(authParams));
|
localStorage.setItem("auth_params", JSON.stringify(authParams));
|
||||||
callback(response);
|
callback(response);
|
||||||
})
|
})
|
||||||
@@ -128,7 +117,7 @@ angular.module('app.frontend')
|
|||||||
_.merge(request, params);
|
_.merge(request, params);
|
||||||
request.post().then(function(response){
|
request.post().then(function(response){
|
||||||
localStorage.setItem("jwt", response.token);
|
localStorage.setItem("jwt", response.token);
|
||||||
localStorage.setItem("uuid", response.user.uuid);
|
localStorage.setItem("user", JSON.stringify(response.user));
|
||||||
localStorage.setItem("auth_params", JSON.stringify(_.omit(authParams, ["pw_nonce"])));
|
localStorage.setItem("auth_params", JSON.stringify(_.omit(authParams, ["pw_nonce"])));
|
||||||
callback(response);
|
callback(response);
|
||||||
})
|
})
|
||||||
@@ -189,20 +178,6 @@ angular.module('app.frontend')
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
User
|
|
||||||
*/
|
|
||||||
|
|
||||||
this.setUsername = function(username, callback) {
|
|
||||||
var request = Restangular.one("users", this.userId());
|
|
||||||
request.username = username;
|
|
||||||
request.patch().then(function(response){
|
|
||||||
this.user.username = response.username;
|
|
||||||
callback(response.plain());
|
|
||||||
}.bind(this))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Items
|
Items
|
||||||
*/
|
*/
|
||||||
@@ -329,7 +304,7 @@ angular.module('app.frontend')
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.createRequestParamsForItem = function(item, additionalFields) {
|
this.createRequestParamsForItem = function(item, additionalFields) {
|
||||||
return this.paramsForItem(item, !item.isPublic(), additionalFields, false);
|
return this.paramsForItem(item, true, additionalFields, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.paramsForExportFile = function(item, encrypted) {
|
this.paramsForExportFile = function(item, encrypted) {
|
||||||
@@ -345,8 +320,7 @@ angular.module('app.frontend')
|
|||||||
|
|
||||||
console.assert(!item.dummy, "Item is dummy, should not have gotten here.", item.dummy)
|
console.assert(!item.dummy, "Item is dummy, should not have gotten here.", item.dummy)
|
||||||
|
|
||||||
var params = {uuid: item.uuid, content_type: item.content_type,
|
var params = {uuid: item.uuid, content_type: item.content_type, deleted: item.deleted};
|
||||||
presentation_name: item.presentation_name, deleted: item.deleted};
|
|
||||||
|
|
||||||
if(encrypted) {
|
if(encrypted) {
|
||||||
this.encryptSingleItem(itemCopy, this.retrieveMk());
|
this.encryptSingleItem(itemCopy, this.retrieveMk());
|
||||||
@@ -369,47 +343,6 @@ angular.module('app.frontend')
|
|||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.shareItem = function(item, callback) {
|
|
||||||
if(!this.isUserSignedIn()) {
|
|
||||||
alert("You must be signed in to share.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var shareFn = function() {
|
|
||||||
item.presentation_name = "_auto_";
|
|
||||||
var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);
|
|
||||||
needsUpdate.forEach(function(needingUpdate){
|
|
||||||
needingUpdate.setDirty(true);
|
|
||||||
})
|
|
||||||
this.sync();
|
|
||||||
}.bind(this)
|
|
||||||
|
|
||||||
if(!this.user.username) {
|
|
||||||
ngDialog.open({
|
|
||||||
template: 'frontend/modals/username.html',
|
|
||||||
controller: 'UsernameModalCtrl',
|
|
||||||
resolve: {
|
|
||||||
callback: function() {
|
|
||||||
return shareFn;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
className: 'ngdialog-theme-default',
|
|
||||||
disableAnimation: true
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
shareFn();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.unshareItem = function(item, callback) {
|
|
||||||
item.presentation_name = null;
|
|
||||||
var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);
|
|
||||||
needsUpdate.forEach(function(needingUpdate){
|
|
||||||
needingUpdate.setDirty(true);
|
|
||||||
})
|
|
||||||
this.sync(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Import
|
Import
|
||||||
*/
|
*/
|
||||||
@@ -491,36 +424,13 @@ angular.module('app.frontend')
|
|||||||
return makeTextFile(JSON.stringify(data, null, 2 /* pretty print */));
|
return makeTextFile(JSON.stringify(data, null, 2 /* pretty print */));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Merging
|
|
||||||
*/
|
|
||||||
// this.mergeLocalDataRemotely = function(user, callback) {
|
|
||||||
// var request = Restangular.one("users", this.userId()).one("merge");
|
|
||||||
// var tags = user.tags;
|
|
||||||
// request.items = user.items;
|
|
||||||
// request.items.forEach(function(item){
|
|
||||||
// if(item.tag_id) {
|
|
||||||
// var tag = tags.filter(function(tag){return tag.uuid == item.tag_id})[0];
|
|
||||||
// item.tag_name = tag.title;
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// request.post().then(function(response){
|
|
||||||
// callback();
|
|
||||||
// localStorage.removeItem('user');
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.staticifyObject = function(object) {
|
this.staticifyObject = function(object) {
|
||||||
return JSON.parse(JSON.stringify(object));
|
return JSON.parse(JSON.stringify(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.writeItemsToLocalStorage = function(items, callback) {
|
this.writeItemsToLocalStorage = function(items, callback) {
|
||||||
var params = items.map(function(item) {
|
var params = items.map(function(item) {
|
||||||
return this.paramsForItem(item, false, ["created_at", "updated_at", "presentation_url", "dirty"], true)
|
return this.paramsForItem(item, false, ["created_at", "updated_at", "dirty"], true)
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
dbManager.saveItems(params, callback);
|
dbManager.saveItems(params, callback);
|
||||||
|
|||||||
@@ -114,72 +114,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.menu-right-container {
|
|
||||||
float: right;
|
|
||||||
margin-top: -2px;
|
|
||||||
color: white;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 70%;
|
|
||||||
overflow: hidden;
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.public-link {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 12px;
|
|
||||||
height: 20px;
|
|
||||||
text-align: right;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
color: black;
|
|
||||||
|
|
||||||
.url {
|
|
||||||
text-align: right;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 90%;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
text-decoration: underline;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.edit-url {
|
|
||||||
// float: left;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
margin-top: -3px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> .icon {
|
|
||||||
float: left;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-panel {
|
|
||||||
min-width: 255px;
|
|
||||||
text-align: left;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-right: 18px;
|
|
||||||
margin-bottom: 18px;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
.section.editor{"ng-class" => "{'fullscreen' : ctrl.fullscreen}"}
|
.section.editor{"ng-class" => "{'fullscreen' : ctrl.fullscreen}"}
|
||||||
.content
|
.content
|
||||||
-# %span.fullscreen-ghost-bar{"ng-if" => "ctrl.fullscreen"}
|
.section-title-bar.editor-heading{"ng-class" => "{'fullscreen' : ctrl.fullscreen }"}
|
||||||
.section-title-bar.editor-heading{"ng-class" => "{'shared' : ctrl.note.isPublic(), 'fullscreen' : ctrl.fullscreen }"}
|
|
||||||
.title
|
.title
|
||||||
%input.input#note-title-editor{"ng-model" => "ctrl.note.title", "ng-keyup" => "$event.keyCode == 13 && ctrl.saveTitle($event)",
|
%input.input#note-title-editor{"ng-model" => "ctrl.note.title", "ng-keyup" => "$event.keyCode == 13 && ctrl.saveTitle($event)",
|
||||||
"ng-disabled" => "ctrl.note.locked", "ng-change" => "ctrl.nameChanged()", "ng-focus" => "ctrl.onNameFocus()",
|
"ng-change" => "ctrl.nameChanged()", "ng-focus" => "ctrl.onNameFocus()",
|
||||||
"select-on-click" => "true"}
|
"select-on-click" => "true"}
|
||||||
.save-status {{ctrl.noteStatus}}
|
.save-status {{ctrl.noteStatus}}
|
||||||
.section-menu
|
.section-menu
|
||||||
@@ -12,24 +11,16 @@
|
|||||||
%li.dropdown
|
%li.dropdown
|
||||||
%a.dropdown-toggle{"ng-click" => "ctrl.clickedMenu(); ctrl.showExtensions = false"}
|
%a.dropdown-toggle{"ng-click" => "ctrl.clickedMenu(); ctrl.showExtensions = false"}
|
||||||
File
|
File
|
||||||
%span.caret{"ng-if" => "!ctrl.note.locked"}
|
%span.caret
|
||||||
%span{"ng-if" => " ctrl.note.locked"}
|
|
||||||
.inline-icon.icon-lock
|
|
||||||
%span.sr-only
|
%span.sr-only
|
||||||
|
|
||||||
%ul.dropdown-menu.dropdown-menu-left.nt-dropdown-menu.dark{"ng-if" => "ctrl.showMenu && !ctrl.note.locked"}
|
%ul.dropdown-menu.dropdown-menu-left.nt-dropdown-menu.dark{"ng-if" => "ctrl.showMenu"}
|
||||||
%li{"ng-click" => "ctrl.selectedMenuItem(); ctrl.toggleFullScreen()"}
|
%li{"ng-click" => "ctrl.selectedMenuItem(); ctrl.toggleFullScreen()"}
|
||||||
.text Toggle Fullscreen
|
.text Toggle Fullscreen
|
||||||
.shortcut Cmd + O
|
.shortcut Cmd + O
|
||||||
%li{"ng-click" => "ctrl.selectedMenuItem(); ctrl.toggleMarkdown()"}
|
%li{"ng-click" => "ctrl.selectedMenuItem(); ctrl.toggleMarkdown()"}
|
||||||
.text Toggle Markdown Preview
|
.text Toggle Markdown Preview
|
||||||
.shortcut Cmd + M
|
.shortcut Cmd + M
|
||||||
%li{"ng-if" => "!ctrl.note.isSharedIndividually()", "ng-click" => "ctrl.selectedMenuItem(); ctrl.shareNote()"}
|
|
||||||
.text Share
|
|
||||||
%li{"ng-if" => "ctrl.note.isSharedIndividually()", "ng-click" => "ctrl.selectedMenuItem(); ctrl.editUrlPressed()"}
|
|
||||||
.text Edit URL
|
|
||||||
%li{"ng-if" => "ctrl.note.isSharedIndividually()", "ng-click" => "ctrl.selectedMenuItem(); ctrl.unshareNote()"}
|
|
||||||
.text Unshare
|
|
||||||
%li{"ng-click" => "ctrl.deleteNote()"}
|
%li{"ng-click" => "ctrl.deleteNote()"}
|
||||||
.text Delete
|
.text Delete
|
||||||
%li.sep
|
%li.sep
|
||||||
@@ -45,21 +36,8 @@
|
|||||||
.panel.panel-default.info-panel{"ng-if" => "ctrl.showMarkdown"}
|
.panel.panel-default.info-panel{"ng-if" => "ctrl.showMarkdown"}
|
||||||
.panel-body{"style" => "text-align: center; color: black;"}
|
.panel-body{"style" => "text-align: center; color: black;"}
|
||||||
This editor is Markdown enabled.
|
This editor is Markdown enabled.
|
||||||
.menu-right-container
|
|
||||||
.public-link{"ng-if" => "ctrl.note.isPublic()"}
|
|
||||||
%a.url{"ng-if" => "!ctrl.editingUrl", "href" => "{{ctrl.publicUrlForNote(ctrl.note)}}", "target" => "_blank"}
|
|
||||||
%span.icon-rss.icon
|
|
||||||
%span{"ng-if" => "ctrl.note.isSharedIndividually()"}{{ctrl.publicUrlForNote(note)}}
|
|
||||||
.edit-url{"ng-if" => "ctrl.editingUrl"}
|
|
||||||
{{ctrl.url.base}}
|
|
||||||
%input.input{"ng-model" => "ctrl.url.token", "ng-keyup" => "$event.keyCode == 13 && ctrl.saveUrl($event)",
|
|
||||||
"ng-disabled" => "ctrl.note.locked", "ng-change" => "ctrl.urlChanged()", "ng-focus" => "ctrl.onUrlFocus()",
|
|
||||||
"select-on-click" => "true", "autofocus" => "true"}
|
|
||||||
|
|
||||||
.editor-content{"ng-class" => "{'shared' : ctrl.note.isPublic(), 'fullscreen' : ctrl.fullscreen }"}
|
.editor-content{"ng-class" => "{'fullscreen' : ctrl.fullscreen }"}
|
||||||
.sampler-container{"ng-if" => "ctrl.showSampler", "ng-click" => "ctrl.focusEditor()"}
|
%textarea.editable#note-text-editor{"ng-class" => "{'fullscreen' : ctrl.fullscreen }", "ng-show" => "ctrl.editorMode == 'edit'", "ng-model" => "ctrl.note.text",
|
||||||
%strong.name-sampler.sampler{"typewrite" => "true", "text" => "ctrl.demoNoteNames", "type-delay" => "30", "initial-delay" => "1.5s",
|
|
||||||
"iteration-callback" => "ctrl.callback", "prebegin-fn" => "ctrl.prebeginFn", "iteration-delay" => "2000", "cursor" => ""}
|
|
||||||
%textarea.editable#note-text-editor{"ng-class" => "{'fullscreen' : ctrl.fullscreen }", "ng-disabled" => "ctrl.note.locked", "ng-show" => "ctrl.editorMode == 'edit'", "ng-model" => "ctrl.note.text",
|
|
||||||
"ng-change" => "ctrl.contentChanged()", "ng-click" => "ctrl.clickedTextArea()", "ng-focus" => "ctrl.onContentFocus()"}
|
"ng-change" => "ctrl.contentChanged()", "ng-click" => "ctrl.clickedTextArea()", "ng-focus" => "ctrl.onContentFocus()"}
|
||||||
.preview{"ng-class" => "{'fullscreen' : ctrl.fullscreen }", "ng-if" => "ctrl.editorMode == 'preview'", "ng-bind-html" => "ctrl.renderedContent()", "ng-dblclick" => "ctrl.onPreviewDoubleClick()"}
|
.preview{"ng-class" => "{'fullscreen' : ctrl.fullscreen }", "ng-if" => "ctrl.editorMode == 'preview'", "ng-bind-html" => "ctrl.renderedContent()", "ng-dblclick" => "ctrl.onPreviewDoubleClick()"}
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
.items
|
.items
|
||||||
.item.account
|
.item.account
|
||||||
%div{"ng-click" => "ctrl.accountMenuPressed()"}
|
%div{"ng-click" => "ctrl.accountMenuPressed()"}
|
||||||
%div{"ng-if" => "ctrl.user.email"} Account
|
%div{"ng-if" => "ctrl.user"} Account
|
||||||
%div{"ng-if" => "!ctrl.user.email"} Sign in or Register
|
%div{"ng-if" => "!ctrl.user"} Sign in or Register
|
||||||
.panel.panel-default.account-panel.panel-right{"ng-if" => "ctrl.showAccountMenu"}
|
.panel.panel-default.account-panel.panel-right{"ng-if" => "ctrl.showAccountMenu"}
|
||||||
.panel-body
|
.panel-body
|
||||||
.account-items
|
.account-items
|
||||||
.account-item.registration-login{"ng-if" => "!ctrl.user.email"}
|
.account-item.registration-login{"ng-if" => "!ctrl.user"}
|
||||||
.account-item
|
.account-item
|
||||||
.meta-container
|
.meta-container
|
||||||
.title Server
|
.title Server
|
||||||
@@ -46,11 +46,10 @@
|
|||||||
Because notes are locally encrypted using a secret key derived from your password, there's no way to decrypt these notes if you forget your password.
|
Because notes are locally encrypted using a secret key derived from your password, there's no way to decrypt these notes if you forget your password.
|
||||||
For this reason, Standard Notes cannot offer a password reset option. You <strong>must</strong> make sure to store or remember your password.
|
For this reason, Standard Notes cannot offer a password reset option. You <strong>must</strong> make sure to store or remember your password.
|
||||||
|
|
||||||
|
.account-item{"ng-if" => "ctrl.user"}
|
||||||
.account-item{"ng-if" => "ctrl.user.email"}
|
|
||||||
.email {{ctrl.user.email}}
|
.email {{ctrl.user.email}}
|
||||||
.server {{ctrl.serverData.url}}
|
.server {{ctrl.serverData.url}}
|
||||||
.links{"ng-if" => "ctrl.user.email"}
|
.links{"ng-if" => "ctrl.user"}
|
||||||
-# .link-item
|
-# .link-item
|
||||||
-# %a{"ng-click" => "ctrl.changePasswordPressed()"} Change Password
|
-# %a{"ng-click" => "ctrl.changePasswordPressed()"} Change Password
|
||||||
-# %form.account-form{"ng-if" => "ctrl.showNewPasswordForm", 'ng-submit' => 'ctrl.submitPasswordChange()', 'name' => "passwordChangeForm"}
|
-# %form.account-form{"ng-if" => "ctrl.showNewPasswordForm", 'ng-submit' => 'ctrl.submitPasswordChange()', 'name' => "passwordChangeForm"}
|
||||||
@@ -71,8 +70,8 @@
|
|||||||
.desc Notes are encrypted locally before being sent to the server. Neither the server owner nor an intrusive entity can decrypt your locally encrypted notes.
|
.desc Notes are encrypted locally before being sent to the server. Neither the server owner nor an intrusive entity can decrypt your locally encrypted notes.
|
||||||
.action-container
|
.action-container
|
||||||
%span.status-title Status:
|
%span.status-title Status:
|
||||||
{{ctrl.encryptionStatusForNotes()}} (shared notes not encrypted)
|
{{ctrl.encryptionStatusForNotes()}}
|
||||||
.account-item{"ng-if" => "ctrl.user.email"}
|
.account-item{"ng-if" => "ctrl.user"}
|
||||||
.meta-container
|
.meta-container
|
||||||
.title Data Archives
|
.title Data Archives
|
||||||
.options{"style" => "font-size: 12px; margin-top: 4px;"}
|
.options{"style" => "font-size: 12px; margin-top: 4px;"}
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
%strong Choose a public username for all your shared note tags.
|
|
||||||
%input{"style" => "margin-top: 10px; padding-left: 8px;", "type" => "text", "ng-keyup" => "$event.keyCode == 13 && saveUsername($event)", "ng-model" => "formData.username"}
|
|
||||||
@@ -15,23 +15,9 @@
|
|||||||
%span.sr-only
|
%span.sr-only
|
||||||
|
|
||||||
%ul.dropdown-menu.dropdown-menu-left.nt-dropdown-menu.dark{"ng-if" => "ctrl.showMenu"}
|
%ul.dropdown-menu.dropdown-menu-left.nt-dropdown-menu.dark{"ng-if" => "ctrl.showMenu"}
|
||||||
%li{"ng-if" => "!ctrl.tag.isPublic()"}
|
%li
|
||||||
%a.text{"ng-click" => "ctrl.selectedMenuItem(); ctrl.selectedTagShare($event)"} Share Tag
|
|
||||||
%li{"ng-if" => "ctrl.tag.isPublic()"}
|
|
||||||
%a.text{"ng-click" => "ctrl.selectedMenuItem(); ctrl.selectedTagUnshare()"} Unshare Tag
|
|
||||||
%li{"ng-if" => "!ctrl.tag.all"}
|
|
||||||
%a.text{"ng-click" => "ctrl.selectedMenuItem(); ctrl.selectedTagDelete()"} Delete Tag
|
%a.text{"ng-click" => "ctrl.selectedMenuItem(); ctrl.selectedTagDelete()"} Delete Tag
|
||||||
|
|
||||||
.menu-right-container
|
|
||||||
.public-link{"ng-if" => "ctrl.tag.isPublic()"}
|
|
||||||
%a.url{"ng-if" => "!ctrl.editingUrl", "href" => "{{ctrl.tag.presentationURL()}}", "target" => "_blank"}
|
|
||||||
%span.icon-rss.icon
|
|
||||||
{{ctrl.tag.presentationURL()}}
|
|
||||||
.edit-url{"ng-if" => "ctrl.editingUrl"}
|
|
||||||
{{ctrl.url.base}}
|
|
||||||
%input.input{"ng-model" => "ctrl.url.token", "ng-keyup" => "$event.keyCode == 13 && ctrl.saveUrl($event)",
|
|
||||||
"ng-change" => "ctrl.urlChanged()", "ng-focus" => "ctrl.onUrlFocus()",
|
|
||||||
"select-on-click" => "true", "autofocus" => "true"}
|
|
||||||
.note{"ng-repeat" => "note in ctrl.tag.notes | filter: ctrl.filterNotes",
|
.note{"ng-repeat" => "note in ctrl.tag.notes | filter: ctrl.filterNotes",
|
||||||
"ng-click" => "ctrl.selectNote(note)", "ng-class" => "{'selected' : ctrl.selectedNote == note}",
|
"ng-click" => "ctrl.selectNote(note)", "ng-class" => "{'selected' : ctrl.selectedNote == note}",
|
||||||
"ng-attr-draggable" => "{{note.dummy ? undefined : 'true'}}", "note" => "note"}
|
"ng-attr-draggable" => "{{note.dummy ? undefined : 'true'}}", "note" => "note"}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
.tag{"ng-repeat" => "tag in ctrl.tags", "ng-click" => "ctrl.selectTag(tag)", "ng-class" => "{'selected' : ctrl.selectedTag == tag}",
|
.tag{"ng-repeat" => "tag in ctrl.tags", "ng-click" => "ctrl.selectTag(tag)", "ng-class" => "{'selected' : ctrl.selectedTag == tag}",
|
||||||
"droppable" => true, "drop" => "ctrl.handleDrop", "tag" => "tag"}
|
"droppable" => true, "drop" => "ctrl.handleDrop", "tag" => "tag"}
|
||||||
.icon.icon-rss{"ng-if" => "tag.isPublic()"}
|
|
||||||
%input.title{"ng-disabled" => "tag != ctrl.selectedTag", "ng-model" => "tag.title",
|
%input.title{"ng-disabled" => "tag != ctrl.selectedTag", "ng-model" => "tag.title",
|
||||||
"ng-keyup" => "$event.keyCode == 13 && ctrl.saveTag($event, tag)", "mb-autofocus" => "true", "should-focus" => "ctrl.newTag",
|
"ng-keyup" => "$event.keyCode == 13 && ctrl.saveTag($event, tag)", "mb-autofocus" => "true", "should-focus" => "ctrl.newTag",
|
||||||
"ng-change" => "ctrl.tagTitleDidChange(tag)", "ng-focus" => "ctrl.onTagTitleFocus(tag)"}
|
"ng-change" => "ctrl.tagTitleDidChange(tag)", "ng-focus" => "ctrl.onTagTitleFocus(tag)"}
|
||||||
|
|||||||
@@ -10,8 +10,7 @@
|
|||||||
"angular": "1.6.1",
|
"angular": "1.6.1",
|
||||||
"angular-ui-router": "^0.3.2",
|
"angular-ui-router": "^0.3.2",
|
||||||
"restangular": "^1.6.1",
|
"restangular": "^1.6.1",
|
||||||
"marked": "0.3.6",
|
"marked": "0.3.6"
|
||||||
"ng-dialog" : "0.6.6"
|
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"angular": "1.6.1"
|
"angular": "1.6.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user