From 7d02a50eaafb6fb84b6dc986b332ebac9f3b7d46 Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 20 Jun 2008 07:56:40 +0000 Subject: [PATCH] added virtual keyboard --- .../fotokiste/static/css/1024optimized.css | 6 + .../css/simple/button_set.gif | Bin 0 -> 4277 bytes .../virtual_keyboard/css/simple/keyboard.css | 335 ++++ .../virtual_keyboard/css/small/button_set.gif | Bin 0 -> 6585 bytes .../virtual_keyboard/css/small/keyboard.css | 307 ++++ .../css/soberTouch/button_set.gif | Bin 0 -> 6099 bytes .../css/soberTouch/keyboard.css | 342 ++++ .../virtual_keyboard/css/winxp/button_set.gif | Bin 0 -> 11995 bytes .../virtual_keyboard/css/winxp/keyboard.css | 338 ++++ .../extensions/documentselection.js | 695 ++++++++ .../static/virtual_keyboard/extensions/dom.js | 338 ++++ .../extensions/eventmanager.js | 524 ++++++ .../virtual_keyboard/extensions/ext/array.js | 325 ++++ .../virtual_keyboard/extensions/ext/object.js | 12 + .../virtual_keyboard/extensions/ext/regexp.js | 33 + .../virtual_keyboard/extensions/ext/string.js | 307 ++++ .../virtual_keyboard/extensions/helpers.js | 388 +++++ .../extensions/scriptqueue.js | 200 +++ .../virtual_keyboard/layouts/layouts.js | 750 ++++++++ .../virtual_keyboard/virtualkeyboard.js | 1544 +++++++++++++++++ .../static/virtual_keyboard/vk_loader.js | 92 + fotokiste/fotokiste/templates/mailtext.kid | 18 +- 22 files changed, 6551 insertions(+), 3 deletions(-) create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/simple/button_set.gif create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/simple/keyboard.css create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/small/button_set.gif create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/small/keyboard.css create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/button_set.gif create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/keyboard.css create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/winxp/button_set.gif create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/css/winxp/keyboard.css create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/documentselection.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/dom.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/eventmanager.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/ext/array.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/ext/object.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/ext/regexp.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/ext/string.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/helpers.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/extensions/scriptqueue.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/layouts/layouts.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/virtualkeyboard.js create mode 100644 fotokiste/fotokiste/static/virtual_keyboard/vk_loader.js diff --git a/fotokiste/fotokiste/static/css/1024optimized.css b/fotokiste/fotokiste/static/css/1024optimized.css index 1e939cc..e4a59b8 100644 --- a/fotokiste/fotokiste/static/css/1024optimized.css +++ b/fotokiste/fotokiste/static/css/1024optimized.css @@ -110,6 +110,12 @@ h2 { padding: 20px; } + +#vkb { + margin: 0 auto 0 15%; +} + + /* Style for the footer */ #footer { padding: 2px; diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/simple/button_set.gif b/fotokiste/fotokiste/static/virtual_keyboard/css/simple/button_set.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d381fbb4f518a3b65d76a1d6206ad2c31bb2713 GIT binary patch literal 4277 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 X;3%$>hplX(t^H`O)wr$@5fA`7qOe>E literal 0 HcmV?d00001 diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/simple/keyboard.css b/fotokiste/fotokiste/static/virtual_keyboard/css/simple/keyboard.css new file mode 100644 index 0000000..4572629 --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/css/simple/keyboard.css @@ -0,0 +1,335 @@ +html.VirtualKeyboardPopup, body.VirtualKeyboardPopup { + padding: 0; + margin: 0; +} + +#virtualKeyboard { + border: 1px solid #686888; + background: #fefefe; + height: 160px; + margin: 0; + padding: 0; + position: relative; + width: 396px; +} +/* +* global overrides +*/ +#virtualKeyboard * { + border: 0; + color: black; + cursor: default; + margin: 0; + padding: 0; +} +#virtualKeyboard #kbDesk { + display: inline-block; + margin: 0; + padding: 4px 2px 0 2px; +/*IE5.5 will ignore the rule below */ + margin/**/:/**/ 4px 2px 0 4px; + padding/**/:/**/ 0; +/*--*/ + position: relative; + font-size: 1px; + overflow: hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +#virtualKeyboard #kbDesk div.kbButton { + float: left; + height: 26px; + overflow: hidden; + padding: 0; + position: relative; + width: 26px; + z-index: 2; +} +#virtualKeyboard #kbDesk div.kbButton a { + background: url(button_set.gif) 0 0 no-repeat; + display: block; + height: 100%; + position: relative; + text-decoration: none; + width: 100%; +} +#virtualKeyboard #kbDesk.capsLock div.kbButton span.normal { + text-transform: uppercase; +} + +#virtualKeyboard #kbDesk div.kbButtonHover a { + background-position: 0 -27px; +} +#virtualKeyboard #kbDesk div.kbButtonDown a { + background-position: 0 -54px; +} +#virtualKeyboard #kbDesk div.kbButton span { + display: block; + font-family: Verdana; + font-size: 13px; + font-weight: normal; + overflow: visible; + text-align: center; +} +#virtualKeyboard #kbDesk div.kbButton span.shifted, +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: green; + font-size: 6pt; + height: 100%; + line-height: 1.1; + position: absolute; + right: -5px; + top: 0; + text-transform: none; + vertical-align: bottom; + width: 100%; +} +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: blue; + right: 7px; +} +#virtualKeyboard #kbDesk div.kbButton span.normal { + position: absolute; + bottom: 4px; + left: 5px; + text-indent: 0; +} +#virtualKeyboard #kbDesk span.deadKey { + color: red; +} + +#virtualKeyboard #kbDesk div#kb_benter { + background-position: -194px 0px; + margin-top: -26px; + position: relative; + float: right; + height: 52px; + width: 56px; + z-index: -1; +} +#virtualKeyboard #kbDesk div#kb_benter[id] { + z-index: 0; +} +#virtualKeyboard #kbDesk div#kb_benter a { + background-position: -194px 0px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonHover a { + background-position: -194px -53px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonDown a { + background-position: -194px -106px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace a { + background-position: -27px -81px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonHover a { + background-position: -27px -108px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonDown a { + background-position: -27px -135px; +} +#virtualKeyboard #kbDesk div#kb_btab { + width: 41px; +} +#virtualKeyboard #kbDesk div#kb_btab a { + background-position: -155px -81px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonHover a { + background-position: -155px -108px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonDown a { + background-position: -155px -135px; +} +#virtualKeyboard #kbDesk div#kb_bcaps { + width: 48px; +} +#virtualKeyboard #kbDesk div#kb_bcaps a { + background-position: -107px -81px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonHover a { + background-position: -107px -108px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonDown a { + background-position: -107px -135px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left, +#virtualKeyboard #kbDesk div#kb_bshift_right { + width: 52px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left a, +#virtualKeyboard #kbDesk div#kb_bshift_right a { + background-position: -54px -81px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonHover a { + background-position: -54px -108px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonDown a { + background-position: -54px -135px; +} +#virtualKeyboard #kbDesk div#kb_balt_left, +#virtualKeyboard #kbDesk div#kb_balt_right { + padding: 0 0 0 2px; + width: 32px; +} +#virtualKeyboard #kbDesk div#kb_balt_left { + margin-left: 33px; + padding-left: 0; +/*IE5.5 will ignore the rule below */ + padding-left/**/:/**/ 41px; + margin-left/**/:/**/ 0; +/*--*/ +} +#virtualKeyboard #kbDesk div#kb_balt_left a, +#virtualKeyboard #kbDesk div#kb_balt_right a { + background-position: -251px 0; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonHover a { + background-position: -251px -27px; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonDown a { + background-position: -251px -54px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left, +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: left; + width: 32px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: right; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left a, +#virtualKeyboard #kbDesk div#kb_bctrl_right a { + background-position: -251px -81px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonHover a { + background-position: -251px -108px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonDown a { + background-position: -251px -135px; +} +#virtualKeyboard #kbDesk div#kb_bdel a { + background-position: 0 -81px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonHover a { + background-position: 0 -108px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonDown a { + background-position: 0 -135px; +} +#virtualKeyboard #kbDesk div#kb_bspace { + width: 166px; +} +#virtualKeyboard #kbDesk div#kb_bspace a { + background-position: -27px 0; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonHover a { + background-position: -27px -27px; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonDown a { + background-position: -27px -54px; +} + +#virtualKeyboard select#kb_langselector, +#virtualKeyboard select#kb_mappingselector { + border: 1px solid black; + bottom: 2px; + position: absolute; + right: 2px; + width: 125px; +} +#virtualKeyboard select#kb_mappingselector { + right: 140px; +} +#virtualKeyboard select, +#virtualKeyboard select option { + background: #fff; + font-family: Arial, Tahoma, Verdana sans-serif; + font-size: 11px; +} +#virtualKeyboard select optgroup option { + padding-left: 20px; +} + +#virtualKeyboard #copyrights { + bottom: 4px; + color: blue; + font-size: 9px; + left: 2px; + line-height: normal; + position: absolute; +} +#virtualKeyboard #copyrights a { + font-size: 9px; + color: blue; + cursor: default; + outline: 0; +} + +/** + * + * Styles for the IME field + * + */ +#VirtualKeyboardIME { + background: #fff; + border:1px solid #333; + position: absolute; + width: 200px; +} +#VirtualKeyboardIME div.IMEContent { + border: 1px solid #333; + border-top: 0; + border-bottom: 0; + height: 21px; + line-height: 21px; + margin: 0 12px; + overflow: auto; + padding: 0 3px; + white-space: nowrap; +} +#VirtualKeyboardIME div.left { + border-bottom: 10px solid #fff; + border-left: 0px solid black; + border-right: 10px solid #000; + border-top: 10px solid #fff; + position: absolute; + left: 1px; + font-size: 1px; + overflow: hidden; +} +#VirtualKeyboardIME div.right { + border-bottom: 10px solid #fff; + border-left: 10px solid #000; + border-right: 0px solid black; + border-top: 10px solid #fff; + float: right; + position: absolute; + right: 1px; + overflow: hidden; +} + +/************************************ +* Place for the locale-dependent styles +* overload fonts here +* +* Language-dependent class name is equal to uppercased language domain code (ZH in zh-CN) +*/ +#virtualKeyboard #kbDesk.ZH div.kbButton span { + font-family: MingLiU, SimSun, "Arial Unicode MS"; + font-size: 13px; +} +#virtualKeyboard #kbDesk.ZH div.kbButton span.alted, +#virtualKeyboard #kbDesk.ZH div.kbButton span.shifted { + font-size: 9px; +} +#VirtualKeyboardIME.ZH div.IMEContent { + font-family: SimSun, "Arial Unicode MS"; + font-size: 16px; +} \ No newline at end of file diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/small/button_set.gif b/fotokiste/fotokiste/static/virtual_keyboard/css/small/button_set.gif new file mode 100644 index 0000000000000000000000000000000000000000..11ce616dea7b1bed79f517250313145ed1bb2ad1 GIT binary patch literal 6585 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 Q6lGeYopLoFAP^w`Kd+dTr~m)} literal 0 HcmV?d00001 diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/small/keyboard.css b/fotokiste/fotokiste/static/virtual_keyboard/css/small/keyboard.css new file mode 100644 index 0000000..07137e8 --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/css/small/keyboard.css @@ -0,0 +1,307 @@ +html.VirtualKeyboardPopup, body.VirtualKeyboardPopup { + padding: 0; + margin: 0; +} + +#virtualKeyboard { + border: 1px solid #686888; + background: #f0ecff; + height: 120px; + margin: 0; + padding: 0; + position: relative; + width: 276px; +} +/* +* global overrides +*/ +#virtualKeyboard * { + border: 0; + color: black; + cursor: default; + margin: 0; + padding: 0; +} +#virtualKeyboard #kbDesk { + display: inline-block; + margin: 0; + padding: 4px 2px 0 2px; +/*IE5.5 will ignore the rule below */ + margin/**/:/**/ 4px 2px 0 4px; + padding/**/:/**/ 0; +/*--*/ + position: relative; + font-size: 1px; + overflow: hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +#virtualKeyboard #kbDesk div.kbButton { + float: left; + height: 18px; + overflow: hidden; + padding: 0; + position: relative; + width: 18px; + z-index: 2; +} +#virtualKeyboard #kbDesk div.kbButton a { + background: url(button_set.gif) 0 0 no-repeat; + display: block; + height: 100%; + position: relative; + text-decoration: none; + width: 100%; +} +#virtualKeyboard #kbDesk.capsLock div.kbButton span.normal { + text-transform: uppercase; +} + +#virtualKeyboard #kbDesk div.kbButtonHover a { + background-position: 0 -21px; +} +#virtualKeyboard #kbDesk div.kbButtonDown a { + background-position: 0 -42px; +} +#virtualKeyboard #kbDesk div.kbButton span { + display: block; + font-family: Verdana; + font-size: 11px; + font-weight: normal; + overflow: visible; + position: relative; + text-align: center; + top: 2px; +} +#virtualKeyboard #kbDesk div.kbButton span.shifted, +#virtualKeyboard #kbDesk div.kbButton span.alted { + display: none; +} +#virtualKeyboard #kbDesk span.deadKey { + color: red; +} +#virtualKeyboard #kbDesk div#kb_benter { + margin-top: -18px; + position: relative; + float: right; + height: 36px; + width: 38px; + z-index: -1; +} +#virtualKeyboard #kbDesk div#kb_benter[id] { + z-index: 0; +} +#virtualKeyboard #kbDesk div#kb_benter a { + background-position: -150px 0; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonHover a { + background-position: -150px -42px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonDown a { + background-position: -150px -84px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace a { + background-position: -21px -63px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonHover a { + background-position: -21px -84px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonDown a { + background-position: -21px -105px; +} +#virtualKeyboard #kbDesk div#kb_btab { + width: 29px; +} +#virtualKeyboard #kbDesk div#kb_btab a { + background-position: -117px -63px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonHover a { + background-position: -117px -84px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonDown a { + background-position: -117px -105px; +} +#virtualKeyboard #kbDesk div#kb_bcaps { + width: 33px; +} +#virtualKeyboard #kbDesk div#kb_bcaps a { + background-position: -81px -63px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonHover a { + background-position: -81px -84px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonDown a { + background-position: -81px -105px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left, +#virtualKeyboard #kbDesk div#kb_bshift_right { + width: 36px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left a, +#virtualKeyboard #kbDesk div#kb_bshift_right a { + background-position: -42px -63px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonHover a { + background-position: -42px -84px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonDown a { + background-position: -42px -105px; +} +#virtualKeyboard #kbDesk div#kb_balt_left, +#virtualKeyboard #kbDesk div#kb_balt_right { + width: 21px; +} +#virtualKeyboard #kbDesk div#kb_balt_left { + margin-left: -23px; + padding-left: 0; +/*IE5.5 will ignore the rule below */ + padding-left/**/:/**/ 32px; + margin-left/**/:/**/ 0; +/*--*/ +} +#virtualKeyboard #kbDesk div#kb_balt_left a, +#virtualKeyboard #kbDesk div#kb_balt_right a { + background-position: -192px 0; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonHover a { + background-position: -192px -21px; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonDown a { + background-position: -192px -42px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left, +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: left; + width: 29px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: right; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left a, +#virtualKeyboard #kbDesk div#kb_bctrl_right a { + background-position: -191px -63px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonHover a { + background-position: -191px -84px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonDown a { + background-position: -191px -105px; +} +#virtualKeyboard #kbDesk div#kb_bdel a { + background-position: 0 -63px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonHover a { + background-position: 0 -84px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonDown a { + background-position: 0 -105px; +} +#virtualKeyboard #kbDesk div#kb_bspace { + width: 100px; +} +#virtualKeyboard #kbDesk div#kb_bspace a { + background-position: -21px 0; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonHover a { + background-position: -21px -21px; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonDown a { + background-position: -21px -42px; +} + +#virtualKeyboard select#kb_langselector, +#virtualKeyboard select#kb_mappingselector { + border: 1px solid black; + bottom: 2px; + position: absolute; + right: 2px; + width: 75px; +} +#virtualKeyboard select#kb_mappingselector { + right: 80px; +} +#virtualKeyboard select, +#virtualKeyboard select option { + background: #fff; + font-family: Arial, Tahoma, Verdana sans-serif; + font-size: 11px; +} +#virtualKeyboard select optgroup option { + padding-left: 20px; +} + +#virtualKeyboard #copyrights { + bottom: 2px; + color: #77a; + font-size: 9px; + left: 4px; + line-height: normal; + position: absolute; +} +#virtualKeyboard #copyrights a { + font-size: 9px; + color: #77a; + cursor: default; + outline: 0; +} + +/** + * + * Styles for the IME field + * + */ +#VirtualKeyboardIME { + background: #fff; + border:1px solid #333; + position: absolute; + width: 200px; +} +#VirtualKeyboardIME div.IMEContent { + border: 1px solid #333; + border-top: 0; + border-bottom: 0; + height: 21px; + line-height: 21px; + margin: 0 12px; + overflow: auto; + padding: 0 3px; + white-space: nowrap; +} +#VirtualKeyboardIME div.left { + border-bottom: 10px solid #fff; + border-left: 0px solid black; + border-right: 10px solid #000; + border-top: 10px solid #fff; + position: absolute; + left: 1px; + font-size: 1px; + overflow: hidden; +} +#VirtualKeyboardIME div.right { + border-bottom: 10px solid #fff; + border-left: 10px solid #000; + border-right: 0px solid black; + border-top: 10px solid #fff; + float: right; + position: absolute; + right: 1px; + overflow: hidden; +} + +/************************************ +* Place for the locale-dependent styles +* overload fonts here +* +* Language-dependent class name is equal to uppercased language domain code (ZH in zh-CN) +*/ +#virtualKeyboard #kbDesk.ZH div.kbButton span { + font-family: MingLiU, SimSun, "Arial Unicode MS"; + font-size: 11px; +} diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/button_set.gif b/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/button_set.gif new file mode 100644 index 0000000000000000000000000000000000000000..392a8c8e7daf86f41619672555cbf52f4367b1aa GIT binary patch literal 6099 zcmV;^7cA&UNk%w1VYdPH0J9GOg@uJrbeu~|OSreUE;BiIcXu~YZC;DJs;Q|E6Bf

M)j$~<` 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 Z?cT+kSMOfFef|Cg99ZyR!fPV{06QywAqM~e literal 0 HcmV?d00001 diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/keyboard.css b/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/keyboard.css new file mode 100644 index 0000000..7f20e70 --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/keyboard.css @@ -0,0 +1,342 @@ +/* Skin made by Bastiaan Fronik (info [ at ] bastiaanfronik dot com) + based on stylesheet of WingedFox */ +html.VirtualKeyboardPopup, body.VirtualKeyboardPopup { + padding: 0; + margin: 0; +} + +#virtualKeyboard { + border: 1px solid #686888; + background: #dedfe0; + height: 242px; + margin: 0; + padding-right: 2px; + position: relative; + width: 606px; +} +/* +* global overrides +*/ +#virtualKeyboard * { + border: 0; + color: black; + cursor: default; + margin: 0; + padding: 0; +} +#virtualKeyboard #kbDesk { + display: inline-block; + margin: 0; + padding: 4px 2px 0 2px; +/*IE5.5 will ignore the rule below */ + margin/**/:/**/ 4px 2px 0 4px; + padding/**/:/**/ 0; +/*--*/ + position: relative; + font-size: 1px; + overflow: hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +#virtualKeyboard #kbDesk div.kbButton { + float: left; + height: 38px; + overflow: hidden; + padding: 0; + margin: 1px; + position: relative; + width: 38px; + z-index: 2; +} +#virtualKeyboard #kbDesk div.kbButton a { + background: url(button_set.gif) 0 0 no-repeat; + display: block; + height: 100%; + position: relative; + text-decoration: none; + width: 100%; +} +#virtualKeyboard #kbDesk.capsLock div.kbButton span.normal { + text-transform: uppercase; +} + +#virtualKeyboard #kbDesk div.kbButtonHover a { + background-position: 0 -41px; +} +#virtualKeyboard #kbDesk div.kbButtonDown a { + background-position: 0 -82px; +} +#virtualKeyboard #kbDesk div.kbButton span { + display: block; + font-family: Verdana; + font-size: 18px; + font-weight: normal; + overflow: visible; + text-align: center; +} +#virtualKeyboard #kbDesk div.kbButton span.shifted, +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: green; + font-size: 9pt; + height: 100%; + line-height: 1.1; + position: absolute; + right: -5px; + top: 0; + text-transform: none; + vertical-align: bottom; + width: 100%; +} +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: blue; + right: 7px; +} +#virtualKeyboard #kbDesk div.kbButton span.normal { + position: absolute; + bottom: 4px; + left: 5px; + text-indent: 0; +} +#virtualKeyboard #kbDesk span.deadKey { + color: red; +} + +#virtualKeyboard #kbDesk div#kb_benter +{ + background-position: -303px 0px; + margin-top: -39px; + margin-bottom: 1px; + position: relative; + float: right; + height: 78px; + width: 85px; + z-index: -1; +} +#virtualKeyboard #kbDesk div#kb_benter[id] { + z-index: 0; +} +#virtualKeyboard #kbDesk div#kb_benter a { + background-position: -303px 0px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonHover a { + background-position: -303px -81px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonDown a { + background-position: -303px -162px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace a { + background-position: -41px -123px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonHover a { + background-position: -41px -164px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonDown a { + background-position: -41px -205px; +} +#virtualKeyboard #kbDesk div#kb_btab { + width: 60px; +} +#virtualKeyboard #kbDesk div#kb_btab a { + background-position: -238px -123px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonHover a { + background-position: -238px -164px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonDown a { + background-position: -238px -205px; +} +#virtualKeyboard #kbDesk div#kb_bcaps { + width: 71px; +} +#virtualKeyboard #kbDesk div#kb_bcaps a { + background-position: -164px -123px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonHover a { + background-position: -164px -164px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonDown a { + background-position: -164px -205px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left, +#virtualKeyboard #kbDesk div#kb_bshift_right { + width: 78px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left a, +#virtualKeyboard #kbDesk div#kb_bshift_right a { + background-position: -82px -123px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonHover a { + background-position: -82px -164px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonDown a { + background-position: -82px -205px; +} +#virtualKeyboard #kbDesk div#kb_balt_left, +#virtualKeyboard #kbDesk div#kb_balt_right { + padding: 0 0 0 2px; + width: 47px; +} +#virtualKeyboard #kbDesk div#kb_balt_left { + margin-left: 33px; + padding-left: 0; +/*IE5.5 will ignore the rule below */ + padding-left/**/:/**/ 41px; + margin-left/**/:/**/ 0; +/*--*/ +} +#virtualKeyboard #kbDesk div#kb_balt_left a, +#virtualKeyboard #kbDesk div#kb_balt_right a { + background-position: -391px 0; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonHover a { + background-position: -391px -41px; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonDown a { + background-position: -391px -82px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left, +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: left; + width: 48px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: right; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left a, +#virtualKeyboard #kbDesk div#kb_bctrl_right a { + background-position: -391px -123px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonHover a { + background-position: -391px -164px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonDown a { + background-position: -391px -205px; +} +#virtualKeyboard #kbDesk div#kb_bdel a { + background-position: 0 -123px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonHover a { + background-position: 0 -164px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonDown a { + background-position: 0 -205px; +} +#virtualKeyboard #kbDesk div#kb_bspace { + width: 259px; +} +#virtualKeyboard #kbDesk div#kb_bspace a { + background-position: -41px 0; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonHover a { + background-position: -41px -41px; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonDown a { + background-position: -41px -82px; +} + +#virtualKeyboard select#kb_langselector, +#virtualKeyboard select#kb_mappingselector { + border: 1px solid black; + bottom: 2px; + position: absolute; + right: 2px; + width: 125px; +} +#virtualKeyboard select#kb_mappingselector { + right: 140px; +} +#virtualKeyboard select, +#virtualKeyboard select option { + background: #fff; + font-family: Arial, Tahoma, Verdana sans-serif; + font-size: 11px; +} +#virtualKeyboard select optgroup option { + padding-left: 20px; +} + +#virtualKeyboard #copyrights +{ + bottom: 4px; + color: #6f737a; + font-size: 9px; + left: 4px; + line-height: normal; + position: absolute; +} +#virtualKeyboard #copyrights a { + font-size: 9px; + color: #6f737a; + cursor: default; + outline: 0; +} + +/** + * + * Styles for the IME field + * + */ +#VirtualKeyboardIME { + background: #fff; + border:1px solid #333; + position: absolute; + width: 200px; +} +#VirtualKeyboardIME div.IMEContent { + border: 1px solid #333; + border-top: 0; + border-bottom: 0; + height: 21px; + line-height: 21px; + margin: 0 12px; + overflow: auto; + padding: 0 3px; + white-space: nowrap; +} +#VirtualKeyboardIME div.left { + border-bottom: 10px solid #fff; + border-left: 0px solid black; + border-right: 10px solid #000; + border-top: 10px solid #fff; + position: absolute; + left: 1px; + font-size: 1px; + overflow: hidden; +} +#VirtualKeyboardIME div.right { + border-bottom: 10px solid #fff; + border-left: 10px solid #000; + border-right: 0px solid black; + border-top: 10px solid #fff; + float: right; + position: absolute; + right: 1px; + overflow: hidden; +} + + +/************************************ +* Place for the locale-dependent styles +* overload fonts here +* +* Language-dependend class name is equal to uppercased language domain code (ZH in zh-CN) +*/ +#virtualKeyboard #kbDesk.ZH div.kbButton span { + font-family: MingLiU, SimSun, "Arial Unicode MS"; + font-size: 13px; +} +#virtualKeyboard #kbDesk.ZH div.kbButton span.alted, +#virtualKeyboard #kbDesk.ZH div.kbButton span.shifted { + font-size: 9px; +} +#VirtualKeyboardIME.ZH div.IMEContent { + font-family: SimSun, "Arial Unicode MS"; + font-size: 16px; +} \ No newline at end of file diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/button_set.gif b/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/button_set.gif new file mode 100644 index 0000000000000000000000000000000000000000..5acd4ac748696cf4c9181cdcd3ea9d0a313c0fc7 GIT binary patch literal 11995 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 literal 0 HcmV?d00001 diff --git a/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/keyboard.css b/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/keyboard.css new file mode 100644 index 0000000..8807a5e --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/keyboard.css @@ -0,0 +1,338 @@ +html.VirtualKeyboardPopup, body.VirtualKeyboardPopup { + padding: 0; + margin: 0; +} + +#virtualKeyboard { + border: 1px solid #686888; + background: #ECE9D8; + height: 160px; + margin: 0; + padding: 0; + position: relative; + width: 396px; +} +/* +* global overrides +*/ +#virtualKeyboard * { + border: 0; + color: black; + cursor: default; + margin: 0; + padding: 0; +} +#virtualKeyboard #kbDesk { + display: inline-block; + margin: 0; + padding: 4px 2px 0 2px; +/*IE5.5 will ignore the rule below */ + margin/**/:/**/ 4px 2px 0 4px; + padding/**/:/**/ 0; +/*--*/ + position: relative; + font-size: 1px; + overflow: hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +#virtualKeyboard #kbDesk div.kbButton { + float: left; + height: 26px; + overflow: hidden; + padding: 0; + position: relative; + width: 26px; + z-index: 2; +} +#virtualKeyboard #kbDesk div.kbButton a { + background: url(button_set.gif) 0 0 no-repeat; + display: block; + height: 100%; + position: relative; + text-decoration: none; + width: 100%; +} +#virtualKeyboard #kbDesk.capsLock div.kbButton span.normal { + text-transform: uppercase; +} + +#virtualKeyboard #kbDesk div.kbButtonHover a { + background-position: 0 -27px; +} +#virtualKeyboard #kbDesk div.kbButtonDown a { + background-position: 0 -54px; +} +#virtualKeyboard #kbDesk div.kbButton span { + display: block; + font-family: Verdana; + font-size: 13px; + font-weight: normal; + overflow: visible; + text-align: center; +} +#virtualKeyboard #kbDesk div.kbButton span.shifted, +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: green; + font-size: 6pt; + height: 100%; + line-height: 1.1; + position: absolute; + right: -5px; + top: 0; + text-transform: none; + vertical-align: bottom; + width: 100%; +} +#virtualKeyboard #kbDesk div.kbButton span.alted { + color: blue; + right: 7px; +} +#virtualKeyboard #kbDesk div.kbButton span.normal { + position: absolute; + bottom: 4px; + left: 5px; + text-indent: 0; +} +#virtualKeyboard #kbDesk span.deadKey { + color: red; +} + +#virtualKeyboard #kbDesk div#kb_benter { + background-position: -194px 0px; + margin-top: -26px; + position: relative; + float: right; + height: 52px; + width: 56px; + z-index: -1; +} +#virtualKeyboard #kbDesk div#kb_benter[id] { + z-index: 0; +} +#virtualKeyboard #kbDesk div#kb_benter a { + background-position: -194px 0px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonHover a { + background-position: -194px -53px; +} +#virtualKeyboard #kbDesk div#kb_benter.kbButtonDown a { + background-position: -194px -106px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace a { + background-position: -27px -81px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonHover a { + background-position: -27px -108px; +} +#virtualKeyboard #kbDesk div#kb_bbackspace.kbButtonDown a { + background-position: -27px -135px; +} +#virtualKeyboard #kbDesk div#kb_btab { + width: 41px; +} +#virtualKeyboard #kbDesk div#kb_btab a { + background-position: -155px -81px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonHover a { + background-position: -155px -108px; +} +#virtualKeyboard #kbDesk div#kb_btab.kbButtonDown a { + background-position: -155px -135px; +} +#virtualKeyboard #kbDesk div#kb_bcaps { + width: 48px; +} +#virtualKeyboard #kbDesk div#kb_bcaps a { + background-position: -107px -81px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonHover a { + background-position: -107px -108px; +} +#virtualKeyboard #kbDesk div#kb_bcaps.kbButtonDown a { + background-position: -107px -135px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left, +#virtualKeyboard #kbDesk div#kb_bshift_right { + width: 52px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left a, +#virtualKeyboard #kbDesk div#kb_bshift_right a { + background-position: -54px -81px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonHover a { + background-position: -54px -108px; +} +#virtualKeyboard #kbDesk div#kb_bshift_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bshift_right.kbButtonDown a { + background-position: -54px -135px; +} +#virtualKeyboard #kbDesk div#kb_balt_left, +#virtualKeyboard #kbDesk div#kb_balt_right { + padding: 0 0 0 2px; + width: 32px; +} +#virtualKeyboard #kbDesk div#kb_balt_left { + margin-left: 33px; + padding-left: 0; +/*IE5.5 will ignore the rule below */ + padding-left/**/:/**/ 41px; + margin-left/**/:/**/ 0; +/*--*/ +} +#virtualKeyboard #kbDesk div#kb_balt_left a, +#virtualKeyboard #kbDesk div#kb_balt_right a { + background-position: -251px 0; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonHover a { + background-position: -251px -27px; +} +#virtualKeyboard #kbDesk div#kb_balt_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_balt_right.kbButtonDown a { + background-position: -251px -54px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left, +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: left; + width: 32px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_right { + float: right; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left a, +#virtualKeyboard #kbDesk div#kb_bctrl_right a { + background-position: -251px -81px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonHover a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonHover a { + background-position: -251px -108px; +} +#virtualKeyboard #kbDesk div#kb_bctrl_left.kbButtonDown a, +#virtualKeyboard #kbDesk div#kb_bctrl_right.kbButtonDown a { + background-position: -251px -135px; +} +#virtualKeyboard #kbDesk div#kb_bdel a { + background-position: 0 -81px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonHover a { + background-position: 0 -108px; +} +#virtualKeyboard #kbDesk div#kb_bdel.kbButtonDown a { + background-position: 0 -135px; +} +#virtualKeyboard #kbDesk div#kb_bspace { + width: 166px; +} +#virtualKeyboard #kbDesk div#kb_bspace a { + background-position: -27px 0; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonHover a { + background-position: -27px -27px; +} +#virtualKeyboard #kbDesk div#kb_bspace.kbButtonDown a { + background-position: -27px -54px; +} + +#virtualKeyboard select#kb_langselector, +#virtualKeyboard select#kb_mappingselector { + border: 1px solid black; + bottom: 2px; + position: absolute; + right: 2px; + width: 125px; +} +#virtualKeyboard select#kb_mappingselector { + right: 140px; +} +#virtualKeyboard select, +#virtualKeyboard select option { + background: #fff; + font-family: Arial, Tahoma, Verdana sans-serif; + font-size: 11px; +} +#virtualKeyboard select optgroup option { + padding-left: 20px; +} + +#virtualKeyboard #copyrights { + bottom: 4px; + color: blue; + font-size: 9px; + left: 2px; + line-height: normal; + position: absolute; +} +#virtualKeyboard #copyrights a { + font-size: 9px; + color: blue; + cursor: default; + outline: 0; +} + + + +/** + * + * Styles for the IME field + * + */ +#VirtualKeyboardIME { + background: #fff; + border:1px solid #333; + position: absolute; + width: 200px; +} +#VirtualKeyboardIME div.IMEContent { + border: 1px solid #333; + border-top: 0; + border-bottom: 0; + height: 21px; + line-height: 21px; + margin: 0 12px; + overflow: auto; + padding: 0 3px; + white-space: nowrap; +} +#VirtualKeyboardIME div.left { + border-bottom: 10px solid #fff; + border-left: 0px solid black; + border-right: 10px solid #000; + border-top: 10px solid #fff; + position: absolute; + left: 1px; + font-size: 1px; + overflow: hidden; +} +#VirtualKeyboardIME div.right { + border-bottom: 10px solid #fff; + border-left: 10px solid #000; + border-right: 0px solid black; + border-top: 10px solid #fff; + float: right; + position: absolute; + right: 1px; + overflow: hidden; +} + + +/************************************ +* Place for the locale-dependent styles +* overload fonts here +* +* Language-dependend class name is equal to uppercased language domain code (ZH in zh-CN) +*/ +#virtualKeyboard #kbDesk.ZH div.kbButton span { + font-family: MingLiU, SimSun, "Arial Unicode MS"; + font-size: 13px; +} +#virtualKeyboard #kbDesk.ZH div.kbButton span.alted, +#virtualKeyboard #kbDesk.ZH div.kbButton span.shifted { + font-size: 9px; +} +#VirtualKeyboardIME.ZH div.IMEContent { + font-family: SimSun, "Arial Unicode MS"; + font-size: 16px; +} \ No newline at end of file diff --git a/fotokiste/fotokiste/static/virtual_keyboard/extensions/documentselection.js b/fotokiste/fotokiste/static/virtual_keyboard/extensions/documentselection.js new file mode 100644 index 0000000..033208a --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/extensions/documentselection.js @@ -0,0 +1,695 @@ +/* +* $Id: documentselection.js 413 2008-05-16 21:30:59Z wingedfox $ +* $HeadURL: https://svn.debugger.ru/repos/jslibs/BrowserExtensions/tags/BrowserExtensions.018/documentselection.js $ +* +* Class implements cross-browser work with text selection +* +* @author Ilya Lebedev +* @author $Author: wingedfox $ +* @modified $Date: 2008-05-17 01:30:59 +0400 (Сбт, 17 Май 2008) $ +* @version $Rev: 413 $ +* @license LGPL +*/ +/* +* @class DocumentSelection +*/ +DocumentSelection = new function () { + var self = this; + /* + * Stores hash of keys, applied to elements + * + * @type Object + * @scope private + */ + var keys = { + 'prevCalcNode' : '__prevCalcNode' + } + //--------------------------------------------------------------------------- + // PRIVATES + //--------------------------------------------------------------------------- + /** + * Calls specified method with the supplied params + * This is done to process only correct requests + * + * @param {Function} method to call + * @param {Array} arguments of [target, param1, paramN] + * @return {Object} method call result or false, if any error happened + * @scope private + */ + var callMethod = function (m, arg) { + var el = arg[0] + ,id + ,module = "" + if (!el || !el.tagName) return false; + switch (arg[0].tagName.toLowerCase()) { + case 'input': + if (el.type && el.type != 'text' && el.type != 'password') return false; + case 'textarea': + module = "input"; + break; + case 'iframe': + module = "frame"; + arg[0] = el.contentWindow; + break; + default: + return false; + } + /* + * instantiate the module + */ + if ('function' == typeof self.module[module]) + self.module[module] = new self.module[module](keys); + /* + * throw the exception, is method is not implemented + */ + if (!self.module[module] || !self.module[module][m]) + throw new Error ('Method \''+m+'\' is not implemented for DocumentSelection \''+module+'\' module.'); + + return self.module[module][m].apply(self,arg); + } + /** + * Keeps scrolling on the place for browsers, those don't support this natively + * + * @param {HTMLElement} el target element + * @param {Number} ot old scrollTop property + * @param {Number} ol old scrollLeft property + * @scope private + */ + var keepScroll = function (el,ot,ol) { + if (window.getSelection && 'iframe'!=el.tagName.toLowerCase()) { + var q = self.getSelectionOffset(el) + if (el.contentWindow) el = el.contentWindow.document.body; + + if (ot>q.y) el.scrollTop = q.y; + else if (ot+el.clientHeight>q.y) el.scrollTop = ot; + else el.scrollTop = q.y-el.clientHeight/2; + + if (ol>q.x) el.scrollLeft = q.x; + else if (ol+el.clientWidth>q.x) el.scrollLeft = ol; + else el.scrollLeft = q.x-el.clientWidth/2; + } + } + //--------------------------------------------------------------------------- + // SETTERS + //--------------------------------------------------------------------------- + /** + * getSelectionRange wrapper/emulator + * + * @param {HTMLElement} + * @param {Number} start position + * @param {Number} end position + * @param {Boolean} related indicates calculation of range relatively to current start point + * @return void + * @scope public + */ + self.setRange = function(el, start, end, related) { + var ot = el.scrollTop + ,ol = el.scrollLeft + /* + * set range on relative coordinates + */ + if (related) { + var st = self.getStart(el); + end = st+end; + start = st+start; + } + if (start < 0) start = 0; + if (end < start) end = start; + + callMethod ('setRange',[el,start,end]); + + keepScroll(el,ot,ol); + } + //--------------------------------------------------------------------------- + // GETTERS + //--------------------------------------------------------------------------- + /** + * Return contents of the current selection + * + * @param {HTMLElement} el element to look position on + * @return {String} + * @scope public + */ + self.getSelection = function(el) { + return callMethod('getSelection',[el]); + } + /** + * getSelectionStart wrapper/emulator + * adapted version + * + * @param {HTMLElement} el element to calculate end position for + * @return {Number} start position + * @scope public + */ + self.getStart = function (el) { + return callMethod('getPos',[el,true]); + } + /* + * getSelectionEnd wrapper/emulator + * adapted version + * + * @param {HTMLElement} el element to calculate end position for + * @return {Number} start position + * @scope public + */ + self.getEnd = function (el) { + return callMethod('getPos',[el,false]); + } + /* + * Return cursor position for supplied field + * + * @param {HTMLElement} element to get cursor position from + * @return {Number} position + * @scope public + */ + self.getCursorPosition = function (el) { + return self.getStart(el); + } + //--------------------------------------------------------------------------- + // MISC FUNCTIONS + //--------------------------------------------------------------------------- + /* + * Insert text at cursor position + * + * @param {HTMLElement} text field to insert text + * @param {String} text to insert + * @scope public + */ + self.insertAtCursor = function (el, val, keep) { + var ot = el.scrollTop + ,ol = el.scrollLeft + if (!keep) { + callMethod('del',[el]); + } + var pos = callMethod('ins',[el,val]); + keepScroll(el,ot,ol); + return pos; + } + /* + * Wraps selection with start and end text + * + * @param {HTMLElement} text field to insert text + * @param {String} start text at the beginnging of the selection + * @param {String} end text at the end of the selection + * @scope public + */ + self.wrapSelection = function (el, start, end) { + var s = self.getCursorPosition(el) + ,e = self.getEnd(el) + if (s==e) { + self.insertAtCursor(el,start+end); + } else { + self.insertAtCursor(el,start,true); + self.setRange(el,e+start.length,e+start.length); + self.insertAtCursor(el,end,true); + } + } + + /* + * Deletes char at cursor position + * + * @param {HTMLElement} text field to delete text + * @param {Boolean} delete text before (backspace) or after (del) cursor + * @scope public + */ + self.deleteAtCursor = function (el, after) { + if (!self.getSelection(el)) { + if (after) + self.setRange(el,0,1,true); + else + self.setRange(el,-1,0,true); + } + return self.deleteSelection(el); + } + /** + * Removes the selection, if available + * + * @param {HTMLElement} el field to delete text from + * @scope public + */ + self.deleteSelection = function (el) { + var ol = el.scrollLeft + ,ot = el.scrollTop + ,ret = callMethod('del',[el]); + keepScroll(el,ot,ol); + return ret; + } + /** + * Method is used to caclulate pixel offsets for the selection in TextArea (other inputs are not tested yet) + * + * @param {HTMLTextareaElement} el target to calculate offsets + * @return {Object} {x: horizontal offset, y: vertical offset, h: height offset} + * @scope public + */ + self.getSelectionOffset = function (el) { + return callMethod('getSelectionOffset',[el],true); + } + +} +DocumentSelection.module = { + /** + * Module processing selection in the 'input' and 'textarea' fields + * + * @param {Object} keys properties, registered for use in DS + * @scope protected + */ + 'input' : function (keys) { + var self=this; + /** + * Special document node, used to calculate range offsets in Mozilla + * + * @type HtmlDivElement + * @scope private + */ + var offsetCalculator = null; + /** + * Returns selection start or end position in absolute chars from the field start + * + * @param {HTMLInputElement, HTMLTextareaElement} el input or textarea to get position from + * @param {Boolean} start get start or end selection position + * @return {Number} offset from the beginning + * @scope private + */ + self.getPos = function (el, start) { + var off; + try { + el.setActive(); + if (start) + off = Math.abs(el.document.selection.createRange().moveStart("character", -100000000)); + else + off = Math.abs(el.document.selection.createRange().moveEnd("character", -100000000)); + /* + * test for the TEXTAREA's dumb behavior + */ + if (el.tagName.toLowerCase() != 'input') { + /* + * calculate node offset + */ + var r = el.document.body.createTextRange(); + r.moveToElementText(el); + var sTest = Math.abs(r.moveStart("character", -100000000)); + off -= sTest; + } + } catch (e) { + try { + off = (start?el.selectionStart:el.selectionEnd); + } catch (e) { + off = 0; + } + } + return off; + } + /** + * Removes the selection, if available + * + * @param {HTMLElement} el field to delete text from + * @return {String} deleted substring + * @scope public + */ + self.del = function (el) { + var ret = "" + ,s = self.getPos(el,true) + ,e = self.getPos(el,false) + if (s!=e) { + /* + * check for IE, because Opera does use \r\n sequence, but calculate positions correctly + */ + var tmp = document.selection&&!window.opera?el.value.replace(/\r/g,""):el.value; + ret = tmp.substring(s,e); + el.value = tmp.substring(0, s)+tmp.substring(e,tmp.length); + self.setRange(el,s,s); + } + return ret; + } + /** + * Inserts text to the textarea + * + * @param {HTMLElement} text field to insert text + * @param {String} text to insert + * @return {Number} new cursor position + * @scope public + */ + self.ins = function (el,val) { + var ret = "" + ,s = self.getPos(el,true) + /* + * check for IE, because Opera does use \r\n sequence, but calculate positions correctly + */ + var tmp = document.selection&&!window.opera?el.value.replace(/\r/g,""):el.value; + el.value = tmp.substring(0,s)+val+tmp.substring(s,tmp.length); + s += val.length; + self.setRange(el,s,s); + return s; + } + /** + * Return contents of the current selection + * + * @param {HTMLElement} el element to look position on + * @param {Number} s start position + * @param {Number} e end position + * @return {String} + * @scope public + */ + self.getSelection = function (el) { + var s = self.getPos(el,true), + e = self.getPos(el,false) + /* + * w/o this check content might be duplicated on delete + */ + if (e


"; + var ime = null; + var chars = ""; + var page = 0; + var sg = []; + var target = null; + var targetWindow = window.dialogArguments||window.opener||window.top; + + /** + * Shows the IME tooltip + * + * @param {Array} s optional array of the suggestions + * @scope public + */ + self.show = function (s) { + /* + * external property, set in the #switchLayout + */ + ime.className = self.css + + target = VirtualKeyboard.getAttachedInput(); + DOM.getParent(target,'body').appendChild(ime); + if (s) self.setSuggestions(s); + if (target && ime && sg.length>0) { + EM.addEventListener(target,'blur', keepSelection); + ime.style.display = "block"; + self.updatePosition(target); + } else { + self.hide(); + } + } + /** + * Hides IME + * + * @param {Boolean} keep keeps selection + * @scope public + */ + self.hide = function (keep) { + if (ime) ime.style.display = "none"; + EM.removeEventListener(target,'blur', keepSelection); + if (target && DocumentSelection.getSelection(target) && !keep) DocumentSelection.deleteSelection(target); + target = null; + sg=[]; + } + /** + * Updates position of the IME tooltip + * + * @scope public + */ + self.updatePosition = function () { + ime.style.width = '50px'; + var dt = ime.offsetWidth - ime.childNodes[2].clientWidth; + ime.style.width = ime.childNodes[2].scrollWidth+dt+'px'; + var xy = DOM.getOffset(target); + ime.style.left = xy.x+'px'; + var co = DocumentSelection.getSelectionOffset(target); + ime.style.top = xy.y+co.y+co.h+'px'; + } + /** + * Imports suggestions and applies them + * + * @scope public + */ + self.setSuggestions = function (arr) { + if (!isArray(arr)) return false; + sg = arr; + page = 0; + showPage(); + self.updatePosition(target); + } + /** + * Returns suggestion list + * + * @param {Number} idx optional index in the suggestions array + * @return {String, Array} all suggestions, or one by its index + * @scope public + */ + self.getSuggestions = function (idx) { + return isNumber(idx)?sg[idx]:sg; + } + /** + * Shows the next page of suggestions + * + * @scope public + */ + self.nextPage = function () { + page = Math.max(Math.min(page+1,(Math.ceil(sg.length/10))-1),0); + showPage(); + return false; + } + /** + * Shows the previous page of suggestions + * + * @scope public + */ + self.prevPage = function () { + page = Math.max(page-1,0); + showPage(); + return false; + } + /** + * Returns the current page number + * + * @return {Number} page number + * @scope public + */ + self.getPage = function () { + return page; + } + /** + * Returns char by its number in the suggestions array + * + * @param {Number} n char number in the current page + * @return {String} char + * @scope public + */ + self.getChar = function (n) { + n = --n<0?9:n; + return sg[self.getPage()*10+n] + } + self.isOpen = function () { + return 'block' == ime.style.display; + } + /** + * Shows currently selected page in the IME tooltip + * + * @scope private + */ + var showPage = function () { + for (var i=0,p=page*10,s=[]; i<10 && !isUndefined(sg[p+i]); i++) { + s[s.length] = ""+((i+1)%10)+""+": "+sg[p+i]; + } + ime.childNodes[2].innerHTML = s.join("; ")+"
"; + } + var keepSelection = function() { + DocumentSelection.setRange(target,DocumentSelection.getStart(this),DocumentSelection.getEnd(this)); + this.focus(); + } + /** + * Just the constructor + */ + var _construct = function () { + var el = targetWindow.document.createElement('div'); + el.innerHTML = html; + ime = el.firstChild; + ime.style.display = 'none'; + ime.childNodes[0].appendChild(targetWindow.document.createComment("")); + ime.childNodes[1].appendChild(targetWindow.document.createComment("")); + ime.childNodes[0].onmousedown = self.nextPage; + ime.childNodes[1].onmousedown = self.prevPage; + } + _construct(); +} diff --git a/fotokiste/fotokiste/static/virtual_keyboard/vk_loader.js b/fotokiste/fotokiste/static/virtual_keyboard/vk_loader.js new file mode 100644 index 0000000..af3b8b0 --- /dev/null +++ b/fotokiste/fotokiste/static/virtual_keyboard/vk_loader.js @@ -0,0 +1,92 @@ +VirtualKeyboard = new function () { + var self = this, to = null; + self.show = self.hide = self.toggle = self.attachInput = function () { + window.status = 'VirtualKeyboard is not loaded yet.'; + if (!to) setTimeout(function(){window.status = ''},1000); + } + self.isOpen = function () { + return false; + } +}; +(function () { + var pq = function (q) {if ('string'!=typeof q || q.length<2) return {};q = q.split(/&|&/g);for (var z=0,qL=q.length,rs={},kv,rkv;z]+?src[^"\']+.*?'+sname+'([^#"\']*)','i'),m = h.match(sr);if (m) return pq(m[1].replace(/^[^?]*\?([^#]+)/,"$1"));return {};})(targetScript,targetWindow.document) + var p = (function (sname){var sc=document.getElementsByTagName('script'),sr=new RegExp('^(.*/|)('+sname+')([#?]|$)');for (var i=0,scL=sc.length; i"); + } + } +})(); diff --git a/fotokiste/fotokiste/templates/mailtext.kid b/fotokiste/fotokiste/templates/mailtext.kid index 3f7c69c..cb834df 100644 --- a/fotokiste/fotokiste/templates/mailtext.kid +++ b/fotokiste/fotokiste/templates/mailtext.kid @@ -3,6 +3,9 @@ py:extends="'master.kid'"> + +