mirror of
https://github.com/flynx/PortableMag.git
synced 2025-11-01 20:40:20 +00:00
started work on keyboard doc generator...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
ac559c9e32
commit
0607c2dd74
128
index.html
128
index.html
@ -107,14 +107,80 @@ function removeOverlay(){
|
|||||||
}, 300)
|
}, 300)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX make this more sensible...
|
||||||
function showInfo(){
|
function showInfo(){
|
||||||
showInOverlay($(
|
showInOverlay($(
|
||||||
'<div>'+
|
'<div>'+
|
||||||
'<h1>Portable Mag</h1>'+
|
'<h1>PortableMag</h1>'+
|
||||||
'<p>licence and copyright info goes here...</p>'+
|
'<p>licence and copyright info goes here...</p>'+
|
||||||
'</div>'))
|
'</div>'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var keyboard_config = {
|
||||||
|
'.overlay': {
|
||||||
|
title: 'Overlay mode.',
|
||||||
|
doc: '',
|
||||||
|
|
||||||
|
Esc: function(){
|
||||||
|
removeOverlay()
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// ignore all keys except Esc here...
|
||||||
|
'.inline-editor-mode': {
|
||||||
|
title: 'Inline editor mode.',
|
||||||
|
doc: '',
|
||||||
|
|
||||||
|
//ignore: '*'
|
||||||
|
Esc: function(){
|
||||||
|
$(':focus').blur()
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
'.chrome:not(.inline-editor-mode)': {
|
||||||
|
title: 'Global bindings.',
|
||||||
|
doc: '',
|
||||||
|
|
||||||
|
Esc: function(){
|
||||||
|
if(toggleEditor('?') == 'on'){
|
||||||
|
toggleEditor('off')
|
||||||
|
} else {
|
||||||
|
togglePageView('off')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Home: firstPage,
|
||||||
|
End: lastPage,
|
||||||
|
Left: {
|
||||||
|
default: prevPage,
|
||||||
|
ctrl: prevArticle,
|
||||||
|
},
|
||||||
|
Right: {
|
||||||
|
default: nextPage,
|
||||||
|
ctrl: nextArticle,
|
||||||
|
},
|
||||||
|
Space: {
|
||||||
|
default: nextPage,
|
||||||
|
shift: prevPage
|
||||||
|
},
|
||||||
|
Enter: function(){ togglePageView('on') },
|
||||||
|
// combined navigation with actions..
|
||||||
|
Up: function(){ togglePageView() },
|
||||||
|
Down: function(){ togglePageView() },
|
||||||
|
|
||||||
|
F: function(){ togglePageFitMode() },
|
||||||
|
B: {
|
||||||
|
default: toggleBookmark,
|
||||||
|
ctrl: function(){ toggleThemes() },
|
||||||
|
},
|
||||||
|
|
||||||
|
// XXX this should not be in the production viewer...
|
||||||
|
E: function(){ toggleEditor() },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
// general window behavior...
|
// general window behavior...
|
||||||
@ -124,64 +190,7 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
// keyboard...
|
// keyboard...
|
||||||
$(document)
|
$(document)
|
||||||
.keydown(makeKeyboardHandler({
|
.keydown(makeKeyboardHandler(keyboard_config,
|
||||||
'.overlay': {
|
|
||||||
Esc: function(){
|
|
||||||
removeOverlay()
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// ignore all keys except Esc here...
|
|
||||||
'.inline-editor-mode': {
|
|
||||||
//ignore: '*'
|
|
||||||
Esc: function(){
|
|
||||||
$(':focus').blur()
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
'.chrome:not(.inline-editor-mode)': {
|
|
||||||
title: 'Global',
|
|
||||||
doc: '',
|
|
||||||
|
|
||||||
Esc: function(){
|
|
||||||
if(toggleEditor('?') == 'on'){
|
|
||||||
toggleEditor('off')
|
|
||||||
} else {
|
|
||||||
togglePageView('off')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
Home: firstPage,
|
|
||||||
End: lastPage,
|
|
||||||
Left: {
|
|
||||||
default: prevPage,
|
|
||||||
ctrl: prevArticle,
|
|
||||||
},
|
|
||||||
Right: {
|
|
||||||
default: nextPage,
|
|
||||||
ctrl: nextArticle,
|
|
||||||
},
|
|
||||||
Space: {
|
|
||||||
default: nextPage,
|
|
||||||
shift: prevPage
|
|
||||||
},
|
|
||||||
Enter: function(){ togglePageView('on') },
|
|
||||||
// combined navigation with actions..
|
|
||||||
Up: function(){ togglePageView() },
|
|
||||||
Down: function(){ togglePageView() },
|
|
||||||
|
|
||||||
F: function(){ togglePageFitMode() },
|
|
||||||
B: {
|
|
||||||
default: toggleBookmark,
|
|
||||||
ctrl: function(){ toggleThemes() },
|
|
||||||
},
|
|
||||||
|
|
||||||
// XXX this should not be in the production viewer...
|
|
||||||
E: function(){ toggleEditor() },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
function(k){console.log(k)}))
|
function(k){console.log(k)}))
|
||||||
|
|
||||||
window.MagazineScroller = makeScrollHandler($('.viewer'), {
|
window.MagazineScroller = makeScrollHandler($('.viewer'), {
|
||||||
@ -284,6 +293,7 @@ $(document).ready(function(){
|
|||||||
<div class="top-toolbar">
|
<div class="top-toolbar">
|
||||||
<div class="left-set">
|
<div class="left-set">
|
||||||
<div class="button title"><a href="#home" class="magazine-title-text">Magazine Title</a></div>
|
<div class="button title"><a href="#home" class="magazine-title-text">Magazine Title</a></div>
|
||||||
|
<!--div class="button title magazine-title-text" contenteditable="false">Magazine Title</div-->
|
||||||
</div>
|
</div>
|
||||||
<div class="right-set">
|
<div class="right-set">
|
||||||
<div class="button prev-bookmark">
|
<div class="button prev-bookmark">
|
||||||
|
|||||||
106
lib/keyboard.js
106
lib/keyboard.js
@ -29,6 +29,11 @@ var SPECIAL_KEYS = {
|
|||||||
115: 'F4', 119: 'F8', 123: 'F12',
|
115: 'F4', 119: 'F8', 123: 'F12',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var KEY_CODES = {}
|
||||||
|
for(var k in SPECIAL_KEYS){
|
||||||
|
KEY_CODES[SPECIAL_KEYS[k]] = k
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// XXX some keys look really wrong...
|
// XXX some keys look really wrong...
|
||||||
function toKeyName(code){
|
function toKeyName(code){
|
||||||
@ -46,7 +51,10 @@ function toKeyName(code){
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
function chr(c){
|
function toKeyCode(c){
|
||||||
|
if(c in KEY_CODES){
|
||||||
|
return KEY_CODES[c]
|
||||||
|
}
|
||||||
return c.charCodeAt(0)
|
return c.charCodeAt(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,8 +132,15 @@ function makeKeyboardHandler(keybindings, unhandled){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// alias...
|
// alias...
|
||||||
while (typeof(handler) == typeof(123)) {
|
while (typeof(handler) == typeof(123) || typeof(handler) == typeof('str')) {
|
||||||
handler = bindings[handler]
|
if(handler in bindings){
|
||||||
|
// XXX need to take care of that we can always be a number or a string...
|
||||||
|
handler = bindings[handler]
|
||||||
|
} else if(typeof(h) == typeof(1)) {
|
||||||
|
handler = bindings[toKeyName(handler)]
|
||||||
|
} else {
|
||||||
|
handler = bindings[toKeyCode(handler)]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// no handler...
|
// no handler...
|
||||||
if(handler == null){
|
if(handler == null){
|
||||||
@ -172,6 +187,91 @@ function makeKeyboardHandler(keybindings, unhandled){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// helper...
|
||||||
|
function doc(text, func){
|
||||||
|
func.doc = text
|
||||||
|
return func
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Build structure ready for conversion to HTML help.
|
||||||
|
* Structure:
|
||||||
|
* {
|
||||||
|
* <section-title>: {
|
||||||
|
* doc: ...
|
||||||
|
*
|
||||||
|
* <handler-doc>: <keys-spec>
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* <keys-spec> - list of key names.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function getKeyHandler(key, keybindings){
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function buildKeyindingsHelp(keybindings){
|
||||||
|
var res = {}
|
||||||
|
|
||||||
|
for(var selector in keybindings){
|
||||||
|
var section = keybindings[selector]
|
||||||
|
var title = section.title == null ? selector : section.title
|
||||||
|
var res_sec = {
|
||||||
|
doc: section.doc,
|
||||||
|
}
|
||||||
|
res.title = res_sec
|
||||||
|
|
||||||
|
for(var k in section){
|
||||||
|
// handler...
|
||||||
|
var h = section[k]
|
||||||
|
var doc
|
||||||
|
var key = typeof(k) == typeof(1) ? toKeyName(k) : k
|
||||||
|
|
||||||
|
// an alias...
|
||||||
|
while(typeof(h) == typeof(1) || typeof(h) == typeof('s')){
|
||||||
|
if(h in section){
|
||||||
|
// XXX need to take care of that we can always be a number or a string...
|
||||||
|
h = section[h]
|
||||||
|
} else if(typeof(h) == typeof(1)) {
|
||||||
|
h = section[toKeyName(h)]
|
||||||
|
} else {
|
||||||
|
h = section[toKeyCode(h)]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no handler...
|
||||||
|
if(h == null){
|
||||||
|
doc = 'Nothing'
|
||||||
|
|
||||||
|
// a handler with doc (array)...
|
||||||
|
} else if(typeof(h) == typeof([]) && handler.constructor.name == 'Array'){
|
||||||
|
doc = h[1]
|
||||||
|
|
||||||
|
// complex handler (object)...
|
||||||
|
} else if(typeof(h) == typeof({})){
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
|
||||||
|
// simple handler (function)...
|
||||||
|
} else {
|
||||||
|
doc = h.doc != null ? h.doc : h
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// push the actual data...
|
||||||
|
if(doc in res_sec){
|
||||||
|
res_sec[doc].push(key)
|
||||||
|
} else {
|
||||||
|
res_sec[doc] = [key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* vim:set ts=4 sw=4 : */
|
* vim:set ts=4 sw=4 : */
|
||||||
|
|||||||
@ -127,7 +127,7 @@
|
|||||||
.editor-status {
|
.editor-status {
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 30px;
|
top: 35px;
|
||||||
left: -200px;
|
left: -200px;
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user