blob: 3e10740488d72d67cfb3b2745f587e143ad9d9c4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../dist/dialog-polyfill.js"></script>
<link rel="stylesheet" type="text/css" href="../dist/dialog-polyfill.css">
<style>
#close-button {
position: absolute;
top: 7px;
right: 7px;
height: 14px;
width: 14px;
margin: 0;
background-image: url('resources/close_dialog.png');
}
#close-button:hover {
background-image: url('resources/close_dialog_hover.png');
}
dialog {
/* width: 50%;
border-radius: 3px;
opacity: 0;
background: white;
box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0,0,0,0.15);
color: #333;
min-width: 400px;
padding: 0;
z-index: 100;
border: 0;
padding: 15px;
*/}
dialog + .backdrop {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
dialog.no-backdrop + .backdrop {
display: none;
}
.dialog-setting {
margin: 30px;
}
/* keyframes used to pulse the overlay */
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(1);
}
40% {
-webkit-transform: scale(1.05);
}
60% {
-webkit-transform: scale(1.05);
}
100% {
-webkit-transform: scale(1);
}
}
.pulse {
-webkit-animation-duration: 180ms;
-webkit-animation-iteration-count: 1;
-webkit-animation-name: pulse;
-webkit-animation-timing-function: ease-in-out;
}
#messages {
background-color: red;
}
body {
font-family: sans-serif;
}
#open-button {
position: fixed;
bottom: 0;
left: 0;
background-color: lightgray;
border: 1px solid;
margin: 10px;
padding: 15px;
}
#open-button:active {
background-color: lime;
margin: 9px;
}
#backdrop {
display: none;
position: fixed;
top:0;
right:0;
bottom:0;
left:0;
background: rgba(0,0,0,0.5);
z-index: 10;
}
.post {
margin: 10px;
padding: 5px;
border: 2px solid;
}
.post-buttons {
margin: 5px;
text-align: right;
}
.post-button:hover {
color: green;
font-weight: bold;
}
</style>
<body>
<div id="messages"></div>
<dialog id="dialog" class="_dialog_fixed">
<h3>Reshare</h3>
<input type="text" style="width: 75%" value="I am resharing this."><br>
<div class="dialog-setting">
<input id="click-outside-to-close" type="checkbox">
<label for="click-outside-to-close">Close dialog upon clicking outside</label>
</div>
<div class="dialog-setting">
<input id="enable-backdrop" type="checkbox" checked>
<label for="enable-backdrop">Enable ::backdrop</label>
</div>
<div id="close-button"></div>
</dialog>
<div id="post-container"></div>
<script>
var dialog = document.getElementById('dialog');
dialogPolyfill.registerDialog(dialog);
function createPostButton(container, text) {
var link = document.createElement('a');
link.href = 'javascript:void(0)';
link.textContent = text;
link.className = 'post-button';
container.appendChild(link);
var span = document.createElement('span');
span.textContent = ' ';
container.appendChild(span);
return link;
}
SampleText = 'From this spot I rise not, valiant knight, until your ' +
'courtesy grants me the boon I seek, one that will redound ' +
'to your praise and the benefit of the human race.';
function createPost(container) {
var post = document.createElement('div');
post.className = 'post';
var postContent = document.createElement('div');
postContent.className = 'post-content';
postContent.textContent = SampleText;
post.appendChild(postContent);
var postButtons = document.createElement('div');
postButtons.className = 'post-buttons';
post.appendChild(postButtons);
var reshare = createPostButton(postButtons, 'Reshare');
reshare.addEventListener('click', openDialog);
var reply = createPostButton(postButtons, 'Reply');
reply.addEventListener('click', openDialog);
createPostButton(postButtons, 'Enjoyed this post');
container.appendChild(post);
return post;
}
function initPosts() {
var container = document.getElementById('post-container');
for (var i = 0; i < 25; ++i) {
var post = createPost(container);
}
}
function shouldCloseDialogOnClickOutside() {
return document.getElementById('click-outside-to-close').checked;
}
function closeDialog() {
if (dialog.open)
dialog.close();
}
function computeCenteredTop(dialog) {
dialog.style.transition = '';
dialog.showModal();
var computedTopPx = window.getComputedStyle(dialog).top;
var computedTop = parseInt(computedTopPx.substring(0, computedTopPx.length - 2), 10);
dialog.close();
return computedTop;
}
function openDialog() {
dialog.style.opacity = 0;
dialog.style.transition = 'all 250ms ease';
dialog.showModal();
dialog.style.opacity = 1;
}
function pulseDialog() {
if (!dialog.style.webkitAnimation) {
return;
}
// classList isn't supported in IE8, but it's safe to use here as this only
// runs inside WebKit/Chrome anyway.
dialog.classList.add('pulse');
dialog.addEventListener('webkitAnimationEnd', function(e) {
dialog.classList.remove('pulse');
});
}
function clickedInDialog(mouseEvent) {
var rect = dialog.getBoundingClientRect();
return rect.top <= mouseEvent.clientY && mouseEvent.clientY <= rect.top + rect.height
&& rect.left <= mouseEvent.clientX && mouseEvent.clientX <= rect.left + rect.width;
}
function handleClickOutsideDialog() {
if (!shouldCloseDialogOnClickOutside()) {
pulseDialog();
return
}
closeDialog();
}
document.body.addEventListener('keydown', function(e) {
if (e.keyCode == 27)
closeDialog();
});
var enableBackdrop = document.getElementById('enable-backdrop');
enableBackdrop.addEventListener('change', function(e) {
if (this.checked) {
dialog.className = '';
} else {
dialog.className = 'no-backdrop';
}
});
var closeButton = document.getElementById('close-button');
closeButton.addEventListener('click', function(e) { closeDialog(); });
document.body.addEventListener('click', function(e) {
console.info('document body click', e.target);
if (!dialog.open)
return;
if (e.target != document.body)
return;
handleClickOutsideDialog();
});
dialog.addEventListener('click', function(e) {
if (clickedInDialog(e))
return;
handleClickOutsideDialog();
});
initPosts();
</script>
</body>
</html>