From fa3fb5686f69b003f7e720e69ac9cf32404e541e Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Tue, 1 Nov 2011 18:56:27 -0400 Subject: [PATCH] Added better documention, changed version number --- README.md | 15 - combine.php | 3 +- docs/code.css | 16 + docs/css/all.css | 358 ++++++++ docs/css/fonts/mplus-1m-bold-webfont.eot | Bin 0 -> 18590 bytes docs/css/fonts/mplus-1m-bold-webfont.svg | 134 +++ docs/css/fonts/mplus-1m-bold-webfont.ttf | Bin 0 -> 18428 bytes docs/css/fonts/mplus-1m-bold-webfont.woff | Bin 0 -> 11772 bytes docs/css/fonts/mplus-1m-regular-webfont.eot | Bin 0 -> 19518 bytes docs/css/fonts/mplus-1m-regular-webfont.svg | 134 +++ docs/css/fonts/mplus-1m-regular-webfont.ttf | Bin 0 -> 19344 bytes docs/css/fonts/mplus-1m-regular-webfont.woff | Bin 0 -> 12304 bytes docs/css/handheld.css | 217 +++++ docs/css/screen.css | 297 +++++++ docs/default.css | 440 ++++++++++ docs/files.html | 129 +++ docs/images/bg.png | Bin 0 -> 2810 bytes docs/images/class_default_obj.png | Bin 0 -> 609 bytes docs/images/class_obj.png | Bin 0 -> 529 bytes docs/images/collapsebtn.gif | Bin 0 -> 273 bytes docs/images/expandbtn.gif | Bin 0 -> 274 bytes docs/images/field_private_obj.png | Bin 0 -> 127 bytes docs/images/field_public_obj.png | Bin 0 -> 155 bytes docs/images/file_obj.png | Bin 0 -> 425 bytes docs/images/method_private_obj.png | Bin 0 -> 197 bytes docs/images/method_public_obj.png | Bin 0 -> 255 bytes docs/images/minus.gif | Bin 0 -> 114 bytes docs/images/namespace_function_obj.png | Bin 0 -> 3426 bytes docs/images/namespace_obj.png | Bin 0 -> 3346 bytes docs/images/never_translate.png | Bin 0 -> 207 bytes docs/images/plus.gif | Bin 0 -> 118 bytes docs/index.html | 147 ++++ docs/javascript/all.js | 326 ++++++++ docs/javascript/html5.js | 6 + docs/jproton.js | 1 + docs/sh.css | 182 ++++ docs/sh.js | 1 + docs/symbols/$_.dom.html | 469 +++++++++++ docs/symbols/$_.event.html | 461 +++++++++++ docs/symbols/$_.html | 775 ++++++++++++++++++ docs/symbols/$_.store.html | 348 ++++++++ docs/symbols/$_.util.html | 668 +++++++++++++++ docs/symbols/_global_.html | 115 +++ docs/symbols/src/kis-js_src_core_core.js.html | 236 ++++++ .../src/kis-js_src_modules_DOM.js.html | 485 +++++++++++ .../src/kis-js_src_modules_ajax.js.html | 110 +++ .../src/kis-js_src_modules_event.js.html | 263 ++++++ .../src/kis-js_src_modules_store.js.html | 94 +++ .../src/kis-js_src_modules_util.js.html | 369 +++++++++ docs/ui.js | 113 +++ kis-all.js | 634 +++++++++----- kis-min.js | 42 +- src/{core => }/core.js | 110 ++- src/modules/DOM.js | 106 ++- src/modules/QS.js | 91 -- src/modules/ajax.js | 29 +- src/modules/event.js | 170 +++- src/modules/store.js | 53 +- src/modules/util.js | 72 ++ tests/tests/core.js | 2 +- 60 files changed, 7818 insertions(+), 403 deletions(-) create mode 100644 docs/code.css create mode 100644 docs/css/all.css create mode 100644 docs/css/fonts/mplus-1m-bold-webfont.eot create mode 100644 docs/css/fonts/mplus-1m-bold-webfont.svg create mode 100644 docs/css/fonts/mplus-1m-bold-webfont.ttf create mode 100644 docs/css/fonts/mplus-1m-bold-webfont.woff create mode 100644 docs/css/fonts/mplus-1m-regular-webfont.eot create mode 100644 docs/css/fonts/mplus-1m-regular-webfont.svg create mode 100644 docs/css/fonts/mplus-1m-regular-webfont.ttf create mode 100644 docs/css/fonts/mplus-1m-regular-webfont.woff create mode 100644 docs/css/handheld.css create mode 100644 docs/css/screen.css create mode 100644 docs/default.css create mode 100644 docs/files.html create mode 100644 docs/images/bg.png create mode 100644 docs/images/class_default_obj.png create mode 100644 docs/images/class_obj.png create mode 100644 docs/images/collapsebtn.gif create mode 100644 docs/images/expandbtn.gif create mode 100644 docs/images/field_private_obj.png create mode 100644 docs/images/field_public_obj.png create mode 100644 docs/images/file_obj.png create mode 100644 docs/images/method_private_obj.png create mode 100644 docs/images/method_public_obj.png create mode 100644 docs/images/minus.gif create mode 100644 docs/images/namespace_function_obj.png create mode 100644 docs/images/namespace_obj.png create mode 100644 docs/images/never_translate.png create mode 100644 docs/images/plus.gif create mode 100644 docs/index.html create mode 100644 docs/javascript/all.js create mode 100644 docs/javascript/html5.js create mode 100644 docs/jproton.js create mode 100644 docs/sh.css create mode 100644 docs/sh.js create mode 100644 docs/symbols/$_.dom.html create mode 100644 docs/symbols/$_.event.html create mode 100644 docs/symbols/$_.html create mode 100644 docs/symbols/$_.store.html create mode 100644 docs/symbols/$_.util.html create mode 100644 docs/symbols/_global_.html create mode 100755 docs/symbols/src/kis-js_src_core_core.js.html create mode 100755 docs/symbols/src/kis-js_src_modules_DOM.js.html create mode 100755 docs/symbols/src/kis-js_src_modules_ajax.js.html create mode 100755 docs/symbols/src/kis-js_src_modules_event.js.html create mode 100755 docs/symbols/src/kis-js_src_modules_store.js.html create mode 100755 docs/symbols/src/kis-js_src_modules_util.js.html create mode 100644 docs/ui.js rename src/{core => }/core.js (78%) delete mode 100644 src/modules/QS.js diff --git a/README.md b/README.md index 1f46442..d251abc 100644 --- a/README.md +++ b/README.md @@ -62,21 +62,6 @@ functions: $_.post(url, data_object, callback); -### QS: querystring parsing and serialization for hashbang strings, and pushState urls ### - -**functions:** - -* Parse: - - $_.qs.parse(hb); - -* Set: This function will set the hash url if browser doesn't have history.pushState - - $_.qs.set(key, value); - -* Get: Retrieves the value of the key in the url string - - $_.qs.get(key); ### Store: localstorage wrapper with automatic data serialization ### diff --git a/combine.php b/combine.php index 201e9bd..47c4336 100755 --- a/combine.php +++ b/combine.php @@ -9,7 +9,6 @@ //The name of the source folder $folder = "src"; $src_folder = "{$folder}/modules"; -$core_folder = "{$folder}/core"; $files = array(); @@ -29,7 +28,7 @@ if($dir = opendir($src_folder)) } //Start with the core -$new_file = file_get_contents($core_folder."/core.js") . "\n"; +$new_file = file_get_contents("{$folder}/core.js") . "\n"; //Add the modules diff --git a/docs/code.css b/docs/code.css new file mode 100644 index 0000000..3375058 --- /dev/null +++ b/docs/code.css @@ -0,0 +1,16 @@ +body { + margin: 0; +} +.KEYW { color: #6277AA; font-weight: bold; } +.COMM { color: #008200; } +.NUMB { color: #393;} +.STRN { color: #00d; } +.REGX { color: #339;} +.linenumber { + border-right: 7px solid #8DA6C6; + color: #fff; + font-style: normal; + font-weight: bold; + padding: 0 7px; + background: #6277AA; +} \ No newline at end of file diff --git a/docs/css/all.css b/docs/css/all.css new file mode 100644 index 0000000..c253cb0 --- /dev/null +++ b/docs/css/all.css @@ -0,0 +1,358 @@ +/* TABLE OF CONTENTS: + * - Browser reset + * - HTML elements + * - JsDoc styling + */ + + + + + + +/* + * BEGIN BROWSER RESET + */ + +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,p,pre,form,fieldset,input,textarea,p,blockquote,th,td { + margin:0; + padding:0 +} +html { + height:100%; + overflow:-moz-scrollbars-vertical; + overflow-x:auto +} +table { + border:0; + border-collapse:collapse; + border-spacing:0 +} +fieldset,img { + border:0 +} +address,caption,cite,code,dfn,em,strong,th,var { + font-style:normal; + font-weight:normal +} +em,cite { + font-style:italic +} +strong { + font-weight:bold +} +ol,ul { + list-style:none +} +caption,th { + text-align:left +} +h1,h2,h3,h4,h5,h6 { + font-size:100%; + font-weight:normal; + margin:0; + padding:0 +} +q:before,q:after { + content:'' +} +abbr,acronym { + border:0 +} +section,article,header,footer,nav,aside,hgroup { + display:block +} + +/* + * END BROWSER RESET + */ + + + + + + +/* + * HTML ELEMENTS + */ + +@font-face { + font-family: 'M1m'; + src: url('fonts/mplus-1m-regular-webfont.eot'); + src: local('☺'), url('fonts/mplus-1m-regular-webfont.woff') format('woff'), url('fonts/mplus-1m-regular-webfont.ttf') format('truetype'), url('fonts/mplus-1m-regular-webfont.svg#webfontVd14f4NN') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'M1m'; + src: url('fonts/mplus-1m-bold-webfont.eot'); + src: local('☺'), url('fonts/mplus-1m-bold-webfont.woff') format('woff'), url('fonts/mplus-1m-bold-webfont.ttf') format('truetype'), url('fonts/mplus-1m-bold-webfont.svg#webfontIjI5mZqE') format('svg'); + font-weight: bold; + font-style: normal; +} + + + +* { + line-height: 1.4em; +} + +html { + font-size: 100%; +} + +body { + font-size: 0.75em; + padding: 15px 0; + background: #eee; + background-image: -moz-linear-gradient(left, #dddddd, #f9f9f9) fixed; + background-image: -webkit-gradient(linear,left bottom,right bottom,color-stop(0, #dddddd),color-stop(1, #f9f9f9)) fixed; + } + +body, +input, +select, +textarea { + color: #000; + font-family: Arial, Geneva, sans-serif; +} + +a:link, +a:hover, +a:active, +a:visited { + color: #19199e; +} +a:hover, +a:focus { + color: #00f; + text-decoration: none; +} + +p { + margin: 0 0 1.5em 0; +} + +/* + * END HTML ELEMENTS + */ + + + +/* + * BEGIN HACK + */ + +div.containerMain:after, +div.safeBox:after { + content:""; + display:block; + height:0; + clear:both; +} + +/* + * END HACK + */ + + + +/* + * BEGIN JSDOC + */ + +/* Start menu */ +div.index *.heading1 { + margin-bottom: 0.5em; + border-bottom: 1px solid #999999; + font-family: M1m, Arial, sans-serif; + font-size: 1.6em; + letter-spacing: 1px; + line-height: 1.3em; +} + +div.index div.menu { + background-color: #FFFFFF; +} +*+html div.index div.menu { + background-color: #FFFFFF; +} +* html div.index div.menu { + background-color: #FFFFFF; +} + +div.index div.menu div { + text-align: left; +} + +div.index div.menu a { + text-decoration: none; +} +div.index div.menu a:hover { + text-decoration: underline; +} + +div.index ul.classList { + padding-left: 0; +} + +div.index ul.classList a { + display: block; + margin: 1px 0; + padding: 4px 0 2px 10px; + text-indent: -10px; +} + +div.index div.fineprint { + color: #777; + font-size: 0.9em; +} +div.index div.fineprint a { + color: #777; +} +/* End menu */ + + + +/* Start content */ +div.content ul { + padding-left: 0; +} + +div.content *.classTitle { + font-size: 1.2em; + font-weight: bold; + line-height: 1em; +} + +div.content *.classTitle span { + display: block; + font-size: 2em; + letter-spacing: 2px; + line-height: 1em; + padding-top: 5px; + text-shadow: 1px 1px 1px #999999; + word-wrap: break-word; +} + +div.content p.summary { + font-size: 1.25em; +} + +div.content ul *.classname a, +div.content ul *.filename a { + font-family: Consolas, "Courier New", Courier, monospace; + text-decoration: none; + font-weight: bold; +} +div.content ul *.classname a:hover, +div.content ul *.filename a:hover { + text-decoration: underline; +} + +div.content div.props { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background: #fff; + background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.2)); /* FF3.6 */ + background: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255, 255, 255, 0.7)),color-stop(1, rgba(255, 255, 255, 0.2))); + -moz-box-shadow: 0px 0px 10px #ccc; + -webkit-box-shadow: 0px 0px 5px #bbb; + box-shadow: 0px 0px 5px #bbb; +} + + + +*.sectionTitle { + font-family: M1m, sans-serif; + font-size: 1.6em; + letter-spacing: 1px; +} + +table.summaryTable td, +table.summaryTable th { + vertical-align: top; +} +table.summaryTable tr:last-child td { + padding-bottom: 0; +} + +table.summaryTable th { + font-weight: bold; +} + +table.summaryTable td.attributes { + font-family: Consolas, "Courier New", Courier, monospace; + color: #666; +} + +table.summaryTable td.nameDescription div.fixedFont { + font-weight: bold; +} + +table.summaryTable div.description { + color: #333; +} + + + +dl.detailList dt { + font-weight: bold; +} + +dl.inheritsList dd + dt { + margin-top: 10px; +} + +dl.inheritsList dd { + display: inline; +} + + + +.fixedFont { + font-family: Consolas, "Courier New", Courier, monospace; +} + +.fixedFont.heading { + font-size: 1.25em; + line-height: 1.1em +} + +.fixedFont.heading + .description { + font-size: 1.2em; +} + +.fixedFont.heading .light, +.fixedFont.heading .lighter { + font-weight: bold; +} + +pre.code { + overflow: auto; + font-family: Consolas, "Courier New", Courier, monospace; + background: #eee; +} +/* Start content */ + + + +/* Start general styles */ +.light { + color: #666; +} + +.lighter { + color: #999; +} + +span.break { + font-size: 1px; + line-height: 1px; +} +/* End general styles */ + +/* + * END JSDOC + */ diff --git a/docs/css/fonts/mplus-1m-bold-webfont.eot b/docs/css/fonts/mplus-1m-bold-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..6c64f8d71d2dc6a375c4305c90921ec5359d72cd GIT binary patch literal 18590 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 literal 0 HcmV?d00001 diff --git a/docs/css/fonts/mplus-1m-bold-webfont.svg b/docs/css/fonts/mplus-1m-bold-webfont.svg new file mode 100644 index 0000000..5129512 --- /dev/null +++ b/docs/css/fonts/mplus-1m-bold-webfont.svg @@ -0,0 +1,134 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Foundry URL : http://mplus-fonts.sourceforge.jp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/css/fonts/mplus-1m-bold-webfont.ttf b/docs/css/fonts/mplus-1m-bold-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0cf54cbbef86edd4a4ed0f9749baa373503e6854 GIT binary patch literal 18428 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%0AC(?{gh&L` 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.{ zVmBk|B^IAJF{~8BLODUdfvJbn3D3ctPSqn^qeZHSb#c@ot^xZ7t>3<-GrFLCU+;>h zmd3`GrWL*W+80DSd9xHc>th9T3vd2?f{9|x8>Jw8_FutgcQTk~T6qo5Xwqhq?HK}&IN=nM z!P8)UIOQIkB8x@&EH3<9pq*#{#MdH(ZKzLUEn??_C2i@p*~VU)y)T`s%hQh-i!$dN z!I!QgD^v&rcw=H0eX=Jk784hJx@4WXVjw84ne!AS5MO5nj*U{9SXBVcVV#kTc8j#V zn{>~TD|p-_aY`K%p@d~cnw!!?Is+S~Ws27sSbYsc`9lUc51o&FU~qhV`~#M$G5hs7#zAB9HY|+9E8Ps=oQ~t*h{-Ke zZq_^2>rWF2})o%N3w22_G0^k=f;Oh@8gGxrS*-XoNAm+ z-zeu}zW*%q)FMxUuREJi#A$3dzV4(pF6UkozBiH^m~!oF+)I1*0robgNXxjF(KGN{ zrXNTbaj%vC68}hol~yxjo?$aTbu3u(<88jVzhX6}w{hj8|5kwIT7~Hc_%e~h|44Kf ze|XQd~FSZJ7 zIc#ItwqknDxOp*z`^BrtdHq}Y8r*>@Re~59*;=H_v#bf^! z8xdi&?Zoypwr24TwVAeZTd-aR^Fgnt8Y914Jd5{n4E;jvssFc&J<0d;A4w0HHkl5Y z9y1k9|6op-=bH!2T^BmdfT0HZ+5@ve&5sN+2eV|^Kk0}@Yl7E)} zPX8JIMgOk@!N7^YTfzF^c<@J|nV~O-ejKh39}J%fzY$pynTUKRS`i(KJ|9cO4#vJ2 zyI9d(@#%^eD?X^)Q~6NkFRNPc->Ir|zvsVKt9}}n;uZ1P@kQ}n@rn4C#D8B!&uJbV zVJ%n%6NOcxe@{cg+6V0Ly|w=DTi6kK;>hg4lS{Da$26yCeK=j0aJ>jM%-ph6)NwxW@4a|89n}hY=^N__{z`B957hwdJU>thT zi{)$u#$**VVhu)W9Y$$A#%Uu)=vKCwZDD<^AKd>Z*Z{i?k?b~h2O9+4bDEnFGg!El z+qj)OxRblMn|rvI`?!qk-6Z=a`xYy*Z?He(3iq=Uwoi`iZEaoHYV4QLKG)hR&arPZ z&U3~-Z|r9o`*vgBVeC7N{cL03W$YK~`!=K8Hly5JkAA%!t3aRU*B(^)=h-UN-rJ{f sezITdp??!ZmGKXX1UKN|GyQS=10Dl?$dM+Ns;0~mu3Geiel?i+S6FInOaK4? literal 0 HcmV?d00001 diff --git a/docs/css/fonts/mplus-1m-bold-webfont.woff b/docs/css/fonts/mplus-1m-bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..f90475d890f59f3dc11bd651aac3859e148d3499 GIT binary patch literal 11772 zcmY*bHn}h<zL%07-#XlSi(_pLpD^Xu=rplCF1*U-g@5C8x<{nmc|2e3l$ zHWNEjYXAWBdnUlT?>1w^M*31yeaG)yu)*&>aQ_2P0HmpvyUDjU3jmOA0svg{a|uCl zX2$wP003p>cORB-u-&EgxSD;7-`egs$NvT?WB{nInYEJ}06_Ik0Sn*b+?9E`tnY5&XR{|`Fj9qw-HhI)E>Mt}fAwR@9*Q&jxr6@3eg3ho{3 zCQ|(Mk+aX5e0vcFU%e3f$-FS1@!DKULMCD zM3fDp6-AVsurH_@aO#Av%I1O~OJ{@so7V>@K%|eXz-SLGL1~Vq!RZbzLS~Gn!s-k! zLu-wv!{ZGqL}G}l#Ow$wMQw?r#pMYpMq!Gf#_ozJM{i4@%lGBio3|S`TYD2WT6UVY z+WH(M46!f3nw1?>HxPA!e*8S3khY0zxpuG7oqCEbUa;$BQ z)y&46;c7=j%$EjXW>FQ*zmWT@$b&b=0NUZjsuG^Oq>^t;*iN5GXGxisx!c7q_k!lv zYLTSlE)bzsB_|;Cpb$Fvo;I9GN+>9Bm5NbtkTg_KmeaMKk5ZmDA&Aj7VSc(*zsleK zkd>iqY5})<(nM)PE0nx#>?OVuy2_K0Ap8?tzw;jFxHK*x3sIm=9ux88JP>25gaeWsM02lz|>k9ztwm#(P z>4dwKe$v&_Uh%r6@?j&frRaKY+)|X%LB<-rvzl@Xsx>^k8dF!txH_1^fUc3GCscqL zq@jNi=LTiOlmkXkzm2E3^mj7EXn*O~nlbrE2Ns8h%<}D+zfK4|5h+b(Dzwe@)0Wm! zf@#7UkLf3-w3>>V^VW!K&&c(gw^~p<3y~AAXO6fq8G9m3KB<~BN7zn0^P*SsKWYn( zJBal1Uq<`>ZwOOK=G9cUwk46r;@1HMIm=uT9&9o?eBKW#kMB)y^Hw-SQCWeH?DZ3! z9|DT@dT;fCL3nL2o2W8eCUA;n6-?&-%jWtKm;5LWlwf{>eTo_ zC0D*^y;a5&$!Bj|>O;|TxPV&uf=RZ=% z+tD!1?ucE}9+ikiSYHNzUU_qg9k(>!N5R28&XsC4Z#wijU+Y)dGvRz9o^heu_Jm$? zT|`Th-XG}N(NcMT$azmlf`#mNf8x9{KcY|03JH=z{Cd_>oSUmaK~MzzNe}@2!)Pyq zHI_bk8?#4)Dg8(Ed8F)&Ab^#^lb~)R>%tfzrDj!&D? z3xoWGK?yf>1FW`+qMhcT%8O>}7k+ML1v&-rJO7|NT3I}u#;IaH=9W))&mi)TlIGKX zyW4b}LPfEPyKT|q(+(?v&1wB-0<~Bo7ItNu^FHRS?NpB6vzN}6nWYAAjD2rORlpML z5L5m$=OWh~4iPhh0^DU~Iu_5ZvR6(k$HJZJ&+~&`8_3hHQDbWKG1JRa1OZ7MDfu*Gum=vhO8O`$} z?Pg005)`aT|JE;7Tz8?2x~|qq8RUb3H47Io9X4OrorkJ>k#J;;@Bjk46Zr8$08P}{ zo-LdiXmLToQ2piGe-N~H4Jj;l`RV_~Fg-<#0QXL;K-HM7dEC+`AE3m5+L zpQ2}!e}I}*U5K=`vSz@MS$?(Ii3^NDImKB~Lfhx_!sXt0h95l*lVUX~1{Ttn@?4U5 z#jC#D`)*8ci_INu*6o%XN^2Br^s)~Kt})ea&wFTv*#ljIY~b@U^z|%mK^xEzoaJWi zy{G2+AU>GfDN6Q7RCE--+qvnGGB8T@T477zUd3V1(%%F$0&*#tepAV+P2WS0paaF= zeBiSj`E)oK8F?A|=6CR3=-y+!V|9F!@QE-!N8A09vL2i%``VT1qhfV-CqS;R2(K4T z&gk6Oh2Rp{%MbA0cPGe^p@g!%JNWR{1X8>BnEH3Tfe0J!Js;>6z=nIminOldLck`- zrCCgtbA1MNfUVD7e=zK->f>wdsU>cq6)A4AAJ|Jr)C^z?AI;1ks)Yh}L#Oqv6uMC- zl*k++6Qaj-*4!ju*)cQVw>FE^nPt;;>>SYLr4aiR=`~&UhB>u&#!WnkB~dOh0>+RH z)erQila0mCfRxU?9L9lK-ffU}!~4c5@C9JbfFM*cu6F6hCnjh zLtol1ySg@RYhQ}~a4shyyl9_+W&QNDe35GUx}E=bL_fDE)pX*UYJTc=`gxCWQoNUh zc;~E%5L!s6mApxHtYM#rm<%|0*)?iYjG2@c@fkrF%ZtEGq@-F61`VOnhaybk@(C*? z>&>`s=y`rUB*iHpc)Rbmyqv{og?W{Uvjp4c5z8o(*)+|>PclyulJV_Rq&YVVg01x_ zK^4B7%w#-WJev(fle}jdCV|m~YqN6e?F#Lq?Qa3V6@ZzdoP8@Y;jzC^-Xbmy;uj_)jv&26X?T;{q=tm`xg0QkC zxRbCMdhnw#B1#f3LnVm!<#A)a7(pUXMokOS<4D(x;)f+M;KDqn$CM%S!rb@y2}Xbe za4$L6<(O?3X0lvuH$6`6?Cq~-_2krcnq^(s;i~%|cb>*bx=-DndiOIohL82M*rDS_ zB!c%MC|eC;07?K>j>wXMTZGUBZ0xW-%CsNCrRV_bT|de^N;i1=bkMj2Z3gH3+9R?r z$5?swHn9-G6ZVg*KY6W1#Bc9q)o8)FZI@}10P?fo@+SKeRI0y2;-NVzB=?JhH9Ne_ z_pTRp%%;;(b5c#+b&L)l*r>e5oTE=%44)kCQOZB4Qo2z@Uxopf3^LGftz}ajn=AVq zva~_6jPdOK%uAS0=gI16uzWD6Vdf-n%RoFCBrvdHXpx!Zws{a7xZr1dDrb2pbk_{N9g?ampNAT9elX~;Y3``koV20qW z`ppAvl%R&>5$sWhE@vhzAtW{s^m-NyszP({+v zYIp)Eoj1F^l<1-0KkT%~mf(IVHOZ0p{s?&``FBIBLxq*xfr2$0Zo&=>sbS3wlw63? zVrfb6A+HN$uY-ZEJ~k(F>tYxG)Gt$;Y8F%)6`t3BjM{}5wxcuUMkPc*7Nr4a@s%n&v~E!dMIAo z=3UIBnS4>HX4hEEWI#i$awE&<&tuoGsba5kA7C|P>l4mo!PhJbDDSgk>@s)gvr^EA zYP2~=ltwZF{0h(neVxY@-jX=gPVA*ehmh0&f(UprQ2tZ00VS$t6iKsu^QCmoU$)xu z*vXIHaB!|Nx6w(((&(n=`gOY&DpkrG`HMNn;J##oEtO)0Ccr%#+{%**)Zj8k!1Xuz1~onKg?h$=p`E{6|V*;LjH1UM9%O#}m}=ql|OaOvemH z703{h;Wm&#*40z@Ube^zKbthA-3XiN9h|%-5>@VmS?A-uOV?T%D`-5!yDeXD)ES^M z)Zuue70QeXAAh)Qm%S=?96Tg<{9bsF+$u|YfwU@E*2w)h5%phfj@VY2n9=y=PqtS) zS#8{s($mR_i=#Srik-nW^if8S`0nA8b-hA*u;2eKR%sTOAaX%?f@N@Vu-t9Gd^TKk zyYy}9({MgW922YBI6E0Y&9640xE1!GA2c0>Aog;zw8{v`S9X?l_X{;eP3=?->6z0o z3;=_w&S!l+gLC1?^vr;rx#2 zXGDW2O9qf;qqY9}L*%OnuOS?$YK?9s<+wdLfNg}z!RQL0ScWz$rHoM9bx<@WDaw>Z z!>hhPkH!Otw+*bURy8Xp53Vr7HXtg-`*8 zffY<{tK;~1j20-=6wCXu%0pn=-eI~#E0x;VTA`sDAH-|6yAEvo;W|$0(fqu_^=dNUZKIc3s@WsWlWznLa|Zb! zbQDGrdj0P3c`aNx)#N7!Jlza~i7$r&bAZ7EIOh=1{*NFx5Ft~@>x=| zFtE7k&rFiq{=bF2YgN?3a5-+Jx1X#jy$^%$m+&!^1xBFdU}dM;yG+oYF-P#(C(PnM zP=v1;!Z?1R9j1Zm|0rfAlyw6%>m^_9egr9-{mT_L;!GrIhH%E8F0iDE9IezkpKe32eBkWgQBdOJG5m>i zHi+H&4*;%;U)NQD2q1_92w02BiRtt?8sBJ2yocKGw7Gv^1Za85gjDkC7^NpO-aG)@ z6jY!Sy*QC?Hq+>Dj0DOlV3{7pbm%fApwBc;Av!vkBoMXTv#YB<$ebK)e!NL6-rl5< zIU6Hj58rczSjJwB93T)f9h>V0&_mEu@Ml0q?t&_x-P@ahC7{Lp<;)-fUI}=!@gGx$ z)mVA-_N67*a3SxJ)_;g>J(A`LIPE?rPoT4lK6ZDx%Uu@wezf(8wA4e2O>^HtKkY;> zKRV5a_OOFXlG@o)#45CkN=b;+cLGa>;&fEds5q^xjzv(wsR`pmh_Ydr0)!`=0+}=p zrO^*n4!`Q1#txO_WOBGEg;n1uqaC00&ITu%W#ujG`>#OcF5EU<&@ZO*E+e!A*IL72 zJ^zT?ypt=$PlWrN2w=`J9t3TlO*EY#;1xh3;9(c{VB=M}58>)p<%IIG)(`eW+Dx|8 z4gh3jW^j0`;m`OI%<)AW@tIFF{$Tl z0^X$O6+_Fiz7>TS1xbLaUBB3otXwebIA!4%{2}&&dJh zxu~jHdi1%pyq{>=4s1N%?OR6#SEW$(icQ!MX%cheVK}IeTbf&VF&T&nsq54;BmUQV zIT|RiIYNRskZgCStUHJc^}QYrvy1$^+{acNNDF~;pZkeo_!ePuSF0c8kY~0dhptDN zsyu8|D?S6CTD!Hq?0e?~C#;n4+;>7?aM&T}VD2vgoAvQX`vsAj+v=H&2MoilCLzJ6 zR4Aodq^U>I2iR(8n0aT9{$eQsXjIhP9SEg;DCtO|9u?BSJKhM2^cGz{uU{~;eenD+o zlA(NJMNx|J%BY%}( z0qZ02H+uWYezA7_qoaC9;5EIvw`1<)IV3tkHYp@+Zu!P)yhcM5Y#yPd$>=;~S^?z< zk;N-0Zc^wyl~Px{Xi?f`UqmA5i^th1=*OsvEHLJz2y1tcbXqu0obeEfCZ)2cCeV=t zN#TsW#VTW^<8S_@?G?^?r{Riq=oPoalQ+)l{Ps)LpTsT_*Y4kG>TTBEB`3R=T%z@( zdjrD154i89&>`a6CR$o0OQU(LcJsG;6*brBV15*0>#(_F6CZzC>KeU?iJjkGpga{z zRbfWp_c4y7OFEnWO?NIS0m&K3GhVpfqk_-oAUpt^pvD+*1Tud-<9N!E+sg4C@jBsV z>F#tzV(h>ojCp1~;q1PK-AP8e^`02d8t_Pj0&F;!6~nGIp>#GlU;5WDWG`{`L#vyF zxS!v%TtE(I#D_#)YN>s!B#{T6RzA{+se0VSrV${edftd;d~KcHb~1j`*i1Yy{^PO4F;pM&E)NFpdLmlbiH!UlC z#P!qmy#)0L!cQaN!f-Q~ro3B>W}lAqH^cUtGZubIvU93g<-~mi_Xz&5dUHRsZNpK-jtzuYzD&ceO@ZQ8Xt+xghT#-Uw*Xv49zx(LDEc>3I|t^;n*7@8}&XL_^zhE(9=%O%%-EX zIQ$%SQp07j$82C7-7i4k{@RL|6u6DFOam?={897#1%a@l0@9Rwo+#4-{0eAm2lN{q zS`4@#_YNuWYumFWGbx(uT=f>{L>dVpMAfdjda$Zi+ijjdwIrEbvYM?ivB!@AmEA2@ zx2UnXqb`VwBk2oQ3zn4}pG=hsaWojb_yf8_GbVS2cq^eRsY0V;w^PpgPB94g-BfvS zTSgJ$PWGUXD8zu$${((Mr>g}b)VAKIr>mzC$&qJ~rakK{32Aws;e${oA}F0#ghnp0 zVF?9b7&*NfqJcK8<00&3 zub>>mEHt0m5Qq*6+K)p&d0zk84<{5~%wA<@s?q3CSny37hla4hxtI!A#MTt%ufK0B z`)yinb%Qx90DG=#)lrT9T9cRW8-jGHO3a=$n6m)tiSU`J^8x!|aU+5?{z!1Y<3(OD zHQ_Vxc{fo?Y6S~EH0$z0mzs(DRgUPFy8XMSv{VUv4##yH);lQ7nRw{$bW;xn+U0ot z?aMe_^vv@^H*Tz=JzL5y!brCRHxZx>gH`DrsQBb}!LM(k`e0i3MsF~vh!7ft+F_Zu zB{_n2`s0odK#;=p@<8c+uh^%!XBYXV;7iRLfH9Yfys=sLnCCV9soG07m7NXWy8OR z`Wd64qS4o`X1m(p*uYTt#9pP@Q?d9}Tn%?R(e50}=dy2KTc7cIK4|7~G}{pvh+4)v zxQ|U|@2yM84R%<#T)nKvgIdUq>ZpMLoNJIe@WhVmOs&f*(F(S?f@qani1(MBx7q`n z@O?=MAJn@7YkA%pvDhh1Z|ZWj@kBg|>f8`{?eQw#7^1`=FE{yxm3O6;@E=f(zJEQ1!W~Rh(cKd(RRRmX^tw?F zm$nH9J_Bu}Sc#I(Mq7eEXf|}!_j~_sWs(qxs^YFM#h*jDX*^q{WkA++H92?-;FQq0 z3MF(w31tjGwpm|5)K(P~&^s_||BQv-jRXDX@F`K({4)SmS!fO6u=O6r`yg4Z``;QW z1-|Jtq9s8mP-fZXqw2_!-a&hd>ztFLwwf6{2kYJv4Y4oX-HQ(4kG`yRmiUiPzyiWA zq)B#H=dJtR3dX;!wM_ZA38_1BzIJiv88`@hpqb;uPh;-3`$3f~LFCDPfpglG9`4x_ zaWGj2h|{|+%ND{(I`{1e`{V|s5cTK_HDYd@D^3P=>_Cmobnx6@Psk}GQd^~XGo=Jn z4D+s7TX?~bM*4_4V#Gm4j8q%&P!F@zvlHN(&1gYe zcSs6@l+r3NH#D_cn(B9(S`ez!e%BdfsJm4pKl#^vA4Zz7HQF&qu_9{%#1G;XZ?sBq zY3+uYesWmhQ>K%GxXR}`Snh$*&r+~h*8J#)(_OOzlLr*ukGa^LTG*Yp8=S9mJlVD+dJ-bp%HrYA zS8T>(jts)hHqq9+91Ja3rk*%%UX*(euIrBrZ<<2y5j03?XwR^J@$y`t#O&}Hg28s; zqS7go_ULE>a>G-7rb0*}#CnlsdXcfmL{0FH4IBauFHTM^EwQTu*LBIal z>(SUOBY>`4yXy(5;=%OtlHF6|AU@Kcj}>9mcI%BgRm*a=grEg~3ivhg0h3x3^*E%# z$yfE3+?efQ#{}tIC*A`}uB`64F&}Q`F%{mIf0NP z;OOT+Ty(It*qw%GxoEW!xvM;S-8Z~WE*#h_B*z@|OTsItyj#YW9(5W`tviM`nMor1 zlInl^!Fw1RB1^L>Yj(1}malB*-Psv`?f4jI<0-{uy_b36jHtXDHjwP7`L0F}wU|Nc zyOeAZECU-MyAsI=u({`kGYAN{GmP-whEK~adkUYHav(SD(sGEMx2K_@Om1o0aVMNWy{F zyKH7MY3;_@Xm=ziSJrXKbw4fQoyg^sc2u)=$ygS3Q=nfc-tf?M#EfB*+@)CkQCoW_0%48@qRhRKG`fGpBLru|>A*5Ym5wu&`|$df06mZhtd(AG$BJI& zUw!$kIy~9gJUW&k2#@s9sb=hvHM$ONG6z>pTDdyhcHdV%rY+T5Tdl`82@l%MzTlRg ziBtA*?^(3F*#;xFrr8H!{(GNGbJPe&PXrOp8ek4>W)sDfx-u~4L3b)T+MIVPE0x;w z%z&ngp2%A?s#_LGVuXaUqL=P@Cset{R_%RrDY`w;8k zXP~|QButs`gs(gU`@$6;c^Zdm4>bUwOjuB$3@A3w)6g(Y+w{ zGX7>~MDPO*)nmi{XMWnHKNlh8#RVO$P8(szF8TSS&95}tMzmWyP**$>F%gwA6tqrr z*1VSjFJ^mILeg_OWg&f^8HGU_;5DV6;ek3io0H$ML2O-W>SdSB@2KkMPM0%G=wh&a zSlw*@=#UepS_8zuk5IT9WUq@`o`Zvf#G5ro?VI|UtKZ$8Mqmg|&$%D$Fkgz-=(}5y z?^~;U99<_Ki0nPo@`!29^Mo@!VxxnBZWA1t?t5-GS@G5yk=>F{J}AX zM|P8q4_}>`5HQ5ZYC@V+*f)CX>_D!%Og^?uP?=^SD2X2`zqeyY7m|O=H+R8z2X7Vx zy}-<&kLUnbKU?O8%Xj~tuf~nKul5Gm3=YuTwVta%#%;-uc?}PVbHdk$o;)A!M8v&H zlD^PmQx z5zo)0_68#mH#gX;fsCj0fYX} zcPKN*2-DB-WB4{{e?OsE3J+$!SPH4$>1@6jinz7aXjw*EJ4=TN&D!izc$^Vj))QtT}vtGBH%m14Nvo;)&3o!L_YUg|gD@LQef0C$dtY9-H(DYq>_ z%e~#tQR?zFhZC902wU4wESupX*h|C4R{?@H1A008fowmH2?@G;%J~`%gtqn?=NHJy z_n@=?@k;73`1P}dXhd;Fv8S!438h7*Q83!-`wSNJ8jPR}%n#N_F8Q%WJ450?YC&vp zx^O*$JgVX9<67gMb9~y3+nLyf+gtB@4C3|iM81K?qR3&+(B;T={_4c)q;T801;2H^ z)!A3uzedtS5l2oVwiDQm)JxbU?GqA|79==9!7ne{Lzlc+gqlw!jcb6I$sF1WsU8FyQJ7YVeXY%0Z5HP_* za1%XFrb(AP9S8_`LwD{@sYgWWcQ5F5X;W{B(_sMAgSCI4@V60L@& zd@TLe;DlEWH_mP{eka^%D*uGDWiyQ-<+}CBc`W@?nMZ$gb1)*nly~f~yk_2=n$`RP z@*%?&H8VyOFO3CG!?A_(S^g4It;f08CRIyreJoreQ9hls4o-<;nYkmgvG_z#4ZT^{ zeYlg8ucbwmvQqoqQEfX=_amQ`_Is_Zr<`HK5fb$ahoO+j24Gv17v?}< zn-`>`Ynm5kBm6om$i(+JE6fE#U>T$#i((mOLBpvYaY;n5VAUUvGLQXOm}HRh=Zu(a z;13rWr>UES`BPap4UuV8H-*q~Q8xn&#kHS=F3qx^22a(tpNi&iLoaO|q{Y9Dkb6go z%L^iBz{Kfw9{o++y|7 zuKd%tp8Dj+&*qO@U0c~o7Gce7KMuLsO>8II%|5_xVB4_GSeRXpBR8>|*leMxVt)|(*YDWB?chVtpE{5I2eEu*$KgW}@sx2fV}?GQFWYr+_kK?%{x$4RK@K~2 zZ@c**GcXHdrWbJDx%-9>?t1Hv54?>1*BI-1eb3HqQ~&junNr63GC1G52L~)S8$OJE zw24*j*?;Khn_n+aGS=_K^L}^3jXSn|;ETH;gylHR-rm3M=t2G^{%P#LgZ;>XZTokY z6)$OEY%q-LPaVAR=0nea^%w7FY{g^L-h(&oJhB}7Lsv>ZM85I!L{InbQH#ZNI4c20=z;Mhrh&Cj!DF08hzT5vnWVYToG zu91VjvMv(Avm?<8!^SIz*m}cS_J)22SI{4nMJ{2zb?gD`QES3@_U&@*#StgFjXlV| z%Dx$~N0dk)QWPnTR7c{GEzycAS8!D%ca}xG5q~5U312;X<=?KHz4FYJZ=K(He(U)y z=Qo~Te}4S@(D{;oS(kevzW%5GIO#_26eo43<=Q`-G#E{0i`8a#I9+a!SMm7+!Ggk2 zQE^GQw5%Mxj#XAw*VHapSXbZB7;kD$BwJFgZHw9$FX`y)TH4*yy9`>md~n6k@W{$l zqhr^Nubxo;uNw0XB_t<1q?OxZQ8tdt+(OC4@^!k8LK}-pqS19FC*#g&ac%yiTqdxMo?2fZO5?3vC8z&=?<*|Wn`y!K(sqOkL=sFiY8IO*fh%7%b zuq}2Xav~-l7gO2zq}q)u(LZ{u+P#x@@Ex~&Qs-Ey0S%dLjAl@yRsi?Xn%cX&&KNsgWIO(ax}JDef4oS8)__!3T^S{R!9v zf%$I0R+KTmP~4Ag3tP<6n5cCbqmc!Tb*d$v;c|S2rXm4uvCk-)6Dj9r!%0A{fAkNLr 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 + + + +This is a custom SVG webfont generated by Font Squirrel. +Foundry URL : http://mplus-fonts.sourceforge.jp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/css/fonts/mplus-1m-regular-webfont.ttf b/docs/css/fonts/mplus-1m-regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..684abfd19f9d3fb00e02c8accb576edd2798383d GIT binary patch literal 19344 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 literal 0 HcmV?d00001 diff --git a/docs/css/handheld.css b/docs/css/handheld.css new file mode 100644 index 0000000..073c0d1 --- /dev/null +++ b/docs/css/handheld.css @@ -0,0 +1,217 @@ +/* + * TABLE OF CONTENTS: + * - Browser reset + * - HTML elements + * - JsDoc styling + * - Media query check + */ + + + + + + +/* + * HTML ELEMENTS + */ + +body { + padding: 1% 4% 1% 4%; +} + +/* + * HTML ELEMENTS + */ + + + + + +/* + * BEGIN JSDOC + */ + +/* Start menu */ +div.index div.menu { + position: fixed; + top: 0; + right: 0; + -moz-border-radius-bottomleft: 15px; + -webkit-border-bottom-left-radius: 15px; + -border-bottom-left-radius: 15px; + padding: 4px 5px 8px 10px; + -moz-box-shadow: 0px 0px 10px #c4c4c4; + -webkit-box-shadow: 0px 0px 10px #c4c4c4; + box-shadow: 0px 0px 10px #c4c4c4; + background-color: rgba(255, 255, 255, 0.9); +} + +div.index input.classFilter { + display: none; +} + +div.index div.indexLinks a { + float: right; + clear: both; + font-size: 1.1em; +} + +div.index *.heading1 { + display:none; +} + +div.index ul.classList { + display:none; +} + +div.index div.fineprint { + display:none; +} + +div.indexStatic { + display: none; +} +/* End menu */ + + + +/* Start content */ +div.content *.classTitle { + margin-right: 60px; + margin-bottom: 15px; +} + +div.content div.intro { + margin: 15px 0 35px; +} + +div.content p.description.summary { + margin-bottom: 0.2em; +} + +div.content div.props { + margin: 1.5em -2% 0 -2%; + padding: 2%; +} + +table.summaryTable { + position: relative; + left: -10px; + width: 100%; + border-collapse: collapse; + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + -icab-box-sizing: content-box; + -khtml-box-sizing: content-box; +} + +*.sectionTitle { + padding: 0 10px 10px 0; +} +caption.sectionTitle { + padding-left: 10px; +} + +table.summaryTable td, +table.summaryTable th { + padding: 0px 10px 10px 10px; +} +table.summaryTable tr:last-child td { + padding-bottom: 0; +} + +table.summaryTable td.attributes { + width: 35%; +} + +table.summaryTable td.nameDescription { + width: 65% +} + + + +dl.detailList { + margin-top: 0.5em; +} + +dl.detailList.nomargin + dl.detailList.nomargin { + margin-top: 0; +} + +dl.detailList dt { + display: inline; + margin-right: 5px; +} + +dl.detailList dt:before { + display: block; + content: ""; +} + +dl.detailList dd { + display: inline; +} + +dl.detailList.params dt { + display: block; +} +dl.detailList.params dd { + display: block; + padding-left: 2em; + padding-bottom: 0.4em; +} + + + + +ul.fileList li { + margin-bottom: 1.5em; +} + + + +.fixedFont.heading { + margin-bottom: 0.5em; +} + +pre.code { + margin: 10px 0 10px 0; + padding: 10px; + border: 1px solid #ccc; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} +/* End content */ + +/* + * END JSDOC + */ + + + + + + + +/* + * START MEDIA QUERY CHECK + */ + +.cssLoadCheck { + position: absolute; + top: -99999px; + left: -99999px; + border: 0; + width: 100px; + padding: 0; + overflow: hidden; +} + +/* + * END MEDIA QUERY CHECK + */ + diff --git a/docs/css/screen.css b/docs/css/screen.css new file mode 100644 index 0000000..8cb4bba --- /dev/null +++ b/docs/css/screen.css @@ -0,0 +1,297 @@ +/* + * TABLE OF CONTENTS: + * - JsDoc styling + * - Media query check + */ + + + + + + +/* + * BEGIN JSDOC + */ + +/* Start menu */ +div.index { + position: fixed; + top: 0; + bottom: 0; + float: left; + width: 30%; + min-width: 100px; + max-width: 300px; + padding: 0 0 10px 0; + overflow: auto; +} + +div.index *.heading1 { + padding: 8px 0 0 0; +} + +div.index div.menu { + margin: 0 15px 0 -15px; + -moz-border-radius-bottomright: 15px; + -webkit-border-bottom-right-radius: 15px; + -border-bottom-right-radius: 15px; + padding: 15px 15px 15px 30px; + -moz-box-shadow: 0px 0px 10px #c4c4c4; + -webkit-box-shadow: 0px 0px 10px #c4c4c4; + box-shadow: 0px 0px 10px #c4c4c4; + background-color: rgba(255, 255, 255, 0.5); +} + +div.index div.indexLinks { + margin-top: 13px; + position: absolute; + right: 30px; +} + +div.index div.indexLinks a { + color: #999999; + text-transform: lowercase; +} + +div.index div.indexLinks a:first-child { + margin-right: 3px; + border-right: 1px solid #999999; + padding-right: 5px; +} + +div.index input.classFilter { + margin-bottom: 4px; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #CCCCCC #999999 #999999 #CCCCCC; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -border-radius: 3px; +} + +div.index ul.classList a { + line-height: 1.3em; +} + +div.index ul.classList a + a { + margin-left: 0.5em; +} + +div.index div.fineprint { + margin: 1em 0 0 15px; + color: #777; + font-size: 0.9em; +} + +div.index div.fineprint a { + color: #777; +} + +div.indexStatic { + position: static; + min-height: 1em; +} +/* End menu */ + + +/* Start content */ +div.content { + float: left; + width: 70%; + min-width: 300px; + max-width: 600px; +} +div.innerContent { + padding: 0 0 0 2.5em; +} + +div.content ul, +div.content ol { + margin-bottom: 3em; +} + +div.content ul.methodDetail { + margin-bottom: 0; +} + +div.content *.classTitle { + position: relative; + left: -10px; + margin: -30px 0 15px 0; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + border-radius: 15px; + padding: 25px 15px 15px 15px; + background-color: #FFFFFF; + background-color: rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0px 0px 10px #c4c4c4; + -webkit-box-shadow: 0px 0px 10px #c4c4c4; + box-shadow: 0px 0px 10px #c4c4c4; +} + +div.content div.intro { + margin: 15px 0 45px +} + +div.content p.summary { + margin-bottom: 0.5em; +} + +div.content ul.summary { + margin-bottom: 1.5em; +} + +div.content ul *.classname a, +div.content ul *.filename a { + font-family: Consolas, "Courier New", Courier, monospace; + text-decoration: none; + font-weight: bold; +} +div.content ul *.classname a:hover, +div.content ul *.filename a:hover { + text-decoration: underline; +} + +div.content div.props { + position: relative; + left: -10px; + margin-bottom: 2.5em; + padding: 10px 15px 15px 15px; + overflow: hidden; +} + +div.content div.hr { + margin: 0 10px 0 0; + height: 4em; +} + + + +table.summaryTable { + position: relative; + left: -10px; + width: 100%; + border-collapse: collapse; + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + -icab-box-sizing: content-box; + -khtml-box-sizing: content-box; +} + +*.sectionTitle { + padding: 0 10px 10px 0; +} +caption.sectionTitle { + padding-left: 10px; +} + +table.summaryTable td, +table.summaryTable th { + padding: 0px 10px 10px 10px; +} +table.summaryTable tr:last-child td { + padding-bottom: 0; +} + +table.summaryTable td.attributes { + width: 35%; +} + +table.summaryTable td.nameDescription { + width: 65% +} + + + +dl.detailList { + margin-top: 0.5em; +} + +dl.detailList.nomargin + dl.detailList.nomargin { + margin-top: 0; +} + +dl.detailList dt { + display: inline; + margin-right: 5px; +} + +dl.detailList dt:before { + display: block; + content: ""; +} + +dl.detailList dd { + display: inline; +} + +dl.detailList.params dt { + display: block; +} +dl.detailList.params dd { + display: block; + padding-left: 2em; + padding-bottom: 0.4em; +} + + + + +ul.fileList li { + margin-bottom: 1.5em; +} + + + +.fixedFont.heading { + margin-bottom: 0.5em; +} + +pre.code { + margin: 10px 0 10px 0; + padding: 10px; + border: 1px solid #ccc; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} +/* End content */ + +.clear { + clear: both; + width: 100%; + min-height: 0; +} + +/* + * END JSDOC + */ + + + + + + + +/* + * START MEDIA QUERY CHECK + */ + +.cssLoadCheck { + position: absolute; + top: -99999px; + left: -99999px; + border: 0; + width: 100px; + padding: 0; + overflow: hidden; +} + +/* + * END MEDIA QUERY CHECK + */ + diff --git a/docs/default.css b/docs/default.css new file mode 100644 index 0000000..184ee4f --- /dev/null +++ b/docs/default.css @@ -0,0 +1,440 @@ +/* --- Basic Layout -------------------------------------------------------- */ +/* For IE for Windows \*/ +* html{ + width: 100%; + height: 100%; + overflow: hidden; +} +* html body{ + width: 100%; + height: 100%; + overflow: auto; +} + +* html .fixed{ + position: absolute; +} +.fixed { + position: fixed; + overflow: auto; +} +/* */ +/* --- Basic Layout -------------------------------------------------------- */ +body { + padding: 0; + margin: 0; + background: #fafafa; + font: 100% Verdana, Arial, Helvetica, sans-serif; +} + +#main { + border-left: 0.625em #356aa0 solid; + margin-left: 16.25em; +} + +#index { + top: 0; + left: 0; + width: 16.25em; + height: 100%; + overflow: auto; + overflow-x: hidden; + border-right: 0.625em solid #356aa0; +} +/* --- General layout ------------------------------------------------------ */ +h1 { + margin: 0.625em 0 0.625em; + font-size: 1.5em; + font-weight: bold; +} + +h1.classTitle { + color: #007b00; + font-size: 1.5em; + line-height:130%; +} + +h2 { + font-size: 1.25em; + color: #6277AA; + margin: 2em 0pt 1em; +} + +h3 { + font-size: 1.1em; + color: #6277AA; +} + +p { + margin: 1em 0; + text-align: justify; +} + +a:link { + color: #001C58; +} + +a:visited { + color: #6277AA; +} + +hr { + border: none 0; + border-top: 0.0625em solid #7f8fb1; + height: 0.0625em; +} + +.invisible { + display: none !important; +} + +.clear { + clear: both; + line-height: 0.0625em; +} + +.description { + font: 0.8125em Verdana, Arial; + line-height: 0.9375em; + padding: 0.25em; + padding-left: 0.25em; +} + +.fineprint { + padding-top: 1.25em; + text-align: right; + font-size: 0.625em; +} + +div.sectionTitle { + background-color: #356aa0; + color: #fff; + font-size: 1.1em; + font-weight: bold; + text-align: left; + padding: 0.125em 0.5em 0.125em 0.5em; + border: 0.0625em #7F8FB1 solid; +} + +/* --- Index toggler ------------------------------------------------------- */ +#index-toggler { + width: 1em; + top: 0.25em; + left: 16.25em; + cursor: pointer; + font-weight: bold; + font-family: Arial; + font-size: 1em; + color: #fff; + z-index: 100; +} +#index-close { + background: url(images/never_translate.png) no-repeat left; + height: 1em; + width: 1em; + float: left; + cursor: pointer; + margin: 0.0625em 0.25em; + display: inline; +} +body.index-collapsed { background-position: 0; } +body.index-collapsed #main { margin-left: 0; } +body.index-collapsed #index { width: 0; } +body.index-collapsed #index-wrapper { display: none; } +body.index-collapsed #index-toggler { left: 0; } + +/* --- Module Filter ------------------------------------------------------- */ +.module-filter { + display: inline; + float: left; + cursor: pointer; + width: 4em; + font-size: 0.8em; + text-align: center; + padding-top: 0.125em; +} +.module-filter, .module-filter a { + text-decoration: none; + color: #007B00 !important; +} +body.filter .sectionItem { display: none; } +body.filter .module-filter, body.filter .module-filter a { color: red !important; } +body.filter.module-core .module-core { display: block; } +body.filter.module-dom .module-dom { display: block; } +body.filter.module-css .module-css { display: block; } +body.filter.module-ajax .module-ajax { display: block; } +body.filter.module-event .module-event { display: block; } + +/* --- Method Toggler ------------------------------------------------------ */ +.method-toggler { + background: url(images/minus.gif) no-repeat left; + cursor: pointer; + float: left; + width: 0.875em; + height: 0.875em; +} +.method-toggler.toggled { + background: url(images/plus.gif) no-repeat left; +} + +/* --- Class Name and File Name Icons -------------------------------------- */ +.itemName .icon, .itemName .icon a { + color: #007B00 !important; +} +.itemName .icon { + font-size: 1em; + font-weight: bold; + padding: 0 0 0.125em 1.5em; +} + +.itemName .icon { + background: url(images/class_obj.png) no-repeat left; +} + +.itemName.namespace .icon { + background-image: url(images/namespace_obj.png) !important; +} + +.itemName.namespace-function .icon { + background-image: url(images/namespace_function_obj.png) !important; +} + +.fileName .icon { + background: url(images/file_obj.png) no-repeat left !important; +} + +/* --- Class Method and Property Icons ------------------------------------- */ +div.classMethod .icon { + padding-left: 1.275em; + background: url(images/method_public_obj.png) no-repeat left; +} + +div.classMethod .private { + background-image: url(images/method_private_obj.png) !important; +} + +div.classProperty .icon { + padding-left: 1.275em; + background: url(images/field_public_obj.png) no-repeat left; +} + +div.classProperty .private { + background-image: url(images/field_private_obj.png) !important; +} + + +/* --- Headers ------------------------------------------------------------- */ +.header { + color: #fff; + font-weight: bold; + font-size: 1.4em; + height: 1.2em; + background: #356aa0; + padding: 0.15em 0.4375em; +} + +#index .header { + padding: 0.5em 0 0 0; + height: 1.625em; + font-size: 1em; + background: #356aa0; +} + +/* --- Main/Index Shared Layouts ------------------------------------------- */ +#content .section { + margin-top: 1.5em; +} + +div.classList { + padding: 0.625em; + font-family: arial, sans-serif; + font-size: 0.75em; +} + +div.sectionItem .signature { + color: #000; + margin-left: 0.250em; + font-weight: normal; +} + +.help, div.sectionItem .signature span { + cursor: help; +} + +/* --- Main layout --------------------------------------------------------- */ +#main .full-description { + font-size: 0.9em; + line-height: 135%; +} + +#main code { + font-size: 1.1em; + font-weight: bold; + color: #666; +} + +html:not([lang*=""]) #main code { + font-size: 1.4em !important; /* Firefox hack */ +} + +#main p p, #main .full-description p, #main span a { + font-size: 1em; +} + +#content { + padding: 0 1.25em 1.25em 1.25em; +} + +#main .sectionItem { + background: #fff; + padding-left: 0.8em; +} + +#main .sectionItem .description { + font-size: 0.8em; + padding-left: 0.4375em; + color: #777; +} + +#main .summary .sectionItems, #main .details .sectionItem { + border: 0.25em #8DA6C6 solid; + padding: 0.625em; +} + +/* --- Summary layout ------------------------------------------------------ */ +#main .summary { + background: #fff; +} + +#main .summary .sectionItems { + border-width: 0.125em 0.125em 0.250em; +} + +#main .summary .sectionItem { + padding: 0 0 0.3em 1.6em; + font-family: Verdana, Arial; + font-size: 0.875em; +} + +#main .summary .sectionItem b { + margin-left: -1.4286em; +} + +#main .summary .module-filter { + margin-left: -5.3571em; +} + +/* --- Details layout ------------------------------------------------------ */ +#main .details .module-filter { + font-size: 70%; +} + +#main .details .sectionItem { + border-width: 0.125em 0.125em 0.250em; + margin-bottom: 0.75em; +} + +#main .details .itemTitle { + color: #001C58; + font-family: Verdana; + font-weight: bold; + font-size: 1em; + display: inline; +} + +#main .details .itemTitle .light { + font-size: 0.9em; +} + +#main .details .full-description { + padding: 0 0.625em; +} + + +.light, .light a:link, .light a:visited { + color: #777; + font-weight: normal; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; +} + +/* --- Details data -------------------------------------------------------- */ +table.methodItem { + font-size: 0.8em; +} +table.methodItem p { + margin: 0; +} +table.methodItem td { + padding: 0 0.1em 0.1em; + vertical-align: text-top; +} +table.methodItem .methodItemType { + text-align: center; +} +div.heading { + color: #6277AA; + font-size: 0.875em; + font-weight: bold; + margin: 0.625em 0 0; +} + +/* --- Index Layout -------------------------------------------------------- */ +#index-wrapper { + width: 100%; +} + +#index-menu { + background: #8DA6C6; + color: #fff; + text-align: center; + padding: 0.125em 0 0.25em; + font-weight: bold; + font-size: 0.9em; +} + +#index-menu a:link, #index-menu a:visited { + color: #fff; +} + +#index-title { + float: left; +} + +#index-content { + background: #fff; + border: 0 #8DA6C6 solid; + border-width: 0 0 0.25em; + font-size: 1.1em; +} + +#index-content .signature { + font-size: 0.85em; +} + +#index .section { + padding-bottom: 0.625em; +} + +/* --- Class index / File index layout ------------------------------------- */ +* html #content.index-page { + width: 92%; /* IE only hack para evitar bug no layout */ +} + +#content.index-page .sectionItem { + padding: 0.125em; +} + +#content.index-page .sectionItems { + border-top-width: 0.125em; +} + +#content.index-page .summary { + margin: 0; +} + +/* --- Hide private members ------------------------------------------------ */ +/* +div.sectionItem.private { + display: none !important; +} +/**/ diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 0000000..0d8cb6c --- /dev/null +++ b/docs/files.html @@ -0,0 +1,129 @@ + + + + + + JsDoc Reference - File Index + + + + + + + + + + + + diff --git a/docs/images/bg.png b/docs/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2a69cea41b857cfea20db051f5ddce1b68309dec GIT binary patch literal 2810 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 literal 0 HcmV?d00001 diff --git a/docs/images/class_default_obj.png b/docs/images/class_default_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..8d42ac86e6d10e79d48a4df201f44cf728a31dd0 GIT binary patch literal 609 zcmV-n0-pVeP)JU_9%Q2D?rDJ}!Jl zGl5GvhEQFeabu!)rp&V1>fbGVL@s?rFMUQZenvBaNlTJoN|0W6u7`ZGjDoe0z1qdt z>D@AbM>d2?JBLp{iBgWenw!R^K8Q~~h)_OfL9eYHg-)cdmGVvw(ZCdU>vQhq#4-vwh+3;E}$Jv(m7<*}1;jyPwCJpvRlL z*tf#mzsBCfu+Xdj|Nm5hwiTC3>;M1&0d!JMQvg8b*k%9#0K!Q`K~#9!V_*OR1vPzD z12qK(7?4v9iHV5`k(7h+%@T96va>Q`l^`Mts_|*LAdng-3DzYYnx31RnVgcFln|;8 z5|HwZ$c+pO3yY453YG#1Na{M}I%{ibY3rHWsDM>i80NZI+SwTyYgo&G1k`Ok{c_zM zt#W-tgylg3rb-@xUO-E{S(%uH!1l^2+xrIu1%$J(vk5|6CadG%>SiL!&nLjk0};^_ v7n4xrVgv$ixPKTp^T2=;F2Df=4Cnv=4Du#X?_O|}00000NkvXXu0mjf8e1Ib literal 0 HcmV?d00001 diff --git a/docs/images/class_obj.png b/docs/images/class_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..b7632459fe91b0b97b54b65568b8ac0051cc4851 GIT binary patch literal 529 zcmV+s0`C2ZP)Q(jQkGy=nq*d)WL=zUtIxB%*uqqoVON=CSeayA zoNC(Y-RAM=QkGuv_wrz%X?(JTd9HzlxQvXvlkoTPS(#yIq;FxMXJDRYp2nfv>fL9e zYHg-)cdmGVvw(ZCdU>vQhq#4-vwh+3;E}$Jv(m7<*}1;jyPwCJpvRlL*tf#mzsBCf zu+Xdj|Nm^Lf!3@2PXGV_0d!JMQvg8b*k%9#0Io?yK~#9!V_*ORZb3K_p4=i?*<5@5A(iF9># zc6N7jb6^DtFp6tNYKe-7h)T#Q@qtyyOGj!esHg}V2&jQo2q~LdMjC1;M%wG^M1cfk zc#Le!fR>osneaf|#>uN{Wo>J1Wz570bs49ax~`tCx)>+i?c8k4EX*7TzmNz3?c^DN TEnJzv00000NkvXXu0mjfp`-d# literal 0 HcmV?d00001 diff --git a/docs/images/collapsebtn.gif b/docs/images/collapsebtn.gif new file mode 100644 index 0000000000000000000000000000000000000000..baa80eb46c1c50e9cec12709e78ce323424b53e7 GIT binary patch literal 273 zcmZ?wbhEHbt|0M-u(XU^QANUuU|TT?c%XJH_qR`ed+Ooo5%L8yL9Hj?Q3Ul zTt0bl$MOT)mmS`<>imh_Paobov}48p|Nj|i26R9sgZ#q4W_Exf!Gndv`9w;_4hsu$ wjuQqG4J1T*&lf1XD${m$a(s{wVRV??Re5HD&EXTQTW%Iu9aAzCU}3NZ0Qwhhc>n+a literal 0 HcmV?d00001 diff --git a/docs/images/expandbtn.gif b/docs/images/expandbtn.gif new file mode 100644 index 0000000000000000000000000000000000000000..39737e3b09f0237c656e24d23c2beedf197bb015 GIT binary patch literal 274 zcmZ?wbhEHb(GuB|NsAIpfS(^nGf;{1Dp8)h6E254*L^N(sx+MIB*|Hp5YF!$q5SLJ9bz&Nc6P@v~4!@IdX#0m-iwA!?#f8 VHT{hD7Xwu?c)I$ztaD0e0syfaDn|eS literal 0 HcmV?d00001 diff --git a/docs/images/field_public_obj.png b/docs/images/field_public_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..6c163f5b203bba457415ef3ba5fab3dea59c639e GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX{r~^J$&3t_g(bCn=TAJb zPOdYkaARrbjz*xkK%1|nMr1iqC1XjDUoeBivm0qZj<%GhSsY`1|JW`SA7o z^7i}n`1|+y`+RUddTu^?Z$5c$K6-CIg>^iAZ$5f%KZPRc|Jfm!{c7NF`Z9BfHh<4_f)n82t4k3oVz^O6ukZhme3Ll Tx_RfA00000NkvXXu0mjfn)2GA literal 0 HcmV?d00001 diff --git a/docs/images/method_private_obj.png b/docs/images/method_private_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..bf432c0d1e102cba338117296b226812d6cb2da7 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!S%6Q7>;M1%PiPvPFfcixX?Q|b z=aX;DN8gyQWeq1JwVqGzKIv?8(%tT)oz=HVea{mTzSh*dZEk*^kf_zR{Swdw#*!ev zU#j+S3j3^P6;M1%SsOiNd&2alCOFT@ z@m*Y;vaYpoTW|ixuF~xj?58K#&xrS$of@{hAbwRz(yD^Ojb()!OI!B0H0^C_+1Jvv zwZ3C#W5svPd9HO2Y3Gz4Sw!TrZPQeWKwoZGGz5L{W7{K( BWn%yU literal 0 HcmV?d00001 diff --git a/docs/images/minus.gif b/docs/images/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..90d1d3414968c3ca11e24a128c6fb61961e680bb GIT binary patch literal 114 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 Eg4Qrw8~^|S literal 0 HcmV?d00001 diff --git a/docs/images/namespace_obj.png b/docs/images/namespace_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..3021c8ac411954d9326bbd9ce51a0dd1f15a220d GIT binary patch literal 3346 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 literal 0 HcmV?d00001 diff --git a/docs/images/never_translate.png b/docs/images/never_translate.png new file mode 100644 index 0000000000000000000000000000000000000000..204f5e76fc331e6ceb2e5b30be6223bb2d4510cd GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW{r~@ePVIDKzx8K_I&D>OTMUHy9TU}5rcC2bIx}a5WwBnz zMlX+yt5E`n18xS~6kC)1J#XP&g=3Nm7Tr0lRtyX=SJhJaI-H7t#xr=j`njxgN@xNA DR>E3z literal 0 HcmV?d00001 diff --git a/docs/images/plus.gif b/docs/images/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..014671fc37264f6e7c1b1f636df663d29a3bd938 GIT binary patch literal 118 zcmZ?wbhEHb`2GL$pa0+g{{Qy(|F3`l zzyJIH>puuEfPvyq7DfgJUIrZy4`c=di?YB8&(^(8U4~5ZQI0H4D_AwMGTI%YZZ%Ed QT%^gRY{2uBS&+dR0G}f@r~m)} literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..c85bbb0 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,147 @@ + + + + + + JsDoc Reference - Index + + + + + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ +
+ Framework jProton +
+ + +
+ +

Class Index

+ +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + _global_ +
+

+ Global namespace. +

+
+ +
+ +
+
+ +
+
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+
+
+ + + diff --git a/docs/javascript/all.js b/docs/javascript/all.js new file mode 100644 index 0000000..5b6876a --- /dev/null +++ b/docs/javascript/all.js @@ -0,0 +1,326 @@ +/** + * @fileOverview Contains standard code in the namespace 'wbos' and code specifically written for Codeview in the namespace 'codeview' + * @author Wouter Bos (www.thebrightlines.com) + * @since 1.0 - 2010-09-10 + * @version 1.0 - 2010-09-10 + */ + + + + + + +if (typeof(wbos) == "undefined") { + /** + * @namespace Standard code of Wouter Bos (wbos) + */ + wbos = {} +} +if (typeof(wbos.CssTools) == "undefined") { + /** + * @namespace Namespace for CSS-related functionality + */ + wbos.CssTools = {} +} + + + + +/** + * @namespace Fallback for CSS advanced media query + * @class + * @since 1.0 - 2010-09-10 + * @version 1.0 - 2010-09-10 + */ +wbos.CssTools.MediaQueryFallBack = ( function() { + var config = { + cssScreen: "/css/screen.css", + cssHandheld: "/css/handheld.css", + mobileMaxWidth: 660, + testDivClass: "cssLoadCheck", + dynamicCssLinkId: "DynCssLink", + resizeDelay: 30 + } + var noMediaQuery = false; + var delay; + var currentCssMediaType; + + // Adding events to elements in the DOM without overwriting it + function addEvent(element, newFunction, eventType) { + var oldEvent = eval("element." + eventType); + var eventContentType = eval("typeof element." + eventType) + + if ( eventContentType != 'function' ) { + eval("element." + eventType + " = newFunction") + } else { + eval("element." + eventType + " = function(e) { oldEvent(e); newFunction(e); }") + } + } + + // Get the the inner width of the browser window + function getWindowWidth() { + if (window.innerWidth) { + return window.innerWidth; + } else if (document.documentElement.clientWidth) { + return document.documentElement.clientWidth; + } else if (document.body.clientWidth) { + return document.body.clientWidth; + } else{ + return 0; + } + } + + function addCssLink(cssHref) { + var cssNode = document.createElement('link'); + var windowWidth; + cssNode.type = 'text/css'; + cssNode.rel = 'stylesheet'; + cssNode.media = 'screen, handheld, fallback'; + cssNode.href = cssHref; + document.getElementsByTagName("head")[0].appendChild(cssNode); + } + + + + /* Start public */ + return { + /** + * Adds link to CSS in the head if no CSS is loaded + * + * @since 1.0 - 2010-08-21 + * @version 1.0 - 2010-08-21 + * @param {String|Object} cssScreen URL to CSS file for larger screens + * @param {String|Object} cssHandheld URL to CSS file for smaller screens + * @param {Number} mobileMaxWidth Maximum width for handheld devices + * @example + * wbos.CssTools.MediaQueryFallBack.LoadCss(['screen.css', 'screen2.css'], 'mobile.css', 480) + */ + LoadCss: function(cssScreen, cssHandheld, mobileMaxWidth) { + // Set config values + if (typeof(cssScreen) != "undefined") { + config.cssScreen = cssScreen; + } + if (typeof(cssHandheld) != "undefined") { + config.cssHandheld = cssHandheld; + } + if (typeof(mobileMaxWidth) != "undefined") { + config.mobileMaxWidth = mobileMaxWidth; + } + + // Check if CSS is loaded + var cssloadCheckNode = document.createElement('div'); + cssloadCheckNode.className = config.testDivClass; + document.getElementsByTagName("body")[0].appendChild(cssloadCheckNode); + if (cssloadCheckNode.offsetWidth != 100 && noMediaQuery == false) { + noMediaQuery = true; + } + cssloadCheckNode.parentNode.removeChild(cssloadCheckNode) + + if (noMediaQuery == true) { + // Browser does not support Media Queries, so JavaScript will supply a fallback + var cssHref = ""; + + // Determines what CSS file to load + if (getWindowWidth() <= config.mobileMaxWidth) { + cssHref = config.cssHandheld; + newCssMediaType = "handheld"; + } else { + cssHref = config.cssScreen; + newCssMediaType = "screen"; + } + + // Add CSS link to of page + if (cssHref != "" && currentCssMediaType != newCssMediaType) { + var currentCssLinks = document.styleSheets + for (var i = 0; i < currentCssLinks.length; i++) { + for (var ii = 0; ii < currentCssLinks[i].media.length; ii++) { + if (typeof(currentCssLinks[i].media) == "object") { + if (currentCssLinks[i].media.item(ii) == "fallback") { + currentCssLinks[i].ownerNode.parentNode.removeChild(currentCssLinks[i].ownerNode) + i-- + break; + } + } else { + if (currentCssLinks[i].media.indexOf("fallback") >= 0) { + currentCssLinks[i].owningElement.parentNode.removeChild(currentCssLinks[i].owningElement) + i-- + break; + } + } + } + } + if (typeof(cssHref) == "object") { + for (var i = 0; i < cssHref.length; i++) { + addCssLink(cssHref[i]) + } + } else { + addCssLink(cssHref) + } + + currentCssMediaType = newCssMediaType; + } + + + // Check screen size again if user resizes window + addEvent(window, wbos.CssTools.MediaQueryFallBack.LoadCssDelayed, 'onresize') + } + }, + + /** + * Runs LoadCSS after a short delay + * + * @since 1.0 - 2010-08-21 + * @version 1.0 - 2010-08-21 + * @example + * wbos.CssTools.MediaQueryFallBack.LoadCssDelayed() + */ + LoadCssDelayed: function() { + clearTimeout(delay); + delay = setTimeout( "wbos.CssTools.MediaQueryFallBack.LoadCss()", config.resizeDelay) + } + + } + /* End public */ +})(); + + + + + + +/** + * @namespace Adds a function to an event of a single element. Use this if + * you don't want to use jQuery + * @class + * @since 1.0 - 2010-02-23 + * @version 1.0 - 2010-02-23 + */ +wbos.Events = ( function() { + /* Start public */ + return { + /** + * Adds a function to an event of a single element + * + * @since 1.0 - 2010-02-23 + * @version 1.0 - 2010-02-23 + * @param {Object} element The element on which the event is placed + * @param {Function} newFunction The function that has to be linked to the event + * @param {String} eventType Name of the event + * @example + * wbos.Events.AddEvent( document.getElementById('elementId'), functionName, "onclick" ) + */ + AddEvent: function( element, newFunction, eventType ) { + var oldEvent = eval("element." + eventType); + var eventContentType = eval("typeof element." + eventType) + + if ( eventContentType != 'function' ) { + eval("element." + eventType + " = newFunction") + } else { + eval("element." + eventType + " = function(e) { oldEvent(e); newFunction(e); }") + } + } + } + /* End public */ +})(); + + + + + + +if (typeof(codeview) == "undefined") { + /** + * @namespace Code written for the Codeview template + */ + codeview = {} +} + + + + + + + +/** + * @namespace Enables filtering in class lists + * @class + * @since 1.0 - 2010-11-08 + * @version 1.0 - 2010-11-08 + */ +codeview.classFilter = ( function() { + function onkeyup_ClassFilter() { + var listItems + var search = document.getElementById('ClassFilter').value + search = search.toLowerCase() + if (document.getElementById('ClassList')) { + listItems = document.getElementById('ClassList').getElementsByTagName('li') + filterList(listItems, search) + } + if (document.getElementById('ClassList2')) { + listItems = document.getElementById('ClassList2').getElementsByTagName('li') + filterList(listItems, search) + } + if (document.getElementById('FileList')) { + listItems = document.getElementById('FileList').getElementsByTagName('li') + filterList(listItems, search) + } + if (document.getElementById('MethodsListInherited')) { + var links = document.getElementById('MethodsListInherited').getElementsByTagName('a') + var linksSelected = new Array() + for (var i=0; i < links.length; i++) { + if (links[i].parentNode.parentNode.tagName == "DD") { + linksSelected.push(links[i]) + } + } + filterList(linksSelected, search) + } + if (document.getElementById('MethodsList')) { + listItems = document.getElementById('MethodsList').getElementsByTagName('tbody')[0].getElementsByTagName('tr') + filterList(listItems, search, document.getElementById('MethodDetail').getElementsByTagName('li')) + } + } + + function filterList(listItems, search, relatedElements) { + var itemContent = "" + for (var i=0; i < listItems.length; i++) { + itemContent = listItems[i].textContent||listItems[i].innerText + if (itemContent != undefined) { + itemContent = itemContent.toLowerCase() + itemContent = itemContent.replace(/\s/g, "") + if (itemContent.indexOf(search) >= 0 || itemContent == "") { + listItems[i].style.display = "" + } else { + listItems[i].style.display = "none" + } + if (relatedElements != null) { + filterRelatedList(listItems[i], search, relatedElements) + } + } + } + } + + function filterRelatedList(listItem, search, relatedElements) { + var itemIndex = parseInt(listItem.className.replace('item', '')) + if (itemIndex <= relatedElements.length) { + if (relatedElements[itemIndex].className == "item"+ itemIndex) { + relatedElements[itemIndex].style.display = listItem.style.display + } + } + } + + + + + + /* Start public */ + return { + Init: function() { + wbos.Events.AddEvent( + document.getElementById('ClassFilter'), + onkeyup_ClassFilter, + "onkeyup" + ) + } + } + /* End public */ +})(); diff --git a/docs/javascript/html5.js b/docs/javascript/html5.js new file mode 100644 index 0000000..3587bf7 --- /dev/null +++ b/docs/javascript/html5.js @@ -0,0 +1,6 @@ +// html5shiv MIT @rem remysharp.com/html5-enabling-script +// iepp v1.6.2 MIT @jon_neal iecss.com/print-protector +/*@cc_on(function(m,c){var z="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video";function n(d){for(var a=-1;++ai
";if(g.childNodes.length!==1){var i=z.split("|"),o=i.length,s=RegExp("(^|\\s)("+z+")", +"gi"),t=RegExp("<(/*)("+z+")","gi"),u=RegExp("(^|[^\\n]*?\\s)("+z+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),r=c.createDocumentFragment(),k=c.documentElement;g=k.firstChild;var h=c.createElement("body"),l=c.createElement("style"),f;n(c);n(r);g.insertBefore(l, +g.firstChild);l.media="print";m.attachEvent("onbeforeprint",function(){var d=-1,a=p(c.styleSheets,"all"),e=[],b;for(f=f||c.body;(b=u.exec(a))!=null;)e.push((b[1]+b[2]+b[3]).replace(s,"$1.iepp_$2")+b[4]);for(l.styleSheet.cssText=e.join("\n");++d1){ai++;target=t=a0}for(;source=arguments[ai];ai++){for(var prop in source){p=source[prop];if(prop.charAt(0)!="@"){if(p&&p.splice){var tp=t[prop];t[prop]=tp&&tp.splice?tp.concat(p):new Array().concat(p)}else{if(p&&typeof p=="object"){t[prop]=jProton.extend(t[prop]||{},p)}else{t[prop]=p}}}else{if(prop=="@init"){p.call(t)}else{if(prop=="@require"){for(var ext in p){var v=p[ext];o=t.extensions[ext]||null;if(!o){throw'A extensão "'+ext+'" deve estar instalada.'}else{if(o=0){this.removeClass(e,name)}else{this.addClass(e,name)}},css:function(e,name,val){if(e){if(val){e.style[name]=val}else{var type=typeof name;if(type=="object"){for(p in name){e.style[p]=name[p]}}else{return window.getComputedStyle?document.defaultView.getComputedStyle(e,null)[name]||e.style[name]:e.currentStyle?e.currentStyle[name]||e.style[name]:undefined}}}else{return undefined}}});set.extend({"@extension":{css:"0.3.0a"},hasClass:function(name){return this[0]?(" "+this[0].className+" ").indexOf(" "+name+" ")!=-1:undefined},addClass:function(name){for(var i=0,ei;ei=this[i];i++){element.addClass(ei,name)}return this},removeClass:function(name){for(var i=0,ei;ei=this[i];i++){element.removeClass(ei,name)}return this},toggleClass:function(name){for(var i=0,ei;ei=this[i];i++){element.toggleClass(ei,name)}return this},css:function(name,val){if(val){for(var i=0,ei;ei=this[i];i++){element.css(ei,name,val)}return this}else{return element.css(this[0],name)}}});jProton.event=function(){var _events=new Array();var addEventListener=typeof document.addEventListener!="undefined";var attachEvent=typeof document.attachEvent!="undefined";return{version:"jProton.event.0.3.9a",add:function(e,type,fn){_events.push({e:e,type:type,fn:fn});if(addEventListener){e.addEventListener(type,fn,false)}else{if(attachEvent){e["e"+type+fn]=fn;e[type+fn]=function(){e["e"+type+fn](window.event)};e.attachEvent("on"+type,e[type+fn])}}},remove:function(e,type,fn){var l,fs=fn.toString();for(var i=0,li;li=_events[i];i++){if(li.e==e&&li.type==type&&(li.fn==fn||li.fn.toString()==fs)){l=_events.splice(i,1)[0];break}}if(l){fn=l.fn;if(addEventListener){e.removeEventListener(type,fn,false)}else{if(attachEvent){e.detachEvent("on"+type,e[type+fn]);e[type+fn]=null;e["e"+type+fn]=null}}}},removeAll:function(){for(var i=0;li=_events[i];i++){this.remove(li.e,li.type,li.fn)}}}}();set.extend({"@extension":{event:"0.3.0a"},on:function(type,fn){return this.each(function(){jProton.event.add(this,type,fn)})},un:function(type,fn){return this.each(function(){jProton.event.remove(this,type,fn)})}});jProton.ajax=function(options){return this.ajax.request(options)};var ajax=jProton.ajax;jProton.extend(ajax,function(){var _requests=new Array();var _transport=null;var _callback=null;var _states=["Uninitialized","Loading","Loaded","Interactive","Complete"];var _sendRequest=function(){var t=_transport,r=_requests.shift(),data;t.open(r.type,r.url,r.async);t.setRequestHeader("X-Requested-With","XMLHttpRequest");if(data=jProton.serialize(r.data)){t.setRequestHeader("Content-Type",r.contentType)}t.onreadystatechange=function(){_onStateChange(r)};t.send(data)};var _onStateChange=function(options){var fn,o=options,t=_transport;var state=_getState(t);if(fn=o["on"+state]){fn(_getResponse(o),o)}if(state=="Complete"){var success=t.status==200,response=_getResponse(o);if(fn=o.onUpdate){fn(response,o)}if(fn=o["on"+(success?"Success":"Failure")]){fn(response,o)}t.onreadystatechange=jProton.emptyFn;if(_requests.length>0){setTimeout(_sendRequest,10)}}};var _getResponse=function(options){var t=_transport,type=options.dataType;if(t.status!=200){return t.statusText}else{if(type=="text"){return t.responseText}else{if(type=="html"){return t.responseText}else{if(type=="xml"){return t.responseXML}else{if(type=="json"){return eval("("+t.responseText+")")}}}}}};var _getState=function(){return _states[_transport.readyState]};return{"@extension":{ajax:"0.3.0a"},"@init":function(){_transport=null;try{_transport=new XMLHttpRequest()}catch(e){try{_transport=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{_transport=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}}},request:function(options){var o=options||{};o.type=o.type&&o.type.toLowerCase()||"get";o.async=o.async||true;o.dataType=o.dataType||"text";o.contentType=o.contentType||"application/x-www-form-urlencoded";_requests.push(o);var s=_getState();if(s=="Uninitialized"||s=="Complete"){_sendRequest()}}}}());set.extend({"@require":{dom:"0.3"},"@extension":{ajax:"0.3.0a"},load:function(url,data,callback){var d=data||null,fn=callback||null;if((typeof data=="function")&&(typeof callback=="undefined")){d=null;fn=data}ajax.request({url:url,data:d,onSuccess:fn,elements:this,onUpdate:function(r,o){$(o.elements).html(r)}});return this}});jProton.extend({"@extension":{ajax:"0.2.0a"},serialize:function(data){var r=[""],rl=0;if(data){if(typeof data=="string"){r[rl++]=data}else{if(data.innerHTML&&data.elements){for(var i=0,el,l=(el=data.elements).length;i+~]\s?|\s|$)/,reTag=/^(#)?([\w-\*]+)/,reNth=/(\d*)n\+?(\d*)/,reNth2=/\D/,isIE=!!window.ActiveXObject,key=30803;eval("var batch = 30803;");function _quickId(e,mode,context,val){if(e==context){var d=context.ownerDocument||context;return d.getElementById(val)}e=_getNodes(e,mode,"*");return _byId(e,val)}var _byId=function(e,val){if(e.tagName||e==document){e=[e]}var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if(ei&&ei.id==val){r[++rl]=ei;return r}}return r};var _byTag=function(e,val){if(e.tagName||e==document){e=[e]}var r=new Array(),rl=-1;val=val.toLowerCase();for(var i=0,ei;ei=e[i];i++){if(ei.nodeType==1&&ei.tagName.toLowerCase()==val){r[++rl]=ei}}return r};var _byClass=function(e,val){if(!val){return e}var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if((" "+ei.className+" ").indexOf(val)!=-1){r[++rl]=ei}}return r};var _byAttr=function(e,attr,op,val){var r=new Array(),rl=-1,f=query.operators[op];for(var i=0,ei,a;ei=e[i];i++){if(attr=="class"||attr=="className"){a=ei.className}else{if(attr=="for"){a=ei.htmlFor}else{if(attr=="href"){a=ei.getAttribute("href",2)}else{a=ei.getAttribute(attr)}}}if((f&&f(a,val))||(!f&&a)){r[++rl]=ei}}return r};var _byPseudo=function(e,name,val){return query.pseudos[name](e,val)};var _getNodes=function(e,mode,name){var r=new Array(),rl=-1;if(!e){return r}name=name||"*";if(typeof e.getElementsByTagName!="undefined"){e=[e]}if(!mode){for(var i=0,ei,n;ei=e[i];i++){n=ei.getElementsByTagName(name);for(var j=0,nj;nj=n[j];j++){r[++rl]=nj}}}else{if(mode=="/"||mode==">"){var utag=name.toUpperCase();for(var i=0,ei,n;ei=e[i];i++){n=ei.children||ei.childNodes;for(var j=0,nj;nj=n[j];j++){if(nj.nodeName==utag||nj.nodeName==name||name=="*"){r[++rl]=nj}}}}else{if(mode=="+"){var utag=name.toUpperCase();for(var i=0,ei;ei=e[i];i++){while((ei=ei.nextSibling)&&ei.nodeType!=1){}if(ei&&(ei.nodeName==utag||ei.nodeName==name||name=="*")){r[++rl]=ei}}}else{if(mode=="~"){for(var i=0,ei;ei=e[i];i++){while((ei=ei.nextSibling)&&(ei.nodeType!=1||(name=="*"||ei.tagName.toLowerCase()!=name))){}if(ei){r[++rl]=ei}}}}}}return r};var _unique=function(e){if(!e){return new Array()}var len=e.length,i,r=e,ei;if(!len||typeof e.nodeType!="undefined"||len==1){return e}if(isIE&&typeof e[0].selectSingleNode!="undefined"){var d=++key;e[0].setAttribute("__unique",d);var r=[e[0]],rl=0;for(var i=1,ei;ei=e[i];i++){if(!ei.getAttribute("__unique")!=d){ei.setAttribute("__unique",d);r[++rl]=ei}}for(var i=0;ei=e[i];i++){ei.removeAttribute("__unique")}return r}var d=++key;e[0].__unique=d;for(i=1,ei;ei=e[i];i++){if(ei.__unique!=d){ei.__unique=d}else{r=new Array(),rl=-1;for(var j=0;j1){return _unique(results)}return results},is:function(e,ss){if(typeof e=="string"){e=document.getElementById(e)}var isArray=!!e.splice,result=query.filter(isArray?e:[e],ss);return isArray?(result.length==e.length):(result.length>0)},filter:function(e,ss,nonMatches){ss=ss.replace(reTrim,"");if(!simpleCache[ss]){simpleCache[ss]=query.compile(ss,"simple")}var result=simpleCache[ss](e);return nonMatches?_diff(result,e):result},rules:[{re:/^\.([\w-]+)/,select:'e = _byClass(e, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'e = _byPseudo(e, "{1}", "{2}");'},{re:/^\[([\w-]+)(?:(.?=)["']?(.+?)["']?)?\]/,select:'e = _byAttr(e, "{1}", "{2}", "{3}");'},{re:/^#([\w-]+)/,select:'e = _byId(e, "{1}");'}],operators:{"=":function(attr,val){return attr==val},"!=":function(attr,val){return attr!=val},"^=":function(attr,val){return attr&&attr.substr(0,val.length)==val},"$=":function(attr,val){return attr&&attr.substr(attr.length-val.length)==val},"*=":function(attr,val){return attr&&attr.indexOf(val)!==-1},"%=":function(attr,val){return(attr%val)==0},"|=":function(attr,val){return attr&&(attr==val||attr.substr(0,val.length+1)==val+"-")},"~=":function(attr,val){return attr&&(" "+attr+" ").indexOf(" "+val+" ")!=-1}},pseudos:{"first-child":function(e){var r=new Array(),rl=-1,n;for(var i=0,ei;ei=n=e[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++rl]=ei}}return r},"last-child":function(e){var r=new Array(),rl=-1,n;for(var i=0,ei;ei=n=e[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++rl]=ei}}return r},"nth-child":function(e,val){var r=new Array(),rl=-1,m=reNth.exec(val=="even"&&"2n"||val=="odd"&&"2n+1"||!reNth2.test(val)&&"n+"+val||val),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,ei;ei=e[i];i++){var p=ei.parentNode;if(batch!=p._batch){var j=0;for(var n=p.firstChild;n;n=n.nextSibling){if(n.nodeType==1){n.nodeIndex=++j}}p._batch=batch}if(f==1){if(l==0||ei.nodeIndex==l){r[++rl]=ei}}else{if((ei.nodeIndex+l)%f==0){r[++rl]=ei}}}return r},"only-child":function(e){var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if(!_prev(ei)&&!_next(ei)){r[++rl]=ei}}return r},empty:function(e){var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){var n=ei.childNodes,j=-1,nj,empty=true;while(nj=n[++j]){if(nj.nodeType==1||nj.nodeType==3){empty=false;break}}if(empty){r[++rl]=ei}}return r},contains:function(e,val){var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if((ei.textContent||ei.innerText||"").indexOf(val)!=-1){r[++rl]=ei}}return r},nodeValue:function(e,val){var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if(ei.firstChild&&ei.firstChild.nodeValue==val){r[++rl]=ei}}return r},checked:function(e){var r=new Array(),rl=-1;for(var i=0,ei;ei=e[i];i++){if(ei.checked==true){r[++rl]=ei}}return r},not:function(e,val){return query.filter(e,val,true)},any:function(e,val){var r=new Array(),rl=-1,s,ss=val.split("|");for(var i=0,ei;ei=e[i];i++){for(var j=0;s=ss[j];j++){if(query.is(ei,s)){r[++rl]=ei;break}}}return r},odd:function(e){return this["nth-child"](e,"odd")},even:function(e){return this["nth-child"](e,"even")},nth:function(e,val){return e[val-1]||new Array()},first:function(e){return e[0]||new Array()},last:function(e){return e[e.length-1]||new Array()},has:function(e,val){var r=new Array(),rl=-1,s=query.select;for(var i=0,ei;ei=e[i];i++){if(s(val,ei).length>0){r[++rl]=ei}}return r},next:function(e,val){var r=new Array(),rl=-1,is=query.is;for(var i=0,ei;ei=e[i];i++){var n=_next(ei);if(n&&is(n,val)){r[++rl]=ei}}return r},prev:function(e,val){var r=new Array(),rl=-1,is=query.is;for(var i=0,ei;ei=e[i];i++){var n=_prev(ei);if(n&&is(n,val)){r[++rl]=ei}}return r}}}}();var query=jProton.query})(); \ No newline at end of file diff --git a/docs/sh.css b/docs/sh.css new file mode 100644 index 0000000..1132131 --- /dev/null +++ b/docs/sh.css @@ -0,0 +1,182 @@ +.dp-highlighter +{ + font-family: "Consolas", "Courier New", Courier, mono, serif; + background-color: #E7E5DC; + margin: 1.5em 0 !important; + padding: 1px; /* adds a little border on top when controls are hidden */ +} + +/* clear styles */ +.dp-highlighter ol, +.dp-highlighter ol li, +.dp-highlighter ol li span +{ + line-height: 1.25em; + margin: 0; + padding: 0; + border: none; +} + +.dp-highlighter a, +.dp-highlighter a:hover +{ + background: none; + border: none; + padding: 0; + margin: 0; +} + +.dp-highlighter .bar +{ + padding-left: 45px; +} + +.dp-highlighter.collapsed .bar, +.dp-highlighter.nogutter .bar +{ + padding-left: 0px; +} + +.dp-highlighter ol +{ + list-style: decimal; /* for ie */ + background-color: #fff; + margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */ + padding: 0px; + color: #5C5C5C; +} + +.dp-highlighter.nogutter ol, +.dp-highlighter.nogutter ol li +{ + list-style: none !important; + margin-left: 0px !important; +} + +.dp-highlighter ol li, +.dp-highlighter .columns div +{ + list-style: decimal-leading-zero; /* better look for others, override cascade from OL */ + list-style-position: outside !important; + border-left: 3px solid #6CE26C; + background-color: #fafafa; + color: #5C5C5C; + padding: 0 3px 0 10px !important; + margin: 0 !important; +} + +.dp-highlighter.nogutter ol li, +.dp-highlighter.nogutter .columns div +{ + border: 0; +} + +.dp-highlighter .columns +{ + background-color: #fafafa; + color: gray; + overflow: hidden; + width: 100%; +} + +.dp-highlighter .columns div +{ + padding-bottom: 5px; +} + +.dp-highlighter ol li.alt +{ + background-color: #FFF; + color: inherit; +} + +.dp-highlighter ol li span +{ + color: black; + background-color: inherit; +} + +/* Adjust some properties when collapsed */ + +.dp-highlighter.collapsed ol +{ + margin: 0px; +} + +.dp-highlighter.collapsed ol li +{ + display: none; +} + +/* Additional modifications when in print-view */ + +.dp-highlighter.printing +{ + border: none; +} + +.dp-highlighter.printing .tools +{ + display: none !important; +} + +.dp-highlighter.printing li +{ + display: list-item !important; +} + +/* Styles for the tools */ + +.dp-highlighter .tools +{ + padding: 3px 8px 3px 10px; + font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; + color: silver; + background-color: #f8f8f8; + padding-bottom: 10px; + border-left: 3px solid #6CE26C; +} + +.dp-highlighter.nogutter .tools +{ + border-left: 0; +} + +.dp-highlighter.collapsed .tools +{ + border-bottom: 0; +} + +.dp-highlighter .tools a +{ + font-size: 9px; + color: #a0a0a0; + background-color: inherit; + text-decoration: none; + margin-right: 10px; +} + +.dp-highlighter .tools a:hover +{ + color: red; + background-color: inherit; + text-decoration: underline; +} + +/* About dialog styles */ + +.dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; } +.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; } +.dp-about td { padding: 10px; vertical-align: top; } +.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } +.dp-about .title { color: red; background-color: inherit; font-weight: bold; } +.dp-about .para { margin: 0 0 4px 0; } +.dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; } +.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; } + +/* Language specific styles */ + +.dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; } +.dp-highlighter .string { color: #00d; background-color: inherit; } +.dp-highlighter .keyword { color: #6277AA; font-weight: bold; background-color: inherit; } +.dp-highlighter .preprocessor { color: gray; background-color: inherit; } diff --git a/docs/sh.js b/docs/sh.js new file mode 100644 index 0000000..d322250 --- /dev/null +++ b/docs/sh.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('6 7={8:{16:{},1b:{},1i:{},1e:{},2L:{2G:\'<2y><1W><1S>2k...<1x 18="7-2U"><2S 4g="0"><1E><1C 18="21">

7.2q1T: {V}

36://30.2V.2K/2M

&21;41-3W 3V 3T.<1E><1C 18="3Q"><3N 1J="3E" 18="1p" 1m="3y" 3x="19.1p()"/>\'},1A:e,1T:"1.5.1"}};7.2q=7.8;7.8.16.1K={3m:{1h:"+ 3h 2h",1F:d(A){h A.1t},1j:d(B,A){B.26.2Q(B);A.i.q=A.i.q.l("2a","")}},4m:{1h:"4j 4e",1j:d(B,A){6 D=7.8.1b.1L(A.28).l(/\'+D+"");C.m.1p()}},3D:{1h:"21 3C 1V",1F:d(){h 19.1O!=e||7.8.1A!=e},1j:d(B,A){6 D=7.8.1b.1L(A.28).l(/&1H;/g,"<").l(/&2n;/g,">").l(/&3w;/g,"&");9(19.1O){19.1O.3v("1R",D)}14{9(7.8.1A!=e){6 C=A.2l;9(C==e){C=m.1n("i");A.2l=C;A.i.k(C)}C.y=\'<2r 3r="\'+7.8.1A+\'" 3p="1V=\'+3o(D)+\'" 1v="0" 1w="0" 1J="3n/x-3k-3j">\'}}2v("3g 1a 3d 1D 3b 1V 3a")}},38:{1h:"2N",1j:d(B,A){6 C=m.1n("5c");6 D=e;C.1z.35="58:57;1v:2Z;1w:2Z;51:-2Y;4Z:-2Y;";m.1x.k(C);D=C.2d.m;7.8.1b.2c(D,19.m);D.1M(\'\'+A.i.y+"");D.1p();C.2d.2T();C.2d.2N();2v("4F...");m.1x.2Q(C)}},2k:{1h:"?",1j:d(A){6 B=19.2E("","24","4C,1v=4z,1w=2P,2x=0");6 C=B.m;7.8.1b.2c(C,19.m);C.1M(7.8.2L.2G.l("{V}",7.8.1T));C.1p();B.2T()}}};7.8.16.2O=d(B){6 D=m.1n("29");D.q="4q";j(6 A 1D 7.8.16.1K){6 C=7.8.16.1K[A];9(C.1F!=e&&!C.1F(B)){15}D.y+=\'"+C.1h+""}h D};7.8.16.2R=d(A,B){6 C=B;1u(C!=e&&C.q.1P("7-1r")==-1){C=C.26}9(C!=e){7.8.16.1K[A].1j(B,C.1r)}};7.8.1b.2c=d(A,D){6 B=D.27("25");j(6 C=0;C\')}}};7.8.1b.1L=d(A){h(7.8.2F==12)?A.l(/<1k\\s*\\/?>|&1H;1k\\s*\\/?&2n;/1I,"\\n"):A};7.8.1i={2D:o 17("/\\\\*[\\\\s\\\\S]*?\\\\*/","1l"),2C:o 17("//.*$","1l"),3R:o 17("#.*$","1l"),2A:o 17(\'"(?:\\\\.|(\\\\\\\\\\\\")|[^\\\\""\\\\n])*"\',"g"),2z:o 17("\'(?:\\\\.|(\\\\\\\\\\\\\')|[^\\\\\'\'\\\\n])*\'","g")};7.8.2W=d(C,A,B){3.1m=C;3.v=A;3.f=C.f;3.11=B};7.8.r=d(){3.22=1f;3.2g=12;3.1t=1f;3.2w=12;3.3L=3H;3.2f=12};7.8.r.2u=d(B,A){9(B.vA.v){h 1}14{9(B.fA.f){h 1}}}}h 0};7.8.r.13.z=d(B){6 A=m.1n(B);A.1r=3;h A};7.8.r.13.2t=d(D,C){6 B=0;6 A=e;1u((A=D.1Y(3.1a))!=e){3.u[3.u.f]=o 7.8.2W(A[0],A.v,C)}};7.8.r.13.1q=d(E,C){9(E==e||E.f==0){h}6 D=3.z("1X");E=E.l(/ /g,"&1B;");E=E.l(/");9(C!=e){9((/1k/1I).3A(E)){6 A=E.1s("&1B;<1k>");j(6 B=0;BC.v)&&(A.v/1I,"\\n");6 I=E.1s("\\n");9(3.2g==12){3.1d.k(7.8.16.2O(3))}9(3.2f){6 A=3.z("i");6 C=3.z("i");6 B=10;6 D=1;1u(D<=2P){9(D%B==0){A.y+=D;D+=(D+"").f}14{A.y+="&3t;";D++}}C.q="3s";C.k(A);3.1d.k(C)}j(6 D=0,H=3.1U;D0;J++){9(F(I[J]).f==0){15}6 M=L.1Y(I[J]);9(M!=e&&M.f>0){K=3G.3l(M[0].f,K)}}9(K>0){j(6 J=0;J + + + + + + JsDoc Reference - $_.dom + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Namespace $_.dom +

+ + + +
+

+
+ +

Defined in: DOM.js.

+ + + + + + + + + + + + +
+
Method Summary
+
+ +
+ + addClass(string) + Adds a class to the element(s) specified by the current selector +
+ +
+ + removeClass(string) + Removes a class from the element(s) specified by the current selector +
+ +
+ + hide() + Hides the element(s) specified by the current selector +
+ +
+ + show(string) + Shows the element(s) specified by the current selector. +
+ +
+ + attr(string, string) + Sets attributes on element(s) specified by the current selector, or, if name is not specified, returns the value of the attribute of the element specified by the current selector. +
+ +
+
+ + + + + + + + + + + +
+
+ Method Detail +
+
+ + +
+ +
+ $_.dom.addClass(string) + +
+
+ Adds a class to the element(s) specified by the current +selector + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string + + class +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.dom.removeClass(string) + +
+
+ Removes a class from the element(s) specified by the current +selector + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string + + class +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.dom.hide() + +
+
+ Hides the element(s) specified by the current selector + + + + +

+										
+									
+ + + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.dom.show(string) + +
+
+ Shows the element(s) specified by the current selector. +if type is specified, the element will have it's style +property set to "display:[your type]". If type is not +specified, the element is set to "display:block". + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string?, Default: + + type +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.dom.attr(string, string) + : string +
+
+ Sets attributes on element(s) specified by the current +selector, or, if name is not specified, returns the +value of the attribute of the element specified by the +current selector. + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + name +
+ + + string + + value +
+ + + + + +
Returns:
+ + + + + + + +
+ + + string +
+ + + + +
+ +
+
+ + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/$_.event.html b/docs/symbols/$_.event.html new file mode 100644 index 0000000..b1e6f71 --- /dev/null +++ b/docs/symbols/$_.event.html @@ -0,0 +1,461 @@ + + + + + + + JsDoc Reference - $_.event + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Namespace $_.event +

+ + + +
+

+
+ +

Defined in: event.js.

+ + + + + + + + + + + + +
+
Method Summary
+
+ +
+ + add(string, function) + Adds an event that returns a callback when triggered on the selected event and selector +
+ +
+ + remove(string, string) + Removes an event bound the the specified selector, event type, and callback +
+ +
+ + live(string, string, function) + Binds a persistent, delegated event +
+ +
+ + delegate(string, string) + Binds an event to a parent object +
+ +
+
+ + + + + + + + + + + +
+
+ Method Detail +
+
+ + +
+ +
+ $_.event.add(string, function) + +
+
+ Adds an event that returns a callback when triggered on the selected +event and selector + + + + +
Eg. $_("#selector").event.add("click", do_something());
+ +
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + event +
+ + + function + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.event.remove(string, string) + +
+
+ Removes an event bound the the specified selector, event type, and callback + + + + +
Eg. $_("#selector").event.remove("click", do_something());
+ +
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + event +
+ + + string + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.event.live(string, string, function) + +
+
+ Binds a persistent, delegated event + + + + +
Eg. $_.event.live(".button", "click", do_something());
+ +
+ + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + +
+ + + string + + target +
+ + + string + + event +
+ + + function + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.event.delegate(string, string) + +
+
+ Binds an event to a parent object + + + + +
Eg. $_("#parent").delegate(".button", "click", do_something());
+ +
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + target +
+ + + string + + event_type +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ +
+
+ + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/$_.html b/docs/symbols/$_.html new file mode 100644 index 0000000..c1f2b20 --- /dev/null +++ b/docs/symbols/$_.html @@ -0,0 +1,775 @@ + + + + + + + JsDoc Reference - $_ + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_
$(string, string)
ext(string, object)
each(function)
type(mixed)
get(string, object, function)
post(string, object, function)
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Namespace $_ +

+ + + +
+

+
+ +

Defined in: core.js.

+ + + + + + + + + +
+
Field Summary
+
+ +
+ + dom + DOM Dom manipulation module +
+ +
+ + store + Wrapper for localstorage data serialization +
+ +
+ + util + String and object manipulation utilities +
+ +
+ + event + +
+ +
+
+ + + + + + + +
+
Method Summary
+
+ +
+ + $(string, string) + $ Simple DOM selector function +
+ +
+ + ext(string, object) + Adds the property `obj` to the $_ object, calling it `name` +
+ +
+ + each(function) + Iterates over a $_ object, applying a callback to each item +
+ +
+ + type(mixed) + Retrieves the type of the passed variable +
+ +
+ + get(string, object, function) + Sends a GET type ajax request +
+ +
+ + post(string, object, function) + Sends a POST type ajax request +
+ +
+
+ + + + + + + + +
+
+ Field Detail +
+
+ +
+ +
+ $_.dom + +
+ +
+ DOM + +Dom manipulation module + +

Defined in: DOM.js.

+ + +
+ + +

+									
+								
+									
+										
+										
+										
+										
+				
+								
+ +
+ +
+ $_.store + +
+ +
+ Wrapper for localstorage data serialization + +

Defined in: store.js.

+ + +
+ + +

+									
+								
+									
+										
+										
+										
+										
+				
+								
+ +
+ +
+ $_.util + +
+ +
+ String and object manipulation utilities + +

Defined in: util.js.

+ + +
+ + +

+									
+								
+									
+										
+										
+										
+										
+				
+								
+ +
+ +
+ $_.event + +
+ +
+ + +

Defined in: event.js.

+ + +
+ + +

+									
+								
+									
+										
+										
+										
+										
+				
+								
+ +
+
+ + + + +
+
+ Method Detail +
+
+ + +
+ +
+ $_.$(string, string) + : object +
+
+ $ + +Simple DOM selector function + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + selector +
+ + + string + + context +
+ + + + + +
Returns:
+ + + + + + + +
+ + + object +
+ + + + +
+ + +
+ +
+ $_.ext(string, object) + +
+
+ Adds the property `obj` to the $_ object, calling it `name` + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + name +
+ + + object + + obj +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.each(function) + +
+
+ Iterates over a $_ object, applying a callback to each item + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + function + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.type(mixed) + : string +
+
+ Retrieves the type of the passed variable + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + mixed + + obj +
+ + + + + +
Returns:
+ + + + + + + +
+ + + string +
+ + + + +
+ + +
+ +
+ $_.get(string, object, function) + +
+
+ Sends a GET type ajax request + +

Defined in: ajax.js.

+ + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + +
+ + + string + + url +
+ + + object + + data +
+ + + function + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.post(string, object, function) + +
+
+ Sends a POST type ajax request + +

Defined in: ajax.js.

+ + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + +
+ + + string + + url +
+ + + object + + data +
+ + + function + + callback +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ +
+
+ + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:50:02 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/$_.store.html b/docs/symbols/$_.store.html new file mode 100644 index 0000000..b7cc2f9 --- /dev/null +++ b/docs/symbols/$_.store.html @@ -0,0 +1,348 @@ + + + + + + + JsDoc Reference - $_.store + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Namespace $_.store +

+ + + +
+

+
+ +

Defined in: store.js.

+ + + + + + + + + + + + +
+
Method Summary
+
+ +
+ + get(string) + Retrieves and deserializes a value from localstorage, based on the specified key +
+ +
+ + set(string, mixed) + Puts a value into localstorage at the specified key, and JSON-encodes the value if not a string +
+ +
+ + remove(string) + Removes the specified item from localstorage +
+ +
+
+ + + + + + + + + + + +
+
+ Method Detail +
+
+ + +
+ +
+ $_.store.get(string) + +
+
+ Retrieves and deserializes a value from localstorage, +based on the specified key + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string + + key +
+ + + + + +
Returns:
+ + + + + + + +
+ + + object +
+ + + + +
+ + +
+ +
+ $_.store.set(string, mixed) + +
+
+ Puts a value into localstorage at the specified key, +and JSON-encodes the value if not a string + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + key +
+ + + mixed + + value +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ + +
+ +
+ $_.store.remove(string) + +
+
+ Removes the specified item from localstorage + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string + + key +
+ + + + + +
Returns:
+ + + + + + + +
+ + + void +
+ + + + +
+ +
+
+ + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/$_.util.html b/docs/symbols/$_.util.html new file mode 100644 index 0000000..de2de00 --- /dev/null +++ b/docs/symbols/$_.util.html @@ -0,0 +1,668 @@ + + + + + + + JsDoc Reference - $_.util + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Namespace $_.util +

+ + + +
+

+
+ +

Defined in: util.js.

+ + + + + + + + + + + + +
+
Method Summary
+
+ +
+ + text(string) + Sets or retrieves the text content of the element specified by the current selector. +
+ +
+ + css(string, string) + Sets or retrieves a css property of the element specified by the current selector. +
+ +
+ + object_keys(object) + Retrieve the keys, or member names of an object +
+ +
+ + object_values(object) + Retrieves the values of an object, and returns them as an array +
+ +
+ + array_combine(array/object, array/object) + Creates an object, with the property names of the first array, and the values of the second. +
+ +
+ + object_merge(object) + Combines two or more objects/arrays. +
+ +
+ + str_trans(string, mixed, string) + Replaces sections of strings in a greedy fashion, starting with the longest replace pairs first. +
+ +
+
+ + + + + + + + + + + +
+
+ Method Detail +
+
+ + +
+ +
+ $_.util.text(string) + : string +
+
+ Sets or retrieves the text content of the element +specified by the current selector. If a value is +passed, it will set that value on the current element, +otherwise it will return the value of the current element + +

Defined in: DOM.js.

+ + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + string?, Default: + + value +
+ + + + + +
Returns:
+ + + + + + + +
+ + + string +
+ + + + +
+ + +
+ +
+ $_.util.css(string, string) + : string +
+
+ Sets or retrieves a css property of the element +specified by the current selector. If a value is +passed, it will set that value on the current element, +otherwise it will return the value of the css property +on the current element + +

Defined in: DOM.js.

+ + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + string + + property +
+ + + string?, Default: + + value +
+ + + + + +
Returns:
+ + + + + + + +
+ + + string +
+ + + + +
+ + +
+ +
+ $_.util.object_keys(object) + : array +
+
+ Retrieve the keys, or member names of an object + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + object + + +
+ + + + + +
Returns:
+ + + + + + + +
+ + + array +
+ + + + +
+ + +
+ +
+ $_.util.object_values(object) + : array +
+
+ Retrieves the values of an object, and returns +them as an array + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + object + + +
+ + + + + +
Returns:
+ + + + + + + +
+ + + array +
+ + + + +
+ + +
+ +
+ $_.util.array_combine(array/object, array/object) + : object +
+
+ Creates an object, with the property names of the first array, +and the values of the second. If objects are passed, the values +of the object are used. If the arrays or objects passed are +not the same size, the function will return false. + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + +
+ + + array/object + + keys +
+ + + array/object + + vals +
+ + + + + +
Returns:
+ + + + + + + +
+ + + object +
+ + + + +
+ + +
+ +
+ $_.util.object_merge(object) + : object +
+
+ Combines two or more objects/arrays. If the keys are numeric, the outputted +object will have re-indexed keys. If a key/value pair exists in both objects, +indentical values will be droped, but if a key exists with a different value, +with the same key, the value in the second array will replace the value in the +first + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + +
+ + + object + + [as many as you wish to combine] +
+ + + + + +
Returns:
+ + + + + + + +
+ + + object +
+ + + + +
+ + +
+ +
+ $_.util.str_trans(string, mixed, string) + : string +
+
+ Replaces sections of strings in a greedy fashion, +starting with the longest replace pairs first. Accepts +one replace pair as two parameters, or an object, with +from => to replacements as key/value pairs + + + + +

+										
+									
+ + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + +
+ + + string + + input_string +
+ + + mixed + + +
+ + + string?, Default: + + to +
+ + + + + +
Returns:
+ + + + + + + +
+ + + string +
+ + + + +
+ +
+
+ + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/_global_.html b/docs/symbols/_global_.html new file mode 100644 index 0000000..a3528c5 --- /dev/null +++ b/docs/symbols/_global_.html @@ -0,0 +1,115 @@ + + + + + + + JsDoc Reference - _global_ + + + + + + + + + +
+
+ +
+
+
+
 
+
Project Outline
+
+ + +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ + + +
+ Framework jProton +
+ + + +
+ +

+ Built-In Namespace _global_ +

+ + + +
+

+
+ + + + + + + + + + + + + + + + + + + + +
+ + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+ +
+
+ + + diff --git a/docs/symbols/src/kis-js_src_core_core.js.html b/docs/symbols/src/kis-js_src_core_core.js.html new file mode 100755 index 0000000..48d4af8 --- /dev/null +++ b/docs/symbols/src/kis-js_src_core_core.js.html @@ -0,0 +1,236 @@ +
  1 /**
+  2 	Kis JS		Keep It Simple JS Library
+  3 	Copyright	Timothy J. Warren
+  4 	License		Public Domain
+  5 	Version		0.5.0-pre
+  6  */
+  7 (function (){
+  8 
+  9 	"use strict";
+ 10 
+ 11 	//Browser requirements check
+ 12 	if (!document.querySelectorAll)
+ 13 	{
+ 14 		return;
+ 15 	}
+ 16 
+ 17 	var $_, $, dcopy, sel, sel_string;
+ 18 	
+ 19 
+ 20 	/**
+ 21 	 * $_
+ 22 	 *
+ 23 	 * Constructor function
+ 24 	 *
+ 25 	 * @constuctor
+ 26 	 * @namespace
+ 27 	 * @param string selector
+ 28 	 * @return object
+ 29 	 */
+ 30 	$_ = function(s)
+ 31 	{
+ 32 		//Have documentElement be default selector, just in case
+ 33 		if(typeof s === "undefined")
+ 34 		{
+ 35 			//Defines a "global" selector for that instance
+ 36 			sel = (typeof $_.el !== "undefined") 
+ 37 				? $_.el
+ 38 				: document.documentElement;
+ 39 		}
+ 40 		else
+ 41 		{
+ 42 			sel = (typeof s !== "object") ? $(s) : s;
+ 43 		}
+ 44 		
+ 45 		// Add the selector to the prototype
+ 46 		$_.prototype.el = sel;
+ 47 
+ 48 		// Make a copy before adding properties
+ 49 		var self = dcopy($_);
+ 50 
+ 51 		// Give sel to each extension.
+ 52 		for(var i in self) 
+ 53 		{
+ 54 			if(typeof self[i] === "object")
+ 55 			{
+ 56 				self[i].el = sel;
+ 57 			}	
+ 58 		}
+ 59 
+ 60 		self.el = sel;
+ 61 	
+ 62 		return self;
+ 63 	};
+ 64 	
+ 65 	/**
+ 66 	 * $
+ 67 	 *
+ 68 	 * Simple DOM selector function
+ 69 	 *
+ 70 	 * @memberOf $_
+ 71 	 * @param string selector
+ 72 	 * @param string context
+ 73 	 * @return object
+ 74 	 * @type object
+ 75 	 */
+ 76 	$ = function (a, context)
+ 77 	{
+ 78 		var x, c;
+ 79 		
+ 80 		if (typeof a != "string" || typeof a === "undefined"){ return a;}
+ 81 		
+ 82 		//Check for a context of a specific element, otherwise, just run on the document
+ 83 		c  = (context != null && context.nodeType === 1) 
+ 84 			? context 
+ 85 			: document;
+ 86 		
+ 87 		//Pick the quickest method for each kind of selector
+ 88 		if (a.match(/^#([\w\-]+$)/))
+ 89 		{
+ 90 			return document.getElementById(a.split('#')[1]);
+ 91 		}
+ 92 		else
+ 93 		{
+ 94 			x = c.querySelectorAll(a);
+ 95 		}
+ 96 		
+ 97 		//Return the single object if applicable
+ 98 		return (x.length === 1) ? x[0] : x;
+ 99 	};
+100 	
+101 	/**
+102 	 * Deep copy/prototypical constructor function
+103 	 *
+104 	 * @param object obj
+105 	 * @private
+106 	 * @return object
+107 	 * @type object
+108 	 */
+109 	dcopy = function(obj)
+110 	{
+111 		var type, F;
+112 		
+113 		if(typeof obj === "undefined")
+114 		{
+115 			return;
+116 		}
+117 		
+118 		if(typeof Object.create !== "undefined")
+119 		{
+120 			return Object.create(obj);
+121 		}
+122 		
+123 		type = typeof obj;
+124 		
+125 		if(type !== "object" && type !== "function")
+126 		{
+127 			return;
+128 		}
+129 		
+130 		/**
+131 		 * @private
+132 		 */
+133 		F = function(){};
+134 		
+135 		F.prototype = obj;
+136 		
+137 		return new F();
+138 		
+139 	};
+140 	
+141 	/**
+142 	 * Adds the property `obj` to the $_ object, calling it `name`
+143 	 * 
+144 	 * @param string name
+145 	 * @param object obj
+146 	 * @return void
+147 	 */
+148 	$_.ext = function(name, obj)
+149 	{
+150 		obj.el = sel;
+151 		$_[name] = obj;
+152 	};
+153 	
+154 	/**
+155 	 * Iterates over a $_ object, applying a callback to each item
+156 	 *
+157 	 * @name $_.each
+158 	 * @function
+159 	 * @param function callback
+160 	 * @return void
+161 	 */
+162 	$_.ext('each', function (callback)
+163 	{
+164 		if(typeof sel.length !== "undefined" && sel !== window)
+165 		{
+166 			var len = sel.length;
+167 
+168 			if (len === 0)
+169 			{
+170 				return;
+171 			}
+172 
+173 			var selx;
+174 			for (var x = 0; x < len; x++)
+175 			{
+176 				selx = (sel.item(x)) ? sel.item(x) : sel[x];
+177 				callback(selx);
+178 			}
+179 		}
+180 		else
+181 		{
+182 			callback(sel);
+183 		}
+184 	});
+185 	
+186 	/**
+187 	 * Retrieves the type of the passed variable
+188 	 *
+189 	 * @param mixed obj
+190 	 * @return string
+191 	 * @type string
+192 	 */
+193 	$_.type = function(obj) 
+194 	{
+195 		if((function() {return obj && (obj !== this)}).call(obj))
+196 		{
+197 			//fallback on 'typeof' for truthy primitive values
+198 			return (typeof obj).toLowerCase();
+199 		}
+200 		
+201 		return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
+202 	};
+203 
+204 	//Set global variables
+205 	$_ = window.$_ = window.$_ || $_;
+206 	$_.$ = $;
+207 	
+208 	//console.log polyfill
+209 	if(typeof window.console === "undefined")
+210 	{
+211 		window.console = {
+212 			log:function(){}
+213 		};
+214 	}
+215 	
+216 	/**
+217 	 * String trim function polyfill
+218 	 */
+219 	if(typeof String.prototype.trim === "undefined")
+220 	{
+221 		/**
+222 		 * @private
+223 		 */
+224 		String.prototype.trim = function(){
+225 			return this.replace(/^\s+|\s+$/g, "");
+226 		};
+227 	}
+228 	
+229 }());
\ No newline at end of file diff --git a/docs/symbols/src/kis-js_src_modules_DOM.js.html b/docs/symbols/src/kis-js_src_modules_DOM.js.html new file mode 100755 index 0000000..43e8928 --- /dev/null +++ b/docs/symbols/src/kis-js_src_modules_DOM.js.html @@ -0,0 +1,485 @@ +
  1 /*
+  2  * classList.js: Cross-browser full element.classList implementation.
+  3  * 2011-06-15
+  4  *
+  5  * By Eli Grey, http://eligrey.com
+  6  * Public Domain.
+  7  * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+  8  */
+  9 
+ 10 if (typeof document !== "undefined" && !("classList" in document.createElement("a")))
+ 11 {
+ 12 	(function (view){
+ 13 	
+ 14 		var classListProp = "classList",
+ 15 			protoProp = "prototype",
+ 16 			elemCtrProto = (view.HTMLElement || view.Element)[protoProp],
+ 17 			objCtr = Object,
+ 18 			strTrim = String[protoProp].trim ||
+ 19 			function ()
+ 20 			{
+ 21 				return this.replace(/^\s+|\s+$/g, "");
+ 22 			},
+ 23 			arrIndexOf = Array[protoProp].indexOf ||
+ 24 			function (item)
+ 25 			{
+ 26 				var
+ 27 				i = 0,
+ 28 					len = this.length;
+ 29 				for (; i < len; i++)
+ 30 				{
+ 31 					if (i in this && this[i] === item)
+ 32 					{
+ 33 						return i;
+ 34 					}
+ 35 				}
+ 36 				return -1;
+ 37 			}
+ 38 			// Vendors: please allow content code to instantiate DOMExceptions
+ 39 			,
+ 40 			/**
+ 41 			 * @private
+ 42 			 */
+ 43 			DOMEx = function (type, message)
+ 44 			{
+ 45 				this.name = type;
+ 46 				this.code = DOMException[type];
+ 47 				this.message = message;
+ 48 			},
+ 49 			/**
+ 50 			 * @private
+ 51 			 */
+ 52 			checkTokenAndGetIndex = function (classList, token)
+ 53 			{
+ 54 				if (token === "")
+ 55 				{
+ 56 					throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
+ 57 				}
+ 58 				if (/\s/.test(token))
+ 59 				{
+ 60 					throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
+ 61 				}
+ 62 				return arrIndexOf.call(classList, token);
+ 63 			},
+ 64 			/**
+ 65 			 * @private
+ 66 			 */
+ 67 			ClassList = function (elem)
+ 68 			{
+ 69 				var
+ 70 				trimmedClasses = strTrim.call(elem.className),
+ 71 					classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
+ 72 					i = 0,
+ 73 					len = classes.length;
+ 74 				for (; i < len; i++)
+ 75 				{
+ 76 					this.push(classes[i]);
+ 77 				}
+ 78 				this._updateClassName = function ()
+ 79 				{
+ 80 					elem.className = this.toString();
+ 81 				};
+ 82 			},
+ 83 			classListProto = ClassList[protoProp] = [],
+ 84 			/**
+ 85 			 * @private
+ 86 			 */
+ 87 			classListGetter = function ()
+ 88 			{
+ 89 				return new ClassList(this);
+ 90 			};
+ 91 		// Most DOMException implementations don't allow calling DOMException's toString()
+ 92 		// on non-DOMExceptions. Error's toString() is sufficient here.
+ 93 		DOMEx[protoProp] = Error[protoProp];
+ 94 		classListProto.item = function (i)
+ 95 		{
+ 96 			return this[i] || null;
+ 97 		};
+ 98 		classListProto.contains = function (token)
+ 99 		{
+100 			token += "";
+101 			return checkTokenAndGetIndex(this, token) !== -1;
+102 		};
+103 		classListProto.add = function (token)
+104 		{
+105 			token += "";
+106 			if (checkTokenAndGetIndex(this, token) === -1)
+107 			{
+108 				this.push(token);
+109 				this._updateClassName();
+110 			}
+111 		};
+112 		classListProto.remove = function (token)
+113 		{
+114 			token += "";
+115 			var index = checkTokenAndGetIndex(this, token);
+116 			if (index !== -1)
+117 			{
+118 				this.splice(index, 1);
+119 				this._updateClassName();
+120 			}
+121 		};
+122 		classListProto.toggle = function (token)
+123 		{
+124 			token += "";
+125 			if (checkTokenAndGetIndex(this, token) === -1)
+126 			{
+127 				this.add(token);
+128 			}
+129 			else
+130 			{
+131 				this.remove(token);
+132 			}
+133 		};
+134 		classListProto.toString = function ()
+135 		{
+136 			return this.join(" ");
+137 		};
+138 
+139 		if (objCtr.defineProperty)
+140 		{
+141 			var classListPropDesc = {
+142 				get: classListGetter,
+143 				enumerable: true,
+144 				configurable: true
+145 			};
+146 			try
+147 			{
+148 				objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
+149 			}
+150 			catch (ex)
+151 			{ // IE 8 doesn't support enumerable:true
+152 				if (ex.number === -0x7FF5EC54)
+153 				{
+154 					classListPropDesc.enumerable = false;
+155 					objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
+156 				}
+157 			}
+158 		}
+159 		else if (objCtr[protoProp].__defineGetter__)
+160 		{
+161 			elemCtrProto.__defineGetter__(classListProp, classListGetter);
+162 		}
+163 
+164 	}(self));
+165 }
+166 
+167 // --------------------------------------------------------------------------
+168 
+169 (function (){
+170 	var d, tag_reg, class_reg;
+171 	
+172 	tag_reg = /^([\w\-]+)$/;
+173 	class_reg = /\.([\w\-]+)$/;
+174 	
+175 	
+176 	//Private function for getting/setting attributes
+177 	function _attr(sel, name, value)
+178 	{
+179 		var oldVal, doAttr;
+180 
+181 		//Get the value of the attribute, if it exists
+182 		if (typeof sel.hasAttribute !== "undefined")
+183 		{
+184 			if (sel.hasAttribute(name))
+185 			{
+186 				oldVal = sel.getAttribute(name);
+187 			}
+188 
+189 			doAttr = true;
+190 		}
+191 		else if (typeof sel[name] !== "undefined")
+192 		{
+193 			oldVal = sel[name];
+194 			doAttr = false;
+195 		}
+196 		else if (name === "class" && typeof sel.className !== "undefined") //className attribute
+197 		{
+198 			name = "className";
+199 			oldVal = sel.className;
+200 			doAttr = false;
+201 		}
+202 
+203 		//Well, I guess that attribute doesn't exist
+204 		if (typeof oldVal === "undefined" && (typeof value === "undefined" || value === null))
+205 		{
+206 			console.log(value);
+207 			console.log(sel);
+208 			console.log("Element does not have the selected attribute");
+209 			return;
+210 		}
+211 
+212 		//No value to set? Return the current value
+213 		if (typeof value === "undefined")
+214 		{
+215 			return oldVal;
+216 		}
+217 
+218 		//Determine what to do with the attribute
+219 		if (typeof value !== "undefined" && value !== null)
+220 		{
+221 			if(doAttr === true)
+222 			{
+223 				sel.setAttribute(name, value);
+224 			}
+225 			else
+226 			{
+227 				sel[name] = value;
+228 			} 
+229 		}
+230 		else if (value === null)
+231 		{
+232 			if(doAttr === true)
+233 			{
+234 				sel.removeAttribute(name);
+235 			}
+236 			else
+237 			{
+238 				delete sel[name];
+239 			} 
+240 		}
+241 
+242 		return (typeof value !== "undefined") ? value : oldVal;
+243 	}
+244 	
+245 	function _toCamel(s)
+246 	{
+247 		return s.replace(/(\-[a-z])/g, function($1){
+248 			return $1.toUpperCase().replace('-','');
+249 		});
+250 	}
+251 
+252 	function _css(sel, prop, val)
+253 	{
+254 		var equi;
+255 		
+256 		//Camel-case
+257 		prop = _toCamel(prop);
+258 
+259 		//Equivalent properties for 'special' browsers
+260 		equi = {
+261 			outerHeight: "offsetHeight",
+262 			outerWidth: "offsetWidth",
+263 			top: "posTop"
+264 		};
+265 		
+266 		
+267 		//If you don't define a value, try returning the existing value
+268 		if(typeof val === "undefined" && sel.style[prop] !== "undefined")
+269 		{
+270 			return sel.style[prop];
+271 		}
+272 		else if(typeof val === "undefined" && sel.style[equi[prop]] !== "undefined")
+273 		{
+274 			return sel.style[equi[prop]];
+275 		}
+276 
+277 		//Let's try the easy way first
+278 		if(typeof sel.style[prop] !== "undefined")
+279 		{
+280 			sel.style[prop] = val;
+281 
+282 			//Short circuit
+283 			return;
+284 		}
+285 		else if(sel.style[equi[prop]])
+286 		{
+287 			sel.style[equi[prop]] = val;
+288 			return;
+289 		}
+290 		
+291 		//No matches? Well, lets log it for now
+292 		console.log("Property " + prop + " nor an equivalent seems to exist");
+293 	}
+294 	
+295 	// --------------------------------------------------------------------------
+296 
+297 	/**
+298 	 * DOM
+299 	 * 
+300 	 * Dom manipulation module
+301 	 * @namespace
+302 	 * @memberOf $_
+303 	 * @name dom
+304 	 */
+305 	d = {
+306 		/**
+307 		 * Adds a class to the element(s) specified by the current
+308 		 * selector
+309 		 * 
+310 		 * @name addClass
+311 		 * @memberOf $_.dom
+312 		 * @function
+313 		 * @param string class
+314 		 * @return void
+315 		 */
+316 		addClass: function (c)
+317 		{
+318 			$_.each(function (e){
+319 				e.classList.add(c);
+320 			});
+321 		},
+322 		/**
+323 		 * Removes a class from the element(s) specified by the current
+324 		 * selector
+325 		 * 
+326 		 * @name removeClass
+327 		 * @memberOf $_.dom
+328 		 * @function
+329 		 * @param string class
+330 		 * @return void
+331 		 */
+332 		removeClass: function (c)
+333 		{
+334 			$_.each(function (e){
+335 				e.classList.remove(c);
+336 			});
+337 		},
+338 		/**
+339 		 * Hides the element(s) specified by the current selector
+340 		 * 
+341 		 * @name hide
+342 		 * @memberOf $_.dom
+343 		 * @function
+344 		 * @return void
+345 		 */
+346 		hide: function ()
+347 		{
+348 			this.css('display', 'none');
+349 		},
+350 		/**
+351 		 * Shows the element(s) specified by the current selector. 
+352 		 * if type is specified, the element will have it's style
+353 		 * property set to "display:[your type]". If type is not
+354 		 * specified, the element is set to "display:block".
+355 		 * 
+356 		 * @name  show
+357 		 * @memberOf $_.dom
+358 		 * @function
+359 		 * @param [string] type
+360 		 * @return void
+361 		 */
+362 		show: function (type)
+363 		{
+364 			if (typeof type === "undefined")
+365 			{
+366 				type = "block";
+367 			}
+368 
+369 			this.css("display", type);
+370 		},
+371 		/**
+372 		 * Sets attributes on element(s) specified by the current 
+373 		 * selector, or, if name is not specified, returns the 
+374 		 * value of the attribute of the element specified by the
+375 		 * current selector.
+376 		 *
+377 		 * @name attr
+378 		 * @memberOf $_.dom
+379 		 * @function
+380 		 * @param string name
+381 		 * @param string value
+382 		 * @return string
+383 		 * @type string
+384 		 */
+385 		attr: function (name, value)
+386 		{
+387 			var sel = this.el;
+388 
+389 			//Make sure you don't try to get a bunch of elements
+390 			if (sel.length > 1 && typeof value === "undefined")
+391 			{
+392 				console.log(sel);
+393 				console.log("Must be a singular element");
+394 				return;
+395 			}
+396 			else if (sel.length > 1 && typeof value !== "undefined") //You can set a bunch, though
+397 			{
+398 				$_.each(function (e){
+399 					return _attr(e, name, value);
+400 				});
+401 			}
+402 			else //Normal behavior
+403 			{
+404 				return _attr(sel, name, value);
+405 			}
+406 		},
+407 		/**
+408 		 * Sets or retrieves the text content of the element
+409 		 * specified by the current selector. If a value is 
+410 		 * passed, it will set that value on the current element,
+411 		 * otherwise it will return the value of the current element
+412 		 *
+413 		 * @name text
+414 		 * @memberOf $_.util
+415 		 * @function
+416 		 * @param [string] value
+417 		 * @returns string
+418 		 * @type string
+419 		 */
+420 		text: function (value)
+421 		{
+422 			var oldValue, set, type, sel;
+423 		
+424 			sel = this.el;
+425 			
+426 			set = (typeof value !== "undefined") ? true : false;
+427 			
+428 			type = (typeof sel.innerText !== "undefined")
+429 				? "innerText"
+430 				: (typeof sel.textContent !== "undefined")
+431 					? "textContent"
+432 					: "innerHTML";
+433 
+434 			oldValue = sel[type];
+435 			
+436 			if(set)
+437 			{
+438 				sel[type] = value;
+439 				return value;
+440 			}
+441 			else
+442 			{
+443 				return oldValue;
+444 			}
+445 		},
+446 		/**
+447 		 * Sets or retrieves a css property of the element
+448 		 * specified by the current selector. If a value is 
+449 		 * passed, it will set that value on the current element,
+450 		 * otherwise it will return the value of the css property
+451 		 * on the current element
+452 		 *
+453 		 * @name css
+454 		 * @memberOf $_.util
+455 		 * @function
+456 		 * @param string property
+457 		 * @param [string] value
+458 		 * @returns string
+459 		 * @type string
+460 		 */
+461 		css: function (prop, val)
+462 		{
+463 			//Return the current value if a value is not set
+464 			if(typeof val === "undefined")
+465 			{
+466 				return _css(this.el, prop);
+467 			}
+468 		
+469 			$_.each(function (e){
+470 				_css(e, prop, val);
+471 			});
+472 		}
+473 	};
+474 
+475 	$_.ext('dom', d);
+476 	
+477 }());
+478 
\ No newline at end of file diff --git a/docs/symbols/src/kis-js_src_modules_ajax.js.html b/docs/symbols/src/kis-js_src_modules_ajax.js.html new file mode 100755 index 0000000..957a9d8 --- /dev/null +++ b/docs/symbols/src/kis-js_src_modules_ajax.js.html @@ -0,0 +1,110 @@ +
  1 /**
+  2  * Ajax
+  3  *
+  4  * Module for making ajax requests
+  5  */
+  6 (function (){
+  7 
+  8 	var ajax = {
+  9 		_do: function (url, data, callback, isPost)
+ 10 		{
+ 11 			if (typeof callback === "undefined")
+ 12 			{
+ 13 				/**
+ 14 				 * @private
+ 15 				 */
+ 16 				callback = function (){};
+ 17 			}
+ 18 
+ 19 			var request = (typeof window.XMLHttpRequest !== "undefined") 
+ 20 				? new XMLHttpRequest() 
+ 21 				: false;
+ 22 
+ 23 			var type = (isPost) ? "POST" : "GET";
+ 24 
+ 25 			url += (type === "GET") ? "?"+this._serialize(data) : '';
+ 26 			
+ 27 			request.open(type, url);
+ 28 
+ 29 			request.onreadystatechange = function ()
+ 30 			{
+ 31 				if (request.readyState === 4)
+ 32 				{
+ 33 					callback(request.responseText);
+ 34 				}
+ 35 			};
+ 36 
+ 37 			if (type === "POST")
+ 38 			{
+ 39 				request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ 40 				request.send(this._serialize(data));
+ 41 			}
+ 42 			else
+ 43 			{
+ 44 				request.send(null);
+ 45 			}
+ 46 		},
+ 47 		_serialize: function (data)
+ 48 		{
+ 49 			var pairs = [];
+ 50 
+ 51 			for (var name in data)
+ 52 			{
+ 53 				if (!data.hasOwnProperty(name))
+ 54 				{
+ 55 					continue;
+ 56 				}
+ 57 				if (typeof data[name] === "function")
+ 58 				{
+ 59 					continue;
+ 60 				}
+ 61 
+ 62 				var value = data[name].toString();
+ 63 
+ 64 				name = encodeURIComponent(name);
+ 65 				value = encodeURIComponent(value);
+ 66 
+ 67 				pairs.push(name + "=" + value);
+ 68 			}
+ 69 
+ 70 			return pairs.join("&");
+ 71 		}
+ 72 	};
+ 73 
+ 74 	/**
+ 75 	 * Sends a GET type ajax request
+ 76 	 * 
+ 77 	 * @name get
+ 78 	 * @function
+ 79 	 * @memberOf $_
+ 80 	 * @param string url
+ 81 	 * @param object data
+ 82 	 * @param function callback
+ 83 	 * @return void
+ 84 	 */
+ 85 	$_.ext('get', function (url, data, callback){
+ 86 		ajax._do(url, data, callback, false);
+ 87 	});
+ 88 	
+ 89 	/**
+ 90 	 * Sends a POST type ajax request
+ 91 	 * 
+ 92 	 * @name post
+ 93 	 * @function
+ 94 	 * @memberOf $_
+ 95 	 * @param string url
+ 96 	 * @param object data
+ 97 	 * @param function callback
+ 98 	 * @return void
+ 99 	 */
+100 	$_.ext('post', function (url, data, callback){
+101 		ajax._do(url, data, callback, true);
+102 	});
+103 }());
\ No newline at end of file diff --git a/docs/symbols/src/kis-js_src_modules_event.js.html b/docs/symbols/src/kis-js_src_modules_event.js.html new file mode 100755 index 0000000..bbbba2e --- /dev/null +++ b/docs/symbols/src/kis-js_src_modules_event.js.html @@ -0,0 +1,263 @@ +
  1 /**
+  2  * Event
+  3  *
+  4  * Event api wrapper
+  5  */
+  6 (function (){
+  7 
+  8 	"use strict";
+  9 
+ 10 	// Property name for expandos on DOM objects
+ 11 	var kis_expando = "KIS_0_5_0";
+ 12 
+ 13 	var _attach, _remove, _add_remove, e, _attach_delegate;
+ 14 
+ 15 	// Define the proper _attach and _remove functions
+ 16 	// based on browser support
+ 17 	if(typeof document.addEventListener !== "undefined")
+ 18 	{
+ 19 		/**
+ 20 		 * @private
+ 21 		 */
+ 22 		_attach = function (sel, event, callback)
+ 23 		{
+ 24 			if(typeof sel.addEventListener !== "undefined")
+ 25 			{
+ 26 				//Duplicated events are dropped, per the specification
+ 27 				sel.addEventListener(event, callback, false);
+ 28 			}
+ 29 		};
+ 30 		/**
+ 31 		 * @private
+ 32 		 */
+ 33 		_remove = function (sel, event, callback)
+ 34 		{
+ 35 			if(typeof sel.removeEventListener !== "undefined")
+ 36 			{
+ 37 				sel.removeEventListener(event, callback, false);
+ 38 			}
+ 39 		};
+ 40 	}
+ 41 	//typeof function doesn't work in IE where _attachEvent is available: brute force it
+ 42 	else if(typeof document.attachEvent !== "undefined") 
+ 43 	{
+ 44 		/**
+ 45 		 * @private
+ 46 		 */
+ 47 		_attach = function (sel, event, callback)
+ 48 		{
+ 49 			function listener () {
+ 50 				// Internet Explorer fails to correctly set the 'this' object
+ 51 				// for event listeners, so we need to set it ourselves.
+ 52 				callback.apply(arguments[0]);
+ 53 			}
+ 54 			
+ 55 			if (typeof sel.attachEvent !== "undefined")
+ 56 			{
+ 57 				_remove(event, callback); // Make sure we don't have duplicate listeners
+ 58 				
+ 59 				sel.attachEvent("on" + event, listener);
+ 60 				// Store our listener so we can _remove it later
+ 61 				var expando = sel[kis_expando] = sel[kis_expando] || {};
+ 62 				expando.listeners = expando.listeners || {};
+ 63 				expando.listeners[event] = expando.listeners[event] || [];
+ 64 				expando.listeners[event].push({
+ 65 					callback: callback,
+ 66 					listener: listener
+ 67 				});
+ 68 			}
+ 69 			else
+ 70 			{
+ 71 				console.log("Failed to _attach event:"+event+" on "+sel);
+ 72 			}
+ 73 		};
+ 74 		/**
+ 75 		 * @private
+ 76 		 */
+ 77 		_remove = function (sel, event, callback)
+ 78 		{
+ 79 			if(typeof sel.detachEvent !== "undefined")
+ 80 			{
+ 81 				var expando = sel[kis_expando];
+ 82 				if (expando && expando.listeners
+ 83 						&& expando.listeners[event])
+ 84 				{
+ 85 					var listeners = expando.listeners[event];
+ 86 					var len = listeners.length;
+ 87 					for (var i=0; i<len; i++)
+ 88 					{
+ 89 						if (listeners[i].callback === callback)
+ 90 						{
+ 91 							sel.detachEvent("on" + event, listeners[i].listener);
+ 92 							listeners.splice(i, 1);
+ 93 							if(listeners.length === 0)
+ 94 							{
+ 95 								delete expando.listeners[event];
+ 96 							}
+ 97 							return;
+ 98 						}
+ 99 					}
+100 				}
+101 			}
+102 		};
+103 	}
+104 	
+105 	_add_remove = function (sel, event, callback, add)
+106 	{
+107 		var i, len;
+108 		
+109 		if(typeof sel === "undefined")
+110 		{
+111 			console.log(arguments);
+112 			console.log(event);
+113 			return false;
+114 		}
+115 
+116 		//Multiple events? Run recursively!
+117 		if (!event.match(/^([\w\-]+)$/))
+118 		{
+119 			event = event.split(" ");
+120 			
+121 			len = event.length;
+122 
+123 			for (i = 0; i < len; i++)
+124 			{
+125 				_add_remove(sel, event[i], callback, add);
+126 			}
+127 
+128 			return;
+129 		}
+130 
+131 		
+132 		if(add === true)
+133 		{
+134 			_attach(sel, event, callback);
+135 		}
+136 		else
+137 		{
+138 			_remove(sel, event, callback);
+139 		}
+140 	};
+141 
+142 	_attach_delegate = function(sel, target, event, callback)
+143 	{
+144 		//_attach the listener to the parent object
+145 		_add_remove(target, event, function(e){
+146 		
+147 			var i, t;
+148 			
+149 			//Get the live version of the target selector
+150 			t = $_.$(target);
+151 			
+152 			console.log(t);
+153 			
+154 			//Check each element to see if it matches the target
+155 			for(i in t)
+156 			{
+157 				if(t.hasOwnProperty(i))
+158 				{
+159 					//Fire target callback when event bubbles from target
+160 					if(e.target == i)
+161 					{
+162 						//Trigger the event callback
+163 						callback.call(i, e);
+164 						
+165 						//Stop event propegation
+166 						e.stopPropagation();
+167 					}
+168 				}
+169 			}
+170 			
+171 			
+172 		}, true);
+173 	};
+174 	
+175 	// --------------------------------------------------------------------------
+176 
+177 	/**
+178 	 * @namespace
+179 	 * @name event
+180 	 * @memberOf $_
+181 	 */
+182 	e = {
+183 		/**
+184 		 * Adds an event that returns a callback when triggered on the selected
+185 		 * event and selector
+186 		 * 
+187 		 * @memberOf $_.event
+188 		 * @name add
+189 		 * @function
+190 		 * @example Eg. $_("#selector").event.add("click", do_something());
+191 		 * @param string event
+192 		 * @param function callback
+193 		 * @return void
+194 		 */
+195 		add: function (event, callback)
+196 		{
+197 			$_.each(function(e){
+198 				_add_remove(e, event, callback, true);
+199 			});
+200 		},
+201 		/**
+202 		 * Removes an event bound the the specified selector, event type, and callback
+203 		 *
+204 		 * @memberOf $_.event
+205 		 * @name remove
+206 		 * @function
+207 		 * @example Eg. $_("#selector").event.remove("click", do_something());
+208 		 * @param string event
+209 		 * @param string callback
+210 		 * @return void
+211 		 */
+212 		remove: function (event, callback)
+213 		{
+214 			$_.each(function(e){
+215 				_add_remove(e, event, callback, false);
+216 			});
+217 		},
+218 		/** 
+219 		 * Binds a persistent, delegated event
+220 		 * 
+221 		 * @memberOf $_.event
+222 		 * @name live
+223 		 * @function
+224 		 * @example Eg. $_.event.live(".button", "click", do_something());
+225 		 * @param string target
+226 		 * @param string event
+227 		 * @param function callback
+228 		 * @return void
+229 		 */
+230 		live: function (target, event, callback)
+231 		{
+232 			_attach_delegate(document.documentElement, target, event, callback);
+233 		},
+234 		/** 
+235 		 * Binds an event to a parent object
+236 		 *
+237 		 * @memberOf $_.event
+238 		 * @name delegate
+239 		 * @function
+240 		 * @example Eg. $_("#parent").delegate(".button", "click", do_something());
+241 		 * @param string target
+242 		 * @param string event_type
+243 		 * @parma function callback
+244 		 * @return void
+245 		 */
+246 		delegate: function(target, event, callback)
+247 		{
+248 			$_.each(function(e){
+249 				_attach_delegate(e, target, event, callback);
+250 			});
+251 		}
+252 	};
+253 
+254 	$_.ext('event', e);
+255 
+256 }());
\ No newline at end of file diff --git a/docs/symbols/src/kis-js_src_modules_store.js.html b/docs/symbols/src/kis-js_src_modules_store.js.html new file mode 100755 index 0000000..8778919 --- /dev/null +++ b/docs/symbols/src/kis-js_src_modules_store.js.html @@ -0,0 +1,94 @@ +
  1 (function (){
+  2 	"use strict";
+  3 
+  4 	/**
+  5 	 * Wrapper for localstorage data serialization
+  6 	 *
+  7 	 * @name store
+  8 	 * @namespace
+  9 	 * @memberOf $_
+ 10 	 */
+ 11 	var store = {
+ 12 		/**
+ 13 		 * Retrieves and deserializes a value from localstorage, 
+ 14 		 * based on the specified key
+ 15 		 * 
+ 16 		 * @param string key
+ 17 		 * @name get
+ 18 		 * @memberOf $_.store
+ 19 		 * @function
+ 20 		 * @return object
+ 21 		 */
+ 22 		get: function (key)
+ 23 		{
+ 24 			return JSON.parse(localStorage.getItem(key));
+ 25 		},
+ 26 		/**
+ 27 		 * Puts a value into localstorage at the specified key,
+ 28 		 * and JSON-encodes the value if not a string
+ 29 		 *
+ 30 		 * @param string key
+ 31 		 * @param mixed value
+ 32 		 * @name set
+ 33 		 * @memberOf $_.store
+ 34 		 * @function
+ 35 		 * @return void
+ 36 		 */
+ 37 		set: function (key, value)
+ 38 		{
+ 39 			if (typeof value !== "string")
+ 40 			{
+ 41 				value = JSON.stringify(value);
+ 42 			}
+ 43 			localStorage.setItem(key, value);
+ 44 		},
+ 45 		/**
+ 46 		 * Removes the specified item from localstorage
+ 47 		 * 
+ 48 		 * @param string key
+ 49 		 * @name remove
+ 50 		 * @memberOf $_.store
+ 51 		 * @function
+ 52 		 * @return void 
+ 53 		 */
+ 54 		remove: function (key)
+ 55 		{
+ 56 			localStorage.removeItem(key);
+ 57 		},
+ 58 		/**
+ 59 		 * Returns an array of all the values in localstorage
+ 60 		 * in their raw form
+ 61 		 * 
+ 62 		 * @name getAll
+ 63 		 * @member of $_.store
+ 64 		 * @function
+ 65 		 * @return object
+ 66 		 */
+ 67 		getAll: function ()
+ 68 		{
+ 69 			var i,
+ 70 				len,
+ 71 				data;
+ 72 			len = localStorage.length;
+ 73 			data = {};
+ 74 
+ 75 			for (i = 0; i < len; i++)
+ 76 			{
+ 77 				var name = localStorage.key(i);
+ 78 				var value = localStorage.getItem(name);
+ 79 				data[name] = value;
+ 80 			}
+ 81 
+ 82 			return data;
+ 83 		}
+ 84 	};
+ 85 
+ 86 	$_.ext('store', store);
+ 87 }());
\ No newline at end of file diff --git a/docs/symbols/src/kis-js_src_modules_util.js.html b/docs/symbols/src/kis-js_src_modules_util.js.html new file mode 100755 index 0000000..4a18275 --- /dev/null +++ b/docs/symbols/src/kis-js_src_modules_util.js.html @@ -0,0 +1,369 @@ +
  1 /**
+  2  * Util Object
+  3  * 
+  4  * Various object and string manipulation functions
+  5  * Note: these are based on similar phpjs functions: http://phpjs.org
+  6  */
+  7 (function(){
+  8 
+  9 	"use strict";
+ 10 
+ 11 	var 
+ 12 	reverse_key_sort =  function(o)
+ 13 	{
+ 14 		//Define some variables
+ 15 		var keys = [],
+ 16 			num_keys = 0,
+ 17 			new_o = {},
+ 18 			i;
+ 19 	
+ 20 		//Extract the keys
+ 21 		keys = u.object_keys(o);
+ 22 		
+ 23 		//Sort the keys
+ 24 		keys.sort(function (b, a) {		
+ 25 			var aFloat = parseFloat(a),
+ 26 				bFloat = parseFloat(b),
+ 27 				aNumeric = aFloat + '' === a,
+ 28 				bNumeric = bFloat + '' === b;
+ 29             
+ 30 			if (aNumeric && bNumeric) 
+ 31 			{
+ 32 				return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
+ 33 			} 
+ 34 			else if (aNumeric && !bNumeric) 
+ 35 			{
+ 36 				return 1;
+ 37 			} 
+ 38 			else if (!aNumeric && bNumeric) 
+ 39 			{
+ 40 				return -1;
+ 41 			}
+ 42 			
+ 43 			return a > b ? 1 : a < b ? -1 : 0;
+ 44 		});
+ 45 		
+ 46 		//cache object/array size
+ 47 		num_keys = keys.length;
+ 48 		
+ 49 		//Recreate the object/array
+ 50 		for(i=0; i < num_keys; i++)
+ 51 		{
+ 52 			new_o[keys[i]] = o[keys[i]];
+ 53 		}
+ 54 		
+ 55 		return new_o;
+ 56 	},
+ 57 	
+ 58 	/**
+ 59 	 * String and object manipulation utilities
+ 60 	 *	
+ 61 	 * @namespace
+ 62 	 * @name util
+ 63 	 * @memberOf $_
+ 64 	 */
+ 65 	u = {
+ 66 		/**
+ 67 		 * Retrieve the keys, or member names of an object
+ 68 		 * 
+ 69 		 * @name object_keys
+ 70 		 * @memberOf $_.util
+ 71 		 * @function
+ 72 		 * @param object
+ 73 		 * @return array
+ 74 		 * @type array
+ 75 		 */
+ 76 		object_keys: function(o)
+ 77 		{
+ 78 			var keys = [],
+ 79 				k;
+ 80 				
+ 81 			for(k in o)
+ 82 			{
+ 83 				if(o.hasOwnProperty(k))
+ 84 				{
+ 85 					keys.push(k);
+ 86 				}
+ 87 			}
+ 88 			
+ 89 			return keys;
+ 90 		},
+ 91 		/**
+ 92 		 * Retrieves the values of an object, and returns
+ 93 		 * them as an array
+ 94 		 *
+ 95 		 * @name object_values
+ 96 		 * @memberOf $_.util
+ 97 		 * @function
+ 98 		 * @param object
+ 99 		 * @return array
+100 		 * @type array
+101 		 */
+102 		object_values: function(o)
+103 		{
+104 			var vals = [],
+105 				prop;
+106 			
+107 			for(prop in o)
+108 			{
+109 				vals.push(o[prop]);
+110 			}
+111 			
+112 			return vals;
+113 		},
+114 		/**
+115 		 * Creates an object, with the property names of the first array, 
+116 		 * and the values of the second. If objects are passed, the values 
+117 		 * of the object are used. If the arrays or objects passed are 
+118 		 * not the same size, the function will return false.
+119 		 * 
+120 		 * @name array_combine
+121 		 * @memberOf $_.util
+122 		 * @function
+123 		 * @param array/object keys
+124 		 * @param array/object vals
+125 		 * @return object
+126 		 * @type object
+127 		 */
+128 		array_combine: function(keys, vals)
+129 		{
+130 			var new_object = {},
+131 				num_keys,
+132 				i = 0;
+133 				
+134 			//Extract the keys or values if needed
+135 			if($_.type(keys) !== "array")
+136 			{
+137 				keys = this.object_values(keys);
+138 			}
+139 			if($_.type(vals) !== "array")
+140 			{
+141 				vals = this.object_values(vals);
+142 			}
+143 			
+144 			//cache the number of keys
+145 			num_keys = keys.length;
+146 			
+147 			if(num_keys !== vals.length)
+148 			{
+149 				console.log("Object combine requires two arrays of the same size");
+150 				return false;
+151 			}
+152 			
+153 			//Create and return the new object
+154 			for(i = 0; i < num_keys; i++)
+155 			{
+156 				new_object[keys[i]] = vals[i];
+157 			}
+158 			
+159 			return new_object;
+160 		},
+161 		/**
+162 		 * Combines two or more objects/arrays. If the keys are numeric, the outputted
+163 		 * object will have re-indexed keys. If a key/value pair exists in both objects,
+164 		 * indentical values will be droped, but if a key exists with a different value, 
+165 		 * with the same key, the value in the second array will replace the value in the
+166 		 * first
+167 		 * 
+168 		 * @name object_merge
+169 		 * @memberOf $_.util
+170 		 * @function
+171 		 * @param object [as many as you wish to combine]
+172 		 * @type object
+173 		 * @return object
+174 		 */
+175 		object_merge: function()
+176 		{
+177 			var args = Array.prototype.slice.call(arguments),
+178 				arg_len = args.length,
+179 				new_obj = {},
+180 				arg,
+181 				iarg_len = 0,
+182 				i,
+183 				j,
+184 				x,
+185 				is_array = true;
+186 				
+187 			//Check for an array in the arguments
+188 			for(i=0; i < arg_len; i++)
+189 			{
+190 				if($_.type(args[i]) !== "array")
+191 				{
+192 					is_array = false;
+193 					break;
+194 				}
+195 			}
+196 			
+197 			//If all the arguments are javascript arrays
+198 			if(is_array)
+199 			{
+200 				new_obj = [];
+201 				//Let javascript do all the work!
+202 				for(i=0; i< arg_len; i++)
+203 				{
+204 					new_obj = new_obj.contact(args[i]);
+205 				}
+206 				
+207 				//Return early
+208 				return new_obj;
+209 			}
+210 			
+211 			//No, there's at least one object
+212 			for(i=0, x=0; i < arg_len; i++)
+213 			{
+214 				arg = args[i];
+215 				
+216 				// If the argument is an array, add the array items as
+217 				// numeric object properties
+218 				if ($_.type(arg) == "array")
+219 				{
+220 					for (j=0, iarg_len= arg.length; j < iarg_len; j++)
+221 					{
+222 						new_obj[x++] = arg[j];
+223 					}
+224 				}
+225 				else
+226 				{
+227 					for (j in arg)
+228 					{
+229 						if(arg.hasOwnProperty(j))
+230 						{
+231 							// If the key is numeric, add the property with
+232 							// a numeric key
+233 							if(parseInt(j, 10) + '' === j)
+234 							{
+235 								new_obj[x++] = arg[j];
+236 							}
+237 							else
+238 							{
+239 								new_obj[j] = arg[j];
+240 							} 
+241 						}
+242 					}
+243 				} 
+244 			}
+245 			
+246 			return new_obj;
+247 		},
+248 		/**
+249 		 * Replaces sections of strings in a greedy fashion, 
+250 		 * starting with the longest replace pairs first. Accepts
+251 		 * one replace pair as two parameters, or an object, with
+252 		 * from => to replacements as key/value pairs
+253 		 *
+254 		 * @name str_trans
+255 		 * @memberOf $_.util
+256 		 * @function
+257 		 * @param string input_string
+258 		 * @param mixed
+259 		 * @param [string] to
+260 		 * @return string
+261 		 * @type string
+262 		 */
+263 		str_trans: function(str, from, to)
+264 		{
+265 			var froms = [],
+266 				tos = [],
+267 				ret = '',
+268 				match = false,
+269 				from_len = 0,
+270 				str_len = 0,
+271 				to_len = 0,
+272 				to_is_str = '',
+273 				from_is_str = '',
+274 				strx = '',
+275 				strw = '',
+276 				stry = '',
+277 				from_strx = '',
+278 				new_str = '',
+279 				f,
+280 				i,
+281 				j;
+282 				
+283 			//Replace pairs? add them to the internal arrays
+284 			if(typeof from === 'object')
+285 			{
+286 				// Sort the keys in descending order for better
+287 				// replacement functionality
+288 				from = reverse_key_sort(from);
+289 				
+290 				for(f in from)
+291 				{
+292 					if(from.hasOwnProperty(f))
+293 					{
+294 						froms.push(f);
+295 						tos.push(from[f]);
+296 					}
+297 				}
+298 				
+299 				from = froms;
+300 				to = tos;
+301 			}
+302 			
+303 			//Go through the string, and replace characters as needed
+304 			str_len = str.length;
+305 			from_len = from.length;
+306 			to_len = to.length;
+307 			to_is_str = typeof to === 'string';
+308 			from_is_str = typeof from === 'string';
+309 			
+310 			for(i=0; i < str_len; i++)
+311 			{
+312 				match = false;
+313 				if(from_is_str)
+314 				{
+315 					strw = str.charAt(i-1);
+316 					strx = str.charAt(i);
+317 					stry = str.charAt(i+1);
+318 					for(j=0; j < from_len; j++)
+319 					{
+320 						if(strx == from.charAt(j))
+321 						{
+322 							match = true;
+323 							break;
+324 						}
+325 					}
+326 				}
+327 				else
+328 				{
+329 					for(j=0; j < from_len; j++)
+330 					{
+331 						if(str.substr(i, from[j].length) == from[j])
+332 						{
+333 							match = true;
+334 							
+335 							//Go past the current match
+336 							i = (i + from[j].length) -1;
+337 							break;
+338 
+339 						}
+340 					}
+341 				}
+342 
+343 				if(match)
+344 				{
+345 					new_str += (to_is_str) ? to.charAt(j) : to[j];
+346 				}
+347 				else
+348 				{
+349 					new_str += str.charAt(i);
+350 				}
+351 			}
+352 
+353 			return new_str;
+354 				
+355 		}
+356 	};
+357 
+358 	//Add it to the $_ object
+359 	$_.ext('util', u);
+360 }());
+361 
+362 
\ No newline at end of file diff --git a/docs/ui.js b/docs/ui.js new file mode 100644 index 0000000..d8a80af --- /dev/null +++ b/docs/ui.js @@ -0,0 +1,113 @@ +ui = { + toggleIndex: function() { + $('body').toggleClass('index-collapsed'); + var indexToggler = $('#index-toggler'); + if (encodeURIComponent(indexToggler.html()) == '%C2%AB') + indexToggler.html('»'); + else + indexToggler.html('«'); + }, + + toggleMethods: function() { + $.element.toggleClass(this, 'toggled'); + $('.sectionItems', this.parentNode.parentNode).toggleClass('invisible'); + }, + + toggleModule: function(module) { + if (module) { + var name = 'filter module-'+module; + + if ($('body').toggleClass(name).hasClass(name)) { + createCookie("jProtonDocModule", module); + } else { + eraseCookie("jProtonDocModule"); + } + } + ui.hideEmptySections(); + ui.updateFragmentLocation(); + }, + + hideEmptySections: function() { + var sections = $('.section'); + sections.each(function(i){ + + var count = 0; + var sectionItems = $(this).find('.sectionItems'); + + sectionItems.find('.sectionItem').each(function(){ + if ($.element.css(this, 'display') != 'none') + count++; + }); + + if (sectionItems.e.length > 0 && count == 0) + $.element.addClass(this, 'invisible'); + else + $.element.removeClass(this, 'invisible'); + }); + }, + + updateFragmentLocation: function() { + if (window.location.hash) + window.location.hash = window.location.hash; + }, + + updateModuleState: function() { + var module = readCookie("jProtonDocModule"); + if (module) { + $('body').addClass('filter module-'+module); + ui.hideEmptySections(); + } + ui.updateFragmentLocation(); + } +} + +window.onload = function() { + // Controle para alternar a exibição do outline + $('#index-toggler').attr('title', 'Alterna a exibição do outline'); + $('#index-toggler, #index-close').on('click', ui.toggleIndex); + + // Controle para alternar a exibição de métodos + $('.method-toggler').on('click', ui.toggleMethods); + + // Controle para filtro de módulos + $('.module-filter').attr('title', 'Liga/Desliga filtro do módulo'); + $.each(['core', 'css', 'dom', 'event', 'ajax'], function(i,e){ + $('.module-' + e + ' .module-filter').on('click', function(){ + ui.toggleModule(e); + }); + }); + + ui.updateModuleState(); + + if (typeof dp != 'undefined') + dp.SyntaxHighlighter.HighlightAll('code'); +} + +window.onunload = function() { + $.event.removeAll(); +} + +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +function eraseCookie(name) { + createCookie(name,"",-1); +} diff --git a/kis-all.js b/kis-all.js index afe9a0b..e748e92 100644 --- a/kis-all.js +++ b/kis-all.js @@ -2,7 +2,7 @@ Kis JS Keep It Simple JS Library Copyright Timothy J. Warren License Public Domain - Version 0.3.0 + Version 0.5.0-pre */ (function (){ @@ -14,42 +14,18 @@ return; } - var $_, $, dcopy, sel; + var $_, $, dcopy, sel, sel_string; - /** - * $ - * - * Simple DOM selector function - */ - $ = function (a, context) - { - var x, c; - - if (typeof a != "string" || typeof a === "undefined"){ return a;} - - //Check for a context of a specific element, otherwise, just run on the document - c = (context != null && context.nodeType === 1) - ? context - : document; - - //Pick the quickest method for each kind of selector - if (a.match(/^#([\w\-]+$)/)) - { - return document.getElementById(a.split('#')[1]); - } - else - { - x = c.querySelectorAll(a); - } - - //Return the single object if applicable - return (x.length === 1) ? x[0] : x; - }; /** * $_ * * Constructor function + * + * @constuctor + * @namespace + * @param string selector + * @return object */ $_ = function(s) { @@ -86,8 +62,49 @@ return self; }; + /** + * $ + * + * Simple DOM selector function + * + * @memberOf $_ + * @param string selector + * @param string context + * @return object + * @type object + */ + $ = function (a, context) + { + var x, c; + + if (typeof a != "string" || typeof a === "undefined"){ return a;} + + //Check for a context of a specific element, otherwise, just run on the document + c = (context != null && context.nodeType === 1) + ? context + : document; + + //Pick the quickest method for each kind of selector + if (a.match(/^#([\w\-]+$)/)) + { + return document.getElementById(a.split('#')[1]); + } + else + { + x = c.querySelectorAll(a); + } + + //Return the single object if applicable + return (x.length === 1) ? x[0] : x; + }; + /** * Deep copy/prototypical constructor function + * + * @param object obj + * @private + * @return object + * @type object */ dcopy = function(obj) { @@ -110,6 +127,9 @@ return; } + /** + * @private + */ F = function(){}; F.prototype = obj; @@ -118,14 +138,27 @@ }; - //Function to add to $_ object, and get sel + /** + * Adds the property `obj` to the $_ object, calling it `name` + * + * @param string name + * @param object obj + * @return void + */ $_.ext = function(name, obj) { obj.el = sel; $_[name] = obj; }; - //Selector iteration + /** + * Iterates over a $_ object, applying a callback to each item + * + * @name $_.each + * @function + * @param function callback + * @return void + */ $_.ext('each', function (callback) { if(typeof sel.length !== "undefined" && sel !== window) @@ -150,7 +183,13 @@ } }); - //Type retriever + /** + * Retrieves the type of the passed variable + * + * @param mixed obj + * @return string + * @type string + */ $_.type = function(obj) { if((function() {return obj && (obj !== this)}).call(obj)) @@ -179,6 +218,9 @@ */ if(typeof String.prototype.trim === "undefined") { + /** + * @private + */ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, ""); }; @@ -227,12 +269,18 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } // Vendors: please allow content code to instantiate DOMExceptions , + /** + * @private + */ DOMEx = function (type, message) { this.name = type; this.code = DOMException[type]; this.message = message; }, + /** + * @private + */ checkTokenAndGetIndex = function (classList, token) { if (token === "") @@ -245,6 +293,9 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } return arrIndexOf.call(classList, token); }, + /** + * @private + */ ClassList = function (elem) { var @@ -262,6 +313,9 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" }; }, classListProto = ClassList[protoProp] = [], + /** + * @private + */ classListGetter = function () { return new ClassList(this); @@ -344,10 +398,6 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" // -------------------------------------------------------------------------- -/** - * Dom manipulation object - * - */ (function (){ var d, tag_reg, class_reg; @@ -476,23 +526,71 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" // -------------------------------------------------------------------------- + /** + * DOM + * + * Dom manipulation module + * @namespace + * @memberOf $_ + * @name dom + */ d = { + /** + * Adds a class to the element(s) specified by the current + * selector + * + * @name addClass + * @memberOf $_.dom + * @function + * @param string class + * @return void + */ addClass: function (c) { $_.each(function (e){ e.classList.add(c); }); }, + /** + * Removes a class from the element(s) specified by the current + * selector + * + * @name removeClass + * @memberOf $_.dom + * @function + * @param string class + * @return void + */ removeClass: function (c) { $_.each(function (e){ e.classList.remove(c); }); }, + /** + * Hides the element(s) specified by the current selector + * + * @name hide + * @memberOf $_.dom + * @function + * @return void + */ hide: function () { this.css('display', 'none'); }, + /** + * Shows the element(s) specified by the current selector. + * if type is specified, the element will have it's style + * property set to "display:[your type]". If type is not + * specified, the element is set to "display:block". + * + * @name show + * @memberOf $_.dom + * @function + * @param [string] type + * @return void + */ show: function (type) { if (typeof type === "undefined") @@ -502,6 +600,20 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" this.css("display", type); }, + /** + * Sets attributes on element(s) specified by the current + * selector, or, if name is not specified, returns the + * value of the attribute of the element specified by the + * current selector. + * + * @name attr + * @memberOf $_.dom + * @function + * @param string name + * @param string value + * @return string + * @type string + */ attr: function (name, value) { var sel = this.el; @@ -524,6 +636,19 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return _attr(sel, name, value); } }, + /** + * Sets or retrieves the text content of the element + * specified by the current selector. If a value is + * passed, it will set that value on the current element, + * otherwise it will return the value of the current element + * + * @name text + * @memberOf $_.util + * @function + * @param [string] value + * @returns string + * @type string + */ text: function (value) { var oldValue, set, type, sel; @@ -550,6 +675,21 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return oldValue; } }, + /** + * Sets or retrieves a css property of the element + * specified by the current selector. If a value is + * passed, it will set that value on the current element, + * otherwise it will return the value of the css property + * on the current element + * + * @name css + * @memberOf $_.util + * @function + * @param string property + * @param [string] value + * @returns string + * @type string + */ css: function (prop, val) { //Return the current value if a value is not set @@ -570,17 +710,42 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" // -------------------------------------------------------------------------- -/** - * Store object - * - * Wrapper for localstorage data serialization - */ (function (){ + "use strict"; + + /** + * Wrapper for localstorage data serialization + * + * @name store + * @namespace + * @memberOf $_ + */ var store = { + /** + * Retrieves and deserializes a value from localstorage, + * based on the specified key + * + * @param string key + * @name get + * @memberOf $_.store + * @function + * @return object + */ get: function (key) { return JSON.parse(localStorage.getItem(key)); }, + /** + * Puts a value into localstorage at the specified key, + * and JSON-encodes the value if not a string + * + * @param string key + * @param mixed value + * @name set + * @memberOf $_.store + * @function + * @return void + */ set: function (key, value) { if (typeof value !== "string") @@ -589,10 +754,28 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } localStorage.setItem(key, value); }, + /** + * Removes the specified item from localstorage + * + * @param string key + * @name remove + * @memberOf $_.store + * @function + * @return void + */ remove: function (key) { localStorage.removeItem(key); }, + /** + * Returns an array of all the values in localstorage + * in their raw form + * + * @name getAll + * @member of $_.store + * @function + * @return object + */ getAll: function () { var i, @@ -617,104 +800,10 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" // -------------------------------------------------------------------------- -/** - * Qs - * - * Object for encoding and decoding querystrings and hashbang strings - */ -(function (){ - - $_.hb = (history.pushState) ? false : true; - - var qs = { - parse: function (hb) - { - hb = hb || $_.hb; - - var h, i, hString, pairs, pLen, data, y; - - data = {}; - - if (hb === true) - { - h = location.hash.split('#!/'); - hString = (h.length > 1) ? h[1] : ''; - } - else if (hb === false || hb === undefined) - { - hString = window.location.search.substring(1); - } - else - { - return false; - } - - pairs = hString.split('&'); - - pLen = pairs.length; - - for (i = 0; i < pLen; i++) - { - y = pairs[i].split('='); - - if (y.length < 2) - { - return data; - } - - data[y[0]] = y[1]; - } - - return data; - }, - set: function (key, value, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - - if (key !== undefined && value !== undefined) - { - pairs[key] = value; - } - - var vars = []; - - for (var x in pairs) - { - if (pairs.hasOwnProperty(x)) - { - vars.push(x + '=' + pairs[x]); - } - } - - var qs = vars.join('&'); - - if (hb === true) - { - qs = '!/' + qs; - location.hash = qs; - } - - return qs; - }, - get: function (key, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - return (pairs[key]) ? pairs[key] : ''; - } - }; - - $_.ext('qs', qs); - -}()); - -// -------------------------------------------------------------------------- - /** * Ajax * - * Object for making ajax requests + * Module for making ajax requests */ (function (){ @@ -723,6 +812,9 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" { if (typeof callback === "undefined") { + /** + * @private + */ callback = function (){}; } @@ -781,10 +873,32 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } }; + /** + * Sends a GET type ajax request + * + * @name get + * @function + * @memberOf $_ + * @param string url + * @param object data + * @param function callback + * @return void + */ $_.ext('get', function (url, data, callback){ ajax._do(url, data, callback, false); }); - + + /** + * Sends a POST type ajax request + * + * @name post + * @function + * @memberOf $_ + * @param string url + * @param object data + * @param function callback + * @return void + */ $_.ext('post', function (url, data, callback){ ajax._do(url, data, callback, true); }); @@ -848,7 +962,25 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return new_o; }, + + /** + * String and object manipulation utilities + * + * @namespace + * @name util + * @memberOf $_ + */ u = { + /** + * Retrieve the keys, or member names of an object + * + * @name object_keys + * @memberOf $_.util + * @function + * @param object + * @return array + * @type array + */ object_keys: function(o) { var keys = [], @@ -864,6 +996,17 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return keys; }, + /** + * Retrieves the values of an object, and returns + * them as an array + * + * @name object_values + * @memberOf $_.util + * @function + * @param object + * @return array + * @type array + */ object_values: function(o) { var vals = [], @@ -876,6 +1019,20 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return vals; }, + /** + * Creates an object, with the property names of the first array, + * and the values of the second. If objects are passed, the values + * of the object are used. If the arrays or objects passed are + * not the same size, the function will return false. + * + * @name array_combine + * @memberOf $_.util + * @function + * @param array/object keys + * @param array/object vals + * @return object + * @type object + */ array_combine: function(keys, vals) { var new_object = {}, @@ -909,6 +1066,20 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return new_object; }, + /** + * Combines two or more objects/arrays. If the keys are numeric, the outputted + * object will have re-indexed keys. If a key/value pair exists in both objects, + * indentical values will be droped, but if a key exists with a different value, + * with the same key, the value in the second array will replace the value in the + * first + * + * @name object_merge + * @memberOf $_.util + * @function + * @param object [as many as you wish to combine] + * @type object + * @return object + */ object_merge: function() { var args = Array.prototype.slice.call(arguments), @@ -982,6 +1153,21 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" return new_obj; }, + /** + * Replaces sections of strings in a greedy fashion, + * starting with the longest replace pairs first. Accepts + * one replace pair as two parameters, or an object, with + * from => to replacements as key/value pairs + * + * @name str_trans + * @memberOf $_.util + * @function + * @param string input_string + * @param mixed + * @param [string] to + * @return string + * @type string + */ str_trans: function(str, from, to) { var froms = [], @@ -1085,7 +1271,7 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" // -------------------------------------------------------------------------- /** - * Event object + * Event * * Event api wrapper */ @@ -1094,28 +1280,43 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" "use strict"; // Property name for expandos on DOM objects - var kis_expando = "KIS_0_3_0"; + var kis_expando = "KIS_0_5_0"; - var attach, remove, add_remove, e, attach_delegate, attach_live; + var _attach, _remove, _add_remove, e, _attach_delegate; - // Define the proper attach and remove functions + // Define the proper _attach and _remove functions // based on browser support if(typeof document.addEventListener !== "undefined") { - attach = function (sel, event, callback) + /** + * @private + */ + _attach = function (sel, event, callback) { - sel.removeEventListener(event, callback, false); - sel.addEventListener(event, callback, false); + if(typeof sel.addEventListener !== "undefined") + { + //Duplicated events are dropped, per the specification + sel.addEventListener(event, callback, false); + } }; - remove = function (sel, event, callback) + /** + * @private + */ + _remove = function (sel, event, callback) { - sel.removeEventListener(event, callback, false); + if(typeof sel.removeEventListener !== "undefined") + { + sel.removeEventListener(event, callback, false); + } }; } - //typeof function doesn't work in IE where attachEvent is available: brute force it + //typeof function doesn't work in IE where _attachEvent is available: brute force it else if(typeof document.attachEvent !== "undefined") { - attach = function (sel, event, callback) + /** + * @private + */ + _attach = function (sel, event, callback) { function listener () { // Internet Explorer fails to correctly set the 'this' object @@ -1125,10 +1326,10 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" if (typeof sel.attachEvent !== "undefined") { - remove(event, callback); // Make sure we don't have duplicate listeners + _remove(event, callback); // Make sure we don't have duplicate listeners sel.attachEvent("on" + event, listener); - // Store our listener so we can remove it later + // Store our listener so we can _remove it later var expando = sel[kis_expando] = sel[kis_expando] || {}; expando.listeners = expando.listeners || {}; expando.listeners[event] = expando.listeners[event] || []; @@ -1139,10 +1340,13 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } else { - console.log("Failed to attach event:"+event+" on "+sel); + console.log("Failed to _attach event:"+event+" on "+sel); } }; - remove = function (sel, event, callback) + /** + * @private + */ + _remove = function (sel, event, callback) { if(typeof sel.detachEvent !== "undefined") { @@ -1169,8 +1373,8 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" } }; } - - add_remove = function (sel, event, callback, add) + + _add_remove = function (sel, event, callback, add) { var i, len; @@ -1190,7 +1394,7 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" for (i = 0; i < len; i++) { - add_remove(sel, event[i], callback, add); + _add_remove(sel, event[i], callback, add); } return; @@ -1199,60 +1403,124 @@ if (typeof document !== "undefined" && !("classList" in document.createElement(" if(add === true) { - attach(sel, event, callback); + _attach(sel, event, callback); } else { - remove(sel, event, callback); + _remove(sel, event, callback); } }; - - attach_delegate = function(sel, target, event, callback) + + _attach_delegate = function(sel, target, event, callback) { - - //Attach the listener to the parent object - add_remove(sel, event, function(e){ + //_attach the listener to the parent object + _add_remove(target, event, function(e){ + var i, t; + //Get the live version of the target selector - sel = $_.$(sel); - - - //todo: fire target callback when event bubbles from target + t = $_.$(target); + + console.log(t); + + //Check each element to see if it matches the target + for(i in t) + { + if(t.hasOwnProperty(i)) + { + //Fire target callback when event bubbles from target + if(e.target == i) + { + //Trigger the event callback + callback.call(i, e); + + //Stop event propegation + e.stopPropagation(); + } + } + } + + }, true); }; - attach_live = function(target, event, callback) - { - attach_delegate(document.documentElement, target, event, callback); - }; - // -------------------------------------------------------------------------- + /** + * @namespace + * @name event + * @memberOf $_ + */ e = { + /** + * Adds an event that returns a callback when triggered on the selected + * event and selector + * + * @memberOf $_.event + * @name add + * @function + * @example Eg. $_("#selector").event.add("click", do_something()); + * @param string event + * @param function callback + * @return void + */ add: function (event, callback) { $_.each(function(e){ - add_remove(e, event, callback, true); + _add_remove(e, event, callback, true); }); }, + /** + * Removes an event bound the the specified selector, event type, and callback + * + * @memberOf $_.event + * @name remove + * @function + * @example Eg. $_("#selector").event.remove("click", do_something()); + * @param string event + * @param string callback + * @return void + */ remove: function (event, callback) { $_.each(function(e){ - add_remove(e, event, callback, false); - }); - }/*, - live: function (event, callback) - { - $_.each(function(e){ - attach_live(e, event, callback); + _add_remove(e, event, callback, false); }); }, + /** + * Binds a persistent, delegated event + * + * @memberOf $_.event + * @name live + * @function + * @example Eg. $_.event.live(".button", "click", do_something()); + * @param string target + * @param string event + * @param function callback + * @return void + */ + live: function (target, event, callback) + { + _attach_delegate(document.documentElement, target, event, callback); + }, + /** + * Binds an event to a parent object + * + * @memberOf $_.event + * @name delegate + * @function + * @example Eg. $_("#parent").delegate(".button", "click", do_something()); + * @param string target + * @param string event_type + * @parma function callback + * @return void + */ delegate: function(target, event, callback) { $_.each(function(e){ - attach_delegate(e, target, event, callback); + _attach_delegate(e, target, event, callback); }); - }*/ + } }; $_.ext('event', e); diff --git a/kis-min.js b/kis-min.js index 402aedd..681177e 100644 --- a/kis-min.js +++ b/kis-min.js @@ -1,22 +1,20 @@ -(function(){if(document.querySelectorAll){var c,f,g,a;f=function(b,a){var e;if(typeof b!="string"||typeof b==="undefined")return b;e=a!=null&&a.nodeType===1?a:document;if(b.match(/^#([\w\-]+$)/))return document.getElementById(b.split("#")[1]);else e=e.querySelectorAll(b);return e.length===1?e[0]:e};c=function(b){a=typeof b==="undefined"?typeof c.el!=="undefined"?c.el:document.documentElement:typeof b!=="object"?f(b):b;c.prototype.el=a;var b=g(c),d;for(d in b)if(typeof b[d]==="object")b[d].el=a;b.el= -a;return b};g=function(a){var d;if(typeof a!=="undefined"){if(typeof Object.create!=="undefined")return Object.create(a);d=typeof a;if(!(d!=="object"&&d!=="function"))return d=function(){},d.prototype=a,new d}};c.ext=function(b,d){d.el=a;c[b]=d};c.ext("each",function(b){if(typeof a.length!=="undefined"&&a!==window){var d=a.length;if(d!==0)for(var e,c=0;c1&&typeof b==="undefined")console.log(d),console.log("Must be a singular element");else if(d.length>1&&typeof b!== -"undefined")$_.each(function(d){return c(d,a,b)});else return c(d,a,b)},text:function(a){var b,d,c;c=this.el;d=typeof c.innerText!=="undefined"?"innerText":typeof c.textContent!=="undefined"?"textContent":"innerHTML";b=c[d];return typeof a!=="undefined"?c[d]=a:b},css:function(a,b){if(typeof b==="undefined")return g(this.el,a);$_.each(function(d){g(d,a,b)})}})})(); -(function(){$_.ext("store",{get:function(c){return JSON.parse(localStorage.getItem(c))},set:function(c,f){typeof f!=="string"&&(f=JSON.stringify(f));localStorage.setItem(c,f)},remove:function(c){localStorage.removeItem(c)},getAll:function(){var c,f,g;f=localStorage.length;g={};for(c=0;c1?c[1]:"";else if(c===false||c===void 0)c=window.location.search.substring(1);else return false;f=c.split("&");g=f.length;for(c=0;cc?1:da?1:b1&&typeof a==="undefined")console.log(c),console.log("Must be a singular element");else if(c.length>1&&typeof a!== +"undefined")$_.each(function(c){return d(c,b,a)});else return d(c,b,a)},text:function(b){var a,c,e;e=this.el;c=typeof e.innerText!=="undefined"?"innerText":typeof e.textContent!=="undefined"?"textContent":"innerHTML";a=e[c];return typeof b!=="undefined"?e[c]=b:a},css:function(b,a){if(typeof a==="undefined")return f(this.el,b);$_.each(function(c){f(c,b,a)})}})})(); +(function(){$_.ext("store",{get:function(d){return JSON.parse(localStorage.getItem(d))},set:function(d,h){typeof h!=="string"&&(h=JSON.stringify(h));localStorage.setItem(d,h)},remove:function(d){localStorage.removeItem(d)},getAll:function(){var d,h,f;h=localStorage.length;f={};for(d=0;de?1:ba?1:c 1) ? h[1] : ''; - } - else if (hb === false || hb === undefined) - { - hString = window.location.search.substring(1); - } - else - { - return false; - } - - pairs = hString.split('&'); - - pLen = pairs.length; - - for (i = 0; i < pLen; i++) - { - y = pairs[i].split('='); - - if (y.length < 2) - { - return data; - } - - data[y[0]] = y[1]; - } - - return data; - }, - set: function (key, value, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - - if (key !== undefined && value !== undefined) - { - pairs[key] = value; - } - - var vars = []; - - for (var x in pairs) - { - if (pairs.hasOwnProperty(x)) - { - vars.push(x + '=' + pairs[x]); - } - } - - var qs = vars.join('&'); - - if (hb === true) - { - qs = '!/' + qs; - location.hash = qs; - } - - return qs; - }, - get: function (key, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - return (pairs[key]) ? pairs[key] : ''; - } - }; - - $_.ext('qs', qs); - -}()); diff --git a/src/modules/ajax.js b/src/modules/ajax.js index 050f649..45afe81 100644 --- a/src/modules/ajax.js +++ b/src/modules/ajax.js @@ -1,7 +1,7 @@ /** * Ajax * - * Object for making ajax requests + * Module for making ajax requests */ (function (){ @@ -10,6 +10,9 @@ { if (typeof callback === "undefined") { + /** + * @private + */ callback = function (){}; } @@ -68,10 +71,32 @@ } }; + /** + * Sends a GET type ajax request + * + * @name get + * @function + * @memberOf $_ + * @param string url + * @param object data + * @param function callback + * @return void + */ $_.ext('get', function (url, data, callback){ ajax._do(url, data, callback, false); }); - + + /** + * Sends a POST type ajax request + * + * @name post + * @function + * @memberOf $_ + * @param string url + * @param object data + * @param function callback + * @return void + */ $_.ext('post', function (url, data, callback){ ajax._do(url, data, callback, true); }); diff --git a/src/modules/event.js b/src/modules/event.js index ad385c9..73d916d 100644 --- a/src/modules/event.js +++ b/src/modules/event.js @@ -1,5 +1,5 @@ /** - * Event object + * Event * * Event api wrapper */ @@ -8,28 +8,43 @@ "use strict"; // Property name for expandos on DOM objects - var kis_expando = "KIS_0_3_0"; + var kis_expando = "KIS_0_5_0"; - var attach, remove, add_remove, e, attach_delegate, attach_live; + var _attach, _remove, _add_remove, e, _attach_delegate; - // Define the proper attach and remove functions + // Define the proper _attach and _remove functions // based on browser support if(typeof document.addEventListener !== "undefined") { - attach = function (sel, event, callback) + /** + * @private + */ + _attach = function (sel, event, callback) { - sel.removeEventListener(event, callback, false); - sel.addEventListener(event, callback, false); + if(typeof sel.addEventListener !== "undefined") + { + //Duplicated events are dropped, per the specification + sel.addEventListener(event, callback, false); + } }; - remove = function (sel, event, callback) + /** + * @private + */ + _remove = function (sel, event, callback) { - sel.removeEventListener(event, callback, false); + if(typeof sel.removeEventListener !== "undefined") + { + sel.removeEventListener(event, callback, false); + } }; } - //typeof function doesn't work in IE where attachEvent is available: brute force it + //typeof function doesn't work in IE where _attachEvent is available: brute force it else if(typeof document.attachEvent !== "undefined") { - attach = function (sel, event, callback) + /** + * @private + */ + _attach = function (sel, event, callback) { function listener () { // Internet Explorer fails to correctly set the 'this' object @@ -39,10 +54,10 @@ if (typeof sel.attachEvent !== "undefined") { - remove(event, callback); // Make sure we don't have duplicate listeners + _remove(event, callback); // Make sure we don't have duplicate listeners sel.attachEvent("on" + event, listener); - // Store our listener so we can remove it later + // Store our listener so we can _remove it later var expando = sel[kis_expando] = sel[kis_expando] || {}; expando.listeners = expando.listeners || {}; expando.listeners[event] = expando.listeners[event] || []; @@ -53,10 +68,13 @@ } else { - console.log("Failed to attach event:"+event+" on "+sel); + console.log("Failed to _attach event:"+event+" on "+sel); } }; - remove = function (sel, event, callback) + /** + * @private + */ + _remove = function (sel, event, callback) { if(typeof sel.detachEvent !== "undefined") { @@ -83,8 +101,8 @@ } }; } - - add_remove = function (sel, event, callback, add) + + _add_remove = function (sel, event, callback, add) { var i, len; @@ -104,7 +122,7 @@ for (i = 0; i < len; i++) { - add_remove(sel, event[i], callback, add); + _add_remove(sel, event[i], callback, add); } return; @@ -113,60 +131,124 @@ if(add === true) { - attach(sel, event, callback); + _attach(sel, event, callback); } else { - remove(sel, event, callback); + _remove(sel, event, callback); } }; - - attach_delegate = function(sel, target, event, callback) + + _attach_delegate = function(sel, target, event, callback) { - - //Attach the listener to the parent object - add_remove(sel, event, function(e){ + //_attach the listener to the parent object + _add_remove(target, event, function(e){ + var i, t; + //Get the live version of the target selector - sel = $_.$(sel); - - - //todo: fire target callback when event bubbles from target + t = $_.$(target); + + console.log(t); + + //Check each element to see if it matches the target + for(i in t) + { + if(t.hasOwnProperty(i)) + { + //Fire target callback when event bubbles from target + if(e.target == i) + { + //Trigger the event callback + callback.call(i, e); + + //Stop event propegation + e.stopPropagation(); + } + } + } + + }, true); }; - attach_live = function(target, event, callback) - { - attach_delegate(document.documentElement, target, event, callback); - }; - // -------------------------------------------------------------------------- + /** + * @namespace + * @name event + * @memberOf $_ + */ e = { + /** + * Adds an event that returns a callback when triggered on the selected + * event and selector + * + * @memberOf $_.event + * @name add + * @function + * @example Eg. $_("#selector").event.add("click", do_something()); + * @param string event + * @param function callback + * @return void + */ add: function (event, callback) { $_.each(function(e){ - add_remove(e, event, callback, true); + _add_remove(e, event, callback, true); }); }, + /** + * Removes an event bound the the specified selector, event type, and callback + * + * @memberOf $_.event + * @name remove + * @function + * @example Eg. $_("#selector").event.remove("click", do_something()); + * @param string event + * @param string callback + * @return void + */ remove: function (event, callback) { $_.each(function(e){ - add_remove(e, event, callback, false); - }); - }/*, - live: function (event, callback) - { - $_.each(function(e){ - attach_live(e, event, callback); + _add_remove(e, event, callback, false); }); }, + /** + * Binds a persistent, delegated event + * + * @memberOf $_.event + * @name live + * @function + * @example Eg. $_.event.live(".button", "click", do_something()); + * @param string target + * @param string event + * @param function callback + * @return void + */ + live: function (target, event, callback) + { + _attach_delegate(document.documentElement, target, event, callback); + }, + /** + * Binds an event to a parent object + * + * @memberOf $_.event + * @name delegate + * @function + * @example Eg. $_("#parent").delegate(".button", "click", do_something()); + * @param string target + * @param string event_type + * @parma function callback + * @return void + */ delegate: function(target, event, callback) { $_.each(function(e){ - attach_delegate(e, target, event, callback); + _attach_delegate(e, target, event, callback); }); - }*/ + } }; $_.ext('event', e); diff --git a/src/modules/store.js b/src/modules/store.js index 1b995cb..f418b1d 100644 --- a/src/modules/store.js +++ b/src/modules/store.js @@ -1,14 +1,39 @@ -/** - * Store object - * - * Wrapper for localstorage data serialization - */ (function (){ + "use strict"; + + /** + * Wrapper for localstorage data serialization + * + * @name store + * @namespace + * @memberOf $_ + */ var store = { + /** + * Retrieves and deserializes a value from localstorage, + * based on the specified key + * + * @param string key + * @name get + * @memberOf $_.store + * @function + * @return object + */ get: function (key) { return JSON.parse(localStorage.getItem(key)); }, + /** + * Puts a value into localstorage at the specified key, + * and JSON-encodes the value if not a string + * + * @param string key + * @param mixed value + * @name set + * @memberOf $_.store + * @function + * @return void + */ set: function (key, value) { if (typeof value !== "string") @@ -17,10 +42,28 @@ } localStorage.setItem(key, value); }, + /** + * Removes the specified item from localstorage + * + * @param string key + * @name remove + * @memberOf $_.store + * @function + * @return void + */ remove: function (key) { localStorage.removeItem(key); }, + /** + * Returns an array of all the values in localstorage + * in their raw form + * + * @name getAll + * @member of $_.store + * @function + * @return object + */ getAll: function () { var i, diff --git a/src/modules/util.js b/src/modules/util.js index ca25a63..d5d4b69 100644 --- a/src/modules/util.js +++ b/src/modules/util.js @@ -54,7 +54,25 @@ return new_o; }, + + /** + * String and object manipulation utilities + * + * @namespace + * @name util + * @memberOf $_ + */ u = { + /** + * Retrieve the keys, or member names of an object + * + * @name object_keys + * @memberOf $_.util + * @function + * @param object + * @return array + * @type array + */ object_keys: function(o) { var keys = [], @@ -70,6 +88,17 @@ return keys; }, + /** + * Retrieves the values of an object, and returns + * them as an array + * + * @name object_values + * @memberOf $_.util + * @function + * @param object + * @return array + * @type array + */ object_values: function(o) { var vals = [], @@ -82,6 +111,20 @@ return vals; }, + /** + * Creates an object, with the property names of the first array, + * and the values of the second. If objects are passed, the values + * of the object are used. If the arrays or objects passed are + * not the same size, the function will return false. + * + * @name array_combine + * @memberOf $_.util + * @function + * @param array/object keys + * @param array/object vals + * @return object + * @type object + */ array_combine: function(keys, vals) { var new_object = {}, @@ -115,6 +158,20 @@ return new_object; }, + /** + * Combines two or more objects/arrays. If the keys are numeric, the outputted + * object will have re-indexed keys. If a key/value pair exists in both objects, + * indentical values will be droped, but if a key exists with a different value, + * with the same key, the value in the second array will replace the value in the + * first + * + * @name object_merge + * @memberOf $_.util + * @function + * @param object [as many as you wish to combine] + * @type object + * @return object + */ object_merge: function() { var args = Array.prototype.slice.call(arguments), @@ -188,6 +245,21 @@ return new_obj; }, + /** + * Replaces sections of strings in a greedy fashion, + * starting with the longest replace pairs first. Accepts + * one replace pair as two parameters, or an object, with + * from => to replacements as key/value pairs + * + * @name str_trans + * @memberOf $_.util + * @function + * @param string input_string + * @param mixed + * @param [string] to + * @return string + * @type string + */ str_trans: function(str, from, to) { var froms = [], diff --git a/tests/tests/core.js b/tests/tests/core.js index b4e4419..af48563 100644 --- a/tests/tests/core.js +++ b/tests/tests/core.js @@ -53,9 +53,9 @@ test("Sub-modules", function(){ expect(4); - ok($_.qs, "Query String module"); ok($_().event, "Event module"); ok($_.store, "Local Storage module"); ok($_().dom, "Dom manipulation module"); + ok($_.util, "Utilities module"); }); }()); \ No newline at end of file
+
+
+
+
+
 
+
Project Outline
+
+
+ +
+ +
+ +
+
+
 
$_.dom
addClass(string)
removeClass(string)
show(string)
attr(string, string)
+ +
+
add(string, function)
remove(string, string)
live(string, string, function)
delegate(string, string)
+ +
+
get(string)
set(string, mixed)
remove(string)
+ +
+
+
 
$_.util
text(string)
css(string, string)
object_keys(object)
array_combine(array/object, array/object)
object_merge(object)
str_trans(string, mixed, string)
+ +
+
+ +
+
+
+ + +
+
«
+ +
+ Framework jProton +
+ + +
+ +

File Index

+ +
+
+ +
+ ajax.js ../kis-js/src/modules/event.js + +
+ + +
+
+ +
+ DOM.js ../kis-js/src/modules/event.js + +
+ + +
+
+ +
+ event.js ../kis-js/src/modules/event.js + +
+ + +
+
+ +
+ store.js ../kis-js/src/modules/event.js + +
+ + +
+
+ +
+ util.js ../kis-js/src/modules/event.js + +
+ + +
+
+ +
+
+ +
+ +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Nov 01 2011 18:52:39 GMT-0400 (EDT) +
+
+