diff --git a/package.json b/package.json
index b5e53e4..834b6b9 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,9 @@
"vue-template-compiler": "^2.6.10"
},
"dependencies": {
+ "endcrypt": "^1.2.3",
"tabler-ui": "^0.0.34",
- "textarea-caret": "^3.1.0"
+ "textarea-caret": "^3.1.0",
+ "vue2-storage": "^4.0.5"
}
}
diff --git a/resources/js/app.js b/resources/js/app.js
index 093c069..0ed8fc4 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -27,20 +27,82 @@ window.Vue = require('vue');
* or customize the JavaScript scaffolding to fit your unique needs.
*/
-import App from './components/App.vue';
+import Vue from 'vue';
+import Autocomplete from './components/Autocomplete.vue';
+import { Endcrypt } from 'endcrypt';
+import { Vue2Storage } from 'vue2-storage'
+
+const e = new Endcrypt();
+
+// You can specify the plug-in configuration when connecting, passing the second object to Vue.use
+Vue.use(Vue2Storage, {
+ prefix: 'journal_',
+ driver: 'session',
+ ttl: 60 * 60 * 24 * 1000
+});
Vue.config.productionTip = false;
-/** Function for collapse card */
-document.querySelectorAll('[data-toggle="card-collapse"]').forEach(function(card){
- card.addEventListener('click', function(evt) {
- let $card = this.parentElement.parentElement.parentElement;
+let storeId = 'store';
+let storeElement = document.getElementById(storeId);
- $card.classList.toggle('card-collapsed');
- evt.preventDefault();
- return false;
- });
+Vue.component(
+ 'messageform', {
+ name: 'MessageForm',
+ props: {
+ 'mustencrypt': {
+ type: Boolean,
+ default: true
+ },
+ 'possible': {
+ type: Boolean,
+ default: false
+ }
+ },
+ methods: {
+ encrypt: function(evt) {
+ evt.preventDefault();
+ if (this.mustencrypt) {
+ // https://www.npmjs.com/package/endcrypt
+ let plain = document.querySelector("[name=message]").value;
+ let encryptedMessage = JSON.stringify(e.encryptWithKey(plain, this.$storage.get('passphrase')));
+ document.querySelector("[name=message]").value = encryptedMessage;
+ }
+ document.getElementById('messageForm').submit();
+ return false;
+ }
+ },
+ beforeMount: function() {
+ let passphrase = this.$storage.get('passphrase', '');
+ if (passphrase === '') {
+ passphrase = prompt('Merci d\'entrer votre phrase de passe');
+ this.$storage.set('passphrase', passphrase);
+ }
+ /** Function for collapse and decrypt cards */
+ let $this = this;
+ document.querySelectorAll('[data-toggle="card-collapse"]').forEach(function(card){
+ let cardBody = card.parentElement.parentElement.parentElement.querySelector("[data-encrypt]");
+ try {
+ let cardBodyDecrypted = JSON.parse(cardBody.innerHTML.trim());
+ cardBody.innerHTML = e.decryptWithKey(cardBodyDecrypted, $this.$storage.get('passphrase'));
+ } catch (e) {
+ console.log('can\'t decode '+ cardBody.innerHTML);
+ console.log(e);
+ }
+ card.addEventListener('click', function(evt) {
+ let $card = this.parentElement.parentElement.parentElement;
+
+ $card.classList.toggle('card-collapsed');
+ evt.preventDefault();
+ return false;
+ });
+ });
+ },
+ components: {
+ Autocomplete
+ }
+ }
+);
+
+new Vue({
+ el: '#store'
});
-
-const app = new Vue({
- render: h => h(App),
-}).$mount('#app');
diff --git a/resources/js/components/App.vue b/resources/js/components/App.vue
deleted file mode 100644
index 262db4e..0000000
--- a/resources/js/components/App.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-
-