Check if clipboard supported provide fallbacks

This commit is contained in:
Robin Linus 2016-01-03 03:07:32 +01:00
parent 184eda47e3
commit 83dc58b5c2

View file

@ -27,7 +27,7 @@
@media all and (max-height: 600px) { @media all and (max-height: 600px) {
#sendDialog { #sendDialog {
padding-top: 24px; padding-top: 24px;
top:0px !important; top: 0px !important;
} }
} }
@ -68,10 +68,13 @@
</div> </div>
<div class="buttons"> <div class="buttons">
<paper-button dialog-dismiss>Discard</paper-button> <paper-button dialog-dismiss>Discard</paper-button>
<paper-button on-tap="_copy" autofocus hidden$="{{!clipboardSupported}}">Copy</paper-button>
<a href="tel:{{tel}}" hidden$="{{!tel}}"> <a href="tel:{{tel}}" hidden$="{{!tel}}">
<paper-button dialog-dismiss>Call</paper-button> <paper-button autofocus dialog-dismiss>Call</paper-button>
</a>
<a href="{{url}}" hidden$="{{!url}}" target="_blank">
<paper-button autofocus dialog-dismiss>Open</paper-button>
</a> </a>
<paper-button on-tap="_copy" autofocus>Copy</paper-button>
</div> </div>
</paper-dialog> </paper-dialog>
</template> </template>
@ -84,9 +87,11 @@
* *
*/ */
var phoneNumbers = /^\+?[0-9x/ ]*$/; var phoneNumbers = /^\+?[0-9x/ ]*$/;
var urls = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/;
Polymer({ Polymer({
is: 'text-input-dialog', is: 'text-input-dialog',
behaviors: [Chat.ClipboardBehavior,Chat.SoundNotificationBehavior], behaviors: [Chat.ClipboardBehavior, Chat.SoundNotificationBehavior],
properties: { properties: {
textToSend: { textToSend: {
type: String type: String
@ -100,6 +105,17 @@
tel: { tel: {
computed: '_isPhoneNumber(receivedText)', computed: '_isPhoneNumber(receivedText)',
value: false value: false
},
url: {
computed: '_isUrl(receivedText)',
value: false
},
clipboardSupported: {
value: false
},
fallback: {
computed: '_isFallback(url,tel,clipboardSupported)',
value: false
} }
}, },
open: function(contact) { open: function(contact) {
@ -107,9 +123,27 @@
this.$.sendDialog.open(); this.$.sendDialog.open();
}, },
attached: function() { attached: function() {
// clipboard must be initalized by user interaction
var that = this;
var hackListener = function() {
document.body.removeEventListener('touchstart', hackListener, false);
document.body.removeEventListener('click', hackListener, false);
// wait 1s to tell the ui that copy is supported
that.async(function() {
that.clipboardSupported = document.queryCommandSupported && document.queryCommandSupported('copy');
}, 1000);
};
document.body.addEventListener('touchstart', hackListener, false);
document.body.addEventListener('click', hackListener, false);
this.async(function() { this.async(function() {
app.conn.addEventListener('text-received', function(e) { app.conn.addEventListener('text-received', function(e) {
var receivedText = e.detail.text; var receivedText = e.detail.text;
if (!receivedText || receivedText.trim() === '') {
this.playSound();
return;
}
this.receivedText = receivedText; this.receivedText = receivedText;
this.$.receivedText.textContent = receivedText; this.$.receivedText.textContent = receivedText;
window.linkifyElement(this.$.receivedText, {}, document); window.linkifyElement(this.$.receivedText, {}, document);
@ -136,6 +170,8 @@
} }
} }
}.bind(this), false); }.bind(this), false);
}, },
_send: function() { _send: function() {
this.$.sendDialog.close(); this.$.sendDialog.close();
@ -156,6 +192,18 @@
} }
}, },
_isUrl: function(text) {
if (!text) {
return false;
}
if (urls.test(text)) {
return text;
}
},
_isFallback: function(url, tel, clipboardSupported) {
return (!url && !tel && !clipboardSupported);
}
}); });
}()); }());
</script> </script>