mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-01 20:00:10 +00:00
added basic modal overlay widget + some basic refactoring...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
5daaa02964
commit
8d92949e88
57
ui (gen4)/css/widget/overlay.css
Executable file
57
ui (gen4)/css/widget/overlay.css
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
.overlay {
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
|
||||||
|
-webkit-transform-style: preserve-3d;
|
||||||
|
-moz-transform-style: preserve-3d;
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
}
|
||||||
|
.overlay~.overlay {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.overlay .content {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
background: white;
|
||||||
|
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
|
||||||
|
min-width: 200px;
|
||||||
|
max-width: 80vw;
|
||||||
|
max-height: 100vh;
|
||||||
|
|
||||||
|
transform: translateY(-50%) translateX(-50%);
|
||||||
|
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.1) 0.3em 0.3em 5em;
|
||||||
|
}
|
||||||
|
.overlay~.overlay .content {
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.05) 0.1em 0.1em 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NOTE: this does not include text...
|
||||||
|
...need a way to go around this...
|
||||||
|
*/
|
||||||
|
.blur>* {
|
||||||
|
-webkit-filter: blur(2px);
|
||||||
|
filter: blur(2px);
|
||||||
|
}
|
||||||
|
.blur>.overlay {
|
||||||
|
-webkit-filter: none;
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
@ -21,18 +21,7 @@ console.log('>>> browse')
|
|||||||
|
|
||||||
// XXX
|
// XXX
|
||||||
var object = require('../../object')
|
var object = require('../../object')
|
||||||
|
var widget = require('./widget')
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
|
||||||
// helpers...
|
|
||||||
|
|
||||||
function proxyToDom(name){
|
|
||||||
return function(){
|
|
||||||
this.dom[name].apply(this.dom, arguments)
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -308,34 +297,23 @@ var BrowserPrototype = {
|
|||||||
// to them handlers that stop propagation in .__init__(..).
|
// to them handlers that stop propagation in .__init__(..).
|
||||||
// The list of non-propagated events in defined in
|
// The list of non-propagated events in defined in
|
||||||
// .options.nonPropagatedEvents
|
// .options.nonPropagatedEvents
|
||||||
trigger: function(){
|
//
|
||||||
var args = args2array(arguments)
|
// XXX triggering events from here and from jQuery/dom has a
|
||||||
var evt = args.shift()
|
// different effect...
|
||||||
|
trigger: widget.triggerEventWithSource,
|
||||||
if(typeof(evt) == typeof('str')){
|
|
||||||
evt = $.Event(evt)
|
|
||||||
}
|
|
||||||
|
|
||||||
evt.source = this
|
|
||||||
|
|
||||||
args.splice(0, 0, evt)
|
|
||||||
|
|
||||||
this.dom.trigger.apply(this.dom, args)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
|
|
||||||
// proxy event api...
|
// proxy event api...
|
||||||
on: proxyToDom('on'),
|
on: widget.proxyToDom('on'),
|
||||||
one: proxyToDom('one'),
|
one: widget.proxyToDom('one'),
|
||||||
off: proxyToDom('off'),
|
off: widget.proxyToDom('off'),
|
||||||
bind: proxyToDom('bind'),
|
bind: widget.proxyToDom('bind'),
|
||||||
unbind: proxyToDom('unbind'),
|
unbind: widget.proxyToDom('unbind'),
|
||||||
deligate: proxyToDom('deligate'),
|
deligate: widget.proxyToDom('deligate'),
|
||||||
undeligate: proxyToDom('undeligate'),
|
undeligate: widget.proxyToDom('undeligate'),
|
||||||
|
|
||||||
// specific events...
|
// specific events...
|
||||||
focus: proxyToDom('focus'),
|
focus: widget.proxyToDom('focus'),
|
||||||
blur: proxyToDom('blur'),
|
blur: widget.proxyToDom('blur'),
|
||||||
|
|
||||||
|
|
||||||
// base api...
|
// base api...
|
||||||
|
|||||||
115
ui (gen4)/lib/widget/overlay.html
Executable file
115
ui (gen4)/lib/widget/overlay.html
Executable file
@ -0,0 +1,115 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<link rel="stylesheet" href="../../css/widget/overlay.css">
|
||||||
|
<style>
|
||||||
|
|
||||||
|
|
||||||
|
.container {
|
||||||
|
position: absolute;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
width: 50vw;
|
||||||
|
height: 50vh;
|
||||||
|
top: 10vh;
|
||||||
|
right: 10vw;
|
||||||
|
|
||||||
|
border: solid 1px black;
|
||||||
|
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.overlay-content {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
body>.overlay-content {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* theaming... */
|
||||||
|
|
||||||
|
body.dark {
|
||||||
|
background: black;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.dark ::-webkit-scrollbar-track-piece {
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
}
|
||||||
|
.dark ::-webkit-scrollbar-thumb {
|
||||||
|
background: rgba(255, 255, 255, 0.15);
|
||||||
|
}
|
||||||
|
.dark ::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
}
|
||||||
|
.dark .container {
|
||||||
|
border: solid 1px rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script src="../../ext-lib/jquery.js"></script>
|
||||||
|
<script src="../../ext-lib/jquery-ui.js"></script>
|
||||||
|
|
||||||
|
<script src="../jli.js"></script>
|
||||||
|
<script src="../toggler.js"></script>
|
||||||
|
|
||||||
|
<script src="../../ext-lib/require.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
requirejs(['../keyboard', '../../object', './overlay'], function(kbd, obj, ov){
|
||||||
|
keyboard = kbd
|
||||||
|
overlay = ov
|
||||||
|
object = obj
|
||||||
|
})
|
||||||
|
|
||||||
|
$(function(){
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var themeToggler = CSSClassToggler('body',
|
||||||
|
[
|
||||||
|
'none',
|
||||||
|
'light',
|
||||||
|
'dark',
|
||||||
|
],
|
||||||
|
function(state){
|
||||||
|
$('#theme').text(state)
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
Theme: <button id="theme" onclick="themeToggler()">none</button>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<button onclick="overlay.Overlay('body', $('body>.overlay-content').clone())">Global overlay (default)</button>
|
||||||
|
<button onclick="overlay.Overlay('.container', $('body>.overlay-content').clone())">Local overlay</button>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<h4>A context for an overlay...<h4>
|
||||||
|
<button onclick="overlay.Overlay('.container', $('body>.overlay-content').clone())">Local overlay</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="overlay-content">
|
||||||
|
<h3>Overlay</h3>
|
||||||
|
<button>Sub overlay</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<!-- vim:set ts=4 sw=4 : -->
|
||||||
98
ui (gen4)/lib/widget/overlay.js
Executable file
98
ui (gen4)/lib/widget/overlay.js
Executable file
@ -0,0 +1,98 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
define(function(require){ var module = {}
|
||||||
|
console.log('>>> overlay')
|
||||||
|
|
||||||
|
//var DEBUG = DEBUG != null ? DEBUG : true
|
||||||
|
|
||||||
|
var object = require('../../object')
|
||||||
|
var widget = require('./widget')
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************/
|
||||||
|
|
||||||
|
var OverlayClassPrototype = {
|
||||||
|
make: function(client, options){
|
||||||
|
var that = this
|
||||||
|
var overlay = $('<div>')
|
||||||
|
.addClass('overlay')
|
||||||
|
.click(function(){
|
||||||
|
event.stopPropagation()
|
||||||
|
})
|
||||||
|
.append($('<div>')
|
||||||
|
.addClass('content')
|
||||||
|
.click(function(){
|
||||||
|
event.stopPropagation()
|
||||||
|
})
|
||||||
|
.append(client))
|
||||||
|
|
||||||
|
return overlay
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var OverlayPrototype = {
|
||||||
|
dom: null,
|
||||||
|
|
||||||
|
// XXX triggering events from here and from jQuery/dom has a
|
||||||
|
// different effect...
|
||||||
|
trigger: widget.triggerEventWithSource,
|
||||||
|
|
||||||
|
// proxy event api...
|
||||||
|
on: widget.proxyToDom('on'),
|
||||||
|
one: widget.proxyToDom('one'),
|
||||||
|
off: widget.proxyToDom('off'),
|
||||||
|
bind: widget.proxyToDom('bind'),
|
||||||
|
unbind: widget.proxyToDom('unbind'),
|
||||||
|
deligate: widget.proxyToDom('deligate'),
|
||||||
|
undeligate: widget.proxyToDom('undeligate'),
|
||||||
|
|
||||||
|
// custom events...
|
||||||
|
close: function(handler){
|
||||||
|
// trigger the event...
|
||||||
|
if(handler == null){
|
||||||
|
this.dom.detach()
|
||||||
|
if(this.parent.children('.overlay').length == 0){
|
||||||
|
this.parent.removeClass('blur')
|
||||||
|
}
|
||||||
|
this.trigger('close')
|
||||||
|
|
||||||
|
// register a handler...
|
||||||
|
} else {
|
||||||
|
this.on('close', handler)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
__init__: function(parent, client, options){
|
||||||
|
var that = this
|
||||||
|
parent = this.parent = $(parent || 'body')
|
||||||
|
|
||||||
|
var dom = this.dom = this.constructor.make(client, options)
|
||||||
|
.click(function(){
|
||||||
|
that.close()
|
||||||
|
})
|
||||||
|
|
||||||
|
parent
|
||||||
|
.addClass('blur')
|
||||||
|
.append(dom)
|
||||||
|
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var Overlay =
|
||||||
|
module.Overlay =
|
||||||
|
object.makeConstructor('Overlay',
|
||||||
|
OverlayClassPrototype,
|
||||||
|
OverlayPrototype)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* vim:set ts=4 sw=4 : */
|
||||||
|
return module })
|
||||||
55
ui (gen4)/lib/widget/widget.js
Executable file
55
ui (gen4)/lib/widget/widget.js
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
define(function(require){ var module = {}
|
||||||
|
console.log('>>> widget')
|
||||||
|
|
||||||
|
//var DEBUG = DEBUG != null ? DEBUG : true
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************/
|
||||||
|
// helpers...
|
||||||
|
|
||||||
|
var proxyToDom =
|
||||||
|
module.proxyToDom =
|
||||||
|
function(name){
|
||||||
|
return function(){
|
||||||
|
this.dom[name].apply(this.dom, arguments)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// XXX triggering events from here and from jQuery/dom has a
|
||||||
|
// different effect...
|
||||||
|
var triggerEventWithSource =
|
||||||
|
module.triggerEventWithSource =
|
||||||
|
function(){
|
||||||
|
var args = args2array(arguments)
|
||||||
|
var evt = args.shift()
|
||||||
|
|
||||||
|
if(typeof(evt) == typeof('str')){
|
||||||
|
evt = $.Event(evt)
|
||||||
|
}
|
||||||
|
|
||||||
|
evt.source = this
|
||||||
|
|
||||||
|
args.splice(0, 0, evt)
|
||||||
|
|
||||||
|
this.dom.trigger.apply(this.dom, args)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* vim:set ts=4 sw=4 : */
|
||||||
|
return module })
|
||||||
Loading…
x
Reference in New Issue
Block a user