|
@@ -4,7 +4,10 @@
|
|
|
<link rel="import" href="../../bower_components/neon-animation/animations/fade-out-animation.html">
|
|
|
<link rel="import" href="../../bower_components/iron-pages/iron-pages.html">
|
|
|
<link rel="import" href="../../bower_components/paper-spinner/paper-spinner.html">
|
|
|
-<link rel="import" href="../../bower_components/paper-spinner/paper-textarea.html">
|
|
|
+<link rel="import" href="../../bower_components/paper-input/paper-textarea.html">
|
|
|
+<link rel="import" href="linkify.html">
|
|
|
+<link rel="import" href="clipboard-behavior.html">
|
|
|
+<link rel="import" href="../sound-notification/sound-notification-behavior.html">
|
|
|
<dom-module id="text-input-dialog">
|
|
|
<template>
|
|
|
<style>
|
|
@@ -12,92 +15,147 @@
|
|
|
display: block;
|
|
|
}
|
|
|
|
|
|
- #dialog,
|
|
|
- #download {
|
|
|
- width: 300px;
|
|
|
+ #sendDialog,
|
|
|
+ #receiveDialog {
|
|
|
+ width: 324px;
|
|
|
z-index: 101;
|
|
|
+ max-height: 320px;
|
|
|
+ overflow: hidden;
|
|
|
+ margin: 16px;
|
|
|
}
|
|
|
|
|
|
- .filename {
|
|
|
+ @media all and (max-height: 600px) {
|
|
|
+ #sendDialog {
|
|
|
+ padding-top: 24px;
|
|
|
+ top:0px !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #receivedText {
|
|
|
word-break: break-all;
|
|
|
word-break: break-word;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
paper-textarea {
|
|
|
- height: 200px;
|
|
|
+ max-height: 200px;
|
|
|
+ width: calc(100% - 48px);
|
|
|
+ overflow-x: hidden;
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ #receivedText {
|
|
|
+ max-height: 200px;
|
|
|
+ overflow: hidden;
|
|
|
+ width: calc(100% - 48px);
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ -webkit-line-clamp: 9;
|
|
|
+ clamp: 9;
|
|
|
}
|
|
|
</style>
|
|
|
- <paper-dialog id="dialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop modal>
|
|
|
+ <paper-dialog id="sendDialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop modal>
|
|
|
<h2>Send Text</h2>
|
|
|
- <paper-textarea label="Enter Text"></paper-textarea>
|
|
|
+ <paper-textarea id="textInput" label="Enter Text" value="{{textToSend}}" autofocus></paper-textarea>
|
|
|
<div class="buttons">
|
|
|
- <paper-button dialog-dismiss on-tap="_decline">Discard</paper-button>
|
|
|
- <paper-button dialog-confirm on-tap="_accept" autofocus>Send</paper-button>
|
|
|
+ <paper-button dialog-dismiss>Discard</paper-button>
|
|
|
+ <paper-button dialog-dismiss on-tap="_send">Send</paper-button>
|
|
|
</div>
|
|
|
</paper-dialog>
|
|
|
- <paper-dialog id="download" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop modal>
|
|
|
+ <paper-dialog id="receiveDialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop modal>
|
|
|
<h2>Text Received</h2>
|
|
|
- <p>Open File or Right Click and "Save as"...</p>
|
|
|
+ <div>
|
|
|
+ <div id="receivedText">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="buttons">
|
|
|
<paper-button dialog-dismiss>Discard</paper-button>
|
|
|
- <a href="{{dataUri}}" target="_blank">
|
|
|
- <paper-button dialog-confirm autofocus>Open File</paper-button>
|
|
|
+ <a href="tel:{{tel}}" hidden$="{{!tel}}">
|
|
|
+ <paper-button dialog-dismiss>Call</paper-button>
|
|
|
</a>
|
|
|
+ <paper-button on-tap="_copy" autofocus>Copy</paper-button>
|
|
|
</div>
|
|
|
</paper-dialog>
|
|
|
</template>
|
|
|
<script>
|
|
|
'use strict';
|
|
|
(function() {
|
|
|
+ /*
|
|
|
+ *
|
|
|
+ * /^\+?[0-9x]*$/ is the first usuful Text sent via Snapdrop 2015/1/2 5:30
|
|
|
+ *
|
|
|
+ */
|
|
|
+ var phoneNumbers = /^\+?[0-9x/ ]*$/;
|
|
|
Polymer({
|
|
|
is: 'text-input-dialog',
|
|
|
- open: function() {
|
|
|
- this.$.dialog.open();
|
|
|
+ behaviors: [Chat.ClipboardBehavior,Chat.SoundNotificationBehavior],
|
|
|
+ properties: {
|
|
|
+ textToSend: {
|
|
|
+ type: String
|
|
|
+ },
|
|
|
+ receivedText: {
|
|
|
+ type: String
|
|
|
+ },
|
|
|
+ contact: {
|
|
|
+ type: Object
|
|
|
+ },
|
|
|
+ tel: {
|
|
|
+ computed: '_isPhoneNumber(receivedText)',
|
|
|
+ value: false
|
|
|
+ }
|
|
|
},
|
|
|
- attached: function() {
|
|
|
- // this.async(function() {
|
|
|
- // app.conn.addEventListener('file-offer', function(e) {
|
|
|
- // this.file = e.detail;
|
|
|
- // this.$.dialog.open();
|
|
|
- // }.bind(this), false);
|
|
|
- // app.conn.addEventListener('file-received', function(e) {
|
|
|
- // this._fileReceived(e.detail);
|
|
|
- // }.bind(this), false);
|
|
|
- // app.conn.addEventListener('file-declined', function(e) {
|
|
|
- // app.displayToast('User declined file ' + e.detail.name);
|
|
|
- // }.bind(this), false);
|
|
|
- // app.conn.addEventListener('upload-complete', function(e) {
|
|
|
- // app.displayToast('User received file ' + e.detail.name);
|
|
|
- // }.bind(this), false);
|
|
|
- // app.conn.addEventListener('upload-error', function(e) {
|
|
|
- // app.displayToast('The other device did not respond. Please try again.');
|
|
|
- // }.bind(this), false);
|
|
|
- // }, 200);
|
|
|
+ open: function(contact) {
|
|
|
+ this.contact = contact;
|
|
|
+ this.$.sendDialog.open();
|
|
|
},
|
|
|
- _fileReceived: function(file) {
|
|
|
- this.downloadURI(file);
|
|
|
+ attached: function() {
|
|
|
+ this.async(function() {
|
|
|
+ app.conn.addEventListener('text-received', function(e) {
|
|
|
+ var receivedText = e.detail.text;
|
|
|
+ this.receivedText = receivedText;
|
|
|
+ this.$.receivedText.textContent = receivedText;
|
|
|
+ window.linkifyElement(this.$.receivedText, {}, document);
|
|
|
+ this.$.receiveDialog.open();
|
|
|
+ this.playSound();
|
|
|
+ }.bind(this), false);
|
|
|
+ }, 200);
|
|
|
+
|
|
|
+ this.$.textInput.addEventListener('keypress', function(e) {
|
|
|
+ if (e.which === 13 || e.charCode === 13) {
|
|
|
+ var key;
|
|
|
+ var isShift;
|
|
|
+ if (window.event) {
|
|
|
+ key = window.event.keyCode;
|
|
|
+ isShift = !!window.event.shiftKey; // typecast to boolean
|
|
|
+ } else {
|
|
|
+ key = e.which;
|
|
|
+ isShift = !!e.shiftKey;
|
|
|
+ }
|
|
|
+ if (!isShift) {
|
|
|
+ e.preventDefault();
|
|
|
+ e.stopPropagation();
|
|
|
+ this._send();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }.bind(this), false);
|
|
|
},
|
|
|
- _decline: function() {
|
|
|
- app.conn.decline(this.file);
|
|
|
+ _send: function() {
|
|
|
+ this.$.sendDialog.close();
|
|
|
+ app.conn.sendText(this.contact.peerId, this.textToSend);
|
|
|
},
|
|
|
- _accept: function() {
|
|
|
- app.conn.accept(this.file);
|
|
|
+ _copy: function() {
|
|
|
+ this.copyToClipboard(this.receivedText);
|
|
|
+
|
|
|
+ this.$.receiveDialog.close();
|
|
|
+ console.log('text copied', this.receivedText);
|
|
|
},
|
|
|
- downloadURI: function(file) {
|
|
|
- var link = document.createElement('a');
|
|
|
- var uri = (window.URL || window.webkitURL).createObjectURL(file.blob);
|
|
|
- if (typeof link.download !== 'undefined') {
|
|
|
- //download attribute is supported
|
|
|
- link.href = uri;
|
|
|
- link.download = file.name || 'blank';
|
|
|
- document.body.appendChild(link);
|
|
|
- link.click();
|
|
|
- document.body.removeChild(link);
|
|
|
- } else {
|
|
|
- this.dataUri = uri;
|
|
|
- this.$.download.open();
|
|
|
+ _isPhoneNumber: function(text) {
|
|
|
+ if (!text || text.length < 5 || text.length > 100) {
|
|
|
+ return false;
|
|
|
}
|
|
|
- }
|
|
|
+ if (phoneNumbers.test(text)) {
|
|
|
+ return text;
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
});
|
|
|
}());
|
|
|
</script>
|