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 0000000..3d381fb Binary files /dev/null and b/fotokiste/fotokiste/static/virtual_keyboard/css/simple/button_set.gif differ 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 0000000..11ce616 Binary files /dev/null and b/fotokiste/fotokiste/static/virtual_keyboard/css/small/button_set.gif differ 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 0000000..392a8c8 Binary files /dev/null and b/fotokiste/fotokiste/static/virtual_keyboard/css/soberTouch/button_set.gif differ 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 0000000..5acd4ac Binary files /dev/null and b/fotokiste/fotokiste/static/virtual_keyboard/css/winxp/button_set.gif differ 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