diff --git a/Makefile b/Makefile index d5f8d36..91309c7 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,12 @@ ts != date +"%Y-%m-%d-%H%M%S" dst = .backup/$(ts) -src = js index.html css +src = js *.html css vers = js/libs/version.js all: backup @echo var VERSION = \"$(ts)\" > $(vers); - ./mksingleton.pl index.html + ./mksingleton.pl prod index.html + ./mksingleton.pl dev index.html backup: mkdir -p $(dst) diff --git a/digiproof-dev.html b/digiproof-dev.html new file mode 100644 index 0000000..805c9db --- /dev/null +++ b/digiproof-dev.html @@ -0,0 +1,55681 @@ + + + + +Digital Testament App + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/digiproof.html b/digiproof-prod.html similarity index 99% rename from digiproof.html rename to digiproof-prod.html index ecf53db..638dc5c 100644 --- a/digiproof.html +++ b/digiproof-prod.html @@ -30,22 +30,28 @@ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-file{overflow:hidden;position:relative;vertical-align:middle}.btn-file>input{position:absolute;top:0;right:0;margin:0;opacity:0;filter:alpha(opacity=0);transform:translate(-300px,0) scale(4);font-size:23px;direction:ltr;cursor:pointer}.fileupload{margin-bottom:9px}.fileupload .uneditable-input{display:inline-block;margin-bottom:0;vertical-align:middle;cursor:text}.fileupload .thumbnail{overflow:hidden;display:inline-block;margin-bottom:5px;vertical-align:middle;text-align:center}.fileupload .thumbnail>img{display:inline-block;vertical-align:middle;max-height:100%}.fileupload .btn{vertical-align:middle}.fileupload-exists .fileupload-new,.fileupload-new .fileupload-exists{display:none}.fileupload-inline .fileupload-controls{display:inline}.fileupload-new .input-append .btn-file{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.thumbnail-borderless .thumbnail{border:0;padding:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.fileupload-new.thumbnail-borderless .thumbnail{border:1px solid #ddd}.control-group.warning .fileupload .uneditable-input{color:#a47e3c;border-color:#a47e3c}.control-group.warning .fileupload .fileupload-preview{color:#a47e3c}.control-group.warning .fileupload .thumbnail{border-color:#a47e3c}.control-group.error .fileupload .uneditable-input{color:#b94a48;border-color:#b94a48}.control-group.error .fileupload .fileupload-preview{color:#b94a48}.control-group.error .fileupload .thumbnail{border-color:#b94a48}.control-group.success .fileupload .uneditable-input{color:#468847;border-color:#468847}.control-group.success .fileupload .fileupload-preview{color:#468847}.control-group.success .fileupload .thumbnail{border-color:#468847} +html,body{margin:20px}a{cursor:pointer}.navbar .nav>li>a.active{color:black;font-weight:bold}.about{padding-bottom:15px;width:700px}.about+.about{padding-top:25px;border-top:1px solid #000}@media print{.visible-print{display:inherit!important}.page-break{display:block;page-break-after:always}.hidden-print{display:none!important}.pr-toptitle{font-size:14px}.pr-title{font-size:12px}.pr-label{font-size:10px;font-weight:bold}.pr-data{font-size:10px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.pr-text{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px}}@media all{.page-break{display:none}}.addicon{padding-left:16px;padding-right:16px;padding-bottom:16px;height:32px;width:32px;border:0;background-repeat:no-repeat;background-image:url(data:image/png;base64,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)}.addlogo{padding-left:175px;padding-right:175px;padding-bottom:95px;height:0;width:0;border:0;background-repeat:no-repeat;background-image:url(data:image/jpeg;base64,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)}.dpedge-prod{padding:3px;background-color:#fff;margin-top:9px;color:#6a6a6a}.dpedge-devel{padding:3px;background-color:#ff8a00;margin-top:7px;color:#6a6a6a} @@ -753,14 +765,36 @@ html,body{margin:20px}a{cursor:pointer}.navbar .nav>li>a.active{color:black;font {{else}} -

{{clear}}

+ {{#if failed}} +

{{clear}}

+ {{else}} +
+
{{loc _self}}:
+
{{self.name}}
+
{{clear}}
+
+ {{#each successor in successors}} +
+
{{loc _successor}}:
+
{{successor.name}}
+
{{clear}}
+
+ {{/each}} + {{#each asset in assets}} +
+
{{loc _asset}}:
+
{{asset.name}}
+
{{clear}}
+
+ {{/each}} + + {{/if}}

{{/if}} +var VERSION="2013-09-13-155304" @@ -3316,7 +3352,9 @@ var lang=(navigator.language)?navigator.language:navigator.userLanguage;window.l +"this email into another asset as well.","_pop_successor":"Select a legal successor. You may use the default in which case the person selected by succesion or " +"your general testament would receive this orders. Or enter a legal successor and select it here.","_pop_order":"Select how your successor has to manage the network asset. You may add complemental informations " +"into the notes field below.","_aboutmenu":"About Digiproof","_about":"This is DigiProof, a JavaScript App to create a digital testament by Thomas Linden. Copyright (c) 2013. " -+"Licensed under the terms of the General Public License Version 2."},"de":{"_successors":"Rechtsnachfolger","_successor":"Rechtsnachfolger","_addsuccessor":"Rechtsnachfolger Hinzufügen","_substitute":"Ersatzrechtsnachfolger","_assets":"Netzaccounts","_asset":"Netzaccount","_addasset":"Netzaccount hinzufügen","_add":"neu","_name":"Bezeichnung","_uri":"URL","_login":"Benutzername","_pass":"Passwort","_mail":"E-Mail","_ordered":"wird beauftragt","_preordered":"Der Rechtsnachfolger wird beauftragt, den Netzaccount","_postordered":"","_save":"Speichern","_savenext":"Speichern und Fortfahren","_cancel":"Abbrechen","_edit":"Bearbeiten","_remove":"Entfernen","_notes":"Besondere Hinweise","_birth":"Geburtsdatum","_testament":"Testament Anschauen","_address":"Adresse","_print":"Dies ist das vollständige digitale Testament.","_doprint":"Ausdrucken","_ttitle":"Mein digitales Testament","_appoint1":"Hiermit bestimme ich, ","_appoint2":", im Vollbesitz meiner geistigen Kräfte, die folgende Person als Rechtsnachfolger " ++"Licensed under the terms of the General Public License Version 2.","_devel":"Caution! This is the development version of DigiProof. It stores data to local disk using the browsers " ++"localStorage feature. So, whatever you enter, persists over sessions, is unencrypted and can be viewed by anyone " ++"with access to this device. Use for testing/developing purposes only and don't ever enter production account informations!"},"de":{"_successors":"Rechtsnachfolger","_successor":"Rechtsnachfolger","_addsuccessor":"Rechtsnachfolger Hinzufügen","_substitute":"Ersatzrechtsnachfolger","_assets":"Netzaccounts","_asset":"Netzaccount","_addasset":"Netzaccount hinzufügen","_add":"neu","_name":"Bezeichnung","_uri":"URL","_login":"Benutzername","_pass":"Passwort","_mail":"E-Mail","_ordered":"wird beauftragt","_preordered":"Der Rechtsnachfolger wird beauftragt, den Netzaccount","_postordered":"","_save":"Speichern","_savenext":"Speichern und Fortfahren","_cancel":"Abbrechen","_edit":"Bearbeiten","_remove":"Entfernen","_notes":"Besondere Hinweise","_birth":"Geburtsdatum","_testament":"Testament Anschauen","_address":"Adresse","_print":"Dies ist das vollständige digitale Testament.","_doprint":"Ausdrucken","_ttitle":"Mein digitales Testament","_appoint1":"Hiermit bestimme ich, ","_appoint2":", im Vollbesitz meiner geistigen Kräfte, die folgende Person als Rechtsnachfolger " +"für die aufgeführten Netzwerkaccounts nach meinem Tode:","_appoint3":"Falls die oben aufgeführte Person nicht mehr leben sollte " +"oder unauffindbar sein, so soll dies der Ersatzrechtsnachfolger " +"sein:","_successorshall":"Mein Rechtsnachfolger soll sich um die im folgenden " @@ -3345,7 +3383,10 @@ var lang=(navigator.language)?navigator.language:navigator.userLanguage;window.l +"regulärer Erbe (bestimmt durch gesetzliche Erbfolge oder anderweitig durch Testament) diese Anweisungen erhalten. " +"Oder Sie geben einen speziellen Rechtsnachfolger ein und wählen diesen hier aus.","_pop_order":"Bestimmen Sie, wie Ihr Rechtsnachfolger mit dem Netzwerkaccount umgehen soll. Sie können im Notizfeld " +"dazugehörige Ergänzungen hinzufügen.","_aboutmenu":"Über Digiproof","_about":"Dies ist DigiProof, eine Javascript App zum Erstellen eines digitalen Testaments von Thomas Linden. Copyright (c) 2013. " -+"Veröffentlicht unter der General Public License Version 2."}};function translate(key){var locale=window.locale[lang]||window.locale['en-US'];if(key){if(key in locale){return locale[key];} ++"Veröffentlicht unter der General Public License Version 2.","_devel":"Achtung! Dies ist die Entwicklerversion von DigiProof. Eingegebene Daten werden auf der lokalen Festplatte " ++"unter Verwendung des localStorage Features Ihres Browsers gespeichert. Was immer Sie eingeben, bleibt über Browsersitzungen " ++"hinweg erhalten, ist nicht verschlüsselt und kann von jedem mit Zugriff auf das System gelesen werden. Verwenden Sie " ++"diese Version ausschliesslich für Test- oder Entwicklungszwecke und geben Sie niemals echte Accountinformationen ein!"}};function translate(key){var locale=window.locale[lang]||window.locale['en-US'];if(key){if(key in locale){return locale[key];} else{return'__UNTRANSLATED_STRING__('+key+')';}} else{return'';}} +App.IndexController=Ember.Controller.extend({has_self:App.Self.find(),has_asset:App.Asset.find(),has_successor:App.Successor.find(),isDevel:isDevel,VERSION:VERSION});App.NavView=Ember.View.extend({tagName:'li',classNameBindings:'active'.w(),didInsertElement:function(){this._super();var _this=this;this.get('parentView').on('click',function(){_this.notifyPropertyChange('active');});},active:function(){return this.get('childViews.firstObject.active');}.property()}); + @@ -776,7 +788,31 @@ {{else}} -

{{clear}}

+ {{#if failed}} +

{{clear}}

+ {{else}} +
+
{{loc _self}}:
+
{{self.name}}
+
{{clear}}
+
+ + {{#each successor in successors}} +
+
{{loc _successor}}:
+
{{successor.name}}
+
{{clear}}
+
+ {{/each}} + {{#each asset in assets}} +
+
{{loc _asset}}:
+
{{asset.name}}
+
{{clear}}
+
+ {{/each}} + + {{/if}}

{{/if}} @@ -784,7 +820,6 @@ @@ -793,7 +828,7 @@ - + @@ -817,6 +852,7 @@ + diff --git a/js/apphelpers.js b/js/apphelpers.js index 3d3797e..a208ba7 100644 --- a/js/apphelpers.js +++ b/js/apphelpers.js @@ -74,3 +74,4 @@ function decode64(input) { return unescape(output); } + diff --git a/js/confirm.js b/js/confirm.js new file mode 100644 index 0000000..a385428 --- /dev/null +++ b/js/confirm.js @@ -0,0 +1,21 @@ + +function confirminit() { + window.onbeforeunload = function(e) { + if(window.confirmExit) return confirmExit(); + }; +} + +var hadConfirmExit = false; +function checkUnsavedChanges() { + if(App.store && App.store.isDirty && window.hadConfirmExit === false) { + if(confirm("unsafed changes")) + saveChanges(); + } +} + +function confirmExit() { + hadConfirmExit = true; + if(App.store && App.store.isDirty) { + return "ok"; + } +} diff --git a/js/controllers_application.js b/js/controllers_application.js new file mode 100644 index 0000000..66347e3 --- /dev/null +++ b/js/controllers_application.js @@ -0,0 +1,7 @@ + +App.ApplicationController = Ember.Controller.extend({ + isDevel: isDevel, + VERSION: VERSION +}); + + diff --git a/js/controllers_data.js b/js/controllers_data.js index 8da18ce..18db3c3 100644 --- a/js/controllers_data.js +++ b/js/controllers_data.js @@ -126,6 +126,7 @@ App.UploadFileView = Ember.TextField.extend({ App.DataImportController = Ember.ObjectController.extend({ isEditing: true, clear: '', + failed: false, errors: {}, doneEditing: function() { @@ -197,6 +198,15 @@ App.DataImportController = Ember.ObjectController.extend({ // suck it in ImportJSON(importobj, pass); this.set('clear', translate('_importdone')); + var isuccessors = []; + $.each(importobj.successors, function(index, obj) { + if(obj.id != '0') { + isuccessors.pushObject(obj); + } + }); + this.set('successors', isuccessors); + this.set('assets', importobj.assets); + this.set('self', importobj.self); } else { throw 'decrypted variable $json doesnt contain anything, weird'; @@ -205,12 +215,14 @@ App.DataImportController = Ember.ObjectController.extend({ catch (e) { // console.log("decryption exception: %o", e); this.set('clear', translate('_error_decrypt') + " (" + e + ")"); + this.set('failed', true); } } else { // no password given this.set('isEditing', true); this.set('errors', validated); + this.set('failed', true); this.set('clear', translate('_error_decrypt')); } }, diff --git a/js/controllers_index.js b/js/controllers_index.js index 9daf94f..2f42fc5 100644 --- a/js/controllers_index.js +++ b/js/controllers_index.js @@ -3,6 +3,7 @@ App.IndexController = Ember.Controller.extend({ has_self: App.Self.find(), has_asset: App.Asset.find(), has_successor: App.Successor.find(), + isDevel: isDevel, VERSION: VERSION }); diff --git a/js/libs/localstorage_adapter.js b/js/libs/localstorage_adapter_dev.js similarity index 99% rename from js/libs/localstorage_adapter.js rename to js/libs/localstorage_adapter_dev.js index 79d88cd..75c00af 100644 --- a/js/libs/localstorage_adapter.js +++ b/js/libs/localstorage_adapter_dev.js @@ -1,3 +1,5 @@ +var isDevel = true; + DS.LSSerializer = DS.JSONSerializer.extend({ addBelongsTo: function(data, record, key, association) { diff --git a/js/libs/localstorage_adapter_prod.js b/js/libs/localstorage_adapter_prod.js new file mode 100644 index 0000000..edff68e --- /dev/null +++ b/js/libs/localstorage_adapter_prod.js @@ -0,0 +1,238 @@ +var isDevel = false; + +/* + * in the production actual saving to browser + * storage on disk is disabled here by overwriting + * the setItem and getItem function with dummies, + * which hold the data in memory only. + */ +localStorage.setItem = function(namespace, json) { + this.set('_fakestore') = { namespace: json }; + return this; +} + +localStorage.getItem = function(namespace) { + return this.get('_fakestore').namespace; +} + +DS.LSSerializer = DS.JSONSerializer.extend({ + + addBelongsTo: function(data, record, key, association) { + data[key] = record.get(key + '.id'); + }, + + addHasMany: function(data, record, key, association) { + data[key] = record.get(key).map(function(record) { + return record.get('id'); + }); + }, + + // extract expects a root key, we don't want to save all these keys to + // localStorage so we generate the root keys here + extract: function(loader, json, type, record) { + this._super(loader, this.rootJSON(json, type), type, record); + }, + + extractMany: function(loader, json, type, records) { + this._super(loader, this.rootJSON(json, type, 'pluralize'), type, records); + }, + + rootJSON: function(json, type, pluralize) { + var root = this.rootForType(type); + if (pluralize == 'pluralize') { root = this.pluralize(root); } + var rootedJSON = {}; + rootedJSON[root] = json; + return rootedJSON; + } + +}); + +DS.LSAdapter = DS.Adapter.extend(Ember.Evented, { + + init: function() { + this._loadData(); + }, + + generateIdForRecord: function() { + return Math.random().toString(32).slice(2).substr(0,5); + }, + + serializer: DS.LSSerializer.create(), + + find: function(store, type, id) { + var namespace = this._namespaceForType(type); + this._async(function(){ + var copy = Ember.copy(namespace.records[id]); + this.didFindRecord(store, type, copy, id); + }); + }, + + findMany: function(store, type, ids) { + var namespace = this._namespaceForType(type); + this._async(function(){ + var results = []; + for (var i = 0; i < ids.length; i++) { + results.push(Ember.copy(namespace.records[ids[i]])); + } + this.didFindMany(store, type, results); + }); + }, + + // Supports queries that look like this: + // + // { + // : , + // ... + // } + // + // Every property added to the query is an "AND" query, not "OR" + // + // Example: + // + // match records with "complete: true" and the name "foo" or "bar" + // + // { complete: true, name: /foo|bar/ } + findQuery: function(store, type, query, recordArray) { + var namespace = this._namespaceForType(type); + this._async(function() { + var results = this.query(namespace.records, query); + this.didFindQuery(store, type, results, recordArray); + }); + }, + + query: function(records, query) { + var results = []; + var id, record, property, test, push; + for (id in records) { + record = records[id]; + for (property in query) { + test = query[property]; + push = false; + if (Object.prototype.toString.call(test) == '[object RegExp]') { + push = test.test(record[property]); + } else { + push = record[property] === test; + } + } + if (push) { + results.push(record); + } + } + return results; + }, + + findAll: function(store, type) { + var namespace = this._namespaceForType(type); + this._async(function() { + var results = []; + for (var id in namespace.records) { + results.push(Ember.copy(namespace.records[id])); + } + this.didFindAll(store, type, results); + }); + }, + + createRecords: function(store, type, records) { + var namespace = this._namespaceForType(type); + records.forEach(function(record) { + this._addRecordToNamespace(namespace, record); + }, this); + this._async(function() { + this._didSaveRecords(store, type, records); + }); + }, + + updateRecords: function(store, type, records) { + var namespace = this._namespaceForType(type); + this._async(function() { + records.forEach(function(record) { + var id = record.get('id'); + namespace.records[id] = record.serialize({includeId:true}); + }, this); + this._didSaveRecords(store, type, records); + }); + }, + + deleteRecords: function(store, type, records) { + var namespace = this._namespaceForType(type); + this._async(function() { + records.forEach(function(record) { + var id = record.get('id'); + delete namespace.records[id]; + }); + this._didSaveRecords(store, type, records); + }); + + }, + + dirtyRecordsForHasManyChange: function(dirtySet, parent, relationship) { + dirtySet.add(parent); + }, + + dirtyRecordsForBelongsToChange: function(dirtySet, child, relationship) { + dirtySet.add(child); + }, + + // private + + _getNamespace: function() { + return this.namespace || 'DS.LSAdapter'; + }, + + _loadData: function() { + try { + var storage = localStorage.getItem(this._getNamespace()); + this._data = storage ? JSON.parse(storage) : {}; + } + catch(e) { + this._data = {}; + } + }, + + _didSaveRecords: function(store, type, records) { + var success = this._saveData(); + if (success) { + store.didSaveRecords(records); + } else { + records.forEach(function(record) { + store.recordWasError(record); + }); + this.trigger('QUOTA_EXCEEDED_ERR', records); + } + }, + + _saveData: function() { + try { + localStorage.setItem(this._getNamespace(), JSON.stringify(this._data)); + return true; + } + catch(error) { + if (error.name == 'QUOTA_EXCEEDED_ERR') { + return false; + } else { + // IE, Ignore. throw new Error(error); + } + } + }, + + _namespaceForType: function(type) { + var namespace = type.url || type.toString(); + return this._data[namespace] || ( + this._data[namespace] = {records: {}} + ); + }, + + _addRecordToNamespace: function(namespace, record) { + var data = record.serialize({includeId: true}); + namespace.records[data.id] = data; + }, + + _async: function(callback) { + var _this = this; + setTimeout(function(){ + Ember.run(_this, callback); + }, 1); + } + +}); + diff --git a/js/libs/version.js b/js/libs/version.js index 0d2c708..814532d 100644 --- a/js/libs/version.js +++ b/js/libs/version.js @@ -1 +1 @@ -var VERSION = "2013-09-13-080748" +var VERSION = "2013-09-13-155304" diff --git a/js/locale.js b/js/locale.js index 10b84b4..6e24b9d 100644 --- a/js/locale.js +++ b/js/locale.js @@ -113,7 +113,10 @@ window.locale = { +"into the notes field below.", "_aboutmenu": "About Digiproof", "_about": "This is DigiProof, a JavaScript App to create a digital testament by Thomas Linden. Copyright (c) 2013. " - +"Licensed under the terms of the General Public License Version 2." + +"Licensed under the terms of the General Public License Version 2.", + "_devel": "Caution! This is the development version of DigiProof. It stores data to local disk using the browsers " + +"localStorage feature. So, whatever you enter, persists over sessions, is unencrypted and can be viewed by anyone " + +"with access to this device. Use for testing/developing purposes only and don't ever enter production account informations!" }, "de": { @@ -233,7 +236,11 @@ window.locale = { +"dazugehörige Ergänzungen hinzufügen.", "_aboutmenu": "Über Digiproof", "_about": "Dies ist DigiProof, eine Javascript App zum Erstellen eines digitalen Testaments von Thomas Linden. Copyright (c) 2013. " - +"Veröffentlicht unter der General Public License Version 2." + +"Veröffentlicht unter der General Public License Version 2.", + "_devel": "Achtung! Dies ist die Entwicklerversion von DigiProof. Eingegebene Daten werden auf der lokalen Festplatte " + +"unter Verwendung des localStorage Features Ihres Browsers gespeichert. Was immer Sie eingeben, bleibt über Browsersitzungen " + +"hinweg erhalten, ist nicht verschlüsselt und kann von jedem mit Zugriff auf das System gelesen werden. Verwenden Sie " + +"diese Version ausschliesslich für Test- oder Entwicklungszwecke und geben Sie niemals echte Accountinformationen ein!" } }; diff --git a/mksingleton.pl b/mksingleton.pl index 5ceb3d4..c173074 100755 --- a/mksingleton.pl +++ b/mksingleton.pl @@ -3,14 +3,14 @@ use Data::Dumper; use JavaScript::Minifier qw(minify); use CSS::Compressor qw( css_compress ); -my $index = shift; +my ($type, $index) = @ARGV; if (!$index) { - print STDERR "Usage: $0 \n"; + print STDERR "Usage: $0 \n"; exit 1; } -my $out = "digiproof.html"; +my $out = "digiproof-$type.html"; print STDERR "open index\n"; open I, "<$index" or die "Could not open index: $index $!\n"; @@ -38,6 +38,9 @@ foreach (@source) { } elsif (/script src="([^"]*)"/) { my $jsfile = $1; + if ($jsfile =~ /localstorage/) { + $jsfile = "js/libs/localstorage_adapter_$type.js"; + } print STDERR "Inserting $jsfile\n"; print qq( - # which leads to rendering failures, those will be fixed here - $js =~ s/<\/script>/' + Slash + 'script>/g; - close F; - return "/* js from $file */\n" . $js; + my $js; + my $from = "/* js from $file */\n"; + if ($type eq 'prod') { + $js = minify(input => *F); + # ember.js (and probably others) contain strings which contain + # which leads to rendering failures, those will be fixed here + $js =~ s/<\/script>/' + Slash + 'script>/g; + close F; + return $from . $js; + } + else { + return $from . join '', ; + close F; + } } else { + my $from = "/* css from $file */\n"; my $src = join "", ; close F; - return "/* css from $file */\n" . css_compress($src); + if ($prod) { + return $from . $src; + } + else { + return $from . css_compress($src); + } } } diff --git a/samples/digiproof1.png b/samples/digiproof1.png new file mode 100644 index 0000000..4b4ccba Binary files /dev/null and b/samples/digiproof1.png differ diff --git a/samples/digiproof10.png b/samples/digiproof10.png new file mode 100644 index 0000000..7bf068f Binary files /dev/null and b/samples/digiproof10.png differ diff --git a/samples/digiproof2.png b/samples/digiproof2.png new file mode 100644 index 0000000..19d2a42 Binary files /dev/null and b/samples/digiproof2.png differ diff --git a/samples/digiproof3.png b/samples/digiproof3.png new file mode 100644 index 0000000..1036630 Binary files /dev/null and b/samples/digiproof3.png differ diff --git a/samples/digiproof4.png b/samples/digiproof4.png new file mode 100644 index 0000000..eeb19d5 Binary files /dev/null and b/samples/digiproof4.png differ diff --git a/samples/digiproof5.png b/samples/digiproof5.png new file mode 100644 index 0000000..5a0b5ac Binary files /dev/null and b/samples/digiproof5.png differ diff --git a/samples/digiproof6.png b/samples/digiproof6.png new file mode 100644 index 0000000..81f944e Binary files /dev/null and b/samples/digiproof6.png differ diff --git a/samples/digiproof7.png b/samples/digiproof7.png new file mode 100644 index 0000000..dd239f1 Binary files /dev/null and b/samples/digiproof7.png differ diff --git a/samples/digiproof8.png b/samples/digiproof8.png new file mode 100644 index 0000000..a7afa0b Binary files /dev/null and b/samples/digiproof8.png differ diff --git a/samples/digiproof9.png b/samples/digiproof9.png new file mode 100644 index 0000000..ccef44e Binary files /dev/null and b/samples/digiproof9.png differ diff --git a/samples/sample-testament.pdf b/samples/sample-testament.pdf new file mode 100644 index 0000000..65c7756 Binary files /dev/null and b/samples/sample-testament.pdf differ