diff options
283 files changed, 12769 insertions, 35061 deletions
diff --git a/assets/default/images/chakra_logo_50x50.png b/assets/default/images/chakra_logo_50x50.png Binary files differnew file mode 100755 index 0000000..0eadda2 --- /dev/null +++ b/assets/default/images/chakra_logo_50x50.png diff --git a/assets/default/images/help_50x50.png b/assets/default/images/help_50x50.png Binary files differnew file mode 100755 index 0000000..ade47a7 --- /dev/null +++ b/assets/default/images/help_50x50.png diff --git a/assets/default/images/karma_logo.png b/assets/default/images/karma_logo.png Binary files differindex dc8610a..fa04651 100755 --- a/assets/default/images/karma_logo.png +++ b/assets/default/images/karma_logo.png diff --git a/assets/default/images/karma_logo_35x32.png b/assets/default/images/karma_logo_35x32.png Binary files differnew file mode 100755 index 0000000..790ed88 --- /dev/null +++ b/assets/default/images/karma_logo_35x32.png diff --git a/assets/default/images/karma_logo_50x46.png b/assets/default/images/karma_logo_50x46.png Binary files differnew file mode 100755 index 0000000..19dfd91 --- /dev/null +++ b/assets/default/images/karma_logo_50x46.png diff --git a/assets/default/images/karma_logo_54x50.png b/assets/default/images/karma_logo_54x50.png Binary files differnew file mode 100755 index 0000000..6f6842d --- /dev/null +++ b/assets/default/images/karma_logo_54x50.png diff --git a/assets/images/back.png b/assets/images/back.png Binary files differnew file mode 100755 index 0000000..fbb0910 --- /dev/null +++ b/assets/images/back.png diff --git a/assets/images/back_bw.png b/assets/images/back_bw.png Binary files differnew file mode 100755 index 0000000..126380d --- /dev/null +++ b/assets/images/back_bw.png diff --git a/assets/images/chakra_logo.png b/assets/images/chakra_logo.png Binary files differnew file mode 100755 index 0000000..b7f9b3a --- /dev/null +++ b/assets/images/chakra_logo.png diff --git a/assets/images/chakra_logo_50x50.png b/assets/images/chakra_logo_50x50.png Binary files differnew file mode 100755 index 0000000..0eadda2 --- /dev/null +++ b/assets/images/chakra_logo_50x50.png diff --git a/assets/images/english.png b/assets/images/english.png Binary files differnew file mode 100755 index 0000000..6a3eaab --- /dev/null +++ b/assets/images/english.png diff --git a/assets/images/exercise.png b/assets/images/exercise.png Binary files differnew file mode 100755 index 0000000..ebb2ead --- /dev/null +++ b/assets/images/exercise.png diff --git a/assets/images/exercise_bw.png b/assets/images/exercise_bw.png Binary files differnew file mode 100755 index 0000000..e2cf4f7 --- /dev/null +++ b/assets/images/exercise_bw.png diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico Binary files differnew file mode 100755 index 0000000..20bf7f1 --- /dev/null +++ b/assets/images/favicon.ico diff --git a/assets/images/games.png b/assets/images/games.png Binary files differnew file mode 100755 index 0000000..a7177f2 --- /dev/null +++ b/assets/images/games.png diff --git a/assets/images/games_bw.png b/assets/images/games_bw.png Binary files differnew file mode 100755 index 0000000..fd3c3cb --- /dev/null +++ b/assets/images/games_bw.png diff --git a/assets/images/geography.png b/assets/images/geography.png Binary files differnew file mode 100755 index 0000000..3a9a2dc --- /dev/null +++ b/assets/images/geography.png diff --git a/assets/images/grade1.png b/assets/images/grade1.png Binary files differnew file mode 100755 index 0000000..2e27b65 --- /dev/null +++ b/assets/images/grade1.png diff --git a/assets/images/grade1_bw.png b/assets/images/grade1_bw.png Binary files differnew file mode 100755 index 0000000..0034ace --- /dev/null +++ b/assets/images/grade1_bw.png diff --git a/assets/images/grade2.png b/assets/images/grade2.png Binary files differnew file mode 100755 index 0000000..496d0d2 --- /dev/null +++ b/assets/images/grade2.png diff --git a/assets/images/grade2_bw.png b/assets/images/grade2_bw.png Binary files differnew file mode 100755 index 0000000..28eb7c0 --- /dev/null +++ b/assets/images/grade2_bw.png diff --git a/assets/images/grade3.png b/assets/images/grade3.png Binary files differnew file mode 100755 index 0000000..8248bf0 --- /dev/null +++ b/assets/images/grade3.png diff --git a/assets/images/grade3_bw.png b/assets/images/grade3_bw.png Binary files differnew file mode 100755 index 0000000..0e8cd09 --- /dev/null +++ b/assets/images/grade3_bw.png diff --git a/assets/images/grade4.png b/assets/images/grade4.png Binary files differnew file mode 100755 index 0000000..25ac532 --- /dev/null +++ b/assets/images/grade4.png diff --git a/assets/images/grade4_bw.png b/assets/images/grade4_bw.png Binary files differnew file mode 100755 index 0000000..c597442 --- /dev/null +++ b/assets/images/grade4_bw.png diff --git a/assets/images/grade5.png b/assets/images/grade5.png Binary files differnew file mode 100755 index 0000000..1ad416a --- /dev/null +++ b/assets/images/grade5.png diff --git a/assets/images/grade5_bw.png b/assets/images/grade5_bw.png Binary files differnew file mode 100755 index 0000000..a8a9d8a --- /dev/null +++ b/assets/images/grade5_bw.png diff --git a/assets/images/grade6.png b/assets/images/grade6.png Binary files differnew file mode 100755 index 0000000..26e6f9b --- /dev/null +++ b/assets/images/grade6.png diff --git a/assets/images/grade6_bw.png b/assets/images/grade6_bw.png Binary files differnew file mode 100755 index 0000000..07e6e0d --- /dev/null +++ b/assets/images/grade6_bw.png diff --git a/assets/images/grade7.png b/assets/images/grade7.png Binary files differnew file mode 100755 index 0000000..333b61e --- /dev/null +++ b/assets/images/grade7.png diff --git a/assets/images/grade7_bw.png b/assets/images/grade7_bw.png Binary files differnew file mode 100755 index 0000000..6ff1dd1 --- /dev/null +++ b/assets/images/grade7_bw.png diff --git a/assets/images/grade8.png b/assets/images/grade8.png Binary files differnew file mode 100755 index 0000000..77542a7 --- /dev/null +++ b/assets/images/grade8.png diff --git a/assets/images/grade8_bw.png b/assets/images/grade8_bw.png Binary files differnew file mode 100755 index 0000000..15b3be7 --- /dev/null +++ b/assets/images/grade8_bw.png diff --git a/assets/images/health.png b/assets/images/health.png Binary files differnew file mode 100755 index 0000000..305c8d0 --- /dev/null +++ b/assets/images/health.png diff --git a/assets/images/help.png b/assets/images/help.png Binary files differnew file mode 100755 index 0000000..9209167 --- /dev/null +++ b/assets/images/help.png diff --git a/assets/images/help_50x50.png b/assets/images/help_50x50.png Binary files differnew file mode 100755 index 0000000..ade47a7 --- /dev/null +++ b/assets/images/help_50x50.png diff --git a/assets/images/history.png b/assets/images/history.png Binary files differnew file mode 100755 index 0000000..79a79c0 --- /dev/null +++ b/assets/images/history.png diff --git a/docs/images/karma_logo.png b/assets/images/karma_logo.png Binary files differindex dc8610a..dc8610a 100755 --- a/docs/images/karma_logo.png +++ b/assets/images/karma_logo.png diff --git a/assets/images/karma_logo_35x32.png b/assets/images/karma_logo_35x32.png Binary files differnew file mode 100755 index 0000000..790ed88 --- /dev/null +++ b/assets/images/karma_logo_35x32.png diff --git a/assets/images/karma_logo_50x46.png b/assets/images/karma_logo_50x46.png Binary files differnew file mode 100755 index 0000000..19dfd91 --- /dev/null +++ b/assets/images/karma_logo_50x46.png diff --git a/assets/images/karma_logo_54x50.png b/assets/images/karma_logo_54x50.png Binary files differnew file mode 100755 index 0000000..6f6842d --- /dev/null +++ b/assets/images/karma_logo_54x50.png diff --git a/assets/images/mathematics.png b/assets/images/mathematics.png Binary files differnew file mode 100755 index 0000000..e8a6ee2 --- /dev/null +++ b/assets/images/mathematics.png diff --git a/assets/images/month_A.png b/assets/images/month_A.png Binary files differnew file mode 100755 index 0000000..a8b02a4 --- /dev/null +++ b/assets/images/month_A.png diff --git a/assets/images/month_B.png b/assets/images/month_B.png Binary files differnew file mode 100755 index 0000000..908c64f --- /dev/null +++ b/assets/images/month_B.png diff --git a/assets/images/month_C.png b/assets/images/month_C.png Binary files differnew file mode 100755 index 0000000..d4a0ae1 --- /dev/null +++ b/assets/images/month_C.png diff --git a/assets/images/month_D.png b/assets/images/month_D.png Binary files differnew file mode 100755 index 0000000..a8b1f28 --- /dev/null +++ b/assets/images/month_D.png diff --git a/assets/images/month_E.png b/assets/images/month_E.png Binary files differnew file mode 100755 index 0000000..3fa8a05 --- /dev/null +++ b/assets/images/month_E.png diff --git a/assets/images/month_F.png b/assets/images/month_F.png Binary files differnew file mode 100755 index 0000000..0daa502 --- /dev/null +++ b/assets/images/month_F.png diff --git a/assets/images/month_G.png b/assets/images/month_G.png Binary files differnew file mode 100755 index 0000000..77e2f7c --- /dev/null +++ b/assets/images/month_G.png diff --git a/assets/images/month_H.png b/assets/images/month_H.png Binary files differnew file mode 100755 index 0000000..3a99b7c --- /dev/null +++ b/assets/images/month_H.png diff --git a/assets/images/month_I.png b/assets/images/month_I.png Binary files differnew file mode 100755 index 0000000..4931ec1 --- /dev/null +++ b/assets/images/month_I.png diff --git a/assets/images/month_J.png b/assets/images/month_J.png Binary files differnew file mode 100755 index 0000000..ee11c0d --- /dev/null +++ b/assets/images/month_J.png diff --git a/assets/images/month_K.png b/assets/images/month_K.png Binary files differnew file mode 100755 index 0000000..16a0dcc --- /dev/null +++ b/assets/images/month_K.png diff --git a/assets/images/month_L.png b/assets/images/month_L.png Binary files differnew file mode 100755 index 0000000..2beef36 --- /dev/null +++ b/assets/images/month_L.png diff --git a/assets/images/music.png b/assets/images/music.png Binary files differnew file mode 100755 index 0000000..0530497 --- /dev/null +++ b/assets/images/music.png diff --git a/assets/images/mystuff.png b/assets/images/mystuff.png Binary files differnew file mode 100755 index 0000000..40d3dba --- /dev/null +++ b/assets/images/mystuff.png diff --git a/assets/images/nepali.png b/assets/images/nepali.png Binary files differnew file mode 100755 index 0000000..08b82a7 --- /dev/null +++ b/assets/images/nepali.png diff --git a/assets/images/olenepal_logo.gif b/assets/images/olenepal_logo.gif Binary files differnew file mode 100755 index 0000000..e520424 --- /dev/null +++ b/assets/images/olenepal_logo.gif diff --git a/assets/images/preview1.jpg b/assets/images/preview1.jpg Binary files differnew file mode 100755 index 0000000..9801ffb --- /dev/null +++ b/assets/images/preview1.jpg diff --git a/assets/images/preview2.jpg b/assets/images/preview2.jpg Binary files differnew file mode 100755 index 0000000..41762a2 --- /dev/null +++ b/assets/images/preview2.jpg diff --git a/assets/images/preview3.jpg b/assets/images/preview3.jpg Binary files differnew file mode 100755 index 0000000..385bef2 --- /dev/null +++ b/assets/images/preview3.jpg diff --git a/assets/images/preview4.jpg b/assets/images/preview4.jpg Binary files differnew file mode 100755 index 0000000..e75def8 --- /dev/null +++ b/assets/images/preview4.jpg diff --git a/assets/images/profile.png b/assets/images/profile.png Binary files differnew file mode 100755 index 0000000..16b5f9b --- /dev/null +++ b/assets/images/profile.png diff --git a/assets/images/resources.png b/assets/images/resources.png Binary files differnew file mode 100755 index 0000000..473bedf --- /dev/null +++ b/assets/images/resources.png diff --git a/assets/images/resources_bw.png b/assets/images/resources_bw.png Binary files differnew file mode 100755 index 0000000..4a1c27d --- /dev/null +++ b/assets/images/resources_bw.png diff --git a/assets/images/science.png b/assets/images/science.png Binary files differnew file mode 100755 index 0000000..7422dcb --- /dev/null +++ b/assets/images/science.png diff --git a/assets/images/tutorial.png b/assets/images/tutorial.png Binary files differnew file mode 100755 index 0000000..6c2fc4a --- /dev/null +++ b/assets/images/tutorial.png diff --git a/assets/images/tutorial_bw.png b/assets/images/tutorial_bw.png Binary files differnew file mode 100755 index 0000000..b25328b --- /dev/null +++ b/assets/images/tutorial_bw.png diff --git a/assets/images/ui-bg_flat_0_aaaaaa_40x100.png b/assets/images/ui-bg_flat_0_aaaaaa_40x100.png Binary files differnew file mode 100755 index 0000000..5b5dab2 --- /dev/null +++ b/assets/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/assets/images/ui-bg_flat_75_ffffff_40x100.png b/assets/images/ui-bg_flat_75_ffffff_40x100.png Binary files differnew file mode 100755 index 0000000..ac8b229 --- /dev/null +++ b/assets/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/assets/images/ui-bg_glass_55_fbf9ee_1x400.png b/assets/images/ui-bg_glass_55_fbf9ee_1x400.png Binary files differnew file mode 100755 index 0000000..ad3d634 --- /dev/null +++ b/assets/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/assets/images/ui-bg_glass_65_ffffff_1x400.png b/assets/images/ui-bg_glass_65_ffffff_1x400.png Binary files differnew file mode 100755 index 0000000..42ccba2 --- /dev/null +++ b/assets/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/assets/images/ui-bg_glass_75_dadada_1x400.png b/assets/images/ui-bg_glass_75_dadada_1x400.png Binary files differnew file mode 100755 index 0000000..5a46b47 --- /dev/null +++ b/assets/images/ui-bg_glass_75_dadada_1x400.png diff --git a/assets/images/ui-bg_glass_75_e6e6e6_1x400.png b/assets/images/ui-bg_glass_75_e6e6e6_1x400.png Binary files differnew file mode 100755 index 0000000..86c2baa --- /dev/null +++ b/assets/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/assets/images/ui-bg_glass_95_fef1ec_1x400.png b/assets/images/ui-bg_glass_95_fef1ec_1x400.png Binary files differnew file mode 100755 index 0000000..4443fdc --- /dev/null +++ b/assets/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png Binary files differnew file mode 100755 index 0000000..7c9fa6c --- /dev/null +++ b/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/assets/images/ui-icons_222222_256x240.png b/assets/images/ui-icons_222222_256x240.png Binary files differnew file mode 100755 index 0000000..ee039dc --- /dev/null +++ b/assets/images/ui-icons_222222_256x240.png diff --git a/assets/images/ui-icons_2e83ff_256x240.png b/assets/images/ui-icons_2e83ff_256x240.png Binary files differnew file mode 100755 index 0000000..45e8928 --- /dev/null +++ b/assets/images/ui-icons_2e83ff_256x240.png diff --git a/assets/images/ui-icons_454545_256x240.png b/assets/images/ui-icons_454545_256x240.png Binary files differnew file mode 100755 index 0000000..7ec70d1 --- /dev/null +++ b/assets/images/ui-icons_454545_256x240.png diff --git a/assets/images/ui-icons_888888_256x240.png b/assets/images/ui-icons_888888_256x240.png Binary files differnew file mode 100755 index 0000000..5ba708c --- /dev/null +++ b/assets/images/ui-icons_888888_256x240.png diff --git a/assets/images/ui-icons_cd0a0a_256x240.png b/assets/images/ui-icons_cd0a0a_256x240.png Binary files differnew file mode 100755 index 0000000..7930a55 --- /dev/null +++ b/assets/images/ui-icons_cd0a0a_256x240.png diff --git a/assets/images/week1.png b/assets/images/week1.png Binary files differnew file mode 100755 index 0000000..6776412 --- /dev/null +++ b/assets/images/week1.png diff --git a/assets/images/week2.png b/assets/images/week2.png Binary files differnew file mode 100755 index 0000000..7b73212 --- /dev/null +++ b/assets/images/week2.png diff --git a/assets/images/week3.png b/assets/images/week3.png Binary files differnew file mode 100755 index 0000000..4ab1f76 --- /dev/null +++ b/assets/images/week3.png diff --git a/assets/images/week4.png b/assets/images/week4.png Binary files differnew file mode 100755 index 0000000..448e403 --- /dev/null +++ b/assets/images/week4.png diff --git a/chakra/grade1.html b/chakra/grade1.html index 102c861..a3d364e 100755 --- a/chakra/grade1.html +++ b/chakra/grade1.html @@ -1,46 +1,46 @@ -<html lang="en"> - +<!doctype html> +<html> <head> <title>Chakra (Alpha)</title> <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> +<meta charset="utf-8"/> <link rel="stylesheet" href="../css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="../css/jquery.jgrowl.css" type="text/css"/> <script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="../js/jquery.ui.all.js"></script> -<script type="text/javascript" src="../js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="../js/jquery.idTabs.min.js"></script> -<link type="image/ico" rel="icon" href="../../assets/default/images/favicon.ico" /> +<link type="image/ico" rel="icon" href="./../assets/images/favicon.ico" /> </head> <body> -<div id="mainmenu"> -<div id="navigation"> -<a href="../index.html"><img src="../assets/default/images/chakra_logo.png" alt="Chakra icon" title="Chakra" class="chakra_logo"></a> -<img src="../assets/default/images/grade1.png" alt="Grade 1 icon" class="icon_left"> - -<img src="../assets/default/images/help.png" alt="Help" title="Help" class="icon_right"> -<img src="../assets/default/images/karma_logo.png" alt="Karma icon" title="About Karma" class="icon_right"> -</div> -<div id="subjects"> -<ul> -<li id="grade1"><a href="grade1english.html"><img src="../assets/default/images/english.png" alt="English" title="English">English</a></li> -<li id="grade2"><a href="grade1mathematics.html"><img src="../assets/default/images/mathematics.png" alt="Mathematics" title="Mathematics">Mathematics</a></li> -<li id="grade3"><a href="#tab_grade3"><img src="../assets/default/images/science.png" alt="Science" title="Science">Science</a></li> -<li id="grade4"><a href="#tab_grade4"><img src="../assets/default/images/geography.png" alt="Geography" title="Geography">Geography</a></li> -<li id="grade5"><a href="#tab_grade5"><img src="../assets/default/images/music.png" alt="Music" title="Music">Music</a></li> -<li id="grade6"><a href="#tab_grade6"><img src="../assets/default/images/nepali.png" alt="Nepali" title="Nepali">Nepali</a></li> -<li id="grade7"><a href="#tab_grade7"><img src="../assets/default/images/history.png" alt="History" title="History">History</a></li> -<li id="grade8"><a href="#tab_grade8"><img src="../assets/default/images/health.png" alt="Health" title="Health">Health</a></li> -</ul> -</div> -</div> +<section id="navigation"> + <nav id="knavbar"> + <a href="../index.html"><img src="../assets/images/chakra_logo.png" alt="Home" title="Chakra Home" class="topNav floatLeft" /></a> + <img src="../assets/images/grade1.png" alt="Grade 1" title="Grade 1" class="topNav floatLeft" /> + <img src="../assets/images/help.png" alt="Help" title="Help" class="topNav floatRight" /> + <img src="../assets/images/karma_logo.png" alt="Karma icon" title="About Karma" class="topNav floatRight" /> + </nav> +</section> + +<section id="middle"> + <section class="middleRow"> + <ul> + <li><a href="grade1english.html"><img src="../assets/images/english.png" alt="English" title="English"><p>English</p></a></li> + <li><a href="grade1mathematics.html"><img src="../assets/images/mathematics.png" alt="Mathematics" title="Mathematics"><p>Mathematics</p></a></li> + <li><a href="#tab_grade3"><img src="../assets/images/science.png" alt="Science" title="Science"><p>Science</p></a></li> + <li><a href="#tab_grade4"><img src="../assets/images/geography.png" alt="Geography" title="Geography"><p>Geography</p></a></li> + </ul> + </section> + <section class="middleRow"> + <ul> + <li><a href="#tab_grade5"><img src="../assets/images/music.png" alt="Music" title="Music"><p>Music</p></a></li> + <li><a href="#tab_grade6"><img src="../assets/images/nepali.png" alt="Nepali" title="Nepali"><p>Nepali</p></a></li> + <li><a href="#tab_grade7"><img src="../assets/images/history.png" alt="History" title="History"><p>History</p></a></li> + <li><a href="#tab_grade8"><img src="../assets/images/health.png" alt="Health" title="Health"><p>Health</p></a></li> + </ul> +</section><!-- end middle --> </body> </html> diff --git a/chakra/grade1e_OLD.html b/chakra/grade1e_OLD.html deleted file mode 100755 index d237779..0000000 --- a/chakra/grade1e_OLD.html +++ /dev/null @@ -1,87 +0,0 @@ -<html lang="en"> - -<head> -<title>Chakra (Alpha)</title> -<meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> - -<link rel="stylesheet" href="css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> - -<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="js/jquery.ui.all.js"></script> -<script type="text/javascript" src="js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="js/jquery.idTabs.min.js"></script> - -</head> - -<body> - -<div id="mainmenu"> -<div id="navigation"> -<a href="index.html"><img src="testdata/chakra_logo.png" alt="Chakra icon" title="Chakra"></a> -<a href="grade1.html"><img src="testdata/grade1.png" alt="Grade 1" title="Grade 1"></a> -<img src="testdata/01_10.png" alt="English icon"> - -<img id="nav_right" src="testdata/help.png" alt="Help" title="Help"> -<img id="nav_right" src="testdata/about.png" alt="Karma icon" title="About Karma"> -<img id="nav_right" src="testdata/mystuff.png" alt="Stuff icon" title="My stuff"> -<img id="nav_right" src="testdata/profile.png" alt="Profile icon" title="My profile"> -</div> -<div id="month_select"> -<ul id="month" class="usual"> -<li id="grade1"><a href="#january">January</a></li> -<li id="grade2"><a href="#february">February</a></li> -<li id="grade3"><a href="#march">March</a></li> -<li id="grade4"><a href="#april">April</a></li> -<li id="grade5"><a href="#may">May</a></li> -<li id="grade6"><a href="#june">June</a></li> -<li id="grade7"><a href="#july">July</a></li> -<li id="grade8"><a href="#august">August</a></li> -<li id="grade5"><a href="#september">September</a></li> -<li id="grade6"><a href="#october">October</a></li> -<li id="grade7"><a href="#november">November</a></li> -<li id="grade8"><a href="#december">December</a></li> -</ul> -</div> -<div id="months"> -<div id="january"> -<div id="week"> -<div id="week1jan">Week 1</div> -<div id="week2jan">Week 2</div> -<div id="week3jan">Week 3</div> -<div id="week4jan">Week 4</div> -<ul id="week" class="usual"> -<li><a href="#week1jan">1</a></li> -<li><a href="#week2jan">2</a></li> -<li><a href="#week3jan">3</a></li> -<li><a href="#week4jan">4</a></li> -</ul> -</div> -</div> -<div id="february">February</div> -<div id="march">March</div> -<div id="april">April</div> -<div id="may">May</div> -<div id="june">June</div> -<div id="july">July</div> -<div id="august">August</div> -<div id="september">September</div> -<div id="october">October</div> -<div id="november">November</div> -<div id="december">December</div> -</div> - -</div> - -<script type="text/javascript"> - $("#month_select").idTabs(); -</script> - -<script type="text/javascript"> - $("#week").idTabs(); -</script> - -</body> -</html> diff --git a/chakra/grade1english.html b/chakra/grade1english.html index f9b6f54..3375a6f 100755 --- a/chakra/grade1english.html +++ b/chakra/grade1english.html @@ -1,189 +1,144 @@ -<html lang="en"> - +<!doctype html> +<html> <head> <title>Chakra (Alpha)</title> <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta charset="utf-8"> <link rel="stylesheet" href="../css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="../css/jquery.jgrowl.css" type="text/css"/> -<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="../js/jquery.ui.all.js"></script> -<script type="text/javascript" src="../js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="../js/jquery.idTabs.min.js"></script> +<script src="../js/jquery-1.3.2.min.js"></script> + +<link type="image/ico" rel="icon" href="./../assets/images/favicon.ico" /> </head> <body> -<div id="mainmenu"> -<div id="navigation"> -<a href="../index.html"><img src="../assets/default/images/chakra_logo.png" alt="Home" title="Home"></a> <a href="grade1.html"><img src="../assets/default/images/grade1.png" alt="Grade 1" title="Grade 1"></a> <img src="../assets/default/images/english.png" alt="English" title="Grade 1 - English"> -<img id="nav_right" src="../assets/default/images/help.png" alt="Help" title="Help"> -<img id="nav_right" src="../assets/default/images/karma_logo.png" alt="Karma icon" title="About Karma"> - -<select id="week_select"> - <option value="1to4" selected>1 - 4</option> - <option value="5to8">5 - 8</option> - <option value="9to12">9 - 12</option> - <option value="13to16">13 - 16</option> - <option value="17to20">17 - 20</option> - <option value="21to24">21 - 24</option> - <option value="25to28">25 - 28</option> - <option value="29to32">29 - 32</option> - <option value="33to36">33 - 36</option> - <option value="37to40">37 - 40</option> - <option value="41to44">41 - 44</option> - <option value="45to48">45 - 48</option> - <option value="49to52">49 - 52</option> -</select> - -</div> - -<div id="curriculum"> -Link to subject curriculum -</div> - -<div id="weeks"> -<div id="1to4"> -<li><a href="#week1">1</a></li> -<li><a href="#week2">2</a></li> -<li><a href="#week3">3</a></li> -<li><a href="#week4">4</a></li> -<br /><br /> -<div id="week1"> -<div id="lesson"> -<div id="preview"> -<img src="../assets/default/images/preview1.jpg"/> -</div> -<div id="lessonname"> -Quadrilaterals -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview2.jpg"/> -<div id="lessonname"> -Adding up to 10 -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview3.jpg"/> -<div id="lessonname"> -Everyday expressions -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview4.jpg"/> -<div id="lessonname"> -Can and can't -</div> -</div> -</div> -<div id="week2"> -<div id="lesson"> -<div id="preview"> -<img src="../assets/default/images/preview2.jpg"/> -</div> -<div id="lessonname"> -Quadrilaterals -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview3.jpg"/> -<div id="lessonname"> -Adding up to 10 -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview4.jpg"/> -<div id="lessonname"> -Everyday expressions -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview1.jpg"/> -<div id="lessonname"> -Can and can't -</div> -</div> -</div> -<div id="week3"> -<div id="lesson"> -<div id="preview"> -<img src="../assets/default/images/preview3.jpg"/> -</div> -<div id="lessonname"> -Quadrilaterals -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview4.jpg"/> -<div id="lessonname"> -Adding up to 10 -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview1.jpg"/> -<div id="lessonname"> -Everyday expressions -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview2.jpg"/> -<div id="lessonname"> -Can and can't -</div> -</div> -</div> -<div id="week4"> -<div id="lesson"> -<div id="preview"> -<img src="../assets/default/images/preview4.jpg"/> -</div> -<div id="lessonname"> -Quadrilaterals -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview1.jpg"/> -<div id="lessonname"> -Adding up to 10 -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview2.jpg"/> -<div id="lessonname"> -Everyday expressions -</div> -</div> -<div id="lesson"> -<img src="../assets/default/images/preview3.jpg"/> -<div id="lessonname"> -Can and can't -</div> -</div> -</div> -</div> -<div id="5to8">5to8</div> -<div id="9to12">9to12</div> -<div id="13to16">13to16</div> -<div id="17to20">17to20</div> -<div id="21to24">21to24</div> -<div id="25to28">25to28</div> -<div id="29to32">29to32</div> -<div id="33to36">33to36</div> -<div id="37to40">37to40</div> -<div id="41to44">41to44</div> -<div id="45to48">45to48</div> -<div id="49to52">49to52</div> -</div> - -</div> - -<script type="text/javascript"> -$('#week_select').change(function() { +<section id="navigation"> + <nav id="knavbar"> + <a href="../index.html"><img src="../assets/images/chakra_logo.png" alt="Home" title="Chakra Home" class="topNav floatLeft" /></a> + <a href="grade1.html"><img src="../assets/images/grade1.png" alt="Grade 1" title="Grade 1" class="topNav floatLeft" /></a> + <img src="../assets/images/english.png" alt="English" title="Grade 1 - English" class="topNav floatLeft" /> + <img id="nav_right" src="../assets/images/help.png" alt="Help" title="Help" class="topNav floatRight" /> + <img id="nav_right" src="../assets/images/karma_logo.png" alt="Karma icon" title="About Karma" class="topNav floatRight" /> + </nav> +</section> + +<section id="middle"> + <section id="curriculum"> + <a href="#">Link</a> to subject curriculum. + </section> + + <section id="monthSelect"> + <header class="inline">Months</header> + <a href="#weeksA"><img src="../assets/images/month_A.png"/></a> + <a href="#weeksB"><img src="../assets/images/month_B.png"/></a> + <a href="#weeksC"><img src="../assets/images/month_C.png"/></a> + <a href="#weeksD"><img src="../assets/images/month_D.png"/></a> + <a href="#weeksE"><img src="../assets/images/month_E.png"/></a> + <a href="#weeksF"><img src="../assets/images/month_F.png"/></a> + <a href="#weeksG"><img src="../assets/images/month_G.png"/></a> + <a href="#weeksH"><img src="../assets/images/month_H.png"/></a> + <a href="#weeksI"><img src="../assets/images/month_I.png"/></a> + <a href="#weeksJ"><img src="../assets/images/month_J.png"/></a> + </section><!-- end monthSelect --> + + <section id="weeksA" class="monthList"> + <header class="inline">Weeks</header> + <a href="#week1"><img src="../assets/images/week1.png"/></a> + <a href="#week2"><img src="../assets/images/week2.png"/></a> + <a href="#week3"><img src="../assets/images/week3.png"/></a> + <a href="#week4"><img src="../assets/images/week4.png"/></a> + + <article id="week1" class="lessonList"> + <header>Week 1</header> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + + <article id="week2" class="lessonList"> + <header>Week 2</header> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + </article> + + <article id="week3" class="lessonList"> + <header>Week 3</header> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + </article> + + <article id="week4" class="lessonList"> + <header>Week 4</header> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + </section><!-- end weeksA --> + <!-- start #weeksB , second month --> + <!-- end it here --> + <!-- etc etc --> +</section><!-- end middle --> + +<script> +/* THIS CODE BELOW IS USELESS - there are no divs named like that anymore! */ +$('#weekSelect').change(function() { $('#weeks div').hide(); var e = '#' + $(':selected', $(this)).attr('value'); $(e).show(); @@ -195,9 +150,7 @@ $('#week_select').change(function() { }); $('#weeks div').hide(); -</script> -<script type="text/javascript"> $(document).ready(function() { $('#weeks div').hide(); var e = '#' + $(':selected', $(this)).attr('value'); @@ -211,10 +164,7 @@ $(document).ready(function() { $('#weeks div').hide(); -</script> - -<script type="text/javascript"> - $("#1to4").idTabs(); +$("#1to4").idTabs(); </script> </body> diff --git a/chakra/grade1mathematics.html b/chakra/grade1mathematics.html index b6a1215..e6f3145 100755 --- a/chakra/grade1mathematics.html +++ b/chakra/grade1mathematics.html @@ -1,104 +1,221 @@ -<!DOCTYPE HTML> -<html lang="en"> - +<!doctype html> +<html> <head> <title>Chakra (Alpha)</title> <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta charset="utf-8"> <link rel="stylesheet" href="../css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="../css/jquery.jgrowl.css" type="text/css"/> -<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="../js/jquery.ui.all.js"></script> -<script type="text/javascript" src="../js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="../js/jquery.idTabs.min.js"></script> +<script src="../js/jquery-1.3.2.min.js"></script> -<link type="image/ico" rel="icon" href="../../assets/default/images/favicon.ico" /> +<link type="image/ico" rel="icon" href="../../assets/images/favicon.ico" /> </head> <body> -<div id="mainmenu"> -<div id="navigation"> -<a href="../index.html"><img class="chakra_logo" src="../assets/default/images/chakra_logo.png" alt="Home" title="Home"></a> -<a href="grade1.html"><img class="icon_left" src="../assets/default/images/grade1.png" alt="Grade 1" title="Grade 1"></a> -<img class="icon_left" src="../assets/default/images/mathematics.png" alt="Mathematics" title="Grade 1 - Mathematics"> - -<div id="week_select"> -<li>Months:</li> -<li><a href="#weeksA" class="selected"><img src="../assets/default/images/month_A.png" class="icon"></a></li> -<li><a href="#weeksB"><img src="../assets/default/images/month_B.png" class="icon"></a></li> -<li><a href="#weeksC"><img src="../assets/default/images/month_C.png" class="icon"></a></li> -<li><a href="#weeksD"><img src="../assets/default/images/month_D.png" class="icon"></a></li> -<li><a href="#weeksE"><img src="../assets/default/images/month_E.png" class="icon"></a></li> -<li><a href="#weeksF"><img src="../assets/default/images/month_F.png" class="icon"></a></li> -<li><a href="#weeksG"><img src="../assets/default/images/month_G.png" class="icon"></a></li> -<li><a href="#weeksH"><img src="../assets/default/images/month_H.png" class="icon"></a></li> -<li><a href="#weeksI"><img src="../assets/default/images/month_I.png" class="icon"></a></li> -<li><a href="#weeksJ"><img src="../assets/default/images/month_J.png" class="icon"></a></li> -</div> - -<img class="icon_right" src="../assets/default/images/help.png" alt="Help" title="Help"> -<img class="icon_right" src="../assets/default/images/karma_logo.png" alt="Karma icon" title="About Karma"> - -</div> - -<div id="weeks"> -<div id="weeksA" class="weeklist"> -<li>Weeks:</li> -<li><a href="#week1"><img src="../assets/default/images/week1.png" class="icon"></a></li> -<li><a href="#week2"><img src="../assets/default/images/week2.png" class="icon"></a></li> -<li><a href="#week3"><img src="../assets/default/images/week3.png" class="icon"></a></li> -<li><a href="#week4"><img src="../assets/default/images/week4.png" class="icon"></a></li> -<br /><br /> -<div id="week1" class="lessonlist"> -<li><a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/default/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10"><div id="lessonname">Adding up to 10</div></a></li> -</div> -<div id="week2" class="lessonlist"> -</div> -<div id="week3" class="lessonlist"> -</div> -<div id="week4" class="lessonlist"> -</div> -</div> -<div id="weeksB" class="weeklist"> -<li>Weeks:</li> -<li><a href="#week5"><img src="../assets/default/images/week1.png" class="icon"></a></li> -<li><a href="#week6"><img src="../assets/default/images/week2.png" class="icon"></a></li> -<li><a href="#week7"><img src="../assets/default/images/week3.png" class="icon"></a></li> -<li><a href="#week8"><img src="../assets/default/images/week4.png" class="icon"></a></li> -<br /><br /> -<div id="week5" class="lessonlist"> -</div> -<div id="week6" class="lessonlist"> -</div> -<div id="week7" class="lessonlist"> -</div> -<div id="week8" class="lessonlist"> -</div> -</div> -</div> -</div> -</div> - -</div> - -<script type="text/javascript"> +<section id="navigation"> + <nav id="knavbar"> + <a href="../index.html"><img src="../assets/images/chakra_logo.png" alt="Home" title="Home" class="topNav floatLeft" /></a> + <a href="grade1.html"><img src="../assets/images/grade1.png" alt="Grade 1" title="Grade 1" class="topNav floatLeft"/></a> + <img src="../assets/images/mathematics.png" alt="Mathematics" title="Grade 1 - Mathematics" class="topNav floatLeft" /> + <img src="../assets/images/help.png" alt="Help" title="Help" class="topNav floatRight" /> + <img src="../assets/images/karma_logo.png" alt="Karma icon" title="About Karma" class="topNav floatRight" /> + </nav> +</section> +<div id="curriculum"><a href="#">subject curriculum</a></div> +<section id="middle"> + + <section id="monthSelect"> + <header class="inline">Months</header> + <a href="#weeksA"><img src="../assets/images/month_A.png"/></a> + <a href="#weeksB"><img src="../assets/images/month_B.png"/></a> + <a href="#weeksC"><img src="../assets/images/month_C.png"/></a> + <a href="#weeksD"><img src="../assets/images/month_D.png"/></a> + <a href="#weeksE"><img src="../assets/images/month_E.png"/></a> + <a href="#weeksF"><img src="../assets/images/month_F.png"/></a> + <a href="#weeksG"><img src="../assets/images/month_G.png"/></a> + <a href="#weeksH"><img src="../assets/images/month_H.png"/></a> + <a href="#weeksI"><img src="../assets/images/month_I.png"/></a> + <a href="#weeksJ"><img src="../assets/images/month_J.png"/></a> + </section><!-- end monthSelect --> + + <section id="weeks"> + <section id="weeksA" class="monthList"> + <header class="inline">Weeks</header> + <a href="#week1"><img src="../assets/images/week1.png"/></a> + <a href="#week2"><img src="../assets/images/week2.png"/></a> + <a href="#week3"><img src="../assets/images/week3.png"/></a> + <a href="#week4"><img src="../assets/images/week4.png"/></a> + + <article id="week1" class="lessonList"> + <header>Week 1</header> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + + <article id="week2" class="lessonList"> + <header>Week 2</header> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + </article> + + <article id="week3" class="lessonList"> + <header>Week 3</header> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + </article> + + <article id="week4" class="lessonList"> + <header>Week 4</header> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + </section><!-- end weeksA --> + <section id="weeksB" class="monthList"> + <header class="inline">Weeks</header> + <a href="#week5"><img src="../assets/images/week1.png"/></a> + <a href="#week6"><img src="../assets/images/week2.png"/></a> + <a href="#week7"><img src="../assets/images/week3.png"/></a> + <a href="#week8"><img src="../assets/images/week4.png"/></a> + + <article id="week5" class="lessonList"> + <div class="lesson"> + <header class="lessonName lesson1">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName lesson2">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName lesson3">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName lesson4">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + + <article id="week6" class="lessonList"> + <header class="lessonName">Week 2 Lessons</header> + </article> + + <article id="week7" class="lessonList"> + <header class="lessonName">Week 3 Lessons</header> + </article> + + <article id="week8" class="lessonList"> + <header class="lessonName">Week 4 Lessons</header> + </article> + </section><!-- end weeksB --> + <section id="weeksC" class="monthList"> + <header class="inline">Weeks</header> + <a href="#week9"><img src="../assets/images/week1.png"/></a> + <a href="#week10"><img src="../assets/images/week2.png"/></a> + <a href="#week11"><img src="../assets/images/week3.png"/></a> + <a href="#week12"><img src="../assets/images/week4.png"/></a> + + <article id="week9" class="lessonList"> + <div class="lesson"> + <header class="lessonName">Quadrilaterals</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview1.jpg" alt="Quadrilaterals" title="Quadrilaterals" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Adding up to 10</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview2.jpg" alt="Adding up to 10" title="Adding up to 10" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Everyday expressions</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview3.jpg" alt="Everyday expressions" title="Everyday expressions" /></a> + </div> + <div class="lesson"> + <header class="lessonName">Can and can't</header> + <a href="../examples/adding_up_to_10/index.html"><img class="preview" src="../assets/images/preview4.jpg" alt="Can and can't" title="Can and can't" /></a> + </div> + </article> + + <article id="week10" class="lessonList"> + <header class="lessonName">Week 2 Lessons</header> + </article> + + <article id="week11" class="lessonList"> + <header class="lessonName">Week 3 Lessons</header> + </article> + + <article id="week12" class="lessonList"> + <header class="lessonName">Week 4 Lessons</header> + </article> + </section><!-- end weeksC --> + </section> +</section> + +<script> $(document).ready(function() { //$('#weeksA').show(); - //$('#week1').show(); }); -</script> -<script type="text/javascript"> - $("#week_select").idTabs(); -</script> +$("#weeks section").idTabs(); +$("#monthSelect").idTabs(); -<script type="text/javascript"> - $("#weeks div").idTabs(); </script> </body> diff --git a/chakra/index_OLD.html b/chakra/index_OLD.html deleted file mode 100755 index 16dde99..0000000 --- a/chakra/index_OLD.html +++ /dev/null @@ -1,85 +0,0 @@ -<html lang="en"> - -<head> -<title>Chakra (Alpha)</title> -<meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> - -<link rel="stylesheet" href="css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> - -<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="js/jquery.ui.all.js"></script> -<script type="text/javascript" src="js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="js/jquery.idTabs.min.js"></script> - -</head> - -<body> - -<ul id="nav-menu" class="usual"> -<li id="grade2"><a href="#tab_grade2">Grade 2</a></li> -<li id="grade3"><a href="#tab_grade3">Grade 3</a></li> -<li id="grade6"><a href="#tab_grade6">Grade 6</a></li> -<li id="menu_assessment"><a href="#tab_assessment">Assessment</a></li> -</ul> - -<div id="tab_grade2"> -<div id="grade-menu"> -<ul id="grade-menu" class="usual"> -<li id="grade2"><a href="#tab_grade2e">English</a></li> -<li id="grade3"><a href="#tab_grade2m">Mathematics</a></li> -<li id="grade6"><a href="#tab_grade2n">Nepali</a></li> -</ul> - -<div id="tab_grade2e"> -<div id="grade2e"> -<iframe frameborder="0" src="grade2e.html" width="100%" height="85%" name="grade_subject"> -</iframe> -</div> -</div> - -<div id="tab_grade2m"> -<div id="grade2m"> -<iframe frameborder="0" src="grade2m.html" width="100%" height="85%" name="grade_subject"> -</iframe> -</div> -</div> - -<div id="tab_grade2n"> -<div id="grade2n"> -<iframe frameborder="0" src="grade2n.html" width="100%" height="86%" name="grade_subject"> -</iframe> -</div> -</div> - -</div> -</div> - -<div id="tab_grade3"> -<div id="grade3"> -Grade 3 -</div> -</div> - -<div id="tab_grade6"> -<div id="grade6"> -Grade 6 -</div> -</div> - -<div id="tab_assessment"> -Assessment -</div> - -<script type="text/javascript"> - $("#grade-menu").idTabs(); -</script> - -<script type="text/javascript"> - $("#nav-menu").idTabs(); -</script> - -</body> -</html> diff --git a/chakra/knavbar.html b/chakra/knavbar.html new file mode 100755 index 0000000..8855a22 --- /dev/null +++ b/chakra/knavbar.html @@ -0,0 +1,12 @@ +<nav id="knavbar" class="name"> + <a id="knavbarHome" href=""> + <img src="assets/images/chakra_logo.png" alt="Home" title="Home" class="topNav floatLeft"/> + </a> + <a id="knavbarHelp" href=""> + <img src="assets/images/help.png" alt="Help" title="Help" class="topNav floatRight"/> + </a> + <a id="knavbarAbout" href=""> + <img id="knavbarAbout" src="assets/images/karma_logo.png" alt="Karma icon" title="About Karma" + class="topNav floatRight"/> + </a> +</nav>
\ No newline at end of file diff --git a/chakra/knavbar.html.~2~ b/chakra/knavbar.html.~2~ new file mode 100755 index 0000000..517254e --- /dev/null +++ b/chakra/knavbar.html.~2~ @@ -0,0 +1,12 @@ +<nav id="knavbar" class="name"> + <a id="knavbarHome" href="" class="url@href"> + <img src="assets/images/chakra_logo.png" alt="Home" title="Home" class="topNav floatLeft"/> + </a> + <a id="knavbarHelp" href=""> + <img src="assets/images/help.png" alt="Help" title="Help" class="topNav floatRight"/> + </a> + <a id="knavbarAbout" href=""> + <img id="knavbarAbout" src="assets/images/karma_logo.png" alt="Karma icon" title="About Karma" + class="topNav floatRight"/> + </a> +</nav>
\ No newline at end of file diff --git a/css/chakra.css b/css/chakra.css index 2374684..7e2362f 100755 --- a/css/chakra.css +++ b/css/chakra.css @@ -1,344 +1,229 @@ +/* ====================================== */ +/* ====== CHAKRA CSS TEMPLATE FILE ====== */ +/* ====================================== */ + +/* ====================================== */ +/* ========= MAIN PROPERTIES ============ */ body { -background:#D8D8D8; -margin:0; -padding:0; + background: #D8D8D8; + margin: 0 auto; + width: 640px; + min-width: 640px; + padding: 0; + font-family: "Georgia", serif; } img { -border: none; -} - -#navigation -{ -background: #6E6E6E; -padding-bottom: 0.1em; -padding-top: 0.1em; -width: 100%; -float: left; -} - -.chakra_logo -{ -float: left; -width: 40px; + border: none; } -.icon_left -{ -float: left; -width: 30px; -} - -.icon_right -{ -float: right; -width: 30px; +.selected { + background: #FFFFFF; } -.nav_left -{ -float: left; -} +/* ====================================== */ +/* ========== HTML ELEMENTS ============= */ +h1 { } +h2 { } +h3 { } +h4 { } +h5 { } +h6 { } +p { } +span { } -.nav_right -{ -float: right; -} - -#month -{ -vertical-align: middle; -float: right; -} - -#mainmenu -{ -width:1200px; -position: fixed; -/*left: 50%; -#margin-left: -320px; */ -} - -#grades -{ -width: 640px; -margin-left: auto; -margin-right: auto; -} - -#grades ul -{ -list-style: none; -padding: 0; -margin: 0; -background:#BDBDBD; -float:left; -} - -#grades ul li -{ -float: left; -} - -#grades ul li a -{ -line-height: 1.5em; -width: 160px; -text-decoration: none; -text-align: center; -font-weight: bold; -float: left; -color:#000000; -height: 8em; -margin-bottom: 0.2em; -margin-top: 0.2em; -} - -#grades ul li img -{ -border: none; -width: 120px; -} - -#grades a:hover { -text-decoration: underline; -outline-width:3px; -outline-style:solid; -outline-color: #424242; -} - -#subjects -{ -width: 640px; -margin-left: auto; -margin-right: auto; -} - -#subjects ul -{ -list-style: none; -padding: 0; -margin: 0; -background:#BDBDBD; -float:left; -width:auto; -} - -#subjects ul li -{ -float: left; -} - -#subjects ul li a -{ -line-height: 2em; -width: 160px; -text-decoration: none; -text-align: center; -font-weight: bold; -float: left; -color:#000000; -height: 9.5em; -margin-bottom: 0.2em; -margin-top: 0.2em; -} - -#subjects ul li img -{ -border: none; -width: 120px; -} - -#subjects a:hover { -text-decoration: underline; -outline-width:3px; -outline-style:solid; -outline-color: #424242; -} - -#week_select -{ -list-style: none; -display: inline; -} - -#week_select li -{ -float:left; -font-weight: bold; -line-height: 2em; +/* ====================================== */ +/* ========== HTML 5 ELEMENTS =========== */ +header, footer, aside, nav, article, section { + display: block; } -#week_select li a -{ -text-decoration: none; -text-align: center; -float: left; -color:#000000; -} - -#week_select a:hover -{ -text-decoration: underline; -background:#BDBDBD; -} - -#week_select a.selected -{ -text-decoration: underline; -background:#BDBDBD; -} - -#lessonname -{ -text-decoration: none; -text-align: center; -font-weight: bold; -} - -#weeks -{ -list-style: none; -background:#BDBDBD; -float: left; -width: 100%; -font-weight: bold; -} - -.preview -{ -width: 250px; -} - -#weeks li -{ -float:left; -} - -.icon -{ -width: 40px -} - - -#weeks li a -{ -text-decoration: none; -text-align: center; -font-weight: bold; -float: left; -color:#000000; -padding-top: 0.2em; -padding-right: 0.2em; -padding-left: 0.2em; -} - -#weeks a:hover { -text-decoration: underline; -background:#BDBDBD; -} - -#weeks a.selected { -text-decoration: underline; -background:#BDBDBD; -} - -.weeklist -{ -background:#6E6E6E; -width: 100%; -} - -.lessonlist a -{ -width: 280px; -height: 220px; -margin-top: 1em; -} - -.lessonlist a:hover { -text-decoration: underline; -outline-width:3px; -outline-style:solid; -outline-color: #424242; -} - -#admin ul +/* ====================================== */ +/* =========== NAVIGATION BAR =========== */ +#navigation { -list-style: none; -padding: 0; -margin: 0; -background:#4080c0; -float:left; -width:1200px; -} + display: block; + width: 100%; + background: #6E6E6E; + padding-top: 0.2em; + padding-bottom: 0.2em; +} + #knavbar { + display: table; + width: 640px; + margin: 0 auto; + } -#admin ul li +#curriculum { -/*float: left;*/ -width: 640px; -margin-left: auto; -margin-right: auto; + padding: 5px; + background: #ccc; + margin: 10px; + display: block; + width: auto; + text-align: right; + display: none; + /* How about putting 'Link to subject curriculum' in the help section ? */ +} + +.topNav { + width: 30px; + height: 30px; + padding: 5px; +} + +.floatLeft { + float: left; +} +.floatRight { + float: right; +} +.inline { + display: inline; +} + +/* ====================================== */ +/* =========== MIDDLE SECTION =========== */ +#middle +{ + display: block; + padding: .5em 0 .5em 0; + background: #BDBDBD; +} + +#middle header { + text-align: center; + font-size: 1.0em; + margin: 5px 0 5px 0; + padding-bottom: 2px; + font-weight: bold; +} + + .middleRow ul { + display: table; + margin: 0 auto; + padding: 0; + background: #BDBDBD; + } + .middleRow ul li { + display: table-cell; + text-align: center; + margin: 0; + border: 3px solid #BDBDBD; + } + .middleRow ul li a { + display: block; + text-decoration: none; + font-weight: bold; + color: #000; + padding: 0.4em; + } + .middleRow ul li a img { + width: 120px; + } + .middleRow ul li:hover { + text-decoration: underline; + border: 3px solid #424242; + } + +/* ====================================== */ +/* ============ ADMIN SECTION =========== */ +#admin { + display: block; + background: #4080c0; + width: 100%; + margin: 0 auto; +} + +#admin ul { + display: table; + list-style: none; + margin: 0 auto; + padding: .5em 0 .5em 0; +} + +#admin ul li { + display: table-cell; + text-align: center; + padding: 0.2em 2em 0.2em 2em; } #admin ul li a { -height: 5.5em; -line-height: 2em; -width: 210px; -text-decoration: none; -text-align: center; -font-weight: bold; -float: left; -color:#000000; -} - -#admin img -{ -width: 60px; + display: block; + text-decoration: none; + font-weight: bold; + color: #000000; } - -#curriculum -{ -width: auto; -text-align: center; -float:right; -background:#BDBDBD; -padding: 3; +#admin ul li a:hover { + text-decoration: underline; } - -#grade-menu -{ -list-style: none; -padding: 0; -margin: 0; -background: #585858; -float:left; -width:100%; +#admin p { + line-height: 0; } -#grade-menu li -{ -float: left; -} - -#grade-menu li a +#admin img { -height: 7%; -width: 7em; -text-decoration: none; -text-align: center; -font-weight: bold; -float: left; -color:#000000; -} - -#grade-menu a:hover { -text-decoration: underline; -} - -#grade-menu a.selected { -text-decoration: underline; + height: 50px; + width: auto; +} + +/* ====================================== */ +/* ====== INDIVIDUAL GRADE SECTION ====== */ +#monthSelect { + text-align: center; + font-size: 1.0em; + font-weight: bold; + padding: 5px 0 5px 0; +} + +.monthList { + /* */ + border-top: 1px solid #666; + text-align: center; + padding: 5px 0 5px 0; +} + +.lessonList { + padding: 1em; + margin: 5px 0 5px 0; + height: 500px; + border-top: 1px dashed #666; +} + + .lessonName { + text-decoration: none; + text-align: center; + font-weight: bold; + font-size: 1.1em; + margin-bottom: 1em; + } + .lessonList img { + display: block; + margin: 0 auto; + padding: 5px; + border: 1px solid #aaa; + background: #ddd; + } + +.lesson { + width: 300px; + height: 250px; + float: left; +} + +.preview{ + width: 250px; +} + +.menuSelectType { + margin: 0; + padding: 0; + text-align: center; +} +.menuSelectType li { + list-style: none; + display: inline; } diff --git a/css/karma.css b/css/karma.css index 0135a5e..bce5ee2 100755 --- a/css/karma.css +++ b/css/karma.css @@ -19,6 +19,3 @@ karma loader } } -.canvas { - -}
\ No newline at end of file diff --git a/docs/css/karma.docs.css b/docs/css/karma.docs.css deleted file mode 100755 index b3b3738..0000000 --- a/docs/css/karma.docs.css +++ /dev/null @@ -1,50 +0,0 @@ -body { - /*text-align:center; /* for IE */ - margin:0 auto; /* for the rest */ - background-color: #6699cc; -} -body,div,h1{ - font-family:verdana, arial; - font-size: 13px; -} -h1{ - font-size:large; - font-weight:400; - margin:0; -} - -#header { - overflow: hidden; - /*background:url(../images/karma_logo.png) no-repeat 0 0;*/ - float:left; -} -.menu ul{ - overflow:hidden; - padding:0 0 0 7px; -} -.menu ul li{ - float:left; - width:125px; - text-align:center; - font-size:12px; - line-height:18px; - padding:0 1px 0 1px; - margin:1px 0 0 0; -} -#content { - overflow: hidden; - border:4px solid #cccccc; - background-color:#ffffff; - margin: 0 auto; - padding: 10px; - width: 950px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; -} -#content h1 { - border-bottom:1px solid #CDCDCD; - display:block; - margin-top:10px; - padding:10px 0 2px; -} - diff --git a/docs/jsdoc/files.html b/docs/files.html index a060477..5f8cf0f 100755 --- a/docs/jsdoc/files.html +++ b/docs/files.html @@ -194,11 +194,23 @@ ul.inheritsList <li><a href="symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="symbols/KGraphic.html">KGraphic</a></li> + <li><a href="symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="symbols/KGroup.html">KGroup</a></li> + <li><a href="symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="symbols/KObject.html">KObject</a></li> + <li><a href="symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -209,10 +221,17 @@ ul.inheritsList <div> - <h2><a href="symbols/src/js_jquery.karma-0.4.js.html">..\js\jquery.karma-0.4.js</a></h2> + <h2><a href="symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a></h2> +Contains karma library <dl> + <dt class="heading">Author:</dt> + <dd>Felipe Lopez Toledo <zer.subzero@gmail.com></dd> + + + <dt class="heading">Version:</dt> + <dd>0.1</dd> @@ -224,7 +243,7 @@ ul.inheritsList </div> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html>
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index f5a497e..ee1e0a7 100755 --- a/docs/index.html +++ b/docs/index.html @@ -1,108 +1,314 @@ -<html lang="en"> - -<head> - <title>Karma - Plugin documentation</title> - <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal,canvas,jquery,plugin" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - - <link type="image/ico" rel="icon" href="http://karma.sugarlabs.org/favicon.ico" /> - - <link title="Karma Framework" rel="index" href="http://karma.sugarlabs.org/" /> - - <link type="text/css" rel="stylesheet" href="css/karma.docs.css" /> - - <script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> - <script type="text/javascript" src="../js/jquery.ui.all.js"></script> - <script type="text/javascript" src="../js/jquery.karma.js"></script> - <script type="text/javascript" src="js/karma.demos.main.js"></script> -</head> - -<body> - <noscript> - Man, you need to enable JavaScript. - </noscript> - - <div id="header"> - <div class="menu"> - <ul> - <li>Home</li> - <li>Blog</li> - <li>Documentation</li> - <li>Demos</li> - <li>About us</li> - <li>Contact</li> - - </ul> - </div> - </div> - <br/> - <div id="content"> - <h1>animation</h1> - <ul> - <li>timeLine</li> - - </ul> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <h1>environment</h1> - <ul> - <li>background</li> - <li>size</li> - - </ul> + <title>JsDoc Reference - Index</title> + <meta name="generator" content="JsDoc Toolkit" /> - <h1>geometry</h1> - <ul> - <li>distance2</li> - <li>distance</li> - <li>point</li> - </ul> - - <h1>image</h1> - <ul> - <li>display</li> - <li>load</li> - <li>spriteImage</li> - </ul> - - <h1>math</h1> - <ul> - <li>round</li> - </ul> - - <h1>sound</h1> - <ul> - <li>load</li> - <li>play</li> - <li>volume</li> - </ul> - - <h1>graphics</h1> - <ul> - <li>circle</li> - <li>ellipse</li> - <li>segment</li> - <li>rectangle</li> - <li>poligon</li> - - </ul> - - <h1>localisation</h1> - <ul> - <li>defaultLanguage</li> - </ul> - - - </div> - + <style type="text/css"> + /* default.css */ +body +{ + font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; + width: 800px; +} +.header +{ + clear: both; + background-color: #ccc; + padding: 8px; +} - <div id="debug"> - </div> - -</body> -</html> +h1 +{ + font-size: 150%; + font-weight: bold; + padding: 0; + margin: 1em 0 0 .3em; +} + +hr +{ + border: none 0; + border-top: 1px solid #7F8FB1; + height: 1px; +} + +pre.code +{ + display: block; + padding: 8px; + border: 1px dashed #ccc; +} + +#index +{ + margin-top: 24px; + float: left; + width: 160px; + position: absolute; + left: 8px; + background-color: #F3F3F3; + padding: 8px; +} + +#content +{ + margin-left: 190px; + width: 600px; +} + +.classList +{ + list-style-type: none; + padding: 0; + margin: 0 0 0 8px; + font-family: arial, sans-serif; + font-size: 1em; + overflow: auto; +} + +.classList li +{ + padding: 0; + margin: 0 0 8px 0; +} + +.summaryTable { width: 100%; } + +h1.classTitle +{ + font-size:170%; + line-height:130%; +} + +h2 { font-size: 110%; } +caption, div.sectionTitle +{ + background-color: #7F8FB1; + color: #fff; + font-size:130%; + text-align: left; + padding: 2px 6px 2px 6px; + border: 1px #7F8FB1 solid; +} + +div.sectionTitle { margin-bottom: 8px; } +.summaryTable thead { display: none; } + +.summaryTable td +{ + vertical-align: top; + padding: 4px; + border-bottom: 1px #7F8FB1 solid; + border-right: 1px #7F8FB1 solid; +} + +/*col#summaryAttributes {}*/ +.summaryTable td.attributes +{ + border-left: 1px #7F8FB1 solid; + width: 140px; + text-align: right; +} + +td.attributes, .fixedFont +{ + line-height: 15px; + color: #002EBE; + font-family: "Courier New",Courier,monospace; + font-size: 13px; +} + +.summaryTable td.nameDescription +{ + text-align: left; + font-size: 13px; + line-height: 15px; +} +.summaryTable td.nameDescription, .description +{ + line-height: 15px; + padding: 4px; + padding-left: 4px; +} +.summaryTable { margin-bottom: 8px; } +ul.inheritsList +{ + list-style: square; + margin-left: 20px; + padding-left: 0; +} +.detailList { + margin-left: 20px; + line-height: 15px; +} +.detailList dt { margin-left: 20px; } +.detailList .heading +{ + font-weight: bold; + padding-bottom: 6px; + margin-left: 0; +} + +.light, td.attributes, .light a:link, .light a:visited +{ + color: #777; + font-style: italic; +} + +.fineprint +{ + text-align: right; + font-size: 10px; +} + </style> + </head> + + <body> + <div id="header"> +</div> + + <div id="index"> + <div align="center"><a href="index.html">Class Index</a> +| <a href="files.html">File Index</a></div> +<hr /> +<h2>Classes</h2> +<ul class="classList"> + + <li><i><a href="symbols/_global_.html">_global_</a></i></li> + + <li><a href="symbols/Karma.html">Karma</a></li> + + <li><a href="symbols/Karma%23geometry.html">Karma#geometry</a></li> + + <li><a href="symbols/Karma%23graphics.html">Karma#graphics</a></li> + + <li><a href="symbols/Karma%23math.html">Karma#math</a></li> + + <li><a href="symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> + + <li><a href="symbols/Karma.KGroup.html">Karma.KGroup</a></li> + + <li><a href="symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="symbols/Karma.KSurface.html">Karma.KSurface</a></li> + +</ul> +<hr /> + </div> + + <div id="content"> + <h1 class="classTitle">Class Index</h1> + + + <div> + <h2><a href="symbols/_global_.html">_global_</a></h2> + + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.html">Karma</a></h2> + + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma%23geometry.html">Karma#geometry</a></h2> + Geometry functions. + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma%23graphics.html">Karma#graphics</a></h2> + Graphics functions. + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma%23math.html">Karma#math</a></h2> + Math functions. + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KGraphic.html">Karma.KGraphic</a></h2> + General methods for any Graphic object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KGroup.html">Karma.KGroup</a></h2> + An object that collects multiple KGraphic objects + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KImage.html">Karma.KImage</a></h2> + General methods for any Image object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KMedia.html">Karma.KMedia</a></h2> + General methods for any Graphic object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KObject.html">Karma.KObject</a></h2> + The basic Karma object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KRectangle.html">Karma.KRectangle</a></h2> + General methods for a rectangle object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KShape.html">Karma.KShape</a></h2> + General methods for any Shape object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KSound.html">Karma.KSound</a></h2> + General methods for any Sound object + </div> + <hr /> + + <div> + <h2><a href="symbols/Karma.KSurface.html">Karma.KSurface</a></h2> + KSurface class + </div> + <hr /> + + + </div> + <div class="fineprint" style="clear:both"> + + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) + </div> + </body> +</html>
\ No newline at end of file diff --git a/docs/jsdoc/index.html b/docs/jsdoc/index.html deleted file mode 100755 index 867469f..0000000 --- a/docs/jsdoc/index.html +++ /dev/null @@ -1,266 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - - <title>JsDoc Reference - Index</title> - <meta name="generator" content="JsDoc Toolkit" /> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> - <div id="header"> -</div> - - <div id="index"> - <div align="center"><a href="index.html">Class Index</a> -| <a href="files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="symbols/_global_.html">_global_</a></i></li> - - <li><a href="symbols/Karma.html">Karma</a></li> - - <li><a href="symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="symbols/KGroup.html">KGroup</a></li> - - <li><a href="symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - </div> - - <div id="content"> - <h1 class="classTitle">Class Index</h1> - - - <div> - <h2><a href="symbols/_global_.html">_global_</a></h2> - - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma.html">Karma</a></h2> - Represents a Karma (master) object. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23geometry.html">Karma#geometry</a></h2> - Geometry functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23graphics.html">Karma#graphics</a></h2> - Graphics functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23math.html">Karma#math</a></h2> - Math functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/KGraphic.html">KGraphic</a></h2> - General methods for any Graphic object - </div> - <hr /> - - <div> - <h2><a href="symbols/KGroup.html">KGroup</a></h2> - - </div> - <hr /> - - <div> - <h2><a href="symbols/KObject.html">KObject</a></h2> - The basic Karma object - </div> - <hr /> - - - </div> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html>
\ No newline at end of file diff --git a/docs/jsdoc/symbols/$.karma.html b/docs/jsdoc/symbols/$.karma.html deleted file mode 100755 index 8b97acf..0000000 --- a/docs/jsdoc/symbols/$.karma.html +++ /dev/null @@ -1,317 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - $.karma</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><a href="../symbols/%24.karma.html">$.karma</a></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class $.karma - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - asdsad - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class $.karma."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/%24.karma.html#constructor">$.karma</a></b>(options) - </div> - <div class="description">asdsx</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>$.karma</b>(options) - </div> - - <div class="description"> - asdsx - - </div> - - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>options</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 18:49:56 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/JSDOC.html b/docs/jsdoc/symbols/JSDOC.html deleted file mode 100755 index 35bb326..0000000 --- a/docs/jsdoc/symbols/JSDOC.html +++ /dev/null @@ -1,412 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - JSDOC</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/JSDOC.html">JSDOC</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Namespace JSDOC - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/JSDOC.js.html">JSDOC.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class JSDOC."> - <caption>Namespace Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/JSDOC.html#constructor">JSDOC</a></b> - </div> - <div class="description">This is the main container for the JSDOC application.</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class JSDOC."> - <caption>Field Summary</caption> - <thead> - <tr> - <th scope="col">Field Attributes</th> - <th scope="col">Field Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont"> - JSDOC.<b><a href="../symbols/JSDOC.html#.VERSION">VERSION</a></b> - </div> - <div class="description">The current version string of this application.</div> - </td> - </tr> - - </tbody> - </table> - - - - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class JSDOC."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">JSDOC.<b><a href="../symbols/JSDOC.html#.usage">usage</a></b>() - </div> - <div class="description">Print out usage information and quit.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Namespace Detail - </div> - - <div class="fixedFont"> - <b>JSDOC</b> - </div> - - <div class="description"> - This is the main container for the JSDOC application. - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - <div class="sectionTitle"> - Field Detail - </div> - - <a name=".VERSION"> </a> - <div class="fixedFont"><static> - - - <span class="light">JSDOC.</span><b>VERSION</b> - - </div> - <div class="description"> - The current version string of this application. - - - </div> - - - - - - - - - - - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".usage"> </a> - <div class="fixedFont"><static> - - - <span class="light">JSDOC.</span><b>usage</b>() - - </div> - <div class="description"> - Print out usage information and quit. - - - </div> - - - - - - - - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 24 2009 16:38:17 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KButton.html b/docs/jsdoc/symbols/KButton.html deleted file mode 100755 index 8525ef8..0000000 --- a/docs/jsdoc/symbols/KButton.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KButton</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KButton - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KButton."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KButton.html#constructor">KButton</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KButton</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KGroup.html b/docs/jsdoc/symbols/KGroup.html deleted file mode 100755 index 803b77c..0000000 --- a/docs/jsdoc/symbols/KGroup.html +++ /dev/null @@ -1,312 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KGroup</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KGroup - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KGroup."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KGroup.html#constructor">KGroup</a></b>() - </div> - <div class="description">Supports multiple objects</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KGroup</b>() - </div> - - <div class="description"> - Supports multiple objects - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KObject-KButton.html b/docs/jsdoc/symbols/KObject-KButton.html deleted file mode 100755 index 6edf89c..0000000 --- a/docs/jsdoc/symbols/KObject-KButton.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KButton</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KButton - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KButton."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KButton.html#constructor">KObject-KButton</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KButton</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KObject-KRectangle.html b/docs/jsdoc/symbols/KObject-KRectangle.html deleted file mode 100755 index 270f7f0..0000000 --- a/docs/jsdoc/symbols/KObject-KRectangle.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KRectangle</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KRectangle - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KRectangle."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KRectangle.html#constructor">KObject-KRectangle</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KRectangle</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KObject-KShape.html b/docs/jsdoc/symbols/KObject-KShape.html deleted file mode 100755 index a5cb395..0000000 --- a/docs/jsdoc/symbols/KObject-KShape.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KShape</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KShape - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KShape."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KShape.html#constructor">KObject-KShape</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KShape</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KObject-KSound.html b/docs/jsdoc/symbols/KObject-KSound.html deleted file mode 100755 index d9feb72..0000000 --- a/docs/jsdoc/symbols/KObject-KSound.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KSound</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KSound - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KSound."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KSound.html#constructor">KObject-KSound</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KSound</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KRectangle.html b/docs/jsdoc/symbols/KRectangle.html deleted file mode 100755 index 600a65d..0000000 --- a/docs/jsdoc/symbols/KRectangle.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KRectangle</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KRectangle - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KRectangle."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KRectangle.html#constructor">KRectangle</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KRectangle</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/KSound.html b/docs/jsdoc/symbols/KSound.html deleted file mode 100755 index 40e6878..0000000 --- a/docs/jsdoc/symbols/KSound.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KSound</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KSound - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KSound."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KSound.html#constructor">KSound</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KSound</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/Karma#geometry.html b/docs/jsdoc/symbols/Karma#geometry.html deleted file mode 100755 index c51d159..0000000 --- a/docs/jsdoc/symbols/Karma#geometry.html +++ /dev/null @@ -1,505 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - Karma#geometry</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Namespace Karma#geometry - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - Geometry functions. - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma#geometry."> - <caption>Namespace Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/Karma%23geometry.html#constructor">Karma#geometry</a></b> - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class Karma#geometry."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#geometry.<b><a href="../symbols/Karma%23geometry.html#.distance">distance</a></b>(Point, Point) - </div> - <div class="description">Get the Euclidian (ordinary) distance between 2 points.</div> - </td> - </tr> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#geometry.<b><a href="../symbols/Karma%23geometry.html#.distance2">distance2</a></b>(Point, Point) - </div> - <div class="description">Get the square of the Euclidian (ordinary) distance between 2 points.</div> - </td> - </tr> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#geometry.<b><a href="../symbols/Karma%23geometry.html#.radians">radians</a></b>(angle) - </div> - <div class="description">Converts a value from degrees to radians.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Namespace Detail - </div> - - <div class="fixedFont"> - <b>Karma#geometry</b> - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".distance"> </a> - <div class="fixedFont"><static> - - <span class="light">{Number}</span> - <span class="light">Karma#geometry.</span><b>distance</b>(Point, Point) - - </div> - <div class="description"> - Get the Euclidian (ordinary) distance between 2 points.<br> - <b>Warning:</b> It's slower than distance2 function - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>Point</b> - - </dt> - <dd>Point No. 0</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>Point</b> - - </dt> - <dd>Point No. 1</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Number}</span> The Euclidian distance</dd> - - </dl> - - - - - <hr /> - - <a name=".distance2"> </a> - <div class="fixedFont"><static> - - <span class="light">{Number}</span> - <span class="light">Karma#geometry.</span><b>distance2</b>(Point, Point) - - </div> - <div class="description"> - Get the square of the Euclidian (ordinary) distance between 2 points.<br> - <b>Warning:</b> It's slower than distance2 function. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>Point</b> - - </dt> - <dd>Point No. 0</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>Point</b> - - </dt> - <dd>Point No. 1</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Number}</span> The square of the Euclidian distance</dd> - - </dl> - - - - - <hr /> - - <a name=".radians"> </a> - <div class="fixedFont"><static> - - <span class="light">{Number}</span> - <span class="light">Karma#geometry.</span><b>radians</b>(angle) - - </div> - <div class="description"> - Converts a value from degrees to radians. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>angle</b> - - </dt> - <dd>The angle in degrees</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Number}</span> The The angle in radians</dd> - - </dl> - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/Karma#graphics.html b/docs/jsdoc/symbols/Karma#graphics.html deleted file mode 100755 index dd26739..0000000 --- a/docs/jsdoc/symbols/Karma#graphics.html +++ /dev/null @@ -1,425 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - Karma#graphics</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Namespace Karma#graphics - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - Graphics functions. - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma#graphics."> - <caption>Namespace Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/Karma%23graphics.html#constructor">Karma#graphics</a></b> - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class Karma#graphics."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#graphics.<b><a href="../symbols/Karma%23graphics.html#.circle">circle</a></b>(args) - </div> - <div class="description">Creates a new circle.</div> - </td> - </tr> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#graphics.<b><a href="../symbols/Karma%23graphics.html#.rectangle">rectangle</a></b>(args) - </div> - <div class="description">Creates a new rectangle.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Namespace Detail - </div> - - <div class="fixedFont"> - <b>Karma#graphics</b> - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".circle"> </a> - <div class="fixedFont"><static> - - - <span class="light">Karma#graphics.</span><b>circle</b>(args) - - </div> - <div class="description"> - Creates a new circle. It's a shortcut for calling 'new KCircle(..)'. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - <hr /> - - <a name=".rectangle"> </a> - <div class="fixedFont"><static> - - - <span class="light">Karma#graphics.</span><b>rectangle</b>(args) - - </div> - <div class="description"> - Creates a new rectangle. It's a shortcut for calling 'new KRectangle(..)'. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/Karma#math.html b/docs/jsdoc/symbols/Karma#math.html deleted file mode 100755 index cedffb5..0000000 --- a/docs/jsdoc/symbols/Karma#math.html +++ /dev/null @@ -1,393 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - Karma#math</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Namespace Karma#math - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - Math functions. - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma#math."> - <caption>Namespace Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/Karma%23math.html#constructor">Karma#math</a></b> - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class Karma#math."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">Karma#math.<b><a href="../symbols/Karma%23math.html#.rand">rand</a></b>(lower, upper) - </div> - <div class="description">Generates a random bumber between lower bound and upper bound inclusive.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Namespace Detail - </div> - - <div class="fixedFont"> - <b>Karma#math</b> - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".rand"> </a> - <div class="fixedFont"><static> - - <span class="light">{Number}</span> - <span class="light">Karma#math.</span><b>rand</b>(lower, upper) - - </div> - <div class="description"> - Generates a random bumber between lower bound and upper bound inclusive. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>lower</b> - - </dt> - <dd>The lower bound</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>upper</b> - - </dt> - <dd>The upper bound</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Number}</span> The generated number</dd> - - </dl> - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/_global_.html b/docs/jsdoc/symbols/_global_.html deleted file mode 100755 index 4d6b4ce..0000000 --- a/docs/jsdoc/symbols/_global_.html +++ /dev/null @@ -1,520 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - _global_</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Built-In Namespace _global_ - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - </p> - -<!-- ============================== constructor summary ==================== --> - - -<!-- ============================== properties summary ===================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class _global_."> - <caption>Field Summary</caption> - <thead> - <tr> - <th scope="col">Field Attributes</th> - <th scope="col">Field Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"> - <b><a href="../symbols/_global_.html#mouse">mouse</a></b> - </div> - <div class="description">Mouse</div> - </td> - </tr> - - </tbody> - </table> - - - - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class _global_."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#Class">Class</a></b>() - </div> - <div class="description">Master Class creator.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#handleEvents">handleEvents</a></b>(ev) - </div> - <div class="description"></div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#valid">valid</a></b>(arg, type, toReturn) - </div> - <div class="description">Checks if the argument (arg) is seted and if its type is 'type'.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - -<!-- ============================== field details ========================== --> - - <div class="sectionTitle"> - Field Detail - </div> - - <a name="mouse"> </a> - <div class="fixedFont"> - - - <b>mouse</b> - - </div> - <div class="description"> - Mouse - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - - - - - - - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name="Class"> </a> - <div class="fixedFont"> - - <span class="light">{Object}</span> - <b>Class</b>() - - </div> - <div class="description"> - Master Class creator. Supports multiple inheritance. -It creates a new Object, the new Object will contain the methods that has each -argument passed (Function or Object). When creating an instance of the new -Object it will use the 'init' function as the initializer.<br> -If there is more than one method with the same name, it'll be overwritten by the -last one.<br> -warning it's NOT optimal. - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Object}</span> A new class</dd> - - </dl> - - - - - <hr /> - - <a name="handleEvents"> </a> - <div class="fixedFont"> - - - <b>handleEvents</b>(ev) - - </div> - <div class="description"> - - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>ev</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - <hr /> - - <a name="valid"> </a> - <div class="fixedFont"> - - - <b>valid</b>(arg, type, toReturn) - - </div> - <div class="description"> - Checks if the argument (arg) is seted and if its type is 'type'.<br> -1. if arg is seted: it returns toReturn if specified, otherwise it returns - 'true' -2. if arg is not seted: it returns 'false' - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - <pre class="code">var msg = "hi"; -valid(msg); //returns true -valid(msg, "String" ); //returns true -valid(msg, "Number"); //returns false -valid(msg, "String",false ); //returns false -valid(msg123); //returns false</pre> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>arg</b> - - </dt> - <dd>The param to check</dd> - - <dt> - <span class="light fixedFont">{Object}</span> <b>type</b> - <i>Optional</i> - </dt> - <dd>The expeted type of 'arg'</dd> - - <dt> - <b>toReturn</b> - <i>Optional</i> - </dt> - <dd>object or value to return in case 1</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd>true | false | toReturn</dd> - - </dl> - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/docs/jsdoc/symbols/src/JSDOC.js.html b/docs/jsdoc/symbols/src/JSDOC.js.html deleted file mode 100755 index 6ef5f20..0000000 --- a/docs/jsdoc/symbols/src/JSDOC.js.html +++ /dev/null @@ -1,112 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/** -<span class='line'> 2</span> @overview -<span class='line'> 3</span> @date $Date: 2009-06-21 23:36:33 +0100 (Sun, 21 Jun 2009) $ -<span class='line'> 4</span> @version $Revision: 801 $ -<span class='line'> 5</span> @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/lib/JSDOC.js $ -<span class='line'> 6</span> @name JSDOC.js -<span class='line'> 7</span> */</span><span class="WHIT"> -<span class='line'> 8</span> -<span class='line'> 9</span> </span><span class="COMM">/** -<span class='line'> 10</span> This is the main container for the JSDOC application. -<span class='line'> 11</span> @namespace -<span class='line'> 12</span> */</span><span class="WHIT"> -<span class='line'> 13</span> </span><span class="NAME">JSDOC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 14</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 15</span> -<span class='line'> 16</span> </span><span class="COMM">/** -<span class='line'> 17</span> @requires Opt -<span class='line'> 18</span> */</span><span class="WHIT"> -<span class='line'> 19</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 20</span> </span><span class="NAME">JSDOC.opt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Opt.get</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'> 21</span> </span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 22</span> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"allfunctions"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 24</span> </span><span class="NAME">c</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"conf"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"directory"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="STRN">"D[]"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"define"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"encoding"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="STRN">"E[]"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"exclude"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"help"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"nocode"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"out"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"private"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"quiet"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"recurse"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">S</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"securemodules"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"suppress"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"template"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">T</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"testmode"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"unique"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"verbose"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"ext"</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 44</span> -<span class='line'> 45</span> </span><span class="COMM">/** The current version string of this application. */</span><span class="WHIT"> -<span class='line'> 46</span> </span><span class="NAME">JSDOC.VERSION</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"2.3.0"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 47</span> -<span class='line'> 48</span> </span><span class="COMM">/** Print out usage information and quit. */</span><span class="WHIT"> -<span class='line'> 49</span> </span><span class="NAME">JSDOC.usage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"USAGE: java -jar jsrun.jar app/run.js [OPTIONS] <SRC_DIR> <SRC_FILE> ..."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"OPTIONS:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -a or --allfunctions\n Include all functions, even undocumented ones.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -c or --conf\n Load a configuration file.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -d=<PATH> or --directory=<PATH>\n Output to this directory (defaults to \"out\").\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -D=\"myVar:My value\" or --define=\"myVar:My value\"\n Multiple. Define a variable, available in JsDoc as JSDOC.opt.D.myVar.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -e=<ENCODING> or --encoding=<ENCODING>\n Use this encoding to read and write files.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -h or --help\n Show this message and exit.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -n or --nocode\n Ignore all code, only document comments with @name tags.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -o=<PATH> or --out=<PATH>\n Print log messages to a file (defaults to stdout).\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -q or --quiet\n Do not output any messages, not even warnings.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -r=<DEPTH> or --recurse=<DEPTH>\n Descend into src directories.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -s or --suppress\n Suppress source code output.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -S or --securemodules\n Use Secure Modules mode to parse source code.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -t=<PATH> or --template=<PATH>\n Required. Use this template to format the output.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -T or --test\n Run all unit tests and exit.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -u or --unique\n Force file names to be unique, but not based on symbol names.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -v or --verbose\n Provide verbose feedback about what is happening.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -x=<EXT>[,EXT]... or --ext=<EXT>[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 72</span> </span><span class="WHIT"> -<span class='line'> 73</span> </span><span class="NAME">quit</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 74</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 75</span> -<span class='line'> 76</span> </span><span class="COMM">/*t: -<span class='line'> 77</span> plan(4, "Testing JSDOC namespace."); -<span class='line'> 78</span> -<span class='line'> 79</span> is( -<span class='line'> 80</span> typeof JSDOC, -<span class='line'> 81</span> "object", -<span class='line'> 82</span> "JSDOC.usage is a function." -<span class='line'> 83</span> ); -<span class='line'> 84</span> -<span class='line'> 85</span> is( -<span class='line'> 86</span> typeof JSDOC.VERSION, -<span class='line'> 87</span> "string", -<span class='line'> 88</span> "JSDOC.VERSION is a string." -<span class='line'> 89</span> ); -<span class='line'> 90</span> -<span class='line'> 91</span> is( -<span class='line'> 92</span> typeof JSDOC.usage, -<span class='line'> 93</span> "function", -<span class='line'> 94</span> "JSDOC.usage is a function." -<span class='line'> 95</span> ); -<span class='line'> 96</span> -<span class='line'> 97</span> is( -<span class='line'> 98</span> typeof JSDOC.opt, -<span class='line'> 99</span> "object", -<span class='line'>100</span> "JSDOC.opt is a object." -<span class='line'>101</span> ); -<span class='line'>102</span> */</span><span class="WHIT"> -<span class='line'>103</span> -<span class='line'>104</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.IO</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">IO.includeDir</span><span class="PUNC">(</span><span class="STRN">"lib/JSDOC/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>105</span> </span></pre></body></html>
\ No newline at end of file diff --git a/docs/jsdoc/symbols/src/js_a.js.html b/docs/jsdoc/symbols/src/js_a.js.html deleted file mode 100755 index 8af5caa..0000000 --- a/docs/jsdoc/symbols/src/js_a.js.html +++ /dev/null @@ -1,767 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe López Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="WHIT"> -<span class='line'> 33</span> -<span class='line'> 34</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 46</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="COMM">/** -<span class='line'> 62</span> Karma -<span class='line'> 63</span> -<span class='line'> 64</span> @class Represents a Karma (master) object -<span class='line'> 65</span> @param {String | Object } Options Constructor arguments -<span class='line'> 66</span> @param options.container Target DIV class that will contain any canvas element created using Karma functions -<span class='line'> 67</span> @param options.language if it's a String, Karma will NOT try to localise the content, instead Karma will assume that this -<span class='line'> 68</span> language file exists and it'll try to load it. -<span class='line'> 69</span> @param options.i18n Object that contains data for i18n. -<span class='line'> 70</span> @param options.i18n.root Parent element where the i18n (Gettext object) shortcut will be attached. -<span class='line'> 71</span> @param options.i18n.shortcut Shortcut for calling i18n. -<span class='line'> 72</span> @param options.fps Frames per second at which Karma will perform any refresh action. -<span class='line'> 73</span> -<span class='line'> 74</span> @version 0.3 alpha -<span class='line'> 75</span> @constructor -<span class='line'> 76</span> **/</span><span class="WHIT"> -<span class='line'> 77</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>103</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>104</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'>105</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>106</span> * get the language acording to the browser language -<span class='line'>107</span> *@returns {Object} <br> -<span class='line'>108</span> *lang: country - language two letters code represented as xx-YY, example: en-US.<br> -<span class='line'>109</span> *langCode*: language code represented as xx, example: en.<br> -<span class='line'>110</span> *countryCode*: country code represented as YY, example: US.<br> -<span class='line'>111</span> **optional -<span class='line'>112</span> **/</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla / ie</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>123</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>124</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>125</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>132</span> <p>creates a new Gettext object and returns a shortcut function to translate strings</p> -<span class='line'>133</span> we use karma.Gettext.js it's a modification of <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> -<span class='line'>134</span> Gettext.js</a> from beril OS. -<span class='line'>135</span> @param {Object} options passed as arguments of the Gettext constructor -<span class='line'>136</span> @returns {Function} generic function to call Gettext functions <br> -<span class='line'>137</span> <ul> -<span class='line'>138</span> <li>1 argument = msgid</li> -<span class='line'>139</span> <li>2 arguments = context, msgid</li> -<span class='line'>140</span> <li>3 arguments = number, singular, plural</li> -<span class='line'>141</span> <li>4 arguments = number, context, singular, plural</li> -<span class='line'>142</span> </ul> -<span class='line'>143</span> **/</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>147</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>151</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>154</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>155</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>157</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>159</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>160</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>162</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>163</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>164</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>165</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>167</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>168</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>169</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>170</span> * It will localise the inline html content and it'll create the localised paths for "images", "sounds", "videos". -<span class='line'>171</span> **/</span><span class="WHIT"> -<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>173</span> </span><span class="WHIT"> -<span class='line'>174</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>177</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>179</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioClip</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>185</span> <p>It will attempt to load a language file, the posible languages are defined on language.alternatives -<span class='line'>186</span> (constructor param).</p> -<span class='line'>187</span> <p>The language file type could be: .po (Pootle). or .json (JSON). The precedence between file types is defined -<span class='line'>188</span> according to which is defined first in supportedLangFileTypes. By default Pootle files has precedence over JSON, -<span class='line'>189</span> files.</p> -<span class='line'>190</span> @returns {String} The name of the language file loaded. Example: en-US.po -<span class='line'>191</span> **/</span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>208</span> </span><span class="WHIT"> -<span class='line'>209</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>210</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>211</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>212</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>213</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>215</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>227</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>230</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>231</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>233</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>245</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>252</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>256</span> -<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>258</span> </span><span class="WHIT"> -<span class='line'>259</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>268</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> -<span class='line'>277</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>281</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>291</span> -<span class='line'>292</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>299</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>302</span> -<span class='line'>303</span> -<span class='line'>304</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> -<span class='line'>307</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>314</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>316</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>320</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>334</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>335</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>342</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>347</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>348</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>349</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>353</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>360</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">array</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">array</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>373</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>374</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>377</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>378</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>379</span> </span><span class="WHIT"> </span><span class="COMM">//callback to check if all the items were loaded or got an error when loading</span><span class="WHIT"> -<span class='line'>380</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>382</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>383</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>384</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="WHIT"> -<span class='line'>388</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>393</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>394</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>395</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>396</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>397</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>398</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>399</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>400</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>401</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>403</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>404</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>405</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>406</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>407</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>408</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>410</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>415</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>416</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>417</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>418</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>419</span> -<span class='line'>420</span> </span><span class="COMM">//Mouse stuff</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>425</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>426</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>427</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>429</span> -<span class='line'>430</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>431</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>434</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>435</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>439</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>440</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>441</span> case "click": break; -<span class='line'>442</span> }*/</span><span class="WHIT"> -<span class='line'>443</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>444</span> for (var i in ev) { -<span class='line'>445</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>446</span> } -<span class='line'>447</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>449</span> -<span class='line'>450</span> </span><span class="COMM">/* -<span class='line'>451</span> Master Class creator -<span class='line'>452</span> supports multiple inheritance, warning it's NOT optimal -<span class='line'>453</span> */</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>457</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>458</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>459</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>461</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>462</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>463</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>464</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>465</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>466</span> }*/</span><span class="WHIT"> -<span class='line'>467</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>469</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>470</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>471</span> -<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>473</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>474</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>475</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>476</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>477</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>478</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>480</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>481</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>482</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>483</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>487</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>488</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>489</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>490</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>491</span> </span><span class="WHIT"> -<span class='line'>492</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>493</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>494</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>504</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>508</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>509</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>510</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>519</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>524</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>526</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> -<span class='line'>533</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>535</span> -<span class='line'>536</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>538</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>541</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>545</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>546</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>549</span> </span><span class="WHIT"> -<span class='line'>550</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>551</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>553</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>554</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>556</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>559</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>560</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>563</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>564</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>566</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>567</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>568</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>569</span> </span><span class="WHIT"> -<span class='line'>570</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="WHIT"> -<span class='line'>572</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>573</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>574</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>582</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>583</span> </span><span class="WHIT"> -<span class='line'>584</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="WHIT"> -<span class='line'>587</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>594</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>595</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>597</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>598</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>599</span> -<span class='line'>600</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>602</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>603</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>604</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>605</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>606</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>607</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>608</span> </span><span class="WHIT"> -<span class='line'>609</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>610</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>611</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>612</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>619</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>620</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>624</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>625</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>630</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>651</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>657</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>659</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>660</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>661</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>665</span> -<span class='line'>666</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>674</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>676</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>677</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>678</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>679</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>680</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>681</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>682</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>683</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>684</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>685</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>687</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>703</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>704</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>705</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>706</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>707</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>715</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>716</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>717</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>718</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>719</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>720</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>721</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>722</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>723</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>724</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>725</span> </span><span class="WHIT"> -<span class='line'>726</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>727</span> -<span class='line'>728</span> </span><span class="COMM">/** -<span class='line'>729</span> * @constructor -<span class='line'>730</span> * @augments KGraphic -<span class='line'>731</span> */</span><span class="WHIT"> -<span class='line'>732</span> </span><span class="WHIT"> -<span class='line'>733</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>734</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>735</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>736</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>737</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>738</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>739</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>740</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>741</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>743</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>744</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>745</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>746</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>747</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>748</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>749</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>750</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>751</span> </span><span class="COMM">//karma wrapper, we avoid using "new"</span><span class="WHIT"> -<span class='line'>752</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>753</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>754</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>755</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>756</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>757</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>758</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>759</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>760</span> </span></pre></body></html>
\ No newline at end of file diff --git a/docs/jsdoc/symbols/src/js_jquery.karma-0.3.js.html b/docs/jsdoc/symbols/src/js_jquery.karma-0.3.js.html deleted file mode 100755 index eb4ab82..0000000 --- a/docs/jsdoc/symbols/src/js_jquery.karma-0.3.js.html +++ /dev/null @@ -1,721 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe L�pez Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="COMM">/** -<span class='line'> 33</span> * @author <a href="mailto:zer.subzero@gmail.com">Felipe L�pez</a> -<span class='line'> 34</span> */</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">$</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 46</span> -<span class='line'> 47</span> </span><span class="COMM">/** -<span class='line'> 48</span> * Karma -<span class='line'> 49</span> * @class Represents a person. -<span class='line'> 50</span> **/</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'> 74</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'> 80</span> * getLanguage -<span class='line'> 81</span> * get the language acording to the browser language -<span class='line'> 82</span> */</span><span class="WHIT"> -<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla / ie</span><span class="WHIT"> -<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>102</span> *i18nWrapper -<span class='line'>103</span> *creates a new Gettext object and returns a shortcut function to translate strings -<span class='line'>104</span> *we use karma.Gettext.js it's a modification of Gettext.js http://jsgettext.berlios.de/doc/html/Gettext.html -<span class='line'>105</span> */</span><span class="WHIT"> -<span class='line'>106</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>107</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>119</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>122</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>123</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>124</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>125</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>132</span> * -<span class='line'>133</span> */</span><span class="WHIT"> -<span class='line'>134</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>135</span> </span><span class="WHIT"> -<span class='line'>136</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>139</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioClip</span><span class="WHIT"> -<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>146</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>147</span> * -<span class='line'>148</span> */</span><span class="WHIT"> -<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>152</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>153</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>154</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>157</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>158</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>161</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>163</span> </span><span class="WHIT"> -<span class='line'>164</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>165</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>166</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>167</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>169</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>170</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>171</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>172</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>173</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>174</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>177</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>185</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>186</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>187</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>190</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>191</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>208</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>209</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>210</span> -<span class='line'>211</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>212</span> </span><span class="WHIT"> -<span class='line'>213</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>226</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>227</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>228</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>230</span> </span><span class="WHIT"> -<span class='line'>231</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>232</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>233</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>234</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>245</span> -<span class='line'>246</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>252</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>256</span> -<span class='line'>257</span> -<span class='line'>258</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="WHIT"> -<span class='line'>261</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>268</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>277</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>281</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>291</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>292</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>299</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>302</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>303</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>304</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>307</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>314</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>316</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">array</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">array</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>320</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="COMM">//callback to check if all the items were loaded or got an error when loading</span><span class="WHIT"> -<span class='line'>334</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>335</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> -<span class='line'>342</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>346</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>347</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>348</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>349</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>353</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>360</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>373</span> -<span class='line'>374</span> </span><span class="COMM">//Mouse stuff</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>377</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>379</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>380</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>383</span> -<span class='line'>384</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>388</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>393</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>394</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>395</span> case "click": break; -<span class='line'>396</span> }*/</span><span class="WHIT"> -<span class='line'>397</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>398</span> for (var i in ev) { -<span class='line'>399</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>400</span> } -<span class='line'>401</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>403</span> -<span class='line'>404</span> </span><span class="COMM">/* -<span class='line'>405</span> Master Class creator -<span class='line'>406</span> supports multiple inheritance, warning it's NOT optimal -<span class='line'>407</span> */</span><span class="WHIT"> -<span class='line'>408</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>409</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>410</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>415</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>416</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>417</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>418</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>419</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>420</span> }*/</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>425</span> -<span class='line'>426</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>427</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>429</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>430</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>431</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>434</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>435</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>439</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>440</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>441</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>442</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>443</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>444</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>445</span> </span><span class="WHIT"> -<span class='line'>446</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>447</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>449</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>450</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>451</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>452</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>453</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>457</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>458</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>459</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>461</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>462</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>463</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>464</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>465</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>466</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>467</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>469</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>470</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>471</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>473</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>474</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>475</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>476</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>477</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>478</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>480</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>481</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>482</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>483</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> -<span class='line'>487</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>488</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>489</span> -<span class='line'>490</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>491</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>492</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>493</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>494</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> -<span class='line'>504</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>508</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>509</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>510</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>519</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> -<span class='line'>524</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> -<span class='line'>526</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>533</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>535</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>536</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> -<span class='line'>538</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> -<span class='line'>541</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>545</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>546</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>549</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>550</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>551</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>553</span> -<span class='line'>554</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>556</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>559</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>560</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="WHIT"> -<span class='line'>563</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>564</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>566</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>567</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>568</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>569</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>570</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>572</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>573</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>574</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>582</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>583</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>584</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>587</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>594</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>595</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>597</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>598</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>599</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>600</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>602</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>603</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>604</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>605</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>606</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>607</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>608</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>609</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>610</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>611</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>612</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>619</span> -<span class='line'>620</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>624</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>625</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>630</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>651</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>657</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>659</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>660</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>661</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>665</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>674</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>676</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>677</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>678</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>679</span> </span><span class="WHIT"> -<span class='line'>680</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>681</span> -<span class='line'>682</span> </span><span class="COMM">/** -<span class='line'>683</span> * @constructor -<span class='line'>684</span> * @augments KGraphic -<span class='line'>685</span> */</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="WHIT"> -<span class='line'>687</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>703</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>704</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>705</span> </span><span class="COMM">//karma wrapper, we avoid using "new"</span><span class="WHIT"> -<span class='line'>706</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>707</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="NAME">jQuery</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>
\ No newline at end of file diff --git a/docs/jsdoc/symbols/src/js_jquery.karma-0.4.js.html b/docs/jsdoc/symbols/src/js_jquery.karma-0.4.js.html deleted file mode 100755 index 188cf21..0000000 --- a/docs/jsdoc/symbols/src/js_jquery.karma-0.4.js.html +++ /dev/null @@ -1,979 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe López Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="COMM">//(function ($) {</span><span class="WHIT"> -<span class='line'> 33</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 34</span> </span><span class="COMM">/** -<span class='line'> 35</span> Checks if the argument (arg) is seted and if its type is 'type'.<br> -<span class='line'> 36</span> 1. if arg is seted: it returns toReturn if specified, otherwise it returns -<span class='line'> 37</span> 'true' -<span class='line'> 38</span> 2. if arg is not seted: it returns 'false' -<span class='line'> 39</span> @param arg The param to check -<span class='line'> 40</span> @param {Object} [type] The expeted type of 'arg' -<span class='line'> 41</span> @param [toReturn] object or value to return in case 1 -<span class='line'> 42</span> @returns true | false | toReturn -<span class='line'> 43</span> @example -<span class='line'> 44</span> var msg = "hi"; -<span class='line'> 45</span> valid(msg); //returns true -<span class='line'> 46</span> valid(msg, "String" ); //returns true -<span class='line'> 47</span> valid(msg, "Number"); //returns false -<span class='line'> 48</span> valid(msg, "String",false ); //returns false -<span class='line'> 49</span> valid(msg123); //returns false -<span class='line'> 50</span> **/</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 63</span> -<span class='line'> 64</span> </span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="COMM">/** -<span class='line'> 66</span> Karma -<span class='line'> 67</span> @class Represents a Karma (master) object. -<span class='line'> 68</span> @param {String | Object } options Constructor arguments -<span class='line'> 69</span> @param {String | Object } [options.container] Target DIV-class that will contain -<span class='line'> 70</span> any canvas element created using Karma functions -<span class='line'> 71</span> @param {String} [options.language] -<span class='line'> 72</span> <ul> -<span class='line'> 73</span> <li>if it's seted: -<span class='line'> 74</span> Karma will assume that the according language file exists and Karma will try -<span class='line'> 75</span> to load it.<li> -<span class='line'> 76</span> <li>if it's not seted: -<span class='line'> 77</span> Karma will localise the content according to the Browser language -<span class='line'> 78</span> </li> -<span class='line'> 79</span> </ul> -<span class='line'> 80</span> @param {Array} [options.language.alternatives] -<span class='line'> 81</span> Alternatives for localizing the content. The first has the priority. -<span class='line'> 82</span> @param {Object} [options.i18n] Object that contains data for i18n. -<span class='line'> 83</span> @param {Object | String} [options.i18n.root=self] -<span class='line'> 84</span> Parent element where the i18n shortcut function will be attached. -<span class='line'> 85</span> @param {String} [options.i18n.shortcut=_] Shortcut for calling i18n. -<span class='line'> 86</span> @param {Number} [options.fps=24] -<span class='line'> 87</span> Frames per second at which Karma will perform any refresh action. -<span class='line'> 88</span> @version 0.3 alpha -<span class='line'> 89</span> **/</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>109</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>119</span> Gets the language acording to the browser language -<span class='line'>120</span> @returns {Object} <br> -<span class='line'>121</span> lang: countryCode and langCode (if specified) -<span class='line'>122</span> langCode*: language code represented as xx, example: en.<br> -<span class='line'>123</span> countryCode*: country code represented as YY, example: US.<br> -<span class='line'>124</span> *optional -<span class='line'>125</span> **/</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla/ie</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>136</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>137</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>138</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'>139</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>141</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>145</span> Creates a new Gettext object and returns a shortcut function to localise -<span class='line'>146</span> defined strings.<br>We use karma.Gettext.js it's a modification of -<span class='line'>147</span> <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> -<span class='line'>148</span> Gettext.js</a> from beril OS. -<span class='line'>149</span> @requires karma.Gettext.js -<span class='line'>150</span> @param {Object} options The arguments of the Gettext constructor -<span class='line'>151</span> @returns {Function} A generic function to call Gettext functions -<span class='line'>152</span> The generic function will call a Gettext function according to the number of arguments passed -<span class='line'>153</span> <table> -<span class='line'>154</span> <tr> -<span class='line'>155</span> <th>No. params</th> -<span class='line'>156</span> <th>Parameters</th> -<span class='line'>157</span> <th>Gettext function called</th> -<span class='line'>158</span> </tr> -<span class='line'>159</span> <tr> -<span class='line'>160</span> <td>1</td> -<span class='line'>161</span> <td>msgid</td> -<span class='line'>162</span> <td>gettext</td> -<span class='line'>163</span> <tr> -<span class='line'>164</span> <td>2</td> -<span class='line'>165</span> <td>context, msgid</td> -<span class='line'>166</span> <td>pgettext</td> -<span class='line'>167</span> </tr> -<span class='line'>168</span> <tr> -<span class='line'>169</span> <td>3</td> -<span class='line'>170</span> <td>number, singular, plural</td> -<span class='line'>171</span> <td>ngettext</td> -<span class='line'>172</span> </tr> -<span class='line'>173</span> <tr> -<span class='line'>174</span> <td>4</td> -<span class='line'>175</span> <td>number, context, singular, plural</td> -<span class='line'>176</span> <td>npgettext</td> -<span class='line'>177</span> </tr> -<span class='line'>178</span> </table> -<span class='line'>179</span> **/</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>185</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>186</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>187</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>190</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>191</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>206</span> Localises the inline html content and it creates the localised paths for -<span class='line'>207</span> "images", "sounds" and "videos". -<span class='line'>208</span> <b>Note:</b>Inline html localisation under development<br> -<span class='line'>209</span> @param {String} lang The language that will be used to localise the content -<span class='line'>210</span> @see <a href="http://wiki.sugarlabs.org/go/Karma/Bundle_layout"> -<span class='line'>211</span> Karma Bundle_layout</a> -<span class='line'>212</span> **/</span><span class="WHIT"> -<span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> -<span class='line'>215</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioFile</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>226</span> It will attempt to load a language file, the posible languages are defined -<span class='line'>227</span> on language.alternatives. -<span class='line'>228</span> <p>The language file type could be: .po (Pootle) or .json (JSON). The -<span class='line'>229</span> precedence between file types is defined according to which is defined first -<span class='line'>230</span> in supportedLangFileTypes. By default Pootle files has precedence over JSON, -<span class='line'>231</span> files.</p> -<span class='line'>232</span> @see Karma -<span class='line'>233</span> @returns {String} The name of the language file loaded. Example: en-US.po -<span class='line'>234</span> **/</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>246</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> -<span class='line'>252</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>256</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>258</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>259</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>261</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>268</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>281</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>291</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>292</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>299</span> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="WHIT"> -<span class='line'>302</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>303</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>304</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>307</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>314</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>316</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> -<span class='line'>320</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>334</span> -<span class='line'>335</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>342</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="COMM">/** -<span class='line'>346</span> Creates a new canvas element. -<span class='line'>347</span> @param {Number} [width=100] canvas width -<span class='line'>348</span> @param {Number} [height=100] canvas height -<span class='line'>349</span> **/</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="WHIT"> -<span class='line'>353</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>360</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>373</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>374</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="COMM">/** -<span class='line'>377</span> Clears a rectangular area within the canvas -<span class='line'>378</span> @param {Number} [x=0] Start position of x -<span class='line'>379</span> @param {Number} [y=0] Start position of y -<span class='line'>380</span> @param {Number} [width=canvas width] Square width -<span class='line'>381</span> @param {Number} [height=canvas height] Square height -<span class='line'>382</span> **/</span><span class="WHIT"> -<span class='line'>383</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>384</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>388</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="COMM">/** -<span class='line'>393</span> @namespace Geometry functions. -<span class='line'>394</span> **/</span><span class="WHIT"> -<span class='line'>395</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>396</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>397</span> Converts a value from degrees to radians. -<span class='line'>398</span> @param {Number} angle The angle in degrees -<span class='line'>399</span> @returns {Number} The The angle in radians -<span class='line'>400</span> **/</span><span class="WHIT"> -<span class='line'>401</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>403</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>404</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>405</span> Get the square of the Euclidian (ordinary) distance between 2 points.<br> -<span class='line'>406</span> <b>Warning:</b> It's slower than distance2 function. -<span class='line'>407</span> @param {Number} Point Point No. 0 -<span class='line'>408</span> @param {Number} Point Point No. 1 -<span class='line'>409</span> @returns {Number} The square of the Euclidian distance -<span class='line'>410</span> **/</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>415</span> Get the Euclidian (ordinary) distance between 2 points.<br> -<span class='line'>416</span> <b>Warning:</b> It's slower than distance2 function -<span class='line'>417</span> @param {Number} Point Point No. 0 -<span class='line'>418</span> @param {Number} Point Point No. 1 -<span class='line'>419</span> @returns {Number} The Euclidian distance -<span class='line'>420</span> **/</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.geometry.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>425</span> </span><span class="COMM">/** -<span class='line'>426</span> @namespace Graphics functions. -<span class='line'>427</span> **/</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>429</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>430</span> Creates a new rectangle. It's a shortcut for calling 'new KRectangle(..)'. -<span class='line'>431</span> **/</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>434</span> Creates a new circle. It's a shortcut for calling 'new KCircle(..)'. -<span class='line'>435</span> **/</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="COMM">/** -<span class='line'>439</span> @namespace Math functions. -<span class='line'>440</span> **/</span><span class="WHIT"> -<span class='line'>441</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>442</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>443</span> Generates a random bumber between lower bound and upper bound inclusive. -<span class='line'>444</span> @param {Number} lower The lower bound -<span class='line'>445</span> @param {Number} upper The upper bound -<span class='line'>446</span> @returns {Number} The generated number -<span class='line'>447</span> **/</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>449</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>450</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>451</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>452</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>453</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="COMM">/** -<span class='line'>457</span> Attaches an Object of Arrays for preloading. There are 3 valid categories (arrays): -<span class='line'>458</span> 'images' for images, 'sounds' for sounds and 'videos' for video files.<br> -<span class='line'>459</span> Any object within any category must have an 'id' and 'file' attributes. -<span class='line'>460</span> Additional attributes will be used as arguments to the constructor of the -<span class='line'>461</span> corresponding object.<br> -<span class='line'>462</span> Any media file successfully loaded will be availabe through the 'library'. -<span class='line'>463</span> The init finishes when all the valid files have finished loading or have -<span class='line'>464</span> failed on the process.<br> -<span class='line'>465</span> Please note that the preloadinf will NOT start unless you call 'main' function. -<span class='line'>466</span> @param {Object} [toLoad] The Object that has the arrays for preloading. -<span class='line'>467</span> @param {Array} [toLoad.images] The images -<span class='line'>468</span> @param {Array} [toLoad.sounds] The sounds -<span class='line'>469</span> @param {Array} [toLoad.videos] The videos -<span class='line'>470</span> @returns {Object} this -<span class='line'>471</span> @see Karma#main -<span class='line'>472</span> @example -<span class='line'>473</span> var k = $.karma ({container: "#karma-main"/}); -<span class='line'>474</span> k.size(1200, 800); -<span class='line'>475</span> k.init({ -<span class='line'>476</span> images: [ -<span class='line'>477</span> {id: "ball", file: "ball.png", localized : false }, -<span class='line'>478</span> ], -<span class='line'>479</span> sounds: [ -<span class='line'>480</span> {id: "correct", file: "correct.ogg" }, -<span class='line'>481</span> ] -<span class='line'>482</span> });//1 image and 1 sound attached to load -<span class='line'>483</span> **/</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>487</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>488</span> -<span class='line'>489</span> </span><span class="COMM">/** -<span class='line'>490</span> Main function. Any Karma function call should be inside the callback function. -<span class='line'>491</span> The callback function will be executed when the preloading finishes. -<span class='line'>492</span> @param {Function} cb The callback funtion -<span class='line'>493</span> @see Karma#init -<span class='line'>494</span> **/</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>504</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>508</span> callback to check if all the items were loaded or got an error when -<span class='line'>509</span> loading -<span class='line'>510</span> **/</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> -<span class='line'>519</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>524</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>526</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>533</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>535</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>536</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>538</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>541</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="COMM">/**A shortcut for calling 'KImage( )' -<span class='line'>545</span> @see KImage -<span class='line'>546</span> **/</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="COMM">/**A shortcut for calling 'KSound( )' -<span class='line'>549</span> @see KSound -<span class='line'>550</span> -<span class='line'>551</span> **/</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>553</span> </span><span class="COMM">/**A shortcut for calling 'KVideo( )' -<span class='line'>554</span> @see KVideo -<span class='line'>555</span> -<span class='line'>556</span> **/</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="COMM">/**A shortcut for calling 'KGroup( )' -<span class='line'>559</span> @see KGroup -<span class='line'>560</span> **/</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="COMM">/**A shortcut for calling 'KButton( )' -<span class='line'>563</span> @see KButton# -<span class='line'>564</span> **/</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>566</span> -<span class='line'>567</span> </span><span class="COMM">/** -<span class='line'>568</span> Mouse -<span class='line'>569</span> **/</span><span class="WHIT"> -<span class='line'>570</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="COMM">/** -<span class='line'>572</span> Gets the 'x' and 'y' mouse coordinates relatives to the canvas -<span class='line'>573</span> @returns {Object} An Object with 'x' and 'y' attributes -<span class='line'>574</span> **/</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>582</span> -<span class='line'>583</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>584</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>587</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>594</span> case "click": break; -<span class='line'>595</span> }*/</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>597</span> for (var i in ev) { -<span class='line'>598</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>599</span> } -<span class='line'>600</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>602</span> -<span class='line'>603</span> </span><span class="COMM">/** -<span class='line'>604</span> Master Class creator. Supports multiple inheritance. -<span class='line'>605</span> It creates a new Object, the new Object will contain the methods that has each -<span class='line'>606</span> argument passed (Function or Object). When creating an instance of the new -<span class='line'>607</span> Object it will use the 'init' function as the initializer.<br> -<span class='line'>608</span> If there is more than one method with the same name, it'll be overwritten by the -<span class='line'>609</span> last one.<br> -<span class='line'>610</span> warning it's NOT optimal. -<span class='line'>611</span> @returns {Object} A new class -<span class='line'>612</span> **/</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>619</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>620</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>624</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>625</span> }*/</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>630</span> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="WHIT"> -<span class='line'>651</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="COMM">/** -<span class='line'>657</span> Karma basic Object -<span class='line'>658</span> @class The basic Karma object -<span class='line'>659</span> @param {Object} [options] Options -<span class='line'>660</span> @param {String} [options.localized = true] The object will be localized -<span class='line'>661</span> **/</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>665</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="COMM">/** -<span class='line'>674</span> Graphics basic Object -<span class='line'>675</span> @class General methods for any Graphic object -<span class='line'>676</span> @param {Object} [options] Options -<span class='line'>677</span> @param {Number} [options.x = 0] The 'x' position of the object -<span class='line'>678</span> @param {Number} [options.y = 0] The 'y' position of the object -<span class='line'>679</span> @param {Number} [options.z = 0] The 'z' index of the object -<span class='line'>680</span> @param {Number} [options.width = 0] The 'width' of the object -<span class='line'>681</span> @param {Number} [options.height = 0] The 'height' of the object -<span class='line'>682</span> @param {Boolean} [options.visible = true] Defines if the object will be visible -<span class='line'>683</span> when drawing -<span class='line'>684</span> @augments KObject -<span class='line'>685</span> **/</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>687</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>703</span> @memberOf KGraphic -<span class='line'>704</span> Determines if the 'x' and 'y' coodinates are inside the object. -<span class='line'>705</span> @returns {Boolean} 'true' if the coordinates are inside or on the border -<span class='line'>706</span> of the object, otherwise 'false' -<span class='line'>707</span> **/</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>715</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>716</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>717</span> </span><span class="COMM">/** -<span class='line'>718</span> Supports multiple objects -<span class='line'>719</span> @class -<span class='line'>720</span> **/</span><span class="WHIT"> -<span class='line'>721</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>722</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>723</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>724</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>725</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>726</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>727</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>728</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>729</span> @memberOf KGroup -<span class='line'>730</span> Adds each argument passed to the funtion to chilNodes. -<span class='line'>731</span> @param {Array:KGraphic} arguments The elements to add to childNodes -<span class='line'>732</span> @see KGroup#draw -<span class='line'>733</span> **/</span><span class="WHIT"> -<span class='line'>734</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>735</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>736</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>737</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>738</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>739</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>740</span> </span><span class="WHIT"> -<span class='line'>741</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>743</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>744</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>745</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>746</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>747</span> @memberOf KGroup -<span class='line'>748</span> Draws all the elements in childNodes. The elements are drawed according -<span class='line'>749</span> to its 'z' (z-index) value. -<span class='line'>750</span> @see KGroup#appendChild -<span class='line'>751</span> **/</span><span class="WHIT"> -<span class='line'>752</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>753</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>754</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>755</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>756</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>757</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>758</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>759</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>760</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>761</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>762</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>763</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>764</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>765</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>766</span> </span><span class="WHIT"> </span><span class="COMM">//TODO </span><span class="WHIT"> -<span class='line'>767</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>768</span> </span><span class="WHIT"> -<span class='line'>769</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>770</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>771</span> -<span class='line'>772</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>773</span> </span><span class="WHIT"> -<span class='line'>774</span> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>775</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>776</span> </span><span class="WHIT"> -<span class='line'>777</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>778</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>779</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>780</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>781</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>782</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>783</span> </span><span class="WHIT"> -<span class='line'>784</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>785</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>786</span> </span><span class="WHIT"> -<span class='line'>787</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>788</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>789</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>790</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>791</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>792</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>793</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>794</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>795</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>796</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>797</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>798</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>799</span> -<span class='line'>800</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>801</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>802</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>803</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>804</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>805</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>806</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>807</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>808</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>809</span> </span><span class="WHIT"> -<span class='line'>810</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>811</span> </span><span class="WHIT"> -<span class='line'>812</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>813</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>814</span> -<span class='line'>815</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>816</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>817</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>818</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>819</span> </span><span class="WHIT"> -<span class='line'>820</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>821</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>822</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>823</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>824</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>825</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>826</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>827</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>828</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>829</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>830</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>831</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>832</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>833</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>834</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>835</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>836</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>837</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>838</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>839</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>840</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>841</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>842</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>843</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>844</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>845</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>846</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>847</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>848</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>849</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>850</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>851</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KMedia*/</span><span class="WHIT"> -<span class='line'>852</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>853</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>854</span> </span><span class="WHIT"> -<span class='line'>855</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>856</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>857</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>858</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>859</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>860</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>861</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>862</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>863</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>864</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>865</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>866</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>867</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>868</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>869</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>870</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>871</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>872</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>873</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>874</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>875</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> -<span class='line'>876</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>877</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>878</span> </span><span class="WHIT"> -<span class='line'>879</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>880</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>881</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>882</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>883</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>884</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>885</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>886</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>887</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>888</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>889</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>890</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>891</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>892</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>893</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>894</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>895</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>896</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>897</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>898</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>899</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>900</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>901</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>902</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>903</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>904</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>905</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>906</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>907</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>908</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>909</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KShape*/</span><span class="WHIT"> -<span class='line'>910</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>911</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>912</span> </span><span class="WHIT"> -<span class='line'>913</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>914</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>915</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>916</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>917</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>918</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>919</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>921</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>922</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>923</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>924</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>925</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>926</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>927</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>928</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>929</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>930</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>931</span> </span><span class="WHIT"> -<span class='line'>932</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>933</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>934</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>935</span> </span><span class="WHIT"> -<span class='line'>936</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>937</span> -<span class='line'>938</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>939</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>940</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> -<span class='line'>941</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>942</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>943</span> </span><span class="WHIT"> -<span class='line'>944</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>945</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>946</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>947</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>948</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>949</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>950</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>951</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>952</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>953</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>954</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>955</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>956</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>957</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>958</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>959</span> </span><span class="COMM">/** -<span class='line'>960</span> Karma function. It's a shotcut for calling 'new Karma(..)' -<span class='line'>961</span> @param [options] Options passed to the Karma constructor -<span class='line'>962</span> @returns {Object} a new Karma object -<span class='line'>963</span> **/</span><span class="WHIT"> -<span class='line'>964</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>965</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>966</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>967</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>968</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>969</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>970</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>971</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>972</span> </span><span class="COMM">//})(jQuery);</span></pre></body></html>
\ No newline at end of file diff --git a/jsdoc/symbols/Karma#geometry.html b/docs/symbols/Karma#geometry.html index c51d159..3f03278 100755 --- a/jsdoc/symbols/Karma#geometry.html +++ b/docs/symbols/Karma#geometry.html @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -224,7 +236,7 @@ ul.inheritsList Geometry functions. - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> @@ -274,7 +286,7 @@ ul.inheritsList <td class="nameDescription"> <div class="fixedFont">Karma#geometry.<b><a href="../symbols/Karma%23geometry.html#.distance">distance</a></b>(Point, Point) </div> - <div class="description">Get the Euclidian (ordinary) distance between 2 points.</div> + <div class="description">Gets the Euclidian (ordinary) distance between 2 points.</div> </td> </tr> @@ -283,7 +295,7 @@ ul.inheritsList <td class="nameDescription"> <div class="fixedFont">Karma#geometry.<b><a href="../symbols/Karma%23geometry.html#.distance2">distance2</a></b>(Point, Point) </div> - <div class="description">Get the square of the Euclidian (ordinary) distance between 2 points.</div> + <div class="description">Gets the square of the Euclidian (ordinary) distance between 2 points.</div> </td> </tr> @@ -352,7 +364,7 @@ ul.inheritsList </div> <div class="description"> - Get the Euclidian (ordinary) distance between 2 points.<br> + Gets the Euclidian (ordinary) distance between 2 points.<br> <b>Warning:</b> It's slower than distance2 function @@ -402,8 +414,7 @@ ul.inheritsList </div> <div class="description"> - Get the square of the Euclidian (ordinary) distance between 2 points.<br> - <b>Warning:</b> It's slower than distance2 function. + Gets the square of the Euclidian (ordinary) distance between 2 points. </div> @@ -499,7 +510,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/Karma#graphics.html b/docs/symbols/Karma#graphics.html index dd26739..a9c8647 100755 --- a/jsdoc/symbols/Karma#graphics.html +++ b/docs/symbols/Karma#graphics.html @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -224,7 +236,7 @@ ul.inheritsList Graphics functions. - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> @@ -419,7 +431,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/Karma#math.html b/docs/symbols/Karma#math.html index cedffb5..fb202dd 100755 --- a/jsdoc/symbols/Karma#math.html +++ b/docs/symbols/Karma#math.html @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -224,7 +236,7 @@ ul.inheritsList Math functions. - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> @@ -387,7 +399,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/KGraphic.html b/docs/symbols/Karma.KGraphic.html index becf747..b384168 100755 --- a/jsdoc/symbols/KGraphic.html +++ b/docs/symbols/Karma.KGraphic.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KGraphic</title> + <title>JsDoc Reference - Karma.KGraphic</title> <style type="text/css"> /* default.css */ @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,25 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KGraphic + Class Karma.KGraphic </h1> <!-- ============================== class summary ========================== --> <p class="description"> <br />Extends - <a href="../symbols/KObject.html">KObject</a>.<br /> + KObject.<br /> General methods for any Graphic object - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KGraphic."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KGraphic."> <caption>Class Summary</caption> <thead> <tr> @@ -245,7 +257,7 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KGraphic.html#constructor">KGraphic</a></b>(options) + <b><a href="../symbols/Karma.KGraphic.html#constructor">Karma.KGraphic</a></b>(options) </div> <div class="description">Graphics basic Object</div> </td> @@ -270,7 +282,7 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KGraphic</b>(options) + <b>Karma.KGraphic</b>(options) </div> <div class="description"> @@ -286,43 +298,43 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <span class="light fixedFont">{Object}</span> <b>options</b> + <span class="light fixedFont">{object}</span> <b>options</b> <i>Optional</i> </dt> <dd>Options</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.x</b> + <span class="light fixedFont">{number}</span> <b>options.x</b> <i>Optional, Default: 0</i> </dt> <dd>The 'x' position of the object</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.y</b> + <span class="light fixedFont">{number}</span> <b>options.y</b> <i>Optional, Default: 0</i> </dt> <dd>The 'y' position of the object</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.z</b> + <span class="light fixedFont">{number}</span> <b>options.z</b> <i>Optional, Default: 0</i> </dt> <dd>The 'z' index of the object</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.width</b> + <span class="light fixedFont">{number}</span> <b>options.width</b> <i>Optional, Default: 0</i> </dt> <dd>The 'width' of the object</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.height</b> + <span class="light fixedFont">{number}</span> <b>options.height</b> <i>Optional, Default: 0</i> </dt> <dd>The 'height' of the object</dd> <dt> - <span class="light fixedFont">{Boolean}</span> <b>options.visible</b> + <span class="light fixedFont">{boolean}</span> <b>options.visible</b> <i>Optional, Default: true</i> </dt> <dd>Defines if the object will be visible @@ -356,7 +368,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/KShape.html b/docs/symbols/Karma.KGroup.html index cbafccf..44a72b5 100755 --- a/docs/jsdoc/symbols/KShape.html +++ b/docs/symbols/Karma.KGroup.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KShape</title> + <title>JsDoc Reference - Karma.KGroup</title> <style type="text/css"> /* default.css */ @@ -191,37 +191,31 @@ ul.inheritsList <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> + <li><a href="../symbols/Karma.html">Karma</a></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> + <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> + <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> + <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/Karma.html">Karma</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> - <li><a href="../symbols/KButton.html">KButton</a></li> + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> - <li><a href="../symbols/KShape.html">KShape</a></li> + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> - <li><a href="../symbols/KSound.html">KSound</a></li> + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -232,23 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KShape + Class Karma.KGroup </h1> <!-- ============================== class summary ========================== --> <p class="description"> + <br />Extends + KGraphic.<br /> + An object that collects multiple KGraphic objects - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KShape."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KGroup."> <caption>Class Summary</caption> <thead> <tr> @@ -261,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KShape.html#constructor">KShape</a></b>() + <b><a href="../symbols/Karma.KGroup.html#constructor">Karma.KGroup</a></b>() </div> - <div class="description"></div> + <div class="description">An object that collects multiple KGraphic objects.</div> </td> </tr> </tbody> @@ -286,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KShape</b>() + <b>Karma.KGroup</b>() </div> <div class="description"> - + An object that collects multiple KGraphic objects. Supports multiple objects. </div> @@ -324,7 +320,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/init.html b/docs/symbols/Karma.KImage.html index e88e59d..5f62391 100755 --- a/docs/jsdoc/symbols/init.html +++ b/docs/symbols/Karma.KImage.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - init</title> + <title>JsDoc Reference - Karma.KImage</title> <style type="text/css"> /* default.css */ @@ -191,8 +191,6 @@ ul.inheritsList <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><a href="../symbols/init.html">init</a></li> - <li><a href="../symbols/Karma.html">Karma</a></li> <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> @@ -201,7 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> + + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> + + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -212,23 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class init + Class Karma.KImage </h1> <!-- ============================== class summary ========================== --> <p class="description"> + <br />Extends + KGraphic, KMedia.<br /> + General methods for any Image object - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class init."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KImage."> <caption>Class Summary</caption> <thead> <tr> @@ -241,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/init.html#constructor">init</a></b>(options) + <b><a href="../symbols/Karma.KImage.html#constructor">Karma.KImage</a></b>(options) </div> - <div class="description"></div> + <div class="description">Image object</div> </td> </tr> </tbody> @@ -266,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>init</b>(options) + <b>Karma.KImage</b>(options) </div> <div class="description"> - + Image object </div> @@ -282,10 +298,16 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <b>options</b> + <span class="light fixedFont">{Object}</span> <b>options</b> + + </dt> + <dd>Constructor arguments.</dd> + + <dt> + <span class="light fixedFont">{Object}</span> <b>options.file</b> </dt> - <dd></dd> + <dd>The image file that will be loaded.</dd> </dl> @@ -315,7 +337,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:22:00 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/init.html b/docs/symbols/Karma.KMedia.html index e88e59d..ee13f36 100755 --- a/jsdoc/symbols/init.html +++ b/docs/symbols/Karma.KMedia.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - init</title> + <title>JsDoc Reference - Karma.KMedia</title> <style type="text/css"> /* default.css */ @@ -191,8 +191,6 @@ ul.inheritsList <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><a href="../symbols/init.html">init</a></li> - <li><a href="../symbols/Karma.html">Karma</a></li> <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> @@ -201,7 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> + + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> + + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -212,23 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class init + Class Karma.KMedia </h1> <!-- ============================== class summary ========================== --> <p class="description"> + <br />Extends + KObject.<br /> + General methods for any Graphic object - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class init."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KMedia."> <caption>Class Summary</caption> <thead> <tr> @@ -241,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/init.html#constructor">init</a></b>(options) + <b><a href="../symbols/Karma.KMedia.html#constructor">Karma.KMedia</a></b>(file, type, options) </div> - <div class="description"></div> + <div class="description">Graphics basic Media object.</div> </td> </tr> </tbody> @@ -266,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>init</b>(options) + <b>Karma.KMedia</b>(file, type, options) </div> <div class="description"> - + Graphics basic Media object. </div> @@ -282,10 +298,23 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <b>options</b> + <span class="light fixedFont">{String}</span> <b>file</b> </dt> - <dd></dd> + <dd>The name of the file that must be loaded</dd> + + <dt> + <span class="light fixedFont">{String}</span> <b>type</b> + + </dt> + <dd>'image', 'sound' or 'video'</dd> + + <dt> + <span class="light fixedFont">{Object}</span> <b>options</b> + <i>Optional</i> + </dt> + <dd>Options that will be passed to the media element + constructor</dd> </dl> @@ -315,7 +344,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:22:00 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/KObject.html b/docs/symbols/Karma.KObject.html index 482fc31..881fba9 100755 --- a/jsdoc/symbols/KObject.html +++ b/docs/symbols/Karma.KObject.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KObject</title> + <title>JsDoc Reference - Karma.KObject</title> <style type="text/css"> /* default.css */ @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,7 +226,7 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KObject + Class Karma.KObject </h1> <!-- ============================== class summary ========================== --> @@ -224,13 +236,13 @@ ul.inheritsList The basic Karma object - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KObject."> <caption>Class Summary</caption> <thead> <tr> @@ -243,7 +255,7 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KObject.html#constructor">KObject</a></b>(options) + <b><a href="../symbols/Karma.KObject.html#constructor">Karma.KObject</a></b>(options) </div> <div class="description">Karma basic Object</div> </td> @@ -268,7 +280,7 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KObject</b>(options) + <b>Karma.KObject</b>(options) </div> <div class="description"> @@ -323,7 +335,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/KGraphic.html b/docs/symbols/Karma.KRectangle.html index becf747..94a1bbc 100755 --- a/docs/jsdoc/symbols/KGraphic.html +++ b/docs/symbols/Karma.KRectangle.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KGraphic</title> + <title>JsDoc Reference - Karma.KRectangle</title> <style type="text/css"> /* default.css */ @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,25 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KGraphic + Class Karma.KRectangle </h1> <!-- ============================== class summary ========================== --> <p class="description"> <br />Extends - <a href="../symbols/KObject.html">KObject</a>.<br /> + KShape.<br /> - General methods for any Graphic object + General methods for a rectangle object - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KGraphic."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KRectangle."> <caption>Class Summary</caption> <thead> <tr> @@ -245,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KGraphic.html#constructor">KGraphic</a></b>(options) + <b><a href="../symbols/Karma.KRectangle.html#constructor">Karma.KRectangle</a></b>(options) </div> - <div class="description">Graphics basic Object</div> + <div class="description">Rectangle object</div> </td> </tr> </tbody> @@ -270,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KGraphic</b>(options) + <b>Karma.KRectangle</b>(options) </div> <div class="description"> - Graphics basic Object + Rectangle object </div> @@ -286,47 +298,34 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <span class="light fixedFont">{Object}</span> <b>options</b> - <i>Optional</i> - </dt> - <dd>Options</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.x</b> - <i>Optional, Default: 0</i> - </dt> - <dd>The 'x' position of the object</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.y</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{object}</span> <b>options</b> + </dt> - <dd>The 'y' position of the object</dd> + <dd>Constructor arguments.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.z</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{number}</span> <b>options.x</b> + </dt> - <dd>The 'z' index of the object</dd> + <dd>The 'x' position.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.width</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{number}</span> <b>options.y</b> + </dt> - <dd>The 'width' of the object</dd> + <dd>The 'y' position.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.height</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{number}</span> <b>options.w</b> + </dt> - <dd>The 'height' of the object</dd> + <dd>The width of the rectangle.</dd> <dt> - <span class="light fixedFont">{Boolean}</span> <b>options.visible</b> - <i>Optional, Default: true</i> + <span class="light fixedFont">{number}</span> <b>options.h</b> + </dt> - <dd>Defines if the object will be visible - when drawing</dd> + <dd>The height of the rectangle.</dd> </dl> @@ -356,7 +355,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/KGraphic.html b/docs/symbols/Karma.KShape.html index becf747..33a70ad 100755 --- a/jsdoc/symbols/KGraphic.html +++ b/docs/symbols/Karma.KShape.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KGraphic</title> + <title>JsDoc Reference - Karma.KShape</title> <style type="text/css"> /* default.css */ @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,25 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KGraphic + Class Karma.KShape </h1> <!-- ============================== class summary ========================== --> <p class="description"> <br />Extends - <a href="../symbols/KObject.html">KObject</a>.<br /> + KMedia.<br /> - General methods for any Graphic object + General methods for any Shape object - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KGraphic."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KShape."> <caption>Class Summary</caption> <thead> <tr> @@ -245,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KGraphic.html#constructor">KGraphic</a></b>(options) + <b><a href="../symbols/Karma.KShape.html#constructor">Karma.KShape</a></b>(options) </div> - <div class="description">Graphics basic Object</div> + <div class="description">Shape object</div> </td> </tr> </tbody> @@ -270,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KGraphic</b>(options) + <b>Karma.KShape</b>(options) </div> <div class="description"> - Graphics basic Object + Shape object </div> @@ -286,47 +298,35 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <span class="light fixedFont">{Object}</span> <b>options</b> - <i>Optional</i> - </dt> - <dd>Options</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.x</b> - <i>Optional, Default: 0</i> - </dt> - <dd>The 'x' position of the object</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.y</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{object}</span> <b>options</b> + </dt> - <dd>The 'y' position of the object</dd> + <dd>Constructor arguments.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.z</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{boolean}</span> <b>options.fill</b> + <i>Optional, Default: true</i> </dt> - <dd>The 'z' index of the object</dd> + <dd>'true' if the Shape will be filled when + drawing.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.width</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{boolean}</span> <b>options.stroke</b> + <i>Optional, Default: true</i> </dt> - <dd>The 'width' of the object</dd> + <dd>'true' if the stroke will be drawn.</dd> <dt> - <span class="light fixedFont">{Number}</span> <b>options.height</b> - <i>Optional, Default: 0</i> + <span class="light fixedFont">{color|string}</span> <b>options.fillStyle</b> + <i>Optional, Default: "#000"</i> </dt> - <dd>The 'height' of the object</dd> + <dd>The fill style of the shape.</dd> <dt> - <span class="light fixedFont">{Boolean}</span> <b>options.visible</b> - <i>Optional, Default: true</i> + <span class="light fixedFont">{color|string}</span> <b>options.strokeStyle</b> + <i>Optional, Default: "#000"</i> </dt> - <dd>Defines if the object will be visible - when drawing</dd> + <dd>The stroke style of the shape.</dd> </dl> @@ -356,7 +356,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/KObject.html b/docs/symbols/Karma.KSound.html index 482fc31..49768aa 100755 --- a/docs/jsdoc/symbols/KObject.html +++ b/docs/symbols/Karma.KSound.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KObject</title> + <title>JsDoc Reference - Karma.KSound</title> <style type="text/css"> /* default.css */ @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,23 +226,25 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KObject + Class Karma.KSound </h1> <!-- ============================== class summary ========================== --> <p class="description"> + <br />Extends + KMedia.<br /> - The basic Karma object + General methods for any Sound object - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KSound."> <caption>Class Summary</caption> <thead> <tr> @@ -243,9 +257,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KObject.html#constructor">KObject</a></b>(options) + <b><a href="../symbols/Karma.KSound.html#constructor">Karma.KSound</a></b>(options) </div> - <div class="description">Karma basic Object</div> + <div class="description">Sound object</div> </td> </tr> </tbody> @@ -268,11 +282,11 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KObject</b>(options) + <b>Karma.KSound</b>(options) </div> <div class="description"> - Karma basic Object + Sound object </div> @@ -285,15 +299,15 @@ ul.inheritsList <dt> <span class="light fixedFont">{Object}</span> <b>options</b> - <i>Optional</i> + </dt> - <dd>Options</dd> + <dd>Constructor arguments.</dd> <dt> - <span class="light fixedFont">{String}</span> <b>options.localized</b> - <i>Optional, Default: true</i> + <span class="light fixedFont">{Object}</span> <b>options.file</b> + </dt> - <dd>The object will be localized</dd> + <dd>The image file that will be loaded.</dd> </dl> @@ -323,7 +337,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/KMedia.html b/docs/symbols/Karma.KSurface.html index 65483fb..146f5d7 100755 --- a/docs/jsdoc/symbols/KMedia.html +++ b/docs/symbols/Karma.KSurface.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - KMedia</title> + <title>JsDoc Reference - Karma.KSurface</title> <style type="text/css"> /* default.css */ @@ -191,8 +191,6 @@ ul.inheritsList <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><a href="../symbols/Karma.html">Karma</a></li> <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> @@ -201,27 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KMedia.html">KMedia</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -232,23 +226,23 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class KMedia + Class Karma.KSurface </h1> <!-- ============================== class summary ========================== --> <p class="description"> + KSurface class - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KMedia."> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma.KSurface."> <caption>Class Summary</caption> <thead> <tr> @@ -261,9 +255,9 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/KMedia.html#constructor">KMedia</a></b>(options) + <b><a href="../symbols/Karma.KSurface.html#constructor">Karma.KSurface</a></b>(options, width, height, fps, visible) </div> - <div class="description"></div> + <div class="description">Creates a new surface.</div> </td> </tr> </tbody> @@ -275,42 +269,6 @@ ul.inheritsList <!-- ============================== methods summary ======================== --> - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class KMedia."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">KMedia.<b><a href="../symbols/KMedia.html#.isReady">isReady</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">KMedia.<b><a href="../symbols/KMedia.html#.play">play</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - - </tbody> - </table> - - - - <!-- ============================== events summary ======================== --> @@ -322,11 +280,23 @@ ul.inheritsList </div> <div class="fixedFont"> - <b>KMedia</b>(options) + <b>Karma.KSurface</b>(options, width, height, fps, visible) </div> <div class="description"> - + Creates a new surface. A surface is a 'canvas' element with additional methods +that makes easier its manipulation. <br> +There are 2 ways to create a new KSurface: +<ol> + <li><b>Using an existing canvas element:</b>You must provide at least + the 'canvas' parameter. The 'name' is optional (if it's not provided the + 'canvas' parameter will be used). + </li> + <li><b>Creating a new canvas element:</b> A new 'canvas' element will be + created and it will be appended to the specific 'container'. + You must provide at least the 'name' and 'container' parameters. + </li> +</ol> </div> @@ -338,10 +308,55 @@ ul.inheritsList <dt class="heading">Parameters:</dt> <dt> - <b>options</b> + <span class="light fixedFont">{object}</span> <b>options</b> </dt> - <dd></dd> + <dd>Constructor options.</dd> + + <dt> + <span class="light fixedFont">{string}</span> <b>options.name</b> + <i>Optional</i> + </dt> + <dd>The desired name for the surface. The value must + be unique among others KSurfaces-name objects.</dd> + + <dt> + <span class="light fixedFont">{string}</span> <b>options.canvas</b> + <i>Optional</i> + </dt> + <dd>The name of the element. Commonly the + canvas-id value.</dd> + + <dt> + <span class="light fixedFont">{string | object}</span> <b>options.container</b> + <i>Optional</i> + </dt> + <dd>The the name of the container + element. Commonly a div-id value.</dd> + + <dt> + <span class="light fixedFont">{number}</span> <b>width</b> + <i>Optional, Default: 100</i> + </dt> + <dd>The width of the canvas.</dd> + + <dt> + <span class="light fixedFont">{number}</span> <b>height</b> + <i>Optional, Default: 100</i> + </dt> + <dd>The height of the canvas.</dd> + + <dt> + <span class="light fixedFont">{number}</span> <b>fps</b> + <i>Optional, Default: 24</i> + </dt> + <dd>The frames per second for any refresh operation.</dd> + + <dt> + <span class="light fixedFont">{boolean}</span> <b>visible</b> + <i>Optional, Default: true</i> + </dt> + <dd>'true' if the content is visible (will be drawn).</dd> </dl> @@ -360,61 +375,6 @@ ul.inheritsList <!-- ============================== method details ========================= --> - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".isReady"> </a> - <div class="fixedFont"><static> - - - <span class="light">KMedia.</span><b>isReady</b>() - - </div> - <div class="description"> - - - - </div> - - - - - - - - - - - - <hr /> - - <a name=".play"> </a> - <div class="fixedFont"><static> - - - <span class="light">KMedia.</span><b>play</b>() - - </div> - <div class="description"> - - - - </div> - - - - - - - - - - - - - - <!-- ============================== event details ========================= --> @@ -426,7 +386,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/jsdoc/symbols/Karma.html b/docs/symbols/Karma.html index ab80ea6..8a342fe 100755 --- a/docs/jsdoc/symbols/Karma.html +++ b/docs/symbols/Karma.html @@ -199,11 +199,23 @@ ul.inheritsList <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> - <li><a href="../symbols/KGroup.html">KGroup</a></li> + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> - <li><a href="../symbols/KObject.html">KObject</a></li> + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -214,24 +226,24 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Class Karma + Namespace Karma </h1> <!-- ============================== class summary ========================== --> <p class="description"> - Represents a Karma (master) object. - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. + + <br /><i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </p> <!-- ============================== constructor summary ==================== --> <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma."> - <caption>Class Summary</caption> + <caption>Namespace Summary</caption> <thead> <tr> <th scope="col">Constructor Attributes</th> @@ -243,7 +255,7 @@ ul.inheritsList <td class="attributes"> </td> <td class="nameDescription" > <div class="fixedFont"> - <b><a href="../symbols/Karma.html#constructor">Karma</a></b>(options) + <b><a href="../symbols/Karma.html#constructor">Karma</a></b> </div> <div class="description">Karma</div> </td> @@ -275,120 +287,72 @@ ul.inheritsList <tbody> <tr> - <td class="attributes"> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#button">button</a></b>(args) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.button">button</a></b>(args) </div> <div class="description">A shortcut for calling 'KButton( )'</div> </td> </tr> <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#clear">clear</a></b>(x, y, width, height) - </div> - <div class="description">Clears a rectangular area within the canvas</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-getLanguage">getLanguage</a></b>() - </div> - <div class="description">Gets the language acording to the browser language</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#group">group</a></b>(args) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.group">group</a></b>(args) </div> <div class="description">A shortcut for calling 'KGroup( )'</div> </td> </tr> <tr> - <td class="attributes"><inner> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-i18nWrapper">i18nWrapper</a></b>(options) - </div> - <div class="description">Creates a new Gettext object and returns a shortcut function to localise - defined strings.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#image">image</a></b>(args) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.image">image</a></b>(args) </div> <div class="description">A shortcut for calling 'KImage( )'</div> </td> </tr> <tr> - <td class="attributes"> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#init">init</a></b>(toLoad) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.init">init</a></b>(toLoad) </div> - <div class="description">Attaches an Object of Arrays for preloading.</div> + <div class="description"></div> </td> </tr> <tr> - <td class="attributes"><inner> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-loadAlternatives">loadAlternatives</a></b>() - </div> - <div class="description">It will attempt to load a language file, the posible languages are defined - on language.alternatives.</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-localiseContent">localiseContent</a></b>(lang) - </div> - <div class="description">Localises the inline html content and it creates the localised paths for - "images", "sounds" and "videos".</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#main">main</a></b>(cb) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.main">main</a></b>(cb) </div> <div class="description">Main function.</div> </td> </tr> <tr> - <td class="attributes"> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#size">size</a></b>(width, height) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.sound">sound</a></b>(args) </div> - <div class="description">Creates a new canvas element.</div> + <div class="description">A shortcut for calling 'KSound( )'</div> </td> </tr> <tr> - <td class="attributes"> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#sound">sound</a></b>(args) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.surface">surface</a></b>(options) </div> - <div class="description">A shortcut for calling 'KSound( )'</div> + <div class="description">A shortcut for calling 'KSurface(.</div> </td> </tr> <tr> - <td class="attributes"> </td> + <td class="attributes"><static> </td> <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#video">video</a></b>(args) + <div class="fixedFont">Karma.<b><a href="../symbols/Karma.html#.video">video</a></b>(args) </div> <div class="description">A shortcut for calling 'KVideo( )'</div> </td> @@ -407,11 +371,11 @@ ul.inheritsList <div class="details"><a name="constructor"> </a> <div class="sectionTitle"> - Class Detail + Namespace Detail </div> <div class="fixedFont"> - <b>Karma</b>(options) + <b>Karma</b> </div> <div class="description"> @@ -436,51 +400,14 @@ ul.inheritsList <span class="light fixedFont">{String | Object}</span> <b>options.container</b> <i>Optional</i> </dt> - <dd>Target DIV-class that will contain + <dd>Target DIV-class that will contain any canvas element created using Karma functions</dd> <dt> <span class="light fixedFont">{String}</span> <b>options.language</b> <i>Optional</i> </dt> - <dd><ul> - <li>if it's seted: - Karma will assume that the according language file exists and Karma will try - to load it.<li> - <li>if it's not seted: - Karma will localise the content according to the Browser language - </li> - </ul></dd> - - <dt> - <span class="light fixedFont">{Array}</span> <b>options.language.alternatives</b> - <i>Optional</i> - </dt> - <dd>Alternatives for localizing the content. The first has the priority.</dd> - - <dt> - <span class="light fixedFont">{Object}</span> <b>options.i18n</b> - <i>Optional</i> - </dt> - <dd>Object that contains data for i18n.</dd> - - <dt> - <span class="light fixedFont">{Object | String}</span> <b>options.i18n.root</b> - <i>Optional, Default: self</i> - </dt> - <dd>Parent element where the i18n shortcut function will be attached.</dd> - - <dt> - <span class="light fixedFont">{String}</span> <b>options.i18n.shortcut</b> - <i>Optional, Default: _</i> - </dt> - <dd>Shortcut for calling i18n.</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.fps</b> - <i>Optional, Default: 24</i> - </dt> - <dd>Frames per second at which Karma will perform any refresh action.</dd> + <dd></dd> </dl> @@ -503,11 +430,11 @@ ul.inheritsList Method Detail </div> - <a name="button"> </a> - <div class="fixedFont"> + <a name=".button"> </a> + <div class="fixedFont"><static> - - <b>button</b>(args) + <span class="light">{Object}</span> + <span class="light">Karma.</span><b>button</b>(args) </div> <div class="description"> @@ -534,113 +461,30 @@ ul.inheritsList - - <dl class="detailList"> - <dt class="heading">See:</dt> + <dt class="heading">Returns:</dt> - <dd>KButton#</dd> + <dd><span class="light fixedFont">{Object}</span> new instance of KButton object</dd> </dl> - - <hr /> - - <a name="clear"> </a> - <div class="fixedFont"> - - - <b>clear</b>(x, y, width, height) - - </div> - <div class="description"> - Clears a rectangular area within the canvas - </div> - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>x</b> - <i>Optional, Default: 0</i> - </dt> - <dd>Start position of x</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>y</b> - <i>Optional, Default: 0</i> - </dt> - <dd>Start position of y</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>width</b> - <i>Optional, Default: canvas width</i> - </dt> - <dd>Square width</dd> + <dt class="heading">See:</dt> - <dt> - <span class="light fixedFont">{Number}</span> <b>height</b> - <i>Optional, Default: canvas height</i> - </dt> - <dd>Square height</dd> + <dd>KButton</dd> </dl> - - - - - - <hr /> - <a name="-getLanguage"> </a> - <div class="fixedFont"><inner> + <a name=".group"> </a> + <div class="fixedFont"><static> <span class="light">{Object}</span> - <b>getLanguage</b>() - - </div> - <div class="description"> - Gets the language acording to the browser language - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Object}</span> <br> - lang: countryCode and langCode (if specified) - langCode*: language code represented as xx, example: en.<br> - countryCode*: country code represented as YY, example: US.<br> -optional</dd> - - </dl> - - - - - <hr /> - - <a name="group"> </a> - <div class="fixedFont"> - - - <b>group</b>(args) + <span class="light">Karma.</span><b>group</b>(args) </div> <div class="description"> @@ -667,103 +511,30 @@ optional</dd> - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/KGroup.html">KGroup</a></dd> - - </dl> - - - <hr /> - - <a name="-i18nWrapper"> </a> - <div class="fixedFont"><inner> - - <span class="light">{Function}</span> - <b>i18nWrapper</b>(options) - - </div> - <div class="description"> - Creates a new Gettext object and returns a shortcut function to localise - defined strings.<br>We use karma.Gettext.js it's a modification of - <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> - Gettext.js</a> from beril OS. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Object}</span> <b>options</b> - - </dt> - <dd>The arguments of the Gettext constructor</dd> - - </dl> - - - - - <dl class="detailList"> <dt class="heading">Returns:</dt> - <dd><span class="light fixedFont">{Function}</span> A generic function to call Gettext functions - The generic function will call a Gettext function according to the number of arguments passed - <table> - <tr> - <th>No. params</th> - <th>Parameters</th> - <th>Gettext function called</th> - </tr> - <tr> - <td>1</td> - <td>msgid</td> - <td>gettext</td> - <tr> - <td>2</td> - <td>context, msgid</td> - <td>pgettext</td> - </tr> - <tr> - <td>3</td> - <td>number, singular, plural</td> - <td>ngettext</td> - </tr> - <tr> - <td>4</td> - <td>number, context, singular, plural</td> - <td>npgettext</td> - </tr> - </table></dd> + <dd><span class="light fixedFont">{Object}</span> new instance of KGroup object</dd> </dl> + <dl class="detailList"> - <dt class="heading">Requires:</dt> + <dt class="heading">See:</dt> - <dd>karma.Gettext.js</dd> + <dd>KGroup</dd> </dl> - <hr /> - <a name="image"> </a> - <div class="fixedFont"> - + <a name=".image"> </a> + <div class="fixedFont"><static> - <b>image</b>(args) + <span class="light">{Object}</span> + <span class="light">Karma.</span><b>image</b>(args) </div> <div class="description"> @@ -790,6 +561,13 @@ optional</dd> + <dl class="detailList"> + <dt class="heading">Returns:</dt> + + <dd><span class="light fixedFont">{Object}</span> new instance of KImage object</dd> + + </dl> + <dl class="detailList"> @@ -802,42 +580,21 @@ optional</dd> <hr /> - <a name="init"> </a> - <div class="fixedFont"> + <a name=".init"> </a> + <div class="fixedFont"><static> <span class="light">{Object}</span> - <b>init</b>(toLoad) + <span class="light">Karma.</span><b>init</b>(toLoad) </div> <div class="description"> - Attaches an Object of Arrays for preloading. There are 3 valid categories (arrays): -'images' for images, 'sounds' for sounds and 'videos' for video files.<br> -Any object within any category must have an 'id' and 'file' attributes. -Additional attributes will be used as arguments to the constructor of the -corresponding object.<br> -Any media file successfully loaded will be availabe through the 'library'. -The init finishes when all the valid files have finished loading or have -failed on the process.<br> -Please note that the preloadinf will NOT start unless you call 'main' function. + </div> - <pre class="code">var k = $.karma ({container: "#karma-main"/}); -k.size(1200, 800); -k.init({ - images: [ - {id: "ball", file: "ball.png", localized : false }, - ], - sounds: [ - {id: "correct", file: "correct.ogg" }, - ] -});//1 image and 1 sound attached to load</pre> - - - <dl class="detailList"> <dt class="heading">Parameters:</dt> @@ -881,71 +638,19 @@ k.init({ - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/Karma.html#main">Karma#main</a></dd> - - </dl> - - - <hr /> - - <a name="-loadAlternatives"> </a> - <div class="fixedFont"><inner> - - <span class="light">{String}</span> - <b>loadAlternatives</b>() - - </div> - <div class="description"> - It will attempt to load a language file, the posible languages are defined - on language.alternatives. - <p>The language file type could be: .po (Pootle) or .json (JSON). The - precedence between file types is defined according to which is defined first - in supportedLangFileTypes. By default Pootle files has precedence over JSON, - files.</p> - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{String}</span> The name of the language file loaded. Example: en-US.po</dd> - - </dl> - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/Karma.html">Karma</a></dd> - - </dl> - <hr /> - <a name="-localiseContent"> </a> - <div class="fixedFont"><inner> + <a name=".main"> </a> + <div class="fixedFont"><static> - <b>localiseContent</b>(lang) + <span class="light">Karma.</span><b>main</b>(cb) </div> <div class="description"> - Localises the inline html content and it creates the localised paths for - "images", "sounds" and "videos". - <b>Note:</b>Inline html localisation under development<br> + Main function. Any Karma function call should be inside the callback function. +The callback function will be executed when the preloading finishes. </div> @@ -957,10 +662,10 @@ k.init({ <dt class="heading">Parameters:</dt> <dt> - <span class="light fixedFont">{String}</span> <b>lang</b> + <span class="light fixedFont">{Function}</span> <b>cb</b> </dt> - <dd>The language that will be used to localise the content</dd> + <dd>The callback funtion</dd> </dl> @@ -973,24 +678,22 @@ k.init({ <dl class="detailList"> <dt class="heading">See:</dt> - <dd><a href="http://wiki.sugarlabs.org/go/Karma/Bundle_layout"> - Karma Bundle_layout</a></dd> + <dd><a href="../symbols/Karma.html#.init">Karma#init</a></dd> </dl> <hr /> - <a name="main"> </a> - <div class="fixedFont"> + <a name=".sound"> </a> + <div class="fixedFont"><static> - - <b>main</b>(cb) + <span class="light">{Object}</span> + <span class="light">Karma.</span><b>sound</b>(args) </div> <div class="description"> - Main function. Any Karma function call should be inside the callback function. -The callback function will be executed when the preloading finishes. + A shortcut for calling 'KSound( )' </div> @@ -1002,10 +705,10 @@ The callback function will be executed when the preloading finishes. <dt class="heading">Parameters:</dt> <dt> - <span class="light fixedFont">{Function}</span> <b>cb</b> + <b>args</b> </dt> - <dd>The callback funtion</dd> + <dd></dd> </dl> @@ -1013,69 +716,34 @@ The callback function will be executed when the preloading finishes. - - <dl class="detailList"> - <dt class="heading">See:</dt> + <dt class="heading">Returns:</dt> - <dd><a href="../symbols/Karma.html#init">Karma#init</a></dd> + <dd><span class="light fixedFont">{Object}</span> new instance of KSound object</dd> </dl> - - <hr /> - - <a name="size"> </a> - <div class="fixedFont"> - - - <b>size</b>(width, height) - - </div> - <div class="description"> - Creates a new canvas element. - </div> - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>width</b> - <i>Optional, Default: 100</i> - </dt> - <dd>canvas width</dd> + <dt class="heading">See:</dt> - <dt> - <span class="light fixedFont">{Number}</span> <b>height</b> - <i>Optional, Default: 100</i> - </dt> - <dd>canvas height</dd> + <dd>KSound</dd> </dl> - - - - - - <hr /> - <a name="sound"> </a> - <div class="fixedFont"> + <a name=".surface"> </a> + <div class="fixedFont"><static> - - <b>sound</b>(args) + <span class="light">{Object}</span> + <span class="light">Karma.</span><b>surface</b>(options) </div> <div class="description"> - A shortcut for calling 'KSound( )' + A shortcut for calling 'KSurface(.. )'. </div> @@ -1087,7 +755,7 @@ The callback function will be executed when the preloading finishes. <dt class="heading">Parameters:</dt> <dt> - <b>args</b> + <b>options</b> </dt> <dd></dd> @@ -1098,23 +766,30 @@ The callback function will be executed when the preloading finishes. + <dl class="detailList"> + <dt class="heading">Returns:</dt> + + <dd><span class="light fixedFont">{Object}</span> new instance of KSurface object</dd> + + </dl> + <dl class="detailList"> <dt class="heading">See:</dt> - <dd>KSound</dd> + <dd>KSurface</dd> </dl> <hr /> - <a name="video"> </a> - <div class="fixedFont"> + <a name=".video"> </a> + <div class="fixedFont"><static> - - <b>video</b>(args) + <span class="light">{Object}</span> + <span class="light">Karma.</span><b>video</b>(args) </div> <div class="description"> @@ -1141,6 +816,13 @@ The callback function will be executed when the preloading finishes. + <dl class="detailList"> + <dt class="heading">Returns:</dt> + + <dd><span class="light fixedFont">{Object}</span> new instance of KVideo object</dd> + + </dl> + <dl class="detailList"> @@ -1165,7 +847,7 @@ The callback function will be executed when the preloading finishes. <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/jsdoc/symbols/JSDOC.html b/docs/symbols/_global_.html index 35bb326..431c4a3 100755 --- a/jsdoc/symbols/JSDOC.html +++ b/docs/symbols/_global_.html @@ -5,7 +5,7 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="generator" content="JsDoc Toolkit" /> - <title>JsDoc Reference - JSDOC</title> + <title>JsDoc Reference - _global_</title> <style type="text/css"> /* default.css */ @@ -191,7 +191,31 @@ ul.inheritsList <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - <li><a href="../symbols/JSDOC.html">JSDOC</a></li> + <li><a href="../symbols/Karma.html">Karma</a></li> + + <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> + + <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> + + <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> + + <li><a href="../symbols/Karma.KGraphic.html">Karma.KGraphic</a></li> + + <li><a href="../symbols/Karma.KGroup.html">Karma.KGroup</a></li> + + <li><a href="../symbols/Karma.KImage.html">Karma.KImage</a></li> + + <li><a href="../symbols/Karma.KMedia.html">Karma.KMedia</a></li> + + <li><a href="../symbols/Karma.KObject.html">Karma.KObject</a></li> + + <li><a href="../symbols/Karma.KRectangle.html">Karma.KRectangle</a></li> + + <li><a href="../symbols/Karma.KShape.html">Karma.KShape</a></li> + + <li><a href="../symbols/Karma.KSound.html">Karma.KSound</a></li> + + <li><a href="../symbols/Karma.KSurface.html">Karma.KSurface</a></li> </ul> <hr /> @@ -202,7 +226,7 @@ ul.inheritsList <!-- ============================== class title ============================ --> <h1 class="classTitle"> - Namespace JSDOC + Built-In Namespace _global_ </h1> <!-- ============================== class summary ========================== --> @@ -212,39 +236,16 @@ ul.inheritsList - <br /><i>Defined in: </i> <a href="../symbols/src/JSDOC.js.html">JSDOC.js</a>. - </p> <!-- ============================== constructor summary ==================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class JSDOC."> - <caption>Namespace Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/JSDOC.html#constructor">JSDOC</a></b> - </div> - <div class="description">This is the main container for the JSDOC application.</div> - </td> - </tr> - </tbody> - </table> - <!-- ============================== properties summary ===================== --> - <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class JSDOC."> + <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class _global_."> <caption>Field Summary</caption> <thead> <tr> @@ -255,12 +256,12 @@ ul.inheritsList <tbody> <tr> - <td class="attributes"><static> </td> + <td class="attributes"> </td> <td class="nameDescription"> <div class="fixedFont"> - JSDOC.<b><a href="../symbols/JSDOC.html#.VERSION">VERSION</a></b> + <b><a href="../symbols/_global_.html#jQuery">jQuery</a></b> </div> - <div class="description">The current version string of this application.</div> + <div class="description">See <a href="http://jquery.com">jQuery</a>.</div> </td> </tr> @@ -275,7 +276,7 @@ ul.inheritsList - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class JSDOC."> + <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class _global_."> <caption>Method Summary</caption> <thead> <tr> @@ -286,11 +287,11 @@ ul.inheritsList <tbody> <tr> - <td class="attributes"><static> </td> + <td class="attributes"> </td> <td class="nameDescription"> - <div class="fixedFont">JSDOC.<b><a href="../symbols/JSDOC.html#.usage">usage</a></b>() + <div class="fixedFont"><b><a href="../symbols/_global_.html#jQueryanonymous">jQueryanonymous</a></b>($) </div> - <div class="description">Print out usage information and quit.</div> + <div class="description"></div> </td> </tr> @@ -305,33 +306,6 @@ ul.inheritsList <!-- ============================== constructor details ==================== --> - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Namespace Detail - </div> - - <div class="fixedFont"> - <b>JSDOC</b> - </div> - - <div class="description"> - This is the main container for the JSDOC application. - - </div> - - - - - - - - - - - - - </div> - <!-- ============================== field details ========================== --> @@ -339,15 +313,18 @@ ul.inheritsList Field Detail </div> - <a name=".VERSION"> </a> - <div class="fixedFont"><static> + <a name="jQuery"> </a> + <div class="fixedFont"> - <span class="light">JSDOC.</span><b>VERSION</b> + <b>jQuery</b> </div> <div class="description"> - The current version string of this application. + See <a href="http://jquery.com">jQuery</a>. + + <br /> + <i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </div> @@ -369,15 +346,18 @@ ul.inheritsList Method Detail </div> - <a name=".usage"> </a> - <div class="fixedFont"><static> + <a name="jQueryanonymous"> </a> + <div class="fixedFont"> - <span class="light">JSDOC.</span><b>usage</b>() + <b>jQueryanonymous</b>($) </div> <div class="description"> - Print out usage information and quit. + + + <br /> + <i>Defined in: </i> <a href="../symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html">jquery.karma.js</a>. </div> @@ -385,6 +365,17 @@ ul.inheritsList + <dl class="detailList"> + <dt class="heading">Parameters:</dt> + + <dt> + <b>$</b> + + </dt> + <dd></dd> + + </dl> + @@ -406,7 +397,7 @@ ul.inheritsList <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 24 2009 16:38:17 GMT-0500 (CDT) + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Tue Oct 13 2009 23:45:39 GMT-0700 (PDT) </div> </body> </html> diff --git a/docs/symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html b/docs/symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html new file mode 100755 index 0000000..15b5553 --- /dev/null +++ b/docs/symbols/src/_home_hitman_karma_mainline_js_jquery.karma.js.html @@ -0,0 +1,1179 @@ +<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> + .KEYW {color: #933;} + .COMM {color: #bbb; font-style: italic;} + .NUMB {color: #393;} + .STRN {color: #393;} + .REGX {color: #339;} + .line {border-right: 1px dotted #666; color: #666; font-style: normal;} + </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/* +<span class='line'> 2</span> * Karma Framework +<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma +<span class='line'> 4</span> * +<span class='line'> 5</span> * Copyright (c) 2009 +<span class='line'> 6</span> * Felipe López Toledo zer.subzero@gmail.com +<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org +<span class='line'> 8</span> * +<span class='line'> 9</span> * Under MIT License: +<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person +<span class='line'> 11</span> * obtaining a copy of this software and associated documentation +<span class='line'> 12</span> * files (the "Software"), to deal in the Software without +<span class='line'> 13</span> * restriction, including without limitation the rights to use, +<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell +<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the +<span class='line'> 16</span> * Software is furnished to do so, subject to the following +<span class='line'> 17</span> * conditions: +<span class='line'> 18</span> * +<span class='line'> 19</span> * The above copyright notice and this permission notice shall be +<span class='line'> 20</span> * included in all copies or substantial portions of the Software. +<span class='line'> 21</span> * +<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. +<span class='line'> 30</span> */</span><span class="WHIT"> +<span class='line'> 31</span> +<span class='line'> 32</span> </span><span class="COMM">/** +<span class='line'> 33</span> * @fileOverview Contains karma library +<span class='line'> 34</span> * @version 0.1 +<span class='line'> 35</span> * @author Felipe Lopez Toledo <zer.subzero@gmail.com> +<span class='line'> 36</span> */</span><span class="WHIT"> +<span class='line'> 37</span> +<span class='line'> 38</span> </span><span class="WHIT"> +<span class='line'> 39</span> </span><span class="COMM">/** +<span class='line'> 40</span> * See <a href="http://jquery.com">jQuery</a>. +<span class='line'> 41</span> * @name jQuery +<span class='line'> 42</span> * @exports $ as jQuery +<span class='line'> 43</span> */</span><span class="WHIT"> +<span class='line'> 44</span> +<span class='line'> 45</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">$</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'> 46</span> </span><span class="COMM">//helpers</span><span class="WHIT"> +<span class='line'> 47</span> </span><span class="COMM">/** +<span class='line'> 48</span> Checks if the argument 'arg' is set and if its type is 'type'.<br> +<span class='line'> 49</span> 1. if arg is set: it returns 'toReturn' if specified, otherwise it returns +<span class='line'> 50</span> 'true' +<span class='line'> 51</span> 2. if arg is not set: it returns 'false' +<span class='line'> 52</span> @param arg The param to check +<span class='line'> 53</span> @param {Object} [type] The expeted type of 'arg' +<span class='line'> 54</span> @param [toReturn] object or value to return in case 1 +<span class='line'> 55</span> @returns true | false | toReturn +<span class='line'> 56</span> @example +<span class='line'> 57</span> var msg = "hi"; +<span class='line'> 58</span> valid(msg); //returns true +<span class='line'> 59</span> valid(msg, "String" ); //returns true +<span class='line'> 60</span> valid(msg, "Number"); //returns false +<span class='line'> 61</span> valid(msg, "String",false ); //returns false +<span class='line'> 62</span> valid(msg, "String", "hello" ); //returns "hello" +<span class='line'> 63</span> valid(msg123); //returns false +<span class='line'> 64</span> **/</span><span class="WHIT"> +<span class='line'> 65</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"null"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 76</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'> 77</span> </span><span class="COMM">/** +<span class='line'> 78</span> Clones an object +<span class='line'> 79</span> @param {object} obj The source object +<span class='line'> 80</span> @returns {object} The cloned object +<span class='line'> 81</span> **/</span><span class="WHIT"> +<span class='line'> 82</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">temp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">obj.constructor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 86</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">temp</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">temp</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'> 90</span> +<span class='line'> 91</span> </span><span class="COMM">/** +<span class='line'> 92</span> Karma +<span class='line'> 93</span> @name Karma +<span class='line'> 94</span> @class Represents a Karma (master) object. +<span class='line'> 95</span> @namespace +<span class='line'> 96</span> @param {String | Object } options Constructor arguments +<span class='line'> 97</span> @param {String | Object } [options.container] Target DIV-class that will contain +<span class='line'> 98</span> any canvas element created using Karma functions +<span class='line'> 99</span> @param {String} [options.language] +<span class='line'>100</span> */</span><span class="WHIT"> +<span class='line'>101</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.01"</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>104</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>105</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> +<span class='line'>106</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> +<span class='line'>107</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> +<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>109</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> +<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> +<span class='line'>117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> +<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>122</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> +<span class='line'>124</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>125</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>126</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>127</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>128</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> +<span class='line'>129</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>130</span> Gets the language acording to the browser language +<span class='line'>131</span> @returns {Object} <br> +<span class='line'>132</span> lang: countryCode and langCode (if specified) +<span class='line'>133</span> langCode*: language code represented as xx, example: en.<br> +<span class='line'>134</span> countryCode*: country code represented as YY, example: US.<br> +<span class='line'>135</span> *optional +<span class='line'>136</span> **/</span><span class="WHIT"> +<span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>138</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> +<span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla/ie</span><span class="WHIT"> +<span class='line'>140</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>147</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>148</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>149</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> +<span class='line'>150</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>153</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>155</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>156</span> Creates a new Gettext object and returns a shortcut function to localise +<span class='line'>157</span> defined strings.<br>We use karma.Gettext.js it's a modification of +<span class='line'>158</span> <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> +<span class='line'>159</span> Gettext.js</a> from beril OS. +<span class='line'>160</span> @requires karma.Gettext.js +<span class='line'>161</span> @param {Object} options The arguments of the Gettext constructor +<span class='line'>162</span> @returns {Function} A generic function to call Gettext functions +<span class='line'>163</span> **/</span><span class="WHIT"> +<span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>165</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>166</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>168</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>169</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>170</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>171</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> +<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>174</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> +<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>177</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> +<span class='line'>178</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>180</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> +<span class='line'>181</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>183</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> +<span class='line'>184</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> +<span class='line'>185</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>186</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>187</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>188</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>189</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>190</span> Localises the inline html content and it creates the localised paths for +<span class='line'>191</span> "images", "sounds" and "videos". +<span class='line'>192</span> <b>Note:</b>Inline html localisation under development<br> +<span class='line'>193</span> @param {String} lang The language that will be used to localise the content +<span class='line'>194</span> @see <a href="http://wiki.sugarlabs.org/go/Karma/Bundle_layout"> +<span class='line'>195</span> Karma Bundle_layout</a> +<span class='line'>196</span> **/</span><span class="WHIT"> +<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>198</span> </span><span class="WHIT"> +<span class='line'>199</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>200</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> +<span class='line'>202</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>203</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>204</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioFile</span><span class="WHIT"> +<span class='line'>205</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>207</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>208</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>209</span> It will attempt to load a language file, the posible languages are defined +<span class='line'>210</span> on language.alternatives. +<span class='line'>211</span> <p>The language file type could be: .po (Pootle) or .json (JSON). The +<span class='line'>212</span> precedence between file types is defined according to which is defined first +<span class='line'>213</span> in supportedLangFileTypes. By default Pootle files has precedence over JSON, +<span class='line'>214</span> files.</p> +<span class='line'>215</span> @see Karma +<span class='line'>216</span> @returns {String} The name of the language file loaded. Example: en-US.po +<span class='line'>217</span> **/</span><span class="WHIT"> +<span class='line'>218</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>220</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>221</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> +<span class='line'>222</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> +<span class='line'>223</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> +<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>225</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> +<span class='line'>226</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>227</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> +<span class='line'>229</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>230</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>232</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> +<span class='line'>233</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>234</span> </span><span class="WHIT"> +<span class='line'>235</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> +<span class='line'>236</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>237</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> +<span class='line'>238</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> +<span class='line'>239</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> +<span class='line'>240</span> </span><span class="WHIT"> </span><span class="COMM">//Bryan: we aren't using this right now</span><span class="WHIT"> +<span class='line'>241</span> </span><span class="WHIT"> </span><span class="COMM">/* that.i18n.root[ that.i18n.shortcut ] = i18nWrapper( +<span class='line'>242</span> { +<span class='line'>243</span> domain : lang, +<span class='line'>244</span> file : { +<span class='line'>245</span> type: that.supportedLangFileTypes[i].type, +<span class='line'>246</span> uri: this.url, data: data +<span class='line'>247</span> } +<span class='line'>248</span> } +<span class='line'>249</span> );*/</span><span class="WHIT"> +<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>252</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>253</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>254</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> +<span class='line'>255</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>256</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>258</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>259</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>260</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>263</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> +<span class='line'>264</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> +<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>268</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>269</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>270</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>272</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>273</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>274</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> +<span class='line'>275</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> +<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>277</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>278</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>279</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>280</span> </span><span class="WHIT"> +<span class='line'>281</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> +<span class='line'>282</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> +<span class='line'>283</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>284</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>286</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>287</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>288</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> +<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>290</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>291</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>292</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>293</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>294</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> +<span class='line'>295</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>296</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>297</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>298</span> </span><span class="WHIT"> +<span class='line'>299</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> +<span class='line'>300</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> +<span class='line'>301</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>302</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>303</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>304</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> +<span class='line'>305</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>306</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>307</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>308</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>309</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>310</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> +<span class='line'>311</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>312</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> +<span class='line'>313</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>314</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>315</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>316</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>317</span> </span><span class="WHIT"> +<span class='line'>318</span> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>319</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> +<span class='line'>320</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>321</span> </span><span class="WHIT"> </span><span class="NAME">this.surfaces</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>322</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>323</span> +<span class='line'>324</span> </span><span class="COMM">/** +<span class='line'>325</span> @memberOf Karma +<span class='line'>326</span> @namespace Geometry functions. +<span class='line'>327</span> **/</span><span class="WHIT"> +<span class='line'>328</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>329</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>330</span> Converts a value from degrees to radians. +<span class='line'>331</span> @param {Number} angle The angle in degrees +<span class='line'>332</span> @returns {Number} The The angle in radians +<span class='line'>333</span> **/</span><span class="WHIT"> +<span class='line'>334</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>335</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>336</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>337</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>338</span> Gets the square of the Euclidian (ordinary) distance between 2 points. +<span class='line'>339</span> @param {Number} Point Point No. 0 +<span class='line'>340</span> @param {Number} Point Point No. 1 +<span class='line'>341</span> @returns {Number} The square of the Euclidian distance +<span class='line'>342</span> **/</span><span class="WHIT"> +<span class='line'>343</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>344</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>345</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>346</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>347</span> Gets the Euclidian (ordinary) distance between 2 points.<br> +<span class='line'>348</span> <b>Warning:</b> It's slower than distance2 function +<span class='line'>349</span> @param {Number} Point Point No. 0 +<span class='line'>350</span> @param {Number} Point Point No. 1 +<span class='line'>351</span> @returns {Number} The Euclidian distance +<span class='line'>352</span> **/</span><span class="WHIT"> +<span class='line'>353</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>354</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.geometry.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>355</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>356</span> +<span class='line'>357</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>358</span> </span><span class="COMM">/** +<span class='line'>359</span> @memberOf Karma +<span class='line'>360</span> @namespace Graphics functions. +<span class='line'>361</span> **/</span><span class="WHIT"> +<span class='line'>362</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>363</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>364</span> Creates a new rectangle. It's a shortcut for calling 'new KRectangle(..)'. +<span class='line'>365</span> **/</span><span class="WHIT"> +<span class='line'>366</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>367</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>368</span> Creates a new circle. It's a shortcut for calling 'new KCircle(..)'. +<span class='line'>369</span> **/</span><span class="WHIT"> +<span class='line'>370</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>371</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>372</span> </span><span class="COMM">/** +<span class='line'>373</span> @memberOf Karma +<span class='line'>374</span> @namespace Math functions. +<span class='line'>375</span> **/</span><span class="WHIT"> +<span class='line'>376</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>377</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>378</span> Generates a random bumber between lower bound and upper bound inclusive. +<span class='line'>379</span> @param {Number} lower The lower bound +<span class='line'>380</span> @param {Number} upper The upper bound +<span class='line'>381</span> @returns {Number} The generated number +<span class='line'>382</span> **/</span><span class="WHIT"> +<span class='line'>383</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>384</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>385</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>386</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>387</span> </span><span class="COMM">//FIXME</span><span class="WHIT"> +<span class='line'>388</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> +<span class='line'>389</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>390</span> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>391</span> </span><span class="COMM">/** +<span class='line'>392</span> @param {Object} [toLoad] The Object that has the arrays for preloading. +<span class='line'>393</span> @param {Array} [toLoad.images] The images +<span class='line'>394</span> @param {Array} [toLoad.sounds] The sounds +<span class='line'>395</span> @param {Array} [toLoad.videos] The videos +<span class='line'>396</span> @memberOf Karma +<span class='line'>397</span> @returns {Object} this +<span class='line'>398</span> **/</span><span class="WHIT"> +<span class='line'>399</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>400</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>401</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> +<span class='line'>402</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>403</span> +<span class='line'>404</span> </span><span class="COMM">/** +<span class='line'>405</span> Main function. Any Karma function call should be inside the callback function. +<span class='line'>406</span> The callback function will be executed when the preloading finishes. +<span class='line'>407</span> @param {Function} cb The callback funtion +<span class='line'>408</span> @memberOf Karma +<span class='line'>409</span> @see Karma#init +<span class='line'>410</span> **/</span><span class="WHIT"> +<span class='line'>411</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>412</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>413</span> </span><span class="WHIT"> </span><span class="COMM">//loader</span><span class="WHIT"> +<span class='line'>414</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaderDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="STRN">"body"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">append</span><span class="PUNC">(</span><span class="STRN">'<div id=\"karma-loader\">Karma is \ +<span class='line'>415</span> loading ...<div id=\"karma-loader\" class=\"status\"></div></div>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>416</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">statusDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="STRN">"#karma-loader .status"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>417</span> </span><span class="WHIT"> +<span class='line'>418</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">statusUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">total</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>419</span> </span><span class="WHIT"> </span><span class="NAME">statusDiv.html</span><span class="PUNC">(</span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">total</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">" [ "</span><span class="PUNC">+</span><span class="NAME">error</span><span class="PUNC">+</span><span class="STRN">" ]"</span><span class="PUNC">:</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>420</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>421</span> </span><span class="WHIT"> +<span class='line'>422</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>423</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>424</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>425</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>426</span> </span><span class="WHIT"> </span><span class="COMM">//creates the surfaces</span><span class="WHIT"> +<span class='line'>427</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"surfaces"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>428</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"surfaces"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>429</span> </span><span class="WHIT"> </span><span class="NAME">Karma.prototype.surface.call</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>430</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>431</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>432</span> </span><span class="WHIT"> </span><span class="NAME">statusUpdate</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>433</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> +<span class='line'>434</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>435</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>437</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>439</span> </span><span class="WHIT"> +<span class='line'>440</span> </span><span class="COMM">/** +<span class='line'>441</span> callback to check if all the items were loaded or got an error when +<span class='line'>442</span> loading +<span class='line'>443</span> **/</span><span class="WHIT"> +<span class='line'>444</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">errors</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>445</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>446</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>447</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>448</span> </span><span class="WHIT"> </span><span class="NAME">errors.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.target.src</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>449</span> </span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>450</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>451</span> </span><span class="WHIT"> </span><span class="NAME">statusUpdate</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>452</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>453</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>454</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"Media files not found: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">errors</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>455</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>456</span> </span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="STRN">"#karma-loader:hiden:first"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">fadeOut</span><span class="PUNC">(</span><span class="STRN">"slow"</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>457</span> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>458</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>459</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>461</span> </span><span class="WHIT"> +<span class='line'>462</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>463</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>464</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>465</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> +<span class='line'>466</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>467</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.name</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>469</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.name</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>470</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> +<span class='line'>471</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>472</span> </span><span class="NAME">config</span><span class="WHIT"> +<span class='line'>473</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>474</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>475</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'>476</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>477</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>478</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'>479</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>480</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>481</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>482</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>483</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>484</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>485</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>486</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>487</span> </span><span class="COMM">/** +<span class='line'>488</span> A shortcut for calling 'KImage( )' +<span class='line'>489</span> @see KImage +<span class='line'>490</span> @memberOf Karma +<span class='line'>491</span> @returns {Object} new instance of KImage object +<span class='line'>492</span> **/</span><span class="WHIT"> +<span class='line'>493</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>494</span> </span><span class="COMM">/** +<span class='line'>495</span> A shortcut for calling 'KSound( )' +<span class='line'>496</span> @see KSound +<span class='line'>497</span> @memberOf Karma +<span class='line'>498</span> @returns {Object} new instance of KSound object +<span class='line'>499</span> **/</span><span class="WHIT"> +<span class='line'>500</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>501</span> </span><span class="COMM">/** +<span class='line'>502</span> A shortcut for calling 'KVideo( )' +<span class='line'>503</span> @see KVideo +<span class='line'>504</span> @memberOf Karma +<span class='line'>505</span> @returns {Object} new instance of KVideo object +<span class='line'>506</span> **/</span><span class="WHIT"> +<span class='line'>507</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>508</span> </span><span class="COMM">/** +<span class='line'>509</span> A shortcut for calling 'KGroup( )' +<span class='line'>510</span> @see KGroup +<span class='line'>511</span> @memberOf Karma +<span class='line'>512</span> @returns {Object} new instance of KGroup object +<span class='line'>513</span> **/</span><span class="WHIT"> +<span class='line'>514</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>515</span> </span><span class="COMM">/** +<span class='line'>516</span> A shortcut for calling 'KButton( )' +<span class='line'>517</span> @see KButton +<span class='line'>518</span> @memberOf Karma +<span class='line'>519</span> @returns {Object} new instance of KButton object +<span class='line'>520</span> **/</span><span class="WHIT"> +<span class='line'>521</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>522</span> </span><span class="COMM">/** +<span class='line'>523</span> A shortcut for calling 'KSurface(.. )'. +<span class='line'>524</span> @see KSurface +<span class='line'>525</span> @memberOf Karma +<span class='line'>526</span> @returns {Object} new instance of KSurface object +<span class='line'>527</span> **/</span><span class="WHIT"> +<span class='line'>528</span> </span><span class="NAME">Karma.prototype.surface</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>529</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>530</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"ksurface-"</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.surfaces.length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>531</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>532</span> </span><span class="WHIT"> </span><span class="NAME">options.mainContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>533</span> </span><span class="WHIT"> </span><span class="NAME">options.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>534</span> </span><span class="WHIT"> </span><span class="NAME">this.surfaces</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">options.name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSurface</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>535</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.surface</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">options.name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>536</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>537</span> +<span class='line'>538</span> </span><span class="COMM">/** +<span class='line'>539</span> Mouse +<span class='line'>540</span> **/</span><span class="WHIT"> +<span class='line'>541</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>542</span> </span><span class="COMM">/** +<span class='line'>543</span> Gets the 'x' and 'y' mouse coordinates relatives to the canvas +<span class='line'>544</span> @returns {Object} An Object with 'x' and 'y' attributes +<span class='line'>545</span> **/</span><span class="WHIT"> +<span class='line'>546</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>547</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>548</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>549</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>550</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>551</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>552</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>553</span> +<span class='line'>554</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> +<span class='line'>555</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>556</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>557</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>558</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>559</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>560</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>561</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>563</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>564</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ +<span class='line'>565</span> case "click": break; +<span class='line'>566</span> }*/</span><span class="WHIT"> +<span class='line'>567</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; +<span class='line'>568</span> for (var i in ev) { +<span class='line'>569</span> s+=i+"="+ev[i]+"\n"; +<span class='line'>570</span> } +<span class='line'>571</span> alert(s);*/</span><span class="WHIT"> +<span class='line'>572</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>573</span> +<span class='line'>574</span> </span><span class="COMM">/** +<span class='line'>575</span> Master class creator. It will merge all the properties and methods of the +<span class='line'>576</span> recived arguments (objects) into one new class that wil be returned. +<span class='line'>577</span> @returns {Object} The new class +<span class='line'>578</span> **/</span><span class="WHIT"> +<span class='line'>579</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>580</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>582</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>583</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>584</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>585</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>586</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>587</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>588</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> +<span class='line'>589</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { +<span class='line'>590</span> this.__parents[ i ].apply ( this, arguments ); +<span class='line'>591</span> }*/</span><span class="WHIT"> +<span class='line'>592</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> +<span class='line'>593</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>594</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>595</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>596</span> +<span class='line'>597</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>598</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>599</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>600</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>601</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>602</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> +<span class='line'>603</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>604</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>605</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> +<span class='line'>606</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>607</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>608</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>609</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>610</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> +<span class='line'>611</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>612</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> +<span class='line'>613</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>614</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>615</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>616</span> </span><span class="WHIT"> +<span class='line'>617</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>618</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>619</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> +<span class='line'>620</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> +<span class='line'>621</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>622</span> +<span class='line'>623</span> </span><span class="COMM">/** +<span class='line'>624</span> Creates a new surface. A surface is a 'canvas' element with additional methods +<span class='line'>625</span> that makes easier its manipulation. <br> +<span class='line'>626</span> There are 2 ways to create a new KSurface: +<span class='line'>627</span> <ol> +<span class='line'>628</span> <li><b>Using an existing canvas element:</b>You must provide at least +<span class='line'>629</span> the 'canvas' parameter. The 'name' is optional (if it's not provided the +<span class='line'>630</span> 'canvas' parameter will be used). +<span class='line'>631</span> </li> +<span class='line'>632</span> <li><b>Creating a new canvas element:</b> A new 'canvas' element will be +<span class='line'>633</span> created and it will be appended to the specific 'container'. +<span class='line'>634</span> You must provide at least the 'name' and 'container' parameters. +<span class='line'>635</span> </li> +<span class='line'>636</span> </ol> +<span class='line'>637</span> @name KSurface +<span class='line'>638</span> @class KSurface class +<span class='line'>639</span> @param {object} options Constructor options. +<span class='line'>640</span> @param {string} [options.name] The desired name for the surface. The value must +<span class='line'>641</span> be unique among others KSurfaces-name objects. +<span class='line'>642</span> @param {string} [options.canvas] The name of the element. Commonly the +<span class='line'>643</span> canvas-id value. +<span class='line'>644</span> @param {string | object} [options.container] The the name of the container +<span class='line'>645</span> element. Commonly a div-id value. +<span class='line'>646</span> @param {number} [width=100] The width of the canvas. +<span class='line'>647</span> @param {number} [height=100] The height of the canvas. +<span class='line'>648</span> @param {number} [fps=24] The frames per second for any refresh operation. +<span class='line'>649</span> @param {boolean} [visible=true] 'true' if the content is visible (will be drawn). +<span class='line'>650</span> @memberOf Karma +<span class='line'>651</span> **/</span><span class="WHIT"> +<span class='line'>652</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSurface</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>653</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>654</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>655</span> </span><span class="WHIT"> </span><span class="COMM">//fix the container</span><span class="WHIT"> +<span class='line'>656</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.canvas</span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>657</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">=</span><span class="NAME">options.container</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>659</span> </span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>660</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>661</span> </span><span class="WHIT"> </span><span class="COMM">// the container must be created inside the mainContainer</span><span class="WHIT"> +<span class='line'>662</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.mainContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>663</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"You need to create the Karma master container"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>664</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>665</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">div</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">div.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>667</span> </span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="PUNC">=</span><span class="NAME">options.mainContainer.appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">div</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>669</span> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>670</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.mainContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"You need to create the Karma master container"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>673</span> </span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.mainContainer</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>674</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>675</span> </span><span class="WHIT"> +<span class='line'>676</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>677</span> </span><span class="WHIT"> </span><span class="COMM">//mainContainer: '',//must be overwritten by Karma.container</span><span class="WHIT"> +<span class='line'>678</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">,</span><span class="COMM">//must be overwritten by the Karma.surface OR user</span><span class="WHIT"> +<span class='line'>679</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//must be overwritten by Karma.container OR user</span><span class="WHIT"> +<span class='line'>680</span> </span><span class="WHIT"> +<span class='line'>681</span> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>682</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>683</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>684</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> +<span class='line'>685</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>686</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>687</span> </span><span class="WHIT"> +<span class='line'>688</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>690</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>691</span> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>692</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>693</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>694</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.getElementById</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>696</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>697</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"The canvas id doesn't exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>698</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>699</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>701</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.name</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>702</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.id</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>703</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>704</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>705</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>706</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>707</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>708</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ +<span class='line'>709</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>710</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>711</span> </span><span class="WHIT"> </span><span class="COMM">//ctx methods chaining stuff</span><span class="WHIT"> +<span class='line'>712</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> +<span class='line'>713</span> </span><span class="WHIT"> </span><span class="STRN">"globalAlpha"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"globalCompositeOperation"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"lineWidth"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"lineCap"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>714</span> </span><span class="STRN">"lineJoin"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"miterLimit"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"font"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"textAlign"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"textBaseline"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"save"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>715</span> </span><span class="STRN">"restore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"scale"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"rotate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"translate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"transform"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"setTransform"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>716</span> </span><span class="STRN">"clearRect"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"fillRect"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strokeRect"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"beginPath"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"closePath"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>717</span> </span><span class="STRN">"moveTo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"lineTo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"quadraticCurveTo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"bezierCurveTo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"arcTo"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>718</span> </span><span class="STRN">"arc"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"rect"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"fill"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"stroke"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"clip"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"fillText"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strokeText"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>719</span> </span><span class="STRN">"measureText"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"isPointInPath"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strokeStyle"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"fillStyle"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>720</span> </span><span class="STRN">"createLinearGradient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"createRadialGradient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"createPattern"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>721</span> </span><span class="STRN">"shadowOffsetX"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shadowOffsetY"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shadowBlur"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shadowColor"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>722</span> </span><span class="COMM">//"mozTextStyle", "mozDrawText", "mozMeasureText", "mozPathText", </span><span class="WHIT"> +<span class='line'>723</span> </span><span class="WHIT"> </span><span class="STRN">"mozTextAlongPath"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"drawImage"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getImageData"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"putImageData"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>724</span> </span><span class="STRN">"createImageData"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"drawWindow"</span><span class="WHIT"> +<span class='line'>725</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>726</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>727</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chainMaker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>728</span> </span><span class="WHIT"> </span><span class="NAME">that</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>729</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">that.ctx</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>730</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>731</span> </span><span class="WHIT"> </span><span class="NAME">that.ctx</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.ctx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>732</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>733</span> </span><span class="WHIT"> </span><span class="NAME">that.ctx</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>734</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>735</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"wtf?!: impossible to chain "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"!"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>736</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>737</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>738</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>739</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>740</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">toChain.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>741</span> </span><span class="WHIT"> </span><span class="NAME">chainMaker</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toChain</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>743</span> +<span class='line'>744</span> </span><span class="WHIT"> +<span class='line'>745</span> </span><span class="COMM">//events</span><span class="WHIT"> +<span class='line'>746</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>747</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>748</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'>749</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>750</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>751</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>752</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'>753</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>754</span> </span><span class="WHIT"> +<span class='line'>755</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>756</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>757</span> Adds an event listener to the surface +<span class='line'>758</span> @param {string} type Event type +<span class='line'>759</span> @param {function} cb Function call back +<span class='line'>760</span> @param {boolean} [bubble=false] If the event must be captured on +<span class='line'>761</span> bubbling phase +<span class='line'>762</span> **/</span><span class="WHIT"> +<span class='line'>763</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>764</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>765</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>766</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>767</span> Removes an event listener attached to the surface +<span class='line'>768</span> @param {string} type Event type +<span class='line'>769</span> @param {function} cb Function call back +<span class='line'>770</span> @param {boolean} [bubble=false] If the event must be captured on +<span class='line'>771</span> bubbling phase +<span class='line'>772</span> **/</span><span class="WHIT"> +<span class='line'>773</span> </span><span class="WHIT"> </span><span class="NAME">removeEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>774</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.removeEventListener</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>775</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>776</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>777</span> Clears a rectangular area within the canvas +<span class='line'>778</span> @param {Number} [x=0] Start position of x +<span class='line'>779</span> @param {Number} [y=0] Start position of y +<span class='line'>780</span> @param {Number} [width=canvas width] Square width +<span class='line'>781</span> @param {Number} [height=canvas height] Square height +<span class='line'>782</span> **/</span><span class="WHIT"> +<span class='line'>783</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>784</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>785</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>786</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>787</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>788</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> +<span class='line'>789</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>790</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>791</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>792</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>793</span> </span><span class="WHIT"> +<span class='line'>794</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>795</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>796</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>797</span> +<span class='line'>798</span> </span><span class="COMM">/** +<span class='line'>799</span> Karma basic Object +<span class='line'>800</span> @name KObject +<span class='line'>801</span> @class The basic Karma object +<span class='line'>802</span> @param {Object} [options] Options +<span class='line'>803</span> @param {String} [options.localized = true] The object will be localized +<span class='line'>804</span> @memberOf Karma +<span class='line'>805</span> **/</span><span class="WHIT"> +<span class='line'>806</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>807</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>808</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>809</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>810</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>811</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>812</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>813</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>814</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>815</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>816</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>817</span> </span><span class="COMM">/** +<span class='line'>818</span> Graphics basic Object +<span class='line'>819</span> @name KGraphic +<span class='line'>820</span> @class General methods for any Graphic object +<span class='line'>821</span> @param {object} [options] Options +<span class='line'>822</span> @param {number} [options.x = 0] The 'x' position of the object +<span class='line'>823</span> @param {number} [options.y = 0] The 'y' position of the object +<span class='line'>824</span> @param {number} [options.z = 0] The 'z' index of the object +<span class='line'>825</span> @param {number} [options.width = 0] The 'width' of the object +<span class='line'>826</span> @param {number} [options.height = 0] The 'height' of the object +<span class='line'>827</span> @param {boolean} [options.visible = true] Defines if the object will be visible +<span class='line'>828</span> when drawing +<span class='line'>829</span> @memberOf Karma +<span class='line'>830</span> @augments KObject +<span class='line'>831</span> **/</span><span class="WHIT"> +<span class='line'>832</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>833</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>834</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>835</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>836</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>837</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>838</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>839</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>840</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>841</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>842</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>843</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>844</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> +<span class='line'>845</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>846</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>847</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>848</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>849</span> @memberOf KGraphic +<span class='line'>850</span> Determines if the 'x' and 'y' coodinates are inside the object. +<span class='line'>851</span> @returns {boolean} 'true' if the coordinates are inside or on the border +<span class='line'>852</span> of the object, otherwise 'false' +<span class='line'>853</span> **/</span><span class="WHIT"> +<span class='line'>854</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>855</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> +<span class='line'>856</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>857</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>858</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>859</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> +<span class='line'>860</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>861</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>862</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>863</span> </span><span class="COMM">/** +<span class='line'>864</span> An object that collects multiple KGraphic objects. Supports multiple objects. +<span class='line'>865</span> @name KGroup +<span class='line'>866</span> @class An object that collects multiple KGraphic objects +<span class='line'>867</span> @augments KGraphic +<span class='line'>868</span> @memberOf Karma +<span class='line'>869</span> **/</span><span class="WHIT"> +<span class='line'>870</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>871</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>872</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>873</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>874</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>875</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>876</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>877</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>878</span> @memberOf KGroup +<span class='line'>879</span> Adds each argument passed to the funtion to chilNodes. +<span class='line'>880</span> @param {Array:KGraphic} arguments The elements to add to childNodes +<span class='line'>881</span> @see KGroup#draw +<span class='line'>882</span> **/</span><span class="WHIT"> +<span class='line'>883</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>884</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>885</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>886</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>887</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>888</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>889</span> </span><span class="WHIT"> +<span class='line'>890</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>891</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>892</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>893</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> +<span class='line'>894</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>895</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>896</span> @memberOf KGroup +<span class='line'>897</span> Draws all the elements in childNodes. The elements are drawn according +<span class='line'>898</span> to its 'z' (z-index) value. +<span class='line'>899</span> @see KGroup#appendChild +<span class='line'>900</span> **/</span><span class="WHIT"> +<span class='line'>901</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>902</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>903</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>904</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>905</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>906</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>907</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>908</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>909</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>910</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>911</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>912</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>913</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>914</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>915</span> </span><span class="WHIT"> </span><span class="COMM">//TODO </span><span class="WHIT"> +<span class='line'>916</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>917</span> </span><span class="WHIT"> +<span class='line'>918</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>919</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>920</span> +<span class='line'>921</span> </span><span class="COMM">/** +<span class='line'>922</span> Graphics basic Media object. +<span class='line'>923</span> @name KMedia +<span class='line'>924</span> @class General methods for any Graphic object +<span class='line'>925</span> @param {String} file The name of the file that must be loaded +<span class='line'>926</span> @param {String} type 'image', 'sound' or 'video' +<span class='line'>927</span> @param {Object} [options] Options that will be passed to the media element +<span class='line'>928</span> constructor +<span class='line'>929</span> @augments KObject +<span class='line'>930</span> @memberOf Karma +<span class='line'>931</span> **/</span><span class="WHIT"> +<span class='line'>932</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>933</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>934</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>935</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>936</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>937</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>938</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>939</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>940</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>941</span> </span><span class="WHIT"> +<span class='line'>942</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>943</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>944</span> </span><span class="WHIT"> +<span class='line'>945</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>946</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>947</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>948</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>949</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>950</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>951</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>952</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>953</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> +<span class='line'>954</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> +<span class='line'>955</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>956</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>957</span> +<span class='line'>958</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>959</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>960</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>961</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>962</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>963</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>964</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>965</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>966</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>967</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>968</span> +<span class='line'>969</span> </span><span class="COMM">/** +<span class='line'>970</span> Image object +<span class='line'>971</span> @name KImage +<span class='line'>972</span> @class General methods for any Image object +<span class='line'>973</span> @param {Object} options Constructor arguments. +<span class='line'>974</span> @param {Object} options.file The image file that will be loaded. +<span class='line'>975</span> @augments KGraphic +<span class='line'>976</span> @augments KMedia +<span class='line'>977</span> @memberOf Karma +<span class='line'>978</span> **/</span><span class="WHIT"> +<span class='line'>979</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>980</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>981</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>982</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>983</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>984</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>985</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>986</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>987</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>988</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>989</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>990</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>991</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>992</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> +<span class='line'>993</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> +<span class='line'>994</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>995</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>996</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>997</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>998</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>999</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1000</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1001</span> </span><span class="WHIT"> </span><span class="NAME">ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1002</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1003</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1004</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>1005</span> Checks if the image has been loaded and fully decoded. +<span class='line'>1006</span> @returns {boolean} 'true' or 'false' +<span class='line'>1007</span> **/</span><span class="WHIT"> +<span class='line'>1008</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1009</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1010</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>1011</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1012</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1013</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1014</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1015</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1016</span> +<span class='line'>1017</span> </span><span class="COMM">/** +<span class='line'>1018</span> Sound object +<span class='line'>1019</span> @name KSound +<span class='line'>1020</span> @class General methods for any Sound object +<span class='line'>1021</span> @param {Object} options Constructor arguments. +<span class='line'>1022</span> @param {Object} options.file The image file that will be loaded. +<span class='line'>1023</span> @augments KMedia +<span class='line'>1024</span> @memberOf Karma +<span class='line'>1025</span> **/</span><span class="WHIT"> +<span class='line'>1026</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>1027</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KMedia*/</span><span class="WHIT"> +<span class='line'>1028</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1029</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1030</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1031</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1032</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1033</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1034</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1035</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1036</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> +<span class='line'>1037</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1038</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1039</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1040</span> </span><span class="WHIT"> </span><span class="COMM">/** +<span class='line'>1041</span> Checks if the image has been loaded and fully decoded. +<span class='line'>1042</span> @returns {boolean} 'true' or 'false' +<span class='line'>1043</span> **/</span><span class="WHIT"> +<span class='line'>1044</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1045</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1046</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1047</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1048</span> </span><span class="WHIT"> </span><span class="COMM">//hack to fix the audio "stuttering" problem</span><span class="WHIT"> +<span class='line'>1049</span> </span><span class="WHIT"> </span><span class="COMM">//more info: https://bugs.launchpad.net/karma/+bug/426108</span><span class="WHIT"> +<span class='line'>1050</span> </span><span class="WHIT"> </span><span class="NAME">this.media.currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1051</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1052</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1053</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1054</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1055</span> +<span class='line'>1056</span> </span><span class="COMM">/** +<span class='line'>1057</span> Shape object +<span class='line'>1058</span> @name KShape +<span class='line'>1059</span> @class General methods for any Shape object +<span class='line'>1060</span> @param {object} options Constructor arguments. +<span class='line'>1061</span> @param {boolean} [options.fill=true] 'true' if the Shape will be filled when +<span class='line'>1062</span> drawing. +<span class='line'>1063</span> @param {boolean} [options.stroke=true] 'true' if the stroke will be drawn. +<span class='line'>1064</span> @param {color|string} [options.fillStyle="#000"] The fill style of the shape. +<span class='line'>1065</span> @param {color|string} [options.strokeStyle="#000"] The stroke style of the shape. +<span class='line'>1066</span> @augments KMedia +<span class='line'>1067</span> @memberOf Karma +<span class='line'>1068</span> **/</span><span class="WHIT"> +<span class='line'>1069</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>1070</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> +<span class='line'>1071</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1072</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1073</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1074</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1075</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1076</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1077</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1078</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1079</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1080</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1081</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1082</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> +<span class='line'>1083</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1084</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1085</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1086</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1087</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1088</span> </span><span class="WHIT"> </span><span class="NAME">ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> +<span class='line'>1089</span> </span><span class="WHIT"> </span><span class="NAME">ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> +<span class='line'>1090</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="NAME">ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>1093</span> </span><span class="WHIT"> </span><span class="NAME">ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1094</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> +<span class='line'>1095</span> </span><span class="WHIT"> </span><span class="NAME">ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1096</span> </span><span class="WHIT"> </span><span class="NAME">ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1097</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1098</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1099</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1100</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1101</span> </span><span class="COMM">/** +<span class='line'>1102</span> Rectangle object +<span class='line'>1103</span> @name KRectangle +<span class='line'>1104</span> @class General methods for a rectangle object +<span class='line'>1105</span> @param {object} options Constructor arguments. +<span class='line'>1106</span> @param {number} options.x The 'x' position. +<span class='line'>1107</span> @param {number} options.y The 'y' position. +<span class='line'>1108</span> @param {number} options.w The width of the rectangle. +<span class='line'>1109</span> @param {number} options.h The height of the rectangle. +<span class='line'>1110</span> @augments KShape +<span class='line'>1111</span> @memberOf Karma +<span class='line'>1112</span> **/</span><span class="WHIT"> +<span class='line'>1113</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>1114</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1115</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1116</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1117</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> +<span class='line'>1118</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> +<span class='line'>1119</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> +<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1121</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1122</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1123</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1124</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1125</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1126</span> </span><span class="WHIT"> </span><span class="NAME">ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1127</span> </span><span class="WHIT"> </span><span class="NAME">ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1128</span> </span><span class="WHIT"> </span><span class="NAME">ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1129</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1132</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1134</span> </span><span class="WHIT"> +<span class='line'>1135</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1137</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1138</span> </span><span class="WHIT"> +<span class='line'>1139</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1140</span> +<span class='line'>1141</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> +<span class='line'>1142</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> +<span class='line'>1143</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> +<span class='line'>1144</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1145</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1146</span> </span><span class="WHIT"> +<span class='line'>1147</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1148</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> +<span class='line'>1149</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> +<span class='line'>1150</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> +<span class='line'>1151</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1152</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1154</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.name</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1155</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1157</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> +<span class='line'>1158</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> +<span class='line'>1159</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1160</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1161</span> </span><span class="COMM">//</span><span class="WHIT"> +<span class='line'>1162</span> </span><span class="COMM">/** +<span class='line'>1163</span> Karma function. It's a shotcut for calling 'new Karma(..)' +<span class='line'>1164</span> @param [options] Options passed to the Karma constructor +<span class='line'>1165</span> @returns {Object} a new Karma object +<span class='line'>1166</span> @see Karma +<span class='line'>1167</span> **/</span><span class="WHIT"> +<span class='line'>1168</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> +<span class='line'>1169</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1170</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> +<span class='line'>1171</span> </span><span class="PUNC">}</span><span class="WHIT"> +<span class='line'>1172</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="NAME">jQuery</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>
\ No newline at end of file diff --git a/examples/adding_up_to_10_canvas/exercise.html b/examples/adding_up_to_10_canvas/exercise.html index eaf3d63..a99ec93 100755 --- a/examples/adding_up_to_10_canvas/exercise.html +++ b/examples/adding_up_to_10_canvas/exercise.html @@ -10,23 +10,23 @@ <script type="text/javascript" src="../../js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="../../js/karma.Gettext.js"></script> <script type="text/javascript" src="../../js/jquery.karma.js"></script> - + <script type="text/javascript" src="js/lesson.js"></script> <link rel="stylesheet" href="css/knavbar.css" type="text/css"/> </head> <body> -<div id="lesson"> -<nav> -<li><a href="../../chakra/grade1mathematics.html"><img src="../../assets/default/images/back.png" alt="Back" title="Back"></a></li> -<li><a id="welcome" href="index_knavbar.html">Adding up to 10</a></li> -<li><img src="../../assets/default/images/tutorial_bw.png" alt="Tutorial" title="Tutorial"></li> -<li><a href="exercise.html" class="selected"><img src="../../assets/default/images/exercise.png" alt="Exercise" title="Exercise"></a></li> -<li><a href="#tab_help"><img src="../../assets/default/images/help.png" alt="Help" title="Help"></a></li> -<li><a href="http://olenepal.org/" target="_blank"><img src="../../assets/default/images/olenepal_logo.gif" alt="OLE Nepal logo" title="OLE Nepal Web site"></a></li> -</nav> - +<section id="navigation"> + <nav id="knavbar"> + <a href="../../chakra/grade1mathematics.html"><img src="../../assets/default/images/back.png" alt="Back" title="Back" class="floatLeft"></a> + <div id="lessonTitle" class="floatLeft"><a id="welcome" href="index_knavbar.html">Adding up to 10</a></div> + <a href="http://olenepal.org/" target="_blank"><img src="../../assets/default/images/olenepal_logo.gif" alt="OLE Nepal logo" title="OLE Nepal Web site" class="floatRight"></a> + <a href="#tab_help"><img src="../../assets/default/images/help.png" alt="Help" title="Help" class="floatRight"></a> + <img src="../../assets/default/images/tutorial_bw.png" alt="Tutorial" title="Tutorial" class="floatRight"> + <a href="exercise.html" class="selected"><img src="../../assets/default/images/exercise.png" alt="Exercise" title="Exercise" class="floatRight"></a> + </nav> +</section> <div id="karma-main"> <div id="action"> @@ -72,11 +72,15 @@ </div> <div class="sidebarItem"> <img id="scorebox" src="assets/generic/images/scorebox.png" alt=""/> - <canvas id="scoreboxCanvas" width="100" height="140" /> + <canvas id="scoreboxCanvas" width="100" height="140"></canvas> </div> <div class="sidebarItem"> <canvas id="chimpCanvas" width="120px" height="125px"> </canvas> - <button id="reset">Start Over</button> + <div id="buttons"> + <button id="start">Start</button> + <button id="stop">Stop</button> + <button id="reset">Restart</button> + </div> </div> diff --git a/examples/adding_up_to_10_canvas/js/lesson.js b/examples/adding_up_to_10_canvas/js/lesson.js index 852bd3f..ef878d3 100755 --- a/examples/adding_up_to_10_canvas/js/lesson.js +++ b/examples/adding_up_to_10_canvas/js/lesson.js @@ -1,7 +1,9 @@ +/* jslint browser: true +*/ $(document).ready(function(){ - var k = $.karma ({container: "#karma-main", lang: "en"}); + var k = $.karma({container: "#karma-main", lang: "en"}); k.init({ images: [ @@ -11,289 +13,357 @@ $(document).ready(function(){ {name: "chilli", file: "chilli.png", localized : false }, {name: "fish" , file: "fish64px.png", localized : false }, {name: "flower", file: "flower37px.png", localized : false }, - {name: "normalChimp", file: "normalChimp_120x125.png", localized : false}, - {name: "happyChimp", file: "happyChimp_120x125.png", localized: false}, - {name: "sadChimp", file: "sadChimp_120x125.png", localized : false} - - ] - , + {name: "normalChimp", file: "normalChimp_120x125.png", + localized : false}, + {name: "happyChimp", file: "happyChimp_120x125.png", + localized: false}, + {name: "sadChimp", file: "sadChimp_120x125.png", + localized : false}], sounds: [ - {name: "correct", file: "correct.ogg"}, {name: "incorrect", file: "incorrect.ogg"}, {name: "trigger", file: "trigger.ogg", localized: false} - - ], - surfaces: [ - {name:"topLt", canvas:"topLtCanvas"}, - {name:"topRt", canvas:"topRtCanvas"}, - {name:"bottomLt", canvas:"bottomLtCanvas"}, - {name:"bottomMd", canvas:"bottomMdCanvas"}, - {name:"bottomRt", canvas:"bottomRtCanvas"}, - {name:"timer", canvas:"timerCanvas"}, - {name:"scorebox", canvas:"scoreboxCanvas"}, - {name:"chimp", canvas:"chimpCanvas"} - -] + ] + }); k.main(function() { - var imgNames = ["ball", "banana", "balloon","chilli", "fish", "flower"]; + var imageNames = ["ball", "banana", "balloon","chilli", "fish", "flower"]; //game logic - var total, level=0, time, n0, n1, correct; - var maskd=200; - var d=160; - var choices=[]; - var score = 0; - var correct; - var speed = 2000; - var playerCorrect = 0; - var endTimerX = 80; - var startTimerY = 10; - var endTimerY = 100; - var offsetTimerY = 5; - var timerId; - - var timerFn = function () { - k.surfaces['timer'].clear(); - - if ( startTimerY >= endTimerY ){ - //you didn't answer in time - k.library.sounds["trigger"].play(); - answer(false, true); - game(); - } + var cards; + var totalCorrect = 0, n0 = 0, n1 = 0, correctCard = 0, + level = 0, score = 0, numCorrectAnswers = 0; + var DRAW_MAX_X = 170, DRAW_MAX_Y = 170; + var choices=[0, 0, 0]; + var timerSpeed = 12000; + var START_TIMER_Y = 25, END_TIMER_Y = 125; + var timerPaper, chimpPaper; + var timerRect; + var normalChimpImage, sadChimpImage, happyChimpImage; + var overlayCard, topLeftCard, topRightCard, bottomLeftCard, + bottomMiddleCard, bottomRightCard; + + var buttons=[]; + var isTimerRunning = false; + var dispatchChoice; + + var createCard = function (paperName, width, height) { + var set; + var paper; + + if(!width || !height){ + paper = Raphael(paperName+"Paper", 200, 200); + } else { - k.surfaces['timer'].clear(); - startTimerY = startTimerY + offsetTimerY; - k.surfaces['timer'].ctx.fillStyle = "#fff"; - k.surfaces['timer'].ctx.fillRect(10, startTimerY, endTimerX, 20); + paper = Raphael(paperName+"Paper", width, height); } + set = paper.set(); + return { "paper": paper, "prefix": paperName, "set": set}; }; + + overlayCard = createCard("overlay", 800, 600); + topLeftCard = createCard("topLeft"); + topRightCard = createCard("topRight"); + bottomLeftCard = createCard("bottomLeft"); + bottomMiddleCard = createCard("bottomMiddle"); + bottomRightCard = createCard("bottomRight"); + + + cards = [ topLeftCard, topRightCard, bottomLeftCard, + bottomMiddleCard, bottomRightCard]; + + sets = [topLeftCard.set, topRightCard.set, bottomLeftCard.set, + bottomMiddleCard.set, bottomRightCard.set]; + + + function drawCards () { + var imageId = imageNames[ level ]; + //reinitialize choices to zero + choices = [0, 0, 0]; + + cards.forEach(function (box) { + box.set.remove(); + }); - function game () { - $.each(k.surfaces, function () { - if (this.name != "chimp"){ - this.clear(); - } - }); - - - writeScore(); - total = k.math.rand( 2, 10 ); //the total - n0 = total - k.math.rand(1, total - 1 ); //first number - n1 = total - n0; //second number - - //chose one option (the correct option) - //and then put the correct value into it - correct = k.math.rand( 0, 2 ); - choices[ correct ] = total; - - for (var i=0; i<3; i++) { - //generate the two other options - if ( choices[i] === total) { - continue; + totalCorrect = k.math.rand( 2, 5 + level ); //the totalCorrect + n0 = totalCorrect - k.math.rand(1, totalCorrect - 1 ); //first number + n1 = totalCorrect - n0; //second number + + //chose one option (the correct option) + //and then put the correct value into it + correctCard = k.math.rand( 0, 2 ); + choices[ correctCard ] = totalCorrect; + + var computeUniqueChoice = function(choice){ + var newChoice = 0; + if (choice === totalCorrect) { + return choice; + } else { + newChoice = k.math.rand( 1, 10 ); + if (newChoice === totalCorrect){ + return computeUniqueChoice(choice); } else { - // generate the other options - choices[ i ] = k.math.rand( 2, 10 ); - for (var j = 0; j < i; j++){ - if (choices[i] === choices[j]) { - choices[ i ] = k.math.rand( 2, 10 ); - } - } + return newChoice; } } + }; + + choices = choices.map(computeUniqueChoice); + + var drawCard = function (card, n) { + var positions = []; + var x = 0, y = 0; + var isOverlapping = false; + var imageVarNames = {}; + var varPrefix = card.prefix; + imageVarNames[varPrefix] = []; + card.set = card.paper.set(); - var imgId = imgNames[ level ] ; - - - var card = function (surface, n, minx, miny, d ) { - surface.save(); - var r = k.rectangle({x:minx, y:miny, width:maskd, height:maskd, - stroke:false,fill:false}).draw(surface); - - //do the clip - //surface.clip(); - var pos = []; - var x, y, flag; - - - for (var i=0; i<n; i++) { - do { - flag = false; - x = k.math.rand( 0, d ); - y = k.math.rand( 0, d ); - for ( var j=0; j<pos.length; j++) { - if ( k.geometry.distance2( pos[j], - {"x": x, "y": y} ) < 120 ) { - flag = true; - break; - } + for (var i=0; i<n; i++) { + do { + isOverlapping = false; + x = k.math.rand( 0, DRAW_MAX_X); + y = k.math.rand( 0, DRAW_MAX_Y ); + for ( var j=0; j<positions.length; j++) { + if ( k.geometry.distance2( positions[j], + {"x": x, "y": y} ) < 137 ) { + isOverlapping = true; + break; } - - }while ( flag === true ); - pos.push( { "x":x, "y": y } ); - k.library.images[ imgId ].draw(surface, x, y ) - } - - - - surface.restore(); + } + + }while ( isOverlapping === true ); + positions.push( { "x":x, "y": y } ); + imageVarNames[varPrefix][i] = card.paper. + image(k.library.images[imageId].src, x , y, 35, 35); + card.set.push(imageVarNames[varPrefix][i]); } - - - //put the cards - card(k.surfaces["topLt"], n0 , 0, 0, d); - card(k.surfaces["topRt"], n1 , 0, 0, d); - card(k.surfaces["bottomLt"], choices[ 0 ] , 0, 0, d); - card(k.surfaces["bottomMd"], choices[ 1 ] , 0, 0, d); - card(k.surfaces["bottomRt"], choices[ 2 ] , 0, 0, d); + }; + + //put the cards + drawCard(topLeftCard, n0); + drawCard(topRightCard, n1); + drawCard(bottomLeftCard, choices[ 0 ]); + drawCard(bottomMiddleCard, choices[ 1 ]); + drawCard(bottomRightCard, choices[ 2 ]); + } - var writeScore = function (){ - k.surfaces["scorebox"].save(). - clear(). - font("bold 50px sans-serif white"). - fillStyle("#fff"). - textBaseline("middle"). - fillText("" + score, 30, 100). - restore(); + //put the buttons on the cards + buttons[ 0 ] = { node: $('#bottomLeftPaper')[0], num: 0}; + buttons[ 1 ] = { node: $('#bottomMiddlePaper')[0], num: 1}; + buttons[ 2 ] = { node: $('#bottomRightPaper')[0], num: 2}; + + var addButtons = function(){ + buttons.forEach(function(button) { + var numButton = button.num; + button.node.addEventListener('click', function dispatchChoice(){ + var myButton = numButton; + chooseCard(myButton);}, false); + }); + }; + + + var removeButtons = function(){ + buttons.forEach(function(button) { + button.node.removeEventListener('click', dispatchChoice, false); + }); + }; + + var chooseCard = function(numButton) { + if ( choices[numButton] === totalCorrect){ + //If the player has completed all the levels + if (numCorrectAnswers === 4 && level === 5) { + congrats(); + } else { + computeScore(true, false); + resetTimer(); + animateTimer(); + drawCards(); + } + }else { + computeScore(false, false); + resetTimer(); + animateTimer(); + drawCards(); + } + }; + + + + var writeScore = function (newScore){ + $('#scoreBoxText')[0].innerHTML = newScore; }; - var answer = function (correct, tooSlow) { + + var computeScore = function (correct, tooSlow) { if ( correct === false) { //answer was incorrect or took too long score = score - 1; - playerCorrect = playerCorrect - 1; - writeScore(); + numCorrectAnswers = numCorrectAnswers - 1; + writeScore(score); if (tooSlow === true) { - k.library.sounds[ "trigger" ].play(); + k.library.sounds.trigger.play(); } else { - k.library.sounds[ "incorrect" ].play(); + k.library.sounds.incorrect.play(); } //animate sad monkey animateChimp(false); } else { score = score + 1; - playerCorrect = playerCorrect + 1; - writeScore(); - k.library.sounds[ "correct" ].play(); + numCorrectAnswers = numCorrectAnswers + 1; + writeScore(score); + k.library.sounds.correct.play(); animateChimp(true); - if (playerCorrect === 5){ - level = (level+1)% imgNames.length; - speed = speed - 300; - playerCorrect = 0; - } + if (numCorrectAnswers == 5){ + level = level + 1; + timerSpeed = timerSpeed - 1000; + numCorrectAnswers = 0; + } + } - - changeTimer('start'); + }; - var animateChimp = function (answer) { - var timerChimp; - k.surfaces["chimp"].clear(); - if( answer === true){ - k.library.images["happyChimp"].draw(k.surfaces["chimp"], 0, 0); - } else { - k.library.images["sadChimp"].draw(k.surfaces["chimp"], 0, 0); - } - var restoreChimp = function () { - k.surfaces["chimp"].clear(); - k.library.images["normalChimp"].draw(k.surfaces["chimp"], 0, 0); - }; + var startGame = function () { + score = 0; + writeScore(score); + addButtons(); + isTimerRunning = true; - timerChimp = setTimeout(restoreChimp, 800); + //move timer back to start in case it is + //already running + resetTimer(); + //start timer + animateTimer(); - }; - - var changeTimer = function (status){ - startTimerY = 10; - k.surfaces["timer"].clear(); - clearInterval(timerId); - - if (status === 'start'){ - timerId = setInterval(timerFn, speed); - } - + drawCards(); }; - var startStop = function (start) { - score = level = 0; - startTimerY = 10; - $.each(k.surfaces, function () { - if (this.name != "chimp"){ - this.clear(); - } + var stopGame = function () { + writeScore(' '); + removeButtons(); + //stop timer + isTimerRunning = false; + resetTimer(); + + //clear the cards + cards.forEach(function (card) { + card.set.remove(); + card.set = card.paper.set(); }); - - changeTimer('start'); - game(); - }; - var start = function () { - startStop(true); + var resetGame = function () { + score = 0; + writeScore(score); + isTimerRunning = true; + resetTimer(); + animateTimer(); + drawCards(); + }; - - var stop = function () { - changeTimer('stop'); + var resetTimer = function () { + timerRect.animate({y: START_TIMER_Y}, 0); }; - var reset = function () { - startStop(true); + var animateTimer = function () { + timerRect.animate({y : END_TIMER_Y}, timerSpeed, function(){ + timerRect.attr("y", START_TIMER_Y); + if (isTimerRunning === true){ + computeScore(false, true); + animateTimer(); + drawCards(); + } + }); }; + var animateChimp = function (answer) { + var timerChimp; + normalChimpImage.hide(); + if( answer === true){ + happyChimpImage.show(); + } else { + sadChimpImage.show(); + } - - - //put the buttons - var buttons=[]; - buttons[ 0 ] = { "surface": k.surfaces["bottomLt"], "id": 0}; - buttons[ 1 ] = { "surface": k.surfaces["bottomMd"], "id": 1}; - buttons[ 2 ] = { "surface": k.surfaces["bottomRt"], "id": 2}; - $.each(buttons, function( key, item ) { - item.surface.canvas.addEventListener('click', function( ev ) { - if ( choices[ item.id ] === total){ - answer(true); - game(); - }else { - answer(false); - game(); - } - - }, false); - }); + timerChip = setTimeout(function() { + happyChimpImage.hide(); + sadChimpImage.hide(); + normalChimpImage.show();}, 800); + + }; + + var congrats = function () { + var congratsText; + stopGame(); + + $('#overlay').css({"position": "absolute", "background": "white", "opacity": "0.7", + "width": 800, "height": 600, "z-index": 10}); + $('#overlayPaper').css({"position": "absolute", "z-index": "100", "opacity": 1}); + congratsChimp = overlayCard.paper.image( + k.library.images.happyChimp.src, 200, 100, 300, 400); + congratsChimp.attr({"fill-opacity": "1", "opacity": "1"}); + congratsText = overlayCard.paper.text(400, 550, "Great Job!"); + congratsText.attr({"font-size": 80}); + overlayCard.set.push(congratsChimp, congratsText); + + congratsChimp.node.addEventListener('click', function(){ + $('#overlay').css({"opacity": 0}); + overlayCard.set.remove(); + }, false); + }; + document.getElementById('start'). - addEventListener('click', start, false); + addEventListener('click', startGame, false); document.getElementById('stop'). - addEventListener('click', stop, false); + addEventListener('click', stopGame, true); document.getElementById('reset'). - addEventListener('click', reset, false); + addEventListener('click', resetGame, false); - k.library.images["normalChimp"].draw(k.surfaces["chimp"], 0, 0); + + //set up the timer + timerPaper = Raphael('timerPaper', 100, 150); + timerRect = timerPaper.rect(7, START_TIMER_Y, 85, 20, 3); + timerRect.attr('fill', "#fff"); + + //Set up the monkeys + chimpPaper = Raphael('chimpPaper', 120, 125); + normalChimpImage = chimpPaper.image(k.library.images.normalChimp.src, + 0, 20, 100, 100); + sadChimpImage = chimpPaper.image(k.library.images.sadChimp.src, + 0, 20, 100, 100); + happyChimpImage = chimpPaper.image(k.library.images.happyChimp.src, + 0, 20, 100, 100); + happyChimpImage.hide(); + sadChimpImage.hide(); + + //end of Karma.main }); + + //end of ready });
\ No newline at end of file diff --git a/examples/adding_up_to_10_svg/exercise.html b/examples/adding_up_to_10_svg/exercise.html index a99ec93..97d0855 100755 --- a/examples/adding_up_to_10_svg/exercise.html +++ b/examples/adding_up_to_10_svg/exercise.html @@ -4,9 +4,10 @@ <title>Adding up to 10 - Exercise (Alpha)</title> <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal" /> <link type="text/css" rel="stylesheet" href="css/lesson.css" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link type="image/ico" rel="icon" href="../../assets/default/images/favicon.ico" /> <link type="text/css" rel="stylesheet" href="../../css/karma.css" /> + <script type="text/javascript" src="../../js/raphael-min.js"></script> <script type="text/javascript" src="../../js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="../../js/karma.Gettext.js"></script> <script type="text/javascript" src="../../js/jquery.karma.js"></script> @@ -29,53 +30,52 @@ </section> <div id="karma-main"> - <div id="action"> - <div id="actionTop"> + <div id="main"> + <div id="top"> - <div id="topLtSide"> - <img id="topLtBox" src="assets/generic/images/yellowBox.png" alt="" /> - <canvas id="topLtCanvas" width="200px" height="200px"></canvas> + <div id="topLeftArea"> + <img id="topLeftCard" src="assets/generic/images/yellowBox.png" alt="" /> + <div id="topLeftPaper" ></div> </div> - <div id="topMd"> - <img id="plussign" src="assets/generic/images/plussign.png" alt=""/> + <div id="topMiddleArea"> + <img id="plusSign" src="assets/generic/images/plussign.png" alt=""/> </div> - <div id="topRtSide"> - <img id="topRtBox" src="assets/generic/images/yellowBox.png" alt=""/> - <canvas id="topRtCanvas" width="200px" height="200px"></canvas> + <div id="topRightArea"> + <img id="topRightCard" src="assets/generic/images/yellowBox.png" alt=""/> + <div id="topRightPaper"></div> </div> </div> <div id="bottom"> - <!-- <canvas id="bottomCanvas"></canvas> --> - <div id="bottomLt" class="bottom"> - <img class="bottomBox" src="assets/generic/images/yellowBox.png" alt=""/> - <canvas id="bottomLtCanvas" class="bottomBox" width="200px" height="200px"> </canvas> + <div id="bottomLeft" class="bottom"> + <img class="bottomCard" src="assets/generic/images/yellowBox.png" alt=""/> + <div id="bottomLeftPaper" class="bottomCard"> </div> </div> - <div id="bottomMd" class="bottom"> - <img class="bottomBox" src="assets/generic/images/yellowBox.png" alt=""/> - <canvas id="bottomMdCanvas" class="bottomBox" width="200px" height="200px"> </canvas> + <div id="bottomMiddle" class="bottom"> + <img class="bottomCard" src="assets/generic/images/yellowBox.png" alt=""/> + <div id="bottomMiddlePaper" class="bottomCard"> </div> </div> - <div id="bottomRt" class="bottom"> - <img class="bottomBox" src="assets/generic/images/yellowBox.png" alt=""/> - <canvas id="bottomRtCanvas" class="bottomBox" width="200px" height="200px"> </canvas> + <div id="bottomRight" class="bottom"> + <img class="bottomCard" src="assets/generic/images/yellowBox.png" alt=""/> + <div id="bottomRightPaper" class="bottomCard"> </div> </div> </div> </div> - <div id="sidebar"> - <div class="sidebarItem"> + <div id="side"> + <div class="sideItem"> <img id="timer" src="assets/generic/images/scorebox.png" alt=""/> - <canvas id="timerCanvas" width="100" height="140" > </canvas> + <div id="timerPaper"> </div> </div> - <div class="sidebarItem"> - <img id="scorebox" src="assets/generic/images/scorebox.png" alt=""/> - <canvas id="scoreboxCanvas" width="100" height="140"></canvas> + <div class="sideItem"> + <img id="scoreBox" src="assets/generic/images/scorebox.png" alt=""/> + <div id="scoreBoxText"></div> </div> - <div class="sidebarItem"> - <canvas id="chimpCanvas" width="120px" height="125px"> </canvas> + <div class="sideItem"> + <div id="chimpPaper"> </div> <div id="buttons"> <button id="start">Start</button> <button id="stop">Stop</button> @@ -85,8 +85,8 @@ </div> - - + <div id="overlay"></div> + <div id="overlayPaper"></div> </div> </div> diff --git a/examples/quadrilaterals/bg.png b/examples/quadrilaterals/bg.png Binary files differnew file mode 100755 index 0000000..1a4249f --- /dev/null +++ b/examples/quadrilaterals/bg.png diff --git a/examples/quadrilaterals/css/activity.css b/examples/quadrilaterals/css/activity.css deleted file mode 100755 index a2ae7e9..0000000 --- a/examples/quadrilaterals/css/activity.css +++ /dev/null @@ -1,4 +0,0 @@ -#Karma { position: relative; } -#canvasDrawing { position: absolute; top: 0px; left: 0px; } -#canvasTmp { position: absolute; top: 0px; left: 0px; } -.button { position: absolute; top: 0px; left: 0px; }
\ No newline at end of file diff --git a/examples/quadrilaterals/css/lesson.css b/examples/quadrilaterals/css/lesson.css new file mode 100755 index 0000000..3ed4696 --- /dev/null +++ b/examples/quadrilaterals/css/lesson.css @@ -0,0 +1,79 @@ +#main +{ + background-image: url('../images/bg.png'); + width: 550px; + height: 400px; +} + +#leftArea { + width: 60%; + display: inline; + float: left; + height: 100%; +} + +#rightArea { + width: 40%; + display: inline; + float: left; + height: 100%; +} + +#leftTop { + height: 20%; + position: relative; +} + +#leftMiddle { + height: 60%; +} + +#leftBottom { + height: 20%; + float: left; +} + + +#rightTop { + height: 30%; +} + +#rightMiddle { + height: 40%; +} + +#rightBottom { + height: 30%; +} + + + + + + +#Karma +{ + position: relative; +} + +.canvas +{ + position: absolute; + top: 0px; + left: 0px; +} + +#left +{ + float: left; + width: 350px; +} + +.left { + float:left; +} + +#instruction{ + position: absolute; + top: 60px; +}
\ No newline at end of file diff --git a/examples/quadrilaterals/images/bg_small.png b/examples/quadrilaterals/images/bg_small.png Binary files differdeleted file mode 100755 index 2dedab6..0000000 --- a/examples/quadrilaterals/images/bg_small.png +++ /dev/null diff --git a/examples/quadrilaterals/images/erase.png b/examples/quadrilaterals/images/erase.png Binary files differindex 6e54657..f2ea68f 100755 --- a/examples/quadrilaterals/images/erase.png +++ b/examples/quadrilaterals/images/erase.png diff --git a/examples/quadrilaterals/images/eraseOver.png b/examples/quadrilaterals/images/eraseOver.png Binary files differdeleted file mode 100755 index bea6dbf..0000000 --- a/examples/quadrilaterals/images/eraseOver.png +++ /dev/null diff --git a/examples/quadrilaterals/images/next.png b/examples/quadrilaterals/images/next.png Binary files differindex a320792..81cc3c0 100755 --- a/examples/quadrilaterals/images/next.png +++ b/examples/quadrilaterals/images/next.png diff --git a/examples/quadrilaterals/images/previous.png b/examples/quadrilaterals/images/previous.png Binary files differindex 11232d4..ef3b168 100755 --- a/examples/quadrilaterals/images/previous.png +++ b/examples/quadrilaterals/images/previous.png diff --git a/examples/quadrilaterals/index.html b/examples/quadrilaterals/index.html index 346bbb7..c97cfc8 100755 --- a/examples/quadrilaterals/index.html +++ b/examples/quadrilaterals/index.html @@ -1,46 +1,57 @@ -<html lang="en"> - -<head> -<title>Quadrilaterals - Karma </title> -<meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> -<link rel="shortcut icon" href="http://karma.sugarlabs.org/favicon.ico"> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="js/quadrilaterals.js" ></script> -<link rel="stylesheet" type="text/css" href="css/quadrilaterals.css" /> - -<link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> -<link rel="stylesheet" href="css/activity.css" type="text/css"/> - -<script type="text/javascript" src="../../js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="../../js/jquery.ui.all.js"></script> -<script type="text/javascript" src="../../js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="js/activity.js"></script> - - -</head> - +<!DOCTYPE html> +<html> + <head> + <title>Quadrilaterals - Karma </title> + <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"/> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="http://karma.sugarlabs.org/favicon.ico"/> + <script type="text/javascript" src="js/quadrilaterals.js" ></script> + <link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> + <link rel="stylesheet" href="css/lesson.css" type="text/css"/> + <script type="text/javascript" src="../../js/jquery-1.3.2.min.js"></script> + <script type="text/javascript" src="../../js/jquery.jgrowl_minimized.js"></script> + <script type="text/javascript" src="js/lesson.js"></script> + </head> <body> - <noscript> Man, you need to enable JavaScript. </noscript> + <div id="main"> - <div id="Karma" class="kanimation"> - <canvas id="canvas" width="550" height="400"></canvas> - <canvas id="canvasDrawing" width="550" height="400"></canvas> - <canvas id="canvasTmp" width="550" height="400"></canvas> - <div class="kbutton" id="previous">Previous</div> - <div class="kbutton" id="next">Next</div> + <div id="leftArea"> + <div id="leftTop"> + <div id="instruction"> Construct a quadrilateral by moving + the given straight lines to appropriate places </div> + </div> + <div id="leftMiddle"> + <div id="Karma"> + <canvas id="canvas" class="canvas" width="550" height="400"></canvas> + <canvas id="canvasDrawing" class="canvas" width="550" height="400"></canvas> + <canvas id="canvasTmp" class="canvas" width="550" height="400"></canvas> + </div> + </div> + <div id="leftBottom"> + <img id="btnErase" src="images/erase.png" /> + </div> + </div> + <div id="rightArea" class="left"> + <div id="rightTop"> + </div> + <div id="rightMiddle"> + <div id="textExample">Make quadrilaterals on geo-board</div> + </div> + <div id="rightBottom"> + <div id="btn"> + <img id="imgPrev" src="images/previous.png" /> + <img id="imgNext" src="images/next.png" /> + </div> + </div> + </div> </div> - <div id="bottom"> - <div class="kbutton" id="erase">Erase</div> - </div> - <div id="debug"> </div> - - + </body> + </html> diff --git a/examples/quadrilaterals/js/activity.js b/examples/quadrilaterals/js/lesson.js index 0c76232..7bd09af 100755 --- a/examples/quadrilaterals/js/activity.js +++ b/examples/quadrilaterals/js/lesson.js @@ -11,10 +11,6 @@ $(document).ready(function(){ ctxTmp.lineWidth = 3; ctxTmp.lineCap = 'round'; - var path={ - images: "images/" - }; - // var points=[]; //points of the quadrilateral function reset() { @@ -23,35 +19,11 @@ $(document).ready(function(){ started=false; points=[]; } - // + var buttons= { - next:{ x:510, y:135, width:30, height:30, - mouseup:function( ev ) {$.jGrowl("next pressed");}, - mousedown:function( ev ) { }, - mouseover:function( ev ) { } - }, - prev:{ x:330, y:135, width:30, height:30, - mouseup:function( ev ) {$.jGrowl("prev pressed");}, - mousedown:function( ev ) { }, - mouseover:function( ev ) { } - }, - erase:{ x:10, y:230, width:70, height:24, - mouseup:function( ev ) { - reset(); - }, - mousedown:function( ev ) {}, - mouseover:function( ev ) { - imgErase.src= path.images + "eraseOver.png"; - imgErase.onload = function(){ - ctx.drawImage( imgErase, 10, 230 ); - ctx.font = "bold 13px sans-serif"; - ctx.fillStyle = "#000000"; - ctx.fillText ( "Erase", 25, 245 ); - } - - } - } - }; + next:{ x:510, y:135, width:30, height:30}, + prev:{ x:330, y:135, width:30, height:30} + }; //f of functions, a "place" to put functions ;) var f={ @@ -87,10 +59,25 @@ $(document).ready(function(){ } }; - var imgBg = new Image(); //creates the image element for background - var imgErase = new Image(); //creates the image element for erase button - var imgPrev = new Image(); //creates the image element for previous button - var imgNext = new Image(); //creates the image element for next button + //var imgBg = document.getElementById("bg"); //creates the image element for background + var imgErase = document.getElementById("btnErase");; //creates the image element for erase button + var imgPrev = document.getElementById("imgPrev");//creates the image element for previous button + var imgNext = document.getElementById("imgNext");//creates the image element for next button + + imgNext.onmouseup = function() + { + $.jGrowl("next pressed"); + }; + + imgPrev.onmouseup = function() + { + $.jGrowl("previous pressed"); + }; + + imgErase.onmouseup = function() + { + reset(); + } //necessary stuff to do test the figure var match = false; function sortPoint( a, b) { @@ -122,40 +109,8 @@ $(document).ready(function(){ return true; } - - // - imgBg.src = path.images + "bg.png"; - imgBg.onload = function(){ - ctx.drawImage( imgBg, 0, 0 ); - - imgNext.src = path.images + "next.png"; - imgNext.alt = "next"; - imgNext.onload = function(){ - ctx.drawImage( imgNext, buttons.next.x, buttons.next.y, buttons.next.width, buttons.next.height ); - } - imgPrev.src= path.images + "previous.png"; - imgPrev.onload = function(){ - ctx.drawImage( imgPrev, buttons.prev.x, buttons.prev.y, buttons.prev.width, buttons.prev.height ); - } - - - imgErase.src= path.images + "erase.png"; - imgErase.onload = function(){ - ctx.drawImage( imgErase, 10, 230 ); - ctx.font = "bold 13px sans-serif"; - ctx.fillStyle = "#000000" - ctx.fillText ( "Erase", 25, 245 ); - } - - //Karma (need to add a textField function, something like flash one) - ctx.font = "bold 13px sans-serif"; - ctx.fillStyle = "#B74000" - ctx.fillText( "Construct a quadrilateral by moving the", 10, 40 ); - ctx.fillText( "given straight lines to appropriate places", 10, 60 ); - ctx.fillText( "Make quadrilaterals on geo-board", 330, 60 ); - //drawing area ctx.fillStyle = "rgba( 111, 226, 245, 0.7)"; ctx.strokeStyle = "#B74000" @@ -249,7 +204,7 @@ $(document).ready(function(){ } } - } + //clipping path, this is the drawing region ctxTmp.beginPath(); @@ -267,9 +222,7 @@ $(document).ready(function(){ return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) ; } var mouse= {x:0, y:0, x0:0, y0:0, listeners:[] }; - var debug,d; var started=false,counter=0; - //drawing object @@ -282,11 +235,7 @@ $(document).ready(function(){ } drawing.mousemove = function (ev) { if (started) { - //$("#debug").html( mouse.x +" "+mouse.y ); - //var lingrad = ctx.createLinearGradient(mouse.x0, mouse.y0,mouse.x, mouse.y); - //lingrad.addColorStop(0.5, '#000000'); - //lingrad.addColorStop(1, '#ff0000'); - //ctxTmp.strokeStyle = lingrad; + ctxTmp.clearRect(0, 0, canvas.width, canvas.height); ctxTmp.beginPath(); @@ -312,8 +261,7 @@ $(document).ready(function(){ $.each(buttons, function( i, val ){ d = distance2(mouse.x, buttons[i].x + buttons[i].width/2, mouse.y, buttons[i].y + buttons[i].height/2); mouse.minDist=(buttons[i].width/2) * (buttons[i].height/2); - //debug+="<br>"+i+" d="+ d +" <="+mouse.minDist; - //(buttons[i].width/2) * (buttons[i].height/2) + if ( d <= mouse.minDist ){ if ( ev.type==="mousemove"){ buttons[i]["mouseover"]( ev ); @@ -328,12 +276,7 @@ $(document).ready(function(){ }); //$("#debug").html( debug ); } - /* - //deprecated - canvasTmp.addEventListener('mouseup', onMouseUp, false); - canvasTmp.addEventListener('mousedown', onMouseDown, false); - canvasTmp.addEventListener('mousemove', onMouseMove, false); - */ + //Karma handler (need to work around mouse out) canvasTmp.addEventListener('mouseup', mouseHandler, false); canvasTmp.addEventListener('mousedown', mouseHandler, false); @@ -345,4 +288,4 @@ $(document).ready(function(){ -});
\ No newline at end of file +}); @@ -1,51 +1,45 @@ -<html lang="en"> - +<!DOCTYPE html> +<html> <head> <title>Chakra (Alpha)</title> -<meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> - +<meta name="keywords" content="karma javascript html5 sugar sugarlabs gsoc ole nepal"/> +<meta charset="UTF-8"/> +<link type="image/ico" rel="icon" href="assets/default/images/favicon.ico" /> <link rel="stylesheet" href="css/chakra.css" type="text/css"/> -<link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> - -<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="js/jquery.ui.all.js"></script> -<script type="text/javascript" src="js/jquery.jgrowl_minimized.js"></script> -<script type="text/javascript" src="js/jquery.idTabs.min.js"></script> - -<link type="image/ico" rel="icon" href="../../assets/default/images/favicon.ico" /> - +<script src="js/jquery-1.3.2.min.js"></script> +<script src="js/knavbar.js"></script> </head> <body> - -<div id="mainmenu"> -<div id="navigation"> -<img src="assets/default/images/chakra_logo.png" alt="Home" title="Home" class="chakra_logo"> -<img src="assets/default/images/help.png" alt="Help" title="Help" class="icon_right"> -<img src="assets/default/images/karma_logo.png" alt="Karma icon" title="About Karma" class="icon_right"> -</div> -<div id="grades"> -<ul> -<li id="grade1"><a href="chakra/grade1.html"><img src="assets/default/images/grade1.png" alt="Grade 1" title="grade1">Grade 1</a></li> -<li id="grade2"><a href="#tab_grade2"><img src="assets/default/images/grade2_bw.png" alt="Grade 2" title="grade2">Grade 2</a></li> -<li id="grade3"><a href="#tab_grade3"><img src="assets/default/images/grade3.png" alt="Grade 3" title="grade3">Grade 3</a></li> -<li id="grade4"><a href="#tab_grade4"><img src="assets/default/images/grade4_bw.png" alt="Grade 4" title="grade4">Grade 4</a></li> -<li id="grade5"><a href="#tab_grade5"><img src="assets/default/images/grade5_bw.png" alt="Grade 5" title="grade5">Grade 5</a></li> -<li id="grade6"><a href="#tab_grade6"><img src="assets/default/images/grade6.png" alt="Grade 6" title="grade6">Grade 6</a></li> -<li id="grade7"><a href="#tab_grade7"><img src="assets/default/images/grade7_bw.png" alt="Grade 7" title="grade7">Grade 7</a></li> -<li id="grade8"><a href="#tab_grade8"><img src="assets/default/images/grade8_bw.png" alt="Grade 8" title="grade8">Grade 8</a></li> -</ul> -</div> -<div id="admin"> -<ul> -<li id="profile"><a href="#tab_profile"><img src="assets/default/images/profile.png" alt="Student Profile" title="My profile"><br />Student Profile</a></li> -<li id="mystuff"><a href="#tab_mystuff"><img src="assets/default/images/mystuff.png" alt="My Stuff" title="My stuff"><br />My Stuff</a></li> -<li id="about"><a href="#tab_about"><img src="assets/default/images/karma_logo.png" width="80px" alt="About Karma" title="about"><br />About Karma</a></li> -</ul> -</div> -</div> - +<section id="navigation"> + +</section> + +<section id="middle"> + <section class="middleRow"> + <ul> + <li><a href="chakra/grade1.html"><img src="assets/images/grade1.png" alt="Grade 1" title="grade1"/><p>Grade 1</p></a></li> + <li><a href="#tab_grade2"><img src="assets/images/grade2_bw.png" alt="Grade 2" title="grade2"/><p>Grade 2</p></a></li> + <li><a href="#tab_grade3"><img src="assets/images/grade3.png" alt="Grade 3" title="grade3"/><p>Grade 3</p></a></li> + <li><a href="#tab_grade4"><img src="assets/images/grade4_bw.png" alt="Grade 4" title="grade4"/><p>Grade 4</p></a></li> + </ul> + </section> + <section class="middleRow"> + <ul> + <li><a href="#tab_grade5"><img src="assets/images/grade5_bw.png" alt="Grade 5" title="grade5"/><p>Grade 5</p></a></li> + <li><a href="#tab_grade6"><img src="assets/images/grade6.png" alt="Grade 6" title="grade6"/><p>Grade 6</p></a></li> + <li><a href="#tab_grade7"><img src="assets/images/grade7_bw.png" alt="Grade 7" title="grade7"/><p>Grade 7</p></a></li> + <li><a href="#tab_grade8"><img src="assets/images/grade8_bw.png" alt="Grade 8" title="grade8"/><p>Grade 8</p></a></li> + </ul> + </section> +</section><!-- end middle --> + +<section id="admin"> + <ul> + <li id="profile"><a href="#tab_profile"><img src="assets/images/profile.png" alt="Student Profile" title="My profile"/><p>Student Profile</p></a></li> + <li id="mystuff"><a href="#tab_mystuff"><img src="assets/images/mystuff.png" alt="My Stuff" title="My stuff"/><p>My Stuff</p></a></li> + <li id="about"><a href="#tab_about"><img src="assets/images/karma_logo.png" alt="About Karma" title="About Karma"/><p>About Karma</p></a></li> + </ul> +</section><!-- end admin --> </body> </html> diff --git a/index_nepal.html b/index_nepal.html index 9b7e28f..e0d5dca 100755 --- a/index_nepal.html +++ b/index_nepal.html @@ -3,15 +3,12 @@ <head> <title>Chakra (Alpha)</title> <meta name="keywords" content="karma,javascript,html5,sugar,sugarlabs,gsoc,ole,nepal"> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta charset="utf-8"> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<meta charset="utf-8"/> <link rel="stylesheet" href="css/chakra_nepal.css" type="text/css"/> -<link rel="stylesheet" href="css/jquery.jgrowl.css" type="text/css"/> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> -<script type="text/javascript" src="js/jquery.ui.all.js"></script> -<script type="text/javascript" src="js/jquery.jgrowl_minimized.js"></script> <script type="text/javascript" src="js/jquery.idTabs.min.js"></script> </head> diff --git a/js/jquery-ui-1.7.2.core.js b/js/jquery-ui-1.7.2.core.js deleted file mode 100755 index 5493e0a..0000000 --- a/js/jquery-ui-1.7.2.core.js +++ /dev/null @@ -1,519 +0,0 @@ -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -;jQuery.ui || (function($) { - -var _remove = $.fn.remove, - isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9); - -//Helper functions and ui object -$.ui = { - version: "1.7.2", - - // $.ui.plugin is deprecated. Use the proxy pattern instead. - plugin: { - add: function(module, option, set) { - var proto = $.ui[module].prototype; - for(var i in set) { - proto.plugins[i] = proto.plugins[i] || []; - proto.plugins[i].push([option, set[i]]); - } - }, - call: function(instance, name, args) { - var set = instance.plugins[name]; - if(!set || !instance.element[0].parentNode) { return; } - - for (var i = 0; i < set.length; i++) { - if (instance.options[set[i][0]]) { - set[i][1].apply(instance.element, args); - } - } - } - }, - - contains: function(a, b) { - return document.compareDocumentPosition - ? a.compareDocumentPosition(b) & 16 - : a !== b && a.contains(b); - }, - - hasScroll: function(el, a) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ($(el).css('overflow') == 'hidden') { return false; } - - var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', - has = false; - - if (el[scroll] > 0) { return true; } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[scroll] = 1; - has = (el[scroll] > 0); - el[scroll] = 0; - return has; - }, - - isOverAxis: function(x, reference, size) { - //Determines when x coordinate is over "b" element axis - return (x > reference) && (x < (reference + size)); - }, - - isOver: function(y, x, top, left, height, width) { - //Determines when x, y coordinates is over "b" element - return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); - }, - - keyCode: { - BACKSPACE: 8, - CAPS_LOCK: 20, - COMMA: 188, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38 - } -}; - -// WAI-ARIA normalization -if (isFF2) { - var attr = $.attr, - removeAttr = $.fn.removeAttr, - ariaNS = "http://www.w3.org/2005/07/aaa", - ariaState = /^aria-/, - ariaRole = /^wairole:/; - - $.attr = function(elem, name, value) { - var set = value !== undefined; - - return (name == 'role' - ? (set - ? attr.call(this, elem, name, "wairole:" + value) - : (attr.apply(this, arguments) || "").replace(ariaRole, "")) - : (ariaState.test(name) - ? (set - ? elem.setAttributeNS(ariaNS, - name.replace(ariaState, "aaa:"), value) - : attr.call(this, elem, name.replace(ariaState, "aaa:"))) - : attr.apply(this, arguments))); - }; - - $.fn.removeAttr = function(name) { - return (ariaState.test(name) - ? this.each(function() { - this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); - }) : removeAttr.call(this, name)); - }; -} - -//jQuery plugins -$.fn.extend({ - remove: function() { - // Safari has a native remove event which actually removes DOM elements, - // so we have to use triggerHandler instead of trigger (#3037). - $("*", this).add(this).each(function() { - $(this).triggerHandler("remove"); - }); - return _remove.apply(this, arguments ); - }, - - enableSelection: function() { - return this - .attr('unselectable', 'off') - .css('MozUserSelect', '') - .unbind('selectstart.ui'); - }, - - disableSelection: function() { - return this - .attr('unselectable', 'on') - .css('MozUserSelect', 'none') - .bind('selectstart.ui', function() { return false; }); - }, - - scrollParent: function() { - var scrollParent; - if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } - - return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; - } -}); - - -//Additional selectors -$.extend($.expr[':'], { - data: function(elem, i, match) { - return !!$.data(elem, match[3]); - }, - - focusable: function(element) { - var nodeName = element.nodeName.toLowerCase(), - tabIndex = $.attr(element, 'tabindex'); - return (/input|select|textarea|button|object/.test(nodeName) - ? !element.disabled - : 'a' == nodeName || 'area' == nodeName - ? element.href || !isNaN(tabIndex) - : !isNaN(tabIndex)) - // the element and all of its ancestors must be visible - // the browser may report that the area is hidden - && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; - }, - - tabbable: function(element) { - var tabIndex = $.attr(element, 'tabindex'); - return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); - } -}); - - -// $.widget is a factory to create jQuery plugins -// taking some boilerplate code out of the plugin code -function getter(namespace, plugin, method, args) { - function getMethods(type) { - var methods = $[namespace][plugin][type] || []; - return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); - } - - var methods = getMethods('getter'); - if (args.length == 1 && typeof args[0] == 'string') { - methods = methods.concat(getMethods('getterSetter')); - } - return ($.inArray(method, methods) != -1); -} - -$.widget = function(name, prototype) { - var namespace = name.split(".")[0]; - name = name.split(".")[1]; - - // create plugin method - $.fn[name] = function(options) { - var isMethodCall = (typeof options == 'string'), - args = Array.prototype.slice.call(arguments, 1); - - // prevent calls to internal methods - if (isMethodCall && options.substring(0, 1) == '_') { - return this; - } - - // handle getter methods - if (isMethodCall && getter(namespace, name, options, args)) { - var instance = $.data(this[0], name); - return (instance ? instance[options].apply(instance, args) - : undefined); - } - - // handle initialization and non-getter methods - return this.each(function() { - var instance = $.data(this, name); - - // constructor - (!instance && !isMethodCall && - $.data(this, name, new $[namespace][name](this, options))._init()); - - // method call - (instance && isMethodCall && $.isFunction(instance[options]) && - instance[options].apply(instance, args)); - }); - }; - - // create widget constructor - $[namespace] = $[namespace] || {}; - $[namespace][name] = function(element, options) { - var self = this; - - this.namespace = namespace; - this.widgetName = name; - this.widgetEventPrefix = $[namespace][name].eventPrefix || name; - this.widgetBaseClass = namespace + '-' + name; - - this.options = $.extend({}, - $.widget.defaults, - $[namespace][name].defaults, - $.metadata && $.metadata.get(element)[name], - options); - - this.element = $(element) - .bind('setData.' + name, function(event, key, value) { - if (event.target == element) { - return self._setData(key, value); - } - }) - .bind('getData.' + name, function(event, key) { - if (event.target == element) { - return self._getData(key); - } - }) - .bind('remove', function() { - return self.destroy(); - }); - }; - - // add widget prototype - $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); - - // TODO: merge getter and getterSetter properties from widget prototype - // and plugin prototype - $[namespace][name].getterSetter = 'option'; -}; - -$.widget.prototype = { - _init: function() {}, - destroy: function() { - this.element.removeData(this.widgetName) - .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') - .removeAttr('aria-disabled'); - }, - - option: function(key, value) { - var options = key, - self = this; - - if (typeof key == "string") { - if (value === undefined) { - return this._getData(key); - } - options = {}; - options[key] = value; - } - - $.each(options, function(key, value) { - self._setData(key, value); - }); - }, - _getData: function(key) { - return this.options[key]; - }, - _setData: function(key, value) { - this.options[key] = value; - - if (key == 'disabled') { - this.element - [value ? 'addClass' : 'removeClass']( - this.widgetBaseClass + '-disabled' + ' ' + - this.namespace + '-state-disabled') - .attr("aria-disabled", value); - } - }, - - enable: function() { - this._setData('disabled', false); - }, - disable: function() { - this._setData('disabled', true); - }, - - _trigger: function(type, event, data) { - var callback = this.options[type], - eventName = (type == this.widgetEventPrefix - ? type : this.widgetEventPrefix + type); - - event = $.Event(event); - event.type = eventName; - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if (event.originalEvent) { - for (var i = $.event.props.length, prop; i;) { - prop = $.event.props[--i]; - event[prop] = event.originalEvent[prop]; - } - } - - this.element.trigger(event, data); - - return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false - || event.isDefaultPrevented()); - } -}; - -$.widget.defaults = { - disabled: false -}; - - -/** Mouse Interaction Plugin **/ - -$.ui.mouse = { - _mouseInit: function() { - var self = this; - - this.element - .bind('mousedown.'+this.widgetName, function(event) { - return self._mouseDown(event); - }) - .bind('click.'+this.widgetName, function(event) { - if(self._preventClickEvent) { - self._preventClickEvent = false; - event.stopImmediatePropagation(); - return false; - } - }); - - // Prevent text selection in IE - if ($.browser.msie) { - this._mouseUnselectable = this.element.attr('unselectable'); - this.element.attr('unselectable', 'on'); - } - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - - // Restore text selection in IE - ($.browser.msie - && this.element.attr('unselectable', this._mouseUnselectable)); - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - // TODO: figure out why we have to use originalEvent - event.originalEvent = event.originalEvent || {}; - if (event.originalEvent.mouseHandled) { return; } - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var self = this, - btnIsLeft = (event.which == 1), - elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return self._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return self._mouseUp(event); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - // preventDefault() is used to prevent the selection of text here - - // however, in Safari, this causes select boxes not to be selectable - // anymore, so this fix is needed - ($.browser.safari || event.preventDefault()); - - event.originalEvent.mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - this._preventClickEvent = (event.target == this._mouseDownEvent.target); - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(event) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(event) {}, - _mouseDrag: function(event) {}, - _mouseStop: function(event) {}, - _mouseCapture: function(event) { return true; } -}; - -$.ui.mouse.defaults = { - cancel: null, - distance: 1, - delay: 0 -}; - -})(jQuery); diff --git a/js/jquery.idTabs.min.js b/js/jquery.idTabs.min.js deleted file mode 100755 index 7106f54..0000000 --- a/js/jquery.idTabs.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* idTabs ~ Sean Catchpole - Version 2.2 - MIT/GPL */ -(function(){var dep={"jQuery":"http://code.jquery.com/jquery-latest.min.js"};var init=function(){(function($){$.fn.idTabs=function(){var s={};for(var i=0;i<arguments.length;++i){var a=arguments[i];switch(a.constructor){case Object:$.extend(s,a);break;case Boolean:s.change=a;break;case Number:s.start=a;break;case Function:s.click=a;break;case String:if(a.charAt(0)=='.')s.selected=a;else if(a.charAt(0)=='!')s.event=a;else s.start=a;break;}} -if(typeof s['return']=="function") -s.change=s['return'];return this.each(function(){$.idTabs(this,s);});} -$.idTabs=function(tabs,options){var meta=($.metadata)?$(tabs).metadata():{};var s=$.extend({},$.idTabs.settings,meta,options);if(s.selected.charAt(0)=='.')s.selected=s.selected.substr(1);if(s.event.charAt(0)=='!')s.event=s.event.substr(1);if(s.start==null)s.start=-1;var showId=function(){if($(this).is('.'+s.selected)) -return s.change;var id="#"+this.href.split('#')[1];var aList=[];var idList=[];$("a",tabs).each(function(){if(this.href.match(/#/)){aList.push(this);idList.push("#"+this.href.split('#')[1]);}});if(s.click&&!s.click.apply(this,[id,idList,tabs,s]))return s.change;for(i in aList)$(aList[i]).removeClass(s.selected);for(i in idList)$(idList[i]).hide();$(this).addClass(s.selected);$(id).show();return s.change;} -var list=$("a[href*='#']",tabs).unbind(s.event,showId).bind(s.event,showId);list.each(function(){$("#"+this.href.split('#')[1]).hide();});var test=false;if((test=list.filter('.'+s.selected)).length);else if(typeof s.start=="number"&&(test=list.eq(s.start)).length);else if(typeof s.start=="string"&&(test=list.filter("[href*='#"+s.start+"']")).length);if(test){test.removeClass(s.selected);test.trigger(s.event);} -return s;} -$.idTabs.settings={start:0,change:false,click:null,selected:".selected",event:"!click"};$.idTabs.version="2.2";$(function(){$(".idTabs").idTabs();});})(jQuery);} -var check=function(o,s){s=s.split('.');while(o&&s.length)o=o[s.shift()];return o;} -var head=document.getElementsByTagName("head")[0];var add=function(url){var s=document.createElement("script");s.type="text/javascript";s.src=url;head.appendChild(s);} -var s=document.getElementsByTagName('script');var src=s[s.length-1].src;var ok=true;for(d in dep){if(check(this,d))continue;ok=false;add(dep[d]);}if(ok)return init();add(src);})(); diff --git a/js/jquery.karma.js b/js/jquery.karma.js index 504addd..90e7811 100755 --- a/js/jquery.karma.js +++ b/js/jquery.karma.js @@ -31,14 +31,13 @@ /** * @fileOverview Contains karma library -* @version 0.08 +* @version 0.1 * @author Felipe Lopez Toledo <zer.subzero@gmail.com> */ /** - * See (http://jquery.com/). - * @class + * See <a href="http://jquery.com">jQuery</a>. * @name jQuery * @exports $ as jQuery */ @@ -93,14 +92,15 @@ var clone = function( obj ){ Karma @name Karma @class Represents a Karma (master) object. +@namespace @param {String | Object } options Constructor arguments @param {String | Object } [options.container] Target DIV-class that will contain any canvas element created using Karma functions @param {String} [options.language] */ -var Karma = function(options ) { +var Karma = function( options ) { var that = this; - this.version = "0.08"; + this.version = "0.01"; // //relative path to the po, images, sounds, etc. from the html //defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout @@ -151,7 +151,7 @@ var Karma = function(options ) { } } return { "lang": lang }; - } + }; /** Creates a new Gettext object and returns a shortcut function to localise defined strings.<br>We use karma.Gettext.js it's a modification of @@ -204,7 +204,7 @@ var Karma = function(options ) { //dirty hack to support {lang}_AudioFile var prefix = lang+"_"; that.paths[ "sounds" ].localized+=prefix; - } + }; /** It will attempt to load a language file, the posible languages are defined on language.alternatives. @@ -234,10 +234,11 @@ var Karma = function(options ) { loaded = lang + "." + that.supportedLangFileTypes[i].ext; - //i18n - //we pass the data so we avoid re-loading the file - //creates the shorcout - that.i18n.root[ that.i18n.shortcut ] = i18nWrapper( + //i18n + //we pass the data so we avoid re-loading the file + //creates the shorcout + //Bryan: we aren't using this right now + /* that.i18n.root[ that.i18n.shortcut ] = i18nWrapper( { domain : lang, file : { @@ -245,9 +246,9 @@ var Karma = function(options ) { uri: this.url, data: data } } - ); + );*/ localiseContent( lang ); - tryNext = false; + tryNext = false; }, error: function ( XHR, textStatus, errorThrown ) { //the file doesn't exist or it wasn't possible to load it @@ -258,7 +259,7 @@ var Karma = function(options ) { } }); return loaded; - } + }; //PRIVATE STUFF end // default options var defaultOptions ={ @@ -318,21 +319,12 @@ var Karma = function(options ) { "paths": this.paths } this.surfaces = {}; -} - -/** @memberOf Karma **/ -Karma.prototype.surface = function ( options ) { - if ( !valid(options, "object") ){ - var options = { name: "ksurface-"+ (this.surfaces.length + 1 ) }; - } - options.mainContainer = this.container; - options.paths = this.paths; - this.surfaces[ options.name ] = new KSurface( options ); - return this.surface[ options.name ]; -} - +}; -/** @memberOf Karma **/ +/** +@memberOf Karma +@namespace Geometry functions. +**/ Karma.prototype.geometry = { /** Converts a value from degrees to radians. @@ -343,6 +335,7 @@ Karma.prototype.geometry = { return ( angle / 180 ) * Math.PI; }, /** + Gets the square of the Euclidian (ordinary) distance between 2 points. @param {Number} Point Point No. 0 @param {Number} Point Point No. 1 @returns {Number} The square of the Euclidian distance @@ -351,7 +344,7 @@ Karma.prototype.geometry = { return (p1.x - p0.x) * (p1.x - p0.x) + (p1.y - p1.y) * (p1.y - p1.y); }, /** - Get the Euclidian (ordinary) distance between 2 points.<br> + Gets the Euclidian (ordinary) distance between 2 points.<br> <b>Warning:</b> It's slower than distance2 function @param {Number} Point Point No. 0 @param {Number} Point Point No. 1 @@ -360,7 +353,8 @@ Karma.prototype.geometry = { distance : function ( p0, p1 ) { return Math.sqrt( Karma.prototype.geometry.distance2( p0, p1 ) ); } -} + +}; /** @memberOf Karma @namespace Graphics functions. @@ -390,7 +384,7 @@ Karma.prototype.math = { return Math.round ( Math.random() * (upper - lower) + lower ); } } -// +//FIXME //everything inside karma.graphics is exported to karma.prototype $.extend( Karma.prototype, Karma.prototype.graphics); // @@ -405,7 +399,7 @@ $.extend( Karma.prototype, Karma.prototype.graphics); Karma.prototype.init = function( toLoad ) { this.pendingToLoad = toLoad; return this; //chaining :) -} +}; /** Main function. Any Karma function call should be inside the callback function. @@ -423,7 +417,7 @@ Karma.prototype.main = function ( cb ) { var statusUpdate = function ( current, error, total) { statusDiv.html(current + "/" + total + (error > 0 ? " [ "+error+" ]":'')); - } + }; var that = this; var categories = ["images", "sounds", "videos" ]; @@ -463,7 +457,7 @@ Karma.prototype.main = function ( cb ) { $(this).remove();}); if ( cb ) cb(); } - } + }; for ( var i=0; i < categories.length; i++ ) { var category = categories[ i ]; @@ -490,32 +484,58 @@ Karma.prototype.main = function ( cb ) { if ( cb ) cb(); } } -/**A shortcut for calling 'KImage( )' +/** +A shortcut for calling 'KImage( )' @see KImage @memberOf Karma +@returns {Object} new instance of KImage object **/ Karma.prototype.image = function ( args ) { return new KImage( args ) }; -/**A shortcut for calling 'KSound( )' +/** +A shortcut for calling 'KSound( )' @see KSound @memberOf Karma +@returns {Object} new instance of KSound object **/ Karma.prototype.sound = function ( args ) { return new KSound( args ) }; -/**A shortcut for calling 'KVideo( )' +/** +A shortcut for calling 'KVideo( )' @see KVideo @memberOf Karma +@returns {Object} new instance of KVideo object **/ Karma.prototype.video = function ( args ) { alert("Not implemented yet"); }; -/**A shortcut for calling 'KGroup( )' +/** +A shortcut for calling 'KGroup( )' @see KGroup @memberOf Karma +@returns {Object} new instance of KGroup object **/ Karma.prototype.group = function ( args ) { return new KGroup( args ) }; -/**A shortcut for calling 'KButton( )' +/** +A shortcut for calling 'KButton( )' @see KButton @memberOf Karma +@returns {Object} new instance of KButton object **/ Karma.prototype.button = function ( args ) { return new KButton( args ) }; /** +A shortcut for calling 'KSurface(.. )'. +@see KSurface +@memberOf Karma +@returns {Object} new instance of KSurface object +**/ +Karma.prototype.surface = function ( options ) { + if ( !valid(options, "object") ){ + var options = { name: "ksurface-"+ ( this.surfaces.length + 1 ) }; + } + options.mainContainer = this.container; + options.paths = this.paths; + this.surfaces[ options.name ] = new KSurface( options ); + return this.surface[ options.name ]; +}; + +/** Mouse **/ var mouse = {}; @@ -529,10 +549,10 @@ mouse.getRelativeCanvasPosition = function ( ev ) { xy.x = ev.layerX; xy.y = ev.layerY; return xy; -} +}; //Events stuff -var master ={} +var master ={}; master.buttons =[]; var handleEvents = function( ev ) { var xy = mouse.getRelativeCanvasPosition( ev ); @@ -552,7 +572,9 @@ var handleEvents = function( ev ) { }; /** -@returns {Object} A new class +Master class creator. It will merge all the properties and methods of the +recived arguments (objects) into one new class that wil be returned. +@returns {Object} The new class **/ var Class = function ( ) { var log=""; @@ -599,14 +621,32 @@ var Class = function ( ) { }; /** -Creates a new surface -@param {object} options -@param {string} [options.name] -@param {string | object} [options.container] -@param {number} [width=100] -@param {number} [height=100] -@param {number} [fps=24] -@param {boolean} [visible=true] +Creates a new surface. A surface is a 'canvas' element with additional methods +that makes easier its manipulation. <br> +There are 2 ways to create a new KSurface: +<ol> + <li><b>Using an existing canvas element:</b>You must provide at least + the 'canvas' parameter. The 'name' is optional (if it's not provided the + 'canvas' parameter will be used). + </li> + <li><b>Creating a new canvas element:</b> A new 'canvas' element will be + created and it will be appended to the specific 'container'. + You must provide at least the 'name' and 'container' parameters. + </li> +</ol> +@name KSurface +@class KSurface class +@param {object} options Constructor options. +@param {string} [options.name] The desired name for the surface. The value must + be unique among others KSurfaces-name objects. +@param {string} [options.canvas] The name of the element. Commonly the + canvas-id value. +@param {string | object} [options.container] The the name of the container + element. Commonly a div-id value. +@param {number} [width=100] The width of the canvas. +@param {number} [height=100] The height of the canvas. +@param {number} [fps=24] The frames per second for any refresh operation. +@param {boolean} [visible=true] 'true' if the content is visible (will be drawn). @memberOf Karma **/ var KSurface = Class( @@ -642,7 +682,7 @@ var KSurface = Class( height: 100, fps: 24, visible: true - } + }; $.extend( this, defaultOptions, options); if ( !this.canvas ) { @@ -695,8 +735,8 @@ var KSurface = Class( throw ("wtf?!: impossible to chain " + name + "!"); } return that; - } - } + }; + }; for (var i=0; i<toChain.length; i++){ chainMaker( toChain[ i ] ); } @@ -757,10 +797,11 @@ var KSurface = Class( /** Karma basic Object +@name KObject @class The basic Karma object @param {Object} [options] Options @param {String} [options.localized = true] The object will be localized -@memberOf Karma +@memberOf Karma **/ var KObject = Class( { @@ -775,17 +816,18 @@ var KObject = Class( ); /** Graphics basic Object +@name KGraphic @class General methods for any Graphic object -@param {Object} [options] Options -@param {Number} [options.x = 0] The 'x' position of the object -@param {Number} [options.y = 0] The 'y' position of the object -@param {Number} [options.z = 0] The 'z' index of the object -@param {Number} [options.width = 0] The 'width' of the object -@param {Number} [options.height = 0] The 'height' of the object -@param {Boolean} [options.visible = true] Defines if the object will be visible +@param {object} [options] Options +@param {number} [options.x = 0] The 'x' position of the object +@param {number} [options.y = 0] The 'y' position of the object +@param {number} [options.z = 0] The 'z' index of the object +@param {number} [options.width = 0] The 'width' of the object +@param {number} [options.height = 0] The 'height' of the object +@param {boolean} [options.visible = true] Defines if the object will be visible when drawing +@memberOf Karma @augments KObject -@memberOf Karma **/ var KGraphic = Class( KObject, @@ -806,7 +848,7 @@ var KGraphic = Class( /** @memberOf KGraphic Determines if the 'x' and 'y' coodinates are inside the object. - @returns {Boolean} 'true' if the coordinates are inside or on the border + @returns {boolean} 'true' if the coordinates are inside or on the border of the object, otherwise 'false' **/ isPointInPath : function( x, y ) { @@ -819,8 +861,10 @@ var KGraphic = Class( } ); /** -Supports multiple objects -@class +An object that collects multiple KGraphic objects. Supports multiple objects. +@name KGroup +@class An object that collects multiple KGraphic objects +@augments KGraphic @memberOf Karma **/ var KGroup = Class( @@ -850,7 +894,7 @@ var KGroup = Class( }, /** @memberOf KGroup - Draws all the elements in childNodes. The elements are drawed according + Draws all the elements in childNodes. The elements are drawn according to its 'z' (z-index) value. @see KGroup#appendChild **/ @@ -874,9 +918,18 @@ var KGroup = Class( } ); -/** @memberOf Karma **/ +/** +Graphics basic Media object. +@name KMedia +@class General methods for any Graphic object +@param {String} file The name of the file that must be loaded +@param {String} type 'image', 'sound' or 'video' +@param {Object} [options] Options that will be passed to the media element + constructor +@augments KObject +@memberOf Karma +**/ var KMedia = Class( - KObject, { init: function (file, type, options ) { @@ -913,12 +966,20 @@ var KMedia = Class( } ); -/** @memberOf Karma **/ +/** +Image object +@name KImage +@class General methods for any Image object +@param {Object} options Constructor arguments. +@param {Object} options.file The image file that will be loaded. +@augments KGraphic +@augments KMedia +@memberOf Karma +**/ var KImage = Class( KGraphic, KMedia, { - init: function ( options ) { if ( valid ( options, "string" ) ) { options = { file:options }; @@ -930,7 +991,7 @@ var KImage = Class( var defaultOptions = { //w : undefined, //h : undefined, - } + }; $.extend( this, defaultOptions, options); }, draw : function( ctx, x, y ) { @@ -940,6 +1001,10 @@ var KImage = Class( ctx.drawImage( this.media, this.x , this.y ); } }, + /** + Checks if the image has been loaded and fully decoded. + @returns {boolean} 'true' or 'false' + **/ isReady : function () { if ( !this.media.complete ) return false; if ( !this.media.naturalWidth || this.media.naturalWidth === 0) @@ -948,10 +1013,16 @@ var KImage = Class( } } ); + /** -@class_ +Sound object +@name KSound +@class General methods for any Sound object +@param {Object} options Constructor arguments. +@param {Object} options.file The image file that will be loaded. +@augments KMedia @memberOf Karma -*/ +**/ var KSound = Class( /**@lends_ KMedia*/ KMedia, @@ -966,20 +1037,35 @@ var KSound = Class( this.media.load(); } }, + /** + Checks if the image has been loaded and fully decoded. + @returns {boolean} 'true' or 'false' + **/ isReady: function () { return this.readyState === 4; }, play: function (){ - //hack to fix the audio "stuttering" + //hack to fix the audio "stuttering" problem //more info: https://bugs.launchpad.net/karma/+bug/426108 this.media.currentTime = 0.1; this.media.play(); } } ); -/**@class_ + +/** +Shape object +@name KShape +@class General methods for any Shape object +@param {object} options Constructor arguments. +@param {boolean} [options.fill=true] 'true' if the Shape will be filled when + drawing. +@param {boolean} [options.stroke=true] 'true' if the stroke will be drawn. +@param {color|string} [options.fillStyle="#000"] The fill style of the shape. +@param {color|string} [options.strokeStyle="#000"] The stroke style of the shape. +@augments KMedia @memberOf Karma -*/ +**/ var KShape = Class( /**@lends_ KGraphic*/ KGraphic, @@ -994,7 +1080,7 @@ var KShape = Class( fillStyle: '#000', strokeStyle: '#000', openPath : false - } + }; $.extend( this, defaultOptions, options); }, draw : function ( ctx ) { @@ -1012,11 +1098,21 @@ var KShape = Class( } } ); -/**@class_ */ +/** +Rectangle object +@name KRectangle +@class General methods for a rectangle object +@param {object} options Constructor arguments. +@param {number} options.x The 'x' position. +@param {number} options.y The 'y' position. +@param {number} options.w The width of the rectangle. +@param {number} options.h The height of the rectangle. +@augments KShape +@memberOf Karma +**/ var KRectangle = Class( KShape, { - init : function ( options ) { //ADD multiple constructors support //x,y,w,h @@ -1067,6 +1163,7 @@ var KButton = Class( Karma function. It's a shotcut for calling 'new Karma(..)' @param [options] Options passed to the Karma constructor @returns {Object} a new Karma object +@see Karma **/ $.karma = function (options) { var k =new Karma( options ); diff --git a/js/jquery.ui.all.js b/js/jquery.ui.all.js deleted file mode 100755 index 7ef2f75..0000000 --- a/js/jquery.ui.all.js +++ /dev/null @@ -1,7531 +0,0 @@ -/* - * jQuery UI 1.5.1 - * - * Copyright (c) 2008 Paul Bakaus (ui.jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -;(function($) { - -$.ui = { - plugin: { - add: function(module, option, set) { - var proto = $.ui[module].prototype; - for(var i in set) { - proto.plugins[i] = proto.plugins[i] || []; - proto.plugins[i].push([option, set[i]]); - } - }, - call: function(instance, name, args) { - var set = instance.plugins[name]; - if(!set) { return; } - - for (var i = 0; i < set.length; i++) { - if (instance.options[set[i][0]]) { - set[i][1].apply(instance.element, args); - } - } - } - }, - cssCache: {}, - css: function(name) { - if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } - var tmp = $('<div class="ui-gen">').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); - - //if (!$.browser.safari) - //tmp.appendTo('body'); - - //Opera and Safari set width and height to 0px instead of auto - //Safari returns rgba(0,0,0,0) when bgcolor is not set - $.ui.cssCache[name] = !!( - (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || - !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) - ); - try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} - return $.ui.cssCache[name]; - }, - disableSelection: function(e) { - e.unselectable = "on"; - e.onselectstart = function() { return false; }; - if (e.style) { e.style.MozUserSelect = "none"; } - }, - enableSelection: function(e) { - e.unselectable = "off"; - e.onselectstart = function() { return true; }; - if (e.style) { e.style.MozUserSelect = ""; } - }, - hasScroll: function(e, a) { - var scroll = /top/.test(a||"top") ? 'scrollTop' : 'scrollLeft', has = false; - if (e[scroll] > 0) return true; e[scroll] = 1; - has = e[scroll] > 0 ? true : false; e[scroll] = 0; - return has; - } -}; - - -/** jQuery core modifications and additions **/ - -var _remove = $.fn.remove; -$.fn.remove = function() { - $("*", this).add(this).trigger("remove"); - return _remove.apply(this, arguments ); -}; - -// $.widget is a factory to create jQuery plugins -// taking some boilerplate code out of the plugin code -// created by Scott González and Jörn Zaefferer -function getter(namespace, plugin, method) { - var methods = $[namespace][plugin].getter || []; - methods = (typeof methods == "string" ? methods.split(/,?\s+/) : methods); - return ($.inArray(method, methods) != -1); -} - -$.widget = function(name, prototype) { - var namespace = name.split(".")[0]; - name = name.split(".")[1]; - - // create plugin method - $.fn[name] = function(options) { - var isMethodCall = (typeof options == 'string'), - args = Array.prototype.slice.call(arguments, 1); - - if (isMethodCall && getter(namespace, name, options)) { - var instance = $.data(this[0], name); - return (instance ? instance[options].apply(instance, args) - : undefined); - } - - return this.each(function() { - var instance = $.data(this, name); - if (isMethodCall && instance && $.isFunction(instance[options])) { - instance[options].apply(instance, args); - } else if (!isMethodCall) { - $.data(this, name, new $[namespace][name](this, options)); - } - }); - }; - - // create widget constructor - $[namespace][name] = function(element, options) { - var self = this; - - this.widgetName = name; - this.widgetBaseClass = namespace + '-' + name; - - this.options = $.extend({}, $.widget.defaults, $[namespace][name].defaults, options); - this.element = $(element) - .bind('setData.' + name, function(e, key, value) { - return self.setData(key, value); - }) - .bind('getData.' + name, function(e, key) { - return self.getData(key); - }) - .bind('remove', function() { - return self.destroy(); - }); - this.init(); - }; - - // add widget prototype - $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); -}; - -$.widget.prototype = { - init: function() {}, - destroy: function() { - this.element.removeData(this.widgetName); - }, - - getData: function(key) { - return this.options[key]; - }, - setData: function(key, value) { - this.options[key] = value; - - if (key == 'disabled') { - this.element[value ? 'addClass' : 'removeClass']( - this.widgetBaseClass + '-disabled'); - } - }, - - enable: function() { - this.setData('disabled', false); - }, - disable: function() { - this.setData('disabled', true); - } -}; - -$.widget.defaults = { - disabled: false -}; - - -/** Mouse Interaction Plugin **/ - -$.ui.mouse = { - mouseInit: function() { - var self = this; - - this.element.bind('mousedown.'+this.widgetName, function(e) { - return self.mouseDown(e); - }); - - // Prevent text selection in IE - if ($.browser.msie) { - this._mouseUnselectable = this.element.attr('unselectable'); - this.element.attr('unselectable', 'on'); - } - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - - // Restore text selection in IE - ($.browser.msie - && this.element.attr('unselectable', this._mouseUnselectable)); - }, - - mouseDown: function(e) { - // we may have missed mouseup (out of window) - (this._mouseStarted && this.mouseUp(e)); - - this._mouseDownEvent = e; - - var self = this, - btnIsLeft = (e.which == 1), - elIsCancel = (typeof this.options.cancel == "string" ? $(e.target).is(this.options.cancel) : false); - if (!btnIsLeft || elIsCancel || !this.mouseCapture(e)) { - return true; - } - - this._mouseDelayMet = !this.options.delay; - if (!this._mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self._mouseDelayMet = true; - }, this.options.delay); - } - - if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { - this._mouseStarted = (this.mouseStart(e) !== false); - if (!this._mouseStarted) { - e.preventDefault(); - return true; - } - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(e) { - return self.mouseMove(e); - }; - this._mouseUpDelegate = function(e) { - return self.mouseUp(e); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - return false; - }, - - mouseMove: function(e) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !e.button) { - return this.mouseUp(e); - } - - if (this._mouseStarted) { - this.mouseDrag(e); - return false; - } - - if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { - this._mouseStarted = - (this.mouseStart(this._mouseDownEvent, e) !== false); - (this._mouseStarted ? this.mouseDrag(e) : this.mouseUp(e)); - } - - return !this._mouseStarted; - }, - - mouseUp: function(e) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - this.mouseStop(e); - } - - return false; - }, - - mouseDistanceMet: function(e) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - e.pageX), - Math.abs(this._mouseDownEvent.pageY - e.pageY) - ) >= this.options.distance - ); - }, - - mouseDelayMet: function(e) { - return this._mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - mouseStart: function(e) {}, - mouseDrag: function(e) {}, - mouseStop: function(e) {}, - mouseCapture: function(e) { return true; } -}; - -$.ui.mouse.defaults = { - cancel: null, - distance: 1, - delay: 0 -}; - -})(jQuery); -/* - * jQuery UI Draggable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.draggable", $.extend($.ui.mouse, { - init: function() { - - //Initialize needed constants - var o = this.options; - - //Position the node - if (o.helper == 'original' && !(/(relative|absolute|fixed)/).test(this.element.css('position'))) - this.element.css('position', 'relative'); - - this.element.addClass('ui-draggable'); - (o.disabled && this.element.addClass('ui-draggable-disabled')); - - this.mouseInit(); - - }, - mouseStart: function(e) { - var o = this.options; - - if (this.helper || o.disabled || $(e.target).is('.ui-resizable-handle')) return false; - - var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; - - - $(this.options.handle, this.element).find("*").andSelf().each(function() { - if(this == e.target) handle = true; - }); - if (!handle) return false; - - if($.ui.ddmanager) $.ui.ddmanager.current = this; - - //Create and append the visible helper - this.helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [e])) : (o.helper == 'clone' ? this.element.clone() : this.element); - if(!this.helper.parents('body').length) this.helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); - if(this.helper[0] != this.element[0] && !(/(fixed|absolute)/).test(this.helper.css("position"))) this.helper.css("position", "absolute"); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - this.margins = { //Cache the margins - left: (parseInt(this.element.css("marginLeft"),10) || 0), - top: (parseInt(this.element.css("marginTop"),10) || 0) - }; - - this.cssPosition = this.helper.css("position"); //Store the helper's css position - this.offset = this.element.offset(); //The element's absolute position on the page - this.offset = { //Substract the margins from the element's absolute offset - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - this.offset.click = { //Where the click happened, relative to the element - left: e.pageX - this.offset.left, - top: e.pageY - this.offset.top - }; - - this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset(); //Get the offsetParent and cache its position - if(this.offsetParent[0] == document.body && $.browser.mozilla) po = { top: 0, left: 0 }; //Ugly FF3 fix - this.offset.parent = { //Store its position plus border - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - var p = this.element.position(); //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helpers - this.offset.relative = this.cssPosition == "relative" ? { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.offsetParent[0].scrollTop, - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.offsetParent[0].scrollLeft - } : { top: 0, left: 0 }; - - this.originalPosition = this.generatePosition(e); //Generate the original position - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Cache the helper size - - if(o.cursorAt) { - if(o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left + this.margins.left; - if(o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right + this.margins.left; - if(o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top + this.margins.top; - if(o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom + this.margins.top; - } - - - /* - * - Position constraining - - * Here we prepare position constraining like grid and containment. - */ - - if(o.containment) { - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.relative.left - this.offset.parent.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.relative.top - this.offset.parent.top, - co.left+Math.max(ce.scrollWidth,ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - co.top+Math.max(ce.scrollHeight,ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - } - } - - //Call plugins and callbacks - this.propagate("start", e); - - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Recache the helper size - if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e); - - this.helper.addClass("ui-draggable-dragging"); - this.mouseDrag(e); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - }, - convertPositionTo: function(d, pos) { - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - return { - top: ( - pos.top // the calculated relative position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) * mod // The offsetParent's scroll position, not if the element is fixed - + (this.cssPosition == "fixed" ? $(document).scrollTop() : 0) * mod - + this.margins.top * mod //Add the margin (you don't want the margin counting in intersection methods) - ), - left: ( - pos.left // the calculated relative position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) * mod // The offsetParent's scroll position, not if the element is fixed - + (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0) * mod - + this.margins.left * mod //Add the margin (you don't want the margin counting in intersection methods) - ) - }; - }, - generatePosition: function(e) { - - var o = this.options; - var position = { - top: ( - e.pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) // The offsetParent's scroll position, not if the element is fixed - - (this.cssPosition == "fixed" ? $(document).scrollTop() : 0) - ), - left: ( - e.pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) // The offsetParent's scroll position, not if the element is fixed - - (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0) - ) - }; - - if(!this.originalPosition) return position; //If we are not dragging yet, we won't check for options - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - if(this.containment) { - if(position.left < this.containment[0]) position.left = this.containment[0]; - if(position.top < this.containment[1]) position.top = this.containment[1]; - if(position.left > this.containment[2]) position.left = this.containment[2]; - if(position.top > this.containment[3]) position.top = this.containment[3]; - } - - if(o.grid) { - var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1]; - position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0]; - position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - return position; - }, - mouseDrag: function(e) { - - //Compute the helpers position - this.position = this.generatePosition(e); - this.positionAbs = this.convertPositionTo("absolute"); - - //Call plugins and callbacks and use the resulting position if something is returned - this.position = this.propagate("drag", e) || this.position; - - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - if($.ui.ddmanager) $.ui.ddmanager.drag(this, e); - - return false; - }, - mouseStop: function(e) { - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, e); - - if(this.options.revert) { - var self = this; - $(this.helper).animate(this.originalPosition, parseInt(this.options.revert, 10) || 500, function() { - self.propagate("stop", e); - self.clear(); - }); - } else { - this.propagate("stop", e); - this.clear(); - } - - return false; - }, - clear: function() { - this.helper.removeClass("ui-draggable-dragging"); - if(this.options.helper != 'original' && !this.cancelHelperRemoval) this.helper.remove(); - //if($.ui.ddmanager) $.ui.ddmanager.current = null; - this.helper = null; - this.cancelHelperRemoval = false; - }, - - // From now on bulk stuff - mainly helpers - plugins: {}, - uiHash: function(e) { - return { - helper: this.helper, - position: this.position, - absolutePosition: this.positionAbs, - options: this.options - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.uiHash()]); - return this.element.triggerHandler(n == "drag" ? n : "drag"+n, [e, this.uiHash()], this.options[n]); - }, - destroy: function() { - if(!this.element.data('draggable')) return; - this.element.removeData("draggable").unbind(".draggable").removeClass('ui-draggable'); - this.mouseDestroy(); - } -})); - -$.extend($.ui.draggable, { - defaults: { - appendTo: "parent", - axis: false, - cancel: ":input", - delay: 0, - distance: 1, - helper: "original" - } -}); - -$.ui.plugin.add("draggable", "cursor", { - start: function(e, ui) { - var t = $('body'); - if (t.css("cursor")) ui.options._cursor = t.css("cursor"); - t.css("cursor", ui.options.cursor); - }, - stop: function(e, ui) { - if (ui.options._cursor) $('body').css("cursor", ui.options._cursor); - } -}); - -$.ui.plugin.add("draggable", "zIndex", { - start: function(e, ui) { - var t = $(ui.helper); - if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex"); - t.css('zIndex', ui.options.zIndex); - }, - stop: function(e, ui) { - if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex); - } -}); - -$.ui.plugin.add("draggable", "opacity", { - start: function(e, ui) { - var t = $(ui.helper); - if(t.css("opacity")) ui.options._opacity = t.css("opacity"); - t.css('opacity', ui.options.opacity); - }, - stop: function(e, ui) { - if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity); - } -}); - -$.ui.plugin.add("draggable", "iframeFix", { - start: function(e, ui) { - $(ui.options.iframeFix === true ? "iframe" : ui.options.iframeFix).each(function() { - $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>') - .css({ - width: this.offsetWidth+"px", height: this.offsetHeight+"px", - position: "absolute", opacity: "0.001", zIndex: 1000 - }) - .css($(this).offset()) - .appendTo("body"); - }); - }, - stop: function(e, ui) { - $("div.DragDropIframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers - } -}); - -$.ui.plugin.add("draggable", "scroll", { - start: function(e, ui) { - var o = ui.options; - var i = $(this).data("draggable"); - o.scrollSensitivity = o.scrollSensitivity || 20; - o.scrollSpeed = o.scrollSpeed || 20; - - i.overflowY = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(this); - i.overflowX = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(this); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); - - }, - drag: function(e, ui) { - - var o = ui.options; - var i = $(this).data("draggable"); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { - if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed; - if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed; - - } else { - if(e.pageY - $(document).scrollTop() < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - if($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { - if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed; - if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed; - } else { - if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - if($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } -}); - -$.ui.plugin.add("draggable", "snap", { - start: function(e, ui) { - - var inst = $(this).data("draggable"); - inst.snapElements = []; - $(ui.options.snap === true ? '.ui-draggable' : ui.options.snap).each(function() { - var $t = $(this); var $o = $t.offset(); - if(this != inst.element[0]) inst.snapElements.push({ - item: this, - width: $t.outerWidth(), height: $t.outerHeight(), - top: $o.top, left: $o.left - }); - }); - - }, - drag: function(e, ui) { - - var inst = $(this).data("draggable"); - var d = ui.options.snapTolerance || 20; - var x1 = ui.absolutePosition.left, x2 = x1 + inst.helperProportions.width, - y1 = ui.absolutePosition.top, y2 = y1 + inst.helperProportions.height; - - for (var i = inst.snapElements.length - 1; i >= 0; i--){ - - var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, - t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; - - //Yes, I know, this is insane ;) - if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) continue; - - if(ui.options.snapMode != 'inner') { - var ts = Math.abs(t - y2) <= 20; - var bs = Math.abs(b - y1) <= 20; - var ls = Math.abs(l - x2) <= 20; - var rs = Math.abs(r - x1) <= 20; - if(ts) ui.position.top = inst.convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top; - if(bs) ui.position.top = inst.convertPositionTo("relative", { top: b, left: 0 }).top; - if(ls) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left; - if(rs) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: r }).left; - } - - if(ui.options.snapMode != 'outer') { - var ts = Math.abs(t - y1) <= 20; - var bs = Math.abs(b - y2) <= 20; - var ls = Math.abs(l - x1) <= 20; - var rs = Math.abs(r - x2) <= 20; - if(ts) ui.position.top = inst.convertPositionTo("relative", { top: t, left: 0 }).top; - if(bs) ui.position.top = inst.convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top; - if(ls) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: l }).left; - if(rs) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left; - } - - }; - } -}); - -$.ui.plugin.add("draggable", "connectToSortable", { - start: function(e,ui) { - - var inst = $(this).data("draggable"); - inst.sortables = []; - $(ui.options.connectToSortable).each(function() { - if($.data(this, 'sortable')) { - var sortable = $.data(this, 'sortable'); - inst.sortables.push({ - instance: sortable, - shouldRevert: sortable.options.revert - }); - sortable.refreshItems(); //Do a one-time refresh at start to refresh the containerCache - sortable.propagate("activate", e, inst); - } - }); - - }, - stop: function(e,ui) { - - //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).data("draggable"); - - $.each(inst.sortables, function() { - if(this.instance.isOver) { - this.instance.isOver = 0; - inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance - this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) - if(this.shouldRevert) this.instance.options.revert = true; //revert here - this.instance.mouseStop(e); - - //Also propagate receive event, since the sortable is actually receiving a element - this.instance.element.triggerHandler("sortreceive", [e, $.extend(this.instance.ui(), { sender: inst.element })], this.instance.options["receive"]); - - this.instance.options.helper = this.instance.options._helper; - } else { - this.instance.propagate("deactivate", e, inst); - } - - }); - - }, - drag: function(e,ui) { - - var inst = $(this).data("draggable"), self = this; - - var checkPos = function(o) { - - var l = o.left, r = l + o.width, - t = o.top, b = t + o.height; - - return (l < (this.positionAbs.left + this.offset.click.left) && (this.positionAbs.left + this.offset.click.left) < r - && t < (this.positionAbs.top + this.offset.click.top) && (this.positionAbs.top + this.offset.click.top) < b); - }; - - $.each(inst.sortables, function(i) { - - if(checkPos.call(inst, this.instance.containerCache)) { - - //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once - if(!this.instance.isOver) { - this.instance.isOver = 1; - - //Now we fake the start of dragging for the sortable instance, - //by cloning the list group item, appending it to the sortable and using it as inst.currentItem - //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) - this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true); - this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it - this.instance.options.helper = function() { return ui.helper[0]; }; - - e.target = this.instance.currentItem[0]; - this.instance.mouseCapture(e, true); - this.instance.mouseStart(e, true, true); - - //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes - this.instance.offset.click.top = inst.offset.click.top; - this.instance.offset.click.left = inst.offset.click.left; - this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; - this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; - - inst.propagate("toSortable", e); - - } - - //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable - if(this.instance.currentItem) this.instance.mouseDrag(e); - - } else { - - //If it doesn't intersect with the sortable, and it intersected before, - //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval - if(this.instance.isOver) { - this.instance.isOver = 0; - this.instance.cancelHelperRemoval = true; - this.instance.options.revert = false; //No revert here - this.instance.mouseStop(e, true); - this.instance.options.helper = this.instance.options._helper; - - //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size - this.instance.currentItem.remove(); - if(this.instance.placeholder) this.instance.placeholder.remove(); - - inst.propagate("fromSortable", e); - } - - }; - - }); - - } -}); - -$.ui.plugin.add("draggable", "stack", { - start: function(e,ui) { - var group = $.makeArray($(ui.options.stack.group)).sort(function(a,b) { - return (parseInt($(a).css("zIndex"),10) || ui.options.stack.min) - (parseInt($(b).css("zIndex"),10) || ui.options.stack.min); - }); - - $(group).each(function(i) { - this.style.zIndex = ui.options.stack.min + i; - }); - - this[0].style.zIndex = ui.options.stack.min + group.length; - } -}); - -})(jQuery); -/* - * jQuery UI Droppable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * ui.core.js - * ui.draggable.js - */ -(function($) { - -$.widget("ui.droppable", { - init: function() { - - this.element.addClass("ui-droppable"); - this.isover = 0; this.isout = 1; - - //Prepare the passed options - var o = this.options, accept = o.accept; - o = $.extend(o, { - accept: o.accept && o.accept.constructor == Function ? o.accept : function(d) { - return $(d).is(accept); - } - }); - - //Store the droppable's proportions - this.proportions = { width: this.element.outerWidth(), height: this.element.outerHeight() }; - - // Add the reference and positions to the manager - $.ui.ddmanager.droppables.push(this); - - }, - plugins: {}, - ui: function(c) { - return { - draggable: (c.currentItem || c.element), - helper: c.helper, - position: c.position, - absolutePosition: c.positionAbs, - options: this.options, - element: this.element - }; - }, - destroy: function() { - var drop = $.ui.ddmanager.droppables; - for ( var i = 0; i < drop.length; i++ ) - if ( drop[i] == this ) - drop.splice(i, 1); - - this.element - .removeClass("ui-droppable ui-droppable-disabled") - .removeData("droppable") - .unbind(".droppable"); - }, - over: function(e) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'over', [e, this.ui(draggable)]); - this.element.triggerHandler("dropover", [e, this.ui(draggable)], this.options.over); - } - - }, - out: function(e) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'out', [e, this.ui(draggable)]); - this.element.triggerHandler("dropout", [e, this.ui(draggable)], this.options.out); - } - - }, - drop: function(e,custom) { - - var draggable = custom || $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element - - var childrenIntersection = false; - this.element.find(".ui-droppable").not(".ui-draggable-dragging").each(function() { - var inst = $.data(this, 'droppable'); - if(inst.options.greedy && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) { - childrenIntersection = true; return false; - } - }); - if(childrenIntersection) return false; - - if(this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'drop', [e, this.ui(draggable)]); - this.element.triggerHandler("drop", [e, this.ui(draggable)], this.options.drop); - return true; - } - - return false; - - }, - activate: function(e) { - - var draggable = $.ui.ddmanager.current; - $.ui.plugin.call(this, 'activate', [e, this.ui(draggable)]); - if(draggable) this.element.triggerHandler("dropactivate", [e, this.ui(draggable)], this.options.activate); - - }, - deactivate: function(e) { - - var draggable = $.ui.ddmanager.current; - $.ui.plugin.call(this, 'deactivate', [e, this.ui(draggable)]); - if(draggable) this.element.triggerHandler("dropdeactivate", [e, this.ui(draggable)], this.options.deactivate); - - } -}); - -$.extend($.ui.droppable, { - defaults: { - disabled: false, - tolerance: 'intersect' - } -}); - -$.ui.intersect = function(draggable, droppable, toleranceMode) { - - if (!droppable.offset) return false; - - var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, - y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; - var l = droppable.offset.left, r = l + droppable.proportions.width, - t = droppable.offset.top, b = t + droppable.proportions.height; - - switch (toleranceMode) { - case 'fit': - return (l < x1 && x2 < r - && t < y1 && y2 < b); - break; - case 'intersect': - return (l < x1 + (draggable.helperProportions.width / 2) // Right Half - && x2 - (draggable.helperProportions.width / 2) < r // Left Half - && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half - && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half - break; - case 'pointer': - return (l < ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) && ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) < r - && t < ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) && ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) < b); - break; - case 'touch': - return ( - (y1 >= t && y1 <= b) || // Top edge touching - (y2 >= t && y2 <= b) || // Bottom edge touching - (y1 < t && y2 > b) // Surrounded vertically - ) && ( - (x1 >= l && x1 <= r) || // Left edge touching - (x2 >= l && x2 <= r) || // Right edge touching - (x1 < l && x2 > r) // Surrounded horizontally - ); - break; - default: - return false; - break; - } - -}; - -/* - This manager tracks offsets of draggables and droppables -*/ -$.ui.ddmanager = { - current: null, - droppables: [], - prepareOffsets: function(t, e) { - - var m = $.ui.ddmanager.droppables; - var type = e ? e.type : null; // workaround for #2317 - for (var i = 0; i < m.length; i++) { - - if(m[i].options.disabled || (t && !m[i].options.accept.call(m[i].element,(t.currentItem || t.element)))) continue; - m[i].visible = m[i].element.is(":visible"); if(!m[i].visible) continue; //If the element is not visible, continue - m[i].offset = m[i].element.offset(); - m[i].proportions = { width: m[i].element.outerWidth(), height: m[i].element.outerHeight() }; - - if(type == "dragstart" || type == "sortactivate") m[i].activate.call(m[i], e); //Activate the droppable if used directly from draggables - } - - }, - drop: function(draggable, e) { - - var dropped = false; - $.each($.ui.ddmanager.droppables, function() { - - if(!this.options) return; - if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) - dropped = this.drop.call(this, e); - - if (!this.options.disabled && this.visible && this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - this.isout = 1; this.isover = 0; - this.deactivate.call(this, e); - } - - }); - return dropped; - - }, - drag: function(draggable, e) { - - //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. - if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, e); - - //Run through all droppables and check their positions based on specific tolerance options - $.each($.ui.ddmanager.droppables, function() { - - if(this.options.disabled || this.greedyChild || !this.visible) return; - var intersects = $.ui.intersect(draggable, this, this.options.tolerance); - - var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); - if(!c) return; - - var parentInstance; - if (this.options.greedy) { - var parent = this.element.parents('.ui-droppable:eq(0)'); - if (parent.length) { - parentInstance = $.data(parent[0], 'droppable'); - parentInstance.greedyChild = (c == 'isover' ? 1 : 0); - } - } - - // we just moved into a greedy child - if (parentInstance && c == 'isover') { - parentInstance['isover'] = 0; - parentInstance['isout'] = 1; - parentInstance.out.call(parentInstance, e); - } - - this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; - this[c == "isover" ? "over" : "out"].call(this, e); - - // we just moved out of a greedy child - if (parentInstance && c == 'isout') { - parentInstance['isout'] = 0; - parentInstance['isover'] = 1; - parentInstance.over.call(parentInstance, e); - } - }); - - } -}; - -/* - * Droppable Extensions - */ - -$.ui.plugin.add("droppable", "activeClass", { - activate: function(e, ui) { - $(this).addClass(ui.options.activeClass); - }, - deactivate: function(e, ui) { - $(this).removeClass(ui.options.activeClass); - }, - drop: function(e, ui) { - $(this).removeClass(ui.options.activeClass); - } -}); - -$.ui.plugin.add("droppable", "hoverClass", { - over: function(e, ui) { - $(this).addClass(ui.options.hoverClass); - }, - out: function(e, ui) { - $(this).removeClass(ui.options.hoverClass); - }, - drop: function(e, ui) { - $(this).removeClass(ui.options.hoverClass); - } -}); - -})(jQuery); -/* - * jQuery UI Resizable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.resizable", $.extend($.ui.mouse, { - init: function() { - - var self = this, o = this.options; - - var elpos = this.element.css('position'); - - this.originalElement = this.element; - - // simulate .ui-resizable { position: relative; } - this.element.addClass("ui-resizable").css({ position: /static/.test(elpos) ? 'relative' : elpos }); - - $.extend(o, { - _aspectRatio: !!(o.aspectRatio), - helper: o.helper || o.ghost || o.animate ? o.helper || 'proxy' : null, - knobHandles: o.knobHandles === true ? 'ui-resizable-knob-handle' : o.knobHandles - }); - - //Default Theme - var aBorder = '1px solid #DEDEDE'; - - o.defaultTheme = { - 'ui-resizable': { display: 'block' }, - 'ui-resizable-handle': { position: 'absolute', background: '#F2F2F2', fontSize: '0.1px' }, - 'ui-resizable-n': { cursor: 'n-resize', height: '4px', left: '0px', right: '0px', borderTop: aBorder }, - 'ui-resizable-s': { cursor: 's-resize', height: '4px', left: '0px', right: '0px', borderBottom: aBorder }, - 'ui-resizable-e': { cursor: 'e-resize', width: '4px', top: '0px', bottom: '0px', borderRight: aBorder }, - 'ui-resizable-w': { cursor: 'w-resize', width: '4px', top: '0px', bottom: '0px', borderLeft: aBorder }, - 'ui-resizable-se': { cursor: 'se-resize', width: '4px', height: '4px', borderRight: aBorder, borderBottom: aBorder }, - 'ui-resizable-sw': { cursor: 'sw-resize', width: '4px', height: '4px', borderBottom: aBorder, borderLeft: aBorder }, - 'ui-resizable-ne': { cursor: 'ne-resize', width: '4px', height: '4px', borderRight: aBorder, borderTop: aBorder }, - 'ui-resizable-nw': { cursor: 'nw-resize', width: '4px', height: '4px', borderLeft: aBorder, borderTop: aBorder } - }; - - o.knobTheme = { - 'ui-resizable-handle': { background: '#F2F2F2', border: '1px solid #808080', height: '8px', width: '8px' }, - 'ui-resizable-n': { cursor: 'n-resize', top: '0px', left: '45%' }, - 'ui-resizable-s': { cursor: 's-resize', bottom: '0px', left: '45%' }, - 'ui-resizable-e': { cursor: 'e-resize', right: '0px', top: '45%' }, - 'ui-resizable-w': { cursor: 'w-resize', left: '0px', top: '45%' }, - 'ui-resizable-se': { cursor: 'se-resize', right: '0px', bottom: '0px' }, - 'ui-resizable-sw': { cursor: 'sw-resize', left: '0px', bottom: '0px' }, - 'ui-resizable-nw': { cursor: 'nw-resize', left: '0px', top: '0px' }, - 'ui-resizable-ne': { cursor: 'ne-resize', right: '0px', top: '0px' } - }; - - o._nodeName = this.element[0].nodeName; - - //Wrap the element if it cannot hold child nodes - if(o._nodeName.match(/canvas|textarea|input|select|button|img/i)) { - var el = this.element; - - //Opera fixing relative position - if (/relative/.test(el.css('position')) && $.browser.opera) - el.css({ position: 'relative', top: 'auto', left: 'auto' }); - - //Create a wrapper element and set the wrapper to the new current internal element - el.wrap( - $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css( { - position: el.css('position'), - width: el.outerWidth(), - height: el.outerHeight(), - top: el.css('top'), - left: el.css('left') - }) - ); - - var oel = this.element; this.element = this.element.parent(); - - // store instance on wrapper - this.element.data('resizable', this); - - //Move margins to the wrapper - this.element.css({ marginLeft: oel.css("marginLeft"), marginTop: oel.css("marginTop"), - marginRight: oel.css("marginRight"), marginBottom: oel.css("marginBottom") - }); - - oel.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); - - //Prevent Safari textarea resize - if ($.browser.safari && o.preventDefault) oel.css('resize', 'none'); - - o.proportionallyResize = oel.css({ position: 'static', zoom: 1, display: 'block' }); - - // avoid IE jump - this.element.css({ margin: oel.css('margin') }); - - // fix handlers offset - this._proportionallyResize(); - } - - if(!o.handles) o.handles = !$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }; - if(o.handles.constructor == String) { - - o.zIndex = o.zIndex || 1000; - - if(o.handles == 'all') o.handles = 'n,e,s,w,se,sw,ne,nw'; - - var n = o.handles.split(","); o.handles = {}; - - // insertions are applied when don't have theme loaded - var insertionsDefault = { - handle: 'position: absolute; display: none; overflow:hidden;', - n: 'top: 0pt; width:100%;', - e: 'right: 0pt; height:100%;', - s: 'bottom: 0pt; width:100%;', - w: 'left: 0pt; height:100%;', - se: 'bottom: 0pt; right: 0px;', - sw: 'bottom: 0pt; left: 0px;', - ne: 'top: 0pt; right: 0px;', - nw: 'top: 0pt; left: 0px;' - }; - - for(var i = 0; i < n.length; i++) { - var handle = $.trim(n[i]), dt = o.defaultTheme, hname = 'ui-resizable-'+handle, loadDefault = !$.ui.css(hname) && !o.knobHandles, userKnobClass = $.ui.css('ui-resizable-knob-handle'), - allDefTheme = $.extend(dt[hname], dt['ui-resizable-handle']), allKnobTheme = $.extend(o.knobTheme[hname], !userKnobClass ? o.knobTheme['ui-resizable-handle'] : {}); - - // increase zIndex of sw, se, ne, nw axis - var applyZIndex = /sw|se|ne|nw/.test(handle) ? { zIndex: ++o.zIndex } : {}; - - var defCss = (loadDefault ? insertionsDefault[handle] : ''), - axis = $(['<div class="ui-resizable-handle ', hname, '" style="', defCss, insertionsDefault.handle, '"></div>'].join('')).css( applyZIndex ); - o.handles[handle] = '.ui-resizable-'+handle; - - this.element.append( - //Theme detection, if not loaded, load o.defaultTheme - axis.css( loadDefault ? allDefTheme : {} ) - // Load the knobHandle css, fix width, height, top, left... - .css( o.knobHandles ? allKnobTheme : {} ).addClass(o.knobHandles ? 'ui-resizable-knob-handle' : '').addClass(o.knobHandles) - ); - } - - if (o.knobHandles) this.element.addClass('ui-resizable-knob').css( !$.ui.css('ui-resizable-knob') ? { /*border: '1px #fff dashed'*/ } : {} ); - } - - this._renderAxis = function(target) { - target = target || this.element; - - for(var i in o.handles) { - if(o.handles[i].constructor == String) - o.handles[i] = $(o.handles[i], this.element).show(); - - if (o.transparent) - o.handles[i].css({opacity:0}); - - //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) - if (this.element.is('.ui-wrapper') && - o._nodeName.match(/textarea|input|select|button/i)) { - - var axis = $(o.handles[i], this.element), padWrapper = 0; - - //Checking the correct pad and border - padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); - - //The padding type i have to apply... - var padPos = [ 'padding', - /ne|nw|n/.test(i) ? 'Top' : - /se|sw|s/.test(i) ? 'Bottom' : - /^e$/.test(i) ? 'Right' : 'Left' ].join(""); - - if (!o.transparent) - target.css(padPos, padWrapper); - - this._proportionallyResize(); - } - if(!$(o.handles[i]).length) continue; - } - }; - - this._renderAxis(this.element); - o._handles = $('.ui-resizable-handle', self.element); - - if (o.disableSelection) - o._handles.each(function(i, e) { $.ui.disableSelection(e); }); - - //Matching axis name - o._handles.mouseover(function() { - if (!o.resizing) { - if (this.className) - var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); - //Axis, default = se - self.axis = o.axis = axis && axis[1] ? axis[1] : 'se'; - } - }); - - //If we want to auto hide the elements - if (o.autoHide) { - o._handles.hide(); - $(self.element).addClass("ui-resizable-autohide").hover(function() { - $(this).removeClass("ui-resizable-autohide"); - o._handles.show(); - }, - function(){ - if (!o.resizing) { - $(this).addClass("ui-resizable-autohide"); - o._handles.hide(); - } - }); - } - - this.mouseInit(); - }, - plugins: {}, - ui: function() { - return { - originalElement: this.originalElement, - element: this.element, - helper: this.helper, - position: this.position, - size: this.size, - options: this.options, - originalSize: this.originalSize, - originalPosition: this.originalPosition - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.ui()]); - if (n != "resize") this.element.triggerHandler(["resize", n].join(""), [e, this.ui()], this.options[n]); - }, - destroy: function() { - var el = this.element, wrapped = el.children(".ui-resizable").get(0); - - this.mouseDestroy(); - - var _destroy = function(exp) { - $(exp).removeClass("ui-resizable ui-resizable-disabled") - .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); - }; - - _destroy(el); - - if (el.is('.ui-wrapper') && wrapped) { - el.parent().append( - $(wrapped).css({ - position: el.css('position'), - width: el.outerWidth(), - height: el.outerHeight(), - top: el.css('top'), - left: el.css('left') - }) - ).end().remove(); - - _destroy(wrapped); - } - }, - mouseStart: function(e) { - if(this.options.disabled) return false; - - var handle = false; - for(var i in this.options.handles) { - if($(this.options.handles[i])[0] == e.target) handle = true; - } - if (!handle) return false; - - var o = this.options, iniPos = this.element.position(), el = this.element, - num = function(v) { return parseInt(v, 10) || 0; }, ie6 = $.browser.msie && $.browser.version < 7; - o.resizing = true; - o.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; - - // bugfix #1749 - if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { - - // sOffset decides if document scrollOffset will be added to the top/left of the resizable element - var sOffset = $.browser.msie && !o.containment && (/absolute/).test(el.css('position')) && !(/relative/).test(el.parent().css('position')); - var dscrollt = sOffset ? o.documentScroll.top : 0, dscrolll = sOffset ? o.documentScroll.left : 0; - - el.css({ position: 'absolute', top: (iniPos.top + dscrollt), left: (iniPos.left + dscrolll) }); - } - - //Opera fixing relative position - if ($.browser.opera && /relative/.test(el.css('position'))) - el.css({ position: 'relative', top: 'auto', left: 'auto' }); - - this._renderProxy(); - - var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); - - //Store needed variables - this.offset = this.helper.offset(); - this.position = { left: curleft, top: curtop }; - this.size = o.helper || ie6 ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalSize = o.helper || ie6 ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalPosition = { left: curleft, top: curtop }; - this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; - this.originalMousePosition = { left: e.pageX, top: e.pageY }; - - //Aspect Ratio - o.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.height / this.originalSize.width)||1); - - if (o.preserveCursor) - $('body').css('cursor', this.axis + '-resize'); - - this.propagate("start", e); - return true; - }, - mouseDrag: function(e) { - - //Increase performance, avoid regex - var el = this.helper, o = this.options, props = {}, - self = this, smp = this.originalMousePosition, a = this.axis; - - var dx = (e.pageX-smp.left)||0, dy = (e.pageY-smp.top)||0; - var trigger = this._change[a]; - if (!trigger) return false; - - // Calculate the attrs that will be change - var data = trigger.apply(this, [e, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; - - if (o._aspectRatio || e.shiftKey) - data = this._updateRatio(data, e); - - data = this._respectSize(data, e); - - // plugins callbacks need to be called first - this.propagate("resize", e); - - el.css({ - top: this.position.top + "px", left: this.position.left + "px", - width: this.size.width + "px", height: this.size.height + "px" - }); - - if (!o.helper && o.proportionallyResize) - this._proportionallyResize(); - - this._updateCache(data); - - // calling the user callback at the end - this.element.triggerHandler("resize", [e, this.ui()], this.options["resize"]); - - return false; - }, - mouseStop: function(e) { - - this.options.resizing = false; - var o = this.options, num = function(v) { return parseInt(v, 10) || 0; }, self = this; - - if(o.helper) { - var pr = o.proportionallyResize, ista = pr && (/textarea/i).test(pr.get(0).nodeName), - soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - if (!o.animate) - this.element.css($.extend(s, { top: top, left: left })); - - if (o.helper && !o.animate) this._proportionallyResize(); - } - - if (o.preserveCursor) - $('body').css('cursor', 'auto'); - - this.propagate("stop", e); - - if (o.helper) this.helper.remove(); - - return false; - }, - _updateCache: function(data) { - var o = this.options; - this.offset = this.helper.offset(); - if (data.left) this.position.left = data.left; - if (data.top) this.position.top = data.top; - if (data.height) this.size.height = data.height; - if (data.width) this.size.width = data.width; - }, - _updateRatio: function(data, e) { - var o = this.options, cpos = this.position, csize = this.size, a = this.axis; - - if (data.height) data.width = (csize.height / o.aspectRatio); - else if (data.width) data.height = (csize.width * o.aspectRatio); - - if (a == 'sw') { - data.left = cpos.left + (csize.width - data.width); - data.top = null; - } - if (a == 'nw') { - data.top = cpos.top + (csize.height - data.height); - data.left = cpos.left + (csize.width - data.width); - } - - return data; - }, - _respectSize: function(data, e) { - - var el = this.helper, o = this.options, pRatio = o._aspectRatio || e.shiftKey, a = this.axis, - ismaxw = data.width && o.maxWidth && o.maxWidth < data.width, ismaxh = data.height && o.maxHeight && o.maxHeight < data.height, - isminw = data.width && o.minWidth && o.minWidth > data.width, isminh = data.height && o.minHeight && o.minHeight > data.height; - - if (isminw) data.width = o.minWidth; - if (isminh) data.height = o.minHeight; - if (ismaxw) data.width = o.maxWidth; - if (ismaxh) data.height = o.maxHeight; - - var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; - var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); - - if (isminw && cw) data.left = dw - o.minWidth; - if (ismaxw && cw) data.left = dw - o.maxWidth; - if (isminh && ch) data.top = dh - o.minHeight; - if (ismaxh && ch) data.top = dh - o.maxHeight; - - // fixing jump error on top/left - bug #2330 - var isNotwh = !data.width && !data.height; - if (isNotwh && !data.left && data.top) data.top = null; - else if (isNotwh && !data.top && data.left) data.left = null; - - return data; - }, - _proportionallyResize: function() { - var o = this.options; - if (!o.proportionallyResize) return; - var prel = o.proportionallyResize, el = this.helper || this.element; - - if (!o.borderDif) { - var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], - p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; - - o.borderDif = $.map(b, function(v, i) { - var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; - return border + padding; - }); - } - prel.css({ - height: (el.height() - o.borderDif[0] - o.borderDif[2]) + "px", - width: (el.width() - o.borderDif[1] - o.borderDif[3]) + "px" - }); - }, - _renderProxy: function() { - var el = this.element, o = this.options; - this.elementOffset = el.offset(); - - if(o.helper) { - this.helper = this.helper || $('<div style="overflow:hidden;"></div>'); - - // fix ie6 offset - var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), - pxyoffset = ( ie6 ? 2 : -1 ); - - this.helper.addClass(o.helper).css({ - width: el.outerWidth() + pxyoffset, - height: el.outerHeight() + pxyoffset, - position: 'absolute', - left: this.elementOffset.left - ie6offset +'px', - top: this.elementOffset.top - ie6offset +'px', - zIndex: ++o.zIndex - }); - - this.helper.appendTo("body"); - - if (o.disableSelection) - $.ui.disableSelection(this.helper.get(0)); - - } else { - this.helper = el; - } - }, - _change: { - e: function(e, dx, dy) { - return { width: this.originalSize.width + dx }; - }, - w: function(e, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { left: sp.left + dx, width: cs.width - dx }; - }, - n: function(e, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { top: sp.top + dy, height: cs.height - dy }; - }, - s: function(e, dx, dy) { - return { height: this.originalSize.height + dy }; - }, - se: function(e, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, dx, dy])); - }, - sw: function(e, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, dx, dy])); - }, - ne: function(e, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, dx, dy])); - }, - nw: function(e, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, dx, dy])); - } - } -})); - -$.extend($.ui.resizable, { - defaults: { - cancel: ":input", - distance: 1, - delay: 0, - preventDefault: true, - transparent: false, - minWidth: 10, - minHeight: 10, - aspectRatio: false, - disableSelection: true, - preserveCursor: true, - autoHide: false, - knobHandles: false - } -}); - -/* - * Resizable Extensions - */ - -$.ui.plugin.add("resizable", "containment", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), el = self.element; - var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; - if (!ce) return; - - self.containerElement = $(ce); - - if (/document/.test(oc) || oc == document) { - self.containerOffset = { left: 0, top: 0 }; - self.containerPosition = { left: 0, top: 0 }; - - self.parentData = { - element: $(document), left: 0, top: 0, - width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight - }; - } - - - // i'm a node, so compute top, left, right, bottom - else{ - self.containerOffset = $(ce).offset(); - self.containerPosition = $(ce).position(); - self.containerSize = { height: $(ce).innerHeight(), width: $(ce).innerWidth() }; - - var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, - width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); - - self.parentData = { - element: ce, left: co.left, top: co.top, width: width, height: height - }; - } - }, - - resize: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), - ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, - pRatio = o._aspectRatio || e.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; - - if (ce[0] != document && /static/.test(ce.css('position'))) - cop = self.containerPosition; - - if (cp.left < (o.helper ? co.left : cop.left)) { - self.size.width = self.size.width + (o.helper ? (self.position.left - co.left) : (self.position.left - cop.left)); - if (pRatio) self.size.height = self.size.width * o.aspectRatio; - self.position.left = o.helper ? co.left : cop.left; - } - - if (cp.top < (o.helper ? co.top : 0)) { - self.size.height = self.size.height + (o.helper ? (self.position.top - co.top) : self.position.top); - if (pRatio) self.size.width = self.size.height / o.aspectRatio; - self.position.top = o.helper ? co.top : 0; - } - - var woset = (o.helper ? self.offset.left - co.left : (self.position.left - cop.left)) + self.sizeDiff.width, - hoset = (o.helper ? self.offset.top - co.top : self.position.top) + self.sizeDiff.height; - - if (woset + self.size.width >= self.parentData.width) { - self.size.width = self.parentData.width - woset; - if (pRatio) self.size.height = self.size.width * o.aspectRatio; - } - - if (hoset + self.size.height >= self.parentData.height) { - self.size.height = self.parentData.height - hoset; - if (pRatio) self.size.width = self.size.height / o.aspectRatio; - } - }, - - stop: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), cp = self.position, - co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; - - var helper = $(self.helper), ho = helper.offset(), w = helper.innerWidth(), h = helper.innerHeight(); - - - if (o.helper && !o.animate && /relative/.test(ce.css('position'))) - $(this).css({ left: (ho.left - co.left), top: (ho.top - co.top), width: w, height: h }); - - if (o.helper && !o.animate && /static/.test(ce.css('position'))) - $(this).css({ left: cop.left + (ho.left - co.left), top: cop.top + (ho.top - co.top), width: w, height: h }); - - } -}); - -$.ui.plugin.add("resizable", "grid", { - - resize: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || e.shiftKey; - o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; - var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); - - if (/^(se|s|e)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - } - else if (/^(ne)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - } - else if (/^(sw)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.left = op.left - ox; - } - else { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - self.position.left = op.left - ox; - } - } - -}); - -$.ui.plugin.add("resizable", "animate", { - - stop: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"); - - var pr = o.proportionallyResize, ista = pr && (/textarea/i).test(pr.get(0).nodeName), - soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - self.element.animate( - $.extend(style, top && left ? { top: top, left: left } : {}), { - duration: o.animateDuration || "slow", easing: o.animateEasing || "swing", - step: function() { - - var data = { - width: parseInt(self.element.css('width'), 10), - height: parseInt(self.element.css('height'), 10), - top: parseInt(self.element.css('top'), 10), - left: parseInt(self.element.css('left'), 10) - }; - - if (pr) pr.css({ width: data.width, height: data.height }); - - // propagating resize, and updating values for each animation step - self._updateCache(data); - self.propagate("animate", e); - - } - } - ); - } - -}); - -$.ui.plugin.add("resizable", "ghost", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize, cs = self.size; - - if (!pr) self.ghost = self.element.clone(); - else self.ghost = pr.clone(); - - self.ghost.css( - { opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 } - ) - .addClass('ui-resizable-ghost').addClass(typeof o.ghost == 'string' ? o.ghost : ''); - - self.ghost.appendTo(self.helper); - - }, - - resize: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize; - - if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); - - }, - - stop: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize; - if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); - } - -}); - -$.ui.plugin.add("resizable", "alsoResize", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), - - _store = function(exp) { - $(exp).each(function() { - $(this).data("resizable-alsoresize", { - width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10), - left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10) - }); - }); - }; - - if (typeof(o.alsoResize) == 'object') { - if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } - else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); } - }else{ - _store(o.alsoResize); - } - }, - - resize: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), os = self.originalSize, op = self.originalPosition; - - var delta = { - height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, - top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 - }, - - _alsoResize = function(exp, c) { - $(exp).each(function() { - var start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left']; - - $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) { - var sum = (start[prop]||0) + (delta[prop]||0); - if (sum && sum >= 0) - style[prop] = sum || null; - }); - $(this).css(style); - }); - }; - - if (typeof(o.alsoResize) == 'object') { - $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); }); - }else{ - _alsoResize(o.alsoResize); - } - }, - - stop: function(e, ui){ - $(this).removeData("resizable-alsoresize-start"); - } -}); - -})(jQuery); -/* - * jQuery UI Selectable - * - * Copyright (c) 2008 Richard D. Worth (rdworth.org) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.selectable", $.extend($.ui.mouse, { - init: function() { - var self = this; - - this.element.addClass("ui-selectable"); - - this.dragged = false; - - // cache selectee children based on filter - var selectees; - this.refresh = function() { - selectees = $(self.options.filter, self.element[0]); - selectees.each(function() { - var $this = $(this); - var pos = $this.offset(); - $.data(this, "selectable-item", { - element: this, - $element: $this, - left: pos.left, - top: pos.top, - right: pos.left + $this.width(), - bottom: pos.top + $this.height(), - startselected: false, - selected: $this.hasClass('ui-selected'), - selecting: $this.hasClass('ui-selecting'), - unselecting: $this.hasClass('ui-unselecting') - }); - }); - }; - this.refresh(); - - this.selectees = selectees.addClass("ui-selectee"); - - this.mouseInit(); - - this.helper = $(document.createElement('div')).css({border:'1px dotted black'}); - }, - toggle: function() { - if(this.options.disabled){ - this.enable(); - } else { - this.disable(); - } - }, - destroy: function() { - this.element - .removeClass("ui-selectable ui-selectable-disabled") - .removeData("selectable") - .unbind(".selectable"); - this.mouseDestroy(); - }, - mouseStart: function(e) { - var self = this; - - this.opos = [e.pageX, e.pageY]; - - if (this.options.disabled) - return; - - var options = this.options; - - this.selectees = $(options.filter, this.element[0]); - - // selectable START callback - this.element.triggerHandler("selectablestart", [e, { - "selectable": this.element[0], - "options": options - }], options.start); - - $('body').append(this.helper); - // position helper (lasso) - this.helper.css({ - "z-index": 100, - "position": "absolute", - "left": e.clientX, - "top": e.clientY, - "width": 0, - "height": 0 - }); - - if (options.autoRefresh) { - this.refresh(); - } - - this.selectees.filter('.ui-selected').each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.startselected = true; - if (!e.ctrlKey) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - }); - - var isSelectee = false; - $(e.target).parents().andSelf().each(function() { - if($.data(this, "selectable-item")) isSelectee = true; - }); - return this.options.keyboard ? !isSelectee : true; - }, - mouseDrag: function(e) { - var self = this; - this.dragged = true; - - if (this.options.disabled) - return; - - var options = this.options; - - var x1 = this.opos[0], y1 = this.opos[1], x2 = e.pageX, y2 = e.pageY; - if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } - if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } - this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); - - this.selectees.each(function() { - var selectee = $.data(this, "selectable-item"); - //prevent helper from being selected if appendTo: selectable - if (!selectee || selectee.element == self.element[0]) - return; - var hit = false; - if (options.tolerance == 'touch') { - hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); - } else if (options.tolerance == 'fit') { - hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); - } - - if (hit) { - // SELECT - if (selectee.selected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - } - if (selectee.unselecting) { - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - } - if (!selectee.selecting) { - selectee.$element.addClass('ui-selecting'); - selectee.selecting = true; - // selectable SELECTING callback - self.element.triggerHandler("selectableselecting", [e, { - selectable: self.element[0], - selecting: selectee.element, - options: options - }], options.selecting); - } - } else { - // UNSELECT - if (selectee.selecting) { - if (e.ctrlKey && selectee.startselected) { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - selectee.$element.addClass('ui-selected'); - selectee.selected = true; - } else { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - if (selectee.startselected) { - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - } - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - } - if (selectee.selected) { - if (!e.ctrlKey && !selectee.startselected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - } - } - }); - - return false; - }, - mouseStop: function(e) { - var self = this; - - this.dragged = false; - - var options = this.options; - - $('.ui-unselecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - selectee.startselected = false; - self.element.triggerHandler("selectableunselected", [e, { - selectable: self.element[0], - unselected: selectee.element, - options: options - }], options.unselected); - }); - $('.ui-selecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); - selectee.selecting = false; - selectee.selected = true; - selectee.startselected = true; - self.element.triggerHandler("selectableselected", [e, { - selectable: self.element[0], - selected: selectee.element, - options: options - }], options.selected); - }); - this.element.triggerHandler("selectablestop", [e, { - selectable: self.element[0], - options: this.options - }], this.options.stop); - - this.helper.remove(); - - return false; - } -})); - -$.extend($.ui.selectable, { - defaults: { - distance: 1, - delay: 0, - cancel: ":input", - appendTo: 'body', - autoRefresh: true, - filter: '*', - tolerance: 'touch' - } -}); - -})(jQuery); -/* - * jQuery UI Sortable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * ui.core.js - */ -(function($) { - -function contains(a, b) { - var safari2 = $.browser.safari && $.browser.version < 522; - if (a.contains && !safari2) { - return a.contains(b); - } - if (a.compareDocumentPosition) - return !!(a.compareDocumentPosition(b) & 16); - while (b = b.parentNode) - if (b == a) return true; - return false; -}; - -$.widget("ui.sortable", $.extend($.ui.mouse, { - init: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are floating - this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; - - //Let's determine the parent's offset - if(!(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative'); - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this.mouseInit(); - - }, - plugins: {}, - ui: function(inst) { - return { - helper: (inst || this)["helper"], - placeholder: (inst || this)["placeholder"] || $([]), - position: (inst || this)["position"], - absolutePosition: (inst || this)["positionAbs"], - options: this.options, - element: this.element, - item: (inst || this)["currentItem"], - sender: inst ? inst.element : null - }; - }, - propagate: function(n,e,inst, noPropagation) { - $.ui.plugin.call(this, n, [e, this.ui(inst)]); - if(!noPropagation) this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]); - }, - serialize: function(o) { - - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var str = []; o = o || {}; - - items.each(function() { - var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1])+'[]='+(o.key && o.expression ? res[1] : res[2])); - }); - - return str.join('&'); - - }, - toArray: function(attr) { - - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var ret = []; - - items.each(function() { ret.push($(this).attr(attr || 'id')); }); - return ret; - - }, - /* Be careful with the following core functions */ - intersectsWith: function(item) { - - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - return (y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r); - } else { - - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - - }, - intersectsWithEdge: function(item) { - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - - if(!(y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r)) return false; - - if(this.floating) { - if(x1 + this.offset.click.left > l && x1 + this.offset.click.left < l + item.width/2) return 2; - if(x1 + this.offset.click.left > l+item.width/2 && x1 + this.offset.click.left < r) return 1; - } else { - if(y1 + this.offset.click.top > t && y1 + this.offset.click.top < t + item.height/2) return 2; - if(y1 + this.offset.click.top > t+item.height/2 && y1 + this.offset.click.top < b) return 1; - } - - } else { - - if (!(l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b )) return false; // Top Half - - if(this.floating) { - if(x2 > l && x1 < l) return 2; //Crosses left edge - if(x1 < r && x2 > r) return 1; //Crosses right edge - } else { - if(y2 > t && y1 < t) return 1; //Crosses top edge - if(y1 < b && y2 > b) return 2; //Crosses bottom edge - } - - } - - return false; - - }, - refresh: function() { - this.refreshItems(); - this.refreshPositions(); - }, - refreshItems: function() { - - this.items = []; - this.containers = [this]; - var items = this.items; - var self = this; - var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element), this]]; - - if(this.options.connectWith) { - for (var i = this.options.connectWith.length - 1; i >= 0; i--){ - var cur = $(this.options.connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], 'sortable'); - if(inst && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - }; - }; - } - - for (var i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - $.data(this, 'sortable-item', queries[i][1]); // Data for target checking (mouse manager) - items.push({ - item: $(this), - instance: queries[i][1], - width: 0, height: 0, - left: 0, top: 0 - }); - }); - }; - - }, - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent) { - var po = this.offsetParent.offset(); - this.offset.parent = { top: po.top + this.offsetParentBorders.top, left: po.left + this.offsetParentBorders.left }; - } - - for (var i = this.items.length - 1; i >= 0; i--){ - - //We ignore calculating positions of all connected containers when we're not over them - if(this.items[i].instance != this.currentContainer && this.currentContainer && this.items[i].item[0] != this.currentItem[0]) - continue; - - var t = this.options.toleranceElement ? $(this.options.toleranceElement, this.items[i].item) : this.items[i].item; - - if(!fast) { - this.items[i].width = t.outerWidth(); - this.items[i].height = t.outerHeight(); - } - - var p = t.offset(); - this.items[i].left = p.left; - this.items[i].top = p.top; - - }; - - for (var i = this.containers.length - 1; i >= 0; i--){ - var p =this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; - - }, - destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled") - .removeData("sortable") - .unbind(".sortable"); - this.mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData("sortable-item"); - }, - createPlaceholder: function(that) { - - var self = that || this, o = self.options; - - if(o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { - return $('<div></div>').addClass(className)[0]; - }, - update: function(i, p) { - p.css(i.offset()).css({ width: i.outerWidth(), height: i.outerHeight() }); - } - }; - } - - self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)).appendTo('body').css({ position: 'absolute' }); - o.placeholder.update.call(self.element, self.currentItem, self.placeholder); - }, - contactContainers: function(e) { - for (var i = this.containers.length - 1; i >= 0; i--){ - - if(this.intersectsWith(this.containers[i].containerCache)) { - if(!this.containers[i].containerCache.over) { - - - if(this.currentContainer != this.containers[i]) { - - //When entering a new container, we will find the item with the least distance and append our item near it - var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top']; - for (var j = this.items.length - 1; j >= 0; j--) { - if(!contains(this.containers[i].element[0], this.items[j].item[0])) continue; - var cur = this.items[j][this.containers[i].floating ? 'left' : 'top']; - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - } - } - - if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled - continue; - - //We also need to exchange the placeholder - if(this.placeholder) this.placeholder.remove(); - if(this.containers[i].options.placeholder) { - this.containers[i].createPlaceholder(this); - } else { - this.placeholder = null;; - } - - this.currentContainer = this.containers[i]; - itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance, null, true) : this.rearrange(e, null, this.containers[i].element, true); - this.propagate("change", e); //Call plugins and callbacks - this.containers[i].propagate("change", e, this); //Call plugins and callbacks - - } - - this.containers[i].propagate("over", e, this); - this.containers[i].containerCache.over = 1; - } - } else { - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - }; - }, - mouseCapture: function(e, overrideHandle) { - - if(this.options.disabled || this.options.type == 'static') return false; - - //We have to refresh the items data once first - this.refreshItems(); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, self = this, nodes = $(e.target).parents().each(function() { - if($.data(this, 'sortable-item') == self) { - currentItem = $(this); - return false; - } - }); - if($.data(e.target, 'sortable-item') == self) currentItem = $(e.target); - - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; - - $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == e.target) validHandle = true; }); - if(!validHandle) return false; - } - - this.currentItem = currentItem; - return true; - - }, - mouseStart: function(e, overrideHandle, noActivation) { - - var o = this.options; - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone(); - if(!this.helper.parents('body').length) this.helper.appendTo((o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)); //Add the helper to the DOM if that didn't happen already - this.helper.css({ position: 'absolute', clear: 'both' }).addClass('ui-sortable-helper'); //Position it absolutely and add a helper class - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - this.margins = { //Cache the margins - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - - this.offset = this.currentItem.offset(); //The element's absolute position on the page - this.offset = { //Substract the margins from the element's absolute offset - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - this.offset.click = { //Where the click happened, relative to the element - left: e.pageX - this.offset.left, - top: e.pageY - this.offset.top - }; - - this.offsetParent = this.helper.offsetParent(); //Get the offsetParent and cache its position - var po = this.offsetParent.offset(); - - this.offsetParentBorders = { - top: (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - this.offset.parent = { //Store its position plus border - top: po.top + this.offsetParentBorders.top, - left: po.left + this.offsetParentBorders.left - }; - - this.originalPosition = this.generatePosition(e); //Generate the original position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; //Cache the former DOM position - - //If o.placeholder is used, create a new element at the given position with the class - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Cache the helper size - if(o.placeholder) this.createPlaceholder(); - - //Call plugins and callbacks - this.propagate("start", e); - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Recache the helper size - - if(o.cursorAt) { - if(o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left; - if(o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right; - if(o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top; - if(o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom; - } - - /* - * - Position constraining - - * Here we prepare position constraining like grid and containment. - */ - - if(o.containment) { - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.parent.left, - 0 - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top, - co.left+Math.max(ce.scrollWidth,ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.currentItem.css("marginRight"),10) || 0), - co.top+Math.max(ce.scrollHeight,ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.currentItem.css("marginBottom"),10) || 0) - ]; - } - } - - //Set the original element visibility to hidden to still fill out the white space - if(this.options.placeholder != 'clone') - this.currentItem.css('visibility', 'hidden'); - - //Post 'activate' events to possible containers - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i].propagate("activate", e, this); } - } - - //Prepare possible droppables - if($.ui.ddmanager) $.ui.ddmanager.current = this; - if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e); - - this.dragging = true; - - this.mouseDrag(e); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - - }, - convertPositionTo: function(d, pos) { - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - return { - top: ( - pos.top // the calculated relative position - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) * mod // The offsetParent's scroll position - + this.margins.top * mod //Add the margin (you don't want the margin counting in intersection methods) - ), - left: ( - pos.left // the calculated relative position - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) * mod // The offsetParent's scroll position - + this.margins.left * mod //Add the margin (you don't want the margin counting in intersection methods) - ) - }; - }, - generatePosition: function(e) { - - var o = this.options; - var position = { - top: ( - e.pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) // The offsetParent's scroll position, not if the element is fixed - ), - left: ( - e.pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) // The offsetParent's scroll position, not if the element is fixed - ) - }; - - if(!this.originalPosition) return position; //If we are not dragging yet, we won't check for options - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - if(this.containment) { - if(position.left < this.containment[0]) position.left = this.containment[0]; - if(position.top < this.containment[1]) position.top = this.containment[1]; - if(position.left > this.containment[2]) position.left = this.containment[2]; - if(position.top > this.containment[3]) position.top = this.containment[3]; - } - - if(o.grid) { - var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1]; - position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0]; - position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - return position; - }, - mouseDrag: function(e) { - - - //Compute the helpers position - this.position = this.generatePosition(e); - this.positionAbs = this.convertPositionTo("absolute"); - - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - var intersection = this.intersectsWithEdge(this.items[i]); - if(!intersection) continue; - - if(this.items[i].item[0] != this.currentItem[0] //cannot intersect with itself - && this.currentItem[intersection == 1 ? "next" : "prev"]()[0] != this.items[i].item[0] //no useless actions that have been done before - && !contains(this.currentItem[0], this.items[i].item[0]) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !contains(this.element[0], this.items[i].item[0]) : true) - ) { - - this.direction = intersection == 1 ? "down" : "up"; - this.rearrange(e, this.items[i]); - this.propagate("change", e); //Call plugins and callbacks - break; - } - } - - //Post events to containers - this.contactContainers(e); - - //Call plugins and callbacks - this.propagate("sort", e); - - if(!this.options.axis || this.options.axis == "x") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis == "y") this.helper[0].style.top = this.position.top+'px'; - - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, e); - - return false; - - }, - rearrange: function(e, i, a, hardRefresh) { - a ? a.append(this.currentItem) : i.item[this.direction == 'down' ? 'before' : 'after'](this.currentItem); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var self = this, counter = this.counter; - - window.setTimeout(function() { - if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - },0); - - if(this.options.placeholder) - this.options.placeholder.update.call(this.element, this.currentItem, this.placeholder); - }, - mouseStop: function(e, noPropagation) { - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, e); - - if(this.options.revert) { - var self = this; - var cur = self.currentItem.offset(); - - //Also animate the placeholder if we have one - if(self.placeholder) self.placeholder.animate({ opacity: 'hide' }, (parseInt(this.options.revert, 10) || 500)-50); - - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self.clear(e); - }); - } else { - this.clear(e, noPropagation); - } - - return false; - - }, - clear: function(e, noPropagation) { - - if(this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) this.propagate("update", e, null, noPropagation); //Trigger update callback if the DOM position has changed - if(!contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element - this.propagate("remove", e, null, noPropagation); - for (var i = this.containers.length - 1; i >= 0; i--){ - if(contains(this.containers[i].element[0], this.currentItem[0])) { - this.containers[i].propagate("update", e, this, noPropagation); - this.containers[i].propagate("receive", e, this, noPropagation); - } - }; - }; - - //Post events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i].propagate("deactivate", e, this, noPropagation); - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - this.dragging = false; - if(this.cancelHelperRemoval) { - this.propagate("stop", e, null, noPropagation); - return false; - } - - $(this.currentItem).css('visibility', ''); - if(this.placeholder) this.placeholder.remove(); - this.helper.remove(); this.helper = null; - this.propagate("stop", e, null, noPropagation); - - return true; - - } -})); - -$.extend($.ui.sortable, { - getter: "serialize toArray", - defaults: { - helper: "clone", - tolerance: "guess", - distance: 1, - delay: 0, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - cancel: ":input", - items: '> *', - zIndex: 1000, - dropOnEmpty: true, - appendTo: "parent" - } -}); - -/* - * Sortable Extensions - */ - -$.ui.plugin.add("sortable", "cursor", { - start: function(e, ui) { - var t = $('body'); - if (t.css("cursor")) ui.options._cursor = t.css("cursor"); - t.css("cursor", ui.options.cursor); - }, - stop: function(e, ui) { - if (ui.options._cursor) $('body').css("cursor", ui.options._cursor); - } -}); - -$.ui.plugin.add("sortable", "zIndex", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex"); - t.css('zIndex', ui.options.zIndex); - }, - stop: function(e, ui) { - if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex); - } -}); - -$.ui.plugin.add("sortable", "opacity", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("opacity")) ui.options._opacity = t.css("opacity"); - t.css('opacity', ui.options.opacity); - }, - stop: function(e, ui) { - if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity); - } -}); - -$.ui.plugin.add("sortable", "scroll", { - start: function(e, ui) { - var o = ui.options; - var i = $(this).data("sortable"); - - i.overflowY = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - i.overflowX = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); - - }, - sort: function(e, ui) { - - var o = ui.options; - var i = $(this).data("sortable"); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { - if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed; - if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed; - } else { - if(e.pageY - $(document).scrollTop() < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - if($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { - if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed; - if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed; - } else { - if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - if($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } -}); - -})(jQuery); -/* - * jQuery UI Effects 1.5.1 - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/ - */ -;(function($) { - -$.effects = $.effects || {}; //Add the 'effects' scope - -$.extend($.effects, { - save: function(el, set) { - for(var i=0;i<set.length;i++) { - if(set[i] !== null) $.data(el[0], "ec.storage."+set[i], el[0].style[set[i]]); - } - }, - restore: function(el, set) { - for(var i=0;i<set.length;i++) { - if(set[i] !== null) el.css(set[i], $.data(el[0], "ec.storage."+set[i])); - } - }, - setMode: function(el, mode) { - if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle - return mode; - }, - getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value - // this should be a little more flexible in the future to handle a string & hash - var y, x; - switch (origin[0]) { - case 'top': y = 0; break; - case 'middle': y = 0.5; break; - case 'bottom': y = 1; break; - default: y = origin[0] / original.height; - }; - switch (origin[1]) { - case 'left': x = 0; break; - case 'center': x = 0.5; break; - case 'right': x = 1; break; - default: x = origin[1] / original.width; - }; - return {x: x, y: y}; - }, - createWrapper: function(el) { - if (el.parent().attr('id') == 'fxWrapper') - return el; - var props = {width: el.outerWidth({margin:true}), height: el.outerHeight({margin:true}), 'float': el.css('float')}; - el.wrap('<div id="fxWrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>'); - var wrapper = el.parent(); - if (el.css('position') == 'static'){ - wrapper.css({position: 'relative'}); - el.css({position: 'relative'}); - } else { - var top = parseInt(el.css('top'), 10); if(isNaN(top)) top = 'auto'; - var left = parseInt(el.css('left'), 10); if(isNaN(left)) left = 'auto'; - wrapper.css({ position: el.css('position'), top: top, left: left, zIndex: el.css('z-index') }).show(); - el.css({position: 'relative', top:0, left:0}); - } - wrapper.css(props); - return wrapper; - }, - removeWrapper: function(el) { - if (el.parent().attr('id') == 'fxWrapper') - return el.parent().replaceWith(el); - return el; - }, - setTransition: function(el, list, factor, val) { - val = val || {}; - $.each(list,function(i, x){ - unit = el.cssUnit(x); - if (unit[0] > 0) val[x] = unit[0] * factor + unit[1]; - }); - return val; - }, - animateClass: function(value, duration, easing, callback) { - - var cb = (typeof easing == "function" ? easing : (callback ? callback : null)); - var ea = (typeof easing == "object" ? easing : null); - - return this.each(function() { - - var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || ''; - if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */ - if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; } - - //Let's get a style offset - var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); - if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove); - var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); - if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove); - - // The main function to form the object for animation - for(var n in newStyle) { - if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */ - && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */ - && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */ - && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */ - && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */ - ) offset[n] = newStyle[n]; - } - - that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object - // Change style attribute back to original. For stupid IE, we need to clear the damn object. - if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr); - if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove); - if(cb) cb.apply(this, arguments); - }); - - }); - } -}); - -//Extend the methods of jQuery -$.fn.extend({ - //Save old methods - _show: $.fn.show, - _hide: $.fn.hide, - __toggle: $.fn.toggle, - _addClass: $.fn.addClass, - _removeClass: $.fn.removeClass, - _toggleClass: $.fn.toggleClass, - // New ec methods - effect: function(fx,o,speed,callback) { - return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: o || {}, duration: speed, callback: callback }) : null; - }, - show: function() { - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) - return this._show.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'show'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - hide: function() { - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) - return this._hide.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'hide'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - toggle: function(){ - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0])) || (arguments[0].constructor == Function)) - return this.__toggle.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'toggle'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - addClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); - }, - removeClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); - }, - toggleClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames); - }, - morph: function(remove,add,speed,easing,callback) { - return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); - }, - switchClass: function() { - return this.morph.apply(this, arguments); - }, - // helper functions - cssUnit: function(key) { - var style = this.css(key), val = []; - $.each( ['em','px','%','pt'], function(i, unit){ - if(style.indexOf(unit) > 0) - val = [parseFloat(style), unit]; - }); - return val; - } -}); - -/* - * jQuery Color Animations - * Copyright 2007 John Resig - * Released under the MIT and GPL licenses. - */ - -// We override the animation for all of these color styles -jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ - jQuery.fx.step[attr] = function(fx){ - if ( fx.state == 0 ) { - fx.start = getColor( fx.elem, attr ); - fx.end = getRGB( fx.end ); - } - - fx.elem.style[attr] = "rgb(" + [ - Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) - ].join(",") + ")"; - } -}); - -// Color Conversion functions from highlightFade -// By Blair Mitchelmore -// http://jquery.offput.ca/highlightFade/ - -// Parse strings looking for color tuples [255,255,255] -function getRGB(color) { - var result; - - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; - - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])]; - - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; - - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; - - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; - - // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 - if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) - return colors['transparent'] - - // Otherwise, we're most likely dealing with a named color - return colors[jQuery.trim(color).toLowerCase()]; -} - -function getColor(elem, attr) { - var color; - - do { - color = jQuery.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") ) - break; - - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); - - return getRGB(color); -}; - -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ - -var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0], - transparent: [255,255,255] -}; - -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -})(jQuery); -/* - * jQuery UI Effects Blind - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.blind = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'vertical') ? 'height' : 'width'; - var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); - if(mode == 'show') wrapper.css(ref, 0); // Shift - - // Animation - var animation = {}; - animation[ref] = mode == 'show' ? distance : 0; - - // Animate - wrapper.animate(animation, o.duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Bounce - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.bounce = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'up'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 5; // Default # of times - var speed = o.duration || 250; // Default speed per bounce - if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - if (mode == 'hide') distance = distance / (times * 2); - if (mode != 'hide') times--; - - // Animate - if (mode == 'show') { // Show Bounce - var animation = {opacity: 1}; - animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation, speed / 2, o.options.easing); - distance = distance / 2; - times--; - }; - for (var i = 0; i < times; i++) { // Bounces - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); - distance = (mode == 'hide') ? distance * 2 : distance / 2; - }; - if (mode == 'hide') { // Last Bounce - var animation = {opacity: 0}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - el.animate(animation, speed / 2, o.options.easing, function(){ - el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Clip - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.clip = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','height','width']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var animate = el[0].tagName == 'IMG' ? wrapper : el; - var ref = { - size: (direction == 'vertical') ? 'height' : 'width', - position: (direction == 'vertical') ? 'top' : 'left' - }; - var distance = (direction == 'vertical') ? animate.height() : animate.width(); - if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift - - // Animation - var animation = {}; - animation[ref.size] = mode == 'show' ? distance : 0; - animation[ref.position] = mode == 'show' ? 0 : distance / 2; - - // Animate - animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Drop - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.drop = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','opacity']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {opacity: mode == 'show' ? 1 : 0}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Explode - * - * Copyright (c) 2008 Paul Bakaus (ui.jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.explode = function(o) { - - return this.queue(function() { - - var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - - o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; - var el = $(this).show().css('visibility', 'hidden'); - var offset = el.offset(); - - //Substract the margins - not fixing the problem yet. - offset.top -= parseInt(el.css("marginTop")) || 0; - offset.left -= parseInt(el.css("marginLeft")) || 0; - - var width = el.outerWidth(true); - var height = el.outerHeight(true); - - for(var i=0;i<rows;i++) { // = - for(var j=0;j<cells;j++) { // || - el - .clone() - .appendTo('body') - .wrap('<div></div>') - .css({ - position: 'absolute', - visibility: 'visible', - left: -j*(width/cells), - top: -i*(height/rows) - }) - .parent() - .addClass('effects-explode') - .css({ - position: 'absolute', - overflow: 'hidden', - width: width/cells, - height: height/rows, - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), - opacity: o.options.mode == 'show' ? 0 : 1 - }).animate({ - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), - opacity: o.options.mode == 'show' ? 1 : 0 - }, o.duration || 500); - } - } - - // Set a timeout, to call the callback approx. when the other animations have finished - setTimeout(function() { - - o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); - if(o.callback) o.callback.apply(el[0]); // Callback - el.dequeue(); - - $('.effects-explode').remove(); - - }, o.duration || 500); - - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Fold - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.fold = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var size = o.options.size || 15; // Default fold size - var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var widthFirst = ((mode == 'show') != horizFirst); - var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; - var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; - var percent = /([0-9]+)%/.exec(size); - if(percent) size = parseInt(percent[1]) / 100 * distance[mode == 'hide' ? 0 : 1]; - if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift - - // Animation - var animation1 = {}, animation2 = {}; - animation1[ref[0]] = mode == 'show' ? distance[0] : size; - animation2[ref[1]] = mode == 'show' ? distance[1] : 0; - - // Animate - wrapper.animate(animation1, o.duration / 2, o.options.easing) - .animate(animation2, o.duration / 2, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Highlight - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * effects.core.js - */ -;(function($) { - -$.effects.highlight = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['backgroundImage','backgroundColor','opacity']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var color = o.options.color || "#ffff99"; // Default highlight color - var oldColor = el.css("backgroundColor"); - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - el.css({backgroundImage: 'none', backgroundColor: color}); // Shift - - // Animation - var animation = {backgroundColor: oldColor }; - if (mode == "hide") animation['opacity'] = 0; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == "hide") el.hide(); - $.effects.restore(el, props); - if (mode == "show" && jQuery.browser.msie) this.style.removeAttribute('filter'); - if(o.callback) o.callback.apply(this, arguments); - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Pulsate - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.pulsate = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var times = o.options.times || 5; // Default # of times - - // Adjust - if (mode == 'hide') times--; - if (el.is(':hidden')) { // Show fadeIn - el.css('opacity', 0); - el.show(); // Show - el.animate({opacity: 1}, o.duration / 2, o.options.easing); - times = times-2; - } - - // Animate - for (var i = 0; i < times; i++) { // Pulsate - el.animate({opacity: 0}, o.duration / 2, o.options.easing).animate({opacity: 1}, o.duration / 2, o.options.easing); - }; - if (mode == 'hide') { // Last Pulse - el.animate({opacity: 0}, o.duration / 2, o.options.easing, function(){ - el.hide(); // Hide - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - el.animate({opacity: 0}, o.duration / 2, o.options.easing).animate({opacity: 1}, o.duration / 2, o.options.easing, function(){ - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Scale - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.puff = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var percent = parseInt(o.options.percent) || 150; // Set default puff percent - options.fade = true; // It's not a puff if it doesn't fade! :) - var original = {height: el.height(), width: el.width()}; // Save original - - // Adjust - var factor = percent / 100; - el.from = (mode == 'hide') ? original : {height: original.height * factor, width: original.width * factor}; - - // Animation - options.from = el.from; - options.percent = (mode == 'hide') ? percent : 100; - options.mode = mode; - - // Animate - el.effect('scale', options, o.duration, o.callback); - el.dequeue(); - }); - -}; - -$.effects.scale = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var percent = parseInt(o.options.percent) || (parseInt(o.options.percent) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent - var direction = o.options.direction || 'both'; // Set default axis - var origin = o.options.origin; // The origin of the scaling - if (mode != 'effect') { // Set default origin and restore for show/hide - options.origin = origin || ['middle','center']; - options.restore = true; - } - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state - - // Adjust - var factor = { // Set scaling factor - y: direction != 'horizontal' ? (percent / 100) : 1, - x: direction != 'vertical' ? (percent / 100) : 1 - }; - el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state - - if (o.options.fade) { // Fade option to support puff - if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; - if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; - }; - - // Animation - options.from = el.from; options.to = el.to; options.mode = mode; - - // Animate - el.effect('size', options, o.duration, o.callback); - el.dequeue(); - }); - -}; - -$.effects.size = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','width','height','overflow','opacity']; - var props1 = ['position','top','left','overflow','opacity']; // Always restore - var props2 = ['width','height','overflow']; // Copy for children - var cProps = ['fontSize']; - var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; - var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var restore = o.options.restore || false; // Default restore - var scale = o.options.scale || 'both'; // Default scale mode - var origin = o.options.origin; // The origin of the sizing - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || original; // Default from state - el.to = o.options.to || original; // Default to state - // Adjust - if (origin) { // Calculate baseline shifts - var baseline = $.effects.getBaseline(origin, original); - el.from.top = (original.height - el.from.height) * baseline.y; - el.from.left = (original.width - el.from.width) * baseline.x; - el.to.top = (original.height - el.to.height) * baseline.y; - el.to.left = (original.width - el.to.width) * baseline.x; - }; - var factor = { // Set scaling factor - from: {y: el.from.height / original.height, x: el.from.width / original.width}, - to: {y: el.to.height / original.height, x: el.to.width / original.width} - }; - if (scale == 'box' || scale == 'both') { // Scale the css box - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(vProps); - el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - props = props.concat(hProps); - el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); - el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); - }; - }; - if (scale == 'content' || scale == 'both') { // Scale the content - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(cProps); - el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); - }; - }; - $.effects.save(el, restore ? props : props1); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - el.css('overflow','hidden').css(el.from); // Shift - - // Animate - if (scale == 'content' || scale == 'both') { // Scale the children - vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size - hProps = hProps.concat(['marginLeft','marginRight']); // Add margins - props2 = props.concat(vProps).concat(hProps); // Concat - el.find("*[width]").each(function(){ - child = $(this); - if (restore) $.effects.save(child, props2); - var c_original = {height: child.height(), width: child.width()}; // Save original - child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; - child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; - if (factor.from.y != factor.to.y) { // Vertical props scaling - child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); - child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); - child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); - }; - child.css(child.from); // Shift children - child.animate(child.to, o.duration, o.options.easing, function(){ - if (restore) $.effects.restore(child, props2); // Restore children - }); // Animate children - }); - }; - - // Animate - el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Shake - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.shake = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'left'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 3; // Default # of times - var speed = o.duration || o.options.duration || 140; // Default speed per shake - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - - // Animation - var animation = {}, animation1 = {}, animation2 = {}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; - animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; - - // Animate - el.animate(animation, speed, o.options.easing); - for (var i = 1; i < times; i++) { // Shakes - el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); - }; - el.animate(animation1, speed, o.options.easing). - animate(animation, speed / 2, o.options.easing, function(){ // Last shake - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Slide - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.slide = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); - if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Transfer - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.transfer = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var target = $(o.options.to); // Find Target - var position = el.offset(); - var transfer = $('<div class="ui-effects-transfer"></div>').appendTo(document.body); - if(o.options.className) transfer.addClass(o.options.className); - - // Set target css - transfer.addClass(o.options.className); - transfer.css({ - top: position.top, - left: position.left, - height: el.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')), - width: el.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')), - position: 'absolute' - }); - - // Animation - position = target.offset(); - animation = { - top: position.top, - left: position.left, - height: target.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')), - width: target.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')) - }; - - // Animate - transfer.animate(animation, o.duration, o.options.easing, function() { - transfer.remove(); // Remove div - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Accordion - * - * Copyright (c) 2007, 2008 Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.accordion", { - init: function() { - var options = this.options; - - if ( options.navigation ) { - var current = this.element.find("a").filter(options.navigationFilter); - if ( current.length ) { - if ( current.filter(options.header).length ) { - options.active = current; - } else { - options.active = current.parent().parent().prev(); - current.addClass("current"); - } - } - } - - // calculate active if not specified, using the first header - options.headers = this.element.find(options.header); - options.active = findActive(options.headers, options.active); - - // IE7-/Win - Extra vertical space in Lists fixed - if ($.browser.msie) { - this.element.find('a').css('zoom', '1'); - } - - if (!this.element.hasClass("ui-accordion")) { - this.element.addClass("ui-accordion"); - $("<span class='ui-accordion-left'/>").insertBefore(options.headers); - $("<span class='ui-accordion-right'/>").appendTo(options.headers); - options.headers.addClass("ui-accordion-header").attr("tabindex", "0"); - } - - var maxHeight; - if ( options.fillSpace ) { - maxHeight = this.element.parent().height(); - options.headers.each(function() { - maxHeight -= $(this).outerHeight(); - }); - var maxPadding = 0; - options.headers.next().each(function() { - maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); - }).height(maxHeight - maxPadding); - } else if ( options.autoHeight ) { - maxHeight = 0; - options.headers.next().each(function() { - maxHeight = Math.max(maxHeight, $(this).outerHeight()); - }).height(maxHeight); - } - - options.headers - .not(options.active || "") - .next() - .hide(); - options.active.parent().andSelf().addClass(options.selectedClass); - - if (options.event) { - this.element.bind((options.event) + ".accordion", clickHandler); - } - }, - activate: function(index) { - // call clickHandler with custom event - clickHandler.call(this.element[0], { - target: findActive( this.options.headers, index )[0] - }); - }, - destroy: function() { - this.options.headers.next().css("display", ""); - if ( this.options.fillSpace || this.options.autoHeight ) { - this.options.headers.next().css("height", ""); - } - $.removeData(this.element[0], "accordion"); - this.element.removeClass("ui-accordion").unbind(".accordion"); - } -}); - -function scopeCallback(callback, scope) { - return function() { - return callback.apply(scope, arguments); - }; -}; - -function completed(cancel) { - // if removed while animated data can be empty - if (!$.data(this, "accordion")) { - return; - } - - var instance = $.data(this, "accordion"); - var options = instance.options; - options.running = cancel ? 0 : --options.running; - if ( options.running ) { - return; - } - if ( options.clearStyle ) { - options.toShow.add(options.toHide).css({ - height: "", - overflow: "" - }); - } - $(this).triggerHandler("accordionchange", [null, options.data], options.change); -} - -function toggle(toShow, toHide, data, clickedActive, down) { - var options = $.data(this, "accordion").options; - options.toShow = toShow; - options.toHide = toHide; - options.data = data; - var complete = scopeCallback(completed, this); - - // count elements to animate - options.running = toHide.size() === 0 ? toShow.size() : toHide.size(); - - if ( options.animated ) { - if ( !options.alwaysOpen && clickedActive ) { - $.ui.accordion.animations[options.animated]({ - toShow: jQuery([]), - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight - }); - } else { - $.ui.accordion.animations[options.animated]({ - toShow: toShow, - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight - }); - } - } else { - if ( !options.alwaysOpen && clickedActive ) { - toShow.toggle(); - } else { - toHide.hide(); - toShow.show(); - } - complete(true); - } -} - -function clickHandler(event) { - var options = $.data(this, "accordion").options; - if (options.disabled) { - return false; - } - - // called only when using activate(false) to close all parts programmatically - if ( !event.target && !options.alwaysOpen ) { - options.active.parent().andSelf().toggleClass(options.selectedClass); - var toHide = options.active.next(), - data = { - options: options, - newHeader: jQuery([]), - oldHeader: options.active, - newContent: jQuery([]), - oldContent: toHide - }, - toShow = (options.active = $([])); - toggle.call(this, toShow, toHide, data ); - return false; - } - // get the click target - var clicked = $(event.target); - - // due to the event delegation model, we have to check if one - // of the parent elements is our actual header, and find that - // otherwise stick with the initial target - clicked = $( clicked.parents(options.header)[0] || clicked ); - - var clickedActive = clicked[0] == options.active[0]; - - // if animations are still active, or the active header is the target, ignore click - if (options.running || (options.alwaysOpen && clickedActive)) { - return false; - } - if (!clicked.is(options.header)) { - return; - } - - // switch classes - options.active.parent().andSelf().toggleClass(options.selectedClass); - if ( !clickedActive ) { - clicked.parent().andSelf().addClass(options.selectedClass); - } - - // find elements to show and hide - var toShow = clicked.next(), - toHide = options.active.next(), - //data = [clicked, options.active, toShow, toHide], - data = { - options: options, - newHeader: clicked, - oldHeader: options.active, - newContent: toShow, - oldContent: toHide - }, - down = options.headers.index( options.active[0] ) > options.headers.index( clicked[0] ); - - options.active = clickedActive ? $([]) : clicked; - toggle.call(this, toShow, toHide, data, clickedActive, down ); - - return false; -}; - -function findActive(headers, selector) { - return selector != undefined - ? typeof selector == "number" - ? headers.filter(":eq(" + selector + ")") - : headers.not(headers.not(selector)) - : selector === false - ? $([]) - : headers.filter(":eq(0)"); -} - -$.extend($.ui.accordion, { - defaults: { - selectedClass: "selected", - alwaysOpen: true, - animated: 'slide', - event: "click", - header: "a", - autoHeight: true, - running: 0, - navigationFilter: function() { - return this.href.toLowerCase() == location.href.toLowerCase(); - } - }, - animations: { - slide: function(options, additions) { - options = $.extend({ - easing: "swing", - duration: 300 - }, options, additions); - if ( !options.toHide.size() ) { - options.toShow.animate({height: "show"}, options); - return; - } - var hideHeight = options.toHide.height(), - showHeight = options.toShow.height(), - difference = showHeight / hideHeight; - options.toShow.css({ height: 0, overflow: 'hidden' }).show(); - options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height:"hide"},{ - step: function(now) { - var current = (hideHeight - now) * difference; - if ($.browser.msie || $.browser.opera) { - current = Math.ceil(current); - } - options.toShow.height( current ); - }, - duration: options.duration, - easing: options.easing, - complete: function() { - if ( !options.autoHeight ) { - options.toShow.css("height", "auto"); - } - options.complete(); - } - }); - }, - bounceslide: function(options) { - this.slide(options, { - easing: options.down ? "bounceout" : "swing", - duration: options.down ? 1000 : 200 - }); - }, - easeslide: function(options) { - this.slide(options, { - easing: "easeinout", - duration: 700 - }); - } - } -}); - -// deprecated, use accordion("activate", index) instead -$.fn.activate = function(index) { - return this.accordion("activate", index); -}; - -})(jQuery); -/* - * jQuery UI Datepicker - * - * Copyright (c) 2006, 2007, 2008 Marc Grabanski - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * ui.core.js - * - * Marc Grabanski (m@marcgrabanski.com) and Keith Wood (kbwood@virginbroadband.com.au). - */ - -(function($) { // hide the namespace - -/* Date picker manager. - Use the singleton instance of this class, $.datepicker, to interact with the date picker. - Settings for (groups of) date pickers are maintained in an instance object - (DatepickerInstance), allowing multiple different settings on the same page. */ - -function Datepicker() { - this.debug = false; // Change this to true to start debugging - this._nextId = 0; // Next ID for a date picker instance - this._inst = []; // List of instances indexed by ID - this._curInst = null; // The current instance in use - this._disabledInputs = []; // List of date picker inputs that have been disabled - this._datepickerShowing = false; // True if the popup picker is showing , false if not - this._inDialog = false; // True if showing within a "dialog", false if not - this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division - this._appendClass = 'ui-datepicker-append'; // The name of the append marker class - this._wrapClass = 'ui-datepicker-wrap'; // The name of the wrapper marker class - this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class - this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class - this._promptClass = 'ui-datepicker-prompt'; // The name of the dialog prompt marker class - this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class - this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - clearText: 'Clear', // Display text for clear link - clearStatus: 'Erase the current date', // Status text for clear link - closeText: 'Close', // Display text for close link - closeStatus: 'Close without change', // Status text for close link - prevText: '<Prev', // Display text for previous month link - prevStatus: 'Show the previous month', // Status text for previous month link - nextText: 'Next>', // Display text for next month link - nextStatus: 'Show the next month', // Status text for next month link - currentText: 'Today', // Display text for current month link - currentStatus: 'Show the current month', // Status text for current month link - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], // Names of months for drop-down and formatting - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting - monthStatus: 'Show a different month', // Status text for selecting a month - yearStatus: 'Show a different year', // Status text for selecting a year - weekHeader: 'Wk', // Header for the week of the year column - weekStatus: 'Week of the year', // Status text for the week of the year column - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday - dayStatus: 'Set DD as first week day', // Status text for the day of the week selection - dateStatus: 'Select DD, M d', // Status text for the date selection - dateFormat: 'mm/dd/yy', // See format options on parseDate - firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... - initStatus: 'Select a date', // Initial Status text on opening - isRTL: false // True if right-to-left language, false if left-to-right - }; - this._defaults = { // Global defaults for all the date picker instances - showOn: 'focus', // 'focus' for popup on focus, - // 'button' for trigger button, or 'both' for either - showAnim: 'show', // Name of jQuery animation for popup - defaultDate: null, // Used when field is blank: actual date, - // +/-number for offset from today, null for today - appendText: '', // Display text following the input box, e.g. showing the format - buttonText: '...', // Text for trigger button - buttonImage: '', // URL for trigger button image - buttonImageOnly: false, // True if the image appears alone, false if it appears on a button - closeAtTop: true, // True to have the clear/close at the top, - // false to have them at the bottom - mandatory: false, // True to hide the Clear link, false to include it - hideIfNoPrevNext: false, // True to hide next/previous month links - // if not applicable, false to just disable them - navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links - changeMonth: true, // True if month can be selected directly, false if only prev/next - changeYear: true, // True if year can be selected directly, false if only prev/next - yearRange: '-10:+10', // Range of years to display in drop-down, - // either relative to current year (-nn:+nn) or absolute (nnnn:nnnn) - changeFirstDay: true, // True to click on day name to change, false to remain as set - highlightWeek: false, // True to highlight the selected week - showOtherMonths: false, // True to show dates in other months, false to leave blank - showWeeks: false, // True to show week of the year, false to omit - calculateWeek: this.iso8601Week, // How to calculate the week of the year, - // takes a Date and returns the number of the week for it - shortYearCutoff: '+10', // Short year values < this are in the current century, - // > this are in the previous century, - // string value starting with '+' for current year + value - showStatus: false, // True to show status bar at bottom, false to not show it - statusForDate: this.dateStatus, // Function to provide status text for a date - - // takes date and instance as parameters, returns display text - minDate: null, // The earliest selectable date, or null for no limit - maxDate: null, // The latest selectable date, or null for no limit - speed: 'normal', // Speed of display/closure - beforeShowDay: null, // Function that takes a date and returns an array with - // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', - // [2] = cell title (optional), e.g. $.datepicker.noWeekends - beforeShow: null, // Function that takes an input field and - // returns a set of custom settings for the date picker - onSelect: null, // Define a callback function when a date is selected - onChangeMonthYear: null, // Define a callback function when the month or year is changed - onClose: null, // Define a callback function when the datepicker is closed - numberOfMonths: 1, // Number of months to show at a time - stepMonths: 1, // Number of months to step back/forward - rangeSelect: false, // Allows for selecting a date range on one date picker - rangeSeparator: ' - ', // Text between two dates in a range - altField: '', // Selector for an alternate field to store selected dates into - altFormat: '' // The date format to use for the alternate field - }; - $.extend(this._defaults, this.regional['']); - this._datepickerDiv = $('<div id="' + this._mainDivId + '"></div>'); -} - -$.extend(Datepicker.prototype, { - /* Class name added to elements to indicate already configured with a date picker. */ - markerClassName: 'hasDatepicker', - - /* Debug logging (if enabled). */ - log: function () { - if (this.debug) - console.log.apply('', arguments); - }, - - /* Register a new date picker instance - with custom settings. */ - _register: function(inst) { - var id = this._nextId++; - this._inst[id] = inst; - return id; - }, - - /* Retrieve a particular date picker instance based on its ID. */ - _getInst: function(id) { - return this._inst[id] || id; - }, - - /* Override the default settings for all instances of the date picker. - @param settings object - the new settings to use as defaults (anonymous object) - @return the manager object */ - setDefaults: function(settings) { - extendRemove(this._defaults, settings || {}); - return this; - }, - - /* Attach the date picker to a jQuery selection. - @param target element - the target input field or division or span - @param settings object - the new settings to use for this date picker instance (anonymous) */ - _attachDatepicker: function(target, settings) { - // check for settings on the control itself - in namespace 'date:' - var inlineSettings = null; - for (attrName in this._defaults) { - var attrValue = target.getAttribute('date:' + attrName); - if (attrValue) { - inlineSettings = inlineSettings || {}; - try { - inlineSettings[attrName] = eval(attrValue); - } catch (err) { - inlineSettings[attrName] = attrValue; - } - } - } - var nodeName = target.nodeName.toLowerCase(); - var instSettings = (inlineSettings ? - $.extend(settings || {}, inlineSettings) : settings); - if (nodeName == 'input') { - var inst = (inst && !inlineSettings ? inst : - new DatepickerInstance(instSettings, false)); - this._connectDatepicker(target, inst); - } else if (nodeName == 'div' || nodeName == 'span') { - var inst = new DatepickerInstance(instSettings, true); - this._inlineDatepicker(target, inst); - } - }, - - /* Detach a datepicker from its control. - @param target element - the target input field or division or span */ - _destroyDatepicker: function(target) { - var nodeName = target.nodeName.toLowerCase(); - var calId = target._calId; - var $target = $(target); - $target.removeAttr('_calId'); - if (nodeName == 'input') { - $target.siblings('.' + this._appendClass).replaceWith('').end() - .siblings('.' + this._triggerClass).replaceWith('').end() - .removeClass(this.markerClassName) - .unbind('focus', this._showDatepicker) - .unbind('keydown', this._doKeyDown) - .unbind('keypress', this._doKeyPress); - var wrapper = $target.parents('.' + this._wrapClass); - if (wrapper) - wrapper.siblings('.' + this._appendClass).replaceWith('').end() - .replaceWith(wrapper.html()); - } else if (nodeName == 'div' || nodeName == 'span') - $target.removeClass(this.markerClassName).empty(); - if ($('input[_calId=' + calId + ']').length == 0) - // clean up if last for this ID - this._inst[calId] = null; - }, - - /* Enable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _enableDatepicker: function(target) { - target.disabled = false; - $(target).siblings('button.' + this._triggerClass).each(function() { this.disabled = false; }).end() - .siblings('img.' + this._triggerClass).css({opacity: '1.0', cursor: ''}); - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - }, - - /* Disable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _disableDatepicker: function(target) { - target.disabled = true; - $(target).siblings('button.' + this._triggerClass).each(function() { this.disabled = true; }).end() - .siblings('img.' + this._triggerClass).css({opacity: '0.5', cursor: 'default'}); - this._disabledInputs = $.map($.datepicker._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - this._disabledInputs[$.datepicker._disabledInputs.length] = target; - }, - - /* Is the first field in a jQuery collection disabled as a datepicker? - @param target element - the target input field or division or span - @return boolean - true if disabled, false if enabled */ - _isDisabledDatepicker: function(target) { - if (!target) - return false; - for (var i = 0; i < this._disabledInputs.length; i++) { - if (this._disabledInputs[i] == target) - return true; - } - return false; - }, - - /* Update the settings for a date picker attached to an input field or division. - @param target element - the target input field or division or span - @param name string - the name of the setting to change or - object - the new settings to update - @param value any - the new value for the setting (omit if above is an object) */ - _changeDatepicker: function(target, name, value) { - var settings = name || {}; - if (typeof name == 'string') { - settings = {}; - settings[name] = value; - } - if (inst = this._getInst(target._calId)) { - extendRemove(inst._settings, settings); - this._updateDatepicker(inst); - } - }, - - /* Set the dates for a jQuery selection. - @param target element - the target input field or division or span - @param date Date - the new date - @param endDate Date - the new end date for a range (optional) */ - _setDateDatepicker: function(target, date, endDate) { - if (inst = this._getInst(target._calId)) { - inst._setDate(date, endDate); - this._updateDatepicker(inst); - } - }, - - /* Get the date(s) for the first entry in a jQuery selection. - @param target element - the target input field or division or span - @return Date - the current date or - Date[2] - the current dates for a range */ - _getDateDatepicker: function(target) { - var inst = this._getInst(target._calId); - if (inst) - inst._setDateFromField($(target)); - return (inst ? inst._getDate() : null); - }, - - /* Handle keystrokes. */ - _doKeyDown: function(e) { - var inst = $.datepicker._getInst(this._calId); - if ($.datepicker._datepickerShowing) - switch (e.keyCode) { - case 9: $.datepicker._hideDatepicker(null, ''); - break; // hide on tab out - case 13: $.datepicker._selectDay(inst, inst._selectedMonth, inst._selectedYear, - $('td.ui-datepicker-days-cell-over', inst._datepickerDiv)[0]); - return false; // don't submit the form - break; // select the value on enter - case 27: $.datepicker._hideDatepicker(null, inst._get('speed')); - break; // hide on escape - case 33: $.datepicker._adjustDate(inst, - (e.ctrlKey ? -1 : -inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M')); - break; // previous month/year on page up/+ ctrl - case 34: $.datepicker._adjustDate(inst, - (e.ctrlKey ? +1 : +inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M')); - break; // next month/year on page down/+ ctrl - case 35: if (e.ctrlKey) $.datepicker._clearDate(inst); - break; // clear on ctrl+end - case 36: if (e.ctrlKey) $.datepicker._gotoToday(inst); - break; // current on ctrl+home - case 37: if (e.ctrlKey) $.datepicker._adjustDate(inst, -1, 'D'); - break; // -1 day on ctrl+left - case 38: if (e.ctrlKey) $.datepicker._adjustDate(inst, -7, 'D'); - break; // -1 week on ctrl+up - case 39: if (e.ctrlKey) $.datepicker._adjustDate(inst, +1, 'D'); - break; // +1 day on ctrl+right - case 40: if (e.ctrlKey) $.datepicker._adjustDate(inst, +7, 'D'); - break; // +1 week on ctrl+down - } - else if (e.keyCode == 36 && e.ctrlKey) // display the date picker on ctrl+home - $.datepicker._showDatepicker(this); - }, - - /* Filter entered characters - based on date format. */ - _doKeyPress: function(e) { - var inst = $.datepicker._getInst(this._calId); - var chars = $.datepicker._possibleChars(inst._get('dateFormat')); - var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode); - return e.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); - }, - - /* Attach the date picker to an input field. */ - _connectDatepicker: function(target, inst) { - var input = $(target); - if (input.hasClass(this.markerClassName)) - return; - var appendText = inst._get('appendText'); - var isRTL = inst._get('isRTL'); - if (appendText) - input[isRTL ? 'before' : 'after']('<span class="' + this._appendClass + '">' + appendText + '</span>'); - var showOn = inst._get('showOn'); - if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field - input.focus(this._showDatepicker); - if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked - input.wrap('<span class="' + this._wrapClass + '"></span>'); - var buttonText = inst._get('buttonText'); - var buttonImage = inst._get('buttonImage'); - var trigger = $(inst._get('buttonImageOnly') ? - $('<img/>').addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText }) : - $('<button></button>').addClass(this._triggerClass).html(buttonImage != '' ? - $('<img/>').attr({ src:buttonImage, alt:buttonText, title:buttonText }) : buttonText)); - input[isRTL ? 'before' : 'after'](trigger); - trigger.click(function() { - if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) - $.datepicker._hideDatepicker(); - else - $.datepicker._showDatepicker(target); - }); - } - input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress) - .bind("setData.datepicker", function(event, key, value) { - inst._settings[key] = value; - }).bind("getData.datepicker", function(event, key) { - return inst._get(key); - }); - input[0]._calId = inst._id; - }, - - /* Attach an inline date picker to a div. */ - _inlineDatepicker: function(target, inst) { - var input = $(target); - if (input.hasClass(this.markerClassName)) - return; - input.addClass(this.markerClassName).append(inst._datepickerDiv) - .bind("setData.datepicker", function(event, key, value){ - inst._settings[key] = value; - }).bind("getData.datepicker", function(event, key){ - return inst._get(key); - }); - input[0]._calId = inst._id; - this._updateDatepicker(inst); - }, - - /* Tidy up after displaying the date picker. */ - _inlineShow: function(inst) { - var numMonths = inst._getNumberOfMonths(); // fix width for dynamic number of date pickers - inst._datepickerDiv.width(numMonths[1] * $('.ui-datepicker', inst._datepickerDiv[0]).width()); - }, - - /* Pop-up the date picker in a "dialog" box. - @param input element - ignored - @param dateText string - the initial date to display (in the current format) - @param onSelect function - the function(dateText) to call when a date is selected - @param settings object - update the dialog date picker instance's settings (anonymous object) - @param pos int[2] - coordinates for the dialog's position within the screen or - event - with x/y coordinates or - leave empty for default (screen centre) - @return the manager object */ - _dialogDatepicker: function(input, dateText, onSelect, settings, pos) { - var inst = this._dialogInst; // internal instance - if (!inst) { - inst = this._dialogInst = new DatepickerInstance({}, false); - this._dialogInput = $('<input type="text" size="1" style="position: absolute; top: -100px;"/>'); - this._dialogInput.keydown(this._doKeyDown); - $('body').append(this._dialogInput); - this._dialogInput[0]._calId = inst._id; - } - extendRemove(inst._settings, settings || {}); - this._dialogInput.val(dateText); - - this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); - if (!this._pos) { - var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; - var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - this._pos = // should use actual width/height below - [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; - } - - // move input on screen for focus, but hidden behind dialog - this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px'); - inst._settings.onSelect = onSelect; - this._inDialog = true; - this._datepickerDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]); - if ($.blockUI) - $.blockUI(this._datepickerDiv); - return this; - }, - - /* Pop-up the date picker for a given input field. - @param input element - the input field attached to the date picker or - event - if triggered by focus */ - _showDatepicker: function(input) { - input = input.target || input; - if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger - input = $('input', input.parentNode)[0]; - if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here - return; - var inst = $.datepicker._getInst(input._calId); - var beforeShow = inst._get('beforeShow'); - extendRemove(inst._settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); - $.datepicker._hideDatepicker(null, ''); - $.datepicker._lastInput = input; - inst._setDateFromField(input); - if ($.datepicker._inDialog) // hide cursor - input.value = ''; - if (!$.datepicker._pos) { // position below input - $.datepicker._pos = $.datepicker._findPos(input); - $.datepicker._pos[1] += input.offsetHeight; // add the height - } - var isFixed = false; - $(input).parents().each(function() { - isFixed |= $(this).css('position') == 'fixed'; - return !isFixed; - }); - if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled - $.datepicker._pos[0] -= document.documentElement.scrollLeft; - $.datepicker._pos[1] -= document.documentElement.scrollTop; - } - var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; - $.datepicker._pos = null; - inst._rangeStart = null; - // determine sizing offscreen - inst._datepickerDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); - $.datepicker._updateDatepicker(inst); - // fix width for dynamic number of date pickers - inst._datepickerDiv.width(inst._getNumberOfMonths()[1] * - $('.ui-datepicker', inst._datepickerDiv[0])[0].offsetWidth); - // and adjust position before showing - offset = $.datepicker._checkOffset(inst, offset, isFixed); - inst._datepickerDiv.css({position: ($.datepicker._inDialog && $.blockUI ? - 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', - left: offset.left + 'px', top: offset.top + 'px'}); - if (!inst._inline) { - var showAnim = inst._get('showAnim') || 'show'; - var speed = inst._get('speed'); - var postProcess = function() { - $.datepicker._datepickerShowing = true; - if ($.browser.msie && parseInt($.browser.version) < 7) // fix IE < 7 select problems - $('iframe.ui-datepicker-cover').css({width: inst._datepickerDiv.width() + 4, - height: inst._datepickerDiv.height() + 4}); - }; - inst._datepickerDiv[showAnim](speed, postProcess); - if (speed == '') - postProcess(); - if (inst._input[0].type != 'hidden') - inst._input[0].focus(); - $.datepicker._curInst = inst; - } - }, - - /* Generate the date picker content. */ - _updateDatepicker: function(inst) { - var dims = {width: inst._datepickerDiv.width() + 4, - height: inst._datepickerDiv.height() + 4}; - inst._datepickerDiv.empty().append(inst._generateDatepicker()). - find('iframe.ui-datepicker-cover'). - css({width: dims.width, height: dims.height}); - var numMonths = inst._getNumberOfMonths(); - if (numMonths[0] != 1 || numMonths[1] != 1) - inst._datepickerDiv.addClass('ui-datepicker-multi'); - else - inst._datepickerDiv.removeClass('ui-datepicker-multi'); - - if (inst._get('isRTL')) - inst._datepickerDiv.addClass('ui-datepicker-rtl'); - else - inst._datepickerDiv.removeClass('ui-datepicker-rtl'); - - if (inst._input && inst._input[0].type != 'hidden') - $(inst._input[0]).focus(); - }, - - /* Check positioning to remain on screen. */ - _checkOffset: function(inst, offset, isFixed) { - var pos = inst._input ? $.datepicker._findPos(inst._input[0]) : null; - var browserWidth = window.innerWidth || document.documentElement.clientWidth; - var browserHeight = window.innerHeight || document.documentElement.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - // reposition date picker horizontally if outside the browser window - if ((offset.left + inst._datepickerDiv.width() - scrollX) > browserWidth) - offset.left = Math.max((isFixed ? 0 : scrollX), - pos[0] + (inst._input ? inst._input.width() : 0) - (isFixed ? scrollX : 0) - inst._datepickerDiv.width() - - (isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0)); - else - offset.left -= (isFixed ? scrollX : 0); - // reposition date picker vertically if outside the browser window - if ((offset.top + inst._datepickerDiv.height() - scrollY) > browserHeight) - offset.top = Math.max((isFixed ? 0 : scrollY), - pos[1] - (isFixed ? scrollY : 0) - (this._inDialog ? 0 : inst._datepickerDiv.height()) - - (isFixed && $.browser.opera ? document.documentElement.scrollTop : 0)); - else - offset.top -= (isFixed ? scrollY : 0); - return offset; - }, - - /* Find an object's position on the screen. */ - _findPos: function(obj) { - while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { - obj = obj.nextSibling; - } - var position = $(obj).offset(); - return [position.left, position.top]; - }, - - /* Hide the date picker from view. - @param input element - the input field attached to the date picker - @param speed string - the speed at which to close the date picker */ - _hideDatepicker: function(input, speed) { - var inst = this._curInst; - if (!inst) - return; - var rangeSelect = inst._get('rangeSelect'); - if (rangeSelect && this._stayOpen) - this._selectDate(inst, inst._formatDate( - inst._currentDay, inst._currentMonth, inst._currentYear)); - this._stayOpen = false; - if (this._datepickerShowing) { - speed = (speed != null ? speed : inst._get('speed')); - var showAnim = inst._get('showAnim'); - inst._datepickerDiv[(showAnim == 'slideDown' ? 'slideUp' : - (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))](speed, function() { - $.datepicker._tidyDialog(inst); - }); - if (speed == '') - this._tidyDialog(inst); - var onClose = inst._get('onClose'); - if (onClose) - onClose.apply((inst._input ? inst._input[0] : null), - [inst._getDate(), inst]); // trigger custom callback - this._datepickerShowing = false; - this._lastInput = null; - inst._settings.prompt = null; - if (this._inDialog) { - this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); - if ($.blockUI) { - $.unblockUI(); - $('body').append(this._datepickerDiv); - } - } - this._inDialog = false; - } - this._curInst = null; - }, - - /* Tidy up after a dialog display. */ - _tidyDialog: function(inst) { - inst._datepickerDiv.removeClass(this._dialogClass).unbind('.ui-datepicker'); - $('.' + this._promptClass, inst._datepickerDiv).remove(); - }, - - /* Close date picker if clicked elsewhere. */ - _checkExternalClick: function(event) { - if (!$.datepicker._curInst) - return; - var $target = $(event.target); - if (($target.parents('#' + $.datepicker._mainDivId).length == 0) && - !$target.hasClass($.datepicker.markerClassName) && - !$target.hasClass($.datepicker._triggerClass) && - $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) - $.datepicker._hideDatepicker(null, ''); - }, - - /* Adjust one of the date sub-fields. */ - _adjustDate: function(id, offset, period) { - var inst = this._getInst(id); - inst._adjustDate(offset, period); - this._updateDatepicker(inst); - }, - - /* Action for current link. */ - _gotoToday: function(id) { - var date = new Date(); - var inst = this._getInst(id); - inst._selectedDay = date.getDate(); - inst._drawMonth = inst._selectedMonth = date.getMonth(); - inst._drawYear = inst._selectedYear = date.getFullYear(); - this._adjustDate(inst); - inst._notifyChange(); - }, - - /* Action for selecting a new month/year. */ - _selectMonthYear: function(id, select, period) { - var inst = this._getInst(id); - inst._selectingMonthYear = false; - inst[period == 'M' ? '_drawMonth' : '_drawYear'] = - select.options[select.selectedIndex].value - 0; - this._adjustDate(inst); - inst._notifyChange(); - }, - - /* Restore input focus after not changing month/year. */ - _clickMonthYear: function(id) { - var inst = this._getInst(id); - if (inst._input && inst._selectingMonthYear && !$.browser.msie) - inst._input[0].focus(); - inst._selectingMonthYear = !inst._selectingMonthYear; - }, - - /* Action for changing the first week day. */ - _changeFirstDay: function(id, day) { - var inst = this._getInst(id); - inst._settings.firstDay = day; - this._updateDatepicker(inst); - }, - - /* Action for selecting a day. */ - _selectDay: function(id, month, year, td) { - if ($(td).hasClass(this._unselectableClass)) - return; - var inst = this._getInst(id); - var rangeSelect = inst._get('rangeSelect'); - if (rangeSelect) { - this._stayOpen = !this._stayOpen; - if (this._stayOpen) { - $('.ui-datepicker td').removeClass(this._currentClass); - $(td).addClass(this._currentClass); - } - } - inst._selectedDay = inst._currentDay = $('a', td).html(); - inst._selectedMonth = inst._currentMonth = month; - inst._selectedYear = inst._currentYear = year; - if (this._stayOpen) { - inst._endDay = inst._endMonth = inst._endYear = null; - } - else if (rangeSelect) { - inst._endDay = inst._currentDay; - inst._endMonth = inst._currentMonth; - inst._endYear = inst._currentYear; - } - this._selectDate(id, inst._formatDate( - inst._currentDay, inst._currentMonth, inst._currentYear)); - if (this._stayOpen) { - inst._rangeStart = new Date(inst._currentYear, inst._currentMonth, inst._currentDay); - this._updateDatepicker(inst); - } - else if (rangeSelect) { - inst._selectedDay = inst._currentDay = inst._rangeStart.getDate(); - inst._selectedMonth = inst._currentMonth = inst._rangeStart.getMonth(); - inst._selectedYear = inst._currentYear = inst._rangeStart.getFullYear(); - inst._rangeStart = null; - if (inst._inline) - this._updateDatepicker(inst); - } - }, - - /* Erase the input field and hide the date picker. */ - _clearDate: function(id) { - var inst = this._getInst(id); - if (inst._get('mandatory')) - return; - this._stayOpen = false; - inst._endDay = inst._endMonth = inst._endYear = inst._rangeStart = null; - this._selectDate(inst, ''); - }, - - /* Update the input field with the selected date. */ - _selectDate: function(id, dateStr) { - var inst = this._getInst(id); - dateStr = (dateStr != null ? dateStr : inst._formatDate()); - if (inst._get('rangeSelect') && dateStr) - dateStr = (inst._rangeStart ? inst._formatDate(inst._rangeStart) : - dateStr) + inst._get('rangeSeparator') + dateStr; - if (inst._input) - inst._input.val(dateStr); - this._updateAlternate(inst); - var onSelect = inst._get('onSelect'); - if (onSelect) - onSelect.apply((inst._input ? inst._input[0] : null), [dateStr, inst]); // trigger custom callback - else if (inst._input) - inst._input.trigger('change'); // fire the change event - if (inst._inline) - this._updateDatepicker(inst); - else if (!this._stayOpen) { - this._hideDatepicker(null, inst._get('speed')); - this._lastInput = inst._input[0]; - if (typeof(inst._input[0]) != 'object') - inst._input[0].focus(); // restore focus - this._lastInput = null; - } - }, - - /* Update any alternate field to synchronise with the main field. */ - _updateAlternate: function(inst) { - var altField = inst._get('altField'); - if (altField) { // update alternate field too - var altFormat = inst._get('altFormat'); - var date = inst._getDate(); - dateStr = (isArray(date) ? (!date[0] && !date[1] ? '' : - $.datepicker.formatDate(altFormat, date[0], inst._getFormatConfig()) + - inst._get('rangeSeparator') + $.datepicker.formatDate( - altFormat, date[1] || date[0], inst._getFormatConfig())) : - $.datepicker.formatDate(altFormat, date, inst._getFormatConfig())); - $(altField).each(function() { $(this).val(dateStr); }); - } - }, - - /* Set as beforeShowDay function to prevent selection of weekends. - @param date Date - the date to customise - @return [boolean, string] - is this date selectable?, what is its CSS class? */ - noWeekends: function(date) { - var day = date.getDay(); - return [(day > 0 && day < 6), '']; - }, - - /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. - @param date Date - the date to get the week for - @return number - the number of the week within the year that contains this date */ - iso8601Week: function(date) { - var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), (date.getTimezoneOffset() / -60)); - var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan - var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7 - firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday - if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary - checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year - return $.datepicker.iso8601Week(checkDate); - } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year - firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7; - if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary - checkDate.setDate(checkDate.getDate() + 3); // Generate for next year - return $.datepicker.iso8601Week(checkDate); - } - } - return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date - }, - - /* Provide status text for a particular date. - @param date the date to get the status for - @param inst the current datepicker instance - @return the status display text for this date */ - dateStatus: function(date, inst) { - return $.datepicker.formatDate(inst._get('dateStatus'), date, inst._getFormatConfig()); - }, - - /* Parse a string value into a date object. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - '...' - literal text - '' - single quote - - @param format String - the expected format of the date - @param value String - the date in the above format - @param settings Object - attributes include: - shortYearCutoff Number - the cutoff year for determining the century (optional) - dayNamesShort String[7] - abbreviated names of the days from Sunday (optional) - dayNames String[7] - names of the days from Sunday (optional) - monthNamesShort String[12] - abbreviated names of the months (optional) - monthNames String[12] - names of the months (optional) - @return Date - the extracted date value or null if value is blank */ - parseDate: function (format, value, settings) { - if (format == null || value == null) - throw 'Invalid arguments'; - value = (typeof value == 'object' ? value.toString() : value + ''); - if (value == '') - return null; - var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - var year = -1; - var month = -1; - var day = -1; - var literal = false; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Extract a number from the string value - var getNumber = function(match) { - lookAhead(match); - var size = (match == 'y' ? 4 : 2); - var num = 0; - while (size > 0 && iValue < value.length && - value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') { - num = num * 10 + (value.charAt(iValue++) - 0); - size--; - } - if (size == (match == 'y' ? 4 : 2)) - throw 'Missing number at position ' + iValue; - return num; - }; - // Extract a name from the string value and convert to an index - var getName = function(match, shortNames, longNames) { - var names = (lookAhead(match) ? longNames : shortNames); - var size = 0; - for (var j = 0; j < names.length; j++) - size = Math.max(size, names[j].length); - var name = ''; - var iInit = iValue; - while (size > 0 && iValue < value.length) { - name += value.charAt(iValue++); - for (var i = 0; i < names.length; i++) - if (name == names[i]) - return i + 1; - size--; - } - throw 'Unknown name at position ' + iInit; - }; - // Confirm that a literal character matches the string value - var checkLiteral = function() { - if (value.charAt(iValue) != format.charAt(iFormat)) - throw 'Unexpected literal at position ' + iValue; - iValue++; - }; - var iValue = 0; - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - checkLiteral(); - else - switch (format.charAt(iFormat)) { - case 'd': - day = getNumber('d'); - break; - case 'D': - getName('D', dayNamesShort, dayNames); - break; - case 'm': - month = getNumber('m'); - break; - case 'M': - month = getName('M', monthNamesShort, monthNames); - break; - case 'y': - year = getNumber('y'); - break; - case "'": - if (lookAhead("'")) - checkLiteral(); - else - literal = true; - break; - default: - checkLiteral(); - } - } - if (year < 100) - year += new Date().getFullYear() - new Date().getFullYear() % 100 + - (year <= shortYearCutoff ? 0 : -100); - var date = new Date(year, month - 1, day); - if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) - throw 'Invalid date'; // E.g. 31/02/* - return date; - }, - - /* Format a date object into a string value. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - '...' - literal text - '' - single quote - - @param format String - the desired format of the date - @param date Date - the date value to format - @param settings Object - attributes include: - dayNamesShort String[7] - abbreviated names of the days from Sunday (optional) - dayNames String[7] - names of the days from Sunday (optional) - monthNamesShort String[12] - abbreviated names of the months (optional) - monthNames String[12] - names of the months (optional) - @return String - the date in the above format */ - formatDate: function (format, date, settings) { - if (!date) - return ''; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Format a number, with leading zero if necessary - var formatNumber = function(match, value) { - return (lookAhead(match) && value < 10 ? '0' : '') + value; - }; - // Format a name, short or long as requested - var formatName = function(match, value, shortNames, longNames) { - return (lookAhead(match) ? longNames[value] : shortNames[value]); - }; - var output = ''; - var literal = false; - if (date) - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - output += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': - output += formatNumber('d', date.getDate()); - break; - case 'D': - output += formatName('D', date.getDay(), dayNamesShort, dayNames); - break; - case 'm': - output += formatNumber('m', date.getMonth() + 1); - break; - case 'M': - output += formatName('M', date.getMonth(), monthNamesShort, monthNames); - break; - case 'y': - output += (lookAhead('y') ? date.getFullYear() : - (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); - break; - case "'": - if (lookAhead("'")) - output += "'"; - else - literal = true; - break; - default: - output += format.charAt(iFormat); - } - } - return output; - }, - - /* Extract all possible characters from the date format. */ - _possibleChars: function (format) { - var chars = ''; - var literal = false; - for (var iFormat = 0; iFormat < format.length; iFormat++) - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - chars += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': case 'm': case 'y': - chars += '0123456789'; - break; - case 'D': case 'M': - return null; // Accept anything - case "'": - if (lookAhead("'")) - chars += "'"; - else - literal = true; - break; - default: - chars += format.charAt(iFormat); - } - return chars; - } -}); - -/* Individualised settings for date picker functionality applied to one or more related inputs. - Instances are managed and manipulated through the Datepicker manager. */ -function DatepickerInstance(settings, inline) { - this._id = $.datepicker._register(this); - this._selectedDay = 0; // Current date for selection - this._selectedMonth = 0; // 0-11 - this._selectedYear = 0; // 4-digit year - this._drawMonth = 0; // Current month at start of datepicker - this._drawYear = 0; - this._input = null; // The attached input field - this._inline = inline; // True if showing inline, false if used in a popup - this._datepickerDiv = (!inline ? $.datepicker._datepickerDiv : - $('<div id="' + $.datepicker._mainDivId + '-' + this._id + '" class="ui-datepicker-inline">')); - // customise the date picker object - uses manager defaults if not overridden - this._settings = extendRemove(settings || {}); // clone - if (inline) - this._setDate(this._getDefaultDate()); -} - -$.extend(DatepickerInstance.prototype, { - /* Get a setting value, defaulting if necessary. */ - _get: function(name) { - return this._settings[name] !== undefined ? this._settings[name] : $.datepicker._defaults[name]; - }, - - /* Parse existing date and initialise date picker. */ - _setDateFromField: function(input) { - this._input = $(input); - var dateFormat = this._get('dateFormat'); - var dates = this._input ? this._input.val().split(this._get('rangeSeparator')) : null; - this._endDay = this._endMonth = this._endYear = null; - var date = defaultDate = this._getDefaultDate(); - if (dates.length > 0) { - var settings = this._getFormatConfig(); - if (dates.length > 1) { - date = $.datepicker.parseDate(dateFormat, dates[1], settings) || defaultDate; - this._endDay = date.getDate(); - this._endMonth = date.getMonth(); - this._endYear = date.getFullYear(); - } - try { - date = $.datepicker.parseDate(dateFormat, dates[0], settings) || defaultDate; - } catch (e) { - $.datepicker.log(e); - date = defaultDate; - } - } - this._selectedDay = date.getDate(); - this._drawMonth = this._selectedMonth = date.getMonth(); - this._drawYear = this._selectedYear = date.getFullYear(); - this._currentDay = (dates[0] ? date.getDate() : 0); - this._currentMonth = (dates[0] ? date.getMonth() : 0); - this._currentYear = (dates[0] ? date.getFullYear() : 0); - this._adjustDate(); - }, - - /* Retrieve the default date shown on opening. */ - _getDefaultDate: function() { - var date = this._determineDate('defaultDate', new Date()); - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - date = (minDate && date < minDate ? minDate : date); - date = (maxDate && date > maxDate ? maxDate : date); - return date; - }, - - /* A date may be specified as an exact value or a relative one. */ - _determineDate: function(name, defaultDate) { - var offsetNumeric = function(offset) { - var date = new Date(); - date.setDate(date.getDate() + offset); - return date; - }; - var offsetString = function(offset, getDaysInMonth) { - var date = new Date(); - var year = date.getFullYear(); - var month = date.getMonth(); - var day = date.getDate(); - var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; - var matches = pattern.exec(offset); - while (matches) { - switch (matches[2] || 'd') { - case 'd' : case 'D' : - day += (matches[1] - 0); break; - case 'w' : case 'W' : - day += (matches[1] * 7); break; - case 'm' : case 'M' : - month += (matches[1] - 0); - day = Math.min(day, getDaysInMonth(year, month)); - break; - case 'y': case 'Y' : - year += (matches[1] - 0); - day = Math.min(day, getDaysInMonth(year, month)); - break; - } - matches = pattern.exec(offset); - } - return new Date(year, month, day); - }; - var date = this._get(name); - return (date == null ? defaultDate : - (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : - (typeof date == 'number' ? offsetNumeric(date) : date))); - }, - - /* Set the date(s) directly. */ - _setDate: function(date, endDate) { - this._selectedDay = this._currentDay = date.getDate(); - this._drawMonth = this._selectedMonth = this._currentMonth = date.getMonth(); - this._drawYear = this._selectedYear = this._currentYear = date.getFullYear(); - if (this._get('rangeSelect')) { - if (endDate) { - this._endDay = endDate.getDate(); - this._endMonth = endDate.getMonth(); - this._endYear = endDate.getFullYear(); - } else { - this._endDay = this._currentDay; - this._endMonth = this._currentMonth; - this._endYear = this._currentYear; - } - } - this._adjustDate(); - }, - - /* Retrieve the date(s) directly. */ - _getDate: function() { - var startDate = (!this._currentYear || (this._input && this._input.val() == '') ? null : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - if (this._get('rangeSelect')) { - return [this._rangeStart || startDate, (!this._endYear ? null : - new Date(this._endYear, this._endMonth, this._endDay))]; - } else - return startDate; - }, - - /* Generate the HTML for the current state of the date picker. */ - _generateDatepicker: function() { - var today = new Date(); - today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time - var showStatus = this._get('showStatus'); - var isRTL = this._get('isRTL'); - // build the date picker HTML - var clear = (this._get('mandatory') ? '' : - '<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('clearStatus') || ' ') : '') + '>' + - this._get('clearText') + '</a></div>'); - var controls = '<div class="ui-datepicker-control">' + (isRTL ? '' : clear) + - '<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"' + - (showStatus ? this._addStatus(this._get('closeStatus') || ' ') : '') + '>' + - this._get('closeText') + '</a></div>' + (isRTL ? clear : '') + '</div>'; - var prompt = this._get('prompt'); - var closeAtTop = this._get('closeAtTop'); - var hideIfNoPrevNext = this._get('hideIfNoPrevNext'); - var navigationAsDateFormat = this._get('navigationAsDateFormat'); - var numMonths = this._getNumberOfMonths(); - var stepMonths = this._get('stepMonths'); - var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - var drawMonth = this._drawMonth; - var drawYear = this._drawYear; - if (maxDate) { - var maxDraw = new Date(maxDate.getFullYear(), - maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()); - maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); - while (new Date(drawYear, drawMonth, 1) > maxDraw) { - drawMonth--; - if (drawMonth < 0) { - drawMonth = 11; - drawYear--; - } - } - } - // controls and links - var prevText = this._get('prevText'); - prevText = (!navigationAsDateFormat ? prevText : $.datepicker.formatDate( - prevText, new Date(drawYear, drawMonth - stepMonths, 1), this._getFormatConfig())); - var prev = '<div class="ui-datepicker-prev">' + (this._canAdjustMonth(-1, drawYear, drawMonth) ? - '<a onclick="jQuery.datepicker._adjustDate(' + this._id + ', -' + stepMonths + ', \'M\');"' + - (showStatus ? this._addStatus(this._get('prevStatus') || ' ') : '') + '>' + prevText + '</a>' : - (hideIfNoPrevNext ? '' : '<label>' + prevText + '</label>')) + '</div>'; - var nextText = this._get('nextText'); - nextText = (!navigationAsDateFormat ? nextText : $.datepicker.formatDate( - nextText, new Date(drawYear, drawMonth + stepMonths, 1), this._getFormatConfig())); - var next = '<div class="ui-datepicker-next">' + (this._canAdjustMonth(+1, drawYear, drawMonth) ? - '<a onclick="jQuery.datepicker._adjustDate(' + this._id + ', +' + stepMonths + ', \'M\');"' + - (showStatus ? this._addStatus(this._get('nextStatus') || ' ') : '') + '>' + nextText + '</a>' : - (hideIfNoPrevNext ? '' : '<label>' + nextText + '</label>')) + '</div>'; - var currentText = this._get('currentText'); - currentText = (!navigationAsDateFormat ? currentText: $.datepicker.formatDate( - currentText, today, this._getFormatConfig())); - var html = (prompt ? '<div class="' + $.datepicker._promptClass + '">' + prompt + '</div>' : '') + - (closeAtTop && !this._inline ? controls : '') + - '<div class="ui-datepicker-links">' + (isRTL ? next : prev) + - (this._isInRange(today) ? '<div class="ui-datepicker-current">' + - '<a onclick="jQuery.datepicker._gotoToday(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('currentStatus') || ' ') : '') + '>' + - currentText + '</a></div>' : '') + (isRTL ? prev : next) + '</div>'; - var showWeeks = this._get('showWeeks'); - for (var row = 0; row < numMonths[0]; row++) - for (var col = 0; col < numMonths[1]; col++) { - var selectedDate = new Date(drawYear, drawMonth, this._selectedDay); - html += '<div class="ui-datepicker-one-month' + (col == 0 ? ' ui-datepicker-new-row' : '') + '">' + - this._generateMonthYearHeader(drawMonth, drawYear, minDate, maxDate, - selectedDate, row > 0 || col > 0) + // draw month headers - '<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead>' + - '<tr class="ui-datepicker-title-row">' + - (showWeeks ? '<td>' + this._get('weekHeader') + '</td>' : ''); - var firstDay = this._get('firstDay'); - var changeFirstDay = this._get('changeFirstDay'); - var dayNames = this._get('dayNames'); - var dayNamesShort = this._get('dayNamesShort'); - var dayNamesMin = this._get('dayNamesMin'); - for (var dow = 0; dow < 7; dow++) { // days of the week - var day = (dow + firstDay) % 7; - var status = this._get('dayStatus') || ' '; - status = (status.indexOf('DD') > -1 ? status.replace(/DD/, dayNames[day]) : - status.replace(/D/, dayNamesShort[day])); - html += '<td' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end-cell"' : '') + '>' + - (!changeFirstDay ? '<span' : - '<a onclick="jQuery.datepicker._changeFirstDay(' + this._id + ', ' + day + ');"') + - (showStatus ? this._addStatus(status) : '') + ' title="' + dayNames[day] + '">' + - dayNamesMin[day] + (changeFirstDay ? '</a>' : '</span>') + '</td>'; - } - html += '</tr></thead><tbody>'; - var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); - if (drawYear == this._selectedYear && drawMonth == this._selectedMonth) - this._selectedDay = Math.min(this._selectedDay, daysInMonth); - var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; - var currentDate = (!this._currentDay ? new Date(9999, 9, 9) : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - var endDate = this._endDay ? new Date(this._endYear, this._endMonth, this._endDay) : currentDate; - var printDate = new Date(drawYear, drawMonth, 1 - leadDays); - var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate - var beforeShowDay = this._get('beforeShowDay'); - var highlightWeek = this._get('highlightWeek'); - var showOtherMonths = this._get('showOtherMonths'); - var calculateWeek = this._get('calculateWeek') || $.datepicker.iso8601Week; - var dateStatus = this._get('statusForDate') || $.datepicker.dateStatus; - for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows - html += '<tr class="ui-datepicker-days-row">' + - (showWeeks ? '<td class="ui-datepicker-week-col">' + calculateWeek(printDate) + '</td>' : ''); - for (var dow = 0; dow < 7; dow++) { // create date picker days - var daySettings = (beforeShowDay ? - beforeShowDay.apply((this._input ? this._input[0] : null), [printDate]) : [true, '']); - var otherMonth = (printDate.getMonth() != drawMonth); - var unselectable = otherMonth || !daySettings[0] || - (minDate && printDate < minDate) || (maxDate && printDate > maxDate); - html += '<td class="ui-datepicker-days-cell' + - ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end-cell' : '') + // highlight weekends - (otherMonth ? ' ui-datepicker-otherMonth' : '') + // highlight days from other months - (printDate.getTime() == selectedDate.getTime() && drawMonth == this._selectedMonth ? - ' ui-datepicker-days-cell-over' : '') + // highlight selected day - (unselectable ? ' ' + $.datepicker._unselectableClass : '') + // highlight unselectable days - (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates - (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range - ' ' + $.datepicker._currentClass : '') + // highlight selected day - (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different) - ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title - (unselectable ? (highlightWeek ? ' onmouseover="jQuery(this).parent().addClass(\'ui-datepicker-week-over\');"' + // highlight selection week - ' onmouseout="jQuery(this).parent().removeClass(\'ui-datepicker-week-over\');"' : '') : // unhighlight selection week - ' onmouseover="jQuery(this).addClass(\'ui-datepicker-days-cell-over\')' + // highlight selection - (highlightWeek ? '.parent().addClass(\'ui-datepicker-week-over\')' : '') + ';' + // highlight selection week - (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + - this._id + '\').html(\'' + (dateStatus.apply((this._input ? this._input[0] : null), - [printDate, this]) || ' ') +'\');') + '"' + - ' onmouseout="jQuery(this).removeClass(\'ui-datepicker-days-cell-over\')' + // unhighlight selection - (highlightWeek ? '.parent().removeClass(\'ui-datepicker-week-over\')' : '') + ';' + // unhighlight selection week - (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + - this._id + '\').html(\' \');') + '" onclick="jQuery.datepicker._selectDay(' + - this._id + ',' + drawMonth + ',' + drawYear + ', this);"') + '>' + // actions - (otherMonth ? (showOtherMonths ? printDate.getDate() : ' ') : // display for other months - (unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month - printDate.setDate(printDate.getDate() + 1); - } - html += '</tr>'; - } - drawMonth++; - if (drawMonth > 11) { - drawMonth = 0; - drawYear++; - } - html += '</tbody></table></div>'; - } - html += (showStatus ? '<div style="clear: both;"></div><div id="ui-datepicker-status-' + this._id + - '" class="ui-datepicker-status">' + (this._get('initStatus') || ' ') + '</div>' : '') + - (!closeAtTop && !this._inline ? controls : '') + - '<div style="clear: both;"></div>' + - ($.browser.msie && parseInt($.browser.version) < 7 && !this._inline ? - '<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>' : ''); - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(drawMonth, drawYear, minDate, maxDate, selectedDate, secondary) { - minDate = (this._rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate); - var showStatus = this._get('showStatus'); - var html = '<div class="ui-datepicker-header">'; - // month selection - var monthNames = this._get('monthNames'); - if (secondary || !this._get('changeMonth')) - html += monthNames[drawMonth] + ' '; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - html += '<select class="ui-datepicker-new-month" ' + - 'onchange="jQuery.datepicker._selectMonthYear(' + this._id + ', this, \'M\');" ' + - 'onclick="jQuery.datepicker._clickMonthYear(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('monthStatus') || ' ') : '') + '>'; - for (var month = 0; month < 12; month++) { - if ((!inMinYear || month >= minDate.getMonth()) && - (!inMaxYear || month <= maxDate.getMonth())) - html += '<option value="' + month + '"' + - (month == drawMonth ? ' selected="selected"' : '') + - '>' + monthNames[month] + '</option>'; - } - html += '</select>'; - } - // year selection - if (secondary || !this._get('changeYear')) - html += drawYear; - else { - // determine range of years to display - var years = this._get('yearRange').split(':'); - var year = 0; - var endYear = 0; - if (years.length != 2) { - year = drawYear - 10; - endYear = drawYear + 10; - } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') { - year = endYear = new Date().getFullYear(); - year += parseInt(years[0], 10); - endYear += parseInt(years[1], 10); - } else { - year = parseInt(years[0], 10); - endYear = parseInt(years[1], 10); - } - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - html += '<select class="ui-datepicker-new-year" ' + - 'onchange="jQuery.datepicker._selectMonthYear(' + this._id + ', this, \'Y\');" ' + - 'onclick="jQuery.datepicker._clickMonthYear(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('yearStatus') || ' ') : '') + '>'; - for (; year <= endYear; year++) { - html += '<option value="' + year + '"' + - (year == drawYear ? ' selected="selected"' : '') + - '>' + year + '</option>'; - } - html += '</select>'; - } - html += '</div>'; // Close datepicker_header - return html; - }, - - /* Provide code to set and clear the status panel. */ - _addStatus: function(text) { - return ' onmouseover="jQuery(\'#ui-datepicker-status-' + this._id + '\').html(\'' + text + '\');" ' + - 'onmouseout="jQuery(\'#ui-datepicker-status-' + this._id + '\').html(\' \');"'; - }, - - /* Adjust one of the date sub-fields. */ - _adjustDate: function(offset, period) { - var year = this._drawYear + (period == 'Y' ? offset : 0); - var month = this._drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(this._selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = new Date(year, month, day); - // ensure it is within the bounds set - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - date = (minDate && date < minDate ? minDate : date); - date = (maxDate && date > maxDate ? maxDate : date); - this._selectedDay = date.getDate(); - this._drawMonth = this._selectedMonth = date.getMonth(); - this._drawYear = this._selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(); - }, - - /* Notify change of month/year. */ - _notifyChange: function() { - var onChange = this._get('onChangeMonthYear'); - if (onChange) - onChange.apply((this._input ? this._input[0] : null), - [new Date(this._selectedYear, this._selectedMonth, 1), this]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function() { - var numMonths = this._get('numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */ - _getMinMaxDate: function(minMax, checkRange) { - var date = this._determineDate(minMax + 'Date', null); - if (date) { - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - } - return (!checkRange || !this._rangeStart ? date : - (!date || this._rangeStart > date ? this._rangeStart : date)); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(); - var date = new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(date) { - // during range selection, use minimum of selected date and range start - var newMinDate = (!this._rangeStart ? null : - new Date(this._selectedYear, this._selectedMonth, this._selectedDay)); - newMinDate = (newMinDate && this._rangeStart < newMinDate ? this._rangeStart : newMinDate); - var minDate = newMinDate || this._getMinMaxDate('min'); - var maxDate = this._getMinMaxDate('max'); - return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate)); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function() { - var shortYearCutoff = this._get('shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get('dayNamesShort'), dayNames: this._get('dayNames'), - monthNamesShort: this._get('monthNamesShort'), monthNames: this._get('monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(day, month, year) { - if (!day) { - this._currentDay = this._selectedDay; - this._currentMonth = this._selectedMonth; - this._currentYear = this._selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : new Date(year, month, day)) : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - return $.datepicker.formatDate(this._get('dateFormat'), date, this._getFormatConfig()); - } -}); - -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; - -/* Invoke the datepicker functionality. - @param options String - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) - return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance - -/* Initialise the date picker. */ -$(document).ready(function() { - $(document.body).append($.datepicker._datepickerDiv). - mousedown($.datepicker._checkExternalClick); -}); - -})(jQuery); -/* - * jQuery UI Dialog - * - * Copyright (c) 2008 Richard D. Worth (rdworth.org) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * ui.core.js - * ui.draggable.js - * ui.resizable.js - */ -(function($) { - -var setDataSwitch = { - dragStart: "start.draggable", - drag: "drag.draggable", - dragStop: "stop.draggable", - maxHeight: "maxHeight.resizable", - minHeight: "minHeight.resizable", - maxWidth: "maxWidth.resizable", - minWidth: "minWidth.resizable", - resizeStart: "start.resizable", - resize: "drag.resizable", - resizeStop: "stop.resizable" -}; - -$.widget("ui.dialog", { - init: function() { - var self = this, - options = this.options, - resizeHandles = typeof options.resizable == 'string' - ? options.resizable - : 'n,e,s,w,se,sw,ne,nw', - - uiDialogContent = this.element - .addClass('ui-dialog-content') - .wrap('<div/>') - .wrap('<div/>'), - - uiDialogContainer = (this.uiDialogContainer = uiDialogContent.parent() - .addClass('ui-dialog-container') - .css({position: 'relative', width: '100%', height: '100%'})), - - title = options.title || uiDialogContent.attr('title') || '', - uiDialogTitlebar = (this.uiDialogTitlebar = - $('<div class="ui-dialog-titlebar"/>')) - .append('<span class="ui-dialog-title">' + title + '</span>') - .append('<a href="#" class="ui-dialog-titlebar-close"><span>X</span></a>') - .prependTo(uiDialogContainer), - - uiDialog = (this.uiDialog = uiDialogContainer.parent()) - .appendTo(document.body) - .hide() - .addClass('ui-dialog') - .addClass(options.dialogClass) - // add content classes to dialog - // to inherit theme at top level of element - .addClass(uiDialogContent.attr('className')) - .removeClass('ui-dialog-content') - .css({ - position: 'absolute', - width: options.width, - height: options.height, - overflow: 'hidden', - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - // setting outline to 0 prevents a border on focus in Mozilla - .attr('tabIndex', -1).css('outline', 0).keydown(function(ev) { - if (options.closeOnEscape) { - var ESC = 27; - (ev.keyCode && ev.keyCode == ESC && self.close()); - } - }) - .mousedown(function() { - self.moveToTop(); - }), - - uiDialogButtonPane = (this.uiDialogButtonPane = $('<div/>')) - .addClass('ui-dialog-buttonpane') - .appendTo(uiDialog); - - this.uiDialogTitlebarClose = $('.ui-dialog-titlebar-close', uiDialogTitlebar) - .hover( - function() { - $(this).addClass('ui-dialog-titlebar-close-hover'); - }, - function() { - $(this).removeClass('ui-dialog-titlebar-close-hover'); - } - ) - .mousedown(function(ev) { - ev.stopPropagation(); - }) - .click(function() { - self.close(); - return false; - }); - - if ($.fn.draggable) { - uiDialog.draggable({ - helper: options.dragHelper, - handle: '.ui-dialog-titlebar', - start: function(e, ui) { - self.moveToTop(); - (options.dragStart && options.dragStart.apply(self.element[0], arguments)); - }, - drag: function(e, ui) { - (options.drag && options.drag.apply(self.element[0], arguments)); - }, - stop: function(e, ui) { - (options.dragStop && options.dragStop.apply(self.element[0], arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.draggable || uiDialog.draggable('disable')); - } - - if ($.fn.resizable) { - uiDialog.resizable({ - proxy: options.resizeHelper, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: options.minHeight, - start: function() { - (options.resizeStart && options.resizeStart.apply(self.element[0], arguments)); - }, - resize: function(e, ui) { - (options.autoResize && self.size.apply(self)); - (options.resize && options.resize.apply(self.element[0], arguments)); - }, - handles: resizeHandles, - stop: function(e, ui) { - (options.autoResize && self.size.apply(self)); - (options.resizeStop && options.resizeStop.apply(self.element[0], arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.resizable || uiDialog.resizable('disable')); - } - - this.createButtons(options.buttons); - this.isOpen = false; - - (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); - (options.autoOpen && this.open()); - }, - - setData: function(key, value){ - (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); - switch (key) { - case "buttons": - this.createButtons(value); - break; - case "draggable": - this.uiDialog.draggable(value ? 'enable' : 'disable'); - break; - case "height": - this.uiDialog.height(value); - break; - case "position": - this.position(value); - break; - case "resizable": - (typeof value == 'string' && this.uiDialog.data('handles.resizable', value)); - this.uiDialog.resizable(value ? 'enable' : 'disable'); - break; - case "title": - $(".ui-dialog-title", this.uiDialogTitlebar).text(value); - break; - case "width": - this.uiDialog.width(value); - break; - } - - $.widget.prototype.setData.apply(this, arguments); - }, - - position: function(pos) { - var wnd = $(window), doc = $(document), - pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), - minTop = pTop; - - if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { - pos = [ - pos == 'right' || pos == 'left' ? pos : 'center', - pos == 'top' || pos == 'bottom' ? pos : 'middle' - ]; - } - if (pos.constructor != Array) { - pos = ['center', 'middle']; - } - if (pos[0].constructor == Number) { - pLeft += pos[0]; - } else { - switch (pos[0]) { - case 'left': - pLeft += 0; - break; - case 'right': - pLeft += wnd.width() - this.uiDialog.width(); - break; - default: - case 'center': - pLeft += (wnd.width() - this.uiDialog.width()) / 2; - } - } - if (pos[1].constructor == Number) { - pTop += pos[1]; - } else { - switch (pos[1]) { - case 'top': - pTop += 0; - break; - case 'bottom': - pTop += wnd.height() - this.uiDialog.height(); - break; - default: - case 'middle': - pTop += (wnd.height() - this.uiDialog.height()) / 2; - } - } - - // prevent the dialog from being too high (make sure the titlebar - // is accessible) - pTop = Math.max(pTop, minTop); - this.uiDialog.css({top: pTop, left: pLeft}); - }, - - size: function() { - var container = this.uiDialogContainer, - titlebar = this.uiDialogTitlebar, - content = this.element, - tbMargin = parseInt(content.css('margin-top')) + parseInt(content.css('margin-bottom')), - lrMargin = parseInt(content.css('margin-left')) + parseInt(content.css('margin-right')); - content.height(container.height() - titlebar.outerHeight() - tbMargin); - content.width(container.width() - lrMargin); - }, - - open: function() { - if (this.isOpen) { return; } - - this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null; - this.uiDialog.appendTo('body'); - this.position(this.options.position); - this.uiDialog.show(this.options.show); - this.options.autoResize && this.size(); - this.moveToTop(true); - - // CALLBACK: open - var openEV = null; - var openUI = { - options: this.options - }; - this.uiDialogTitlebarClose.focus(); - this.element.triggerHandler("dialogopen", [openEV, openUI], this.options.open); - - this.isOpen = true; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - moveToTop: function(force) { - if ((this.options.modal && !force) - || (!this.options.stack && !this.options.modal)) { return; } - - var maxZ = this.options.zIndex, options = this.options; - $('.ui-dialog:visible').each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); - }); - (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); - this.uiDialog.css('z-index', ++maxZ); - }, - - close: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(this.options.hide); - - // CALLBACK: close - var closeEV = null; - var closeUI = { - options: this.options - }; - this.element.triggerHandler("dialogclose", [closeEV, closeUI], this.options.close); - $.ui.dialog.overlay.resize(); - - this.isOpen = false; - }, - - destroy: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(); - this.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content') - .hide().appendTo('body'); - this.uiDialog.remove(); - }, - - createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = this.uiDialogButtonPane; - - // remove any existing buttons - uiDialogButtonPane.empty().hide(); - - $.each(buttons, function() { return !(hasButtons = true); }); - if (hasButtons) { - uiDialogButtonPane.show(); - $.each(buttons, function(name, fn) { - $('<button/>') - .text(name) - .click(function() { fn.apply(self.element[0], arguments); }) - .appendTo(uiDialogButtonPane); - }); - } - } -}); - -$.extend($.ui.dialog, { - defaults: { - autoOpen: true, - autoResize: true, - bgiframe: false, - buttons: {}, - closeOnEscape: true, - draggable: true, - height: 200, - minHeight: 100, - minWidth: 150, - modal: false, - overlay: {}, - position: 'center', - resizable: true, - stack: true, - width: 300, - zIndex: 1000 - }, - - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); - } -}); - -$.extend($.ui.dialog.overlay, { - instances: [], - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(e) { return e + '.dialog-overlay'; }).join(' '), - create: function(dialog) { - if (this.instances.length === 0) { - // prevent use of anchors and inputs - // we use a setTimeout in case the overlay is created from an - // event that we're going to be cancelling (see #2804) - setTimeout(function() { - $('a, :input').bind($.ui.dialog.overlay.events, function() { - // allow use of the element if inside a dialog and - // - there are no modal dialogs - // - there are modal dialogs, but we are in front of the topmost modal - var allow = false; - var $dialog = $(this).parents('.ui-dialog'); - if ($dialog.length) { - var $overlays = $('.ui-dialog-overlay'); - if ($overlays.length) { - var maxZ = parseInt($overlays.css('z-index'), 10); - $overlays.each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); - }); - allow = parseInt($dialog.css('z-index'), 10) > maxZ; - } else { - allow = true; - } - } - return allow; - }); - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(e) { - var ESC = 27; - (e.keyCode && e.keyCode == ESC && dialog.close()); - }); - - // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); - } - - var $el = $('<div/>').appendTo(document.body) - .addClass('ui-dialog-overlay').css($.extend({ - borderWidth: 0, margin: 0, padding: 0, - position: 'absolute', top: 0, left: 0, - width: this.width(), - height: this.height() - }, dialog.options.overlay)); - - (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); - - this.instances.push($el); - return $el; - }, - - destroy: function($el) { - this.instances.splice($.inArray(this.instances, $el), 1); - - if (this.instances.length === 0) { - $('a, :input').add([document, window]).unbind('.dialog-overlay'); - } - - $el.remove(); - }, - - height: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - var offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; - } else { - return scrollHeight + 'px'; - } - } else { - return $(document).height() + 'px'; - } - }, - - width: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - var offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; - } else { - return scrollWidth + 'px'; - } - } else { - return $(document).width() + 'px'; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * This is handled by shrinking the overlay before setting it - * to the full document size. - */ - var $overlays = $([]); - $.each($.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add(this); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend($.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); - } -}); - -})(jQuery); -/* - * jQuery UI Slider - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * ui.core.js - */ -(function($) { - -$.fn.unwrap = $.fn.unwrap || function(expr) { - return this.each(function(){ - $(this).parents(expr).eq(0).after(this).remove(); - }); -}; - -$.widget("ui.slider", { - plugins: {}, - ui: function(e) { - return { - options: this.options, - handle: this.currentHandle, - value: this.options.axis != "both" || !this.options.axis ? Math.round(this.value(null,this.options.axis == "vertical" ? "y" : "x")) : { - x: Math.round(this.value(null,"x")), - y: Math.round(this.value(null,"y")) - }, - range: this.getRange() - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.ui()]); - this.element.triggerHandler(n == "slide" ? n : "slide"+n, [e, this.ui()], this.options[n]); - }, - destroy: function() { - - this.element - .removeClass("ui-slider ui-slider-disabled") - .removeData("slider") - .unbind(".slider"); - - if(this.handle && this.handle.length) { - this.handle - .unwrap("a"); - this.handle.each(function() { - $(this).data("mouse").mouseDestroy(); - }); - } - - this.generated && this.generated.remove(); - - }, - setData: function(key, value) { - $.widget.prototype.setData.apply(this, arguments); - if (/min|max|steps/.test(key)) { - this.initBoundaries(); - } - - if(key == "range") { - value ? this.handle.length == 2 && this.createRange() : this.removeRange(); - } - - }, - - init: function() { - - var self = this; - this.element.addClass("ui-slider"); - this.initBoundaries(); - - // Initialize mouse and key events for interaction - this.handle = $(this.options.handle, this.element); - if (!this.handle.length) { - self.handle = self.generated = $(self.options.handles || [0]).map(function() { - var handle = $("<div/>").addClass("ui-slider-handle").appendTo(self.element); - if (this.id) - handle.attr("id", this.id); - return handle[0]; - }); - } - - - var handleclass = function(el) { - this.element = $(el); - this.element.data("mouse", this); - this.options = self.options; - - this.element.bind("mousedown", function() { - if(self.currentHandle) this.blur(self.currentHandle); - self.focus(this,1); - }); - - this.mouseInit(); - }; - - $.extend(handleclass.prototype, $.ui.mouse, { - mouseStart: function(e) { return self.start.call(self, e, this.element[0]); }, - mouseStop: function(e) { return self.stop.call(self, e, this.element[0]); }, - mouseDrag: function(e) { return self.drag.call(self, e, this.element[0]); }, - mouseCapture: function() { return true; }, - trigger: function(e) { this.mouseDown(e); } - }); - - - $(this.handle) - .each(function() { - new handleclass(this); - }) - .wrap('<a href="javascript:void(0)" style="cursor:default;"></a>') - .parent() - .bind('focus', function(e) { self.focus(this.firstChild); }) - .bind('blur', function(e) { self.blur(this.firstChild); }) - .bind('keydown', function(e) { if(!self.options.noKeyboard) self.keydown(e.keyCode, this.firstChild); }) - ; - - // Bind the click to the slider itself - this.element.bind('mousedown.slider', function(e) { - self.click.apply(self, [e]); - self.currentHandle.data("mouse").trigger(e); - self.firstValue = self.firstValue + 1; //This is for always triggering the change event - }); - - // Move the first handle to the startValue - $.each(this.options.handles || [], function(index, handle) { - self.moveTo(handle.start, index, true); - }); - if (!isNaN(this.options.startValue)) - this.moveTo(this.options.startValue, 0, true); - - this.previousHandle = $(this.handle[0]); //set the previous handle to the first to allow clicking before selecting the handle - if(this.handle.length == 2 && this.options.range) this.createRange(); - }, - initBoundaries: function() { - - var element = this.element[0], o = this.options; - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - $.extend(o, { - axis: o.axis || (element.offsetWidth < element.offsetHeight ? 'vertical' : 'horizontal'), - max: !isNaN(parseInt(o.max,10)) ? { x: parseInt(o.max, 10), y: parseInt(o.max, 10) } : ({ x: o.max && o.max.x || 100, y: o.max && o.max.y || 100 }), - min: !isNaN(parseInt(o.min,10)) ? { x: parseInt(o.min, 10), y: parseInt(o.min, 10) } : ({ x: o.min && o.min.x || 0, y: o.min && o.min.y || 0 }) - }); - //Prepare the real maxValue - o.realMax = { - x: o.max.x - o.min.x, - y: o.max.y - o.min.y - }; - //Calculate stepping based on steps - o.stepping = { - x: o.stepping && o.stepping.x || parseInt(o.stepping, 10) || (o.steps ? o.realMax.x/(o.steps.x || parseInt(o.steps, 10) || o.realMax.x) : 0), - y: o.stepping && o.stepping.y || parseInt(o.stepping, 10) || (o.steps ? o.realMax.y/(o.steps.y || parseInt(o.steps, 10) || o.realMax.y) : 0) - }; - }, - - - keydown: function(keyCode, handle) { - if(/(37|38|39|40)/.test(keyCode)) { - this.moveTo({ - x: /(37|39)/.test(keyCode) ? (keyCode == 37 ? '-' : '+') + '=' + this.oneStep("x") : 0, - y: /(38|40)/.test(keyCode) ? (keyCode == 38 ? '-' : '+') + '=' + this.oneStep("y") : 0 - }, handle); - } - }, - focus: function(handle,hard) { - this.currentHandle = $(handle).addClass('ui-slider-handle-active'); - if (hard) - this.currentHandle.parent()[0].focus(); - }, - blur: function(handle) { - $(handle).removeClass('ui-slider-handle-active'); - if(this.currentHandle && this.currentHandle[0] == handle) { this.previousHandle = this.currentHandle; this.currentHandle = null; }; - }, - click: function(e) { - // This method is only used if: - // - The user didn't click a handle - // - The Slider is not disabled - // - There is a current, or previous selected handle (otherwise we wouldn't know which one to move) - - var pointer = [e.pageX,e.pageY]; - - var clickedHandle = false; - this.handle.each(function() { - if(this == e.target) - clickedHandle = true; - }); - if (clickedHandle || this.options.disabled || !(this.currentHandle || this.previousHandle)) - return; - - // If a previous handle was focussed, focus it again - if (!this.currentHandle && this.previousHandle) - this.focus(this.previousHandle, true); - - // propagate only for distance > 0, otherwise propagation is done my drag - this.offset = this.element.offset(); - - this.moveTo({ - y: this.convertValue(e.pageY - this.offset.top - this.currentHandle[0].offsetHeight/2, "y"), - x: this.convertValue(e.pageX - this.offset.left - this.currentHandle[0].offsetWidth/2, "x") - }, null, !this.options.distance); - }, - - - - createRange: function() { - if(this.rangeElement) return; - this.rangeElement = $('<div></div>') - .addClass('ui-slider-range') - .css({ position: 'absolute' }) - .appendTo(this.element); - this.updateRange(); - }, - removeRange: function() { - this.rangeElement.remove(); - this.rangeElement = null; - }, - updateRange: function() { - var prop = this.options.axis == "vertical" ? "top" : "left"; - var size = this.options.axis == "vertical" ? "height" : "width"; - this.rangeElement.css(prop, (parseInt($(this.handle[0]).css(prop),10) || 0) + this.handleSize(0, this.options.axis == "vertical" ? "y" : "x")/2); - this.rangeElement.css(size, (parseInt($(this.handle[1]).css(prop),10) || 0) - (parseInt($(this.handle[0]).css(prop),10) || 0)); - }, - getRange: function() { - return this.rangeElement ? this.convertValue(parseInt(this.rangeElement.css(this.options.axis == "vertical" ? "height" : "width"),10), this.options.axis == "vertical" ? "y" : "x") : null; - }, - - handleIndex: function() { - return this.handle.index(this.currentHandle[0]); - }, - value: function(handle, axis) { - if(this.handle.length == 1) this.currentHandle = this.handle; - if(!axis) axis = this.options.axis == "vertical" ? "y" : "x"; - - var curHandle = $(handle != undefined && handle !== null ? this.handle[handle] || handle : this.currentHandle); - - if(curHandle.data("mouse").sliderValue) { - return parseInt(curHandle.data("mouse").sliderValue[axis],10); - } else { - return parseInt(((parseInt(curHandle.css(axis == "x" ? "left" : "top"),10) / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(handle,axis))) * this.options.realMax[axis]) + this.options.min[axis],10); - } - - }, - convertValue: function(value,axis) { - return this.options.min[axis] + (value / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis))) * this.options.realMax[axis]; - }, - - translateValue: function(value,axis) { - return ((value - this.options.min[axis]) / this.options.realMax[axis]) * (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis)); - }, - translateRange: function(value,axis) { - if (this.rangeElement) { - if (this.currentHandle[0] == this.handle[0] && value >= this.translateValue(this.value(1),axis)) - value = this.translateValue(this.value(1,axis) - this.oneStep(axis), axis); - if (this.currentHandle[0] == this.handle[1] && value <= this.translateValue(this.value(0),axis)) - value = this.translateValue(this.value(0,axis) + this.oneStep(axis), axis); - } - if (this.options.handles) { - var handle = this.options.handles[this.handleIndex()]; - if (value < this.translateValue(handle.min,axis)) { - value = this.translateValue(handle.min,axis); - } else if (value > this.translateValue(handle.max,axis)) { - value = this.translateValue(handle.max,axis); - } - } - return value; - }, - translateLimits: function(value,axis) { - if (value >= this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis)) - value = this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis); - if (value <= 0) - value = 0; - return value; - }, - handleSize: function(handle,axis) { - return $(handle != undefined && handle !== null ? this.handle[handle] : this.currentHandle)[0]["offset"+(axis == "x" ? "Width" : "Height")]; - }, - oneStep: function(axis) { - return this.options.stepping[axis] || 1; - }, - - - start: function(e, handle) { - - var o = this.options; - if(o.disabled) return false; - - // Prepare the outer size - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - // This is a especially ugly fix for strange blur events happening on mousemove events - if (!this.currentHandle) - this.focus(this.previousHandle, true); - - this.offset = this.element.offset(); - - this.handleOffset = this.currentHandle.offset(); - this.clickOffset = { top: e.pageY - this.handleOffset.top, left: e.pageX - this.handleOffset.left }; - - this.firstValue = this.value(); - - this.propagate('start', e); - this.drag(e, handle); - return true; - - }, - stop: function(e) { - this.propagate('stop', e); - if (this.firstValue != this.value()) - this.propagate('change', e); - // This is a especially ugly fix for strange blur events happening on mousemove events - this.focus(this.currentHandle, true); - return false; - }, - drag: function(e, handle) { - - var o = this.options; - var position = { top: e.pageY - this.offset.top - this.clickOffset.top, left: e.pageX - this.offset.left - this.clickOffset.left}; - if(!this.currentHandle) this.focus(this.previousHandle, true); //This is a especially ugly fix for strange blur events happening on mousemove events - - position.left = this.translateLimits(position.left, "x"); - position.top = this.translateLimits(position.top, "y"); - - if (o.stepping.x) { - var value = this.convertValue(position.left, "x"); - value = Math.round(value / o.stepping.x) * o.stepping.x; - position.left = this.translateValue(value, "x"); - } - if (o.stepping.y) { - var value = this.convertValue(position.top, "y"); - value = Math.round(value / o.stepping.y) * o.stepping.y; - position.top = this.translateValue(value, "y"); - } - - position.left = this.translateRange(position.left, "x"); - position.top = this.translateRange(position.top, "y"); - - if(o.axis != "vertical") this.currentHandle.css({ left: position.left }); - if(o.axis != "horizontal") this.currentHandle.css({ top: position.top }); - - //Store the slider's value - this.currentHandle.data("mouse").sliderValue = { - x: Math.round(this.convertValue(position.left, "x")) || 0, - y: Math.round(this.convertValue(position.top, "y")) || 0 - }; - - if (this.rangeElement) - this.updateRange(); - this.propagate('slide', e); - return false; - }, - - moveTo: function(value, handle, noPropagation) { - - var o = this.options; - - // Prepare the outer size - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - //If no handle has been passed, no current handle is available and we have multiple handles, return false - if (handle == undefined && !this.currentHandle && this.handle.length != 1) - return false; - - //If only one handle is available, use it - if (handle == undefined && !this.currentHandle) - handle = 0; - - if (handle != undefined) - this.currentHandle = this.previousHandle = $(this.handle[handle] || handle); - - - if(value.x !== undefined && value.y !== undefined) { - var x = value.x, y = value.y; - } else { - var x = value, y = value; - } - - if(x !== undefined && x.constructor != Number) { - var me = /^\-\=/.test(x), pe = /^\+\=/.test(x); - if(me || pe) { - x = this.value(null, "x") + parseInt(x.replace(me ? '=' : '+=', ''), 10); - } else { - x = isNaN(parseInt(x, 10)) ? undefined : parseInt(x, 10); - } - } - - if(y !== undefined && y.constructor != Number) { - var me = /^\-\=/.test(y), pe = /^\+\=/.test(y); - if(me || pe) { - y = this.value(null, "y") + parseInt(y.replace(me ? '=' : '+=', ''), 10); - } else { - y = isNaN(parseInt(y, 10)) ? undefined : parseInt(y, 10); - } - } - - if(o.axis != "vertical" && x !== undefined) { - if(o.stepping.x) x = Math.round(x / o.stepping.x) * o.stepping.x; - x = this.translateValue(x, "x"); - x = this.translateLimits(x, "x"); - x = this.translateRange(x, "x"); - this.currentHandle.css({ left: x }); - } - - if(o.axis != "horizontal" && y !== undefined) { - if(o.stepping.y) y = Math.round(y / o.stepping.y) * o.stepping.y; - y = this.translateValue(y, "y"); - y = this.translateLimits(y, "y"); - y = this.translateRange(y, "y"); - this.currentHandle.css({ top: y }); - } - - if (this.rangeElement) - this.updateRange(); - - //Store the slider's value - this.currentHandle.data("mouse").sliderValue = { - x: Math.round(this.convertValue(x, "x")) || 0, - y: Math.round(this.convertValue(y, "y")) || 0 - }; - - if (!noPropagation) { - this.propagate('start', null); - this.propagate('stop', null); - this.propagate('change', null); - this.propagate("slide", null); - } - } -}); - -$.ui.slider.getter = "value"; - -$.ui.slider.defaults = { - handle: ".ui-slider-handle", - distance: 1 -}; - -})(jQuery); -/* - * jQuery UI Tabs - * - * Copyright (c) 2007, 2008 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.tabs", { - init: function() { - this.options.event += '.tabs'; // namespace event - - // create tabs - this.tabify(true); - }, - setData: function(key, value) { - if ((/^selected/).test(key)) - this.select(value); - else { - this.options[key] = value; - this.tabify(); - } - }, - length: function() { - return this.$tabs.length; - }, - tabId: function(a) { - return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') - || this.options.idPrefix + $.data(a); - }, - ui: function(tab, panel) { - return { - options: this.options, - tab: tab, - panel: panel - }; - }, - tabify: function(init) { - - this.$lis = $('li:has(a[href])', this.element); - this.$tabs = this.$lis.map(function() { return $('a', this)[0]; }); - this.$panels = $([]); - - var self = this, o = this.options; - - this.$tabs.each(function(i, a) { - // inline tab - if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an empty hash - self.$panels = self.$panels.add(a.hash); - // remote tab - else if ($(a).attr('href') != '#') { // prevent loading the page itself if href is just "#" - $.data(a, 'href.tabs', a.href); // required for restore on destroy - $.data(a, 'load.tabs', a.href); // mutable - var id = self.tabId(a); - a.href = '#' + id; - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass) - .insertAfter( self.$panels[i - 1] || self.element ); - $panel.data('destroy.tabs', true); - } - self.$panels = self.$panels.add( $panel ); - } - // invalid tab href - else - o.disabled.push(i + 1); - }); - - if (init) { - - // attach necessary classes for styling if not present - this.element.addClass(o.navClass); - this.$panels.each(function() { - var $this = $(this); - $this.addClass(o.panelClass); - }); - - // Selected tab - // use "selected" option or try to retrieve: - // 1. from fragment identifier in url - // 2. from cookie - // 3. from selected class attribute on <li> - if (o.selected === undefined) { - if (location.hash) { - this.$tabs.each(function(i, a) { - if (a.hash == location.hash) { - o.selected = i; - // prevent page scroll to fragment - if ($.browser.msie || $.browser.opera) { // && !o.remote - var $toShow = $(location.hash), toShowId = $toShow.attr('id'); - $toShow.attr('id', ''); - setTimeout(function() { - $toShow.attr('id', toShowId); // restore id - }, 500); - } - scrollTo(0, 0); - return false; // break - } - }); - } - else if (o.cookie) { - var index = parseInt($.cookie('ui-tabs' + $.data(self.element)),10); - if (index && self.$tabs[index]) - o.selected = index; - } - else if (self.$lis.filter('.' + o.selectedClass).length) - o.selected = self.$lis.index( self.$lis.filter('.' + o.selectedClass)[0] ); - } - o.selected = o.selected === null || o.selected !== undefined ? o.selected : 0; // first tab selected by default - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - // A selected tab cannot become disabled. - o.disabled = $.unique(o.disabled.concat( - $.map(this.$lis.filter('.' + o.disabledClass), - function(n, i) { return self.$lis.index(n); } ) - )).sort(); - if ($.inArray(o.selected, o.disabled) != -1) - o.disabled.splice($.inArray(o.selected, o.disabled), 1); - - // highlight selected tab - this.$panels.addClass(o.hideClass); - this.$lis.removeClass(o.selectedClass); - if (o.selected !== null) { - this.$panels.eq(o.selected).show().removeClass(o.hideClass); // use show and remove class to show in any case no matter how it has been hidden before - this.$lis.eq(o.selected).addClass(o.selectedClass); - - // seems to be expected behavior that the show callback is fired - var onShow = function() { - $(self.element).triggerHandler('tabsshow', - [null, self.ui(self.$tabs[o.selected], self.$panels[o.selected])], o.show); - }; - - // load if remote tab - if ($.data(this.$tabs[o.selected], 'load.tabs')) - this.load(o.selected, onShow); - // just trigger show event - else - onShow(); - - } - - // clean up to avoid memory leaks in certain versions of IE 6 - $(window).bind('unload', function() { - self.$tabs.unbind('.tabs'); - self.$lis = self.$tabs = self.$panels = null; - }); - - } - - // disable tabs - for (var i = 0, li; li = this.$lis[i]; i++) - $(li)[$.inArray(i, o.disabled) != -1 && !$(li).hasClass(o.selectedClass) ? 'addClass' : 'removeClass'](o.disabledClass); - - // reset cache if switching from cached to not cached - if (o.cache === false) - this.$tabs.removeData('cache.tabs'); - - // set up animations - var hideFx, showFx, baseFx = { 'min-width': 0, duration: 1 }, baseDuration = 'normal'; - if (o.fx && o.fx.constructor == Array) - hideFx = o.fx[0] || baseFx, showFx = o.fx[1] || baseFx; - else - hideFx = showFx = o.fx || baseFx; - - // reset some styles to maintain print style sheets etc. - var resetCSS = { display: '', overflow: '', height: '' }; - if (!$.browser.msie) // not in IE to prevent ClearType font issue - resetCSS.opacity = ''; - - // Hide a tab, animation prevents browser scrolling to fragment, - // $show is optional. - function hideTab(clicked, $hide, $show) { - $hide.animate(hideFx, hideFx.duration || baseDuration, function() { // - $hide.addClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc. - if ($.browser.msie && hideFx.opacity) - $hide[0].style.filter = ''; - if ($show) - showTab(clicked, $show, $hide); - }); - } - - // Show a tab, animation prevents browser scrolling to fragment, - // $hide is optional. - function showTab(clicked, $show, $hide) { - if (showFx === baseFx) - $show.css('display', 'block'); // prevent occasionally occuring flicker in Firefox cause by gap between showing and hiding the tab panels - $show.animate(showFx, showFx.duration || baseDuration, function() { - $show.removeClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc. - if ($.browser.msie && showFx.opacity) - $show[0].style.filter = ''; - - // callback - $(self.element).triggerHandler('tabsshow', - [null, self.ui(clicked, $show[0])], o.show); - - }); - } - - // switch a tab - function switchTab(clicked, $li, $hide, $show) { - /*if (o.bookmarkable && trueClick) { // add to history only if true click occured, not a triggered click - $.ajaxHistory.update(clicked.hash); - }*/ - $li.addClass(o.selectedClass) - .siblings().removeClass(o.selectedClass); - hideTab(clicked, $hide, $show); - } - - // attach tab event handler, unbind to avoid duplicates from former tabifying... - this.$tabs.unbind('.tabs').bind(o.event, function() { - - //var trueClick = e.clientX; // add to history only if true click occured, not a triggered click - var $li = $(this).parents('li:eq(0)'), - $hide = self.$panels.filter(':visible'), - $show = $(this.hash); - - // If tab is already selected and not unselectable or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if (($li.hasClass(o.selectedClass) && !o.unselect) - || $li.hasClass(o.disabledClass) - || $(this).hasClass(o.loadingClass) - || $(self.element).triggerHandler('tabsselect', [null, self.ui(this, $show[0])], o.select) === false - ) { - this.blur(); - return false; - } - - self.options.selected = self.$tabs.index(this); - - // if tab may be closed - if (o.unselect) { - if ($li.hasClass(o.selectedClass)) { - self.options.selected = null; - $li.removeClass(o.selectedClass); - self.$panels.stop(); - hideTab(this, $hide); - this.blur(); - return false; - } else if (!$hide.length) { - self.$panels.stop(); - var a = this; - self.load(self.$tabs.index(this), function() { - $li.addClass(o.selectedClass).addClass(o.unselectClass); - showTab(a, $show); - }); - this.blur(); - return false; - } - } - - if (o.cookie) - $.cookie('ui-tabs' + $.data(self.element), self.options.selected, o.cookie); - - // stop possibly running animations - self.$panels.stop(); - - // show new tab - if ($show.length) { - - // prevent scrollbar scrolling to 0 and than back in IE7, happens only if bookmarking/history is enabled - /*if ($.browser.msie && o.bookmarkable) { - var showId = this.hash.replace('#', ''); - $show.attr('id', ''); - setTimeout(function() { - $show.attr('id', showId); // restore id - }, 0); - }*/ - - var a = this; - self.load(self.$tabs.index(this), $hide.length ? - function() { - switchTab(a, $li, $hide, $show); - } : - function() { - $li.addClass(o.selectedClass); - showTab(a, $show); - } - ); - - // Set scrollbar to saved position - need to use timeout with 0 to prevent browser scroll to target of hash - /*var scrollX = window.pageXOffset || document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft || 0; - var scrollY = window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop || 0; - setTimeout(function() { - scrollTo(scrollX, scrollY); - }, 0);*/ - - } else - throw 'jQuery UI Tabs: Mismatching fragment identifier.'; - - // Prevent IE from keeping other link focussed when using the back button - // and remove dotted border from clicked link. This is controlled in modern - // browsers via CSS, also blur removes focus from address bar in Firefox - // which can become a usability and annoying problem with tabsRotate. - if ($.browser.msie) - this.blur(); - - //return o.bookmarkable && !!trueClick; // convert trueClick == undefined to Boolean required in IE - return false; - - }); - - // disable click if event is configured to something else - if (!(/^click/).test(o.event)) - this.$tabs.bind('click.tabs', function() { return false; }); - - }, - add: function(url, label, index) { - if (index == undefined) - index = this.$tabs.length; // append by default - - var o = this.options; - var $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)); - $li.data('destroy.tabs', true); - - var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId( $('a:first-child', $li)[0] ); - - // try to find an existing element before creating a new one - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id) - .addClass(o.hideClass) - .data('destroy.tabs', true); - } - $panel.addClass(o.panelClass); - if (index >= this.$lis.length) { - $li.appendTo(this.element); - $panel.appendTo(this.element[0].parentNode); - } else { - $li.insertBefore(this.$lis[index]); - $panel.insertBefore(this.$panels[index]); - } - - o.disabled = $.map(o.disabled, - function(n, i) { return n >= index ? ++n : n }); - - this.tabify(); - - if (this.$tabs.length == 1) { - $li.addClass(o.selectedClass); - $panel.removeClass(o.hideClass); - var href = $.data(this.$tabs[0], 'load.tabs'); - if (href) - this.load(index, href); - } - - // callback - this.element.triggerHandler('tabsadd', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.add - ); - }, - remove: function(index) { - var o = this.options, $li = this.$lis.eq(index).remove(), - $panel = this.$panels.eq(index).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1) - this.select(index + (index + 1 < this.$tabs.length ? 1 : -1)); - - o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }), - function(n, i) { return n >= index ? --n : n }); - - this.tabify(); - - // callback - this.element.triggerHandler('tabsremove', - [null, this.ui($li.find('a')[0], $panel[0])], o.remove - ); - }, - enable: function(index) { - var o = this.options; - if ($.inArray(index, o.disabled) == -1) - return; - - var $li = this.$lis.eq(index).removeClass(o.disabledClass); - if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2... - $li.css('display', 'inline-block'); - setTimeout(function() { - $li.css('display', 'block'); - }, 0); - } - - o.disabled = $.grep(o.disabled, function(n, i) { return n != index; }); - - // callback - this.element.triggerHandler('tabsenable', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.enable - ); - - }, - disable: function(index) { - var self = this, o = this.options; - if (index != o.selected) { // cannot disable already selected tab - this.$lis.eq(index).addClass(o.disabledClass); - - o.disabled.push(index); - o.disabled.sort(); - - // callback - this.element.triggerHandler('tabsdisable', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.disable - ); - } - }, - select: function(index) { - if (typeof index == 'string') - index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] ); - this.$tabs.eq(index).trigger(this.options.event); - }, - load: function(index, callback) { // callback is for internal usage only - - var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0], - bypassCache = callback == undefined || callback === false, url = $a.data('load.tabs'); - - callback = callback || function() {}; - - // no remote or from cache - just finish with callback - if (!url || !bypassCache && $.data(a, 'cache.tabs')) { - callback(); - return; - } - - // load remote from here on - - var inner = function(parent) { - var $parent = $(parent), $inner = $parent.find('*:last'); - return $inner.length && $inner || $parent; - }; - var cleanup = function() { - self.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass) - .each(function() { - if (o.spinner) - inner(this).parent().html(inner(this).data('label.tabs')); - }); - self.xhr = null; - }; - - if (o.spinner) { - var label = inner(a).html(); - inner(a).wrapInner('<em></em>') - .find('em').data('label.tabs', label).html(o.spinner); - } - - var ajaxOptions = $.extend({}, o.ajaxOptions, { - url: url, - success: function(r, s) { - $(a.hash).html(r); - cleanup(); - - if (o.cache) - $.data(a, 'cache.tabs', true); // if loaded once do not load them again - - // callbacks - $(self.element).triggerHandler('tabsload', - [null, self.ui(self.$tabs[index], self.$panels[index])], o.load - ); - o.ajaxOptions.success && o.ajaxOptions.success(r, s); - - // This callback is required because the switch has to take - // place after loading has completed. Call last in order to - // fire load before show callback... - callback(); - } - }); - if (this.xhr) { - // terminate pending requests from other tabs and restore tab label - this.xhr.abort(); - cleanup(); - } - $a.addClass(o.loadingClass); - setTimeout(function() { // timeout is again required in IE, "wait" for id being restored - self.xhr = $.ajax(ajaxOptions); - }, 0); - - }, - url: function(index, url) { - this.$tabs.eq(index).removeData('cache.tabs').data('load.tabs', url); - }, - destroy: function() { - var o = this.options; - this.element.unbind('.tabs') - .removeClass(o.navClass).removeData('tabs'); - this.$tabs.each(function() { - var href = $.data(this, 'href.tabs'); - if (href) - this.href = href; - var $this = $(this).unbind('.tabs'); - $.each(['href', 'load', 'cache'], function(i, prefix) { - $this.removeData(prefix + '.tabs'); - }); - }); - this.$lis.add(this.$panels).each(function() { - if ($.data(this, 'destroy.tabs')) - $(this).remove(); - else - $(this).removeClass([o.selectedClass, o.unselectClass, - o.disabledClass, o.panelClass, o.hideClass].join(' ')); - }); - } -}); - -$.ui.tabs.defaults = { - // basic setup - unselect: false, - event: 'click', - disabled: [], - cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - // TODO history: false, - - // Ajax - spinner: 'Loading…', - cache: false, - idPrefix: 'ui-tabs-', - ajaxOptions: {}, - - // animations - fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } - - // templates - tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>', - panelTemplate: '<div></div>', - - // CSS classes - navClass: 'ui-tabs-nav', - selectedClass: 'ui-tabs-selected', - unselectClass: 'ui-tabs-unselect', - disabledClass: 'ui-tabs-disabled', - panelClass: 'ui-tabs-panel', - hideClass: 'ui-tabs-hide', - loadingClass: 'ui-tabs-loading' -}; - -$.ui.tabs.getter = "length"; - -/* - * Tabs Extensions - */ - -/* - * Rotate - */ -$.extend($.ui.tabs.prototype, { - rotation: null, - rotate: function(ms, continuing) { - - continuing = continuing || false; - - var self = this, t = this.options.selected; - - function start() { - self.rotation = setInterval(function() { - t = ++t < self.$tabs.length ? t : 0; - self.select(t); - }, ms); - } - - function stop(e) { - if (!e || e.clientX) { // only in case of a true click - clearInterval(self.rotation); - } - } - - // start interval - if (ms) { - start(); - if (!continuing) - this.$tabs.bind(this.options.event, stop); - else - this.$tabs.bind(this.options.event, function() { - stop(); - t = self.options.selected; - start(); - }); - } - // stop interval - else { - stop(); - this.$tabs.unbind(this.options.event, stop); - } - } -}); - -})(jQuery); diff --git a/js/knavbar.js b/js/knavbar.js new file mode 100755 index 0000000..c7fd93b --- /dev/null +++ b/js/knavbar.js @@ -0,0 +1,15 @@ +//This code loads in html for knavbar into a <section> +//tag with the id="navigation" +$(document).ready(function(){ + + //updates the links in knavbar + //specific to the context + var modify = function(){ + document.write('foo'); + $('#knavbarHome').attr('href', 'foo'); + + }; + + var foo = $('#navigation').load('chakra/kfoo.html #knavbar', modify); + var x = 0; +});
\ No newline at end of file diff --git a/js/knavbar.js.~2~ b/js/knavbar.js.~2~ new file mode 100755 index 0000000..96c31f2 --- /dev/null +++ b/js/knavbar.js.~2~ @@ -0,0 +1,10 @@ +//This code loads in html for knavbar into a <section> +//tag with the id="navigation" +$(document).ready(function(){ + $('#navigation').load('chakra/knavbar.html #knavbar'); + + //set chakra to foo + + + +});
\ No newline at end of file diff --git a/js/pure2.js b/js/pure2.js new file mode 100755 index 0000000..1e0958f --- /dev/null +++ b/js/pure2.js @@ -0,0 +1,710 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * + + PURE Unobtrusive Rendering Engine for HTML + + Licensed under the MIT licenses. + More information at: http://www.opensource.org + + Copyright (c) 2009 Michael Cvilic - BeeBole.com + + Thanks to Rog Peppe for the functional JS jump + revision: 2.18 + +* * * * * * * * * * * * * * * * * * * * * * * * * */ + +var $p, pure = $p = function(){ + var sel = arguments[0], + ctxt = false; + + if(typeof sel === 'string'){ + ctxt = arguments[1] || false; + } + return $p.core(sel, ctxt); +}; + +$p.core = function(sel, ctxt, plugins){ + //get an instance of the plugins + var plugins = getPlugins(), + templates = []; + + //search for the template node(s) + if(typeof sel === 'string'){ + templates = plugins.find(ctxt || document, sel); + }else if(typeof sel === 'object'){ + templates = [sel]; + }else{ + error('No templates found. Review your selector'); + } + + for(var i = 0, ii = templates.length; i < ii; i++){ + plugins[i] = templates[i]; + } + plugins.length = ii; + + // set the signature string that will be replaced at render time + var Sig = '_s' + Math.floor( Math.random() * 1000000 ) + '_', + // another signature to prepend to attributes and avoid checks: style, height, on[events]... + attPfx = '_a' + Math.floor( Math.random() * 1000000 ) + '_', + // rx to parse selectors, e.g. "+tr.foo[class]" + selRx = /^(\+)?([^\@\+]+)?\@?([^\+]+)?(\+)?$/, + // set automatically attributes for some tags + autoAttr = { + IMG:'src', + INPUT:'value' + }; + + return plugins; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * + core functions + * * * * * * * * * * * * * * * * * * * * * * * * * */ + + + // error utility + function error(e){ + alert(e); + if(typeof console !== 'undefined'){ + console.log(e); + debugger; + } + throw('pure error: ' + e); + } + + //return a new instance of plugins + function getPlugins(){ + var plugins = $p.plugins, + f = function(){}; + f.prototype = plugins; + + // do not overwrite functions if external definition + f.prototype.compile = plugins.compile || compile; + f.prototype.render = plugins.render || render; + f.prototype.autoRender = plugins.autoRender || autoRender; + f.prototype.find = plugins.find || find; + + // give the compiler and the error handling to the plugin context + f.prototype._compiler = compiler; + f.prototype._error = error; + + return new f(); + } + + // returns the outer HTML of a node + function outerHTML(node){ + // if IE take the internal method otherwise build one + return node.outerHTML || ( + function(n){ + var div = document.createElement('div'), h; + div.appendChild( n.cloneNode(true) ); + h = div.innerHTML; + div = null; + return h; + })(node); + } + + // check if the argument is an array + function isArray(o){ + return Object.prototype.toString.call( o ) === "[object Array]"; + } + + // returns the string generator function + function wrapquote(qfn, f){ + return function(ctxt){ + return qfn('' + f(ctxt)); + }; + } + + // convert a JSON HTML structure to a dom node and returns the leaf + function domify(ns, pa){ + pa = pa || document.createDocumentFragment(); + var nn, leaf; + for(var n in ns){ + nn = document.createElement(n); + pa.appendChild(nn); + if(typeof ns[n] === 'object'){ + leaf = domify(ns[n], nn); + }else{ + leaf = document.createElement(ns[n]); + nn.appendChild(leaf); + } + } + return leaf; + }; + + // default find using querySelector when available on the browser + function find(n, sel){ + if(typeof n === 'string'){ + sel = n; + n = false; + } + if(typeof document.querySelectorAll !== 'undefined'){ + return (n||document).querySelectorAll( sel ); + }else{ + error('You can test PURE standalone with: iPhone, FF3.5+, Safari4+ and IE8+\n\nTo run PURE on your browser, you need a JS library/framework with a CSS selector engine'); + } + } + + // create a function that concatenates constant string + // sections (given in parts) and the results of called + // functions to fill in the gaps between parts (fns). + // fns[n] fills in the gap between parts[n-1] and parts[n]; + // fns[0] is unused. + // this is the inner template evaluation loop. + function concatenator(parts, fns){ + return function(ctxt){ + var strs = [ parts[ 0 ] ], + n = parts.length, + fnVal, pVal, attLine, pos; + + for(var i = 1; i < n; i++){ + fnVal = fns[i]( ctxt ); + pVal = parts[i]; + + // if the value is empty and attribute, remove it + if(fnVal === ''){ + attLine = strs[ strs.length - 1 ]; + if( ( pos = attLine.search( /[\w]+=\"?$/ ) ) > -1){ + strs[ strs.length - 1 ] = attLine.substring( 0, pos ); + pVal = pVal.substr( 1 ); + } + } + + strs[ strs.length ] = fnVal; + strs[ strs.length ] = pVal; + } + return strs.join(''); + }; + } + + // parse and check the loop directive + function parseloopspec(p){ + var m = p.match( /^(\w+)\s*<-\s*(\S+)?$/ ); + if(m === null){ + error('bad loop spec: "' + p + '"'); + } + if(m[1] === 'item'){ + error('"item<-..." is a reserved word for the current running iteration.\n\nPlease choose another name for your loop.'); + } + if( !m[2] ){ //undefined or space(IE) + m[2] = function(ctxt){return ctxt.data;}; + } + return {name: m[1], sel: m[2]}; + } + + // parse a data selector and return a function that + // can traverse the data accordingly, given a context. + function dataselectfn(sel){ + if(typeof(sel) === 'function'){ + return sel; + } + //check for a valid js variable name with hyphen(for properties only) and $ + var m = sel.match(/^[a-zA-Z$_][\w$]*(\.[\w$-]*[^\.])*$/); + if(m === null){ + var found = false, s = sel, parts = [], pfns = [], i = 0, retStr; + // check if literal + if(/\'|\"/.test( s.charAt(0) )){ + if(/\'|\"/.test( s.charAt(s.length-1) )){ + retStr = s.substring(1, s.length-1); + return function(){ return retStr; }; + } + }else{ + // check if literal + #{var} + while((m = s.match(/#\{([^{}]+)\}/)) !== null){ + found = true; + parts[i++] = s.slice(0, m.index); + pfns[i] = dataselectfn(m[1]); + s = s.slice(m.index + m[0].length, s.length); + } + } + if(!found){ + error('bad data selector syntax: ' + sel); + } + parts[i] = s; + return concatenator(parts, pfns); + } + m = sel.split('.'); + return function(ctxt){ + var data = ctxt.data; + if(!data){ + return ''; + } + var v = ctxt[m[0]], + i = 0; + if(v){ + data = v.item; + i += 1; + } + var n = m.length; + for(; i < n; i++){ + if(!data){break;} + data = data[m[i]]; + } + return (!data && data !== 0) ? '':data; + }; + } + + // wrap in an object the target node/attr and their properties + function gettarget(dom, sel, isloop){ + var osel, prepend, selector, attr, append, target = []; + if( typeof sel === 'string' ){ + osel = sel; + var m = sel.match(selRx); + if( !m ){ + error( 'bad selector syntax: ' + sel ); + } + + prepend = m[1]; + selector = m[2]; + attr = m[3]; + append = m[4]; + + if(selector === '.' || ( !selector && attr ) ){ + target[0] = dom; + }else{ + target = plugins.find(dom, selector); + } + if(!target || target.length === 0){ + return {attr: null, nodes: target, set: null, sel: osel}; + } + }else{ + // autoRender node + prepend = sel.prepend; + attr = sel.attr; + append = sel.append; + target = [dom]; + } + + if( prepend || append ){ + if( prepend && append ){ + error('append/prepend cannot take place at the same time'); + }else if( isloop ){ + error('no append/prepend/replace modifiers allowed for loop target'); + }else if( append && isloop ){ + error('cannot append with loop (sel: ' + osel + ')'); + } + } + var setstr, getstr, quotefn, isStyle, isClass, an; + if(attr){ + isStyle = (/^style$/i).test(attr); + isClass = (/^class$/i).test(attr); + attName = isClass ? 'className' : attr; + setstr = function(node, s){ + node.setAttribute( attPfx + attr, s ); + if(attName in node && !isStyle){ + node[ attName ] = '' ; + } + if(node.nodeType === 1){ + node.removeAttribute( attr ); + } + }; + if( isStyle ){ + getstr = function(node){ return node.style.cssText;}; + }else{ + getstr = function(node){ return node.getAttribute(attr);}; + } + if( isStyle || isClass ){//IE no quotes special care + quotefn = function(s){ return s.replace(/\"/g, '"');}; + }else{ + quotefn = function(s){ return s.replace(/\"/g, '"').replace(/\s/g, ' ');}; + } + }else{ + if(isloop){ + setstr = function(node, s){ + // we can have a null parent node + // if we get overlapping targets. + var pn = node.parentNode; + if(pn){ + //replace node with s + var t = document.createTextNode(s); + node.parentNode.insertBefore(t, node.nextSibling); + node.parentNode.removeChild(node); + } + }; + }else{ + getstr = function(node){ return node.innerHTML; }; + setstr = function(node, s){ node.innerHTML = s; }; + } + quotefn = function(s){ return s; }; + } + var setfn; + if(prepend){ + setfn = function(node, s){ setstr( node, s + getstr( node ) );}; + }else if(append){ + setfn = function(node, s){ setstr( node, getstr( node ) + s );}; + }else{ + setfn = function(node, s){ setstr( node, s );}; + } + return {attr: attr, nodes: target, set: setfn, sel: osel, quotefn: quotefn}; + } + + function setsig(target, n){ + var sig = Sig + n + ':'; + for(var i = 0; i < target.nodes.length; i++){ + // could check for overlapping targets here. + target.set( target.nodes[i], sig ); + } + } + + // read de loop data, and pass it to the inner rendering function + function loopfn(name, dselect, inner){ + return function(ctxt){ + var a = dselect(ctxt), + old = ctxt[name], + temp = { items : a }, + strs = [], + buildArg = function(idx){ + ctxt.items = a; + ctxt.pos = temp.pos = idx; + ctxt.item = temp.item = a[ idx ]; + strs.push( inner( ctxt ) ); + }; + ctxt[name] = temp; + if( isArray(a) ){ + //loop on array + for(var i = 0, ii = a.length || 0; i < ii; i++){ + buildArg(i); + } + }else{ + //loop on collections + for(var prop in a){ + a.hasOwnProperty( prop ) && buildArg(prop); + } + } + typeof old !== 'undefined' ? ctxt[name] = old : delete ctxt[name]; + return strs.join(''); + }; + } + // generate the template for a loop node + function loopgen(dom, sel, loop, fns){ + var already = false; + var p; + for(var i in loop){ + if(loop.hasOwnProperty(i)){ + if(already){ + error('cannot have more than one loop on a target'); + } + p = i; + already = true; + } + } + if(!p){ + error('no loop spec'); + } + var dsel = loop[p]; + // if it's a simple data selector then we default to contents, not replacement. + if(typeof(dsel) === 'string' || typeof(dsel) === 'function'){ + loop = {}; + loop[p] = {root: dsel}; + return loopgen(dom, sel, loop, fns); + } + var spec = parseloopspec(p), + itersel = dataselectfn(spec.sel), + target = gettarget(dom, sel, true), + nodes = target.nodes; + + for(i = 0; i < nodes.length; i++){ + // could check for overlapping loop targets here by checking that + // root is still ancestor of node. + var node = nodes[i], + inner = compiler(node, dsel); + fns[fns.length] = wrapquote(target.quotefn, loopfn(spec.name, itersel, inner)); + target.nodes = [node]; // N.B. side effect on target. + setsig(target, fns.length - 1); + } + } + + function getAutoNodes(n, data){ + var ns = n.getElementsByTagName('*'), + an = [], + openLoops = {a:[],l:{}}, + cspec, + isNodeValue, + i, ii, j, jj, ni, cs, cj; + //for each node found in the template + for(i = -1, ii = ns.length; i < ii; i++){ + ni = i > -1 ?ns[i]:n; + if(ni.nodeType === 1 && ni.className !== ''){ + //when a className is found + cs = ni.className.split(' '); + // for each className + for(j = 0, jj=cs.length;j<jj;j++){ + cj = cs[j]; + // check if it is related to a context property + cspec = checkClass(cj, ni.tagName); + // if so, store the node, plus the type of data + if(cspec !== false){ + isNodeValue = (/nodevalue/i).test(cspec.attr); + if(cspec.sel.indexOf('@') > -1 || isNodeValue){ + ni.className = ni.className.replace('@'+cspec.attr, ''); + if(isNodeValue){ + cspec.attr = false; + } + } + an.push({n:ni, cspec:cspec}); + } + } + } + } + return an; + + function checkClass(c, tagName){ + // read the class + var ca = c.match(selRx), + attr = ca[3] || autoAttr[tagName], + cspec = {prepend:!!ca[1], prop:ca[2], attr:attr, append:!!ca[4], sel:c}, + val = isArray(data) ? data[0][cspec.prop] : data[cspec.prop], + i, ii, loopi; + // if first level of data is found + if(typeof val === 'undefined'){ + // check in existing open loops + for(i = openLoops.a.length-1; i >= 0; i--){ + loopi = openLoops.a[i]; + val = loopi.l[0][cspec.prop]; + if(typeof val !== 'undefined'){ + cspec.prop = loopi.p + '.' + cspec.prop; + if(openLoops.l[cspec.prop] === true){ + val = val[0]; + } + break; + } + } + } + // nothing found return + if(typeof val === 'undefined'){ + return false; + } + // set the data type and details + if(isArray(val)){ + openLoops.a.push( {l:val, p:cspec.prop} ); + openLoops.l[cspec.prop] = true; + cspec.t = 'loop'; + }else{ + cspec.t = 'str'; + } + return cspec; + } + } + + // returns a function that, given a context argument, + // will render the template defined by dom and directive. + function compiler(dom, directive, data, ans){ + var fns = []; + // autoRendering nodes parsing -> auto-nodes + ans = ans || data && getAutoNodes(dom, data); + if(data){ + var j, jj, cspec, n, target, nodes, itersel, node, inner; + // for each auto-nodes + while(ans.length > 0){ + cspec = ans[0].cspec; + n = ans[0].n; + ans.splice(0, 1); + if(cspec.t === 'str'){ + // if the target is a value + target = gettarget(n, cspec, false); + setsig(target, fns.length); + fns[fns.length] = wrapquote(target.quotefn, dataselectfn(cspec.prop)); + }else{ + // if the target is a loop + itersel = dataselectfn(cspec.sel); + target = gettarget(n, cspec, true); + nodes = target.nodes; + for(j = 0, jj = nodes.length; j < jj; j++){ + node = nodes[j]; + inner = compiler(node, false, data, ans); + fns[fns.length] = wrapquote(target.quotefn, loopfn(cspec.sel, itersel, inner)); + target.nodes = [node]; + setsig(target, fns.length - 1); + } + } + } + } + // read directives + var target, dsel; + for(var sel in directive){ + if(directive.hasOwnProperty(sel)){ + dsel = directive[sel]; + if(typeof(dsel) === 'function' || typeof(dsel) === 'string'){ + // set the value for the node/attr + target = gettarget(dom, sel, false); + setsig(target, fns.length); + fns[fns.length] = wrapquote(target.quotefn, dataselectfn(dsel)); + }else{ + // loop on node + loopgen(dom, sel, dsel, fns); + } + } + } + // convert node to a string + var h = outerHTML(dom), pfns = []; + // IE adds an unremovable "selected" attribute + // hard replace while waiting for a better solution + if (dom.tagName === 'OPTION' && (new RegExp(attPfx + 'selected', 'i')).test(h)) { + h = h.replace(/\sselected\s/, ' '); + } + // remove attribute prefix + h = h.split(attPfx).join(''); + + // slice the html string at "Sig" + var parts = h.split( Sig ), p; + // for each slice add the return string of + for(var i = 1; i < parts.length; i++){ + p = parts[i]; + // part is of the form "fn-number:..." as placed there by setsig. + pfns[i] = fns[ parseInt(p, 10) ]; + parts[i] = p.substring( p.indexOf(':') + 1 ); + } + return concatenator(parts, pfns); + } + // compile the template with directive + // if a context is passed, the autoRendering is triggered automatically + // return a function waiting the data as argument + function compile(directive, ctxt, template){ + var rfn = compiler( ( template || this[0] ).cloneNode(true), directive, ctxt); + return function(data, context){ + context = context || data; + return rfn({data: data, context:context}); + }; + } + //compile with the directive as argument + // run the template function on the context argument + // return an HTML string + // should replace the template and return this + function render(ctxt, directive){ + var fn = typeof directive === 'function' ? directive : plugins.compile( directive, false, this[0] ); + for(var i = 0, ii = this.length; i < ii; i++){ + this[i] = replaceWith( this[i], fn( ctxt, false )); + } + context = null; + return this; + } + + // compile the template with autoRender + // run the template function on the context argument + // return an HTML string + function autoRender(ctxt, directive){ + var fn = plugins.compile( directive, ctxt, this[0] ); + for(var i = 0, ii = this.length; i < ii; i++){ + this[i] = replaceWith( this[i], fn( ctxt, false)); + } + context = null; + return this; + } + + function replaceWith(elm, html){ + var div = document.createElement('DIV'), + tagName = elm.tagName.toLowerCase(), + ne, pa; + if((/td|tr|th/).test(tagName)){ + var parents = { tr:{table:'tbody'}, td:{table:{tbody:'tr'}}, th:{table:{thead:'tr'}} }; + pa = domify( parents[ tagName ] ); + }else if( ( /tbody|thead|tfoot/ ).test( tagName )){ + pa = document.createElement('table'); + }else{ + pa = document.createElement('div'); + } + + var ep = elm.parentNode; + // avoid IE mem leak + ep.insertBefore(pa, elm); + ep.removeChild(elm); + pa.innerHTML = html; + ne = pa.firstChild; + ep.insertBefore(ne, pa); + ep.removeChild(pa); + elm = ne; + + pa = ne = ep = null; + return elm; + } +}; + +$p.plugins = {}; + +$p.libs = { + dojo:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return dojo.query(sel, n); + }; + } + }, + domassistant:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return $(n).cssSelect(sel); + }; + } + DOMAssistant.attach({ + publicMethods : [ 'compile', 'render', 'autoRender'], + compile:function(directive, ctxt){ return $p(this).compile(directive, ctxt); }, + render:function(ctxt, directive){ return $( $p(this).render(ctxt, directive) )[0]; }, + autoRender:function(ctxt, directive){ return $( $p(this).autoRender(ctxt, directive) )[0]; } + }); + }, + jquery:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return $(n).find(sel); + }; + } + jQuery.fn.extend({ + compile:function(directive, ctxt){ return $p(this[0]).compile(directive, ctxt); }, + render:function(ctxt, directive){ return jQuery( $p( this[0] ).render( ctxt, directive ) ); }, + autoRender:function(ctxt, directive){ return jQuery( $p( this[0] ).autoRender( ctxt, directive ) ); } + }); + }, + mootools:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return $(n).getElements(sel); + }; + } + Element.implement({ + compile:function(directive, ctxt){ return $p(this).compile(directive, ctxt); }, + render:function(ctxt, directive){ return $p(this).render(ctxt, directive); }, + autoRender:function(ctxt, directive){ return $p(this).autoRender(ctxt, directive); } + }); + }, + prototype:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + n = n === document ? n.body : n; + return typeof n === 'string' ? $$(n) : $(n).select(sel); + }; + } + Element.addMethods({ + compile:function(element, directive, ctxt){ return $p(element).compile(directive, ctxt); }, + render:function(element, ctxt, directive){ return $p(element).render(ctxt, directive); }, + autoRender:function(element, ctxt, directive){ return $p(element).autoRender(ctxt, directive); } + }); + }, + sizzle:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return Sizzle(sel, n); + }; + } + }, + sly:function(){ + if(typeof document.querySelector === 'undefined'){ + $p.plugins.find = function(n, sel){ + return Sly(sel, n); + }; + } + } +}; + +// get lib specifics if available +(function(){ + var libkey = + typeof dojo !== 'undefined' && 'dojo' || + typeof DOMAssistant !== 'undefined' && 'domassistant' || + typeof jQuery !== 'undefined' && 'jquery' || + typeof MooTools !== 'undefined' && 'mootools' || + typeof Prototype !== 'undefined' && 'prototype' || + typeof Sizzle !== 'undefined' && 'sizzle' || + typeof Sly !== 'undefined' && 'sly'; + + libkey && $p.libs[libkey](); +})();
\ No newline at end of file diff --git a/js/raphael-min.js b/js/raphael-min.js new file mode 100755 index 0000000..eac42bb --- /dev/null +++ b/js/raphael-min.js @@ -0,0 +1,7 @@ +/* + * Raphael 1.0 RC1.4 - JavaScript Vector Library + * + * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +window.Raphael=(function(){var Y=/[, ]+/,g=document,L=window,P={was:"Raphael" in window,is:window.Raphael},f=function(){return l.apply(f,arguments);},b={},q={"clip-rect":"0 0 10e9 10e9",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},u={"clip-rect":"csv",cx:"number",cy:"number",fill:"colour","fill-opacity":"number","font-size":"number",height:"number",opacity:"number",path:"path",r:"number",rotation:"csv",rx:"number",ry:"number",scale:"csv",stroke:"colour","stroke-opacity":"number","stroke-width":"number",translation:"csv",width:"number",x:"number",y:"number"},v=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup"];f.version="1.0 RC1.4";f.type=(window.SVGAngle||document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML");f.svg=!(f.vml=f.type=="VML");f.idGenerator=0;f.fn={};f.is=function(i,e){e=(e+"").toLowerCase();if(e=="undefined"&&typeof i=="undefined"){return true;}if(i==null&&e=="null"){return true;}return Object.prototype.toString.call(i).replace(/^\[object\s+|\]$/gi,"").toLowerCase()==e;};f.setWindow=function(e){L=e;g=L.document;};f.hsb2rgb=X(function(af,ad,aj){if(f.is(af,"object")&&"h" in af&&"s" in af&&"b" in af){aj=af.b;ad=af.s;af=af.h;}var aa,ab,ak;if(aj==0){return{r:0,g:0,b:0,hex:"#000"};}if(af>1||ad>1||aj>1){af/=255;ad/=255;aj/=255;}var ac=Math.floor(af*6),ag=(af*6)-ac,Z=aj*(1-ad),R=aj*(1-(ad*ag)),al=aj*(1-(ad*(1-ag)));aa=[aj,R,Z,Z,al,aj,aj][ac];ab=[al,aj,aj,R,Z,Z,al][ac];ak=[Z,Z,al,aj,aj,R,Z][ac];aa*=255;ab*=255;ak*=255;var ah={r:aa,g:ab,b:ak},e=Math.round(aa).toString(16),ae=Math.round(ab).toString(16),ai=Math.round(ak).toString(16);if(e.length==1){e="0"+e;}if(ae.length==1){ae="0"+ae;}if(ai.length==1){ai="0"+ai;}ah.hex="#"+e+ae+ai;return ah;},f);f.rgb2hsb=X(function(e,i,ad){if(f.is(e,"object")&&"r" in e&&"g" in e&&"b" in e){ad=e.b;i=e.g;e=e.r;}if(f.is(e,"string")){var af=f.getRGB(e);e=af.r;i=af.g;ad=af.b;}if(e>1||i>1||ad>1){e/=255;i/=255;ad/=255;}var ac=Math.max(e,i,ad),R=Math.min(e,i,ad),aa,Z,ab=ac;if(R==ac){return{h:0,s:0,b:ac};}else{var ae=(ac-R);Z=ae/ac;if(e==ac){aa=(i-ad)/ae;}else{if(i==ac){aa=2+((ad-e)/ae);}else{aa=4+((e-i)/ae);}}aa/=6;if(aa<0){aa+=1;}if(aa>1){aa-=1;}}return{h:aa,s:Z,b:ab};},f);f._path2string=function(){var Z="",ac;for(var R=0,aa=this.length;R<aa;R++){for(var e=0,ab=this[R].length;e<ab;e++){Z+=this[R][e];e&&e!=ab-1&&(Z+=",");}R!=aa-1&&(Z+="\n");}return Z.replace(/,(?=-)/g,"");};function X(Z,i,e){function R(){var aa=Array.prototype.splice.call(arguments,0,arguments.length),ab=aa.join("\u25ba");R.cache=R.cache||{};R.count=R.count||[];if(ab in R.cache){return e?e(R.cache[ab]):R.cache[ab];}if(R.count.length>1000){delete R.cache[R.count.unshift()];}R.count.push(ab);R.cache[ab]=Z.apply(i,aa);return e?e(R.cache[ab]):R.cache[ab];}return R;}f.getRGB=X(function(e){var af={aliceblue:"#f0f8ff",amethyst:"#96c",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},ab;if((e+"").toLowerCase() in af){e=af[e.toString().toLowerCase()];}if(!e){return{r:0,g:0,b:0,hex:"#000"};}if(e=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}var R,Z,ae,ac=(e+"").match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);if(ac){if(ac[2]){ae=parseInt(ac[2].substring(5),16);Z=parseInt(ac[2].substring(3,5),16);R=parseInt(ac[2].substring(1,3),16);}if(ac[3]){ae=parseInt(ac[3].substring(3)+ac[3].substring(3),16);Z=parseInt(ac[3].substring(2,3)+ac[3].substring(2,3),16);R=parseInt(ac[3].substring(1,2)+ac[3].substring(1,2),16);}if(ac[4]){ac=ac[4].split(/\s*,\s*/);R=parseFloat(ac[0]);Z=parseFloat(ac[1]);ae=parseFloat(ac[2]);}if(ac[5]){ac=ac[5].split(/\s*,\s*/);R=parseFloat(ac[0])*2.55;Z=parseFloat(ac[1])*2.55;ae=parseFloat(ac[2])*2.55;}if(ac[6]){ac=ac[6].split(/\s*,\s*/);R=parseFloat(ac[0]);Z=parseFloat(ac[1]);ae=parseFloat(ac[2]);return f.hsb2rgb(R,Z,ae);}if(ac[7]){ac=ac[7].split(/\s*,\s*/);R=parseFloat(ac[0])*2.55;Z=parseFloat(ac[1])*2.55;ae=parseFloat(ac[2])*2.55;return f.hsb2rgb(R,Z,ae);}ac={r:R,g:Z,b:ae};var i=Math.round(R).toString(16),aa=Math.round(Z).toString(16),ad=Math.round(ae).toString(16);(i.length==1)&&(i="0"+i);(aa.length==1)&&(aa="0"+aa);(ad.length==1)&&(ad="0"+ad);ac.hex="#"+i+aa+ad;ab=ac;}else{ab={r:-1,g:-1,b:-1,hex:"none"};}return ab;},f);f.getColor=function(i){var R=this.getColor.start=this.getColor.start||{h:0,s:1,b:i||0.75},e=this.hsb2rgb(R.h,R.s,R.b);R.h+=0.075;if(R.h>1){R.h=0;R.s-=0.2;if(R.s<=0){this.getColor.start={h:0,s:1,b:R.b};}}return e.hex;};f.getColor.reset=function(){delete this.start;};f.parsePathString=X(function(e){if(!e){return null;}var R={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=[];if(f.is(e,"array")&&f.is(e[0],"array")){i=t(e);}if(!i.length){(e+"").replace(/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(aa,Z,ad){var ac=[],ab=Z.toLowerCase();ad.replace(/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(af,ae){ae&&ac.push(+ae);});while(ac.length>=R[ab]){i.push([Z].concat(ac.splice(0,R[ab])));if(!R[ab]){break;}}});}i.toString=f._path2string;return i;});var C=X(function(ag){if(!ag){return{x:0,y:0,width:0,height:0};}ag=O(ag);var ad=0,ac=0,Z=[],R=[];for(var aa=0,af=ag.length;aa<af;aa++){if(ag[aa][0]=="M"){ad=ag[aa][1];ac=ag[aa][2];Z.push(ad);R.push(ac);}else{var ab=J(ad,ac,ag[aa][1],ag[aa][2],ag[aa][3],ag[aa][4],ag[aa][5],ag[aa][6]);Z=Z.concat(ab.min.x,ab.max.x);R=R.concat(ab.min.y,ab.max.y);}}var e=Math.min.apply(0,Z),ae=Math.min.apply(0,R);return{x:e,y:ae,width:Math.max.apply(0,Z)-e,height:Math.max.apply(0,R)-ae};}),t=function(ac){var Z=[];if(!f.is(ac,"array")||!f.is(ac&&ac[0],"array")){ac=f.parsePathString(ac);}for(var R=0,aa=ac.length;R<aa;R++){Z[R]=[];for(var e=0,ab=ac[R].length;e<ab;e++){Z[R][e]=ac[R][e];}}Z.toString=f._path2string;return Z;},c=X(function(aa){if(!f.is(aa,"array")||!f.is(aa&&aa[0],"array")){aa=f.parsePathString(aa);}var ag=[],ai=0,ah=0,al=0,ak=0,Z=0;if(aa[0][0]=="M"){ai=aa[0][1];ah=aa[0][2];al=ai;ak=ah;Z++;ag.push(["M",ai,ah]);}for(var ad=Z,am=aa.length;ad<am;ad++){var e=ag[ad]=[],aj=aa[ad];if(aj[0]!=aj[0].toLowerCase()){e[0]=aj[0].toLowerCase();switch(e[0]){case"a":e[1]=aj[1];e[2]=aj[2];e[3]=aj[3];e[4]=aj[4];e[5]=aj[5];e[6]=+(aj[6]-ai).toFixed(3);e[7]=+(aj[7]-ah).toFixed(3);break;case"v":e[1]=+(aj[1]-ah).toFixed(3);break;case"m":al=aj[1];ak=aj[2];default:for(var ac=1,ae=aj.length;ac<ae;ac++){e[ac]=+(aj[ac]-((ac%2)?ai:ah)).toFixed(3);}}}else{e=ag[ad]=[];if(aj[0]=="m"){al=aj[1]+ai;ak=aj[2]+ah;}for(var ab=0,R=aj.length;ab<R;ab++){ag[ad][ab]=aj[ab];}}var af=ag[ad].length;switch(ag[ad][0]){case"z":ai=al;ah=ak;break;case"h":ai+=+ag[ad][af-1];break;case"v":ah+=+ag[ad][af-1];break;default:ai+=+ag[ad][af-2];ah+=+ag[ad][af-1];}}ag.toString=f._path2string;return ag;},0,t),w=X(function(aa){if(!f.is(aa,"array")||!f.is(aa&&aa[0],"array")){aa=f.parsePathString(aa);}var af=[],ah=0,ag=0,ak=0,aj=0,Z=0;if(aa[0][0]=="M"){ah=+aa[0][1];ag=+aa[0][2];ak=ah;aj=ag;Z++;af[0]=["M",ah,ag];}for(var ad=Z,al=aa.length;ad<al;ad++){var e=af[ad]=[],ai=aa[ad];if(ai[0]!=(ai[0]+"").toUpperCase()){e[0]=(ai[0]+"").toUpperCase();switch(e[0]){case"A":e[1]=ai[1];e[2]=ai[2];e[3]=ai[3];e[4]=ai[4];e[5]=ai[5];e[6]=+(ai[6]+ah);e[7]=+(ai[7]+ag);break;case"V":e[1]=+ai[1]+ag;break;case"H":e[1]=+ai[1]+ah;break;case"M":ak=+ai[1]+ah;aj=+ai[2]+ag;default:for(var ac=1,ae=ai.length;ac<ae;ac++){e[ac]=+ai[ac]+((ac%2)?ah:ag);}}}else{for(var ab=0,R=ai.length;ab<R;ab++){af[ad][ab]=ai[ab];}}switch(e[0]){case"Z":ah=ak;ag=aj;break;case"H":ah=e[1];break;case"V":ag=e[1];break;default:ah=af[ad][af[ad].length-2];ag=af[ad][af[ad].length-1];}}af.toString=f._path2string;return af;},null,t),d=function(i,Z,e,R){return[i,Z,e,R,e,R];},x=function(i,Z,ab,aa,e,R){return[2/3*i+1/3*ab,2/3*Z+1/3*aa,2/3*i+1/3*e,2/3*Z+1/3*R,e,R];},r=function(ak,aP,au,ar,al,af,aa,aj,aO,am){var aq=Math.PI*120/180,e=Math.PI/180*(+al||0),ay=[],av,aL=X(function(aQ,aT,i){var aS=aQ*Math.cos(i)-aT*Math.sin(i),aR=aQ*Math.sin(i)+aT*Math.cos(i);return{x:aS,y:aR};});if(!am){av=aL(ak,aP,-e);ak=av.x;aP=av.y;av=aL(aj,aO,-e);aj=av.x;aO=av.y;var R=Math.cos(Math.PI/180*al),ah=Math.sin(Math.PI/180*al),aA=(ak-aj)/2,az=(aP-aO)/2;au=Math.max(au,Math.abs(aA));ar=Math.max(ar,Math.abs(az));var Z=au*au,aD=ar*ar,aF=(af==aa?-1:1)*Math.sqrt(Math.abs((Z*aD-Z*az*az-aD*aA*aA)/(Z*az*az+aD*aA*aA))),ao=aF*au*az/ar+(ak+aj)/2,an=aF*-ar*aA/au+(aP+aO)/2,ae=Math.asin((aP-an)/ar),ad=Math.asin((aO-an)/ar);ae=ak<ao?Math.PI-ae:ae;ad=aj<ao?Math.PI-ad:ad;ae<0&&(ae=Math.PI*2+ae);ad<0&&(ad=Math.PI*2+ad);if(aa&&ae>ad){ae=ae-Math.PI*2;}if(!aa&&ad>ae){ad=ad-Math.PI*2;}}else{ae=am[0];ad=am[1];ao=am[2];an=am[3];}var ai=ad-ae;if(Math.abs(ai)>aq){var ap=ad,at=aj,ag=aO;ad=ae+aq*(aa&&ad>ae?1:-1);aj=ao+au*Math.cos(ad);aO=an+ar*Math.sin(ad);ay=r(aj,aO,au,ar,al,0,aa,at,ag,[ad,ap,ao,an]);}ai=ad-ae;var ac=Math.cos(ae),aN=Math.sin(ae),ab=Math.cos(ad),aM=Math.sin(ad),aB=Math.tan(ai/4),aE=4/3*au*aB,aC=4/3*ar*aB,aK=[ak,aP],aJ=[ak+aE*aN,aP-aC*ac],aI=[aj+aE*aM,aO-aC*ab],aG=[aj,aO];aJ[0]=2*aK[0]-aJ[0];aJ[1]=2*aK[1]-aJ[1];if(am){return[aJ,aI,aG].concat(ay);}else{ay=[aJ,aI,aG].concat(ay).join(",").split(",");var aw=[];for(var aH=0,ax=ay.length;aH<ax;aH++){aw[aH]=aH%2?aL(ay[aH-1],ay[aH],e).y:aL(ay[aH],ay[aH+1],e).x;}return aw;}},A=X(function(i,e,ao,am,ab,aa,ad,ac,ai){var ag=Math.pow(1-ai,3)*i+Math.pow(1-ai,2)*3*ai*ao+(1-ai)*3*ai*ai*ab+Math.pow(ai,3)*ad,ae=Math.pow(1-ai,3)*e+Math.pow(1-ai,2)*3*ai*am+(1-ai)*3*ai*ai*aa+Math.pow(ai,3)*ac,ak=i+2*ai*(ao-i)+ai*ai*(ab-2*ao+i),aj=e+2*ai*(am-e)+ai*ai*(aa-2*am+e),an=ao+2*ai*(ab-ao)+ai*ai*(ad-2*ab+ao),al=am+2*ai*(aa-am)+ai*ai*(ac-2*aa+am),ah=(1-ai)*i+ai*ao,af=(1-ai)*e+ai*am,Z=(1-ai)*ab+ai*ad,R=(1-ai)*aa+ai*ac;return{x:ag,y:ae,m:{x:ak,y:aj},n:{x:an,y:al},start:{x:ah,y:af},end:{x:Z,y:R}};}),J=X(function(i,e,Z,R,am,al,ai,af){var ak=(am-2*Z+i)-(ai-2*am+Z),ah=2*(Z-i)-2*(am-Z),ae=i-Z,ac=(-ah+Math.sqrt(ah*ah-4*ak*ae))/2/ak,aa=(-ah-Math.sqrt(ah*ah-4*ak*ae))/2/ak,ag=[e,af],aj=[i,ai],ad=A(i,e,Z,R,am,al,ai,af,ac>0&&ac<1?ac:0),ab=A(i,e,Z,R,am,al,ai,af,aa>0&&aa<1?aa:0);aj=aj.concat(ad.x,ab.x);ag=ag.concat(ad.y,ab.y);ak=(al-2*R+e)-(af-2*al+R);ah=2*(R-e)-2*(al-R);ae=e-R;ac=(-ah+Math.sqrt(ah*ah-4*ak*ae))/2/ak;aa=(-ah-Math.sqrt(ah*ah-4*ak*ae))/2/ak;ad=A(i,e,Z,R,am,al,ai,af,ac>0&&ac<1?ac:0);ab=A(i,e,Z,R,am,al,ai,af,aa>0&&aa<1?aa:0);aj=aj.concat(ad.x,ab.x);ag=ag.concat(ad.y,ab.y);return{min:{x:Math.min.apply(Math,aj),y:Math.min.apply(Math,ag)},max:{x:Math.max.apply(Math,aj),y:Math.max.apply(Math,ag)}};}),O=X(function(al,ag){var aa=w(al),ah=ag&&w(ag),ai={x:0,y:0,bx:0,by:0,X:0,Y:0},e={x:0,y:0,bx:0,by:0,X:0,Y:0},ac=function(am,an){var i,ao;if(!am){return["C",an.x,an.y,an.x,an.y,an.x,an.y];}switch(am[0]){case"M":an.X=am[1];an.Y=am[2];break;case"A":am=["C"].concat(r.apply(0,[an.x,an.y].concat(am.slice(1))));break;case"S":i=an.x+(an.x-(an.bx||an.x));ao=an.y+(an.y-(an.by||an.y));am=["C",i,ao].concat(am.slice(1));break;case"T":i=an.x+(an.x-(an.bx||an.x));ao=an.y+(an.y-(an.by||an.y));am=["C"].concat(x(an.x,an.y,i,ao,am[1],am[2]));break;case"Q":am=["C"].concat(x(an.x,an.y,am[1],am[2],am[3],am[4]));break;case"L":am=["C"].concat(d(an.x,an.y,am[1],am[2]));break;case"H":am=["C"].concat(d(an.x,an.y,am[1],an.y));break;case"V":am=["C"].concat(d(an.x,an.y,an.x,am[1]));break;case"Z":am=["C"].concat(d(an.x,an.y,an.X,an.Y));break;}return am;},R=function(am,an){if(am[an].length>7){am[an].shift();var ao=am[an];while(ao.length){am.splice(an++,0,["C"].concat(ao.splice(0,6)));}am.splice(an,1);aj=Math.max(aa.length,ah&&ah.length||0);}},Z=function(aq,ap,an,am,ao){if(aq&&ap&&aq[ao][0]=="M"&&ap[ao][0]!="M"){ap.splice(ao,0,["M",am.x,am.y]);an.bx=0;an.by=0;an.x=aq[ao][1];an.y=aq[ao][2];aj=Math.max(aa.length,ah&&ah.length||0);}};for(var ae=0,aj=Math.max(aa.length,ah&&ah.length||0);ae<aj;ae++){aa[ae]=ac(aa[ae],ai);R(aa,ae);ah&&(ah[ae]=ac(ah[ae],e));ah&&R(ah,ae);Z(aa,ah,ai,e,ae);Z(ah,aa,e,ai,ae);var ad=aa[ae],ak=ah&&ah[ae],ab=ad.length,af=ah&&ak.length;ai.bx=ad[ab-4]||0;ai.by=ad[ab-3]||0;ai.x=ad[ab-2];ai.y=ad[ab-1];e.bx=ah&&(ak[af-4]||0);e.by=ah&&(ak[af-3]||0);e.x=ah&&ak[af-2];e.y=ah&&ak[af-1];}return ah?[aa,ah]:aa;},null,t),n=X(function(ah){if(f.is(ah,"string")){ah=ah.split(/\s*\-\s*/);var Z=ah.shift();if(Z.toLowerCase()=="v"){Z=90;}else{if(Z.toLowerCase()=="h"){Z=0;}else{Z=parseFloat(Z);}}Z=-Z;var af={angle:Z,type:"linear",dots:[],vector:[0,0,Math.cos(Z*Math.PI/180).toFixed(3),Math.sin(Z*Math.PI/180).toFixed(3)]},ag=1/(Math.max(Math.abs(af.vector[2]),Math.abs(af.vector[3]))||1);af.vector[2]*=ag;af.vector[3]*=ag;if(af.vector[2]<0){af.vector[0]=-af.vector[2];af.vector[2]=0;}if(af.vector[3]<0){af.vector[1]=-af.vector[3];af.vector[3]=0;}af.vector[0]=af.vector[0];af.vector[1]=af.vector[1];af.vector[2]=af.vector[2];af.vector[3]=af.vector[3];for(var ac=0,ai=ah.length;ac<ai;ac++){var e={},ae=ah[ac].match(/^([^:]*):?([\d\.]*)/);e.color=f.getRGB(ae[1]).hex;ae[2]&&(e.offset=ae[2]+"%");af.dots.push(e);}for(var ac=1,ai=af.dots.length-1;ac<ai;ac++){if(!af.dots[ac].offset){var R=parseFloat(af.dots[ac-1].offset||0),aa=false;for(var ab=ac+1;ab<ai;ab++){if(af.dots[ab].offset){aa=af.dots[ab].offset;break;}}if(!aa){aa=100;ab=ai;}aa=parseFloat(aa);var ad=(aa-R)/(ab-ac+1);for(;ac<ab;ac++){R+=ad;af.dots[ac].offset=R+"%";}}}return af;}else{return ah;}}),G=function(){var R,i,aa,Z,e;if(f.is(arguments[0],"string")||f.is(arguments[0],"object")){if(f.is(arguments[0],"string")){R=g.getElementById(arguments[0]);}else{R=arguments[0];}if(R.tagName){if(arguments[1]==null){return{container:R,width:R.style.pixelWidth||R.offsetWidth,height:R.style.pixelHeight||R.offsetHeight};}else{return{container:R,width:arguments[1],height:arguments[2]};}}}else{if(f.is(arguments[0],"number")&&arguments.length>3){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},a=function(e,R){var i=this;for(var Z in R){if(R.hasOwnProperty(Z)&&!(Z in e)){switch(typeof R[Z]){case"function":(function(aa){e[Z]=e===i?aa:function(){return aa.apply(i,arguments);};})(R[Z]);break;case"object":e[Z]=e[Z]||{};a.call(this,e[Z],R[Z]);break;default:e[Z]=R[Z];break;}}}};if(f.svg){b.svgns="http://www.w3.org/2000/svg";b.xlink="http://www.w3.org/1999/xlink";var N=function(e){return +e+(Math.floor(e)==e)*0.5;};var z=function(ab){for(var R=0,Z=ab.length;R<Z;R++){if(ab[R][0].toLowerCase()!="a"){for(var e=1,aa=ab[R].length;e<aa;e++){ab[R][e]=N(ab[R][e]);}}else{ab[R][6]=N(ab[R][6]);ab[R][7]=N(ab[R][7]);}}return ab;};var B=function(R,e){if(e){for(var i in e){if(e.hasOwnProperty(i)){R.setAttribute(i,e[i]);}}}else{return g.createElementNS(b.svgns,R);}};f.toString=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version;};var W=function(e,Z){var i=B("path");Z.canvas&&Z.canvas.appendChild(i);var R=new m(i,Z);R.type="path";F(R,{fill:"none",stroke:"#000",path:e});return R;};var M=function(ad,ab,ae){ab=n(ab);var aa=B((ab.type||"linear")+"Gradient");aa.id="r"+(f.idGenerator++).toString(36);if(ab.vector&&ab.vector.length){B(aa,{x1:ab.vector[0],y1:ab.vector[1],x2:ab.vector[2],y2:ab.vector[3]});}ae.defs.appendChild(aa);var ac=true;for(var R=0,Z=ab.dots.length;R<Z;R++){var e=B("stop");if(ab.dots[R].offset){ac=false;}B(e,{offset:ab.dots[R].offset?ab.dots[R].offset:(R==0)?"0%":"100%","stop-color":f.getRGB(ab.dots[R].color).hex||"#fff"});aa.appendChild(e);}if(ac&&ab.dots[Z-1].opacity!=null){B(e,{"stop-opacity":ab.dots[Z-1].opacity});}B(ad,{fill:"url(#"+aa.id+")",opacity:1,"fill-opacity":1});ad.style.fill="";ad.style.opacity=1;ad.style.fillOpacity=1;};var s=function(i){var e=i.getBBox();B(i.pattern,{patternTransform:f.format("translate({0},{1})",e.x,e.y)});};var F=function(ah,aq){var ak={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},am=ah.node,ai=ah.attrs,ae=ah.attr("rotation"),ab=function(ay,ax){ax=ak[(ax+"").toLowerCase()];if(ax){var av=ay.attrs["stroke-width"]||"1",at={round:av,square:av,butt:0}[ay.attrs["stroke-linecap"]||aq["stroke-linecap"]]||0,aw=[];var au=ax.length;while(au--){aw[au]=ax[au]*av+((au%2)?1:-1)*at;}B(am,{"stroke-dasharray":aw.join(",")});}};parseFloat(ae)&&ah.rotate(0,true);for(var al in aq){if(aq.hasOwnProperty(al)){if(!(al in q)){continue;}var aj=aq[al];ai[al]=aj;switch(al){case"href":case"title":case"target":var ao=am.parentNode;if(ao.tagName.toLowerCase()!="a"){var Z=B("a");ao.insertBefore(Z,am);Z.appendChild(am);ao=Z;}ao.setAttributeNS(ah.paper.xlink,al,aj);break;case"clip-rect":var i=(aj+"").split(Y);if(i.length==4){ah.clip&&ah.clip.parentNode.parentNode.removeChild(ah.clip.parentNode);var R=B("clipPath"),an=B("rect");R.id="r"+(f.idGenerator++).toString(36);B(an,{x:i[0],y:i[1],width:i[2],height:i[3]});R.appendChild(an);ah.paper.defs.appendChild(R);B(am,{"clip-path":"url(#"+R.id+")"});ah.clip=an;}if(!aj){var ap=g.getElementById(am.getAttribute("clip-path").replace(/(^url\(#|\)$)/g,""));ap&&ap.parentNode.removeChild(ap);B(am,{"clip-path":""});delete ah.clip;}break;case"path":if(aj&&ah.type=="path"){ai.path=z(w(aj));B(am,{d:ai.path});}case"width":am.setAttribute(al,aj);if(ai.fx){al="x";aj=ai.x;}else{break;}case"x":if(ai.fx){aj=-ai.x-(ai.width||0);}case"rx":if(al=="rx"&&ah.type=="rect"){break;}case"cx":am.setAttribute(al,aj);ah.pattern&&s(ah);break;case"height":am.setAttribute(al,aj);if(ai.fy){al="y";aj=ai.y;}else{break;}case"y":if(ai.fy){aj=-ai.y-(ai.height||0);}case"ry":if(al=="ry"&&ah.type=="rect"){break;}case"cy":am.setAttribute(al,aj);ah.pattern&&s(ah);break;case"r":if(ah.type=="rect"){B(am,{rx:aj,ry:aj});}else{am.setAttribute(al,aj);}break;case"src":if(ah.type=="image"){am.setAttributeNS(ah.paper.xlink,"href",aj);}break;case"stroke-width":am.style.strokeWidth=aj;am.setAttribute(al,aj);if(ai["stroke-dasharray"]){ab(ah,ai["stroke-dasharray"]);}break;case"stroke-dasharray":ab(ah,aj);break;case"rotation":ae=aj;ah.rotate(aj,true);break;case"translation":var ac=(aj+"").split(Y);ah.translate((+ac[0]+1||2)-1,(+ac[1]+1||2)-1);break;case"scale":var ac=(aj+"").split(Y);ah.scale(+ac[0]||1,+ac[1]||+ac[0]||1,+ac[2]||null,+ac[3]||null);break;case"fill":var aa=(aj+"").match(/^url\(['"]?([^\)]+)['"]?\)$/i);if(aa){var R=B("pattern"),ag=B("image");R.id="r"+(f.idGenerator++).toString(36);B(R,{x:0,y:0,patternUnits:"userSpaceOnUse"});B(ag,{x:0,y:0});ag.setAttributeNS(ah.paper.xlink,"href",aa[1]);R.appendChild(ag);var ar=g.createElement("img");ar.style.position="absolute";ar.style.top="-9999em";ar.style.left="-9999em";ar.onload=function(){B(R,{width:this.offsetWidth,height:this.offsetHeight});B(ag,{width:this.offsetWidth,height:this.offsetHeight});g.body.removeChild(this);b.safari();};g.body.appendChild(ar);ar.src=aa[1];ah.paper.defs.appendChild(R);am.style.fill="url(#"+R.id+")";B(am,{fill:"url(#"+R.id+")"});ah.pattern=R;ah.pattern&&s(ah);break;}delete aq.gradient;delete ai.gradient;if(!f.is(ai.opacity,"undefined")&&f.is(aq.opacity,"undefined")){am.style.opacity=ai.opacity;B(am,{opacity:ai.opacity});}if(!f.is(ai["fill-opacity"],"undefined")&&f.is(aq["fill-opacity"],"undefined")){am.style.fillOpacity=ai["fill-opacity"];B(am,{"fill-opacity":ai["fill-opacity"]});}case"stroke":am.style[al]=f.getRGB(aj).hex;am.setAttribute(al,f.getRGB(aj).hex);break;case"gradient":M(am,aj,ah.paper);break;case"opacity":case"fill-opacity":if(ai.gradient){var e=g.getElementById(am.getAttribute("fill").replace(/^url\(#|\)$/g,""));if(e){var ad=e.getElementsByTagName("stop");ad[ad.length-1].setAttribute("stop-opacity",aj);}break;}default:al=="font-size"&&(aj=parseInt(aj,10)+"px");var af=al.replace(/(\-.)/g,function(at){return at.substring(1).toUpperCase();});am.style[af]=aj;am.setAttribute(al,aj);break;}}}T(ah,aq);parseInt(ae,10)&&ah.rotate(ae,true);};var K=1.2;var T=function(e,aa){if(e.type!="text"||!("text" in aa||"font" in aa||"font-size" in aa||"x" in aa||"y" in aa)){return;}var af=e.attrs,R=e.node,ah=R.firstChild?parseInt(g.defaultView.getComputedStyle(R.firstChild,"").getPropertyValue("font-size"),10):10;if("text" in aa){while(R.firstChild){R.removeChild(R.firstChild);}var Z=(aa.text+"").split("\n");for(var ab=0,ag=Z.length;ab<ag;ab++){var ad=B("tspan");ab&&B(ad,{dy:ah*K,x:af.x});ad.appendChild(g.createTextNode(Z[ab]));R.appendChild(ad);}}else{var Z=R.getElementsByTagName("tspan");for(var ab=0,ag=Z.length;ab<ag;ab++){ab&&B(Z[ab],{dy:ah*K,x:af.x});}}B(R,{y:af.y});var ac=e.getBBox(),ae=af.y-(ac.y+ac.height/2);ae&&B(R,{y:af.y+ae});};var m=function(i,e){var Z=0,R=0;this[0]=i;this.node=i;this.paper=e;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};};m.prototype.rotate=function(i,e,Z){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}var R=this.getBBox();i=(i+"").split(Y);if(i.length-1){e=parseFloat(i[1]);Z=parseFloat(i[2]);}i=parseFloat(i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}(Z==null)&&(e=null);this._.rt.cx=e;this._.rt.cy=Z;e=e==null?R.x+R.width/2:e;Z=Z==null?R.y+R.height/2:Z;if(this._.rt.deg){this.transformations[0]=f.format("rotate({0} {1} {2})",this._.rt.deg,e,Z);this.clip&&B(this.clip,{transform:f.format("rotate({0} {1} {2})",-this._.rt.deg,e,Z)});}else{this.transformations[0]="";this.clip&&B(this.clip,{transform:""});}B(this.node,{transform:this.transformations.join(" ")});return this;};m.prototype.hide=function(){this.node.style.display="none";return this;};m.prototype.show=function(){this.node.style.display="block";return this;};m.prototype.remove=function(){this.node.parentNode.removeChild(this.node);};m.prototype.getBBox=function(){if(this.type=="path"){return C(this.attrs.path);}if(this.node.style.display=="none"){this.show();var Z=true;}var ad={};try{ad=this.node.getBBox();}catch(ab){}finally{ad=ad||{};}if(this.type=="text"){ad={x:ad.x,y:Infinity,width:ad.width,height:0};for(var R=0,aa=this.node.getNumberOfChars();R<aa;R++){var ac=this.node.getExtentOfChar(R);(ac.y<ad.y)&&(ad.y=ac.y);(ac.y+ac.height-ad.y>ad.height)&&(ad.height=ac.y+ac.height-ad.y);}}Z&&this.hide();return ad;};m.prototype.attr=function(){if(arguments.length==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(arguments.length==1&&f.is(arguments[0],"array")){var e={};for(var i in arguments[0]){if(arguments[0].hasOwnProperty(i)){e[arguments[0][i]]=this.attrs[arguments[0][i]];}}return e;}if(arguments.length==2){var R={};R[arguments[0]]=arguments[1];F(this,R);}else{if(arguments.length==1&&f.is(arguments[0],"object")){F(this,arguments[0]);}}return this;};m.prototype.toFront=function(){this.node.parentNode.appendChild(this.node);return this;};m.prototype.toBack=function(){if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);}return this;};m.prototype.insertAfter=function(e){if(e.node.nextSibling){e.node.parentNode.insertBefore(this.node,e.node.nextSibling);}else{e.node.parentNode.appendChild(this.node);}return this;};m.prototype.insertBefore=function(e){var i=e.node;i.parentNode.insertBefore(this.node,i);return this;};m.prototype.blur=function(e){if(e!="none"){var i=B("filter"),R=B("feGaussianBlur");i.id="r"+(f.idGenerator++).toString(36);B(R,{stdDeviation:+e||1.5});i.appendChild(R);this.paper.defs.appendChild(i);this._blur=i;B(this.node,{filter:"url(#"+i.id+")"});}else{if(this._blur){this._blur.parentNode.removeChild(this._blur);delete this._blur;}this.node.removeAttribute("filter");}};var D=function(i,e,ab,aa){e=N(e);ab=N(ab);var Z=B("circle");i.canvas&&i.canvas.appendChild(Z);var R=new m(Z,i);R.attrs={cx:e,cy:ab,r:aa,fill:"none",stroke:"#000"};R.type="circle";B(Z,R.attrs);return R;};var I=function(R,e,ad,i,ab,ac){e=N(e);ad=N(ad);var aa=B("rect");R.canvas&&R.canvas.appendChild(aa);var Z=new m(aa,R);Z.attrs={x:e,y:ad,width:i,height:ab,r:ac||0,rx:ac||0,ry:ac||0,fill:"none",stroke:"#000"};Z.type="rect";B(aa,Z.attrs);return Z;};var h=function(i,e,ac,ab,aa){e=N(e);ac=N(ac);var Z=B("ellipse");i.canvas&&i.canvas.appendChild(Z);var R=new m(Z,i);R.attrs={cx:e,cy:ac,rx:ab,ry:aa,fill:"none",stroke:"#000"};R.type="ellipse";B(Z,R.attrs);return R;};var p=function(R,ac,e,ad,i,ab){var aa=B("image");B(aa,{x:e,y:ad,width:i,height:ab,preserveAspectRatio:"none"});aa.setAttributeNS(R.xlink,"href",ac);R.canvas&&R.canvas.appendChild(aa);var Z=new m(aa,R);Z.attrs={x:e,y:ad,width:i,height:ab,src:ac};Z.type="image";return Z;};var H=function(i,e,ab,aa){var Z=B("text");B(Z,{x:e,y:ab,"text-anchor":"middle"});i.canvas&&i.canvas.appendChild(Z);var R=new m(Z,i);R.attrs={x:e,y:ab,"text-anchor":"middle",text:aa,font:q.font,stroke:"none",fill:"#000"};R.type="text";F(R,R.attrs);return R;};var E=function(i,e){this.width=i||this.width;this.height=e||this.height;this.canvas.setAttribute("width",this.width);this.canvas.setAttribute("height",this.height);return this;};var l=function(){var aa=G.apply(null,arguments),R=aa.container,ac=aa.x,ab=aa.y,Z=aa.width,ad=aa.height;if(!R){throw new Error("SVG container not found.");}b.canvas=B("svg");var e=b.canvas,ae=e.style;e.setAttribute("width",Z||512);b.width=Z||512;e.setAttribute("height",ad||342);b.height=ad||342;if(R==1){g.body.appendChild(e);ae.position="absolute";ae.left=ac+"px";ae.top=ab+"px";}else{if(R.firstChild){R.insertBefore(e,R.firstChild);}else{R.appendChild(e);}}R={canvas:e,clear:function(){while(this.canvas.firstChild){this.canvas.removeChild(this.canvas.firstChild);}this.desc=B("desc");this.defs=B("defs");this.desc.appendChild(g.createTextNode("Created with Rapha\u00ebl"));this.canvas.appendChild(this.desc);this.canvas.appendChild(this.defs);}};for(var i in b){if(b.hasOwnProperty(i)){if(i!="create"){R[i]=b[i];}}}a.call(R,R,f.fn);R.clear();R.raphael=f;return R;};b.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);};if({"Apple Computer, Inc.":1,"Google Inc.":1}[navigator.vendor]){b.safari=function(){var e=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){e.remove();});};}else{b.safari=function(){};}}if(f.vml){var y=function(ac){var aa=O(ac);for(var R=0,Z=aa.length;R<Z;R++){aa[R][0]=(aa[R][0]+"").toLowerCase();aa[R][0]=="z"&&(aa[R][0]="x");for(var e=1,ab=aa[R].length;e<ab;e++){aa[R][e]=Math.round(aa[R][e]);}}return(aa+"");};f.toString=function(){return"Your browser doesn\u2019t support SVG. Assuming it is Internet Explorer and falling down to VML.\nYou are running Rapha\u00ebl "+this.version;};var W=function(e,ab){var Z=V("group"),ac=Z.style;ac.position="absolute";ac.left=0;ac.top=0;ac.width=ab.width+"px";ac.height=ab.height+"px";Z.coordsize=ab.coordsize;Z.coordorigin=ab.coordorigin;var R=V("shape"),i=R.style;i.width=ab.width+"px";i.height=ab.height+"px";R.path="";R.coordsize=this.coordsize;R.coordorigin=this.coordorigin;Z.appendChild(R);var aa=new m(R,Z,ab);aa.isAbsolute=true;aa.type="path";aa.path=[];aa.Path="";if(e){aa.attrs.path=f.parsePathString(e);aa.node.path=y(aa.attrs.path);}F(aa,{fill:"none",stroke:"#000"});aa.setBox();ab.canvas.appendChild(Z);return aa;};var F=function(af,aj){af.attrs=af.attrs||{};var ah=af.node,ak=af.attrs,ac=ah.style,Z,ao=af;for(var ad in aj){if(aj.hasOwnProperty(ad)){ak[ad]=aj[ad];}}aj.href&&(ah.href=aj.href);aj.title&&(ah.title=aj.title);aj.target&&(ah.target=aj.target);if(aj.path&&af.type=="path"){ak.path=f.parsePathString(aj.path);ah.path=y(ak.path);}if(aj.rotation!=null){af.rotate(aj.rotation,true);}if(aj.translation){Z=(aj.translation+"").split(Y);af.translate(Z[0],Z[1]);}if(aj.scale){Z=(aj.scale+"").split(Y);af.scale(+Z[0]||1,+Z[1]||+Z[0]||1,+Z[2]||null,+Z[3]||null);}if("clip-rect" in aj){var e=(aj["clip-rect"]+"").split(Y);if(e.length==4){e[2]=+e[2]+(+e[0]);e[3]=+e[3]+(+e[1]);var ae=ah.clipRect||g.createElement("div"),an=ae.style,ab=ah.parentNode;an.clip=f.format("rect({0}px {2}px {3}px {1}px)",e);if(!ah.clipRect){an.position="absolute";an.top=0;an.left=0;an.width=af.paper.width+"px";an.height=af.paper.height+"px";ab.parentNode.insertBefore(ae,ab);ae.appendChild(ab);ah.clipRect=ae;}}if(!aj["clip-rect"]){ah.clipRect&&(ah.clipRect.style.clip="");}}if(af.type=="image"&&aj.src){ah.src=aj.src;}if(af.type=="image"&&aj.opacity){ah.filterOpacity=" progid:DXImageTransform.Microsoft.Alpha(opacity="+(aj.opacity*100)+")";ac.filter=(ah.filterMatrix||"")+(ah.filterOpacity||"");}aj.font&&(ac.font=aj.font);aj["font-family"]&&(ac.fontFamily='"'+aj["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,"")+'"');aj["font-size"]&&(ac.fontSize=aj["font-size"]);aj["font-weight"]&&(ac.fontWeight=aj["font-weight"]);aj["font-style"]&&(ac.fontStyle=aj["font-style"]);if(aj.opacity!=null||aj["stroke-width"]!=null||aj.fill!=null||aj.stroke!=null||aj["stroke-width"]!=null||aj["stroke-opacity"]!=null||aj["fill-opacity"]!=null||aj["stroke-dasharray"]!=null||aj["stroke-miterlimit"]!=null||aj["stroke-linejoin"]!=null||aj["stroke-linecap"]!=null){ah=af.shape||ah;var ai=(ah.getElementsByTagName("fill")&&ah.getElementsByTagName("fill")[0]),al=false;!ai&&(al=ai=V("fill"));if("fill-opacity" in aj||"opacity" in aj){var i=((+ak["fill-opacity"]+1||2)-1)*((+ak.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);ai.opacity=i;}aj.fill&&(ai.on=true);if(ai.on==null||aj.fill=="none"){ai.on=false;}if(ai.on&&aj.fill){var R=aj.fill.match(/^url\(([^\)]+)\)$/i);if(R){ai.src=R[1];ai.type="tile";}else{ai.color=f.getRGB(aj.fill).hex;ai.src="";ai.type="solid";}}al&&ah.appendChild(ai);var aa=(ah.getElementsByTagName("stroke")&&ah.getElementsByTagName("stroke")[0]),am=false;!aa&&(am=aa=V("stroke"));if((aj.stroke&&aj.stroke!="none")||aj["stroke-width"]||aj["stroke-opacity"]!=null||aj["stroke-dasharray"]||aj["stroke-miterlimit"]||aj["stroke-linejoin"]||aj["stroke-linecap"]){aa.on=true;}(aj.stroke=="none"||aa.on==null||aj.stroke==0||aj["stroke-width"]==0)&&(aa.on=false);aa.on&&aj.stroke&&(aa.color=f.getRGB(aj.stroke).hex);var i=((+ak["stroke-opacity"]+1||2)-1)*((+ak.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);aa.opacity=i;aj["stroke-linejoin"]&&(aa.joinstyle=aj["stroke-linejoin"]||"miter");aa.miterlimit=aj["stroke-miterlimit"]||8;aj["stroke-linecap"]&&(aa.endcap={butt:"flat",square:"square",round:"round"}[aj["stroke-linecap"]]||"miter");aj["stroke-width"]&&(aa.weight=(parseFloat(aj["stroke-width"])||1)*12/16);if(aj["stroke-dasharray"]){var ag={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};aa.dashstyle=ag[aj["stroke-dasharray"]]||"";}am&&ah.appendChild(aa);}if(ao.type=="text"){var ac=b.span.style;ak.font&&(ac.font=ak.font);ak["font-family"]&&(ac.fontFamily=ak["font-family"]);ak["font-size"]&&(ac.fontSize=ak["font-size"]);ak["font-weight"]&&(ac.fontWeight=ak["font-weight"]);ak["font-style"]&&(ac.fontStyle=ak["font-style"]);b.span.innerHTML=ao.node.string.replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>");ao.W=ak.w=b.span.offsetWidth;ao.H=ak.h=b.span.offsetHeight;ao.X=ak.x;ao.Y=ak.y+Math.round(ao.H/2);switch(ak["text-anchor"]){case"start":ao.node.style["v-text-align"]="left";ao.bbx=Math.round(ao.W/2);break;case"end":ao.node.style["v-text-align"]="right";ao.bbx=-Math.round(ao.W/2);break;default:ao.node.style["v-text-align"]="center";break;}}};var o=function(i,e,aa,Z){var R=Math.round(Math.atan((parseFloat(aa)-parseFloat(i))/(parseFloat(Z)-parseFloat(e)))*57.29)||0;if(!R&&parseFloat(i)<parseFloat(e)){R=180;}R-=180;if(R<0){R+=360;}return R;};var M=function(ad,ac){ac=n(ac);ad.attrs=ad.attrs||{};var R=ad.attrs,ab=ad.node.getElementsByTagName("fill");ad.attrs.gradient=ac;ad=ad.shape||ad.node;if(ab.length){ab=ab[0];}else{ab=V("fill");}if(ac.dots.length){ab.on=true;ab.method="none";ab.type=((ac.type+"").toLowerCase()=="radial")?"gradientTitle":"gradient";if(!f.is(ac.dots[0].color,"undefined")){ab.color=f.getRGB(ac.dots[0].color).hex;}if(!f.is(ac.dots[ac.dots.length-1].color,"undefined")){ab.color2=f.getRGB(ac.dots[ac.dots.length-1].color).hex;}var ae=[];for(var Z=0,aa=ac.dots.length;Z<aa;Z++){if(ac.dots[Z].offset){ae.push(ac.dots[Z].offset+" "+f.getRGB(ac.dots[Z].color).hex);}}var e=f.is(ac.dots[ac.dots.length-1].opacity,"undefined")?(f.is(R.opacity,"undefined")?1:R.opacity):ac.dots[ac.dots.length-1].opacity;if(ae.length){ab.colors.value=ae.join(",");e=f.is(R.opacity,"undefined")?1:R.opacity;}else{ab.colors&&(ab.colors.value="0% "+ab.color);}ab.opacity=e;if(!f.is(ac.angle,"undefined")){ab.angle=(-ac.angle+270)%360;}else{if(ac.vector){ab.angle=o.apply(null,ac.vector);}}if((ac.type+"").toLowerCase()=="radial"){ab.focus="100%";ab.focusposition="0.5 0.5";}}};var m=function(aa,ac,e){var ab=0,R=0,i=0,Z=1;this[0]=aa;this.node=aa;this.X=0;this.Y=0;this.attrs={};this.Group=ac;this.paper=e;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};};m.prototype.rotate=function(i,e,R){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}i=(i+"").split(Y);if(i.length-1){e=parseFloat(i[1]);R=parseFloat(i[2]);}i=parseFloat(i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}(R==null)&&(e=null);this._.rt.cx=e;this._.rt.cy=R;this.setBox(this.attrs,e,R);this.Group.style.rotation=this._.rt.deg;return this;};m.prototype.setBox=function(ab,ac,aa){var R=this.Group.style,ad=(this.shape&&this.shape.style)||this.node.style;ab=ab||{};for(var ae in ab){if(ab.hasOwnProperty(ae)){this.attrs[ae]=ab[ae];}}ac=ac||this._.rt.cx;aa=aa||this._.rt.cy;var ah=this.attrs,ak,aj,al,ag;switch(this.type){case"circle":ak=ah.cx-ah.r;aj=ah.cy-ah.r;al=ag=ah.r*2;break;case"ellipse":ak=ah.cx-ah.rx;aj=ah.cy-ah.ry;al=ah.rx*2;ag=ah.ry*2;break;case"rect":case"image":ak=ah.x;aj=ah.y;al=ah.width||0;ag=ah.height||0;break;case"text":this.textpath.v=["m",Math.round(ah.x),", ",Math.round(ah.y-2),"l",Math.round(ah.x)+1,", ",Math.round(ah.y-2)].join("");ak=ah.x-Math.round(this.W/2);aj=ah.y-this.H/2;al=this.W;ag=this.H;break;case"path":if(!this.attrs.path){ak=0;aj=0;al=this.paper.width;ag=this.paper.height;}else{var af=C(this.attrs.path);ak=af.x;aj=af.y;al=af.width;ag=af.height;}break;default:ak=0;aj=0;al=this.paper.width;ag=this.paper.height;break;}ac=(ac==null)?ak+al/2:ac;aa=(aa==null)?aj+ag/2:aa;var Z=ac-this.paper.width/2,ai=aa-this.paper.height/2;if(this.type=="path"||this.type=="text"){(R.left!=Z+"px")&&(R.left=Z+"px");(R.top!=ai+"px")&&(R.top=ai+"px");this.X=this.type=="text"?ak:-Z;this.Y=this.type=="text"?aj:-ai;this.W=al;this.H=ag;(ad.left!=-Z+"px")&&(ad.left=-Z+"px");(ad.top!=-ai+"px")&&(ad.top=-ai+"px");}else{(R.left!=Z+"px")&&(R.left=Z+"px");(R.top!=ai+"px")&&(R.top=ai+"px");this.X=ak;this.Y=aj;this.W=al;this.H=ag;(R.width!=this.paper.width+"px")&&(R.width=this.paper.width+"px");(R.height!=this.paper.height+"px")&&(R.height=this.paper.height+"px");(ad.left!=ak-Z+"px")&&(ad.left=ak-Z+"px");(ad.top!=aj-ai+"px")&&(ad.top=aj-ai+"px");(ad.width!=al+"px")&&(ad.width=al+"px");(ad.height!=ag+"px")&&(ad.height=ag+"px");var am=(+ab.r||0)/(Math.min(al,ag));if(this.type=="rect"&&this.arcsize!=am&&(am||this.arcsize)){var e=V(am?"roundrect":"rect");e.arcsize=am;this.Group.appendChild(e);this.node.parentNode.removeChild(this.node);this.node=e;this.arcsize=am;F(this,this.attrs);this.setBox(this.attrs);}}};m.prototype.hide=function(){this.Group.style.display="none";return this;};m.prototype.show=function(){this.Group.style.display="block";return this;};m.prototype.getBBox=function(){if(this.type=="path"){return C(this.attrs.path);}return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H};};m.prototype.remove=function(){this[0].parentNode.removeChild(this[0]);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);};m.prototype.attr=function(){if(arguments.length==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(this.attrs&&arguments.length==1&&f.is(arguments[0],"array")){var e={};for(var R=0,Z=arguments[0].length;R<Z;R++){e[arguments[0][R]]=this.attrs[arguments[0][R]];}return e;}var aa;if(arguments.length==2){aa={};aa[arguments[0]]=arguments[1];}if(arguments.length==1&&f.is(arguments[0],"object")){aa=arguments[0];}if(aa){if(aa.gradient){M(this,aa.gradient);}if(aa.text&&this.type=="text"){this.node.string=aa.text;}F(this,aa);this.setBox(this.attrs);}return this;};m.prototype.toFront=function(){this.Group.parentNode.appendChild(this.Group);return this;};m.prototype.toBack=function(){if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);}return this;};m.prototype.insertAfter=function(e){if(e.Group.nextSibling){e.Group.parentNode.insertBefore(this.Group,e.Group.nextSibling);}else{e.Group.parentNode.appendChild(this.Group);}return this;};m.prototype.insertBefore=function(e){e.Group.parentNode.insertBefore(this.Group,e.Group);return this;};m.prototype.blur=function(e){var i=this.node.style,R=i.filter;R=R.replace(/progid:DXImageTransform\.Microsoft\.Blur\(pixelradius\=[^\)]+\)/g,"");if(e!="none"){i.filter=R+" progid:DXImageTransform.Microsoft.Blur(pixelradius="+(+e||1.5)+")";i.margin=f.format("-{0}px 0 0 -{0}px",Math.round(+e||1.5));}else{i.filter=R;i.margin=0;}};var D=function(i,ae,ad,e){var aa=V("group"),Z=aa.style,R=V("oval"),ac=R.style;Z.position="absolute";Z.left=0;Z.top=0;Z.width=i.width+"px";Z.height=i.height+"px";aa.coordsize=i.coordsize;aa.coordorigin=i.coordorigin;aa.appendChild(R);var ab=new m(R,aa,i);ab.type="circle";F(ab,{stroke:"#000",fill:"none"});ab.attrs.cx=ae;ab.attrs.cy=ad;ab.attrs.r=e;ab.setBox({x:ae-e,y:ad-e,width:e*2,height:e*2});i.canvas.appendChild(aa);return ab;};var I=function(i,ae,ad,af,aa,e){var ab=V("group"),Z=ab.style,R=V(e?"roundrect":"rect"),ag=(+e||0)/(Math.min(af,aa));R.arcsize=ag;Z.position="absolute";Z.left=0;Z.top=0;Z.width=i.width+"px";Z.height=i.height+"px";ab.coordsize=i.coordsize;ab.coordorigin=i.coordorigin;ab.appendChild(R);var ac=new m(R,ab,i);ac.type="rect";F(ac,{stroke:"#000"});ac.arcsize=ag;ac.setBox({x:ae,y:ad,width:af,height:aa,r:+e});i.canvas.appendChild(ab);return ac;};var h=function(e,af,ae,R,i){var ab=V("group"),aa=ab.style,Z=V("oval"),ad=Z.style;aa.position="absolute";aa.left=0;aa.top=0;aa.width=e.width+"px";aa.height=e.height+"px";ab.coordsize=e.coordsize;ab.coordorigin=e.coordorigin;ab.appendChild(Z);var ac=new m(Z,ab,e);ac.type="ellipse";F(ac,{stroke:"#000"});ac.attrs.cx=af;ac.attrs.cy=ae;ac.attrs.rx=R;ac.attrs.ry=i;ac.setBox({x:af-R,y:ae-i,width:R*2,height:i*2});e.canvas.appendChild(ab);return ac;};var p=function(i,e,af,ae,ag,aa){var ab=V("group"),Z=ab.style,R=V("image"),ad=R.style;Z.position="absolute";Z.left=0;Z.top=0;Z.width=i.width+"px";Z.height=i.height+"px";ab.coordsize=i.coordsize;ab.coordorigin=i.coordorigin;R.src=e;ab.appendChild(R);var ac=new m(R,ab,i);ac.type="image";ac.attrs.src=e;ac.attrs.x=af;ac.attrs.y=ae;ac.attrs.w=ag;ac.attrs.h=aa;ac.setBox({x:af,y:ae,width:ag,height:aa});i.canvas.appendChild(ab);return ac;};var H=function(i,af,ae,ag){var ab=V("group"),aa=ab.style,Z=V("shape"),ad=Z.style,ah=V("path"),e=ah.style,R=V("textpath");aa.position="absolute";aa.left=0;aa.top=0;aa.width=i.width+"px";aa.height=i.height+"px";ab.coordsize=i.coordsize;ab.coordorigin=i.coordorigin;ah.v=["m",Math.round(af),", ",Math.round(ae),"l",Math.round(af)+1,", ",Math.round(ae)].join("");ah.textpathok=true;ad.width=i.width;ad.height=i.height;aa.position="absolute";aa.left=0;aa.top=0;aa.width=i.width;aa.height=i.height;R.string=ag;R.on=true;Z.appendChild(R);Z.appendChild(ah);ab.appendChild(Z);var ac=new m(R,ab,i);ac.shape=Z;ac.textpath=ah;ac.type="text";ac.attrs.text=ag;ac.attrs.x=af;ac.attrs.y=ae;ac.attrs.w=1;ac.attrs.h=1;F(ac,{font:q.font,stroke:"none",fill:"#000"});ac.setBox();i.canvas.appendChild(ab);return ac;};var E=function(R,e){var i=this.canvas.style;this.width=parseFloat(R||this.width);this.height=parseFloat(e||this.height);i.width=this.width+"px";i.height=this.height+"px";i.clip="rect(0 "+this.width+"px "+this.height+"px 0)";this.coordsize=this.width+" "+this.height;return this;};g.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!g.namespaces.rvml&&g.namespaces.add("rvml","urn:schemas-microsoft-com:vml");var V=function(e){return g.createElement("<rvml:"+e+' class="rvml">');};}catch(U){var V=function(e){return g.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var l=function(){var Z=G.apply(null,arguments),i=Z.container,ae=Z.height,af,R=Z.width,ad=Z.x,ac=Z.y;if(!i){throw new Error("VML container not found.");}var ab=b.canvas=g.createElement("div"),aa=ab.style;R=parseFloat(R)||"512px";ae=parseFloat(ae)||"342px";b.width=R;b.height=ae;b.coordsize=R+" "+ae;b.coordorigin="0 0";b.span=g.createElement("span");af=b.span.style;ab.appendChild(b.span);af.position="absolute";af.left="-99999px";af.top="-99999px";af.padding=0;af.margin=0;af.lineHeight=1;af.display="inline";aa.width=R+"px";aa.height=ae+"px";aa.position="absolute";aa.clip="rect(0 "+R+"px "+ae+"px 0)";if(i==1){g.body.appendChild(ab);aa.left=ad+"px";aa.top=ac+"px";i={style:{width:R,height:ae}};}else{i.style.width=R;i.style.height=ae;if(i.firstChild){i.insertBefore(ab,i.firstChild);}else{i.appendChild(ab);}}for(var e in b){if(b.hasOwnProperty(e)){i[e]=b[e];}}a.call(i,i,f.fn);i.clear=function(){while(ab.firstChild){ab.removeChild(ab.firstChild);}};i.raphael=f;return i;};b.remove=function(){this.canvas.parentNode.removeChild(this.canvas);};b.safari=function(){};}var j=(function(){if(g.addEventListener){return function(aa,R,i,e){var Z=function(ab){return i.call(e,ab);};aa.addEventListener(R,Z,false);return function(){aa.removeEventListener(R,Z,false);return true;};};}else{if(g.attachEvent){return function(ab,Z,R,i){var aa=function(ac){return R.call(i,ac||L.event);};ab.attachEvent("on"+Z,aa);var e=function(){ab.detachEvent("on"+Z,aa);return true;};if(Z=="mouseover"){ab.attachEvent("onmouseenter",aa);return function(){ab.detachEvent("onmouseenter",aa);return e();};}else{if(Z=="mouseout"){ab.attachEvent("onmouseleave",aa);return function(){ab.detachEvent("onmouseleave",aa);return e();};}}return e;};}}})();for(var Q=v.length;Q--;){(function(e){m.prototype[e]=function(i){if(f.is(i,"function")){this.events=this.events||{};this.events[e]=this.events[e]||{};this.events[e][i]=this.events[e][i]||[];this.events[e][i].push(j(this.shape||this.node,e,i,this));}return this;};m.prototype["un"+e]=function(i){this.events&&this.events[e]&&this.events[e][i]&&this.events[e][i].length&&this.events[e][i].shift()()&&!this.events[e][i].length&&delete this.events[e][i];};})(v[Q]);}b.circle=function(e,R,i){return D(this,e,R,i);};b.rect=function(e,aa,i,R,Z){return I(this,e,aa,i,R,Z);};b.ellipse=function(e,Z,R,i){return h(this,e,Z,R,i);};b.path=function(e){e&&!f.is(e,"string")&&!f.is(e[0],"array")&&(e+="");return W(f.format.apply(f,arguments),this);};b.image=function(Z,e,aa,i,R){return p(this,Z,e,aa,i,R);};b.text=function(e,R,i){return H(this,e,R,i);};b.set=function(e){arguments.length>1&&(e=Array.prototype.splice.call(arguments,0,arguments.length));return new k(e);};b.setSize=E;m.prototype.stop=function(){clearTimeout(this.animation_in_progress);return this;};m.prototype.scale=function(aj,ai,Z,R){if(aj==null&&ai==null){return{x:this._.sx,y:this._.sy,toString:function(){return this.x+" "+this.y;}};}ai=ai||aj;!+ai&&(ai=aj);var an,al,am,ak,aA=this.attrs;if(aj!=0){var ah=this.getBBox(),ae=ah.x+ah.width/2,ab=ah.y+ah.height/2,az=aj/this._.sx,ay=ai/this._.sy;Z=(+Z||Z==0)?Z:ae;R=(+R||R==0)?R:ab;var ag=Math.round(aj/Math.abs(aj)),ad=Math.round(ai/Math.abs(ai)),aq=this.node.style,aC=Z+(ae-Z)*ag*az,aB=R+(ab-R)*ad*ay;switch(this.type){case"rect":case"image":var af=aA.width*ag*az,ap=aA.height*ad*ay,ac=aC-af/2,aa=aB-ap/2;this.attr({width:af,height:ap,x:ac,y:aa});break;case"circle":case"ellipse":this.attr({rx:aA.rx*az,ry:aA.ry*ay,r:aA.r*az,cx:aC,cy:aB});break;case"path":var at=c(aA.path),au=true;for(var aw=0,ao=at.length;aw<ao;aw++){var ar=at[aw];if(ar[0].toUpperCase()=="M"&&au){continue;}else{au=false;}if(f.svg&&ar[0].toUpperCase()=="A"){ar[at[aw].length-2]*=az;ar[at[aw].length-1]*=ay;ar[1]*=az;ar[2]*=ay;ar[5]=+(ag+ad?!!+ar[5]:!+ar[5]);}else{for(var av=1,ax=ar.length;av<ax;av++){ar[av]*=(av%2)?az:ay;}}}var e=C(at),an=aC-e.x-e.width/2,al=aB-e.y-e.height/2;at=c(at);at[0][1]+=an;at[0][2]+=al;this.attr({path:at.join(" ")});break;}if(this.type in {text:1,image:1}&&(ag!=1||ad!=1)){if(this.transformations){this.transformations[2]="scale(".concat(ag,",",ad,")");this.node.setAttribute("transform",this.transformations.join(" "));an=(ag==-1)?-aA.x-(af||0):aA.x;al=(ad==-1)?-aA.y-(ap||0):aA.y;this.attr({x:an,y:al});aA.fx=ag-1;aA.fy=ad-1;}else{this.node.filterMatrix=" progid:DXImageTransform.Microsoft.Matrix(M11=".concat(ag,", M12=0, M21=0, M22=",ad,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");aq.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}else{if(this.transformations){this.transformations[2]="";this.node.setAttribute("transform",this.transformations.join(" "));aA.fx=0;aA.fy=0;}else{this.node.filterMatrix="";aq.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}aA.scale=[aj,ai,Z,R].join(" ");this._.sx=aj;this._.sy=ai;}return this;};f.easing_formulas={linear:function(e){return e;},"<":function(e){return Math.pow(e,3);},">":function(e){return Math.pow(e-1,3)+1;},"<>":function(e){e=e*2;if(e<1){return Math.pow(e,3)/2;}e-=2;return(Math.pow(e,3)+2)/2;},backIn:function(i){var e=1.70158;return i*i*((e+1)*i-e);},backOut:function(i){i=i-1;var e=1.70158;return i*i*((e+1)*i+e)+1;},elastic:function(R){if(R==0||R==1){return R;}var i=0.3,e=i/4;return Math.pow(2,-10*R)*Math.sin((R-e)*(2*Math.PI)/i)+1;},bounce:function(Z){var i=7.5625,R=2.75,e;if(Z<(1/R)){e=i*Z*Z;}else{if(Z<(2/R)){Z-=(1.5/R);e=i*Z*Z+0.75;}else{if(Z<(2.5/R)){Z-=(2.25/R);e=i*Z*Z+0.9375;}else{Z-=(2.625/R);e=i*Z*Z+0.984375;}}}return e;}};m.prototype.animate=function(at,aj,ai,aa){clearTimeout(this.animation_in_progress);if(f.is(ai,"function")||!ai){aa=ai||null;}var am={},R={},ag={},af={x:0,y:0};for(var ak in at){if(at.hasOwnProperty(ak)){if(ak in u){am[ak]=this.attr(ak);(am[ak]==null)&&(am[ak]=q[ak]);R[ak]=at[ak];switch(u[ak]){case"number":ag[ak]=(R[ak]-am[ak])/aj;break;case"colour":am[ak]=f.getRGB(am[ak]);var al=f.getRGB(R[ak]);ag[ak]={r:(al.r-am[ak].r)/aj,g:(al.g-am[ak].g)/aj,b:(al.b-am[ak].b)/aj};break;case"path":var ab=O(am[ak],R[ak]);am[ak]=ab[0];R[ak]=ab[1];ag[ak]=[];for(var ao=0,ae=am[ak].length;ao<ae;ao++){ag[ak][ao]=[0];for(var an=1,aq=am[ak][ao].length;an<aq;an++){ag[ak][ao][an]=(R[ak][ao][an]-am[ak][ao][an])/aj;}}break;case"csv":var e=(at[ak]+"").split(Y),ad=(am[ak]+"").split(Y);switch(ak){case"translation":am[ak]=[0,0];ag[ak]=[e[0]/aj,e[1]/aj];break;case"rotation":am[ak]=(ad[1]==e[1]&&ad[2]==e[2])?ad:[0,e[1],e[2]];ag[ak]=[(e[0]-am[ak][0])/aj,0,0];break;case"scale":at[ak]=e;am[ak]=(am[ak]+"").split(Y);ag[ak]=[(e[0]-am[ak][0])/aj,(e[1]-am[ak][1])/aj,0,0];break;case"clip-rect":am[ak]=(am[ak]+"").split(Y);ag[ak]=[];var ao=4;while(ao--){ag[ak][ao]=(e[ao]-am[ak][ao])/aj;}break;}R[ak]=e;}}}}var Z=+new Date,ah=0,ar=function(i){return +i>255?255:+i;},ac=this;(function ap(){var av=new Date-Z,aD={},au;if(av<aj){var aB=f.easing_formulas[ai]?f.easing_formulas[ai](av/aj):av/aj;for(var az in am){if(am.hasOwnProperty(az)){switch(u[az]){case"number":au=+am[az]+aB*aj*ag[az];break;case"colour":au="rgb("+[ar(Math.round(am[az].r+aB*aj*ag[az].r)),ar(Math.round(am[az].g+aB*aj*ag[az].g)),ar(Math.round(am[az].b+aB*aj*ag[az].b))].join(",")+")";break;case"path":au=[];for(var ax=0,aE=am[az].length;ax<aE;ax++){au[ax]=[am[az][ax][0]];for(var aw=1,ay=am[az][ax].length;aw<ay;aw++){au[ax][aw]=+am[az][ax][aw]+aB*aj*ag[az][ax][aw];}au[ax]=au[ax].join(" ");}au=au.join(" ");break;case"csv":switch(az){case"translation":var aC=ag[az][0]*(av-ah),aA=ag[az][1]*(av-ah);af.x+=aC;af.y+=aA;au=[aC,aA].join(" ");break;case"rotation":au=+am[az][0]+aB*aj*ag[az][0];am[az][1]&&(au+=","+am[az][1]+","+am[az][2]);break;case"scale":au=[+am[az][0]+aB*aj*ag[az][0],+am[az][1]+aB*aj*ag[az][1],(2 in at[az]?at[az][2]:""),(3 in at[az]?at[az][3]:"")].join(" ");break;case"clip-rect":au=[];var ax=4;while(ax--){au[ax]=+am[az][ax]+aB*aj*ag[az][ax];}break;}break;}aD[az]=au;}}ac.attr(aD);ac.animation_in_progress=setTimeout(ap);f.svg&&b.safari();}else{(af.x||af.y)&&ac.translate(-af.x,-af.y);ac.attr(at);clearTimeout(ac.animation_in_progress);f.svg&&b.safari();(f.is(aa,"function"))&&aa.call(ac);}ah=av;})();return this;};m.prototype.translate=function(e,R){if(e==null){return{x:this._.tx,y:this._.ty};}this._.tx+=+e;this._.ty+=+R;switch(this.type){case"circle":case"ellipse":this.attr({cx:+e+this.attrs.cx,cy:+R+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+e+this.attrs.x,y:+R+this.attrs.y});break;case"path":var i=c(this.attrs.path);i[0][1]+=+e;i[0][2]+=+R;this.attr({path:i});break;}return this;};var k=function(e){this.items=[];this.length=0;if(e){for(var R=0,Z=e.length;R<Z;R++){if(e[R]&&(e[R].constructor==m||e[R].constructor==k)){this[this.items.length]=this.items[this.items.length]=e[R];this.length++;}}}};k.prototype.push=function(){var aa,e;for(var R=0,Z=arguments.length;R<Z;R++){aa=arguments[R];if(aa&&(aa.constructor==m||aa.constructor==k)){e=this.items.length;this[e]=this.items[e]=aa;this.length++;}}return this;};k.prototype.pop=function(){delete this[this.length--];return this.items.pop();};for(var S in m.prototype){if(m.prototype.hasOwnProperty(S)){k.prototype[S]=(function(e){return function(){for(var R=0,Z=this.items.length;R<Z;R++){this.items[R][e].apply(this.items[R],arguments);}return this;};})(S);}}k.prototype.attr=function(R,ac){if(R&&f.is(R,"array")&&f.is(R[0],"object")){for(var e=0,ab=R.length;e<ab;e++){this.items[e].attr(R[e]);}}else{for(var Z=0,aa=this.items.length;Z<aa;Z++){this.items[Z].attr.apply(this.items[Z],arguments);}}return this;};k.prototype.getBBox=function(){var e=[],ac=[],R=[],aa=[];for(var Z=this.items.length;Z--;){var ab=this.items[Z].getBBox();e.push(ab.x);ac.push(ab.y);R.push(ab.x+ab.width);aa.push(ab.y+ab.height);}e=Math.min.apply(Math,e);ac=Math.min.apply(Math,ac);return{x:e,y:ac,width:Math.max.apply(Math,R)-e,height:Math.max.apply(Math,aa)-ac};};f.registerFont=function(i){if(!i.face){return i;}this.fonts=this.fonts||{};var Z={w:i.w,face:{},glyphs:{}},R=i.face["font-family"];for(var ac in i.face){if(i.face.hasOwnProperty(ac)){Z.face[ac]=i.face[ac];}}if(this.fonts[R]){this.fonts[R].push(Z);}else{this.fonts[R]=[Z];}if(!i.svg){Z.face["units-per-em"]=parseInt(i.face["units-per-em"],10);for(var aa in i.glyphs){if(i.glyphs.hasOwnProperty(aa)){var ab=i.glyphs[aa];Z.glyphs[aa]={w:ab.w,k:{},d:ab.d&&"M"+ab.d.replace(/[mlcxtrv]/g,function(ad){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[ad]||"M";})+"z"};if(ab.k){for(var e in ab.k){if(ab.khasOwnProperty(e)){Z.glyphs[aa].k[e]=ab.k[e];}}}}}}return i;};b.getFont=function(ae,af,R,aa){aa=aa||"normal";R=R||"normal";af=+af||{normal:400,bold:700,lighter:300,bolder:800}[af]||400;var ab=f.fonts[ae];if(!ab){var Z=new RegExp("(^|\\s)"+ae.replace(/[^\w\d\s+!~.:_-]/g,"")+"(\\s|$)","i");for(var e in f.fonts){if(f.fonts.hasOwnProperty(e)){if(Z.test(e)){ab=f.fonts[e];break;}}}}var ac;if(ab){for(var ad=0,ag=ab.length;ad<ag;ad++){ac=ab[ad];if(ac.face["font-weight"]==af&&(ac.face["font-style"]==R||!ac.face["font-style"])&&ac.face["font-stretch"]==aa){break;}}}return ac;};b.print=function(ag,af,ad,R,ak){var ab=this.set(),ae=(ad+"").split(""),e=0,aj="",aa;f.is(R,"string")&&(R=this.getFont(R));if(R){aa=(ak||16)/R.face["units-per-em"];for(var ac=0,ah=ae.length;ac<ah;ac++){var Z=ac&&R.glyphs[ae[ac-1]]||{},ai=R.glyphs[ae[ac]];e+=ac?(Z.w||R.w)+(Z.k&&Z.k[ae[ac]]||0):0;ai&&ai.d&&ab.push(this.path(ai.d).attr({fill:"#000",stroke:"none",translation:[e,0]}));}ab.scale(aa,aa,0,af).translate(ag,(ak||16)/2);}return ab;};f.format=function(i){var e=f.is(arguments[1],"array")?[0].concat(arguments[1]):arguments;i&&f.is(i,"string")&&e.length-1&&(i=i.replace(/\{(\d+)\}/g,function(Z,R){return e[++R]==null?"":e[R];}));return i;};f.ninja=function(){var R=window.Raphael,i;if(P.was){window.Raphael=P.is;}else{try{delete window.Raphael;}catch(Z){window.Raphael=i;}}return R;};f.el=m.prototype;return f;})();
\ No newline at end of file diff --git a/js/ui.tabs.js b/js/ui.tabs.js deleted file mode 100755 index d914b3e..0000000 --- a/js/ui.tabs.js +++ /dev/null @@ -1,685 +0,0 @@ -/* - * jQuery UI Tabs 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.tabs", { - - _init: function() { - if (this.options.deselectable !== undefined) { - this.options.collapsible = this.options.deselectable; - } - this._tabify(true); - }, - - _setData: function(key, value) { - if (key == 'selected') { - if (this.options.collapsible && value == this.options.selected) { - return; - } - this.select(value); - } - else { - this.options[key] = value; - if (key == 'deselectable') { - this.options.collapsible = value; - } - this._tabify(); - } - }, - - _tabId: function(a) { - return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') || - this.options.idPrefix + $.data(a); - }, - - _sanitizeSelector: function(hash) { - return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":" - }, - - _cookie: function() { - var cookie = this.cookie || (this.cookie = this.options.cookie.name || 'ui-tabs-' + $.data(this.list[0])); - return $.cookie.apply(null, [cookie].concat($.makeArray(arguments))); - }, - - _ui: function(tab, panel) { - return { - tab: tab, - panel: panel, - index: this.anchors.index(tab) - }; - }, - - _cleanup: function() { - // restore all former loading tabs labels - this.lis.filter('.ui-state-processing').removeClass('ui-state-processing') - .find('span:data(label.tabs)') - .each(function() { - var el = $(this); - el.html(el.data('label.tabs')).removeData('label.tabs'); - }); - }, - - _tabify: function(init) { - - this.list = this.element.children('ul:first'); - this.lis = $('li:has(a[href])', this.list); - this.anchors = this.lis.map(function() { return $('a', this)[0]; }); - this.panels = $([]); - - var self = this, o = this.options; - - var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash - this.anchors.each(function(i, a) { - var href = $(a).attr('href'); - - // For dynamically created HTML that contains a hash as href IE < 8 expands - // such href to the full page url with hash and then misinterprets tab as ajax. - // Same consideration applies for an added tab with a fragment identifier - // since a[href=#fragment-identifier] does unexpectedly not match. - // Thus normalize href attribute... - var hrefBase = href.split('#')[0], baseEl; - if (hrefBase && (hrefBase === location.toString().split('#')[0] || - (baseEl = $('base')[0]) && hrefBase === baseEl.href)) { - href = a.hash; - a.href = href; - } - - // inline tab - if (fragmentId.test(href)) { - self.panels = self.panels.add(self._sanitizeSelector(href)); - } - - // remote tab - else if (href != '#') { // prevent loading the page itself if href is just "#" - $.data(a, 'href.tabs', href); // required for restore on destroy - - // TODO until #3808 is fixed strip fragment identifier from url - // (IE fails to load from such url) - $.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data - - var id = self._tabId(a); - a.href = '#' + id; - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom') - .insertAfter(self.panels[i - 1] || self.list); - $panel.data('destroy.tabs', true); - } - self.panels = self.panels.add($panel); - } - - // invalid tab href - else { - o.disabled.push(i); - } - }); - - // initialization from scratch - if (init) { - - // attach necessary classes for styling - this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all'); - this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all'); - this.lis.addClass('ui-state-default ui-corner-top'); - this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom'); - - // Selected tab - // use "selected" option or try to retrieve: - // 1. from fragment identifier in url - // 2. from cookie - // 3. from selected class attribute on <li> - if (o.selected === undefined) { - if (location.hash) { - this.anchors.each(function(i, a) { - if (a.hash == location.hash) { - o.selected = i; - return false; // break - } - }); - } - if (typeof o.selected != 'number' && o.cookie) { - o.selected = parseInt(self._cookie(), 10); - } - if (typeof o.selected != 'number' && this.lis.filter('.ui-tabs-selected').length) { - o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected')); - } - o.selected = o.selected || 0; - } - else if (o.selected === null) { // usage of null is deprecated, TODO remove in next release - o.selected = -1; - } - - // sanity check - default to first tab... - o.selected = ((o.selected >= 0 && this.anchors[o.selected]) || o.selected < 0) ? o.selected : 0; - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - // A selected tab cannot become disabled. - o.disabled = $.unique(o.disabled.concat( - $.map(this.lis.filter('.ui-state-disabled'), - function(n, i) { return self.lis.index(n); } ) - )).sort(); - - if ($.inArray(o.selected, o.disabled) != -1) { - o.disabled.splice($.inArray(o.selected, o.disabled), 1); - } - - // highlight selected tab - this.panels.addClass('ui-tabs-hide'); - this.lis.removeClass('ui-tabs-selected ui-state-active'); - if (o.selected >= 0 && this.anchors.length) { // check for length avoids error when initializing empty list - this.panels.eq(o.selected).removeClass('ui-tabs-hide'); - this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active'); - - // seems to be expected behavior that the show callback is fired - self.element.queue("tabs", function() { - self._trigger('show', null, self._ui(self.anchors[o.selected], self.panels[o.selected])); - }); - - this.load(o.selected); - } - - // clean up to avoid memory leaks in certain versions of IE 6 - $(window).bind('unload', function() { - self.lis.add(self.anchors).unbind('.tabs'); - self.lis = self.anchors = self.panels = null; - }); - - } - // update selected after add/remove - else { - o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected')); - } - - // update collapsible - this.element[o.collapsible ? 'addClass' : 'removeClass']('ui-tabs-collapsible'); - - // set or update cookie after init and add/remove respectively - if (o.cookie) { - this._cookie(o.selected, o.cookie); - } - - // disable tabs - for (var i = 0, li; (li = this.lis[i]); i++) { - $(li)[$.inArray(i, o.disabled) != -1 && - !$(li).hasClass('ui-tabs-selected') ? 'addClass' : 'removeClass']('ui-state-disabled'); - } - - // reset cache if switching from cached to not cached - if (o.cache === false) { - this.anchors.removeData('cache.tabs'); - } - - // remove all handlers before, tabify may run on existing tabs after add or option change - this.lis.add(this.anchors).unbind('.tabs'); - - if (o.event != 'mouseover') { - var addState = function(state, el) { - if (el.is(':not(.ui-state-disabled)')) { - el.addClass('ui-state-' + state); - } - }; - var removeState = function(state, el) { - el.removeClass('ui-state-' + state); - }; - this.lis.bind('mouseover.tabs', function() { - addState('hover', $(this)); - }); - this.lis.bind('mouseout.tabs', function() { - removeState('hover', $(this)); - }); - this.anchors.bind('focus.tabs', function() { - addState('focus', $(this).closest('li')); - }); - this.anchors.bind('blur.tabs', function() { - removeState('focus', $(this).closest('li')); - }); - } - - // set up animations - var hideFx, showFx; - if (o.fx) { - if ($.isArray(o.fx)) { - hideFx = o.fx[0]; - showFx = o.fx[1]; - } - else { - hideFx = showFx = o.fx; - } - } - - // Reset certain styles left over from animation - // and prevent IE's ClearType bug... - function resetStyle($el, fx) { - $el.css({ display: '' }); - if ($.browser.msie && fx.opacity) { - $el[0].style.removeAttribute('filter'); - } - } - - // Show a tab... - var showTab = showFx ? - function(clicked, $show) { - $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active'); - $show.hide().removeClass('ui-tabs-hide') // avoid flicker that way - .animate(showFx, showFx.duration || 'normal', function() { - resetStyle($show, showFx); - self._trigger('show', null, self._ui(clicked, $show[0])); - }); - } : - function(clicked, $show) { - $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active'); - $show.removeClass('ui-tabs-hide'); - self._trigger('show', null, self._ui(clicked, $show[0])); - }; - - // Hide a tab, $show is optional... - var hideTab = hideFx ? - function(clicked, $hide) { - $hide.animate(hideFx, hideFx.duration || 'normal', function() { - self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default'); - $hide.addClass('ui-tabs-hide'); - resetStyle($hide, hideFx); - self.element.dequeue("tabs"); - }); - } : - function(clicked, $hide, $show) { - self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default'); - $hide.addClass('ui-tabs-hide'); - self.element.dequeue("tabs"); - }; - - // attach tab event handler, unbind to avoid duplicates from former tabifying... - this.anchors.bind(o.event + '.tabs', function() { - var el = this, $li = $(this).closest('li'), $hide = self.panels.filter(':not(.ui-tabs-hide)'), - $show = $(self._sanitizeSelector(this.hash)); - - // If tab is already selected and not collapsible or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if (($li.hasClass('ui-tabs-selected') && !o.collapsible) || - $li.hasClass('ui-state-disabled') || - $li.hasClass('ui-state-processing') || - self._trigger('select', null, self._ui(this, $show[0])) === false) { - this.blur(); - return false; - } - - o.selected = self.anchors.index(this); - - self.abort(); - - // if tab may be closed - if (o.collapsible) { - if ($li.hasClass('ui-tabs-selected')) { - o.selected = -1; - - if (o.cookie) { - self._cookie(o.selected, o.cookie); - } - - self.element.queue("tabs", function() { - hideTab(el, $hide); - }).dequeue("tabs"); - - this.blur(); - return false; - } - else if (!$hide.length) { - if (o.cookie) { - self._cookie(o.selected, o.cookie); - } - - self.element.queue("tabs", function() { - showTab(el, $show); - }); - - self.load(self.anchors.index(this)); // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 - - this.blur(); - return false; - } - } - - if (o.cookie) { - self._cookie(o.selected, o.cookie); - } - - // show new tab - if ($show.length) { - if ($hide.length) { - self.element.queue("tabs", function() { - hideTab(el, $hide); - }); - } - self.element.queue("tabs", function() { - showTab(el, $show); - }); - - self.load(self.anchors.index(this)); - } - else { - throw 'jQuery UI Tabs: Mismatching fragment identifier.'; - } - - // Prevent IE from keeping other link focussed when using the back button - // and remove dotted border from clicked link. This is controlled via CSS - // in modern browsers; blur() removes focus from address bar in Firefox - // which can become a usability and annoying problem with tabs('rotate'). - if ($.browser.msie) { - this.blur(); - } - - }); - - // disable click in any case - this.anchors.bind('click.tabs', function(){return false;}); - - }, - - destroy: function() { - var o = this.options; - - this.abort(); - - this.element.unbind('.tabs') - .removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible') - .removeData('tabs'); - - this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all'); - - this.anchors.each(function() { - var href = $.data(this, 'href.tabs'); - if (href) { - this.href = href; - } - var $this = $(this).unbind('.tabs'); - $.each(['href', 'load', 'cache'], function(i, prefix) { - $this.removeData(prefix + '.tabs'); - }); - }); - - this.lis.unbind('.tabs').add(this.panels).each(function() { - if ($.data(this, 'destroy.tabs')) { - $(this).remove(); - } - else { - $(this).removeClass([ - 'ui-state-default', - 'ui-corner-top', - 'ui-tabs-selected', - 'ui-state-active', - 'ui-state-hover', - 'ui-state-focus', - 'ui-state-disabled', - 'ui-tabs-panel', - 'ui-widget-content', - 'ui-corner-bottom', - 'ui-tabs-hide' - ].join(' ')); - } - }); - - if (o.cookie) { - this._cookie(null, o.cookie); - } - }, - - add: function(url, label, index) { - if (index === undefined) { - index = this.anchors.length; // append by default - } - - var self = this, o = this.options, - $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)), - id = !url.indexOf('#') ? url.replace('#', '') : this._tabId($('a', $li)[0]); - - $li.addClass('ui-state-default ui-corner-top').data('destroy.tabs', true); - - // try to find an existing element before creating a new one - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id).data('destroy.tabs', true); - } - $panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide'); - - if (index >= this.lis.length) { - $li.appendTo(this.list); - $panel.appendTo(this.list[0].parentNode); - } - else { - $li.insertBefore(this.lis[index]); - $panel.insertBefore(this.panels[index]); - } - - o.disabled = $.map(o.disabled, - function(n, i) { return n >= index ? ++n : n; }); - - this._tabify(); - - if (this.anchors.length == 1) { // after tabify - $li.addClass('ui-tabs-selected ui-state-active'); - $panel.removeClass('ui-tabs-hide'); - this.element.queue("tabs", function() { - self._trigger('show', null, self._ui(self.anchors[0], self.panels[0])); - }); - - this.load(0); - } - - // callback - this._trigger('add', null, this._ui(this.anchors[index], this.panels[index])); - }, - - remove: function(index) { - var o = this.options, $li = this.lis.eq(index).remove(), - $panel = this.panels.eq(index).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - if ($li.hasClass('ui-tabs-selected') && this.anchors.length > 1) { - this.select(index + (index + 1 < this.anchors.length ? 1 : -1)); - } - - o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }), - function(n, i) { return n >= index ? --n : n; }); - - this._tabify(); - - // callback - this._trigger('remove', null, this._ui($li.find('a')[0], $panel[0])); - }, - - enable: function(index) { - var o = this.options; - if ($.inArray(index, o.disabled) == -1) { - return; - } - - this.lis.eq(index).removeClass('ui-state-disabled'); - o.disabled = $.grep(o.disabled, function(n, i) { return n != index; }); - - // callback - this._trigger('enable', null, this._ui(this.anchors[index], this.panels[index])); - }, - - disable: function(index) { - var self = this, o = this.options; - if (index != o.selected) { // cannot disable already selected tab - this.lis.eq(index).addClass('ui-state-disabled'); - - o.disabled.push(index); - o.disabled.sort(); - - // callback - this._trigger('disable', null, this._ui(this.anchors[index], this.panels[index])); - } - }, - - select: function(index) { - if (typeof index == 'string') { - index = this.anchors.index(this.anchors.filter('[href$=' + index + ']')); - } - else if (index === null) { // usage of null is deprecated, TODO remove in next release - index = -1; - } - if (index == -1 && this.options.collapsible) { - index = this.options.selected; - } - - this.anchors.eq(index).trigger(this.options.event + '.tabs'); - }, - - load: function(index) { - var self = this, o = this.options, a = this.anchors.eq(index)[0], url = $.data(a, 'load.tabs'); - - this.abort(); - - // not remote or from cache - if (!url || this.element.queue("tabs").length !== 0 && $.data(a, 'cache.tabs')) { - this.element.dequeue("tabs"); - return; - } - - // load remote from here on - this.lis.eq(index).addClass('ui-state-processing'); - - if (o.spinner) { - var span = $('span', a); - span.data('label.tabs', span.html()).html(o.spinner); - } - - this.xhr = $.ajax($.extend({}, o.ajaxOptions, { - url: url, - success: function(r, s) { - $(self._sanitizeSelector(a.hash)).html(r); - - // take care of tab labels - self._cleanup(); - - if (o.cache) { - $.data(a, 'cache.tabs', true); // if loaded once do not load them again - } - - // callbacks - self._trigger('load', null, self._ui(self.anchors[index], self.panels[index])); - try { - o.ajaxOptions.success(r, s); - } - catch (e) {} - - // last, so that load event is fired before show... - self.element.dequeue("tabs"); - } - })); - }, - - abort: function() { - // stop possibly running animations - this.element.queue([]); - this.panels.stop(false, true); - - // terminate pending requests from other tabs - if (this.xhr) { - this.xhr.abort(); - delete this.xhr; - } - - // take care of tab labels - this._cleanup(); - - }, - - url: function(index, url) { - this.anchors.eq(index).removeData('cache.tabs').data('load.tabs', url); - }, - - length: function() { - return this.anchors.length; - } - -}); - -$.extend($.ui.tabs, { - version: '1.7.2', - getter: 'length', - defaults: { - ajaxOptions: null, - cache: false, - cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - collapsible: false, - disabled: [], - event: 'click', - fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } - idPrefix: 'ui-tabs-', - panelTemplate: '<div></div>', - spinner: '<em>Loading…</em>', - tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>' - } -}); - -/* - * Tabs Extensions - */ - -/* - * Rotate - */ -$.extend($.ui.tabs.prototype, { - rotation: null, - rotate: function(ms, continuing) { - - var self = this, o = this.options; - - var rotate = self._rotate || (self._rotate = function(e) { - clearTimeout(self.rotation); - self.rotation = setTimeout(function() { - var t = o.selected; - self.select( ++t < self.anchors.length ? t : 0 ); - }, ms); - - if (e) { - e.stopPropagation(); - } - }); - - var stop = self._unrotate || (self._unrotate = !continuing ? - function(e) { - if (e.clientX) { // in case of a true click - self.rotate(null); - } - } : - function(e) { - t = o.selected; - rotate(); - }); - - // start rotation - if (ms) { - this.element.bind('tabsshow', rotate); - this.anchors.bind(o.event + '.tabs', stop); - rotate(); - } - // stop rotation - else { - clearTimeout(self.rotation); - this.element.unbind('tabsshow', rotate); - this.anchors.unbind(o.event + '.tabs', stop); - delete this._rotate; - delete this._unrotate; - } - } -}); - -})(jQuery); diff --git a/js/updateDoc.sh b/js/updateDoc.sh new file mode 100755 index 0000000..6a1f15f --- /dev/null +++ b/js/updateDoc.sh @@ -0,0 +1,3 @@ +_JSDOCDIR="../utils/jsdoc-toolkit" +_OUTPUTDIR="../docs/jsdoc/" +java -jar $_JSDOCDIR/jsrun.jar $_JSDOCDIR/app/run.js -a -t=$_JSDOCDIR/templates/jsdoc jquery.karma.js -d=$_OUTPUTDIR diff --git a/jsdoc/files.html b/jsdoc/files.html deleted file mode 100755 index a060477..0000000 --- a/jsdoc/files.html +++ /dev/null @@ -1,230 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8"" /> - - <title>JsDoc Reference - File Index</title> - <meta name="generator" content="JsDoc Toolkit" /> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> - <div id="header"> -</div> - - <div id="index"> - <div align="center"><a href="index.html">Class Index</a> -| <a href="files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="symbols/_global_.html">_global_</a></i></li> - - <li><a href="symbols/Karma.html">Karma</a></li> - - <li><a href="symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="symbols/KGroup.html">KGroup</a></li> - - <li><a href="symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - </div> - - <div id="content"> - <h1 class="classTitle">File Index</h1> - - - <div> - <h2><a href="symbols/src/js_jquery.karma-0.4.js.html">..\js\jquery.karma-0.4.js</a></h2> - - <dl> - - - - - </dl> - </div> - <hr /> - - - </div> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html>
\ No newline at end of file diff --git a/jsdoc/index.html b/jsdoc/index.html deleted file mode 100755 index 867469f..0000000 --- a/jsdoc/index.html +++ /dev/null @@ -1,266 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - - <title>JsDoc Reference - Index</title> - <meta name="generator" content="JsDoc Toolkit" /> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> - <div id="header"> -</div> - - <div id="index"> - <div align="center"><a href="index.html">Class Index</a> -| <a href="files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="symbols/_global_.html">_global_</a></i></li> - - <li><a href="symbols/Karma.html">Karma</a></li> - - <li><a href="symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="symbols/KGroup.html">KGroup</a></li> - - <li><a href="symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - </div> - - <div id="content"> - <h1 class="classTitle">Class Index</h1> - - - <div> - <h2><a href="symbols/_global_.html">_global_</a></h2> - - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma.html">Karma</a></h2> - Represents a Karma (master) object. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23geometry.html">Karma#geometry</a></h2> - Geometry functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23graphics.html">Karma#graphics</a></h2> - Graphics functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/Karma%23math.html">Karma#math</a></h2> - Math functions. - </div> - <hr /> - - <div> - <h2><a href="symbols/KGraphic.html">KGraphic</a></h2> - General methods for any Graphic object - </div> - <hr /> - - <div> - <h2><a href="symbols/KGroup.html">KGroup</a></h2> - - </div> - <hr /> - - <div> - <h2><a href="symbols/KObject.html">KObject</a></h2> - The basic Karma object - </div> - <hr /> - - - </div> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html>
\ No newline at end of file diff --git a/jsdoc/symbols/$.karma.html b/jsdoc/symbols/$.karma.html deleted file mode 100755 index 8b97acf..0000000 --- a/jsdoc/symbols/$.karma.html +++ /dev/null @@ -1,317 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - $.karma</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><a href="../symbols/%24.karma.html">$.karma</a></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class $.karma - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - asdsad - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class $.karma."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/%24.karma.html#constructor">$.karma</a></b>(options) - </div> - <div class="description">asdsx</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>$.karma</b>(options) - </div> - - <div class="description"> - asdsx - - </div> - - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>options</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 18:49:56 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KButton.html b/jsdoc/symbols/KButton.html deleted file mode 100755 index 8525ef8..0000000 --- a/jsdoc/symbols/KButton.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KButton</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KButton - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KButton."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KButton.html#constructor">KButton</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KButton</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KGroup.html b/jsdoc/symbols/KGroup.html deleted file mode 100755 index 803b77c..0000000 --- a/jsdoc/symbols/KGroup.html +++ /dev/null @@ -1,312 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KGroup</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KGroup - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KGroup."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KGroup.html#constructor">KGroup</a></b>() - </div> - <div class="description">Supports multiple objects</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KGroup</b>() - </div> - - <div class="description"> - Supports multiple objects - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:10 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KMedia.html b/jsdoc/symbols/KMedia.html deleted file mode 100755 index 65483fb..0000000 --- a/jsdoc/symbols/KMedia.html +++ /dev/null @@ -1,432 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KMedia</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KMedia - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KMedia."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KMedia.html#constructor">KMedia</a></b>(options) - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class KMedia."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">KMedia.<b><a href="../symbols/KMedia.html#.isReady">isReady</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - - <tr> - <td class="attributes"><static> </td> - <td class="nameDescription"> - <div class="fixedFont">KMedia.<b><a href="../symbols/KMedia.html#.play">play</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KMedia</b>(options) - </div> - - <div class="description"> - - - </div> - - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>options</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name=".isReady"> </a> - <div class="fixedFont"><static> - - - <span class="light">KMedia.</span><b>isReady</b>() - - </div> - <div class="description"> - - - - </div> - - - - - - - - - - - - <hr /> - - <a name=".play"> </a> - <div class="fixedFont"><static> - - - <span class="light">KMedia.</span><b>play</b>() - - </div> - <div class="description"> - - - - </div> - - - - - - - - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KObject-KButton.html b/jsdoc/symbols/KObject-KButton.html deleted file mode 100755 index 6edf89c..0000000 --- a/jsdoc/symbols/KObject-KButton.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KButton</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KButton - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KButton."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KButton.html#constructor">KObject-KButton</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KButton</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KObject-KRectangle.html b/jsdoc/symbols/KObject-KRectangle.html deleted file mode 100755 index 270f7f0..0000000 --- a/jsdoc/symbols/KObject-KRectangle.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KRectangle</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KRectangle - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KRectangle."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KRectangle.html#constructor">KObject-KRectangle</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KRectangle</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KObject-KShape.html b/jsdoc/symbols/KObject-KShape.html deleted file mode 100755 index a5cb395..0000000 --- a/jsdoc/symbols/KObject-KShape.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KShape</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KShape - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KShape."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KShape.html#constructor">KObject-KShape</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KShape</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KObject-KSound.html b/jsdoc/symbols/KObject-KSound.html deleted file mode 100755 index d9feb72..0000000 --- a/jsdoc/symbols/KObject-KSound.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KObject-KSound</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KMedia.html">KMedia</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - - <li><a href="../symbols/KObject-KButton.html">KObject-KButton</a></li> - - <li><a href="../symbols/KObject-KRectangle.html">KObject-KRectangle</a></li> - - <li><a href="../symbols/KObject-KShape.html">KObject-KShape</a></li> - - <li><a href="../symbols/KObject-KSound.html">KObject-KSound</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KObject-KSound - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KObject-KSound."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KObject-KSound.html#constructor">KObject-KSound</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"><inner> - <b>KObject-KSound</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:04:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KRectangle.html b/jsdoc/symbols/KRectangle.html deleted file mode 100755 index 600a65d..0000000 --- a/jsdoc/symbols/KRectangle.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KRectangle</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KRectangle - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KRectangle."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KRectangle.html#constructor">KRectangle</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KRectangle</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KShape.html b/jsdoc/symbols/KShape.html deleted file mode 100755 index cbafccf..0000000 --- a/jsdoc/symbols/KShape.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KShape</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KShape - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KShape."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KShape.html#constructor">KShape</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KShape</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/KSound.html b/jsdoc/symbols/KSound.html deleted file mode 100755 index 40e6878..0000000 --- a/jsdoc/symbols/KSound.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - KSound</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KButton.html">KButton</a></li> - - <li><a href="../symbols/KRectangle.html">KRectangle</a></li> - - <li><a href="../symbols/KShape.html">KShape</a></li> - - <li><a href="../symbols/KSound.html">KSound</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class KSound - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class KSound."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/KSound.html#constructor">KSound</a></b>() - </div> - <div class="description"></div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - -<!-- ============================== methods summary ======================== --> - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>KSound</b>() - </div> - - <div class="description"> - - - </div> - - - - - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:05:12 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/Karma.html b/jsdoc/symbols/Karma.html deleted file mode 100755 index ab80ea6..0000000 --- a/jsdoc/symbols/Karma.html +++ /dev/null @@ -1,1171 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - Karma</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Class Karma - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - Represents a Karma (master) object. - - - <br /><i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - </p> - -<!-- ============================== constructor summary ==================== --> - - <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class Karma."> - <caption>Class Summary</caption> - <thead> - <tr> - <th scope="col">Constructor Attributes</th> - <th scope="col">Constructor Name and Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="attributes"> </td> - <td class="nameDescription" > - <div class="fixedFont"> - <b><a href="../symbols/Karma.html#constructor">Karma</a></b>(options) - </div> - <div class="description">Karma</div> - </td> - </tr> - </tbody> - </table> - - -<!-- ============================== properties summary ===================== --> - - - - - - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class Karma."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#button">button</a></b>(args) - </div> - <div class="description">A shortcut for calling 'KButton( )'</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#clear">clear</a></b>(x, y, width, height) - </div> - <div class="description">Clears a rectangular area within the canvas</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-getLanguage">getLanguage</a></b>() - </div> - <div class="description">Gets the language acording to the browser language</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#group">group</a></b>(args) - </div> - <div class="description">A shortcut for calling 'KGroup( )'</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-i18nWrapper">i18nWrapper</a></b>(options) - </div> - <div class="description">Creates a new Gettext object and returns a shortcut function to localise - defined strings.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#image">image</a></b>(args) - </div> - <div class="description">A shortcut for calling 'KImage( )'</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#init">init</a></b>(toLoad) - </div> - <div class="description">Attaches an Object of Arrays for preloading.</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-loadAlternatives">loadAlternatives</a></b>() - </div> - <div class="description">It will attempt to load a language file, the posible languages are defined - on language.alternatives.</div> - </td> - </tr> - - <tr> - <td class="attributes"><inner> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#-localiseContent">localiseContent</a></b>(lang) - </div> - <div class="description">Localises the inline html content and it creates the localised paths for - "images", "sounds" and "videos".</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#main">main</a></b>(cb) - </div> - <div class="description">Main function.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#size">size</a></b>(width, height) - </div> - <div class="description">Creates a new canvas element.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#sound">sound</a></b>(args) - </div> - <div class="description">A shortcut for calling 'KSound( )'</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/Karma.html#video">video</a></b>(args) - </div> - <div class="description">A shortcut for calling 'KVideo( )'</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - <div class="details"><a name="constructor"> </a> - <div class="sectionTitle"> - Class Detail - </div> - - <div class="fixedFont"> - <b>Karma</b>(options) - </div> - - <div class="description"> - Karma - - </div> - - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{String | Object}</span> <b>options</b> - - </dt> - <dd>Constructor arguments</dd> - - <dt> - <span class="light fixedFont">{String | Object}</span> <b>options.container</b> - <i>Optional</i> - </dt> - <dd>Target DIV-class that will contain - any canvas element created using Karma functions</dd> - - <dt> - <span class="light fixedFont">{String}</span> <b>options.language</b> - <i>Optional</i> - </dt> - <dd><ul> - <li>if it's seted: - Karma will assume that the according language file exists and Karma will try - to load it.<li> - <li>if it's not seted: - Karma will localise the content according to the Browser language - </li> - </ul></dd> - - <dt> - <span class="light fixedFont">{Array}</span> <b>options.language.alternatives</b> - <i>Optional</i> - </dt> - <dd>Alternatives for localizing the content. The first has the priority.</dd> - - <dt> - <span class="light fixedFont">{Object}</span> <b>options.i18n</b> - <i>Optional</i> - </dt> - <dd>Object that contains data for i18n.</dd> - - <dt> - <span class="light fixedFont">{Object | String}</span> <b>options.i18n.root</b> - <i>Optional, Default: self</i> - </dt> - <dd>Parent element where the i18n shortcut function will be attached.</dd> - - <dt> - <span class="light fixedFont">{String}</span> <b>options.i18n.shortcut</b> - <i>Optional, Default: _</i> - </dt> - <dd>Shortcut for calling i18n.</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>options.fps</b> - <i>Optional, Default: 24</i> - </dt> - <dd>Frames per second at which Karma will perform any refresh action.</dd> - - </dl> - - - - - - - - - </div> - - -<!-- ============================== field details ========================== --> - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name="button"> </a> - <div class="fixedFont"> - - - <b>button</b>(args) - - </div> - <div class="description"> - A shortcut for calling 'KButton( )' - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd>KButton#</dd> - - </dl> - - - <hr /> - - <a name="clear"> </a> - <div class="fixedFont"> - - - <b>clear</b>(x, y, width, height) - - </div> - <div class="description"> - Clears a rectangular area within the canvas - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>x</b> - <i>Optional, Default: 0</i> - </dt> - <dd>Start position of x</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>y</b> - <i>Optional, Default: 0</i> - </dt> - <dd>Start position of y</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>width</b> - <i>Optional, Default: canvas width</i> - </dt> - <dd>Square width</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>height</b> - <i>Optional, Default: canvas height</i> - </dt> - <dd>Square height</dd> - - </dl> - - - - - - - - - <hr /> - - <a name="-getLanguage"> </a> - <div class="fixedFont"><inner> - - <span class="light">{Object}</span> - <b>getLanguage</b>() - - </div> - <div class="description"> - Gets the language acording to the browser language - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Object}</span> <br> - lang: countryCode and langCode (if specified) - langCode*: language code represented as xx, example: en.<br> - countryCode*: country code represented as YY, example: US.<br> -optional</dd> - - </dl> - - - - - <hr /> - - <a name="group"> </a> - <div class="fixedFont"> - - - <b>group</b>(args) - - </div> - <div class="description"> - A shortcut for calling 'KGroup( )' - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/KGroup.html">KGroup</a></dd> - - </dl> - - - <hr /> - - <a name="-i18nWrapper"> </a> - <div class="fixedFont"><inner> - - <span class="light">{Function}</span> - <b>i18nWrapper</b>(options) - - </div> - <div class="description"> - Creates a new Gettext object and returns a shortcut function to localise - defined strings.<br>We use karma.Gettext.js it's a modification of - <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> - Gettext.js</a> from beril OS. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Object}</span> <b>options</b> - - </dt> - <dd>The arguments of the Gettext constructor</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Function}</span> A generic function to call Gettext functions - The generic function will call a Gettext function according to the number of arguments passed - <table> - <tr> - <th>No. params</th> - <th>Parameters</th> - <th>Gettext function called</th> - </tr> - <tr> - <td>1</td> - <td>msgid</td> - <td>gettext</td> - <tr> - <td>2</td> - <td>context, msgid</td> - <td>pgettext</td> - </tr> - <tr> - <td>3</td> - <td>number, singular, plural</td> - <td>ngettext</td> - </tr> - <tr> - <td>4</td> - <td>number, context, singular, plural</td> - <td>npgettext</td> - </tr> - </table></dd> - - </dl> - - - <dl class="detailList"> - <dt class="heading">Requires:</dt> - - <dd>karma.Gettext.js</dd> - - </dl> - - - - <hr /> - - <a name="image"> </a> - <div class="fixedFont"> - - - <b>image</b>(args) - - </div> - <div class="description"> - A shortcut for calling 'KImage( )' - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd>KImage</dd> - - </dl> - - - <hr /> - - <a name="init"> </a> - <div class="fixedFont"> - - <span class="light">{Object}</span> - <b>init</b>(toLoad) - - </div> - <div class="description"> - Attaches an Object of Arrays for preloading. There are 3 valid categories (arrays): -'images' for images, 'sounds' for sounds and 'videos' for video files.<br> -Any object within any category must have an 'id' and 'file' attributes. -Additional attributes will be used as arguments to the constructor of the -corresponding object.<br> -Any media file successfully loaded will be availabe through the 'library'. -The init finishes when all the valid files have finished loading or have -failed on the process.<br> -Please note that the preloadinf will NOT start unless you call 'main' function. - - - </div> - - - - <pre class="code">var k = $.karma ({container: "#karma-main"/}); -k.size(1200, 800); -k.init({ - images: [ - {id: "ball", file: "ball.png", localized : false }, - ], - sounds: [ - {id: "correct", file: "correct.ogg" }, - ] -});//1 image and 1 sound attached to load</pre> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Object}</span> <b>toLoad</b> - <i>Optional</i> - </dt> - <dd>The Object that has the arrays for preloading.</dd> - - <dt> - <span class="light fixedFont">{Array}</span> <b>toLoad.images</b> - <i>Optional</i> - </dt> - <dd>The images</dd> - - <dt> - <span class="light fixedFont">{Array}</span> <b>toLoad.sounds</b> - <i>Optional</i> - </dt> - <dd>The sounds</dd> - - <dt> - <span class="light fixedFont">{Array}</span> <b>toLoad.videos</b> - <i>Optional</i> - </dt> - <dd>The videos</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Object}</span> this</dd> - - </dl> - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/Karma.html#main">Karma#main</a></dd> - - </dl> - - - <hr /> - - <a name="-loadAlternatives"> </a> - <div class="fixedFont"><inner> - - <span class="light">{String}</span> - <b>loadAlternatives</b>() - - </div> - <div class="description"> - It will attempt to load a language file, the posible languages are defined - on language.alternatives. - <p>The language file type could be: .po (Pootle) or .json (JSON). The - precedence between file types is defined according to which is defined first - in supportedLangFileTypes. By default Pootle files has precedence over JSON, - files.</p> - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{String}</span> The name of the language file loaded. Example: en-US.po</dd> - - </dl> - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/Karma.html">Karma</a></dd> - - </dl> - - - <hr /> - - <a name="-localiseContent"> </a> - <div class="fixedFont"><inner> - - - <b>localiseContent</b>(lang) - - </div> - <div class="description"> - Localises the inline html content and it creates the localised paths for - "images", "sounds" and "videos". - <b>Note:</b>Inline html localisation under development<br> - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{String}</span> <b>lang</b> - - </dt> - <dd>The language that will be used to localise the content</dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="http://wiki.sugarlabs.org/go/Karma/Bundle_layout"> - Karma Bundle_layout</a></dd> - - </dl> - - - <hr /> - - <a name="main"> </a> - <div class="fixedFont"> - - - <b>main</b>(cb) - - </div> - <div class="description"> - Main function. Any Karma function call should be inside the callback function. -The callback function will be executed when the preloading finishes. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Function}</span> <b>cb</b> - - </dt> - <dd>The callback funtion</dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd><a href="../symbols/Karma.html#init">Karma#init</a></dd> - - </dl> - - - <hr /> - - <a name="size"> </a> - <div class="fixedFont"> - - - <b>size</b>(width, height) - - </div> - <div class="description"> - Creates a new canvas element. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <span class="light fixedFont">{Number}</span> <b>width</b> - <i>Optional, Default: 100</i> - </dt> - <dd>canvas width</dd> - - <dt> - <span class="light fixedFont">{Number}</span> <b>height</b> - <i>Optional, Default: 100</i> - </dt> - <dd>canvas height</dd> - - </dl> - - - - - - - - - <hr /> - - <a name="sound"> </a> - <div class="fixedFont"> - - - <b>sound</b>(args) - - </div> - <div class="description"> - A shortcut for calling 'KSound( )' - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd>KSound</dd> - - </dl> - - - <hr /> - - <a name="video"> </a> - <div class="fixedFont"> - - - <b>video</b>(args) - - </div> - <div class="description"> - A shortcut for calling 'KVideo( )' - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>args</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - <dl class="detailList"> - <dt class="heading">See:</dt> - - <dd>KVideo</dd> - - </dl> - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/_global_.html b/jsdoc/symbols/_global_.html deleted file mode 100755 index 4d6b4ce..0000000 --- a/jsdoc/symbols/_global_.html +++ /dev/null @@ -1,520 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <meta name="generator" content="JsDoc Toolkit" /> - - <title>JsDoc Reference - _global_</title> - - <style type="text/css"> - /* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} - </style> - </head> - - <body> -<!-- ============================== header ================================= --> - <!-- begin static/header.html --> - <div id="header"> -</div> - <!-- end static/header.html --> - -<!-- ============================== classes index ============================ --> - <div id="index"> - <!-- begin publish.classesIndex --> - <div align="center"><a href="../index.html">Class Index</a> -| <a href="../files.html">File Index</a></div> -<hr /> -<h2>Classes</h2> -<ul class="classList"> - - <li><i><a href="../symbols/_global_.html">_global_</a></i></li> - - <li><a href="../symbols/Karma.html">Karma</a></li> - - <li><a href="../symbols/Karma%23geometry.html">Karma#geometry</a></li> - - <li><a href="../symbols/Karma%23graphics.html">Karma#graphics</a></li> - - <li><a href="../symbols/Karma%23math.html">Karma#math</a></li> - - <li><a href="../symbols/KGraphic.html">KGraphic</a></li> - - <li><a href="../symbols/KGroup.html">KGroup</a></li> - - <li><a href="../symbols/KObject.html">KObject</a></li> - -</ul> -<hr /> - <!-- end publish.classesIndex --> - </div> - - <div id="content"> -<!-- ============================== class title ============================ --> - <h1 class="classTitle"> - - Built-In Namespace _global_ - </h1> - -<!-- ============================== class summary ========================== --> - <p class="description"> - - - - - - </p> - -<!-- ============================== constructor summary ==================== --> - - -<!-- ============================== properties summary ===================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class _global_."> - <caption>Field Summary</caption> - <thead> - <tr> - <th scope="col">Field Attributes</th> - <th scope="col">Field Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"> - <b><a href="../symbols/_global_.html#mouse">mouse</a></b> - </div> - <div class="description">Mouse</div> - </td> - </tr> - - </tbody> - </table> - - - - - -<!-- ============================== methods summary ======================== --> - - - - <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class _global_."> - <caption>Method Summary</caption> - <thead> - <tr> - <th scope="col">Method Attributes</th> - <th scope="col">Method Name and Description</th> - </tr> - </thead> - <tbody> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#Class">Class</a></b>() - </div> - <div class="description">Master Class creator.</div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#handleEvents">handleEvents</a></b>(ev) - </div> - <div class="description"></div> - </td> - </tr> - - <tr> - <td class="attributes"> </td> - <td class="nameDescription"> - <div class="fixedFont"><b><a href="../symbols/_global_.html#valid">valid</a></b>(arg, type, toReturn) - </div> - <div class="description">Checks if the argument (arg) is seted and if its type is 'type'.</div> - </td> - </tr> - - </tbody> - </table> - - - - -<!-- ============================== events summary ======================== --> - - -<!-- ============================== constructor details ==================== --> - - -<!-- ============================== field details ========================== --> - - <div class="sectionTitle"> - Field Detail - </div> - - <a name="mouse"> </a> - <div class="fixedFont"> - - - <b>mouse</b> - - </div> - <div class="description"> - Mouse - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - - - - - - - - -<!-- ============================== method details ========================= --> - - <div class="sectionTitle"> - Method Detail - </div> - - <a name="Class"> </a> - <div class="fixedFont"> - - <span class="light">{Object}</span> - <b>Class</b>() - - </div> - <div class="description"> - Master Class creator. Supports multiple inheritance. -It creates a new Object, the new Object will contain the methods that has each -argument passed (Function or Object). When creating an instance of the new -Object it will use the 'init' function as the initializer.<br> -If there is more than one method with the same name, it'll be overwritten by the -last one.<br> -warning it's NOT optimal. - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd><span class="light fixedFont">{Object}</span> A new class</dd> - - </dl> - - - - - <hr /> - - <a name="handleEvents"> </a> - <div class="fixedFont"> - - - <b>handleEvents</b>(ev) - - </div> - <div class="description"> - - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>ev</b> - - </dt> - <dd></dd> - - </dl> - - - - - - - - - <hr /> - - <a name="valid"> </a> - <div class="fixedFont"> - - - <b>valid</b>(arg, type, toReturn) - - </div> - <div class="description"> - Checks if the argument (arg) is seted and if its type is 'type'.<br> -1. if arg is seted: it returns toReturn if specified, otherwise it returns - 'true' -2. if arg is not seted: it returns 'false' - - <br /> - <i>Defined in: </i> <a href="../symbols/src/js_jquery.karma-0.4.js.html">jquery.karma-0.4.js</a>. - - - </div> - - - - <pre class="code">var msg = "hi"; -valid(msg); //returns true -valid(msg, "String" ); //returns true -valid(msg, "Number"); //returns false -valid(msg, "String",false ); //returns false -valid(msg123); //returns false</pre> - - - - - <dl class="detailList"> - <dt class="heading">Parameters:</dt> - - <dt> - <b>arg</b> - - </dt> - <dd>The param to check</dd> - - <dt> - <span class="light fixedFont">{Object}</span> <b>type</b> - <i>Optional</i> - </dt> - <dd>The expeted type of 'arg'</dd> - - <dt> - <b>toReturn</b> - <i>Optional</i> - </dt> - <dd>object or value to return in case 1</dd> - - </dl> - - - - - - <dl class="detailList"> - <dt class="heading">Returns:</dt> - - <dd>true | false | toReturn</dd> - - </dl> - - - - - - - - -<!-- ============================== event details ========================= --> - - - <hr /> - </div> - - -<!-- ============================== footer ================================= --> - <div class="fineprint" style="clear:both"> - - Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.0 on Mon Aug 31 2009 19:56:09 GMT-0500 (CDT) - </div> - </body> -</html> diff --git a/jsdoc/symbols/src/JSDOC.js.html b/jsdoc/symbols/src/JSDOC.js.html deleted file mode 100755 index 6ef5f20..0000000 --- a/jsdoc/symbols/src/JSDOC.js.html +++ /dev/null @@ -1,112 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/** -<span class='line'> 2</span> @overview -<span class='line'> 3</span> @date $Date: 2009-06-21 23:36:33 +0100 (Sun, 21 Jun 2009) $ -<span class='line'> 4</span> @version $Revision: 801 $ -<span class='line'> 5</span> @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/lib/JSDOC.js $ -<span class='line'> 6</span> @name JSDOC.js -<span class='line'> 7</span> */</span><span class="WHIT"> -<span class='line'> 8</span> -<span class='line'> 9</span> </span><span class="COMM">/** -<span class='line'> 10</span> This is the main container for the JSDOC application. -<span class='line'> 11</span> @namespace -<span class='line'> 12</span> */</span><span class="WHIT"> -<span class='line'> 13</span> </span><span class="NAME">JSDOC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 14</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 15</span> -<span class='line'> 16</span> </span><span class="COMM">/** -<span class='line'> 17</span> @requires Opt -<span class='line'> 18</span> */</span><span class="WHIT"> -<span class='line'> 19</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 20</span> </span><span class="NAME">JSDOC.opt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Opt.get</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'> 21</span> </span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 22</span> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"allfunctions"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 24</span> </span><span class="NAME">c</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"conf"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"directory"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="STRN">"D[]"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"define"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"encoding"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="STRN">"E[]"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"exclude"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"help"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"nocode"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"out"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"private"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"quiet"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"recurse"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">S</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"securemodules"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"suppress"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"template"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">T</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"testmode"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"unique"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"verbose"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"ext"</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 44</span> -<span class='line'> 45</span> </span><span class="COMM">/** The current version string of this application. */</span><span class="WHIT"> -<span class='line'> 46</span> </span><span class="NAME">JSDOC.VERSION</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"2.3.0"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 47</span> -<span class='line'> 48</span> </span><span class="COMM">/** Print out usage information and quit. */</span><span class="WHIT"> -<span class='line'> 49</span> </span><span class="NAME">JSDOC.usage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"USAGE: java -jar jsrun.jar app/run.js [OPTIONS] <SRC_DIR> <SRC_FILE> ..."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"OPTIONS:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -a or --allfunctions\n Include all functions, even undocumented ones.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -c or --conf\n Load a configuration file.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -d=<PATH> or --directory=<PATH>\n Output to this directory (defaults to \"out\").\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -D=\"myVar:My value\" or --define=\"myVar:My value\"\n Multiple. Define a variable, available in JsDoc as JSDOC.opt.D.myVar.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -e=<ENCODING> or --encoding=<ENCODING>\n Use this encoding to read and write files.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -h or --help\n Show this message and exit.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -n or --nocode\n Ignore all code, only document comments with @name tags.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -o=<PATH> or --out=<PATH>\n Print log messages to a file (defaults to stdout).\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -q or --quiet\n Do not output any messages, not even warnings.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -r=<DEPTH> or --recurse=<DEPTH>\n Descend into src directories.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -s or --suppress\n Suppress source code output.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -S or --securemodules\n Use Secure Modules mode to parse source code.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -t=<PATH> or --template=<PATH>\n Required. Use this template to format the output.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -T or --test\n Run all unit tests and exit.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -u or --unique\n Force file names to be unique, but not based on symbol names.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -v or --verbose\n Provide verbose feedback about what is happening.\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">" -x=<EXT>[,EXT]... or --ext=<EXT>[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 72</span> </span><span class="WHIT"> -<span class='line'> 73</span> </span><span class="NAME">quit</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 74</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 75</span> -<span class='line'> 76</span> </span><span class="COMM">/*t: -<span class='line'> 77</span> plan(4, "Testing JSDOC namespace."); -<span class='line'> 78</span> -<span class='line'> 79</span> is( -<span class='line'> 80</span> typeof JSDOC, -<span class='line'> 81</span> "object", -<span class='line'> 82</span> "JSDOC.usage is a function." -<span class='line'> 83</span> ); -<span class='line'> 84</span> -<span class='line'> 85</span> is( -<span class='line'> 86</span> typeof JSDOC.VERSION, -<span class='line'> 87</span> "string", -<span class='line'> 88</span> "JSDOC.VERSION is a string." -<span class='line'> 89</span> ); -<span class='line'> 90</span> -<span class='line'> 91</span> is( -<span class='line'> 92</span> typeof JSDOC.usage, -<span class='line'> 93</span> "function", -<span class='line'> 94</span> "JSDOC.usage is a function." -<span class='line'> 95</span> ); -<span class='line'> 96</span> -<span class='line'> 97</span> is( -<span class='line'> 98</span> typeof JSDOC.opt, -<span class='line'> 99</span> "object", -<span class='line'>100</span> "JSDOC.opt is a object." -<span class='line'>101</span> ); -<span class='line'>102</span> */</span><span class="WHIT"> -<span class='line'>103</span> -<span class='line'>104</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.IO</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">IO.includeDir</span><span class="PUNC">(</span><span class="STRN">"lib/JSDOC/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>105</span> </span></pre></body></html>
\ No newline at end of file diff --git a/jsdoc/symbols/src/js_a.js.html b/jsdoc/symbols/src/js_a.js.html deleted file mode 100755 index 8af5caa..0000000 --- a/jsdoc/symbols/src/js_a.js.html +++ /dev/null @@ -1,767 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe López Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="WHIT"> -<span class='line'> 33</span> -<span class='line'> 34</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 46</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="COMM">/** -<span class='line'> 62</span> Karma -<span class='line'> 63</span> -<span class='line'> 64</span> @class Represents a Karma (master) object -<span class='line'> 65</span> @param {String | Object } Options Constructor arguments -<span class='line'> 66</span> @param options.container Target DIV class that will contain any canvas element created using Karma functions -<span class='line'> 67</span> @param options.language if it's a String, Karma will NOT try to localise the content, instead Karma will assume that this -<span class='line'> 68</span> language file exists and it'll try to load it. -<span class='line'> 69</span> @param options.i18n Object that contains data for i18n. -<span class='line'> 70</span> @param options.i18n.root Parent element where the i18n (Gettext object) shortcut will be attached. -<span class='line'> 71</span> @param options.i18n.shortcut Shortcut for calling i18n. -<span class='line'> 72</span> @param options.fps Frames per second at which Karma will perform any refresh action. -<span class='line'> 73</span> -<span class='line'> 74</span> @version 0.3 alpha -<span class='line'> 75</span> @constructor -<span class='line'> 76</span> **/</span><span class="WHIT"> -<span class='line'> 77</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>103</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>104</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'>105</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>106</span> * get the language acording to the browser language -<span class='line'>107</span> *@returns {Object} <br> -<span class='line'>108</span> *lang: country - language two letters code represented as xx-YY, example: en-US.<br> -<span class='line'>109</span> *langCode*: language code represented as xx, example: en.<br> -<span class='line'>110</span> *countryCode*: country code represented as YY, example: US.<br> -<span class='line'>111</span> **optional -<span class='line'>112</span> **/</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla / ie</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>123</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>124</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>125</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>132</span> <p>creates a new Gettext object and returns a shortcut function to translate strings</p> -<span class='line'>133</span> we use karma.Gettext.js it's a modification of <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> -<span class='line'>134</span> Gettext.js</a> from beril OS. -<span class='line'>135</span> @param {Object} options passed as arguments of the Gettext constructor -<span class='line'>136</span> @returns {Function} generic function to call Gettext functions <br> -<span class='line'>137</span> <ul> -<span class='line'>138</span> <li>1 argument = msgid</li> -<span class='line'>139</span> <li>2 arguments = context, msgid</li> -<span class='line'>140</span> <li>3 arguments = number, singular, plural</li> -<span class='line'>141</span> <li>4 arguments = number, context, singular, plural</li> -<span class='line'>142</span> </ul> -<span class='line'>143</span> **/</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>147</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>151</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>154</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>155</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>157</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>159</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>160</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>162</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>163</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>164</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>165</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>167</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>168</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>169</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>170</span> * It will localise the inline html content and it'll create the localised paths for "images", "sounds", "videos". -<span class='line'>171</span> **/</span><span class="WHIT"> -<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>173</span> </span><span class="WHIT"> -<span class='line'>174</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>177</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>179</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioClip</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>185</span> <p>It will attempt to load a language file, the posible languages are defined on language.alternatives -<span class='line'>186</span> (constructor param).</p> -<span class='line'>187</span> <p>The language file type could be: .po (Pootle). or .json (JSON). The precedence between file types is defined -<span class='line'>188</span> according to which is defined first in supportedLangFileTypes. By default Pootle files has precedence over JSON, -<span class='line'>189</span> files.</p> -<span class='line'>190</span> @returns {String} The name of the language file loaded. Example: en-US.po -<span class='line'>191</span> **/</span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>208</span> </span><span class="WHIT"> -<span class='line'>209</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>210</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>211</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>212</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>213</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>215</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>227</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>230</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>231</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>233</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>245</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>252</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>256</span> -<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>258</span> </span><span class="WHIT"> -<span class='line'>259</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>268</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> -<span class='line'>277</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>281</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>291</span> -<span class='line'>292</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>299</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>302</span> -<span class='line'>303</span> -<span class='line'>304</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> -<span class='line'>307</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>314</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>316</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>320</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>334</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>335</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>342</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>347</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>348</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>349</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>353</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>360</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">array</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">array</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>373</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>374</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>377</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>378</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>379</span> </span><span class="WHIT"> </span><span class="COMM">//callback to check if all the items were loaded or got an error when loading</span><span class="WHIT"> -<span class='line'>380</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>382</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>383</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>384</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="WHIT"> -<span class='line'>388</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>393</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>394</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>395</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>396</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>397</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>398</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>399</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>400</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>401</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>403</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>404</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>405</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>406</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>407</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>408</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>410</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>415</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>416</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>417</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>418</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>419</span> -<span class='line'>420</span> </span><span class="COMM">//Mouse stuff</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>425</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>426</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>427</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>429</span> -<span class='line'>430</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>431</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>434</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>435</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>439</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>440</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>441</span> case "click": break; -<span class='line'>442</span> }*/</span><span class="WHIT"> -<span class='line'>443</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>444</span> for (var i in ev) { -<span class='line'>445</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>446</span> } -<span class='line'>447</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>449</span> -<span class='line'>450</span> </span><span class="COMM">/* -<span class='line'>451</span> Master Class creator -<span class='line'>452</span> supports multiple inheritance, warning it's NOT optimal -<span class='line'>453</span> */</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>457</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>458</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>459</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>461</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>462</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>463</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>464</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>465</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>466</span> }*/</span><span class="WHIT"> -<span class='line'>467</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>469</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>470</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>471</span> -<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>473</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>474</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>475</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>476</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>477</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>478</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>480</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>481</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>482</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>483</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>487</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>488</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>489</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>490</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>491</span> </span><span class="WHIT"> -<span class='line'>492</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>493</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>494</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>504</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>508</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>509</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>510</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>519</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>524</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>526</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> -<span class='line'>533</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>535</span> -<span class='line'>536</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>538</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>541</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>545</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>546</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>549</span> </span><span class="WHIT"> -<span class='line'>550</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>551</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>553</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>554</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>556</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>559</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>560</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>563</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>564</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>566</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>567</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>568</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>569</span> </span><span class="WHIT"> -<span class='line'>570</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="WHIT"> -<span class='line'>572</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>573</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>574</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>582</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>583</span> </span><span class="WHIT"> -<span class='line'>584</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="WHIT"> -<span class='line'>587</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>594</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>595</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>597</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>598</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>599</span> -<span class='line'>600</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>602</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>603</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>604</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>605</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>606</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>607</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>608</span> </span><span class="WHIT"> -<span class='line'>609</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>610</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>611</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>612</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>619</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>620</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>624</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>625</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>630</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>651</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>657</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>659</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>660</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>661</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>665</span> -<span class='line'>666</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>674</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>676</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>677</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>678</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>679</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>680</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>681</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>682</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>683</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>684</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>685</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>687</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>703</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>704</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>705</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>706</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>707</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>715</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>716</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>717</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>718</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>719</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>720</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>721</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>722</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>723</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>724</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>725</span> </span><span class="WHIT"> -<span class='line'>726</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>727</span> -<span class='line'>728</span> </span><span class="COMM">/** -<span class='line'>729</span> * @constructor -<span class='line'>730</span> * @augments KGraphic -<span class='line'>731</span> */</span><span class="WHIT"> -<span class='line'>732</span> </span><span class="WHIT"> -<span class='line'>733</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>734</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>735</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>736</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>737</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>738</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>739</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>740</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>741</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>743</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>744</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>745</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>746</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>747</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>748</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>749</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>750</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>751</span> </span><span class="COMM">//karma wrapper, we avoid using "new"</span><span class="WHIT"> -<span class='line'>752</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>753</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>754</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>755</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>756</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>757</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>758</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>759</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>760</span> </span></pre></body></html>
\ No newline at end of file diff --git a/jsdoc/symbols/src/js_jquery.karma-0.3.js.html b/jsdoc/symbols/src/js_jquery.karma-0.3.js.html deleted file mode 100755 index eb4ab82..0000000 --- a/jsdoc/symbols/src/js_jquery.karma-0.3.js.html +++ /dev/null @@ -1,721 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe L�pez Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="COMM">/** -<span class='line'> 33</span> * @author <a href="mailto:zer.subzero@gmail.com">Felipe L�pez</a> -<span class='line'> 34</span> */</span><span class="WHIT"> -<span class='line'> 35</span> </span><span class="WHIT"> -<span class='line'> 36</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">$</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 37</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 38</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 46</span> -<span class='line'> 47</span> </span><span class="COMM">/** -<span class='line'> 48</span> * Karma -<span class='line'> 49</span> * @class Represents a person. -<span class='line'> 50</span> **/</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'> 74</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'> 80</span> * getLanguage -<span class='line'> 81</span> * get the language acording to the browser language -<span class='line'> 82</span> */</span><span class="WHIT"> -<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla / ie</span><span class="WHIT"> -<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>102</span> *i18nWrapper -<span class='line'>103</span> *creates a new Gettext object and returns a shortcut function to translate strings -<span class='line'>104</span> *we use karma.Gettext.js it's a modification of Gettext.js http://jsgettext.berlios.de/doc/html/Gettext.html -<span class='line'>105</span> */</span><span class="WHIT"> -<span class='line'>106</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>107</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>119</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>122</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>123</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>124</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>125</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>132</span> * -<span class='line'>133</span> */</span><span class="WHIT"> -<span class='line'>134</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>135</span> </span><span class="WHIT"> -<span class='line'>136</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>139</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioClip</span><span class="WHIT"> -<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>146</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>147</span> * -<span class='line'>148</span> */</span><span class="WHIT"> -<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>152</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>153</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>154</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>157</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>158</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>161</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>163</span> </span><span class="WHIT"> -<span class='line'>164</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>165</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>166</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>167</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>169</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>170</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>171</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>172</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>173</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>174</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>177</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>185</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>186</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>187</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>190</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>191</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>208</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>209</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>210</span> -<span class='line'>211</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>212</span> </span><span class="WHIT"> -<span class='line'>213</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>226</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>227</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>228</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>230</span> </span><span class="WHIT"> -<span class='line'>231</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>232</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>233</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>234</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>245</span> -<span class='line'>246</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>252</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>256</span> -<span class='line'>257</span> -<span class='line'>258</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="WHIT"> -<span class='line'>261</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>268</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>277</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>281</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>291</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>292</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>299</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>302</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>303</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>304</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>307</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>314</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>316</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">array</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">array</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>320</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="COMM">//callback to check if all the items were loaded or got an error when loading</span><span class="WHIT"> -<span class='line'>334</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>335</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> -<span class='line'>342</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>346</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>347</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>348</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>349</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>353</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>360</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>373</span> -<span class='line'>374</span> </span><span class="COMM">//Mouse stuff</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>377</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>379</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>380</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>383</span> -<span class='line'>384</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>388</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>393</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>394</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>395</span> case "click": break; -<span class='line'>396</span> }*/</span><span class="WHIT"> -<span class='line'>397</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>398</span> for (var i in ev) { -<span class='line'>399</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>400</span> } -<span class='line'>401</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>403</span> -<span class='line'>404</span> </span><span class="COMM">/* -<span class='line'>405</span> Master Class creator -<span class='line'>406</span> supports multiple inheritance, warning it's NOT optimal -<span class='line'>407</span> */</span><span class="WHIT"> -<span class='line'>408</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>409</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>410</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>415</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>416</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>417</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>418</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>419</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>420</span> }*/</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>425</span> -<span class='line'>426</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>427</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>429</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>430</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>431</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>434</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>435</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>439</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>440</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>441</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>442</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>443</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>444</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>445</span> </span><span class="WHIT"> -<span class='line'>446</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>447</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>449</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>450</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>451</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>452</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>453</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>457</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>458</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>459</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>461</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>462</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>463</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>464</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>465</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>466</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>467</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>469</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>470</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>471</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>473</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>474</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>475</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>476</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>477</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>478</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>480</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>481</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>482</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>483</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> -<span class='line'>487</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>488</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>489</span> -<span class='line'>490</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>491</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>492</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>493</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>494</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> -<span class='line'>504</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>508</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>509</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>510</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>519</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> -<span class='line'>524</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> -<span class='line'>526</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>533</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>535</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>536</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> -<span class='line'>538</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> -<span class='line'>541</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>545</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>546</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>549</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>550</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>551</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>553</span> -<span class='line'>554</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>556</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>559</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>560</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="WHIT"> -<span class='line'>563</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>564</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>566</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>567</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>568</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>569</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>570</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>572</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>573</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>574</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>582</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>583</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>584</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>587</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>594</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>595</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>597</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>598</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>599</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>600</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>602</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>603</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>604</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>605</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>606</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>607</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>608</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>609</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>610</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>611</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>612</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>619</span> -<span class='line'>620</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>624</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>625</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>630</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>651</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>657</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>659</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>660</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>661</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>665</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>674</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>676</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>677</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>678</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>679</span> </span><span class="WHIT"> -<span class='line'>680</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>681</span> -<span class='line'>682</span> </span><span class="COMM">/** -<span class='line'>683</span> * @constructor -<span class='line'>684</span> * @augments KGraphic -<span class='line'>685</span> */</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="WHIT"> -<span class='line'>687</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>703</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>704</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>705</span> </span><span class="COMM">//karma wrapper, we avoid using "new"</span><span class="WHIT"> -<span class='line'>706</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>707</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="NAME">jQuery</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>
\ No newline at end of file diff --git a/jsdoc/symbols/src/js_jquery.karma-0.4.js.html b/jsdoc/symbols/src/js_jquery.karma-0.4.js.html deleted file mode 100755 index 188cf21..0000000 --- a/jsdoc/symbols/src/js_jquery.karma-0.4.js.html +++ /dev/null @@ -1,979 +0,0 @@ -<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> - .KEYW {color: #933;} - .COMM {color: #bbb; font-style: italic;} - .NUMB {color: #393;} - .STRN {color: #393;} - .REGX {color: #339;} - .line {border-right: 1px dotted #666; color: #666; font-style: normal;} - </style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="COMM">/* -<span class='line'> 2</span> * Karma Framework -<span class='line'> 3</span> * http://wiki.sugarlabs.org/go/Karma -<span class='line'> 4</span> * -<span class='line'> 5</span> * Copyright (c) 2009 -<span class='line'> 6</span> * Felipe López Toledo zer.subzero@gmail.com -<span class='line'> 7</span> * Bryan W Berry bryan@olenepal.org -<span class='line'> 8</span> * -<span class='line'> 9</span> * Under MIT License: -<span class='line'> 10</span> * Permission is hereby granted, free of charge, to any person -<span class='line'> 11</span> * obtaining a copy of this software and associated documentation -<span class='line'> 12</span> * files (the "Software"), to deal in the Software without -<span class='line'> 13</span> * restriction, including without limitation the rights to use, -<span class='line'> 14</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell -<span class='line'> 15</span> * copies of the Software, and to permit persons to whom the -<span class='line'> 16</span> * Software is furnished to do so, subject to the following -<span class='line'> 17</span> * conditions: -<span class='line'> 18</span> * -<span class='line'> 19</span> * The above copyright notice and this permission notice shall be -<span class='line'> 20</span> * included in all copies or substantial portions of the Software. -<span class='line'> 21</span> * -<span class='line'> 22</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -<span class='line'> 23</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -<span class='line'> 24</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -<span class='line'> 25</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -<span class='line'> 26</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -<span class='line'> 27</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -<span class='line'> 28</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -<span class='line'> 29</span> * OTHER DEALINGS IN THE SOFTWARE. -<span class='line'> 30</span> */</span><span class="WHIT"> -<span class='line'> 31</span> -<span class='line'> 32</span> </span><span class="COMM">//(function ($) {</span><span class="WHIT"> -<span class='line'> 33</span> </span><span class="COMM">//helpers</span><span class="WHIT"> -<span class='line'> 34</span> </span><span class="COMM">/** -<span class='line'> 35</span> Checks if the argument (arg) is seted and if its type is 'type'.<br> -<span class='line'> 36</span> 1. if arg is seted: it returns toReturn if specified, otherwise it returns -<span class='line'> 37</span> 'true' -<span class='line'> 38</span> 2. if arg is not seted: it returns 'false' -<span class='line'> 39</span> @param arg The param to check -<span class='line'> 40</span> @param {Object} [type] The expeted type of 'arg' -<span class='line'> 41</span> @param [toReturn] object or value to return in case 1 -<span class='line'> 42</span> @returns true | false | toReturn -<span class='line'> 43</span> @example -<span class='line'> 44</span> var msg = "hi"; -<span class='line'> 45</span> valid(msg); //returns true -<span class='line'> 46</span> valid(msg, "String" ); //returns true -<span class='line'> 47</span> valid(msg, "Number"); //returns false -<span class='line'> 48</span> valid(msg, "String",false ); //returns false -<span class='line'> 49</span> valid(msg123); //returns false -<span class='line'> 50</span> **/</span><span class="WHIT"> -<span class='line'> 51</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">toReturn</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'> 63</span> -<span class='line'> 64</span> </span><span class="WHIT"> -<span class='line'> 65</span> </span><span class="COMM">/** -<span class='line'> 66</span> Karma -<span class='line'> 67</span> @class Represents a Karma (master) object. -<span class='line'> 68</span> @param {String | Object } options Constructor arguments -<span class='line'> 69</span> @param {String | Object } [options.container] Target DIV-class that will contain -<span class='line'> 70</span> any canvas element created using Karma functions -<span class='line'> 71</span> @param {String} [options.language] -<span class='line'> 72</span> <ul> -<span class='line'> 73</span> <li>if it's seted: -<span class='line'> 74</span> Karma will assume that the according language file exists and Karma will try -<span class='line'> 75</span> to load it.<li> -<span class='line'> 76</span> <li>if it's not seted: -<span class='line'> 77</span> Karma will localise the content according to the Browser language -<span class='line'> 78</span> </li> -<span class='line'> 79</span> </ul> -<span class='line'> 80</span> @param {Array} [options.language.alternatives] -<span class='line'> 81</span> Alternatives for localizing the content. The first has the priority. -<span class='line'> 82</span> @param {Object} [options.i18n] Object that contains data for i18n. -<span class='line'> 83</span> @param {Object | String} [options.i18n.root=self] -<span class='line'> 84</span> Parent element where the i18n shortcut function will be attached. -<span class='line'> 85</span> @param {String} [options.i18n.shortcut=_] Shortcut for calling i18n. -<span class='line'> 86</span> @param {Number} [options.fps=24] -<span class='line'> 87</span> Frames per second at which Karma will perform any refresh action. -<span class='line'> 88</span> @version 0.3 alpha -<span class='line'> 89</span> **/</span><span class="WHIT"> -<span class='line'> 90</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.3 alpha"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="COMM">//relative path to the po, images, sounds, etc. from the html</span><span class="WHIT"> -<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="COMM">//defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout</span><span class="WHIT"> -<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="COMM">//localized is recalculated inside localizeContent ( $ = language.lang )</span><span class="WHIT"> -<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">po</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">images</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/images/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/images/"</span><span class="WHIT"> -<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">sounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/sounds/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/sounds/"</span><span class="WHIT"> -<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">videos</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">localized</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/$/videos/"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>109</span> </span><span class="WHIT"> </span><span class="NAME">generic</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"assets/generic/videos/"</span><span class="WHIT"> -<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">this.supportedLangFileTypes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>113</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"po"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/x-po'</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'application/json'</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>117</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF start</span><span class="WHIT"> -<span class='line'>118</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>119</span> Gets the language acording to the browser language -<span class='line'>120</span> @returns {Object} <br> -<span class='line'>121</span> lang: countryCode and langCode (if specified) -<span class='line'>122</span> langCode*: language code represented as xx, example: en.<br> -<span class='line'>123</span> countryCode*: country code represented as YY, example: US.<br> -<span class='line'>124</span> *optional -<span class='line'>125</span> **/</span><span class="WHIT"> -<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>127</span> </span><span class="WHIT"> </span><span class="COMM">//console.log += navigator.language +"\n";</span><span class="WHIT"> -<span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">navigator.language</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">navigator.browserLanguage</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//mozilla/ie</span><span class="WHIT"> -<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.replace</span><span class="PUNC">(</span><span class="REGX">/_/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'-'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>130</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lang.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>131</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">country.match</span><span class="PUNC">(</span><span class="REGX">/[^a-zA-Z]/</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">country.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>136</span> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">country</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>137</span> </span><span class="STRN">"langCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>138</span> </span><span class="STRN">"countryCode"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">country</span><span class="WHIT"> -<span class='line'>139</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>141</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"lang"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>144</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>145</span> Creates a new Gettext object and returns a shortcut function to localise -<span class='line'>146</span> defined strings.<br>We use karma.Gettext.js it's a modification of -<span class='line'>147</span> <a href=http://jsgettext.berlios.de/doc/html/Gettext.html> -<span class='line'>148</span> Gettext.js</a> from beril OS. -<span class='line'>149</span> @requires karma.Gettext.js -<span class='line'>150</span> @param {Object} options The arguments of the Gettext constructor -<span class='line'>151</span> @returns {Function} A generic function to call Gettext functions -<span class='line'>152</span> The generic function will call a Gettext function according to the number of arguments passed -<span class='line'>153</span> <table> -<span class='line'>154</span> <tr> -<span class='line'>155</span> <th>No. params</th> -<span class='line'>156</span> <th>Parameters</th> -<span class='line'>157</span> <th>Gettext function called</th> -<span class='line'>158</span> </tr> -<span class='line'>159</span> <tr> -<span class='line'>160</span> <td>1</td> -<span class='line'>161</span> <td>msgid</td> -<span class='line'>162</span> <td>gettext</td> -<span class='line'>163</span> <tr> -<span class='line'>164</span> <td>2</td> -<span class='line'>165</span> <td>context, msgid</td> -<span class='line'>166</span> <td>pgettext</td> -<span class='line'>167</span> </tr> -<span class='line'>168</span> <tr> -<span class='line'>169</span> <td>3</td> -<span class='line'>170</span> <td>number, singular, plural</td> -<span class='line'>171</span> <td>ngettext</td> -<span class='line'>172</span> </tr> -<span class='line'>173</span> <tr> -<span class='line'>174</span> <td>4</td> -<span class='line'>175</span> <td>number, context, singular, plural</td> -<span class='line'>176</span> <td>npgettext</td> -<span class='line'>177</span> </tr> -<span class='line'>178</span> </table> -<span class='line'>179</span> **/</span><span class="WHIT"> -<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>181</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Gettext</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>182</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">gt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>183</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unable to initialize Gettext object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>185</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">singular</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plural</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>186</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>187</span> </span><span class="WHIT"> </span><span class="COMM">// number, context, singular, plural</span><span class="WHIT"> -<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.npgettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>190</span> </span><span class="WHIT"> </span><span class="COMM">// number, singular, plural</span><span class="WHIT"> -<span class='line'>191</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.ngettext</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>192</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>193</span> </span><span class="WHIT"> </span><span class="COMM">// context, msgid</span><span class="WHIT"> -<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.pgettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>195</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>196</span> </span><span class="WHIT"> </span><span class="COMM">// msgid</span><span class="WHIT"> -<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gt.gettext</span><span class="PUNC">(</span><span class="NAME">str1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>198</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>199</span> </span><span class="WHIT"> </span><span class="COMM">// nothing passed in; return blank string.</span><span class="WHIT"> -<span class='line'>200</span> </span><span class="WHIT"> </span><span class="COMM">// XXX: we could error here, but that may cause more harm than good.</span><span class="WHIT"> -<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>203</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>204</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>205</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>206</span> Localises the inline html content and it creates the localised paths for -<span class='line'>207</span> "images", "sounds" and "videos". -<span class='line'>208</span> <b>Note:</b>Inline html localisation under development<br> -<span class='line'>209</span> @param {String} lang The language that will be used to localise the content -<span class='line'>210</span> @see <a href="http://wiki.sugarlabs.org/go/Karma/Bundle_layout"> -<span class='line'>211</span> Karma Bundle_layout</a> -<span class='line'>212</span> **/</span><span class="WHIT"> -<span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>214</span> </span><span class="WHIT"> -<span class='line'>215</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">toFix.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>218</span> </span><span class="NAME">toFix</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized.replace</span><span class="PUNC">(</span><span class="STRN">'\$'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>219</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>220</span> </span><span class="WHIT"> </span><span class="COMM">//dirty hack to support {lang}_AudioFile</span><span class="WHIT"> -<span class='line'>221</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"_"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>222</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">localized</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">that.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">generic</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>224</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>225</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>226</span> It will attempt to load a language file, the posible languages are defined -<span class='line'>227</span> on language.alternatives. -<span class='line'>228</span> <p>The language file type could be: .po (Pootle) or .json (JSON). The -<span class='line'>229</span> precedence between file types is defined according to which is defined first -<span class='line'>230</span> in supportedLangFileTypes. By default Pootle files has precedence over JSON, -<span class='line'>231</span> files.</p> -<span class='line'>232</span> @see Karma -<span class='line'>233</span> @returns {String} The name of the language file loaded. Example: en-US.po -<span class='line'>234</span> **/</span><span class="WHIT"> -<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>236</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>237</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>238</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the po or json language file if it exists. </span><span class="WHIT"> -<span class='line'>239</span> </span><span class="WHIT"> </span><span class="COMM">//the lang order is acording to options.language.alternatives</span><span class="WHIT"> -<span class='line'>240</span> </span><span class="WHIT"> </span><span class="COMM">//the type (po or json or ...) is defined in supportedLangFileTypes</span><span class="WHIT"> -<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">that.language.alternatives</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>242</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes.length</span><span class="WHIT"> -<span class='line'>243</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">$.ajax</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.paths.po</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>246</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">dataType</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>249</span> </span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//important: touch it at your own risk</span><span class="WHIT"> -<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">success</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>251</span> </span><span class="WHIT"> -<span class='line'>252</span> </span><span class="NAME">loaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> -<span class='line'>253</span> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>254</span> </span><span class="WHIT"> </span><span class="COMM">//i18n</span><span class="WHIT"> -<span class='line'>255</span> </span><span class="WHIT"> </span><span class="COMM">//we pass the data so we avoid re-loading the file</span><span class="WHIT"> -<span class='line'>256</span> </span><span class="WHIT"> </span><span class="COMM">//creates the shorcout</span><span class="WHIT"> -<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">that.i18n.root</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">that.i18n.shortcut</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i18nWrapper</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>258</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>259</span> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>260</span> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>261</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.supportedLangFileTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>262</span> </span><span class="NAME">uri</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> -<span class='line'>263</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>264</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>265</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">localiseContent</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>268</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>269</span> </span><span class="WHIT"> </span><span class="NAME">error</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">XHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textStatus</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errorThrown</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>270</span> </span><span class="WHIT"> </span><span class="COMM">//the file doesn't exist or it wasn't possible to load it</span><span class="WHIT"> -<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>272</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>274</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tryNext</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">loaded</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>278</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>279</span> </span><span class="WHIT"> </span><span class="COMM">//PRIVATE STUFF end</span><span class="WHIT"> -<span class='line'>280</span> </span><span class="WHIT"> </span><span class="COMM">// default options </span><span class="WHIT"> -<span class='line'>281</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>282</span> </span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#karma-main"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>283</span> </span><span class="WHIT"> </span><span class="NAME">language</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>284</span> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">alternatives</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'en-US'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'en'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">countryCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>287</span> </span><span class="WHIT"> </span><span class="NAME">langCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>288</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">i18n</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>290</span> </span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// self is global</span><span class="WHIT"> -<span class='line'>291</span> </span><span class="WHIT"> </span><span class="NAME">shortcut</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> -<span class='line'>292</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>293</span> </span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>295</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>296</span> </span><span class="WHIT"> </span><span class="NAME">fps</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> -<span class='line'>297</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>298</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>299</span> -<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">this.library</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"images"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shapes"</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>301</span> </span><span class="WHIT"> -<span class='line'>302</span> </span><span class="COMM">//initializes the defaultOptions argument</span><span class="WHIT"> -<span class='line'>303</span> </span><span class="WHIT"> </span><span class="COMM">//1 argument: string. assume it's the container</span><span class="WHIT"> -<span class='line'>304</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getLanguage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>307</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>308</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>309</span> </span><span class="WHIT"> </span><span class="COMM">//if language is string, assume it's the language.lang</span><span class="WHIT"> -<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">options.language</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">lang</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options.lang</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>313</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>314</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>315</span> </span><span class="WHIT"> </span><span class="COMM">//copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz </span><span class="WHIT"> -<span class='line'>316</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>317</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>318</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>319</span> </span><span class="WHIT"> -<span class='line'>320</span> </span><span class="COMM">//initializes i18n</span><span class="WHIT"> -<span class='line'>321</span> </span><span class="WHIT"> </span><span class="COMM">//add the localized language to the language.alternatives</span><span class="WHIT"> -<span class='line'>322</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>323</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>324</span> </span><span class="NAME">this.language.langCode</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>325</span> </span><span class="NAME">this.language.countryCode</span><span class="WHIT"> -<span class='line'>326</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>327</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>328</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>329</span> </span><span class="WHIT"> </span><span class="NAME">this.language.alternatives.unshift</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.language.lang</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>330</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>331</span> </span><span class="WHIT"> </span><span class="COMM">//try to load the localized lang file (po or json or ...)</span><span class="WHIT"> -<span class='line'>332</span> </span><span class="WHIT"> </span><span class="NAME">this.language.fileLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadAlternatives</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>333</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>334</span> -<span class='line'>335</span> </span><span class="WHIT"> </span><span class="COMM">//initializes the container</span><span class="WHIT"> -<span class='line'>336</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>337</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>338</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>339</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>340</span> </span><span class="WHIT"> </span><span class="NAME">gk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>341</span> </span><span class="WHIT"> </span><span class="STRN">"paths"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.paths</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>342</span> </span><span class="WHIT"> </span><span class="STRN">"container"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> -<span class='line'>343</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>344</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>345</span> </span><span class="COMM">/** -<span class='line'>346</span> Creates a new canvas element. -<span class='line'>347</span> @param {Number} [width=100] canvas width -<span class='line'>348</span> @param {Number} [height=100] canvas height -<span class='line'>349</span> **/</span><span class="WHIT"> -<span class='line'>350</span> </span><span class="NAME">Karma.prototype.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>352</span> </span><span class="WHIT"> -<span class='line'>353</span> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>354</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>355</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>356</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.getContext</span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>358</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>359</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Your browser doesn't support canvas, \ -<span class='line'>360</span> try the newest Firefox, Safari or Google Chrome"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>361</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>362</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>363</span> </span><span class="WHIT"> </span><span class="NAME">gk.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>364</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ctx</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>365</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>366</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"contextmenu"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ev</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>367</span> </span><span class="WHIT"> </span><span class="COMM">//alert("contextmenu");</span><span class="WHIT"> -<span class='line'>368</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>369</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>370</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.addEventListener</span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>371</span> </span><span class="NAME">handleEvents</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>372</span> </span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>373</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>374</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>375</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>376</span> </span><span class="COMM">/** -<span class='line'>377</span> Clears a rectangular area within the canvas -<span class='line'>378</span> @param {Number} [x=0] Start position of x -<span class='line'>379</span> @param {Number} [y=0] Start position of y -<span class='line'>380</span> @param {Number} [width=canvas width] Square width -<span class='line'>381</span> @param {Number} [height=canvas height] Square height -<span class='line'>382</span> **/</span><span class="WHIT"> -<span class='line'>383</span> </span><span class="NAME">Karma.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>384</span> </span><span class="WHIT"> </span><span class="NAME">this.ctx.clearRect</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>385</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>386</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>387</span> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>388</span> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> -<span class='line'>389</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>390</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>391</span> </span><span class="COMM">//Karma packages</span><span class="WHIT"> -<span class='line'>392</span> </span><span class="COMM">/** -<span class='line'>393</span> @namespace Geometry functions. -<span class='line'>394</span> **/</span><span class="WHIT"> -<span class='line'>395</span> </span><span class="NAME">Karma.prototype.geometry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>396</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>397</span> Converts a value from degrees to radians. -<span class='line'>398</span> @param {Number} angle The angle in degrees -<span class='line'>399</span> @returns {Number} The The angle in radians -<span class='line'>400</span> **/</span><span class="WHIT"> -<span class='line'>401</span> </span><span class="WHIT"> </span><span class="NAME">radians</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>402</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">angle</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>403</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>404</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>405</span> Get the square of the Euclidian (ordinary) distance between 2 points.<br> -<span class='line'>406</span> <b>Warning:</b> It's slower than distance2 function. -<span class='line'>407</span> @param {Number} Point Point No. 0 -<span class='line'>408</span> @param {Number} Point Point No. 1 -<span class='line'>409</span> @returns {Number} The square of the Euclidian distance -<span class='line'>410</span> **/</span><span class="WHIT"> -<span class='line'>411</span> </span><span class="WHIT"> </span><span class="NAME">distance2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>412</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>413</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>414</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>415</span> Get the Euclidian (ordinary) distance between 2 points.<br> -<span class='line'>416</span> <b>Warning:</b> It's slower than distance2 function -<span class='line'>417</span> @param {Number} Point Point No. 0 -<span class='line'>418</span> @param {Number} Point Point No. 1 -<span class='line'>419</span> @returns {Number} The Euclidian distance -<span class='line'>420</span> **/</span><span class="WHIT"> -<span class='line'>421</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>422</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.geometry.distance2</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>423</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>424</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>425</span> </span><span class="COMM">/** -<span class='line'>426</span> @namespace Graphics functions. -<span class='line'>427</span> **/</span><span class="WHIT"> -<span class='line'>428</span> </span><span class="NAME">Karma.prototype.graphics</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>429</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>430</span> Creates a new rectangle. It's a shortcut for calling 'new KRectangle(..)'. -<span class='line'>431</span> **/</span><span class="WHIT"> -<span class='line'>432</span> </span><span class="WHIT"> </span><span class="NAME">rectangle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>433</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>434</span> Creates a new circle. It's a shortcut for calling 'new KCircle(..)'. -<span class='line'>435</span> **/</span><span class="WHIT"> -<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">circle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KCircle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>437</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>438</span> </span><span class="COMM">/** -<span class='line'>439</span> @namespace Math functions. -<span class='line'>440</span> **/</span><span class="WHIT"> -<span class='line'>441</span> </span><span class="NAME">Karma.prototype.math</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>442</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>443</span> Generates a random bumber between lower bound and upper bound inclusive. -<span class='line'>444</span> @param {Number} lower The lower bound -<span class='line'>445</span> @param {Number} upper The upper bound -<span class='line'>446</span> @returns {Number} The generated number -<span class='line'>447</span> **/</span><span class="WHIT"> -<span class='line'>448</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>449</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">upper</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lower</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>450</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>451</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>452</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>453</span> </span><span class="COMM">//everything inside karma.graphics is exported to karma.prototype</span><span class="WHIT"> -<span class='line'>454</span> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Karma.prototype.graphics</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>455</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>456</span> </span><span class="COMM">/** -<span class='line'>457</span> Attaches an Object of Arrays for preloading. There are 3 valid categories (arrays): -<span class='line'>458</span> 'images' for images, 'sounds' for sounds and 'videos' for video files.<br> -<span class='line'>459</span> Any object within any category must have an 'id' and 'file' attributes. -<span class='line'>460</span> Additional attributes will be used as arguments to the constructor of the -<span class='line'>461</span> corresponding object.<br> -<span class='line'>462</span> Any media file successfully loaded will be availabe through the 'library'. -<span class='line'>463</span> The init finishes when all the valid files have finished loading or have -<span class='line'>464</span> failed on the process.<br> -<span class='line'>465</span> Please note that the preloadinf will NOT start unless you call 'main' function. -<span class='line'>466</span> @param {Object} [toLoad] The Object that has the arrays for preloading. -<span class='line'>467</span> @param {Array} [toLoad.images] The images -<span class='line'>468</span> @param {Array} [toLoad.sounds] The sounds -<span class='line'>469</span> @param {Array} [toLoad.videos] The videos -<span class='line'>470</span> @returns {Object} this -<span class='line'>471</span> @see Karma#main -<span class='line'>472</span> @example -<span class='line'>473</span> var k = $.karma ({container: "#karma-main"/}); -<span class='line'>474</span> k.size(1200, 800); -<span class='line'>475</span> k.init({ -<span class='line'>476</span> images: [ -<span class='line'>477</span> {id: "ball", file: "ball.png", localized : false }, -<span class='line'>478</span> ], -<span class='line'>479</span> sounds: [ -<span class='line'>480</span> {id: "correct", file: "correct.ogg" }, -<span class='line'>481</span> ] -<span class='line'>482</span> });//1 image and 1 sound attached to load -<span class='line'>483</span> **/</span><span class="WHIT"> -<span class='line'>484</span> </span><span class="NAME">Karma.prototype.init</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>485</span> </span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toLoad</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>486</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//chaining :)</span><span class="WHIT"> -<span class='line'>487</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>488</span> -<span class='line'>489</span> </span><span class="COMM">/** -<span class='line'>490</span> Main function. Any Karma function call should be inside the callback function. -<span class='line'>491</span> The callback function will be executed when the preloading finishes. -<span class='line'>492</span> @param {Function} cb The callback funtion -<span class='line'>493</span> @see Karma#init -<span class='line'>494</span> **/</span><span class="WHIT"> -<span class='line'>495</span> </span><span class="NAME">Karma.prototype.main</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>496</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>497</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>498</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"images"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sounds"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"videos"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>499</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">counters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>500</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>501</span> </span><span class="WHIT"> </span><span class="COMM">//get the total items</span><span class="WHIT"> -<span class='line'>502</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>503</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>504</span> </span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>506</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>507</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>508</span> callback to check if all the items were loaded or got an error when -<span class='line'>509</span> loading -<span class='line'>510</span> **/</span><span class="WHIT"> -<span class='line'>511</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">checkAllLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>512</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>513</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>514</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">counters.loaded</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">counters.error</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">totalItems</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>515</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>517</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>518</span> </span><span class="WHIT"> -<span class='line'>519</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">categories.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>520</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">categories</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>521</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>522</span> </span><span class="WHIT"> </span><span class="COMM">//load all the category elements</span><span class="WHIT"> -<span class='line'>523</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">category.substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">category.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>524</span> </span><span class="WHIT"> </span><span class="NAME">$.each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pendingToLoad</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>526</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">config.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>527</span> </span><span class="WHIT"> </span><span class="COMM">//register the elements into the library</span><span class="WHIT"> -<span class='line'>528</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Karma.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>529</span> </span><span class="NAME">config</span><span class="WHIT"> -<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>531</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>532</span> </span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>533</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>534</span> </span><span class="WHIT"> </span><span class="NAME">that.library</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">category</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">media.addEventListener</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>535</span> </span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="NAME">checkAllLoaded</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>536</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>537</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>538</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>539</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>540</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>541</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>543</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>544</span> </span><span class="COMM">/**A shortcut for calling 'KImage( )' -<span class='line'>545</span> @see KImage -<span class='line'>546</span> **/</span><span class="WHIT"> -<span class='line'>547</span> </span><span class="NAME">Karma.prototype.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>548</span> </span><span class="COMM">/**A shortcut for calling 'KSound( )' -<span class='line'>549</span> @see KSound -<span class='line'>550</span> -<span class='line'>551</span> **/</span><span class="WHIT"> -<span class='line'>552</span> </span><span class="NAME">Karma.prototype.sound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>553</span> </span><span class="COMM">/**A shortcut for calling 'KVideo( )' -<span class='line'>554</span> @see KVideo -<span class='line'>555</span> -<span class='line'>556</span> **/</span><span class="WHIT"> -<span class='line'>557</span> </span><span class="NAME">Karma.prototype.video</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"Not implemented yet"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>558</span> </span><span class="COMM">/**A shortcut for calling 'KGroup( )' -<span class='line'>559</span> @see KGroup -<span class='line'>560</span> **/</span><span class="WHIT"> -<span class='line'>561</span> </span><span class="NAME">Karma.prototype.group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>562</span> </span><span class="COMM">/**A shortcut for calling 'KButton( )' -<span class='line'>563</span> @see KButton# -<span class='line'>564</span> **/</span><span class="WHIT"> -<span class='line'>565</span> </span><span class="NAME">Karma.prototype.button</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>566</span> -<span class='line'>567</span> </span><span class="COMM">/** -<span class='line'>568</span> Mouse -<span class='line'>569</span> **/</span><span class="WHIT"> -<span class='line'>570</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mouse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>571</span> </span><span class="COMM">/** -<span class='line'>572</span> Gets the 'x' and 'y' mouse coordinates relatives to the canvas -<span class='line'>573</span> @returns {Object} An Object with 'x' and 'y' attributes -<span class='line'>574</span> **/</span><span class="WHIT"> -<span class='line'>575</span> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>576</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>578</span> </span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerX</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>579</span> </span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ev.layerY</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>580</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>581</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>582</span> -<span class='line'>583</span> </span><span class="COMM">//Events stuff</span><span class="WHIT"> -<span class='line'>584</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">master</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>585</span> </span><span class="NAME">master.buttons</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>586</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handleEvents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>587</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mouse.getRelativeCanvasPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>588</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>589</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isPointInPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">xy.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xy.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>590</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">onClick</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ev</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>592</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>593</span> </span><span class="WHIT"> </span><span class="COMM">/*switch(ev.type){ -<span class='line'>594</span> case "click": break; -<span class='line'>595</span> }*/</span><span class="WHIT"> -<span class='line'>596</span> </span><span class="WHIT"> </span><span class="COMM">/*var s=""; -<span class='line'>597</span> for (var i in ev) { -<span class='line'>598</span> s+=i+"="+ev[i]+"\n"; -<span class='line'>599</span> } -<span class='line'>600</span> alert(s);*/</span><span class="WHIT"> -<span class='line'>601</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>602</span> -<span class='line'>603</span> </span><span class="COMM">/** -<span class='line'>604</span> Master Class creator. Supports multiple inheritance. -<span class='line'>605</span> It creates a new Object, the new Object will contain the methods that has each -<span class='line'>606</span> argument passed (Function or Object). When creating an instance of the new -<span class='line'>607</span> Object it will use the 'init' function as the initializer.<br> -<span class='line'>608</span> If there is more than one method with the same name, it'll be overwritten by the -<span class='line'>609</span> last one.<br> -<span class='line'>610</span> warning it's NOT optimal. -<span class='line'>611</span> @returns {Object} A new class -<span class='line'>612</span> **/</span><span class="WHIT"> -<span class='line'>613</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>614</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">log</span><span class="PUNC">=</span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>615</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>616</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>617</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>618</span> </span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>619</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>620</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>621</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>622</span> </span><span class="WHIT"> </span><span class="COMM">//we inject all the init functions </span><span class="WHIT"> -<span class='line'>623</span> </span><span class="WHIT"> </span><span class="COMM">/*for ( var i = 0; i < this.__parents.length; i++ ) { -<span class='line'>624</span> this.__parents[ i ].apply ( this, arguments ); -<span class='line'>625</span> }*/</span><span class="WHIT"> -<span class='line'>626</span> </span><span class="WHIT"> </span><span class="COMM">//call the real class init</span><span class="WHIT"> -<span class='line'>627</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.init</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>628</span> </span><span class="WHIT"> </span><span class="NAME">this.init.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>629</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>630</span> -<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>632</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>633</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>634</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>635</span> </span><span class="WHIT"> </span><span class="NAME">log</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"**"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">+</span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>636</span> </span><span class="WHIT"> </span><span class="COMM">//if ( a === "function") {</span><span class="WHIT"> -<span class='line'>637</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>639</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a.prototype[j]+"\n";</span><span class="WHIT"> -<span class='line'>640</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.prototype</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>642</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>643</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>644</span> </span><span class="WHIT"> </span><span class="COMM">//if ( typeof a === "object") {</span><span class="WHIT"> -<span class='line'>645</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>646</span> </span><span class="WHIT"> </span><span class="COMM">//log += j+" = "+a[j]+"\n";</span><span class="WHIT"> -<span class='line'>647</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.prototype</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>648</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>650</span> </span><span class="WHIT"> -<span class='line'>651</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>652</span> </span><span class="WHIT"> </span><span class="NAME">o.prototype.__parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>653</span> </span><span class="WHIT"> </span><span class="COMM">//alert( log );</span><span class="WHIT"> -<span class='line'>654</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//(function ( ) { return new o( arguments );});</span><span class="WHIT"> -<span class='line'>655</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>656</span> </span><span class="COMM">/** -<span class='line'>657</span> Karma basic Object -<span class='line'>658</span> @class The basic Karma object -<span class='line'>659</span> @param {Object} [options] Options -<span class='line'>660</span> @param {String} [options.localized = true] The object will be localized -<span class='line'>661</span> **/</span><span class="WHIT"> -<span class='line'>662</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>663</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>664</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>665</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="NAME">options.localized</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>667</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>668</span> </span><span class="WHIT"> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>669</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>670</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>672</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>673</span> </span><span class="COMM">/** -<span class='line'>674</span> Graphics basic Object -<span class='line'>675</span> @class General methods for any Graphic object -<span class='line'>676</span> @param {Object} [options] Options -<span class='line'>677</span> @param {Number} [options.x = 0] The 'x' position of the object -<span class='line'>678</span> @param {Number} [options.y = 0] The 'y' position of the object -<span class='line'>679</span> @param {Number} [options.z = 0] The 'z' index of the object -<span class='line'>680</span> @param {Number} [options.width = 0] The 'width' of the object -<span class='line'>681</span> @param {Number} [options.height = 0] The 'height' of the object -<span class='line'>682</span> @param {Boolean} [options.visible = true] Defines if the object will be visible -<span class='line'>683</span> when drawing -<span class='line'>684</span> @augments KObject -<span class='line'>685</span> **/</span><span class="WHIT"> -<span class='line'>686</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>687</span> </span><span class="WHIT"> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>688</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>690</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>691</span> </span><span class="NAME">KObject.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.localized</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>692</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>693</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>694</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>696</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>697</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> -<span class='line'>699</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>701</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>702</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>703</span> @memberOf KGraphic -<span class='line'>704</span> Determines if the 'x' and 'y' coodinates are inside the object. -<span class='line'>705</span> @returns {Boolean} 'true' if the coordinates are inside or on the border -<span class='line'>706</span> of the object, otherwise 'false' -<span class='line'>707</span> **/</span><span class="WHIT"> -<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>709</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> -<span class='line'>710</span> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">+</span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>711</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>712</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bubble</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>713</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>714</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>715</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>716</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>717</span> </span><span class="COMM">/** -<span class='line'>718</span> Supports multiple objects -<span class='line'>719</span> @class -<span class='line'>720</span> **/</span><span class="WHIT"> -<span class='line'>721</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KGroup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>722</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>723</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>724</span> </span><span class="WHIT"> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>725</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>726</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>727</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>728</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>729</span> @memberOf KGroup -<span class='line'>730</span> Adds each argument passed to the funtion to chilNodes. -<span class='line'>731</span> @param {Array:KGraphic} arguments The elements to add to childNodes -<span class='line'>732</span> @see KGroup#draw -<span class='line'>733</span> **/</span><span class="WHIT"> -<span class='line'>734</span> </span><span class="WHIT"> </span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>735</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>736</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>737</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>738</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>739</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>740</span> </span><span class="WHIT"> -<span class='line'>741</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>743</span> </span><span class="WHIT"> </span><span class="NAME">removeChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>744</span> </span><span class="WHIT"> </span><span class="COMM">//FIXME</span><span class="WHIT"> -<span class='line'>745</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>746</span> </span><span class="WHIT"> </span><span class="COMM">/** -<span class='line'>747</span> @memberOf KGroup -<span class='line'>748</span> Draws all the elements in childNodes. The elements are drawed according -<span class='line'>749</span> to its 'z' (z-index) value. -<span class='line'>750</span> @see KGroup#appendChild -<span class='line'>751</span> **/</span><span class="WHIT"> -<span class='line'>752</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>753</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>754</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>755</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes.sort</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">g1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>756</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g1.z</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">g2.z</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>757</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>758</span> </span><span class="WHIT"> </span><span class="NAME">this.sorted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>759</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>760</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>761</span> </span><span class="WHIT"> </span><span class="NAME">this.childNodes</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>762</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>763</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>764</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>765</span> </span><span class="WHIT"> </span><span class="NAME">isPointInPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>766</span> </span><span class="WHIT"> </span><span class="COMM">//TODO </span><span class="WHIT"> -<span class='line'>767</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>768</span> </span><span class="WHIT"> -<span class='line'>769</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>770</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>771</span> -<span class='line'>772</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>773</span> </span><span class="WHIT"> -<span class='line'>774</span> </span><span class="NAME">KObject</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>775</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>776</span> </span><span class="WHIT"> -<span class='line'>777</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>778</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>779</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"file and type needed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>780</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>781</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>782</span> </span><span class="NAME">KObject.init.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>783</span> </span><span class="WHIT"> -<span class='line'>784</span> </span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>785</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>786</span> </span><span class="WHIT"> -<span class='line'>787</span> </span><span class="NAME">this.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>788</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>789</span> </span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>790</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>791</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>792</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Audio</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>793</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Media type not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>794</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>795</span> </span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gk.paths</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"s"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">[</span><span class="WHIT"> -<span class='line'>796</span> </span><span class="NAME">this.localized</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"localized"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"generic"</span><span class="WHIT"> -<span class='line'>797</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>798</span> </span><span class="WHIT"> </span><span class="NAME">this.media.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>799</span> -<span class='line'>800</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>801</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>802</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>803</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>804</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>805</span> </span><span class="WHIT"> </span><span class="NAME">this.media.addEventListener</span><span class="PUNC">(</span><span class="STRN">"abort"</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>806</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">that.status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"aborted"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>807</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>808</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>809</span> </span><span class="WHIT"> -<span class='line'>810</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>811</span> </span><span class="WHIT"> -<span class='line'>812</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>813</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>814</span> -<span class='line'>815</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>816</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>817</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>818</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>819</span> </span><span class="WHIT"> -<span class='line'>820</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>821</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>822</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>823</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>824</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>825</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>826</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>827</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>828</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>829</span> </span><span class="WHIT"> </span><span class="COMM">//w : undefined,</span><span class="WHIT"> -<span class='line'>830</span> </span><span class="WHIT"> </span><span class="COMM">//h : undefined,</span><span class="WHIT"> -<span class='line'>831</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>832</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>833</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>834</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>835</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isReady</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>836</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>837</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>838</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.drawImage</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.media</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>839</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>840</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>841</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>842</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.complete</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>843</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.media.naturalWidth</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>844</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>845</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>846</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>847</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>848</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>849</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>850</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KSound</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>851</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KMedia*/</span><span class="WHIT"> -<span class='line'>852</span> </span><span class="WHIT"> </span><span class="NAME">KMedia</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>853</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>854</span> </span><span class="WHIT"> -<span class='line'>855</span> </span><span class="NAME">init</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>856</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>857</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>858</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>859</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>860</span> </span><span class="WHIT"> </span><span class="NAME">KMedia.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>861</span> </span><span class="WHIT"> </span><span class="COMM">//next line is important!</span><span class="WHIT"> -<span class='line'>862</span> </span><span class="WHIT"> </span><span class="NAME">this.media.load</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>863</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>864</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>865</span> </span><span class="WHIT"> </span><span class="NAME">isReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>866</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readyState</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>867</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>868</span> </span><span class="WHIT"> </span><span class="NAME">play</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>869</span> </span><span class="WHIT"> </span><span class="NAME">this.media.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>870</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>871</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>872</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>873</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>874</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>875</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> -<span class='line'>876</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>877</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>878</span> </span><span class="WHIT"> -<span class='line'>879</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>880</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>881</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>882</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>883</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>884</span> </span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>885</span> </span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>886</span> </span><span class="WHIT"> </span><span class="NAME">fillStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>887</span> </span><span class="WHIT"> </span><span class="NAME">strokeStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'#000'</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>888</span> </span><span class="WHIT"> </span><span class="NAME">openPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> -<span class='line'>889</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>890</span> </span><span class="WHIT"> </span><span class="NAME">$.extend</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>891</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>892</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>893</span> </span><span class="WHIT"> </span><span class="COMM">//if ( this.visible ) {</span><span class="WHIT"> -<span class='line'>894</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fillStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fillStyle</span><span class="WHIT"> -<span class='line'>895</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.strokeStyle</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.strokeStyle</span><span class="WHIT"> -<span class='line'>896</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.fill</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>897</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.fill</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>898</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stroke</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>899</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.stroke</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>900</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.openPath</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> -<span class='line'>901</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.closePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>902</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.restore</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>903</span> </span><span class="WHIT"> </span><span class="COMM">//}</span><span class="WHIT"> -<span class='line'>904</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>905</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>906</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>907</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>908</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KRectangle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>909</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KShape*/</span><span class="WHIT"> -<span class='line'>910</span> </span><span class="WHIT"> </span><span class="NAME">KShape</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>911</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>912</span> </span><span class="WHIT"> -<span class='line'>913</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>914</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>915</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>916</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>917</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>918</span> </span><span class="WHIT"> </span><span class="NAME">KShape.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>919</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>921</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>922</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>923</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.save</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>924</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.beginPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>925</span> </span><span class="WHIT"> </span><span class="NAME">gk.ctx.rect</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>926</span> </span><span class="WHIT"> </span><span class="NAME">KShape.draw.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>927</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>928</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>929</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>930</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.visible</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>931</span> </span><span class="WHIT"> -<span class='line'>932</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>933</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>934</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>935</span> </span><span class="WHIT"> -<span class='line'>936</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>937</span> -<span class='line'>938</span> </span><span class="COMM">/**@class_ */</span><span class="WHIT"> -<span class='line'>939</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">KButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class</span><span class="PUNC">(</span><span class="WHIT"> -<span class='line'>940</span> </span><span class="WHIT"> </span><span class="COMM">/**@lends_ KGraphic*/</span><span class="WHIT"> -<span class='line'>941</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>942</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>943</span> </span><span class="WHIT"> -<span class='line'>944</span> </span><span class="NAME">init</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>945</span> </span><span class="WHIT"> </span><span class="COMM">//ADD multiple constructors support</span><span class="WHIT"> -<span class='line'>946</span> </span><span class="WHIT"> </span><span class="COMM">//x,y,w,h</span><span class="WHIT"> -<span class='line'>947</span> </span><span class="WHIT"> </span><span class="COMM">//w,y,w,h,options</span><span class="WHIT"> -<span class='line'>948</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">valid</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>949</span> </span><span class="WHIT"> </span><span class="NAME">KGraphic.init.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>950</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>951</span> </span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.id</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>952</span> </span><span class="WHIT"> </span><span class="NAME">master.buttons.push</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>953</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>954</span> </span><span class="WHIT"> </span><span class="NAME">draw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> -<span class='line'>955</span> </span><span class="WHIT"> </span><span class="NAME">onClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">//callback</span><span class="WHIT"> -<span class='line'>956</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>957</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>958</span> </span><span class="COMM">//</span><span class="WHIT"> -<span class='line'>959</span> </span><span class="COMM">/** -<span class='line'>960</span> Karma function. It's a shotcut for calling 'new Karma(..)' -<span class='line'>961</span> @param [options] Options passed to the Karma constructor -<span class='line'>962</span> @returns {Object} a new Karma object -<span class='line'>963</span> **/</span><span class="WHIT"> -<span class='line'>964</span> </span><span class="NAME">$.karma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> -<span class='line'>965</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Karma</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>966</span> </span><span class="WHIT"> </span><span class="COMM">//var x= new KGraphic( {localized: true })</span><span class="WHIT"> -<span class='line'>967</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KMedia( "file1", "image", {localized: true} );</span><span class="WHIT"> -<span class='line'>968</span> </span><span class="WHIT"> </span><span class="COMM">//var x = new KImage({file: "ball.png", localized: false, z: 0});</span><span class="WHIT"> -<span class='line'>969</span> </span><span class="WHIT"> </span><span class="COMM">//alert (x.localized)</span><span class="WHIT"> -<span class='line'>970</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> -<span class='line'>971</span> </span><span class="PUNC">}</span><span class="WHIT"> -<span class='line'>972</span> </span><span class="COMM">//})(jQuery);</span></pre></body></html>
\ No newline at end of file diff --git a/lessons/quadrilaterals/js/jquery.ui.all.js b/lessons/quadrilaterals/js/jquery.ui.all.js deleted file mode 100755 index 7ef2f75..0000000 --- a/lessons/quadrilaterals/js/jquery.ui.all.js +++ /dev/null @@ -1,7531 +0,0 @@ -/* - * jQuery UI 1.5.1 - * - * Copyright (c) 2008 Paul Bakaus (ui.jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -;(function($) { - -$.ui = { - plugin: { - add: function(module, option, set) { - var proto = $.ui[module].prototype; - for(var i in set) { - proto.plugins[i] = proto.plugins[i] || []; - proto.plugins[i].push([option, set[i]]); - } - }, - call: function(instance, name, args) { - var set = instance.plugins[name]; - if(!set) { return; } - - for (var i = 0; i < set.length; i++) { - if (instance.options[set[i][0]]) { - set[i][1].apply(instance.element, args); - } - } - } - }, - cssCache: {}, - css: function(name) { - if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } - var tmp = $('<div class="ui-gen">').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); - - //if (!$.browser.safari) - //tmp.appendTo('body'); - - //Opera and Safari set width and height to 0px instead of auto - //Safari returns rgba(0,0,0,0) when bgcolor is not set - $.ui.cssCache[name] = !!( - (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || - !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) - ); - try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} - return $.ui.cssCache[name]; - }, - disableSelection: function(e) { - e.unselectable = "on"; - e.onselectstart = function() { return false; }; - if (e.style) { e.style.MozUserSelect = "none"; } - }, - enableSelection: function(e) { - e.unselectable = "off"; - e.onselectstart = function() { return true; }; - if (e.style) { e.style.MozUserSelect = ""; } - }, - hasScroll: function(e, a) { - var scroll = /top/.test(a||"top") ? 'scrollTop' : 'scrollLeft', has = false; - if (e[scroll] > 0) return true; e[scroll] = 1; - has = e[scroll] > 0 ? true : false; e[scroll] = 0; - return has; - } -}; - - -/** jQuery core modifications and additions **/ - -var _remove = $.fn.remove; -$.fn.remove = function() { - $("*", this).add(this).trigger("remove"); - return _remove.apply(this, arguments ); -}; - -// $.widget is a factory to create jQuery plugins -// taking some boilerplate code out of the plugin code -// created by Scott González and Jörn Zaefferer -function getter(namespace, plugin, method) { - var methods = $[namespace][plugin].getter || []; - methods = (typeof methods == "string" ? methods.split(/,?\s+/) : methods); - return ($.inArray(method, methods) != -1); -} - -$.widget = function(name, prototype) { - var namespace = name.split(".")[0]; - name = name.split(".")[1]; - - // create plugin method - $.fn[name] = function(options) { - var isMethodCall = (typeof options == 'string'), - args = Array.prototype.slice.call(arguments, 1); - - if (isMethodCall && getter(namespace, name, options)) { - var instance = $.data(this[0], name); - return (instance ? instance[options].apply(instance, args) - : undefined); - } - - return this.each(function() { - var instance = $.data(this, name); - if (isMethodCall && instance && $.isFunction(instance[options])) { - instance[options].apply(instance, args); - } else if (!isMethodCall) { - $.data(this, name, new $[namespace][name](this, options)); - } - }); - }; - - // create widget constructor - $[namespace][name] = function(element, options) { - var self = this; - - this.widgetName = name; - this.widgetBaseClass = namespace + '-' + name; - - this.options = $.extend({}, $.widget.defaults, $[namespace][name].defaults, options); - this.element = $(element) - .bind('setData.' + name, function(e, key, value) { - return self.setData(key, value); - }) - .bind('getData.' + name, function(e, key) { - return self.getData(key); - }) - .bind('remove', function() { - return self.destroy(); - }); - this.init(); - }; - - // add widget prototype - $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); -}; - -$.widget.prototype = { - init: function() {}, - destroy: function() { - this.element.removeData(this.widgetName); - }, - - getData: function(key) { - return this.options[key]; - }, - setData: function(key, value) { - this.options[key] = value; - - if (key == 'disabled') { - this.element[value ? 'addClass' : 'removeClass']( - this.widgetBaseClass + '-disabled'); - } - }, - - enable: function() { - this.setData('disabled', false); - }, - disable: function() { - this.setData('disabled', true); - } -}; - -$.widget.defaults = { - disabled: false -}; - - -/** Mouse Interaction Plugin **/ - -$.ui.mouse = { - mouseInit: function() { - var self = this; - - this.element.bind('mousedown.'+this.widgetName, function(e) { - return self.mouseDown(e); - }); - - // Prevent text selection in IE - if ($.browser.msie) { - this._mouseUnselectable = this.element.attr('unselectable'); - this.element.attr('unselectable', 'on'); - } - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - - // Restore text selection in IE - ($.browser.msie - && this.element.attr('unselectable', this._mouseUnselectable)); - }, - - mouseDown: function(e) { - // we may have missed mouseup (out of window) - (this._mouseStarted && this.mouseUp(e)); - - this._mouseDownEvent = e; - - var self = this, - btnIsLeft = (e.which == 1), - elIsCancel = (typeof this.options.cancel == "string" ? $(e.target).is(this.options.cancel) : false); - if (!btnIsLeft || elIsCancel || !this.mouseCapture(e)) { - return true; - } - - this._mouseDelayMet = !this.options.delay; - if (!this._mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self._mouseDelayMet = true; - }, this.options.delay); - } - - if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { - this._mouseStarted = (this.mouseStart(e) !== false); - if (!this._mouseStarted) { - e.preventDefault(); - return true; - } - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(e) { - return self.mouseMove(e); - }; - this._mouseUpDelegate = function(e) { - return self.mouseUp(e); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - return false; - }, - - mouseMove: function(e) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !e.button) { - return this.mouseUp(e); - } - - if (this._mouseStarted) { - this.mouseDrag(e); - return false; - } - - if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { - this._mouseStarted = - (this.mouseStart(this._mouseDownEvent, e) !== false); - (this._mouseStarted ? this.mouseDrag(e) : this.mouseUp(e)); - } - - return !this._mouseStarted; - }, - - mouseUp: function(e) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - this.mouseStop(e); - } - - return false; - }, - - mouseDistanceMet: function(e) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - e.pageX), - Math.abs(this._mouseDownEvent.pageY - e.pageY) - ) >= this.options.distance - ); - }, - - mouseDelayMet: function(e) { - return this._mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - mouseStart: function(e) {}, - mouseDrag: function(e) {}, - mouseStop: function(e) {}, - mouseCapture: function(e) { return true; } -}; - -$.ui.mouse.defaults = { - cancel: null, - distance: 1, - delay: 0 -}; - -})(jQuery); -/* - * jQuery UI Draggable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.draggable", $.extend($.ui.mouse, { - init: function() { - - //Initialize needed constants - var o = this.options; - - //Position the node - if (o.helper == 'original' && !(/(relative|absolute|fixed)/).test(this.element.css('position'))) - this.element.css('position', 'relative'); - - this.element.addClass('ui-draggable'); - (o.disabled && this.element.addClass('ui-draggable-disabled')); - - this.mouseInit(); - - }, - mouseStart: function(e) { - var o = this.options; - - if (this.helper || o.disabled || $(e.target).is('.ui-resizable-handle')) return false; - - var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; - - - $(this.options.handle, this.element).find("*").andSelf().each(function() { - if(this == e.target) handle = true; - }); - if (!handle) return false; - - if($.ui.ddmanager) $.ui.ddmanager.current = this; - - //Create and append the visible helper - this.helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [e])) : (o.helper == 'clone' ? this.element.clone() : this.element); - if(!this.helper.parents('body').length) this.helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); - if(this.helper[0] != this.element[0] && !(/(fixed|absolute)/).test(this.helper.css("position"))) this.helper.css("position", "absolute"); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - this.margins = { //Cache the margins - left: (parseInt(this.element.css("marginLeft"),10) || 0), - top: (parseInt(this.element.css("marginTop"),10) || 0) - }; - - this.cssPosition = this.helper.css("position"); //Store the helper's css position - this.offset = this.element.offset(); //The element's absolute position on the page - this.offset = { //Substract the margins from the element's absolute offset - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - this.offset.click = { //Where the click happened, relative to the element - left: e.pageX - this.offset.left, - top: e.pageY - this.offset.top - }; - - this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset(); //Get the offsetParent and cache its position - if(this.offsetParent[0] == document.body && $.browser.mozilla) po = { top: 0, left: 0 }; //Ugly FF3 fix - this.offset.parent = { //Store its position plus border - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - var p = this.element.position(); //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helpers - this.offset.relative = this.cssPosition == "relative" ? { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.offsetParent[0].scrollTop, - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.offsetParent[0].scrollLeft - } : { top: 0, left: 0 }; - - this.originalPosition = this.generatePosition(e); //Generate the original position - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Cache the helper size - - if(o.cursorAt) { - if(o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left + this.margins.left; - if(o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right + this.margins.left; - if(o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top + this.margins.top; - if(o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom + this.margins.top; - } - - - /* - * - Position constraining - - * Here we prepare position constraining like grid and containment. - */ - - if(o.containment) { - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.relative.left - this.offset.parent.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.relative.top - this.offset.parent.top, - co.left+Math.max(ce.scrollWidth,ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - co.top+Math.max(ce.scrollHeight,ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - } - } - - //Call plugins and callbacks - this.propagate("start", e); - - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Recache the helper size - if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e); - - this.helper.addClass("ui-draggable-dragging"); - this.mouseDrag(e); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - }, - convertPositionTo: function(d, pos) { - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - return { - top: ( - pos.top // the calculated relative position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) * mod // The offsetParent's scroll position, not if the element is fixed - + (this.cssPosition == "fixed" ? $(document).scrollTop() : 0) * mod - + this.margins.top * mod //Add the margin (you don't want the margin counting in intersection methods) - ), - left: ( - pos.left // the calculated relative position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) * mod // The offsetParent's scroll position, not if the element is fixed - + (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0) * mod - + this.margins.left * mod //Add the margin (you don't want the margin counting in intersection methods) - ) - }; - }, - generatePosition: function(e) { - - var o = this.options; - var position = { - top: ( - e.pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) // The offsetParent's scroll position, not if the element is fixed - - (this.cssPosition == "fixed" ? $(document).scrollTop() : 0) - ), - left: ( - e.pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) // The offsetParent's scroll position, not if the element is fixed - - (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0) - ) - }; - - if(!this.originalPosition) return position; //If we are not dragging yet, we won't check for options - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - if(this.containment) { - if(position.left < this.containment[0]) position.left = this.containment[0]; - if(position.top < this.containment[1]) position.top = this.containment[1]; - if(position.left > this.containment[2]) position.left = this.containment[2]; - if(position.top > this.containment[3]) position.top = this.containment[3]; - } - - if(o.grid) { - var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1]; - position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0]; - position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - return position; - }, - mouseDrag: function(e) { - - //Compute the helpers position - this.position = this.generatePosition(e); - this.positionAbs = this.convertPositionTo("absolute"); - - //Call plugins and callbacks and use the resulting position if something is returned - this.position = this.propagate("drag", e) || this.position; - - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - if($.ui.ddmanager) $.ui.ddmanager.drag(this, e); - - return false; - }, - mouseStop: function(e) { - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, e); - - if(this.options.revert) { - var self = this; - $(this.helper).animate(this.originalPosition, parseInt(this.options.revert, 10) || 500, function() { - self.propagate("stop", e); - self.clear(); - }); - } else { - this.propagate("stop", e); - this.clear(); - } - - return false; - }, - clear: function() { - this.helper.removeClass("ui-draggable-dragging"); - if(this.options.helper != 'original' && !this.cancelHelperRemoval) this.helper.remove(); - //if($.ui.ddmanager) $.ui.ddmanager.current = null; - this.helper = null; - this.cancelHelperRemoval = false; - }, - - // From now on bulk stuff - mainly helpers - plugins: {}, - uiHash: function(e) { - return { - helper: this.helper, - position: this.position, - absolutePosition: this.positionAbs, - options: this.options - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.uiHash()]); - return this.element.triggerHandler(n == "drag" ? n : "drag"+n, [e, this.uiHash()], this.options[n]); - }, - destroy: function() { - if(!this.element.data('draggable')) return; - this.element.removeData("draggable").unbind(".draggable").removeClass('ui-draggable'); - this.mouseDestroy(); - } -})); - -$.extend($.ui.draggable, { - defaults: { - appendTo: "parent", - axis: false, - cancel: ":input", - delay: 0, - distance: 1, - helper: "original" - } -}); - -$.ui.plugin.add("draggable", "cursor", { - start: function(e, ui) { - var t = $('body'); - if (t.css("cursor")) ui.options._cursor = t.css("cursor"); - t.css("cursor", ui.options.cursor); - }, - stop: function(e, ui) { - if (ui.options._cursor) $('body').css("cursor", ui.options._cursor); - } -}); - -$.ui.plugin.add("draggable", "zIndex", { - start: function(e, ui) { - var t = $(ui.helper); - if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex"); - t.css('zIndex', ui.options.zIndex); - }, - stop: function(e, ui) { - if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex); - } -}); - -$.ui.plugin.add("draggable", "opacity", { - start: function(e, ui) { - var t = $(ui.helper); - if(t.css("opacity")) ui.options._opacity = t.css("opacity"); - t.css('opacity', ui.options.opacity); - }, - stop: function(e, ui) { - if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity); - } -}); - -$.ui.plugin.add("draggable", "iframeFix", { - start: function(e, ui) { - $(ui.options.iframeFix === true ? "iframe" : ui.options.iframeFix).each(function() { - $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>') - .css({ - width: this.offsetWidth+"px", height: this.offsetHeight+"px", - position: "absolute", opacity: "0.001", zIndex: 1000 - }) - .css($(this).offset()) - .appendTo("body"); - }); - }, - stop: function(e, ui) { - $("div.DragDropIframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers - } -}); - -$.ui.plugin.add("draggable", "scroll", { - start: function(e, ui) { - var o = ui.options; - var i = $(this).data("draggable"); - o.scrollSensitivity = o.scrollSensitivity || 20; - o.scrollSpeed = o.scrollSpeed || 20; - - i.overflowY = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(this); - i.overflowX = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(this); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); - - }, - drag: function(e, ui) { - - var o = ui.options; - var i = $(this).data("draggable"); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { - if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed; - if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed; - - } else { - if(e.pageY - $(document).scrollTop() < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - if($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { - if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed; - if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed; - } else { - if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - if($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } -}); - -$.ui.plugin.add("draggable", "snap", { - start: function(e, ui) { - - var inst = $(this).data("draggable"); - inst.snapElements = []; - $(ui.options.snap === true ? '.ui-draggable' : ui.options.snap).each(function() { - var $t = $(this); var $o = $t.offset(); - if(this != inst.element[0]) inst.snapElements.push({ - item: this, - width: $t.outerWidth(), height: $t.outerHeight(), - top: $o.top, left: $o.left - }); - }); - - }, - drag: function(e, ui) { - - var inst = $(this).data("draggable"); - var d = ui.options.snapTolerance || 20; - var x1 = ui.absolutePosition.left, x2 = x1 + inst.helperProportions.width, - y1 = ui.absolutePosition.top, y2 = y1 + inst.helperProportions.height; - - for (var i = inst.snapElements.length - 1; i >= 0; i--){ - - var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, - t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; - - //Yes, I know, this is insane ;) - if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) continue; - - if(ui.options.snapMode != 'inner') { - var ts = Math.abs(t - y2) <= 20; - var bs = Math.abs(b - y1) <= 20; - var ls = Math.abs(l - x2) <= 20; - var rs = Math.abs(r - x1) <= 20; - if(ts) ui.position.top = inst.convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top; - if(bs) ui.position.top = inst.convertPositionTo("relative", { top: b, left: 0 }).top; - if(ls) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left; - if(rs) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: r }).left; - } - - if(ui.options.snapMode != 'outer') { - var ts = Math.abs(t - y1) <= 20; - var bs = Math.abs(b - y2) <= 20; - var ls = Math.abs(l - x1) <= 20; - var rs = Math.abs(r - x2) <= 20; - if(ts) ui.position.top = inst.convertPositionTo("relative", { top: t, left: 0 }).top; - if(bs) ui.position.top = inst.convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top; - if(ls) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: l }).left; - if(rs) ui.position.left = inst.convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left; - } - - }; - } -}); - -$.ui.plugin.add("draggable", "connectToSortable", { - start: function(e,ui) { - - var inst = $(this).data("draggable"); - inst.sortables = []; - $(ui.options.connectToSortable).each(function() { - if($.data(this, 'sortable')) { - var sortable = $.data(this, 'sortable'); - inst.sortables.push({ - instance: sortable, - shouldRevert: sortable.options.revert - }); - sortable.refreshItems(); //Do a one-time refresh at start to refresh the containerCache - sortable.propagate("activate", e, inst); - } - }); - - }, - stop: function(e,ui) { - - //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).data("draggable"); - - $.each(inst.sortables, function() { - if(this.instance.isOver) { - this.instance.isOver = 0; - inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance - this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) - if(this.shouldRevert) this.instance.options.revert = true; //revert here - this.instance.mouseStop(e); - - //Also propagate receive event, since the sortable is actually receiving a element - this.instance.element.triggerHandler("sortreceive", [e, $.extend(this.instance.ui(), { sender: inst.element })], this.instance.options["receive"]); - - this.instance.options.helper = this.instance.options._helper; - } else { - this.instance.propagate("deactivate", e, inst); - } - - }); - - }, - drag: function(e,ui) { - - var inst = $(this).data("draggable"), self = this; - - var checkPos = function(o) { - - var l = o.left, r = l + o.width, - t = o.top, b = t + o.height; - - return (l < (this.positionAbs.left + this.offset.click.left) && (this.positionAbs.left + this.offset.click.left) < r - && t < (this.positionAbs.top + this.offset.click.top) && (this.positionAbs.top + this.offset.click.top) < b); - }; - - $.each(inst.sortables, function(i) { - - if(checkPos.call(inst, this.instance.containerCache)) { - - //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once - if(!this.instance.isOver) { - this.instance.isOver = 1; - - //Now we fake the start of dragging for the sortable instance, - //by cloning the list group item, appending it to the sortable and using it as inst.currentItem - //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) - this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true); - this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it - this.instance.options.helper = function() { return ui.helper[0]; }; - - e.target = this.instance.currentItem[0]; - this.instance.mouseCapture(e, true); - this.instance.mouseStart(e, true, true); - - //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes - this.instance.offset.click.top = inst.offset.click.top; - this.instance.offset.click.left = inst.offset.click.left; - this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; - this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; - - inst.propagate("toSortable", e); - - } - - //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable - if(this.instance.currentItem) this.instance.mouseDrag(e); - - } else { - - //If it doesn't intersect with the sortable, and it intersected before, - //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval - if(this.instance.isOver) { - this.instance.isOver = 0; - this.instance.cancelHelperRemoval = true; - this.instance.options.revert = false; //No revert here - this.instance.mouseStop(e, true); - this.instance.options.helper = this.instance.options._helper; - - //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size - this.instance.currentItem.remove(); - if(this.instance.placeholder) this.instance.placeholder.remove(); - - inst.propagate("fromSortable", e); - } - - }; - - }); - - } -}); - -$.ui.plugin.add("draggable", "stack", { - start: function(e,ui) { - var group = $.makeArray($(ui.options.stack.group)).sort(function(a,b) { - return (parseInt($(a).css("zIndex"),10) || ui.options.stack.min) - (parseInt($(b).css("zIndex"),10) || ui.options.stack.min); - }); - - $(group).each(function(i) { - this.style.zIndex = ui.options.stack.min + i; - }); - - this[0].style.zIndex = ui.options.stack.min + group.length; - } -}); - -})(jQuery); -/* - * jQuery UI Droppable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * ui.core.js - * ui.draggable.js - */ -(function($) { - -$.widget("ui.droppable", { - init: function() { - - this.element.addClass("ui-droppable"); - this.isover = 0; this.isout = 1; - - //Prepare the passed options - var o = this.options, accept = o.accept; - o = $.extend(o, { - accept: o.accept && o.accept.constructor == Function ? o.accept : function(d) { - return $(d).is(accept); - } - }); - - //Store the droppable's proportions - this.proportions = { width: this.element.outerWidth(), height: this.element.outerHeight() }; - - // Add the reference and positions to the manager - $.ui.ddmanager.droppables.push(this); - - }, - plugins: {}, - ui: function(c) { - return { - draggable: (c.currentItem || c.element), - helper: c.helper, - position: c.position, - absolutePosition: c.positionAbs, - options: this.options, - element: this.element - }; - }, - destroy: function() { - var drop = $.ui.ddmanager.droppables; - for ( var i = 0; i < drop.length; i++ ) - if ( drop[i] == this ) - drop.splice(i, 1); - - this.element - .removeClass("ui-droppable ui-droppable-disabled") - .removeData("droppable") - .unbind(".droppable"); - }, - over: function(e) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'over', [e, this.ui(draggable)]); - this.element.triggerHandler("dropover", [e, this.ui(draggable)], this.options.over); - } - - }, - out: function(e) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'out', [e, this.ui(draggable)]); - this.element.triggerHandler("dropout", [e, this.ui(draggable)], this.options.out); - } - - }, - drop: function(e,custom) { - - var draggable = custom || $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element - - var childrenIntersection = false; - this.element.find(".ui-droppable").not(".ui-draggable-dragging").each(function() { - var inst = $.data(this, 'droppable'); - if(inst.options.greedy && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) { - childrenIntersection = true; return false; - } - }); - if(childrenIntersection) return false; - - if(this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - $.ui.plugin.call(this, 'drop', [e, this.ui(draggable)]); - this.element.triggerHandler("drop", [e, this.ui(draggable)], this.options.drop); - return true; - } - - return false; - - }, - activate: function(e) { - - var draggable = $.ui.ddmanager.current; - $.ui.plugin.call(this, 'activate', [e, this.ui(draggable)]); - if(draggable) this.element.triggerHandler("dropactivate", [e, this.ui(draggable)], this.options.activate); - - }, - deactivate: function(e) { - - var draggable = $.ui.ddmanager.current; - $.ui.plugin.call(this, 'deactivate', [e, this.ui(draggable)]); - if(draggable) this.element.triggerHandler("dropdeactivate", [e, this.ui(draggable)], this.options.deactivate); - - } -}); - -$.extend($.ui.droppable, { - defaults: { - disabled: false, - tolerance: 'intersect' - } -}); - -$.ui.intersect = function(draggable, droppable, toleranceMode) { - - if (!droppable.offset) return false; - - var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, - y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; - var l = droppable.offset.left, r = l + droppable.proportions.width, - t = droppable.offset.top, b = t + droppable.proportions.height; - - switch (toleranceMode) { - case 'fit': - return (l < x1 && x2 < r - && t < y1 && y2 < b); - break; - case 'intersect': - return (l < x1 + (draggable.helperProportions.width / 2) // Right Half - && x2 - (draggable.helperProportions.width / 2) < r // Left Half - && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half - && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half - break; - case 'pointer': - return (l < ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) && ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) < r - && t < ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) && ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) < b); - break; - case 'touch': - return ( - (y1 >= t && y1 <= b) || // Top edge touching - (y2 >= t && y2 <= b) || // Bottom edge touching - (y1 < t && y2 > b) // Surrounded vertically - ) && ( - (x1 >= l && x1 <= r) || // Left edge touching - (x2 >= l && x2 <= r) || // Right edge touching - (x1 < l && x2 > r) // Surrounded horizontally - ); - break; - default: - return false; - break; - } - -}; - -/* - This manager tracks offsets of draggables and droppables -*/ -$.ui.ddmanager = { - current: null, - droppables: [], - prepareOffsets: function(t, e) { - - var m = $.ui.ddmanager.droppables; - var type = e ? e.type : null; // workaround for #2317 - for (var i = 0; i < m.length; i++) { - - if(m[i].options.disabled || (t && !m[i].options.accept.call(m[i].element,(t.currentItem || t.element)))) continue; - m[i].visible = m[i].element.is(":visible"); if(!m[i].visible) continue; //If the element is not visible, continue - m[i].offset = m[i].element.offset(); - m[i].proportions = { width: m[i].element.outerWidth(), height: m[i].element.outerHeight() }; - - if(type == "dragstart" || type == "sortactivate") m[i].activate.call(m[i], e); //Activate the droppable if used directly from draggables - } - - }, - drop: function(draggable, e) { - - var dropped = false; - $.each($.ui.ddmanager.droppables, function() { - - if(!this.options) return; - if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) - dropped = this.drop.call(this, e); - - if (!this.options.disabled && this.visible && this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) { - this.isout = 1; this.isover = 0; - this.deactivate.call(this, e); - } - - }); - return dropped; - - }, - drag: function(draggable, e) { - - //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. - if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, e); - - //Run through all droppables and check their positions based on specific tolerance options - $.each($.ui.ddmanager.droppables, function() { - - if(this.options.disabled || this.greedyChild || !this.visible) return; - var intersects = $.ui.intersect(draggable, this, this.options.tolerance); - - var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); - if(!c) return; - - var parentInstance; - if (this.options.greedy) { - var parent = this.element.parents('.ui-droppable:eq(0)'); - if (parent.length) { - parentInstance = $.data(parent[0], 'droppable'); - parentInstance.greedyChild = (c == 'isover' ? 1 : 0); - } - } - - // we just moved into a greedy child - if (parentInstance && c == 'isover') { - parentInstance['isover'] = 0; - parentInstance['isout'] = 1; - parentInstance.out.call(parentInstance, e); - } - - this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; - this[c == "isover" ? "over" : "out"].call(this, e); - - // we just moved out of a greedy child - if (parentInstance && c == 'isout') { - parentInstance['isout'] = 0; - parentInstance['isover'] = 1; - parentInstance.over.call(parentInstance, e); - } - }); - - } -}; - -/* - * Droppable Extensions - */ - -$.ui.plugin.add("droppable", "activeClass", { - activate: function(e, ui) { - $(this).addClass(ui.options.activeClass); - }, - deactivate: function(e, ui) { - $(this).removeClass(ui.options.activeClass); - }, - drop: function(e, ui) { - $(this).removeClass(ui.options.activeClass); - } -}); - -$.ui.plugin.add("droppable", "hoverClass", { - over: function(e, ui) { - $(this).addClass(ui.options.hoverClass); - }, - out: function(e, ui) { - $(this).removeClass(ui.options.hoverClass); - }, - drop: function(e, ui) { - $(this).removeClass(ui.options.hoverClass); - } -}); - -})(jQuery); -/* - * jQuery UI Resizable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.resizable", $.extend($.ui.mouse, { - init: function() { - - var self = this, o = this.options; - - var elpos = this.element.css('position'); - - this.originalElement = this.element; - - // simulate .ui-resizable { position: relative; } - this.element.addClass("ui-resizable").css({ position: /static/.test(elpos) ? 'relative' : elpos }); - - $.extend(o, { - _aspectRatio: !!(o.aspectRatio), - helper: o.helper || o.ghost || o.animate ? o.helper || 'proxy' : null, - knobHandles: o.knobHandles === true ? 'ui-resizable-knob-handle' : o.knobHandles - }); - - //Default Theme - var aBorder = '1px solid #DEDEDE'; - - o.defaultTheme = { - 'ui-resizable': { display: 'block' }, - 'ui-resizable-handle': { position: 'absolute', background: '#F2F2F2', fontSize: '0.1px' }, - 'ui-resizable-n': { cursor: 'n-resize', height: '4px', left: '0px', right: '0px', borderTop: aBorder }, - 'ui-resizable-s': { cursor: 's-resize', height: '4px', left: '0px', right: '0px', borderBottom: aBorder }, - 'ui-resizable-e': { cursor: 'e-resize', width: '4px', top: '0px', bottom: '0px', borderRight: aBorder }, - 'ui-resizable-w': { cursor: 'w-resize', width: '4px', top: '0px', bottom: '0px', borderLeft: aBorder }, - 'ui-resizable-se': { cursor: 'se-resize', width: '4px', height: '4px', borderRight: aBorder, borderBottom: aBorder }, - 'ui-resizable-sw': { cursor: 'sw-resize', width: '4px', height: '4px', borderBottom: aBorder, borderLeft: aBorder }, - 'ui-resizable-ne': { cursor: 'ne-resize', width: '4px', height: '4px', borderRight: aBorder, borderTop: aBorder }, - 'ui-resizable-nw': { cursor: 'nw-resize', width: '4px', height: '4px', borderLeft: aBorder, borderTop: aBorder } - }; - - o.knobTheme = { - 'ui-resizable-handle': { background: '#F2F2F2', border: '1px solid #808080', height: '8px', width: '8px' }, - 'ui-resizable-n': { cursor: 'n-resize', top: '0px', left: '45%' }, - 'ui-resizable-s': { cursor: 's-resize', bottom: '0px', left: '45%' }, - 'ui-resizable-e': { cursor: 'e-resize', right: '0px', top: '45%' }, - 'ui-resizable-w': { cursor: 'w-resize', left: '0px', top: '45%' }, - 'ui-resizable-se': { cursor: 'se-resize', right: '0px', bottom: '0px' }, - 'ui-resizable-sw': { cursor: 'sw-resize', left: '0px', bottom: '0px' }, - 'ui-resizable-nw': { cursor: 'nw-resize', left: '0px', top: '0px' }, - 'ui-resizable-ne': { cursor: 'ne-resize', right: '0px', top: '0px' } - }; - - o._nodeName = this.element[0].nodeName; - - //Wrap the element if it cannot hold child nodes - if(o._nodeName.match(/canvas|textarea|input|select|button|img/i)) { - var el = this.element; - - //Opera fixing relative position - if (/relative/.test(el.css('position')) && $.browser.opera) - el.css({ position: 'relative', top: 'auto', left: 'auto' }); - - //Create a wrapper element and set the wrapper to the new current internal element - el.wrap( - $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css( { - position: el.css('position'), - width: el.outerWidth(), - height: el.outerHeight(), - top: el.css('top'), - left: el.css('left') - }) - ); - - var oel = this.element; this.element = this.element.parent(); - - // store instance on wrapper - this.element.data('resizable', this); - - //Move margins to the wrapper - this.element.css({ marginLeft: oel.css("marginLeft"), marginTop: oel.css("marginTop"), - marginRight: oel.css("marginRight"), marginBottom: oel.css("marginBottom") - }); - - oel.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); - - //Prevent Safari textarea resize - if ($.browser.safari && o.preventDefault) oel.css('resize', 'none'); - - o.proportionallyResize = oel.css({ position: 'static', zoom: 1, display: 'block' }); - - // avoid IE jump - this.element.css({ margin: oel.css('margin') }); - - // fix handlers offset - this._proportionallyResize(); - } - - if(!o.handles) o.handles = !$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }; - if(o.handles.constructor == String) { - - o.zIndex = o.zIndex || 1000; - - if(o.handles == 'all') o.handles = 'n,e,s,w,se,sw,ne,nw'; - - var n = o.handles.split(","); o.handles = {}; - - // insertions are applied when don't have theme loaded - var insertionsDefault = { - handle: 'position: absolute; display: none; overflow:hidden;', - n: 'top: 0pt; width:100%;', - e: 'right: 0pt; height:100%;', - s: 'bottom: 0pt; width:100%;', - w: 'left: 0pt; height:100%;', - se: 'bottom: 0pt; right: 0px;', - sw: 'bottom: 0pt; left: 0px;', - ne: 'top: 0pt; right: 0px;', - nw: 'top: 0pt; left: 0px;' - }; - - for(var i = 0; i < n.length; i++) { - var handle = $.trim(n[i]), dt = o.defaultTheme, hname = 'ui-resizable-'+handle, loadDefault = !$.ui.css(hname) && !o.knobHandles, userKnobClass = $.ui.css('ui-resizable-knob-handle'), - allDefTheme = $.extend(dt[hname], dt['ui-resizable-handle']), allKnobTheme = $.extend(o.knobTheme[hname], !userKnobClass ? o.knobTheme['ui-resizable-handle'] : {}); - - // increase zIndex of sw, se, ne, nw axis - var applyZIndex = /sw|se|ne|nw/.test(handle) ? { zIndex: ++o.zIndex } : {}; - - var defCss = (loadDefault ? insertionsDefault[handle] : ''), - axis = $(['<div class="ui-resizable-handle ', hname, '" style="', defCss, insertionsDefault.handle, '"></div>'].join('')).css( applyZIndex ); - o.handles[handle] = '.ui-resizable-'+handle; - - this.element.append( - //Theme detection, if not loaded, load o.defaultTheme - axis.css( loadDefault ? allDefTheme : {} ) - // Load the knobHandle css, fix width, height, top, left... - .css( o.knobHandles ? allKnobTheme : {} ).addClass(o.knobHandles ? 'ui-resizable-knob-handle' : '').addClass(o.knobHandles) - ); - } - - if (o.knobHandles) this.element.addClass('ui-resizable-knob').css( !$.ui.css('ui-resizable-knob') ? { /*border: '1px #fff dashed'*/ } : {} ); - } - - this._renderAxis = function(target) { - target = target || this.element; - - for(var i in o.handles) { - if(o.handles[i].constructor == String) - o.handles[i] = $(o.handles[i], this.element).show(); - - if (o.transparent) - o.handles[i].css({opacity:0}); - - //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) - if (this.element.is('.ui-wrapper') && - o._nodeName.match(/textarea|input|select|button/i)) { - - var axis = $(o.handles[i], this.element), padWrapper = 0; - - //Checking the correct pad and border - padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); - - //The padding type i have to apply... - var padPos = [ 'padding', - /ne|nw|n/.test(i) ? 'Top' : - /se|sw|s/.test(i) ? 'Bottom' : - /^e$/.test(i) ? 'Right' : 'Left' ].join(""); - - if (!o.transparent) - target.css(padPos, padWrapper); - - this._proportionallyResize(); - } - if(!$(o.handles[i]).length) continue; - } - }; - - this._renderAxis(this.element); - o._handles = $('.ui-resizable-handle', self.element); - - if (o.disableSelection) - o._handles.each(function(i, e) { $.ui.disableSelection(e); }); - - //Matching axis name - o._handles.mouseover(function() { - if (!o.resizing) { - if (this.className) - var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); - //Axis, default = se - self.axis = o.axis = axis && axis[1] ? axis[1] : 'se'; - } - }); - - //If we want to auto hide the elements - if (o.autoHide) { - o._handles.hide(); - $(self.element).addClass("ui-resizable-autohide").hover(function() { - $(this).removeClass("ui-resizable-autohide"); - o._handles.show(); - }, - function(){ - if (!o.resizing) { - $(this).addClass("ui-resizable-autohide"); - o._handles.hide(); - } - }); - } - - this.mouseInit(); - }, - plugins: {}, - ui: function() { - return { - originalElement: this.originalElement, - element: this.element, - helper: this.helper, - position: this.position, - size: this.size, - options: this.options, - originalSize: this.originalSize, - originalPosition: this.originalPosition - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.ui()]); - if (n != "resize") this.element.triggerHandler(["resize", n].join(""), [e, this.ui()], this.options[n]); - }, - destroy: function() { - var el = this.element, wrapped = el.children(".ui-resizable").get(0); - - this.mouseDestroy(); - - var _destroy = function(exp) { - $(exp).removeClass("ui-resizable ui-resizable-disabled") - .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); - }; - - _destroy(el); - - if (el.is('.ui-wrapper') && wrapped) { - el.parent().append( - $(wrapped).css({ - position: el.css('position'), - width: el.outerWidth(), - height: el.outerHeight(), - top: el.css('top'), - left: el.css('left') - }) - ).end().remove(); - - _destroy(wrapped); - } - }, - mouseStart: function(e) { - if(this.options.disabled) return false; - - var handle = false; - for(var i in this.options.handles) { - if($(this.options.handles[i])[0] == e.target) handle = true; - } - if (!handle) return false; - - var o = this.options, iniPos = this.element.position(), el = this.element, - num = function(v) { return parseInt(v, 10) || 0; }, ie6 = $.browser.msie && $.browser.version < 7; - o.resizing = true; - o.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; - - // bugfix #1749 - if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { - - // sOffset decides if document scrollOffset will be added to the top/left of the resizable element - var sOffset = $.browser.msie && !o.containment && (/absolute/).test(el.css('position')) && !(/relative/).test(el.parent().css('position')); - var dscrollt = sOffset ? o.documentScroll.top : 0, dscrolll = sOffset ? o.documentScroll.left : 0; - - el.css({ position: 'absolute', top: (iniPos.top + dscrollt), left: (iniPos.left + dscrolll) }); - } - - //Opera fixing relative position - if ($.browser.opera && /relative/.test(el.css('position'))) - el.css({ position: 'relative', top: 'auto', left: 'auto' }); - - this._renderProxy(); - - var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); - - //Store needed variables - this.offset = this.helper.offset(); - this.position = { left: curleft, top: curtop }; - this.size = o.helper || ie6 ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalSize = o.helper || ie6 ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalPosition = { left: curleft, top: curtop }; - this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; - this.originalMousePosition = { left: e.pageX, top: e.pageY }; - - //Aspect Ratio - o.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.height / this.originalSize.width)||1); - - if (o.preserveCursor) - $('body').css('cursor', this.axis + '-resize'); - - this.propagate("start", e); - return true; - }, - mouseDrag: function(e) { - - //Increase performance, avoid regex - var el = this.helper, o = this.options, props = {}, - self = this, smp = this.originalMousePosition, a = this.axis; - - var dx = (e.pageX-smp.left)||0, dy = (e.pageY-smp.top)||0; - var trigger = this._change[a]; - if (!trigger) return false; - - // Calculate the attrs that will be change - var data = trigger.apply(this, [e, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; - - if (o._aspectRatio || e.shiftKey) - data = this._updateRatio(data, e); - - data = this._respectSize(data, e); - - // plugins callbacks need to be called first - this.propagate("resize", e); - - el.css({ - top: this.position.top + "px", left: this.position.left + "px", - width: this.size.width + "px", height: this.size.height + "px" - }); - - if (!o.helper && o.proportionallyResize) - this._proportionallyResize(); - - this._updateCache(data); - - // calling the user callback at the end - this.element.triggerHandler("resize", [e, this.ui()], this.options["resize"]); - - return false; - }, - mouseStop: function(e) { - - this.options.resizing = false; - var o = this.options, num = function(v) { return parseInt(v, 10) || 0; }, self = this; - - if(o.helper) { - var pr = o.proportionallyResize, ista = pr && (/textarea/i).test(pr.get(0).nodeName), - soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - if (!o.animate) - this.element.css($.extend(s, { top: top, left: left })); - - if (o.helper && !o.animate) this._proportionallyResize(); - } - - if (o.preserveCursor) - $('body').css('cursor', 'auto'); - - this.propagate("stop", e); - - if (o.helper) this.helper.remove(); - - return false; - }, - _updateCache: function(data) { - var o = this.options; - this.offset = this.helper.offset(); - if (data.left) this.position.left = data.left; - if (data.top) this.position.top = data.top; - if (data.height) this.size.height = data.height; - if (data.width) this.size.width = data.width; - }, - _updateRatio: function(data, e) { - var o = this.options, cpos = this.position, csize = this.size, a = this.axis; - - if (data.height) data.width = (csize.height / o.aspectRatio); - else if (data.width) data.height = (csize.width * o.aspectRatio); - - if (a == 'sw') { - data.left = cpos.left + (csize.width - data.width); - data.top = null; - } - if (a == 'nw') { - data.top = cpos.top + (csize.height - data.height); - data.left = cpos.left + (csize.width - data.width); - } - - return data; - }, - _respectSize: function(data, e) { - - var el = this.helper, o = this.options, pRatio = o._aspectRatio || e.shiftKey, a = this.axis, - ismaxw = data.width && o.maxWidth && o.maxWidth < data.width, ismaxh = data.height && o.maxHeight && o.maxHeight < data.height, - isminw = data.width && o.minWidth && o.minWidth > data.width, isminh = data.height && o.minHeight && o.minHeight > data.height; - - if (isminw) data.width = o.minWidth; - if (isminh) data.height = o.minHeight; - if (ismaxw) data.width = o.maxWidth; - if (ismaxh) data.height = o.maxHeight; - - var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; - var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); - - if (isminw && cw) data.left = dw - o.minWidth; - if (ismaxw && cw) data.left = dw - o.maxWidth; - if (isminh && ch) data.top = dh - o.minHeight; - if (ismaxh && ch) data.top = dh - o.maxHeight; - - // fixing jump error on top/left - bug #2330 - var isNotwh = !data.width && !data.height; - if (isNotwh && !data.left && data.top) data.top = null; - else if (isNotwh && !data.top && data.left) data.left = null; - - return data; - }, - _proportionallyResize: function() { - var o = this.options; - if (!o.proportionallyResize) return; - var prel = o.proportionallyResize, el = this.helper || this.element; - - if (!o.borderDif) { - var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], - p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; - - o.borderDif = $.map(b, function(v, i) { - var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; - return border + padding; - }); - } - prel.css({ - height: (el.height() - o.borderDif[0] - o.borderDif[2]) + "px", - width: (el.width() - o.borderDif[1] - o.borderDif[3]) + "px" - }); - }, - _renderProxy: function() { - var el = this.element, o = this.options; - this.elementOffset = el.offset(); - - if(o.helper) { - this.helper = this.helper || $('<div style="overflow:hidden;"></div>'); - - // fix ie6 offset - var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), - pxyoffset = ( ie6 ? 2 : -1 ); - - this.helper.addClass(o.helper).css({ - width: el.outerWidth() + pxyoffset, - height: el.outerHeight() + pxyoffset, - position: 'absolute', - left: this.elementOffset.left - ie6offset +'px', - top: this.elementOffset.top - ie6offset +'px', - zIndex: ++o.zIndex - }); - - this.helper.appendTo("body"); - - if (o.disableSelection) - $.ui.disableSelection(this.helper.get(0)); - - } else { - this.helper = el; - } - }, - _change: { - e: function(e, dx, dy) { - return { width: this.originalSize.width + dx }; - }, - w: function(e, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { left: sp.left + dx, width: cs.width - dx }; - }, - n: function(e, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { top: sp.top + dy, height: cs.height - dy }; - }, - s: function(e, dx, dy) { - return { height: this.originalSize.height + dy }; - }, - se: function(e, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, dx, dy])); - }, - sw: function(e, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, dx, dy])); - }, - ne: function(e, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, dx, dy])); - }, - nw: function(e, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, dx, dy])); - } - } -})); - -$.extend($.ui.resizable, { - defaults: { - cancel: ":input", - distance: 1, - delay: 0, - preventDefault: true, - transparent: false, - minWidth: 10, - minHeight: 10, - aspectRatio: false, - disableSelection: true, - preserveCursor: true, - autoHide: false, - knobHandles: false - } -}); - -/* - * Resizable Extensions - */ - -$.ui.plugin.add("resizable", "containment", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), el = self.element; - var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; - if (!ce) return; - - self.containerElement = $(ce); - - if (/document/.test(oc) || oc == document) { - self.containerOffset = { left: 0, top: 0 }; - self.containerPosition = { left: 0, top: 0 }; - - self.parentData = { - element: $(document), left: 0, top: 0, - width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight - }; - } - - - // i'm a node, so compute top, left, right, bottom - else{ - self.containerOffset = $(ce).offset(); - self.containerPosition = $(ce).position(); - self.containerSize = { height: $(ce).innerHeight(), width: $(ce).innerWidth() }; - - var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, - width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); - - self.parentData = { - element: ce, left: co.left, top: co.top, width: width, height: height - }; - } - }, - - resize: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), - ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, - pRatio = o._aspectRatio || e.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; - - if (ce[0] != document && /static/.test(ce.css('position'))) - cop = self.containerPosition; - - if (cp.left < (o.helper ? co.left : cop.left)) { - self.size.width = self.size.width + (o.helper ? (self.position.left - co.left) : (self.position.left - cop.left)); - if (pRatio) self.size.height = self.size.width * o.aspectRatio; - self.position.left = o.helper ? co.left : cop.left; - } - - if (cp.top < (o.helper ? co.top : 0)) { - self.size.height = self.size.height + (o.helper ? (self.position.top - co.top) : self.position.top); - if (pRatio) self.size.width = self.size.height / o.aspectRatio; - self.position.top = o.helper ? co.top : 0; - } - - var woset = (o.helper ? self.offset.left - co.left : (self.position.left - cop.left)) + self.sizeDiff.width, - hoset = (o.helper ? self.offset.top - co.top : self.position.top) + self.sizeDiff.height; - - if (woset + self.size.width >= self.parentData.width) { - self.size.width = self.parentData.width - woset; - if (pRatio) self.size.height = self.size.width * o.aspectRatio; - } - - if (hoset + self.size.height >= self.parentData.height) { - self.size.height = self.parentData.height - hoset; - if (pRatio) self.size.width = self.size.height / o.aspectRatio; - } - }, - - stop: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), cp = self.position, - co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; - - var helper = $(self.helper), ho = helper.offset(), w = helper.innerWidth(), h = helper.innerHeight(); - - - if (o.helper && !o.animate && /relative/.test(ce.css('position'))) - $(this).css({ left: (ho.left - co.left), top: (ho.top - co.top), width: w, height: h }); - - if (o.helper && !o.animate && /static/.test(ce.css('position'))) - $(this).css({ left: cop.left + (ho.left - co.left), top: cop.top + (ho.top - co.top), width: w, height: h }); - - } -}); - -$.ui.plugin.add("resizable", "grid", { - - resize: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || e.shiftKey; - o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; - var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); - - if (/^(se|s|e)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - } - else if (/^(ne)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - } - else if (/^(sw)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.left = op.left - ox; - } - else { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - self.position.left = op.left - ox; - } - } - -}); - -$.ui.plugin.add("resizable", "animate", { - - stop: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"); - - var pr = o.proportionallyResize, ista = pr && (/textarea/i).test(pr.get(0).nodeName), - soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - self.element.animate( - $.extend(style, top && left ? { top: top, left: left } : {}), { - duration: o.animateDuration || "slow", easing: o.animateEasing || "swing", - step: function() { - - var data = { - width: parseInt(self.element.css('width'), 10), - height: parseInt(self.element.css('height'), 10), - top: parseInt(self.element.css('top'), 10), - left: parseInt(self.element.css('left'), 10) - }; - - if (pr) pr.css({ width: data.width, height: data.height }); - - // propagating resize, and updating values for each animation step - self._updateCache(data); - self.propagate("animate", e); - - } - } - ); - } - -}); - -$.ui.plugin.add("resizable", "ghost", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize, cs = self.size; - - if (!pr) self.ghost = self.element.clone(); - else self.ghost = pr.clone(); - - self.ghost.css( - { opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 } - ) - .addClass('ui-resizable-ghost').addClass(typeof o.ghost == 'string' ? o.ghost : ''); - - self.ghost.appendTo(self.helper); - - }, - - resize: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize; - - if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); - - }, - - stop: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), pr = o.proportionallyResize; - if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); - } - -}); - -$.ui.plugin.add("resizable", "alsoResize", { - - start: function(e, ui) { - var o = ui.options, self = $(this).data("resizable"), - - _store = function(exp) { - $(exp).each(function() { - $(this).data("resizable-alsoresize", { - width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10), - left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10) - }); - }); - }; - - if (typeof(o.alsoResize) == 'object') { - if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } - else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); } - }else{ - _store(o.alsoResize); - } - }, - - resize: function(e, ui){ - var o = ui.options, self = $(this).data("resizable"), os = self.originalSize, op = self.originalPosition; - - var delta = { - height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, - top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 - }, - - _alsoResize = function(exp, c) { - $(exp).each(function() { - var start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left']; - - $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) { - var sum = (start[prop]||0) + (delta[prop]||0); - if (sum && sum >= 0) - style[prop] = sum || null; - }); - $(this).css(style); - }); - }; - - if (typeof(o.alsoResize) == 'object') { - $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); }); - }else{ - _alsoResize(o.alsoResize); - } - }, - - stop: function(e, ui){ - $(this).removeData("resizable-alsoresize-start"); - } -}); - -})(jQuery); -/* - * jQuery UI Selectable - * - * Copyright (c) 2008 Richard D. Worth (rdworth.org) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.selectable", $.extend($.ui.mouse, { - init: function() { - var self = this; - - this.element.addClass("ui-selectable"); - - this.dragged = false; - - // cache selectee children based on filter - var selectees; - this.refresh = function() { - selectees = $(self.options.filter, self.element[0]); - selectees.each(function() { - var $this = $(this); - var pos = $this.offset(); - $.data(this, "selectable-item", { - element: this, - $element: $this, - left: pos.left, - top: pos.top, - right: pos.left + $this.width(), - bottom: pos.top + $this.height(), - startselected: false, - selected: $this.hasClass('ui-selected'), - selecting: $this.hasClass('ui-selecting'), - unselecting: $this.hasClass('ui-unselecting') - }); - }); - }; - this.refresh(); - - this.selectees = selectees.addClass("ui-selectee"); - - this.mouseInit(); - - this.helper = $(document.createElement('div')).css({border:'1px dotted black'}); - }, - toggle: function() { - if(this.options.disabled){ - this.enable(); - } else { - this.disable(); - } - }, - destroy: function() { - this.element - .removeClass("ui-selectable ui-selectable-disabled") - .removeData("selectable") - .unbind(".selectable"); - this.mouseDestroy(); - }, - mouseStart: function(e) { - var self = this; - - this.opos = [e.pageX, e.pageY]; - - if (this.options.disabled) - return; - - var options = this.options; - - this.selectees = $(options.filter, this.element[0]); - - // selectable START callback - this.element.triggerHandler("selectablestart", [e, { - "selectable": this.element[0], - "options": options - }], options.start); - - $('body').append(this.helper); - // position helper (lasso) - this.helper.css({ - "z-index": 100, - "position": "absolute", - "left": e.clientX, - "top": e.clientY, - "width": 0, - "height": 0 - }); - - if (options.autoRefresh) { - this.refresh(); - } - - this.selectees.filter('.ui-selected').each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.startselected = true; - if (!e.ctrlKey) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - }); - - var isSelectee = false; - $(e.target).parents().andSelf().each(function() { - if($.data(this, "selectable-item")) isSelectee = true; - }); - return this.options.keyboard ? !isSelectee : true; - }, - mouseDrag: function(e) { - var self = this; - this.dragged = true; - - if (this.options.disabled) - return; - - var options = this.options; - - var x1 = this.opos[0], y1 = this.opos[1], x2 = e.pageX, y2 = e.pageY; - if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } - if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } - this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); - - this.selectees.each(function() { - var selectee = $.data(this, "selectable-item"); - //prevent helper from being selected if appendTo: selectable - if (!selectee || selectee.element == self.element[0]) - return; - var hit = false; - if (options.tolerance == 'touch') { - hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); - } else if (options.tolerance == 'fit') { - hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); - } - - if (hit) { - // SELECT - if (selectee.selected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - } - if (selectee.unselecting) { - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - } - if (!selectee.selecting) { - selectee.$element.addClass('ui-selecting'); - selectee.selecting = true; - // selectable SELECTING callback - self.element.triggerHandler("selectableselecting", [e, { - selectable: self.element[0], - selecting: selectee.element, - options: options - }], options.selecting); - } - } else { - // UNSELECT - if (selectee.selecting) { - if (e.ctrlKey && selectee.startselected) { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - selectee.$element.addClass('ui-selected'); - selectee.selected = true; - } else { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - if (selectee.startselected) { - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - } - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - } - if (selectee.selected) { - if (!e.ctrlKey && !selectee.startselected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self.element.triggerHandler("selectableunselecting", [e, { - selectable: self.element[0], - unselecting: selectee.element, - options: options - }], options.unselecting); - } - } - } - }); - - return false; - }, - mouseStop: function(e) { - var self = this; - - this.dragged = false; - - var options = this.options; - - $('.ui-unselecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - selectee.startselected = false; - self.element.triggerHandler("selectableunselected", [e, { - selectable: self.element[0], - unselected: selectee.element, - options: options - }], options.unselected); - }); - $('.ui-selecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); - selectee.selecting = false; - selectee.selected = true; - selectee.startselected = true; - self.element.triggerHandler("selectableselected", [e, { - selectable: self.element[0], - selected: selectee.element, - options: options - }], options.selected); - }); - this.element.triggerHandler("selectablestop", [e, { - selectable: self.element[0], - options: this.options - }], this.options.stop); - - this.helper.remove(); - - return false; - } -})); - -$.extend($.ui.selectable, { - defaults: { - distance: 1, - delay: 0, - cancel: ":input", - appendTo: 'body', - autoRefresh: true, - filter: '*', - tolerance: 'touch' - } -}); - -})(jQuery); -/* - * jQuery UI Sortable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * ui.core.js - */ -(function($) { - -function contains(a, b) { - var safari2 = $.browser.safari && $.browser.version < 522; - if (a.contains && !safari2) { - return a.contains(b); - } - if (a.compareDocumentPosition) - return !!(a.compareDocumentPosition(b) & 16); - while (b = b.parentNode) - if (b == a) return true; - return false; -}; - -$.widget("ui.sortable", $.extend($.ui.mouse, { - init: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are floating - this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; - - //Let's determine the parent's offset - if(!(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative'); - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this.mouseInit(); - - }, - plugins: {}, - ui: function(inst) { - return { - helper: (inst || this)["helper"], - placeholder: (inst || this)["placeholder"] || $([]), - position: (inst || this)["position"], - absolutePosition: (inst || this)["positionAbs"], - options: this.options, - element: this.element, - item: (inst || this)["currentItem"], - sender: inst ? inst.element : null - }; - }, - propagate: function(n,e,inst, noPropagation) { - $.ui.plugin.call(this, n, [e, this.ui(inst)]); - if(!noPropagation) this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]); - }, - serialize: function(o) { - - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var str = []; o = o || {}; - - items.each(function() { - var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1])+'[]='+(o.key && o.expression ? res[1] : res[2])); - }); - - return str.join('&'); - - }, - toArray: function(attr) { - - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var ret = []; - - items.each(function() { ret.push($(this).attr(attr || 'id')); }); - return ret; - - }, - /* Be careful with the following core functions */ - intersectsWith: function(item) { - - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - return (y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r); - } else { - - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - - }, - intersectsWithEdge: function(item) { - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - - if(!(y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r)) return false; - - if(this.floating) { - if(x1 + this.offset.click.left > l && x1 + this.offset.click.left < l + item.width/2) return 2; - if(x1 + this.offset.click.left > l+item.width/2 && x1 + this.offset.click.left < r) return 1; - } else { - if(y1 + this.offset.click.top > t && y1 + this.offset.click.top < t + item.height/2) return 2; - if(y1 + this.offset.click.top > t+item.height/2 && y1 + this.offset.click.top < b) return 1; - } - - } else { - - if (!(l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b )) return false; // Top Half - - if(this.floating) { - if(x2 > l && x1 < l) return 2; //Crosses left edge - if(x1 < r && x2 > r) return 1; //Crosses right edge - } else { - if(y2 > t && y1 < t) return 1; //Crosses top edge - if(y1 < b && y2 > b) return 2; //Crosses bottom edge - } - - } - - return false; - - }, - refresh: function() { - this.refreshItems(); - this.refreshPositions(); - }, - refreshItems: function() { - - this.items = []; - this.containers = [this]; - var items = this.items; - var self = this; - var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element), this]]; - - if(this.options.connectWith) { - for (var i = this.options.connectWith.length - 1; i >= 0; i--){ - var cur = $(this.options.connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], 'sortable'); - if(inst && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - }; - }; - } - - for (var i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - $.data(this, 'sortable-item', queries[i][1]); // Data for target checking (mouse manager) - items.push({ - item: $(this), - instance: queries[i][1], - width: 0, height: 0, - left: 0, top: 0 - }); - }); - }; - - }, - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent) { - var po = this.offsetParent.offset(); - this.offset.parent = { top: po.top + this.offsetParentBorders.top, left: po.left + this.offsetParentBorders.left }; - } - - for (var i = this.items.length - 1; i >= 0; i--){ - - //We ignore calculating positions of all connected containers when we're not over them - if(this.items[i].instance != this.currentContainer && this.currentContainer && this.items[i].item[0] != this.currentItem[0]) - continue; - - var t = this.options.toleranceElement ? $(this.options.toleranceElement, this.items[i].item) : this.items[i].item; - - if(!fast) { - this.items[i].width = t.outerWidth(); - this.items[i].height = t.outerHeight(); - } - - var p = t.offset(); - this.items[i].left = p.left; - this.items[i].top = p.top; - - }; - - for (var i = this.containers.length - 1; i >= 0; i--){ - var p =this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; - - }, - destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled") - .removeData("sortable") - .unbind(".sortable"); - this.mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData("sortable-item"); - }, - createPlaceholder: function(that) { - - var self = that || this, o = self.options; - - if(o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { - return $('<div></div>').addClass(className)[0]; - }, - update: function(i, p) { - p.css(i.offset()).css({ width: i.outerWidth(), height: i.outerHeight() }); - } - }; - } - - self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)).appendTo('body').css({ position: 'absolute' }); - o.placeholder.update.call(self.element, self.currentItem, self.placeholder); - }, - contactContainers: function(e) { - for (var i = this.containers.length - 1; i >= 0; i--){ - - if(this.intersectsWith(this.containers[i].containerCache)) { - if(!this.containers[i].containerCache.over) { - - - if(this.currentContainer != this.containers[i]) { - - //When entering a new container, we will find the item with the least distance and append our item near it - var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top']; - for (var j = this.items.length - 1; j >= 0; j--) { - if(!contains(this.containers[i].element[0], this.items[j].item[0])) continue; - var cur = this.items[j][this.containers[i].floating ? 'left' : 'top']; - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - } - } - - if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled - continue; - - //We also need to exchange the placeholder - if(this.placeholder) this.placeholder.remove(); - if(this.containers[i].options.placeholder) { - this.containers[i].createPlaceholder(this); - } else { - this.placeholder = null;; - } - - this.currentContainer = this.containers[i]; - itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance, null, true) : this.rearrange(e, null, this.containers[i].element, true); - this.propagate("change", e); //Call plugins and callbacks - this.containers[i].propagate("change", e, this); //Call plugins and callbacks - - } - - this.containers[i].propagate("over", e, this); - this.containers[i].containerCache.over = 1; - } - } else { - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - }; - }, - mouseCapture: function(e, overrideHandle) { - - if(this.options.disabled || this.options.type == 'static') return false; - - //We have to refresh the items data once first - this.refreshItems(); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, self = this, nodes = $(e.target).parents().each(function() { - if($.data(this, 'sortable-item') == self) { - currentItem = $(this); - return false; - } - }); - if($.data(e.target, 'sortable-item') == self) currentItem = $(e.target); - - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; - - $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == e.target) validHandle = true; }); - if(!validHandle) return false; - } - - this.currentItem = currentItem; - return true; - - }, - mouseStart: function(e, overrideHandle, noActivation) { - - var o = this.options; - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone(); - if(!this.helper.parents('body').length) this.helper.appendTo((o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)); //Add the helper to the DOM if that didn't happen already - this.helper.css({ position: 'absolute', clear: 'both' }).addClass('ui-sortable-helper'); //Position it absolutely and add a helper class - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - this.margins = { //Cache the margins - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - - this.offset = this.currentItem.offset(); //The element's absolute position on the page - this.offset = { //Substract the margins from the element's absolute offset - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - this.offset.click = { //Where the click happened, relative to the element - left: e.pageX - this.offset.left, - top: e.pageY - this.offset.top - }; - - this.offsetParent = this.helper.offsetParent(); //Get the offsetParent and cache its position - var po = this.offsetParent.offset(); - - this.offsetParentBorders = { - top: (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - this.offset.parent = { //Store its position plus border - top: po.top + this.offsetParentBorders.top, - left: po.left + this.offsetParentBorders.left - }; - - this.originalPosition = this.generatePosition(e); //Generate the original position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; //Cache the former DOM position - - //If o.placeholder is used, create a new element at the given position with the class - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Cache the helper size - if(o.placeholder) this.createPlaceholder(); - - //Call plugins and callbacks - this.propagate("start", e); - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Recache the helper size - - if(o.cursorAt) { - if(o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left; - if(o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right; - if(o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top; - if(o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom; - } - - /* - * - Position constraining - - * Here we prepare position constraining like grid and containment. - */ - - if(o.containment) { - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.parent.left, - 0 - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"),10) || 0), - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"),10) || 0) - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top, - co.left+Math.max(ce.scrollWidth,ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.currentItem.css("marginRight"),10) || 0), - co.top+Math.max(ce.scrollHeight,ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.currentItem.css("marginBottom"),10) || 0) - ]; - } - } - - //Set the original element visibility to hidden to still fill out the white space - if(this.options.placeholder != 'clone') - this.currentItem.css('visibility', 'hidden'); - - //Post 'activate' events to possible containers - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i].propagate("activate", e, this); } - } - - //Prepare possible droppables - if($.ui.ddmanager) $.ui.ddmanager.current = this; - if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e); - - this.dragging = true; - - this.mouseDrag(e); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - - }, - convertPositionTo: function(d, pos) { - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - return { - top: ( - pos.top // the calculated relative position - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) * mod // The offsetParent's scroll position - + this.margins.top * mod //Add the margin (you don't want the margin counting in intersection methods) - ), - left: ( - pos.left // the calculated relative position - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) * mod // The offsetParent's scroll position - + this.margins.left * mod //Add the margin (you don't want the margin counting in intersection methods) - ) - }; - }, - generatePosition: function(e) { - - var o = this.options; - var position = { - top: ( - e.pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) // The offsetParent's scroll position, not if the element is fixed - ), - left: ( - e.pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) // The offsetParent's scroll position, not if the element is fixed - ) - }; - - if(!this.originalPosition) return position; //If we are not dragging yet, we won't check for options - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - if(this.containment) { - if(position.left < this.containment[0]) position.left = this.containment[0]; - if(position.top < this.containment[1]) position.top = this.containment[1]; - if(position.left > this.containment[2]) position.left = this.containment[2]; - if(position.top > this.containment[3]) position.top = this.containment[3]; - } - - if(o.grid) { - var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1]; - position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0]; - position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - return position; - }, - mouseDrag: function(e) { - - - //Compute the helpers position - this.position = this.generatePosition(e); - this.positionAbs = this.convertPositionTo("absolute"); - - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - var intersection = this.intersectsWithEdge(this.items[i]); - if(!intersection) continue; - - if(this.items[i].item[0] != this.currentItem[0] //cannot intersect with itself - && this.currentItem[intersection == 1 ? "next" : "prev"]()[0] != this.items[i].item[0] //no useless actions that have been done before - && !contains(this.currentItem[0], this.items[i].item[0]) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !contains(this.element[0], this.items[i].item[0]) : true) - ) { - - this.direction = intersection == 1 ? "down" : "up"; - this.rearrange(e, this.items[i]); - this.propagate("change", e); //Call plugins and callbacks - break; - } - } - - //Post events to containers - this.contactContainers(e); - - //Call plugins and callbacks - this.propagate("sort", e); - - if(!this.options.axis || this.options.axis == "x") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis == "y") this.helper[0].style.top = this.position.top+'px'; - - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, e); - - return false; - - }, - rearrange: function(e, i, a, hardRefresh) { - a ? a.append(this.currentItem) : i.item[this.direction == 'down' ? 'before' : 'after'](this.currentItem); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var self = this, counter = this.counter; - - window.setTimeout(function() { - if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - },0); - - if(this.options.placeholder) - this.options.placeholder.update.call(this.element, this.currentItem, this.placeholder); - }, - mouseStop: function(e, noPropagation) { - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, e); - - if(this.options.revert) { - var self = this; - var cur = self.currentItem.offset(); - - //Also animate the placeholder if we have one - if(self.placeholder) self.placeholder.animate({ opacity: 'hide' }, (parseInt(this.options.revert, 10) || 500)-50); - - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self.clear(e); - }); - } else { - this.clear(e, noPropagation); - } - - return false; - - }, - clear: function(e, noPropagation) { - - if(this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) this.propagate("update", e, null, noPropagation); //Trigger update callback if the DOM position has changed - if(!contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element - this.propagate("remove", e, null, noPropagation); - for (var i = this.containers.length - 1; i >= 0; i--){ - if(contains(this.containers[i].element[0], this.currentItem[0])) { - this.containers[i].propagate("update", e, this, noPropagation); - this.containers[i].propagate("receive", e, this, noPropagation); - } - }; - }; - - //Post events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i].propagate("deactivate", e, this, noPropagation); - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - this.dragging = false; - if(this.cancelHelperRemoval) { - this.propagate("stop", e, null, noPropagation); - return false; - } - - $(this.currentItem).css('visibility', ''); - if(this.placeholder) this.placeholder.remove(); - this.helper.remove(); this.helper = null; - this.propagate("stop", e, null, noPropagation); - - return true; - - } -})); - -$.extend($.ui.sortable, { - getter: "serialize toArray", - defaults: { - helper: "clone", - tolerance: "guess", - distance: 1, - delay: 0, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - cancel: ":input", - items: '> *', - zIndex: 1000, - dropOnEmpty: true, - appendTo: "parent" - } -}); - -/* - * Sortable Extensions - */ - -$.ui.plugin.add("sortable", "cursor", { - start: function(e, ui) { - var t = $('body'); - if (t.css("cursor")) ui.options._cursor = t.css("cursor"); - t.css("cursor", ui.options.cursor); - }, - stop: function(e, ui) { - if (ui.options._cursor) $('body').css("cursor", ui.options._cursor); - } -}); - -$.ui.plugin.add("sortable", "zIndex", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex"); - t.css('zIndex', ui.options.zIndex); - }, - stop: function(e, ui) { - if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex); - } -}); - -$.ui.plugin.add("sortable", "opacity", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("opacity")) ui.options._opacity = t.css("opacity"); - t.css('opacity', ui.options.opacity); - }, - stop: function(e, ui) { - if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity); - } -}); - -$.ui.plugin.add("sortable", "scroll", { - start: function(e, ui) { - var o = ui.options; - var i = $(this).data("sortable"); - - i.overflowY = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - i.overflowX = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); - - }, - sort: function(e, ui) { - - var o = ui.options; - var i = $(this).data("sortable"); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { - if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed; - if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed; - } else { - if(e.pageY - $(document).scrollTop() < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - if($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { - if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed; - if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed; - } else { - if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - if($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } -}); - -})(jQuery); -/* - * jQuery UI Effects 1.5.1 - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/ - */ -;(function($) { - -$.effects = $.effects || {}; //Add the 'effects' scope - -$.extend($.effects, { - save: function(el, set) { - for(var i=0;i<set.length;i++) { - if(set[i] !== null) $.data(el[0], "ec.storage."+set[i], el[0].style[set[i]]); - } - }, - restore: function(el, set) { - for(var i=0;i<set.length;i++) { - if(set[i] !== null) el.css(set[i], $.data(el[0], "ec.storage."+set[i])); - } - }, - setMode: function(el, mode) { - if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle - return mode; - }, - getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value - // this should be a little more flexible in the future to handle a string & hash - var y, x; - switch (origin[0]) { - case 'top': y = 0; break; - case 'middle': y = 0.5; break; - case 'bottom': y = 1; break; - default: y = origin[0] / original.height; - }; - switch (origin[1]) { - case 'left': x = 0; break; - case 'center': x = 0.5; break; - case 'right': x = 1; break; - default: x = origin[1] / original.width; - }; - return {x: x, y: y}; - }, - createWrapper: function(el) { - if (el.parent().attr('id') == 'fxWrapper') - return el; - var props = {width: el.outerWidth({margin:true}), height: el.outerHeight({margin:true}), 'float': el.css('float')}; - el.wrap('<div id="fxWrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>'); - var wrapper = el.parent(); - if (el.css('position') == 'static'){ - wrapper.css({position: 'relative'}); - el.css({position: 'relative'}); - } else { - var top = parseInt(el.css('top'), 10); if(isNaN(top)) top = 'auto'; - var left = parseInt(el.css('left'), 10); if(isNaN(left)) left = 'auto'; - wrapper.css({ position: el.css('position'), top: top, left: left, zIndex: el.css('z-index') }).show(); - el.css({position: 'relative', top:0, left:0}); - } - wrapper.css(props); - return wrapper; - }, - removeWrapper: function(el) { - if (el.parent().attr('id') == 'fxWrapper') - return el.parent().replaceWith(el); - return el; - }, - setTransition: function(el, list, factor, val) { - val = val || {}; - $.each(list,function(i, x){ - unit = el.cssUnit(x); - if (unit[0] > 0) val[x] = unit[0] * factor + unit[1]; - }); - return val; - }, - animateClass: function(value, duration, easing, callback) { - - var cb = (typeof easing == "function" ? easing : (callback ? callback : null)); - var ea = (typeof easing == "object" ? easing : null); - - return this.each(function() { - - var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || ''; - if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */ - if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; } - - //Let's get a style offset - var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); - if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove); - var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); - if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove); - - // The main function to form the object for animation - for(var n in newStyle) { - if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */ - && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */ - && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */ - && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */ - && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */ - ) offset[n] = newStyle[n]; - } - - that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object - // Change style attribute back to original. For stupid IE, we need to clear the damn object. - if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr); - if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove); - if(cb) cb.apply(this, arguments); - }); - - }); - } -}); - -//Extend the methods of jQuery -$.fn.extend({ - //Save old methods - _show: $.fn.show, - _hide: $.fn.hide, - __toggle: $.fn.toggle, - _addClass: $.fn.addClass, - _removeClass: $.fn.removeClass, - _toggleClass: $.fn.toggleClass, - // New ec methods - effect: function(fx,o,speed,callback) { - return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: o || {}, duration: speed, callback: callback }) : null; - }, - show: function() { - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) - return this._show.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'show'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - hide: function() { - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) - return this._hide.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'hide'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - toggle: function(){ - if(!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0])) || (arguments[0].constructor == Function)) - return this.__toggle.apply(this, arguments); - else { - var o = arguments[1] || {}; o['mode'] = 'toggle'; - return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]); - } - }, - addClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); - }, - removeClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); - }, - toggleClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames); - }, - morph: function(remove,add,speed,easing,callback) { - return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); - }, - switchClass: function() { - return this.morph.apply(this, arguments); - }, - // helper functions - cssUnit: function(key) { - var style = this.css(key), val = []; - $.each( ['em','px','%','pt'], function(i, unit){ - if(style.indexOf(unit) > 0) - val = [parseFloat(style), unit]; - }); - return val; - } -}); - -/* - * jQuery Color Animations - * Copyright 2007 John Resig - * Released under the MIT and GPL licenses. - */ - -// We override the animation for all of these color styles -jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ - jQuery.fx.step[attr] = function(fx){ - if ( fx.state == 0 ) { - fx.start = getColor( fx.elem, attr ); - fx.end = getRGB( fx.end ); - } - - fx.elem.style[attr] = "rgb(" + [ - Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) - ].join(",") + ")"; - } -}); - -// Color Conversion functions from highlightFade -// By Blair Mitchelmore -// http://jquery.offput.ca/highlightFade/ - -// Parse strings looking for color tuples [255,255,255] -function getRGB(color) { - var result; - - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; - - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])]; - - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; - - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; - - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; - - // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 - if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) - return colors['transparent'] - - // Otherwise, we're most likely dealing with a named color - return colors[jQuery.trim(color).toLowerCase()]; -} - -function getColor(elem, attr) { - var color; - - do { - color = jQuery.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") ) - break; - - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); - - return getRGB(color); -}; - -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ - -var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0], - transparent: [255,255,255] -}; - -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -})(jQuery); -/* - * jQuery UI Effects Blind - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.blind = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'vertical') ? 'height' : 'width'; - var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); - if(mode == 'show') wrapper.css(ref, 0); // Shift - - // Animation - var animation = {}; - animation[ref] = mode == 'show' ? distance : 0; - - // Animate - wrapper.animate(animation, o.duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Bounce - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.bounce = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'up'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 5; // Default # of times - var speed = o.duration || 250; // Default speed per bounce - if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - if (mode == 'hide') distance = distance / (times * 2); - if (mode != 'hide') times--; - - // Animate - if (mode == 'show') { // Show Bounce - var animation = {opacity: 1}; - animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation, speed / 2, o.options.easing); - distance = distance / 2; - times--; - }; - for (var i = 0; i < times; i++) { // Bounces - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); - distance = (mode == 'hide') ? distance * 2 : distance / 2; - }; - if (mode == 'hide') { // Last Bounce - var animation = {opacity: 0}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - el.animate(animation, speed / 2, o.options.easing, function(){ - el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Clip - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.clip = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','height','width']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var animate = el[0].tagName == 'IMG' ? wrapper : el; - var ref = { - size: (direction == 'vertical') ? 'height' : 'width', - position: (direction == 'vertical') ? 'top' : 'left' - }; - var distance = (direction == 'vertical') ? animate.height() : animate.width(); - if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift - - // Animation - var animation = {}; - animation[ref.size] = mode == 'show' ? distance : 0; - animation[ref.position] = mode == 'show' ? 0 : distance / 2; - - // Animate - animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Drop - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.drop = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','opacity']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {opacity: mode == 'show' ? 1 : 0}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Explode - * - * Copyright (c) 2008 Paul Bakaus (ui.jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.explode = function(o) { - - return this.queue(function() { - - var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - - o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; - var el = $(this).show().css('visibility', 'hidden'); - var offset = el.offset(); - - //Substract the margins - not fixing the problem yet. - offset.top -= parseInt(el.css("marginTop")) || 0; - offset.left -= parseInt(el.css("marginLeft")) || 0; - - var width = el.outerWidth(true); - var height = el.outerHeight(true); - - for(var i=0;i<rows;i++) { // = - for(var j=0;j<cells;j++) { // || - el - .clone() - .appendTo('body') - .wrap('<div></div>') - .css({ - position: 'absolute', - visibility: 'visible', - left: -j*(width/cells), - top: -i*(height/rows) - }) - .parent() - .addClass('effects-explode') - .css({ - position: 'absolute', - overflow: 'hidden', - width: width/cells, - height: height/rows, - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), - opacity: o.options.mode == 'show' ? 0 : 1 - }).animate({ - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), - opacity: o.options.mode == 'show' ? 1 : 0 - }, o.duration || 500); - } - } - - // Set a timeout, to call the callback approx. when the other animations have finished - setTimeout(function() { - - o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); - if(o.callback) o.callback.apply(el[0]); // Callback - el.dequeue(); - - $('.effects-explode').remove(); - - }, o.duration || 500); - - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Fold - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.fold = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var size = o.options.size || 15; // Default fold size - var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var widthFirst = ((mode == 'show') != horizFirst); - var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; - var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; - var percent = /([0-9]+)%/.exec(size); - if(percent) size = parseInt(percent[1]) / 100 * distance[mode == 'hide' ? 0 : 1]; - if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift - - // Animation - var animation1 = {}, animation2 = {}; - animation1[ref[0]] = mode == 'show' ? distance[0] : size; - animation2[ref[1]] = mode == 'show' ? distance[1] : 0; - - // Animate - wrapper.animate(animation1, o.duration / 2, o.options.easing) - .animate(animation2, o.duration / 2, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Highlight - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * effects.core.js - */ -;(function($) { - -$.effects.highlight = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['backgroundImage','backgroundColor','opacity']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var color = o.options.color || "#ffff99"; // Default highlight color - var oldColor = el.css("backgroundColor"); - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - el.css({backgroundImage: 'none', backgroundColor: color}); // Shift - - // Animation - var animation = {backgroundColor: oldColor }; - if (mode == "hide") animation['opacity'] = 0; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == "hide") el.hide(); - $.effects.restore(el, props); - if (mode == "show" && jQuery.browser.msie) this.style.removeAttribute('filter'); - if(o.callback) o.callback.apply(this, arguments); - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Pulsate - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.pulsate = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var times = o.options.times || 5; // Default # of times - - // Adjust - if (mode == 'hide') times--; - if (el.is(':hidden')) { // Show fadeIn - el.css('opacity', 0); - el.show(); // Show - el.animate({opacity: 1}, o.duration / 2, o.options.easing); - times = times-2; - } - - // Animate - for (var i = 0; i < times; i++) { // Pulsate - el.animate({opacity: 0}, o.duration / 2, o.options.easing).animate({opacity: 1}, o.duration / 2, o.options.easing); - }; - if (mode == 'hide') { // Last Pulse - el.animate({opacity: 0}, o.duration / 2, o.options.easing, function(){ - el.hide(); // Hide - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - el.animate({opacity: 0}, o.duration / 2, o.options.easing).animate({opacity: 1}, o.duration / 2, o.options.easing, function(){ - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Scale - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.puff = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var percent = parseInt(o.options.percent) || 150; // Set default puff percent - options.fade = true; // It's not a puff if it doesn't fade! :) - var original = {height: el.height(), width: el.width()}; // Save original - - // Adjust - var factor = percent / 100; - el.from = (mode == 'hide') ? original : {height: original.height * factor, width: original.width * factor}; - - // Animation - options.from = el.from; - options.percent = (mode == 'hide') ? percent : 100; - options.mode = mode; - - // Animate - el.effect('scale', options, o.duration, o.callback); - el.dequeue(); - }); - -}; - -$.effects.scale = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var percent = parseInt(o.options.percent) || (parseInt(o.options.percent) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent - var direction = o.options.direction || 'both'; // Set default axis - var origin = o.options.origin; // The origin of the scaling - if (mode != 'effect') { // Set default origin and restore for show/hide - options.origin = origin || ['middle','center']; - options.restore = true; - } - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state - - // Adjust - var factor = { // Set scaling factor - y: direction != 'horizontal' ? (percent / 100) : 1, - x: direction != 'vertical' ? (percent / 100) : 1 - }; - el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state - - if (o.options.fade) { // Fade option to support puff - if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; - if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; - }; - - // Animation - options.from = el.from; options.to = el.to; options.mode = mode; - - // Animate - el.effect('size', options, o.duration, o.callback); - el.dequeue(); - }); - -}; - -$.effects.size = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left','width','height','overflow','opacity']; - var props1 = ['position','top','left','overflow','opacity']; // Always restore - var props2 = ['width','height','overflow']; // Copy for children - var cProps = ['fontSize']; - var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; - var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var restore = o.options.restore || false; // Default restore - var scale = o.options.scale || 'both'; // Default scale mode - var origin = o.options.origin; // The origin of the sizing - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || original; // Default from state - el.to = o.options.to || original; // Default to state - // Adjust - if (origin) { // Calculate baseline shifts - var baseline = $.effects.getBaseline(origin, original); - el.from.top = (original.height - el.from.height) * baseline.y; - el.from.left = (original.width - el.from.width) * baseline.x; - el.to.top = (original.height - el.to.height) * baseline.y; - el.to.left = (original.width - el.to.width) * baseline.x; - }; - var factor = { // Set scaling factor - from: {y: el.from.height / original.height, x: el.from.width / original.width}, - to: {y: el.to.height / original.height, x: el.to.width / original.width} - }; - if (scale == 'box' || scale == 'both') { // Scale the css box - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(vProps); - el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - props = props.concat(hProps); - el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); - el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); - }; - }; - if (scale == 'content' || scale == 'both') { // Scale the content - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(cProps); - el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); - }; - }; - $.effects.save(el, restore ? props : props1); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - el.css('overflow','hidden').css(el.from); // Shift - - // Animate - if (scale == 'content' || scale == 'both') { // Scale the children - vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size - hProps = hProps.concat(['marginLeft','marginRight']); // Add margins - props2 = props.concat(vProps).concat(hProps); // Concat - el.find("*[width]").each(function(){ - child = $(this); - if (restore) $.effects.save(child, props2); - var c_original = {height: child.height(), width: child.width()}; // Save original - child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; - child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; - if (factor.from.y != factor.to.y) { // Vertical props scaling - child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); - child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); - child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); - }; - child.css(child.from); // Shift children - child.animate(child.to, o.duration, o.options.easing, function(){ - if (restore) $.effects.restore(child, props2); // Restore children - }); // Animate children - }); - }; - - // Animate - el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Shake - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.shake = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'left'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 3; // Default # of times - var speed = o.duration || o.options.duration || 140; // Default speed per shake - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - - // Animation - var animation = {}, animation1 = {}, animation2 = {}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; - animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; - - // Animate - el.animate(animation, speed, o.options.easing); - for (var i = 1; i < times; i++) { // Shakes - el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); - }; - el.animate(animation1, speed, o.options.easing). - animate(animation, speed / 2, o.options.easing, function(){ // Last shake - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Slide - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.slide = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','left']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); - if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Effects Transfer - * - * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * effects.core.js - */ -(function($) { - -$.effects.transfer = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var target = $(o.options.to); // Find Target - var position = el.offset(); - var transfer = $('<div class="ui-effects-transfer"></div>').appendTo(document.body); - if(o.options.className) transfer.addClass(o.options.className); - - // Set target css - transfer.addClass(o.options.className); - transfer.css({ - top: position.top, - left: position.left, - height: el.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')), - width: el.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')), - position: 'absolute' - }); - - // Animation - position = target.offset(); - animation = { - top: position.top, - left: position.left, - height: target.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')), - width: target.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')) - }; - - // Animate - transfer.animate(animation, o.duration, o.options.easing, function() { - transfer.remove(); // Remove div - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); -/* - * jQuery UI Accordion - * - * Copyright (c) 2007, 2008 Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.accordion", { - init: function() { - var options = this.options; - - if ( options.navigation ) { - var current = this.element.find("a").filter(options.navigationFilter); - if ( current.length ) { - if ( current.filter(options.header).length ) { - options.active = current; - } else { - options.active = current.parent().parent().prev(); - current.addClass("current"); - } - } - } - - // calculate active if not specified, using the first header - options.headers = this.element.find(options.header); - options.active = findActive(options.headers, options.active); - - // IE7-/Win - Extra vertical space in Lists fixed - if ($.browser.msie) { - this.element.find('a').css('zoom', '1'); - } - - if (!this.element.hasClass("ui-accordion")) { - this.element.addClass("ui-accordion"); - $("<span class='ui-accordion-left'/>").insertBefore(options.headers); - $("<span class='ui-accordion-right'/>").appendTo(options.headers); - options.headers.addClass("ui-accordion-header").attr("tabindex", "0"); - } - - var maxHeight; - if ( options.fillSpace ) { - maxHeight = this.element.parent().height(); - options.headers.each(function() { - maxHeight -= $(this).outerHeight(); - }); - var maxPadding = 0; - options.headers.next().each(function() { - maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); - }).height(maxHeight - maxPadding); - } else if ( options.autoHeight ) { - maxHeight = 0; - options.headers.next().each(function() { - maxHeight = Math.max(maxHeight, $(this).outerHeight()); - }).height(maxHeight); - } - - options.headers - .not(options.active || "") - .next() - .hide(); - options.active.parent().andSelf().addClass(options.selectedClass); - - if (options.event) { - this.element.bind((options.event) + ".accordion", clickHandler); - } - }, - activate: function(index) { - // call clickHandler with custom event - clickHandler.call(this.element[0], { - target: findActive( this.options.headers, index )[0] - }); - }, - destroy: function() { - this.options.headers.next().css("display", ""); - if ( this.options.fillSpace || this.options.autoHeight ) { - this.options.headers.next().css("height", ""); - } - $.removeData(this.element[0], "accordion"); - this.element.removeClass("ui-accordion").unbind(".accordion"); - } -}); - -function scopeCallback(callback, scope) { - return function() { - return callback.apply(scope, arguments); - }; -}; - -function completed(cancel) { - // if removed while animated data can be empty - if (!$.data(this, "accordion")) { - return; - } - - var instance = $.data(this, "accordion"); - var options = instance.options; - options.running = cancel ? 0 : --options.running; - if ( options.running ) { - return; - } - if ( options.clearStyle ) { - options.toShow.add(options.toHide).css({ - height: "", - overflow: "" - }); - } - $(this).triggerHandler("accordionchange", [null, options.data], options.change); -} - -function toggle(toShow, toHide, data, clickedActive, down) { - var options = $.data(this, "accordion").options; - options.toShow = toShow; - options.toHide = toHide; - options.data = data; - var complete = scopeCallback(completed, this); - - // count elements to animate - options.running = toHide.size() === 0 ? toShow.size() : toHide.size(); - - if ( options.animated ) { - if ( !options.alwaysOpen && clickedActive ) { - $.ui.accordion.animations[options.animated]({ - toShow: jQuery([]), - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight - }); - } else { - $.ui.accordion.animations[options.animated]({ - toShow: toShow, - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight - }); - } - } else { - if ( !options.alwaysOpen && clickedActive ) { - toShow.toggle(); - } else { - toHide.hide(); - toShow.show(); - } - complete(true); - } -} - -function clickHandler(event) { - var options = $.data(this, "accordion").options; - if (options.disabled) { - return false; - } - - // called only when using activate(false) to close all parts programmatically - if ( !event.target && !options.alwaysOpen ) { - options.active.parent().andSelf().toggleClass(options.selectedClass); - var toHide = options.active.next(), - data = { - options: options, - newHeader: jQuery([]), - oldHeader: options.active, - newContent: jQuery([]), - oldContent: toHide - }, - toShow = (options.active = $([])); - toggle.call(this, toShow, toHide, data ); - return false; - } - // get the click target - var clicked = $(event.target); - - // due to the event delegation model, we have to check if one - // of the parent elements is our actual header, and find that - // otherwise stick with the initial target - clicked = $( clicked.parents(options.header)[0] || clicked ); - - var clickedActive = clicked[0] == options.active[0]; - - // if animations are still active, or the active header is the target, ignore click - if (options.running || (options.alwaysOpen && clickedActive)) { - return false; - } - if (!clicked.is(options.header)) { - return; - } - - // switch classes - options.active.parent().andSelf().toggleClass(options.selectedClass); - if ( !clickedActive ) { - clicked.parent().andSelf().addClass(options.selectedClass); - } - - // find elements to show and hide - var toShow = clicked.next(), - toHide = options.active.next(), - //data = [clicked, options.active, toShow, toHide], - data = { - options: options, - newHeader: clicked, - oldHeader: options.active, - newContent: toShow, - oldContent: toHide - }, - down = options.headers.index( options.active[0] ) > options.headers.index( clicked[0] ); - - options.active = clickedActive ? $([]) : clicked; - toggle.call(this, toShow, toHide, data, clickedActive, down ); - - return false; -}; - -function findActive(headers, selector) { - return selector != undefined - ? typeof selector == "number" - ? headers.filter(":eq(" + selector + ")") - : headers.not(headers.not(selector)) - : selector === false - ? $([]) - : headers.filter(":eq(0)"); -} - -$.extend($.ui.accordion, { - defaults: { - selectedClass: "selected", - alwaysOpen: true, - animated: 'slide', - event: "click", - header: "a", - autoHeight: true, - running: 0, - navigationFilter: function() { - return this.href.toLowerCase() == location.href.toLowerCase(); - } - }, - animations: { - slide: function(options, additions) { - options = $.extend({ - easing: "swing", - duration: 300 - }, options, additions); - if ( !options.toHide.size() ) { - options.toShow.animate({height: "show"}, options); - return; - } - var hideHeight = options.toHide.height(), - showHeight = options.toShow.height(), - difference = showHeight / hideHeight; - options.toShow.css({ height: 0, overflow: 'hidden' }).show(); - options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height:"hide"},{ - step: function(now) { - var current = (hideHeight - now) * difference; - if ($.browser.msie || $.browser.opera) { - current = Math.ceil(current); - } - options.toShow.height( current ); - }, - duration: options.duration, - easing: options.easing, - complete: function() { - if ( !options.autoHeight ) { - options.toShow.css("height", "auto"); - } - options.complete(); - } - }); - }, - bounceslide: function(options) { - this.slide(options, { - easing: options.down ? "bounceout" : "swing", - duration: options.down ? 1000 : 200 - }); - }, - easeslide: function(options) { - this.slide(options, { - easing: "easeinout", - duration: 700 - }); - } - } -}); - -// deprecated, use accordion("activate", index) instead -$.fn.activate = function(index) { - return this.accordion("activate", index); -}; - -})(jQuery); -/* - * jQuery UI Datepicker - * - * Copyright (c) 2006, 2007, 2008 Marc Grabanski - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * ui.core.js - * - * Marc Grabanski (m@marcgrabanski.com) and Keith Wood (kbwood@virginbroadband.com.au). - */ - -(function($) { // hide the namespace - -/* Date picker manager. - Use the singleton instance of this class, $.datepicker, to interact with the date picker. - Settings for (groups of) date pickers are maintained in an instance object - (DatepickerInstance), allowing multiple different settings on the same page. */ - -function Datepicker() { - this.debug = false; // Change this to true to start debugging - this._nextId = 0; // Next ID for a date picker instance - this._inst = []; // List of instances indexed by ID - this._curInst = null; // The current instance in use - this._disabledInputs = []; // List of date picker inputs that have been disabled - this._datepickerShowing = false; // True if the popup picker is showing , false if not - this._inDialog = false; // True if showing within a "dialog", false if not - this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division - this._appendClass = 'ui-datepicker-append'; // The name of the append marker class - this._wrapClass = 'ui-datepicker-wrap'; // The name of the wrapper marker class - this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class - this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class - this._promptClass = 'ui-datepicker-prompt'; // The name of the dialog prompt marker class - this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class - this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - clearText: 'Clear', // Display text for clear link - clearStatus: 'Erase the current date', // Status text for clear link - closeText: 'Close', // Display text for close link - closeStatus: 'Close without change', // Status text for close link - prevText: '<Prev', // Display text for previous month link - prevStatus: 'Show the previous month', // Status text for previous month link - nextText: 'Next>', // Display text for next month link - nextStatus: 'Show the next month', // Status text for next month link - currentText: 'Today', // Display text for current month link - currentStatus: 'Show the current month', // Status text for current month link - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], // Names of months for drop-down and formatting - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting - monthStatus: 'Show a different month', // Status text for selecting a month - yearStatus: 'Show a different year', // Status text for selecting a year - weekHeader: 'Wk', // Header for the week of the year column - weekStatus: 'Week of the year', // Status text for the week of the year column - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday - dayStatus: 'Set DD as first week day', // Status text for the day of the week selection - dateStatus: 'Select DD, M d', // Status text for the date selection - dateFormat: 'mm/dd/yy', // See format options on parseDate - firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... - initStatus: 'Select a date', // Initial Status text on opening - isRTL: false // True if right-to-left language, false if left-to-right - }; - this._defaults = { // Global defaults for all the date picker instances - showOn: 'focus', // 'focus' for popup on focus, - // 'button' for trigger button, or 'both' for either - showAnim: 'show', // Name of jQuery animation for popup - defaultDate: null, // Used when field is blank: actual date, - // +/-number for offset from today, null for today - appendText: '', // Display text following the input box, e.g. showing the format - buttonText: '...', // Text for trigger button - buttonImage: '', // URL for trigger button image - buttonImageOnly: false, // True if the image appears alone, false if it appears on a button - closeAtTop: true, // True to have the clear/close at the top, - // false to have them at the bottom - mandatory: false, // True to hide the Clear link, false to include it - hideIfNoPrevNext: false, // True to hide next/previous month links - // if not applicable, false to just disable them - navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links - changeMonth: true, // True if month can be selected directly, false if only prev/next - changeYear: true, // True if year can be selected directly, false if only prev/next - yearRange: '-10:+10', // Range of years to display in drop-down, - // either relative to current year (-nn:+nn) or absolute (nnnn:nnnn) - changeFirstDay: true, // True to click on day name to change, false to remain as set - highlightWeek: false, // True to highlight the selected week - showOtherMonths: false, // True to show dates in other months, false to leave blank - showWeeks: false, // True to show week of the year, false to omit - calculateWeek: this.iso8601Week, // How to calculate the week of the year, - // takes a Date and returns the number of the week for it - shortYearCutoff: '+10', // Short year values < this are in the current century, - // > this are in the previous century, - // string value starting with '+' for current year + value - showStatus: false, // True to show status bar at bottom, false to not show it - statusForDate: this.dateStatus, // Function to provide status text for a date - - // takes date and instance as parameters, returns display text - minDate: null, // The earliest selectable date, or null for no limit - maxDate: null, // The latest selectable date, or null for no limit - speed: 'normal', // Speed of display/closure - beforeShowDay: null, // Function that takes a date and returns an array with - // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', - // [2] = cell title (optional), e.g. $.datepicker.noWeekends - beforeShow: null, // Function that takes an input field and - // returns a set of custom settings for the date picker - onSelect: null, // Define a callback function when a date is selected - onChangeMonthYear: null, // Define a callback function when the month or year is changed - onClose: null, // Define a callback function when the datepicker is closed - numberOfMonths: 1, // Number of months to show at a time - stepMonths: 1, // Number of months to step back/forward - rangeSelect: false, // Allows for selecting a date range on one date picker - rangeSeparator: ' - ', // Text between two dates in a range - altField: '', // Selector for an alternate field to store selected dates into - altFormat: '' // The date format to use for the alternate field - }; - $.extend(this._defaults, this.regional['']); - this._datepickerDiv = $('<div id="' + this._mainDivId + '"></div>'); -} - -$.extend(Datepicker.prototype, { - /* Class name added to elements to indicate already configured with a date picker. */ - markerClassName: 'hasDatepicker', - - /* Debug logging (if enabled). */ - log: function () { - if (this.debug) - console.log.apply('', arguments); - }, - - /* Register a new date picker instance - with custom settings. */ - _register: function(inst) { - var id = this._nextId++; - this._inst[id] = inst; - return id; - }, - - /* Retrieve a particular date picker instance based on its ID. */ - _getInst: function(id) { - return this._inst[id] || id; - }, - - /* Override the default settings for all instances of the date picker. - @param settings object - the new settings to use as defaults (anonymous object) - @return the manager object */ - setDefaults: function(settings) { - extendRemove(this._defaults, settings || {}); - return this; - }, - - /* Attach the date picker to a jQuery selection. - @param target element - the target input field or division or span - @param settings object - the new settings to use for this date picker instance (anonymous) */ - _attachDatepicker: function(target, settings) { - // check for settings on the control itself - in namespace 'date:' - var inlineSettings = null; - for (attrName in this._defaults) { - var attrValue = target.getAttribute('date:' + attrName); - if (attrValue) { - inlineSettings = inlineSettings || {}; - try { - inlineSettings[attrName] = eval(attrValue); - } catch (err) { - inlineSettings[attrName] = attrValue; - } - } - } - var nodeName = target.nodeName.toLowerCase(); - var instSettings = (inlineSettings ? - $.extend(settings || {}, inlineSettings) : settings); - if (nodeName == 'input') { - var inst = (inst && !inlineSettings ? inst : - new DatepickerInstance(instSettings, false)); - this._connectDatepicker(target, inst); - } else if (nodeName == 'div' || nodeName == 'span') { - var inst = new DatepickerInstance(instSettings, true); - this._inlineDatepicker(target, inst); - } - }, - - /* Detach a datepicker from its control. - @param target element - the target input field or division or span */ - _destroyDatepicker: function(target) { - var nodeName = target.nodeName.toLowerCase(); - var calId = target._calId; - var $target = $(target); - $target.removeAttr('_calId'); - if (nodeName == 'input') { - $target.siblings('.' + this._appendClass).replaceWith('').end() - .siblings('.' + this._triggerClass).replaceWith('').end() - .removeClass(this.markerClassName) - .unbind('focus', this._showDatepicker) - .unbind('keydown', this._doKeyDown) - .unbind('keypress', this._doKeyPress); - var wrapper = $target.parents('.' + this._wrapClass); - if (wrapper) - wrapper.siblings('.' + this._appendClass).replaceWith('').end() - .replaceWith(wrapper.html()); - } else if (nodeName == 'div' || nodeName == 'span') - $target.removeClass(this.markerClassName).empty(); - if ($('input[_calId=' + calId + ']').length == 0) - // clean up if last for this ID - this._inst[calId] = null; - }, - - /* Enable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _enableDatepicker: function(target) { - target.disabled = false; - $(target).siblings('button.' + this._triggerClass).each(function() { this.disabled = false; }).end() - .siblings('img.' + this._triggerClass).css({opacity: '1.0', cursor: ''}); - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - }, - - /* Disable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _disableDatepicker: function(target) { - target.disabled = true; - $(target).siblings('button.' + this._triggerClass).each(function() { this.disabled = true; }).end() - .siblings('img.' + this._triggerClass).css({opacity: '0.5', cursor: 'default'}); - this._disabledInputs = $.map($.datepicker._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - this._disabledInputs[$.datepicker._disabledInputs.length] = target; - }, - - /* Is the first field in a jQuery collection disabled as a datepicker? - @param target element - the target input field or division or span - @return boolean - true if disabled, false if enabled */ - _isDisabledDatepicker: function(target) { - if (!target) - return false; - for (var i = 0; i < this._disabledInputs.length; i++) { - if (this._disabledInputs[i] == target) - return true; - } - return false; - }, - - /* Update the settings for a date picker attached to an input field or division. - @param target element - the target input field or division or span - @param name string - the name of the setting to change or - object - the new settings to update - @param value any - the new value for the setting (omit if above is an object) */ - _changeDatepicker: function(target, name, value) { - var settings = name || {}; - if (typeof name == 'string') { - settings = {}; - settings[name] = value; - } - if (inst = this._getInst(target._calId)) { - extendRemove(inst._settings, settings); - this._updateDatepicker(inst); - } - }, - - /* Set the dates for a jQuery selection. - @param target element - the target input field or division or span - @param date Date - the new date - @param endDate Date - the new end date for a range (optional) */ - _setDateDatepicker: function(target, date, endDate) { - if (inst = this._getInst(target._calId)) { - inst._setDate(date, endDate); - this._updateDatepicker(inst); - } - }, - - /* Get the date(s) for the first entry in a jQuery selection. - @param target element - the target input field or division or span - @return Date - the current date or - Date[2] - the current dates for a range */ - _getDateDatepicker: function(target) { - var inst = this._getInst(target._calId); - if (inst) - inst._setDateFromField($(target)); - return (inst ? inst._getDate() : null); - }, - - /* Handle keystrokes. */ - _doKeyDown: function(e) { - var inst = $.datepicker._getInst(this._calId); - if ($.datepicker._datepickerShowing) - switch (e.keyCode) { - case 9: $.datepicker._hideDatepicker(null, ''); - break; // hide on tab out - case 13: $.datepicker._selectDay(inst, inst._selectedMonth, inst._selectedYear, - $('td.ui-datepicker-days-cell-over', inst._datepickerDiv)[0]); - return false; // don't submit the form - break; // select the value on enter - case 27: $.datepicker._hideDatepicker(null, inst._get('speed')); - break; // hide on escape - case 33: $.datepicker._adjustDate(inst, - (e.ctrlKey ? -1 : -inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M')); - break; // previous month/year on page up/+ ctrl - case 34: $.datepicker._adjustDate(inst, - (e.ctrlKey ? +1 : +inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M')); - break; // next month/year on page down/+ ctrl - case 35: if (e.ctrlKey) $.datepicker._clearDate(inst); - break; // clear on ctrl+end - case 36: if (e.ctrlKey) $.datepicker._gotoToday(inst); - break; // current on ctrl+home - case 37: if (e.ctrlKey) $.datepicker._adjustDate(inst, -1, 'D'); - break; // -1 day on ctrl+left - case 38: if (e.ctrlKey) $.datepicker._adjustDate(inst, -7, 'D'); - break; // -1 week on ctrl+up - case 39: if (e.ctrlKey) $.datepicker._adjustDate(inst, +1, 'D'); - break; // +1 day on ctrl+right - case 40: if (e.ctrlKey) $.datepicker._adjustDate(inst, +7, 'D'); - break; // +1 week on ctrl+down - } - else if (e.keyCode == 36 && e.ctrlKey) // display the date picker on ctrl+home - $.datepicker._showDatepicker(this); - }, - - /* Filter entered characters - based on date format. */ - _doKeyPress: function(e) { - var inst = $.datepicker._getInst(this._calId); - var chars = $.datepicker._possibleChars(inst._get('dateFormat')); - var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode); - return e.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); - }, - - /* Attach the date picker to an input field. */ - _connectDatepicker: function(target, inst) { - var input = $(target); - if (input.hasClass(this.markerClassName)) - return; - var appendText = inst._get('appendText'); - var isRTL = inst._get('isRTL'); - if (appendText) - input[isRTL ? 'before' : 'after']('<span class="' + this._appendClass + '">' + appendText + '</span>'); - var showOn = inst._get('showOn'); - if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field - input.focus(this._showDatepicker); - if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked - input.wrap('<span class="' + this._wrapClass + '"></span>'); - var buttonText = inst._get('buttonText'); - var buttonImage = inst._get('buttonImage'); - var trigger = $(inst._get('buttonImageOnly') ? - $('<img/>').addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText }) : - $('<button></button>').addClass(this._triggerClass).html(buttonImage != '' ? - $('<img/>').attr({ src:buttonImage, alt:buttonText, title:buttonText }) : buttonText)); - input[isRTL ? 'before' : 'after'](trigger); - trigger.click(function() { - if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) - $.datepicker._hideDatepicker(); - else - $.datepicker._showDatepicker(target); - }); - } - input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress) - .bind("setData.datepicker", function(event, key, value) { - inst._settings[key] = value; - }).bind("getData.datepicker", function(event, key) { - return inst._get(key); - }); - input[0]._calId = inst._id; - }, - - /* Attach an inline date picker to a div. */ - _inlineDatepicker: function(target, inst) { - var input = $(target); - if (input.hasClass(this.markerClassName)) - return; - input.addClass(this.markerClassName).append(inst._datepickerDiv) - .bind("setData.datepicker", function(event, key, value){ - inst._settings[key] = value; - }).bind("getData.datepicker", function(event, key){ - return inst._get(key); - }); - input[0]._calId = inst._id; - this._updateDatepicker(inst); - }, - - /* Tidy up after displaying the date picker. */ - _inlineShow: function(inst) { - var numMonths = inst._getNumberOfMonths(); // fix width for dynamic number of date pickers - inst._datepickerDiv.width(numMonths[1] * $('.ui-datepicker', inst._datepickerDiv[0]).width()); - }, - - /* Pop-up the date picker in a "dialog" box. - @param input element - ignored - @param dateText string - the initial date to display (in the current format) - @param onSelect function - the function(dateText) to call when a date is selected - @param settings object - update the dialog date picker instance's settings (anonymous object) - @param pos int[2] - coordinates for the dialog's position within the screen or - event - with x/y coordinates or - leave empty for default (screen centre) - @return the manager object */ - _dialogDatepicker: function(input, dateText, onSelect, settings, pos) { - var inst = this._dialogInst; // internal instance - if (!inst) { - inst = this._dialogInst = new DatepickerInstance({}, false); - this._dialogInput = $('<input type="text" size="1" style="position: absolute; top: -100px;"/>'); - this._dialogInput.keydown(this._doKeyDown); - $('body').append(this._dialogInput); - this._dialogInput[0]._calId = inst._id; - } - extendRemove(inst._settings, settings || {}); - this._dialogInput.val(dateText); - - this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); - if (!this._pos) { - var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; - var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - this._pos = // should use actual width/height below - [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; - } - - // move input on screen for focus, but hidden behind dialog - this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px'); - inst._settings.onSelect = onSelect; - this._inDialog = true; - this._datepickerDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]); - if ($.blockUI) - $.blockUI(this._datepickerDiv); - return this; - }, - - /* Pop-up the date picker for a given input field. - @param input element - the input field attached to the date picker or - event - if triggered by focus */ - _showDatepicker: function(input) { - input = input.target || input; - if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger - input = $('input', input.parentNode)[0]; - if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here - return; - var inst = $.datepicker._getInst(input._calId); - var beforeShow = inst._get('beforeShow'); - extendRemove(inst._settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); - $.datepicker._hideDatepicker(null, ''); - $.datepicker._lastInput = input; - inst._setDateFromField(input); - if ($.datepicker._inDialog) // hide cursor - input.value = ''; - if (!$.datepicker._pos) { // position below input - $.datepicker._pos = $.datepicker._findPos(input); - $.datepicker._pos[1] += input.offsetHeight; // add the height - } - var isFixed = false; - $(input).parents().each(function() { - isFixed |= $(this).css('position') == 'fixed'; - return !isFixed; - }); - if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled - $.datepicker._pos[0] -= document.documentElement.scrollLeft; - $.datepicker._pos[1] -= document.documentElement.scrollTop; - } - var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; - $.datepicker._pos = null; - inst._rangeStart = null; - // determine sizing offscreen - inst._datepickerDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); - $.datepicker._updateDatepicker(inst); - // fix width for dynamic number of date pickers - inst._datepickerDiv.width(inst._getNumberOfMonths()[1] * - $('.ui-datepicker', inst._datepickerDiv[0])[0].offsetWidth); - // and adjust position before showing - offset = $.datepicker._checkOffset(inst, offset, isFixed); - inst._datepickerDiv.css({position: ($.datepicker._inDialog && $.blockUI ? - 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', - left: offset.left + 'px', top: offset.top + 'px'}); - if (!inst._inline) { - var showAnim = inst._get('showAnim') || 'show'; - var speed = inst._get('speed'); - var postProcess = function() { - $.datepicker._datepickerShowing = true; - if ($.browser.msie && parseInt($.browser.version) < 7) // fix IE < 7 select problems - $('iframe.ui-datepicker-cover').css({width: inst._datepickerDiv.width() + 4, - height: inst._datepickerDiv.height() + 4}); - }; - inst._datepickerDiv[showAnim](speed, postProcess); - if (speed == '') - postProcess(); - if (inst._input[0].type != 'hidden') - inst._input[0].focus(); - $.datepicker._curInst = inst; - } - }, - - /* Generate the date picker content. */ - _updateDatepicker: function(inst) { - var dims = {width: inst._datepickerDiv.width() + 4, - height: inst._datepickerDiv.height() + 4}; - inst._datepickerDiv.empty().append(inst._generateDatepicker()). - find('iframe.ui-datepicker-cover'). - css({width: dims.width, height: dims.height}); - var numMonths = inst._getNumberOfMonths(); - if (numMonths[0] != 1 || numMonths[1] != 1) - inst._datepickerDiv.addClass('ui-datepicker-multi'); - else - inst._datepickerDiv.removeClass('ui-datepicker-multi'); - - if (inst._get('isRTL')) - inst._datepickerDiv.addClass('ui-datepicker-rtl'); - else - inst._datepickerDiv.removeClass('ui-datepicker-rtl'); - - if (inst._input && inst._input[0].type != 'hidden') - $(inst._input[0]).focus(); - }, - - /* Check positioning to remain on screen. */ - _checkOffset: function(inst, offset, isFixed) { - var pos = inst._input ? $.datepicker._findPos(inst._input[0]) : null; - var browserWidth = window.innerWidth || document.documentElement.clientWidth; - var browserHeight = window.innerHeight || document.documentElement.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - // reposition date picker horizontally if outside the browser window - if ((offset.left + inst._datepickerDiv.width() - scrollX) > browserWidth) - offset.left = Math.max((isFixed ? 0 : scrollX), - pos[0] + (inst._input ? inst._input.width() : 0) - (isFixed ? scrollX : 0) - inst._datepickerDiv.width() - - (isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0)); - else - offset.left -= (isFixed ? scrollX : 0); - // reposition date picker vertically if outside the browser window - if ((offset.top + inst._datepickerDiv.height() - scrollY) > browserHeight) - offset.top = Math.max((isFixed ? 0 : scrollY), - pos[1] - (isFixed ? scrollY : 0) - (this._inDialog ? 0 : inst._datepickerDiv.height()) - - (isFixed && $.browser.opera ? document.documentElement.scrollTop : 0)); - else - offset.top -= (isFixed ? scrollY : 0); - return offset; - }, - - /* Find an object's position on the screen. */ - _findPos: function(obj) { - while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { - obj = obj.nextSibling; - } - var position = $(obj).offset(); - return [position.left, position.top]; - }, - - /* Hide the date picker from view. - @param input element - the input field attached to the date picker - @param speed string - the speed at which to close the date picker */ - _hideDatepicker: function(input, speed) { - var inst = this._curInst; - if (!inst) - return; - var rangeSelect = inst._get('rangeSelect'); - if (rangeSelect && this._stayOpen) - this._selectDate(inst, inst._formatDate( - inst._currentDay, inst._currentMonth, inst._currentYear)); - this._stayOpen = false; - if (this._datepickerShowing) { - speed = (speed != null ? speed : inst._get('speed')); - var showAnim = inst._get('showAnim'); - inst._datepickerDiv[(showAnim == 'slideDown' ? 'slideUp' : - (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))](speed, function() { - $.datepicker._tidyDialog(inst); - }); - if (speed == '') - this._tidyDialog(inst); - var onClose = inst._get('onClose'); - if (onClose) - onClose.apply((inst._input ? inst._input[0] : null), - [inst._getDate(), inst]); // trigger custom callback - this._datepickerShowing = false; - this._lastInput = null; - inst._settings.prompt = null; - if (this._inDialog) { - this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); - if ($.blockUI) { - $.unblockUI(); - $('body').append(this._datepickerDiv); - } - } - this._inDialog = false; - } - this._curInst = null; - }, - - /* Tidy up after a dialog display. */ - _tidyDialog: function(inst) { - inst._datepickerDiv.removeClass(this._dialogClass).unbind('.ui-datepicker'); - $('.' + this._promptClass, inst._datepickerDiv).remove(); - }, - - /* Close date picker if clicked elsewhere. */ - _checkExternalClick: function(event) { - if (!$.datepicker._curInst) - return; - var $target = $(event.target); - if (($target.parents('#' + $.datepicker._mainDivId).length == 0) && - !$target.hasClass($.datepicker.markerClassName) && - !$target.hasClass($.datepicker._triggerClass) && - $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) - $.datepicker._hideDatepicker(null, ''); - }, - - /* Adjust one of the date sub-fields. */ - _adjustDate: function(id, offset, period) { - var inst = this._getInst(id); - inst._adjustDate(offset, period); - this._updateDatepicker(inst); - }, - - /* Action for current link. */ - _gotoToday: function(id) { - var date = new Date(); - var inst = this._getInst(id); - inst._selectedDay = date.getDate(); - inst._drawMonth = inst._selectedMonth = date.getMonth(); - inst._drawYear = inst._selectedYear = date.getFullYear(); - this._adjustDate(inst); - inst._notifyChange(); - }, - - /* Action for selecting a new month/year. */ - _selectMonthYear: function(id, select, period) { - var inst = this._getInst(id); - inst._selectingMonthYear = false; - inst[period == 'M' ? '_drawMonth' : '_drawYear'] = - select.options[select.selectedIndex].value - 0; - this._adjustDate(inst); - inst._notifyChange(); - }, - - /* Restore input focus after not changing month/year. */ - _clickMonthYear: function(id) { - var inst = this._getInst(id); - if (inst._input && inst._selectingMonthYear && !$.browser.msie) - inst._input[0].focus(); - inst._selectingMonthYear = !inst._selectingMonthYear; - }, - - /* Action for changing the first week day. */ - _changeFirstDay: function(id, day) { - var inst = this._getInst(id); - inst._settings.firstDay = day; - this._updateDatepicker(inst); - }, - - /* Action for selecting a day. */ - _selectDay: function(id, month, year, td) { - if ($(td).hasClass(this._unselectableClass)) - return; - var inst = this._getInst(id); - var rangeSelect = inst._get('rangeSelect'); - if (rangeSelect) { - this._stayOpen = !this._stayOpen; - if (this._stayOpen) { - $('.ui-datepicker td').removeClass(this._currentClass); - $(td).addClass(this._currentClass); - } - } - inst._selectedDay = inst._currentDay = $('a', td).html(); - inst._selectedMonth = inst._currentMonth = month; - inst._selectedYear = inst._currentYear = year; - if (this._stayOpen) { - inst._endDay = inst._endMonth = inst._endYear = null; - } - else if (rangeSelect) { - inst._endDay = inst._currentDay; - inst._endMonth = inst._currentMonth; - inst._endYear = inst._currentYear; - } - this._selectDate(id, inst._formatDate( - inst._currentDay, inst._currentMonth, inst._currentYear)); - if (this._stayOpen) { - inst._rangeStart = new Date(inst._currentYear, inst._currentMonth, inst._currentDay); - this._updateDatepicker(inst); - } - else if (rangeSelect) { - inst._selectedDay = inst._currentDay = inst._rangeStart.getDate(); - inst._selectedMonth = inst._currentMonth = inst._rangeStart.getMonth(); - inst._selectedYear = inst._currentYear = inst._rangeStart.getFullYear(); - inst._rangeStart = null; - if (inst._inline) - this._updateDatepicker(inst); - } - }, - - /* Erase the input field and hide the date picker. */ - _clearDate: function(id) { - var inst = this._getInst(id); - if (inst._get('mandatory')) - return; - this._stayOpen = false; - inst._endDay = inst._endMonth = inst._endYear = inst._rangeStart = null; - this._selectDate(inst, ''); - }, - - /* Update the input field with the selected date. */ - _selectDate: function(id, dateStr) { - var inst = this._getInst(id); - dateStr = (dateStr != null ? dateStr : inst._formatDate()); - if (inst._get('rangeSelect') && dateStr) - dateStr = (inst._rangeStart ? inst._formatDate(inst._rangeStart) : - dateStr) + inst._get('rangeSeparator') + dateStr; - if (inst._input) - inst._input.val(dateStr); - this._updateAlternate(inst); - var onSelect = inst._get('onSelect'); - if (onSelect) - onSelect.apply((inst._input ? inst._input[0] : null), [dateStr, inst]); // trigger custom callback - else if (inst._input) - inst._input.trigger('change'); // fire the change event - if (inst._inline) - this._updateDatepicker(inst); - else if (!this._stayOpen) { - this._hideDatepicker(null, inst._get('speed')); - this._lastInput = inst._input[0]; - if (typeof(inst._input[0]) != 'object') - inst._input[0].focus(); // restore focus - this._lastInput = null; - } - }, - - /* Update any alternate field to synchronise with the main field. */ - _updateAlternate: function(inst) { - var altField = inst._get('altField'); - if (altField) { // update alternate field too - var altFormat = inst._get('altFormat'); - var date = inst._getDate(); - dateStr = (isArray(date) ? (!date[0] && !date[1] ? '' : - $.datepicker.formatDate(altFormat, date[0], inst._getFormatConfig()) + - inst._get('rangeSeparator') + $.datepicker.formatDate( - altFormat, date[1] || date[0], inst._getFormatConfig())) : - $.datepicker.formatDate(altFormat, date, inst._getFormatConfig())); - $(altField).each(function() { $(this).val(dateStr); }); - } - }, - - /* Set as beforeShowDay function to prevent selection of weekends. - @param date Date - the date to customise - @return [boolean, string] - is this date selectable?, what is its CSS class? */ - noWeekends: function(date) { - var day = date.getDay(); - return [(day > 0 && day < 6), '']; - }, - - /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. - @param date Date - the date to get the week for - @return number - the number of the week within the year that contains this date */ - iso8601Week: function(date) { - var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), (date.getTimezoneOffset() / -60)); - var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan - var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7 - firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday - if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary - checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year - return $.datepicker.iso8601Week(checkDate); - } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year - firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7; - if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary - checkDate.setDate(checkDate.getDate() + 3); // Generate for next year - return $.datepicker.iso8601Week(checkDate); - } - } - return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date - }, - - /* Provide status text for a particular date. - @param date the date to get the status for - @param inst the current datepicker instance - @return the status display text for this date */ - dateStatus: function(date, inst) { - return $.datepicker.formatDate(inst._get('dateStatus'), date, inst._getFormatConfig()); - }, - - /* Parse a string value into a date object. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - '...' - literal text - '' - single quote - - @param format String - the expected format of the date - @param value String - the date in the above format - @param settings Object - attributes include: - shortYearCutoff Number - the cutoff year for determining the century (optional) - dayNamesShort String[7] - abbreviated names of the days from Sunday (optional) - dayNames String[7] - names of the days from Sunday (optional) - monthNamesShort String[12] - abbreviated names of the months (optional) - monthNames String[12] - names of the months (optional) - @return Date - the extracted date value or null if value is blank */ - parseDate: function (format, value, settings) { - if (format == null || value == null) - throw 'Invalid arguments'; - value = (typeof value == 'object' ? value.toString() : value + ''); - if (value == '') - return null; - var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - var year = -1; - var month = -1; - var day = -1; - var literal = false; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Extract a number from the string value - var getNumber = function(match) { - lookAhead(match); - var size = (match == 'y' ? 4 : 2); - var num = 0; - while (size > 0 && iValue < value.length && - value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') { - num = num * 10 + (value.charAt(iValue++) - 0); - size--; - } - if (size == (match == 'y' ? 4 : 2)) - throw 'Missing number at position ' + iValue; - return num; - }; - // Extract a name from the string value and convert to an index - var getName = function(match, shortNames, longNames) { - var names = (lookAhead(match) ? longNames : shortNames); - var size = 0; - for (var j = 0; j < names.length; j++) - size = Math.max(size, names[j].length); - var name = ''; - var iInit = iValue; - while (size > 0 && iValue < value.length) { - name += value.charAt(iValue++); - for (var i = 0; i < names.length; i++) - if (name == names[i]) - return i + 1; - size--; - } - throw 'Unknown name at position ' + iInit; - }; - // Confirm that a literal character matches the string value - var checkLiteral = function() { - if (value.charAt(iValue) != format.charAt(iFormat)) - throw 'Unexpected literal at position ' + iValue; - iValue++; - }; - var iValue = 0; - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - checkLiteral(); - else - switch (format.charAt(iFormat)) { - case 'd': - day = getNumber('d'); - break; - case 'D': - getName('D', dayNamesShort, dayNames); - break; - case 'm': - month = getNumber('m'); - break; - case 'M': - month = getName('M', monthNamesShort, monthNames); - break; - case 'y': - year = getNumber('y'); - break; - case "'": - if (lookAhead("'")) - checkLiteral(); - else - literal = true; - break; - default: - checkLiteral(); - } - } - if (year < 100) - year += new Date().getFullYear() - new Date().getFullYear() % 100 + - (year <= shortYearCutoff ? 0 : -100); - var date = new Date(year, month - 1, day); - if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) - throw 'Invalid date'; // E.g. 31/02/* - return date; - }, - - /* Format a date object into a string value. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - '...' - literal text - '' - single quote - - @param format String - the desired format of the date - @param date Date - the date value to format - @param settings Object - attributes include: - dayNamesShort String[7] - abbreviated names of the days from Sunday (optional) - dayNames String[7] - names of the days from Sunday (optional) - monthNamesShort String[12] - abbreviated names of the months (optional) - monthNames String[12] - names of the months (optional) - @return String - the date in the above format */ - formatDate: function (format, date, settings) { - if (!date) - return ''; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Format a number, with leading zero if necessary - var formatNumber = function(match, value) { - return (lookAhead(match) && value < 10 ? '0' : '') + value; - }; - // Format a name, short or long as requested - var formatName = function(match, value, shortNames, longNames) { - return (lookAhead(match) ? longNames[value] : shortNames[value]); - }; - var output = ''; - var literal = false; - if (date) - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - output += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': - output += formatNumber('d', date.getDate()); - break; - case 'D': - output += formatName('D', date.getDay(), dayNamesShort, dayNames); - break; - case 'm': - output += formatNumber('m', date.getMonth() + 1); - break; - case 'M': - output += formatName('M', date.getMonth(), monthNamesShort, monthNames); - break; - case 'y': - output += (lookAhead('y') ? date.getFullYear() : - (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); - break; - case "'": - if (lookAhead("'")) - output += "'"; - else - literal = true; - break; - default: - output += format.charAt(iFormat); - } - } - return output; - }, - - /* Extract all possible characters from the date format. */ - _possibleChars: function (format) { - var chars = ''; - var literal = false; - for (var iFormat = 0; iFormat < format.length; iFormat++) - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - chars += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': case 'm': case 'y': - chars += '0123456789'; - break; - case 'D': case 'M': - return null; // Accept anything - case "'": - if (lookAhead("'")) - chars += "'"; - else - literal = true; - break; - default: - chars += format.charAt(iFormat); - } - return chars; - } -}); - -/* Individualised settings for date picker functionality applied to one or more related inputs. - Instances are managed and manipulated through the Datepicker manager. */ -function DatepickerInstance(settings, inline) { - this._id = $.datepicker._register(this); - this._selectedDay = 0; // Current date for selection - this._selectedMonth = 0; // 0-11 - this._selectedYear = 0; // 4-digit year - this._drawMonth = 0; // Current month at start of datepicker - this._drawYear = 0; - this._input = null; // The attached input field - this._inline = inline; // True if showing inline, false if used in a popup - this._datepickerDiv = (!inline ? $.datepicker._datepickerDiv : - $('<div id="' + $.datepicker._mainDivId + '-' + this._id + '" class="ui-datepicker-inline">')); - // customise the date picker object - uses manager defaults if not overridden - this._settings = extendRemove(settings || {}); // clone - if (inline) - this._setDate(this._getDefaultDate()); -} - -$.extend(DatepickerInstance.prototype, { - /* Get a setting value, defaulting if necessary. */ - _get: function(name) { - return this._settings[name] !== undefined ? this._settings[name] : $.datepicker._defaults[name]; - }, - - /* Parse existing date and initialise date picker. */ - _setDateFromField: function(input) { - this._input = $(input); - var dateFormat = this._get('dateFormat'); - var dates = this._input ? this._input.val().split(this._get('rangeSeparator')) : null; - this._endDay = this._endMonth = this._endYear = null; - var date = defaultDate = this._getDefaultDate(); - if (dates.length > 0) { - var settings = this._getFormatConfig(); - if (dates.length > 1) { - date = $.datepicker.parseDate(dateFormat, dates[1], settings) || defaultDate; - this._endDay = date.getDate(); - this._endMonth = date.getMonth(); - this._endYear = date.getFullYear(); - } - try { - date = $.datepicker.parseDate(dateFormat, dates[0], settings) || defaultDate; - } catch (e) { - $.datepicker.log(e); - date = defaultDate; - } - } - this._selectedDay = date.getDate(); - this._drawMonth = this._selectedMonth = date.getMonth(); - this._drawYear = this._selectedYear = date.getFullYear(); - this._currentDay = (dates[0] ? date.getDate() : 0); - this._currentMonth = (dates[0] ? date.getMonth() : 0); - this._currentYear = (dates[0] ? date.getFullYear() : 0); - this._adjustDate(); - }, - - /* Retrieve the default date shown on opening. */ - _getDefaultDate: function() { - var date = this._determineDate('defaultDate', new Date()); - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - date = (minDate && date < minDate ? minDate : date); - date = (maxDate && date > maxDate ? maxDate : date); - return date; - }, - - /* A date may be specified as an exact value or a relative one. */ - _determineDate: function(name, defaultDate) { - var offsetNumeric = function(offset) { - var date = new Date(); - date.setDate(date.getDate() + offset); - return date; - }; - var offsetString = function(offset, getDaysInMonth) { - var date = new Date(); - var year = date.getFullYear(); - var month = date.getMonth(); - var day = date.getDate(); - var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; - var matches = pattern.exec(offset); - while (matches) { - switch (matches[2] || 'd') { - case 'd' : case 'D' : - day += (matches[1] - 0); break; - case 'w' : case 'W' : - day += (matches[1] * 7); break; - case 'm' : case 'M' : - month += (matches[1] - 0); - day = Math.min(day, getDaysInMonth(year, month)); - break; - case 'y': case 'Y' : - year += (matches[1] - 0); - day = Math.min(day, getDaysInMonth(year, month)); - break; - } - matches = pattern.exec(offset); - } - return new Date(year, month, day); - }; - var date = this._get(name); - return (date == null ? defaultDate : - (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : - (typeof date == 'number' ? offsetNumeric(date) : date))); - }, - - /* Set the date(s) directly. */ - _setDate: function(date, endDate) { - this._selectedDay = this._currentDay = date.getDate(); - this._drawMonth = this._selectedMonth = this._currentMonth = date.getMonth(); - this._drawYear = this._selectedYear = this._currentYear = date.getFullYear(); - if (this._get('rangeSelect')) { - if (endDate) { - this._endDay = endDate.getDate(); - this._endMonth = endDate.getMonth(); - this._endYear = endDate.getFullYear(); - } else { - this._endDay = this._currentDay; - this._endMonth = this._currentMonth; - this._endYear = this._currentYear; - } - } - this._adjustDate(); - }, - - /* Retrieve the date(s) directly. */ - _getDate: function() { - var startDate = (!this._currentYear || (this._input && this._input.val() == '') ? null : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - if (this._get('rangeSelect')) { - return [this._rangeStart || startDate, (!this._endYear ? null : - new Date(this._endYear, this._endMonth, this._endDay))]; - } else - return startDate; - }, - - /* Generate the HTML for the current state of the date picker. */ - _generateDatepicker: function() { - var today = new Date(); - today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time - var showStatus = this._get('showStatus'); - var isRTL = this._get('isRTL'); - // build the date picker HTML - var clear = (this._get('mandatory') ? '' : - '<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('clearStatus') || ' ') : '') + '>' + - this._get('clearText') + '</a></div>'); - var controls = '<div class="ui-datepicker-control">' + (isRTL ? '' : clear) + - '<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"' + - (showStatus ? this._addStatus(this._get('closeStatus') || ' ') : '') + '>' + - this._get('closeText') + '</a></div>' + (isRTL ? clear : '') + '</div>'; - var prompt = this._get('prompt'); - var closeAtTop = this._get('closeAtTop'); - var hideIfNoPrevNext = this._get('hideIfNoPrevNext'); - var navigationAsDateFormat = this._get('navigationAsDateFormat'); - var numMonths = this._getNumberOfMonths(); - var stepMonths = this._get('stepMonths'); - var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - var drawMonth = this._drawMonth; - var drawYear = this._drawYear; - if (maxDate) { - var maxDraw = new Date(maxDate.getFullYear(), - maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()); - maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); - while (new Date(drawYear, drawMonth, 1) > maxDraw) { - drawMonth--; - if (drawMonth < 0) { - drawMonth = 11; - drawYear--; - } - } - } - // controls and links - var prevText = this._get('prevText'); - prevText = (!navigationAsDateFormat ? prevText : $.datepicker.formatDate( - prevText, new Date(drawYear, drawMonth - stepMonths, 1), this._getFormatConfig())); - var prev = '<div class="ui-datepicker-prev">' + (this._canAdjustMonth(-1, drawYear, drawMonth) ? - '<a onclick="jQuery.datepicker._adjustDate(' + this._id + ', -' + stepMonths + ', \'M\');"' + - (showStatus ? this._addStatus(this._get('prevStatus') || ' ') : '') + '>' + prevText + '</a>' : - (hideIfNoPrevNext ? '' : '<label>' + prevText + '</label>')) + '</div>'; - var nextText = this._get('nextText'); - nextText = (!navigationAsDateFormat ? nextText : $.datepicker.formatDate( - nextText, new Date(drawYear, drawMonth + stepMonths, 1), this._getFormatConfig())); - var next = '<div class="ui-datepicker-next">' + (this._canAdjustMonth(+1, drawYear, drawMonth) ? - '<a onclick="jQuery.datepicker._adjustDate(' + this._id + ', +' + stepMonths + ', \'M\');"' + - (showStatus ? this._addStatus(this._get('nextStatus') || ' ') : '') + '>' + nextText + '</a>' : - (hideIfNoPrevNext ? '' : '<label>' + nextText + '</label>')) + '</div>'; - var currentText = this._get('currentText'); - currentText = (!navigationAsDateFormat ? currentText: $.datepicker.formatDate( - currentText, today, this._getFormatConfig())); - var html = (prompt ? '<div class="' + $.datepicker._promptClass + '">' + prompt + '</div>' : '') + - (closeAtTop && !this._inline ? controls : '') + - '<div class="ui-datepicker-links">' + (isRTL ? next : prev) + - (this._isInRange(today) ? '<div class="ui-datepicker-current">' + - '<a onclick="jQuery.datepicker._gotoToday(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('currentStatus') || ' ') : '') + '>' + - currentText + '</a></div>' : '') + (isRTL ? prev : next) + '</div>'; - var showWeeks = this._get('showWeeks'); - for (var row = 0; row < numMonths[0]; row++) - for (var col = 0; col < numMonths[1]; col++) { - var selectedDate = new Date(drawYear, drawMonth, this._selectedDay); - html += '<div class="ui-datepicker-one-month' + (col == 0 ? ' ui-datepicker-new-row' : '') + '">' + - this._generateMonthYearHeader(drawMonth, drawYear, minDate, maxDate, - selectedDate, row > 0 || col > 0) + // draw month headers - '<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead>' + - '<tr class="ui-datepicker-title-row">' + - (showWeeks ? '<td>' + this._get('weekHeader') + '</td>' : ''); - var firstDay = this._get('firstDay'); - var changeFirstDay = this._get('changeFirstDay'); - var dayNames = this._get('dayNames'); - var dayNamesShort = this._get('dayNamesShort'); - var dayNamesMin = this._get('dayNamesMin'); - for (var dow = 0; dow < 7; dow++) { // days of the week - var day = (dow + firstDay) % 7; - var status = this._get('dayStatus') || ' '; - status = (status.indexOf('DD') > -1 ? status.replace(/DD/, dayNames[day]) : - status.replace(/D/, dayNamesShort[day])); - html += '<td' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end-cell"' : '') + '>' + - (!changeFirstDay ? '<span' : - '<a onclick="jQuery.datepicker._changeFirstDay(' + this._id + ', ' + day + ');"') + - (showStatus ? this._addStatus(status) : '') + ' title="' + dayNames[day] + '">' + - dayNamesMin[day] + (changeFirstDay ? '</a>' : '</span>') + '</td>'; - } - html += '</tr></thead><tbody>'; - var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); - if (drawYear == this._selectedYear && drawMonth == this._selectedMonth) - this._selectedDay = Math.min(this._selectedDay, daysInMonth); - var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; - var currentDate = (!this._currentDay ? new Date(9999, 9, 9) : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - var endDate = this._endDay ? new Date(this._endYear, this._endMonth, this._endDay) : currentDate; - var printDate = new Date(drawYear, drawMonth, 1 - leadDays); - var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate - var beforeShowDay = this._get('beforeShowDay'); - var highlightWeek = this._get('highlightWeek'); - var showOtherMonths = this._get('showOtherMonths'); - var calculateWeek = this._get('calculateWeek') || $.datepicker.iso8601Week; - var dateStatus = this._get('statusForDate') || $.datepicker.dateStatus; - for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows - html += '<tr class="ui-datepicker-days-row">' + - (showWeeks ? '<td class="ui-datepicker-week-col">' + calculateWeek(printDate) + '</td>' : ''); - for (var dow = 0; dow < 7; dow++) { // create date picker days - var daySettings = (beforeShowDay ? - beforeShowDay.apply((this._input ? this._input[0] : null), [printDate]) : [true, '']); - var otherMonth = (printDate.getMonth() != drawMonth); - var unselectable = otherMonth || !daySettings[0] || - (minDate && printDate < minDate) || (maxDate && printDate > maxDate); - html += '<td class="ui-datepicker-days-cell' + - ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end-cell' : '') + // highlight weekends - (otherMonth ? ' ui-datepicker-otherMonth' : '') + // highlight days from other months - (printDate.getTime() == selectedDate.getTime() && drawMonth == this._selectedMonth ? - ' ui-datepicker-days-cell-over' : '') + // highlight selected day - (unselectable ? ' ' + $.datepicker._unselectableClass : '') + // highlight unselectable days - (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates - (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range - ' ' + $.datepicker._currentClass : '') + // highlight selected day - (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different) - ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title - (unselectable ? (highlightWeek ? ' onmouseover="jQuery(this).parent().addClass(\'ui-datepicker-week-over\');"' + // highlight selection week - ' onmouseout="jQuery(this).parent().removeClass(\'ui-datepicker-week-over\');"' : '') : // unhighlight selection week - ' onmouseover="jQuery(this).addClass(\'ui-datepicker-days-cell-over\')' + // highlight selection - (highlightWeek ? '.parent().addClass(\'ui-datepicker-week-over\')' : '') + ';' + // highlight selection week - (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + - this._id + '\').html(\'' + (dateStatus.apply((this._input ? this._input[0] : null), - [printDate, this]) || ' ') +'\');') + '"' + - ' onmouseout="jQuery(this).removeClass(\'ui-datepicker-days-cell-over\')' + // unhighlight selection - (highlightWeek ? '.parent().removeClass(\'ui-datepicker-week-over\')' : '') + ';' + // unhighlight selection week - (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + - this._id + '\').html(\' \');') + '" onclick="jQuery.datepicker._selectDay(' + - this._id + ',' + drawMonth + ',' + drawYear + ', this);"') + '>' + // actions - (otherMonth ? (showOtherMonths ? printDate.getDate() : ' ') : // display for other months - (unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month - printDate.setDate(printDate.getDate() + 1); - } - html += '</tr>'; - } - drawMonth++; - if (drawMonth > 11) { - drawMonth = 0; - drawYear++; - } - html += '</tbody></table></div>'; - } - html += (showStatus ? '<div style="clear: both;"></div><div id="ui-datepicker-status-' + this._id + - '" class="ui-datepicker-status">' + (this._get('initStatus') || ' ') + '</div>' : '') + - (!closeAtTop && !this._inline ? controls : '') + - '<div style="clear: both;"></div>' + - ($.browser.msie && parseInt($.browser.version) < 7 && !this._inline ? - '<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>' : ''); - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(drawMonth, drawYear, minDate, maxDate, selectedDate, secondary) { - minDate = (this._rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate); - var showStatus = this._get('showStatus'); - var html = '<div class="ui-datepicker-header">'; - // month selection - var monthNames = this._get('monthNames'); - if (secondary || !this._get('changeMonth')) - html += monthNames[drawMonth] + ' '; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - html += '<select class="ui-datepicker-new-month" ' + - 'onchange="jQuery.datepicker._selectMonthYear(' + this._id + ', this, \'M\');" ' + - 'onclick="jQuery.datepicker._clickMonthYear(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('monthStatus') || ' ') : '') + '>'; - for (var month = 0; month < 12; month++) { - if ((!inMinYear || month >= minDate.getMonth()) && - (!inMaxYear || month <= maxDate.getMonth())) - html += '<option value="' + month + '"' + - (month == drawMonth ? ' selected="selected"' : '') + - '>' + monthNames[month] + '</option>'; - } - html += '</select>'; - } - // year selection - if (secondary || !this._get('changeYear')) - html += drawYear; - else { - // determine range of years to display - var years = this._get('yearRange').split(':'); - var year = 0; - var endYear = 0; - if (years.length != 2) { - year = drawYear - 10; - endYear = drawYear + 10; - } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') { - year = endYear = new Date().getFullYear(); - year += parseInt(years[0], 10); - endYear += parseInt(years[1], 10); - } else { - year = parseInt(years[0], 10); - endYear = parseInt(years[1], 10); - } - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - html += '<select class="ui-datepicker-new-year" ' + - 'onchange="jQuery.datepicker._selectMonthYear(' + this._id + ', this, \'Y\');" ' + - 'onclick="jQuery.datepicker._clickMonthYear(' + this._id + ');"' + - (showStatus ? this._addStatus(this._get('yearStatus') || ' ') : '') + '>'; - for (; year <= endYear; year++) { - html += '<option value="' + year + '"' + - (year == drawYear ? ' selected="selected"' : '') + - '>' + year + '</option>'; - } - html += '</select>'; - } - html += '</div>'; // Close datepicker_header - return html; - }, - - /* Provide code to set and clear the status panel. */ - _addStatus: function(text) { - return ' onmouseover="jQuery(\'#ui-datepicker-status-' + this._id + '\').html(\'' + text + '\');" ' + - 'onmouseout="jQuery(\'#ui-datepicker-status-' + this._id + '\').html(\' \');"'; - }, - - /* Adjust one of the date sub-fields. */ - _adjustDate: function(offset, period) { - var year = this._drawYear + (period == 'Y' ? offset : 0); - var month = this._drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(this._selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = new Date(year, month, day); - // ensure it is within the bounds set - var minDate = this._getMinMaxDate('min', true); - var maxDate = this._getMinMaxDate('max'); - date = (minDate && date < minDate ? minDate : date); - date = (maxDate && date > maxDate ? maxDate : date); - this._selectedDay = date.getDate(); - this._drawMonth = this._selectedMonth = date.getMonth(); - this._drawYear = this._selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(); - }, - - /* Notify change of month/year. */ - _notifyChange: function() { - var onChange = this._get('onChangeMonthYear'); - if (onChange) - onChange.apply((this._input ? this._input[0] : null), - [new Date(this._selectedYear, this._selectedMonth, 1), this]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function() { - var numMonths = this._get('numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */ - _getMinMaxDate: function(minMax, checkRange) { - var date = this._determineDate(minMax + 'Date', null); - if (date) { - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - } - return (!checkRange || !this._rangeStart ? date : - (!date || this._rangeStart > date ? this._rangeStart : date)); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(); - var date = new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(date) { - // during range selection, use minimum of selected date and range start - var newMinDate = (!this._rangeStart ? null : - new Date(this._selectedYear, this._selectedMonth, this._selectedDay)); - newMinDate = (newMinDate && this._rangeStart < newMinDate ? this._rangeStart : newMinDate); - var minDate = newMinDate || this._getMinMaxDate('min'); - var maxDate = this._getMinMaxDate('max'); - return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate)); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function() { - var shortYearCutoff = this._get('shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get('dayNamesShort'), dayNames: this._get('dayNames'), - monthNamesShort: this._get('monthNamesShort'), monthNames: this._get('monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(day, month, year) { - if (!day) { - this._currentDay = this._selectedDay; - this._currentMonth = this._selectedMonth; - this._currentYear = this._selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : new Date(year, month, day)) : - new Date(this._currentYear, this._currentMonth, this._currentDay)); - return $.datepicker.formatDate(this._get('dateFormat'), date, this._getFormatConfig()); - } -}); - -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; - -/* Invoke the datepicker functionality. - @param options String - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) - return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance - -/* Initialise the date picker. */ -$(document).ready(function() { - $(document.body).append($.datepicker._datepickerDiv). - mousedown($.datepicker._checkExternalClick); -}); - -})(jQuery); -/* - * jQuery UI Dialog - * - * Copyright (c) 2008 Richard D. Worth (rdworth.org) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * ui.core.js - * ui.draggable.js - * ui.resizable.js - */ -(function($) { - -var setDataSwitch = { - dragStart: "start.draggable", - drag: "drag.draggable", - dragStop: "stop.draggable", - maxHeight: "maxHeight.resizable", - minHeight: "minHeight.resizable", - maxWidth: "maxWidth.resizable", - minWidth: "minWidth.resizable", - resizeStart: "start.resizable", - resize: "drag.resizable", - resizeStop: "stop.resizable" -}; - -$.widget("ui.dialog", { - init: function() { - var self = this, - options = this.options, - resizeHandles = typeof options.resizable == 'string' - ? options.resizable - : 'n,e,s,w,se,sw,ne,nw', - - uiDialogContent = this.element - .addClass('ui-dialog-content') - .wrap('<div/>') - .wrap('<div/>'), - - uiDialogContainer = (this.uiDialogContainer = uiDialogContent.parent() - .addClass('ui-dialog-container') - .css({position: 'relative', width: '100%', height: '100%'})), - - title = options.title || uiDialogContent.attr('title') || '', - uiDialogTitlebar = (this.uiDialogTitlebar = - $('<div class="ui-dialog-titlebar"/>')) - .append('<span class="ui-dialog-title">' + title + '</span>') - .append('<a href="#" class="ui-dialog-titlebar-close"><span>X</span></a>') - .prependTo(uiDialogContainer), - - uiDialog = (this.uiDialog = uiDialogContainer.parent()) - .appendTo(document.body) - .hide() - .addClass('ui-dialog') - .addClass(options.dialogClass) - // add content classes to dialog - // to inherit theme at top level of element - .addClass(uiDialogContent.attr('className')) - .removeClass('ui-dialog-content') - .css({ - position: 'absolute', - width: options.width, - height: options.height, - overflow: 'hidden', - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - // setting outline to 0 prevents a border on focus in Mozilla - .attr('tabIndex', -1).css('outline', 0).keydown(function(ev) { - if (options.closeOnEscape) { - var ESC = 27; - (ev.keyCode && ev.keyCode == ESC && self.close()); - } - }) - .mousedown(function() { - self.moveToTop(); - }), - - uiDialogButtonPane = (this.uiDialogButtonPane = $('<div/>')) - .addClass('ui-dialog-buttonpane') - .appendTo(uiDialog); - - this.uiDialogTitlebarClose = $('.ui-dialog-titlebar-close', uiDialogTitlebar) - .hover( - function() { - $(this).addClass('ui-dialog-titlebar-close-hover'); - }, - function() { - $(this).removeClass('ui-dialog-titlebar-close-hover'); - } - ) - .mousedown(function(ev) { - ev.stopPropagation(); - }) - .click(function() { - self.close(); - return false; - }); - - if ($.fn.draggable) { - uiDialog.draggable({ - helper: options.dragHelper, - handle: '.ui-dialog-titlebar', - start: function(e, ui) { - self.moveToTop(); - (options.dragStart && options.dragStart.apply(self.element[0], arguments)); - }, - drag: function(e, ui) { - (options.drag && options.drag.apply(self.element[0], arguments)); - }, - stop: function(e, ui) { - (options.dragStop && options.dragStop.apply(self.element[0], arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.draggable || uiDialog.draggable('disable')); - } - - if ($.fn.resizable) { - uiDialog.resizable({ - proxy: options.resizeHelper, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: options.minHeight, - start: function() { - (options.resizeStart && options.resizeStart.apply(self.element[0], arguments)); - }, - resize: function(e, ui) { - (options.autoResize && self.size.apply(self)); - (options.resize && options.resize.apply(self.element[0], arguments)); - }, - handles: resizeHandles, - stop: function(e, ui) { - (options.autoResize && self.size.apply(self)); - (options.resizeStop && options.resizeStop.apply(self.element[0], arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.resizable || uiDialog.resizable('disable')); - } - - this.createButtons(options.buttons); - this.isOpen = false; - - (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); - (options.autoOpen && this.open()); - }, - - setData: function(key, value){ - (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); - switch (key) { - case "buttons": - this.createButtons(value); - break; - case "draggable": - this.uiDialog.draggable(value ? 'enable' : 'disable'); - break; - case "height": - this.uiDialog.height(value); - break; - case "position": - this.position(value); - break; - case "resizable": - (typeof value == 'string' && this.uiDialog.data('handles.resizable', value)); - this.uiDialog.resizable(value ? 'enable' : 'disable'); - break; - case "title": - $(".ui-dialog-title", this.uiDialogTitlebar).text(value); - break; - case "width": - this.uiDialog.width(value); - break; - } - - $.widget.prototype.setData.apply(this, arguments); - }, - - position: function(pos) { - var wnd = $(window), doc = $(document), - pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), - minTop = pTop; - - if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { - pos = [ - pos == 'right' || pos == 'left' ? pos : 'center', - pos == 'top' || pos == 'bottom' ? pos : 'middle' - ]; - } - if (pos.constructor != Array) { - pos = ['center', 'middle']; - } - if (pos[0].constructor == Number) { - pLeft += pos[0]; - } else { - switch (pos[0]) { - case 'left': - pLeft += 0; - break; - case 'right': - pLeft += wnd.width() - this.uiDialog.width(); - break; - default: - case 'center': - pLeft += (wnd.width() - this.uiDialog.width()) / 2; - } - } - if (pos[1].constructor == Number) { - pTop += pos[1]; - } else { - switch (pos[1]) { - case 'top': - pTop += 0; - break; - case 'bottom': - pTop += wnd.height() - this.uiDialog.height(); - break; - default: - case 'middle': - pTop += (wnd.height() - this.uiDialog.height()) / 2; - } - } - - // prevent the dialog from being too high (make sure the titlebar - // is accessible) - pTop = Math.max(pTop, minTop); - this.uiDialog.css({top: pTop, left: pLeft}); - }, - - size: function() { - var container = this.uiDialogContainer, - titlebar = this.uiDialogTitlebar, - content = this.element, - tbMargin = parseInt(content.css('margin-top')) + parseInt(content.css('margin-bottom')), - lrMargin = parseInt(content.css('margin-left')) + parseInt(content.css('margin-right')); - content.height(container.height() - titlebar.outerHeight() - tbMargin); - content.width(container.width() - lrMargin); - }, - - open: function() { - if (this.isOpen) { return; } - - this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null; - this.uiDialog.appendTo('body'); - this.position(this.options.position); - this.uiDialog.show(this.options.show); - this.options.autoResize && this.size(); - this.moveToTop(true); - - // CALLBACK: open - var openEV = null; - var openUI = { - options: this.options - }; - this.uiDialogTitlebarClose.focus(); - this.element.triggerHandler("dialogopen", [openEV, openUI], this.options.open); - - this.isOpen = true; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - moveToTop: function(force) { - if ((this.options.modal && !force) - || (!this.options.stack && !this.options.modal)) { return; } - - var maxZ = this.options.zIndex, options = this.options; - $('.ui-dialog:visible').each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); - }); - (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); - this.uiDialog.css('z-index', ++maxZ); - }, - - close: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(this.options.hide); - - // CALLBACK: close - var closeEV = null; - var closeUI = { - options: this.options - }; - this.element.triggerHandler("dialogclose", [closeEV, closeUI], this.options.close); - $.ui.dialog.overlay.resize(); - - this.isOpen = false; - }, - - destroy: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(); - this.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content') - .hide().appendTo('body'); - this.uiDialog.remove(); - }, - - createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = this.uiDialogButtonPane; - - // remove any existing buttons - uiDialogButtonPane.empty().hide(); - - $.each(buttons, function() { return !(hasButtons = true); }); - if (hasButtons) { - uiDialogButtonPane.show(); - $.each(buttons, function(name, fn) { - $('<button/>') - .text(name) - .click(function() { fn.apply(self.element[0], arguments); }) - .appendTo(uiDialogButtonPane); - }); - } - } -}); - -$.extend($.ui.dialog, { - defaults: { - autoOpen: true, - autoResize: true, - bgiframe: false, - buttons: {}, - closeOnEscape: true, - draggable: true, - height: 200, - minHeight: 100, - minWidth: 150, - modal: false, - overlay: {}, - position: 'center', - resizable: true, - stack: true, - width: 300, - zIndex: 1000 - }, - - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); - } -}); - -$.extend($.ui.dialog.overlay, { - instances: [], - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(e) { return e + '.dialog-overlay'; }).join(' '), - create: function(dialog) { - if (this.instances.length === 0) { - // prevent use of anchors and inputs - // we use a setTimeout in case the overlay is created from an - // event that we're going to be cancelling (see #2804) - setTimeout(function() { - $('a, :input').bind($.ui.dialog.overlay.events, function() { - // allow use of the element if inside a dialog and - // - there are no modal dialogs - // - there are modal dialogs, but we are in front of the topmost modal - var allow = false; - var $dialog = $(this).parents('.ui-dialog'); - if ($dialog.length) { - var $overlays = $('.ui-dialog-overlay'); - if ($overlays.length) { - var maxZ = parseInt($overlays.css('z-index'), 10); - $overlays.each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); - }); - allow = parseInt($dialog.css('z-index'), 10) > maxZ; - } else { - allow = true; - } - } - return allow; - }); - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(e) { - var ESC = 27; - (e.keyCode && e.keyCode == ESC && dialog.close()); - }); - - // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); - } - - var $el = $('<div/>').appendTo(document.body) - .addClass('ui-dialog-overlay').css($.extend({ - borderWidth: 0, margin: 0, padding: 0, - position: 'absolute', top: 0, left: 0, - width: this.width(), - height: this.height() - }, dialog.options.overlay)); - - (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); - - this.instances.push($el); - return $el; - }, - - destroy: function($el) { - this.instances.splice($.inArray(this.instances, $el), 1); - - if (this.instances.length === 0) { - $('a, :input').add([document, window]).unbind('.dialog-overlay'); - } - - $el.remove(); - }, - - height: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - var offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; - } else { - return scrollHeight + 'px'; - } - } else { - return $(document).height() + 'px'; - } - }, - - width: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - var offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; - } else { - return scrollWidth + 'px'; - } - } else { - return $(document).width() + 'px'; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * This is handled by shrinking the overlay before setting it - * to the full document size. - */ - var $overlays = $([]); - $.each($.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add(this); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend($.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); - } -}); - -})(jQuery); -/* - * jQuery UI Slider - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * ui.core.js - */ -(function($) { - -$.fn.unwrap = $.fn.unwrap || function(expr) { - return this.each(function(){ - $(this).parents(expr).eq(0).after(this).remove(); - }); -}; - -$.widget("ui.slider", { - plugins: {}, - ui: function(e) { - return { - options: this.options, - handle: this.currentHandle, - value: this.options.axis != "both" || !this.options.axis ? Math.round(this.value(null,this.options.axis == "vertical" ? "y" : "x")) : { - x: Math.round(this.value(null,"x")), - y: Math.round(this.value(null,"y")) - }, - range: this.getRange() - }; - }, - propagate: function(n,e) { - $.ui.plugin.call(this, n, [e, this.ui()]); - this.element.triggerHandler(n == "slide" ? n : "slide"+n, [e, this.ui()], this.options[n]); - }, - destroy: function() { - - this.element - .removeClass("ui-slider ui-slider-disabled") - .removeData("slider") - .unbind(".slider"); - - if(this.handle && this.handle.length) { - this.handle - .unwrap("a"); - this.handle.each(function() { - $(this).data("mouse").mouseDestroy(); - }); - } - - this.generated && this.generated.remove(); - - }, - setData: function(key, value) { - $.widget.prototype.setData.apply(this, arguments); - if (/min|max|steps/.test(key)) { - this.initBoundaries(); - } - - if(key == "range") { - value ? this.handle.length == 2 && this.createRange() : this.removeRange(); - } - - }, - - init: function() { - - var self = this; - this.element.addClass("ui-slider"); - this.initBoundaries(); - - // Initialize mouse and key events for interaction - this.handle = $(this.options.handle, this.element); - if (!this.handle.length) { - self.handle = self.generated = $(self.options.handles || [0]).map(function() { - var handle = $("<div/>").addClass("ui-slider-handle").appendTo(self.element); - if (this.id) - handle.attr("id", this.id); - return handle[0]; - }); - } - - - var handleclass = function(el) { - this.element = $(el); - this.element.data("mouse", this); - this.options = self.options; - - this.element.bind("mousedown", function() { - if(self.currentHandle) this.blur(self.currentHandle); - self.focus(this,1); - }); - - this.mouseInit(); - }; - - $.extend(handleclass.prototype, $.ui.mouse, { - mouseStart: function(e) { return self.start.call(self, e, this.element[0]); }, - mouseStop: function(e) { return self.stop.call(self, e, this.element[0]); }, - mouseDrag: function(e) { return self.drag.call(self, e, this.element[0]); }, - mouseCapture: function() { return true; }, - trigger: function(e) { this.mouseDown(e); } - }); - - - $(this.handle) - .each(function() { - new handleclass(this); - }) - .wrap('<a href="javascript:void(0)" style="cursor:default;"></a>') - .parent() - .bind('focus', function(e) { self.focus(this.firstChild); }) - .bind('blur', function(e) { self.blur(this.firstChild); }) - .bind('keydown', function(e) { if(!self.options.noKeyboard) self.keydown(e.keyCode, this.firstChild); }) - ; - - // Bind the click to the slider itself - this.element.bind('mousedown.slider', function(e) { - self.click.apply(self, [e]); - self.currentHandle.data("mouse").trigger(e); - self.firstValue = self.firstValue + 1; //This is for always triggering the change event - }); - - // Move the first handle to the startValue - $.each(this.options.handles || [], function(index, handle) { - self.moveTo(handle.start, index, true); - }); - if (!isNaN(this.options.startValue)) - this.moveTo(this.options.startValue, 0, true); - - this.previousHandle = $(this.handle[0]); //set the previous handle to the first to allow clicking before selecting the handle - if(this.handle.length == 2 && this.options.range) this.createRange(); - }, - initBoundaries: function() { - - var element = this.element[0], o = this.options; - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - $.extend(o, { - axis: o.axis || (element.offsetWidth < element.offsetHeight ? 'vertical' : 'horizontal'), - max: !isNaN(parseInt(o.max,10)) ? { x: parseInt(o.max, 10), y: parseInt(o.max, 10) } : ({ x: o.max && o.max.x || 100, y: o.max && o.max.y || 100 }), - min: !isNaN(parseInt(o.min,10)) ? { x: parseInt(o.min, 10), y: parseInt(o.min, 10) } : ({ x: o.min && o.min.x || 0, y: o.min && o.min.y || 0 }) - }); - //Prepare the real maxValue - o.realMax = { - x: o.max.x - o.min.x, - y: o.max.y - o.min.y - }; - //Calculate stepping based on steps - o.stepping = { - x: o.stepping && o.stepping.x || parseInt(o.stepping, 10) || (o.steps ? o.realMax.x/(o.steps.x || parseInt(o.steps, 10) || o.realMax.x) : 0), - y: o.stepping && o.stepping.y || parseInt(o.stepping, 10) || (o.steps ? o.realMax.y/(o.steps.y || parseInt(o.steps, 10) || o.realMax.y) : 0) - }; - }, - - - keydown: function(keyCode, handle) { - if(/(37|38|39|40)/.test(keyCode)) { - this.moveTo({ - x: /(37|39)/.test(keyCode) ? (keyCode == 37 ? '-' : '+') + '=' + this.oneStep("x") : 0, - y: /(38|40)/.test(keyCode) ? (keyCode == 38 ? '-' : '+') + '=' + this.oneStep("y") : 0 - }, handle); - } - }, - focus: function(handle,hard) { - this.currentHandle = $(handle).addClass('ui-slider-handle-active'); - if (hard) - this.currentHandle.parent()[0].focus(); - }, - blur: function(handle) { - $(handle).removeClass('ui-slider-handle-active'); - if(this.currentHandle && this.currentHandle[0] == handle) { this.previousHandle = this.currentHandle; this.currentHandle = null; }; - }, - click: function(e) { - // This method is only used if: - // - The user didn't click a handle - // - The Slider is not disabled - // - There is a current, or previous selected handle (otherwise we wouldn't know which one to move) - - var pointer = [e.pageX,e.pageY]; - - var clickedHandle = false; - this.handle.each(function() { - if(this == e.target) - clickedHandle = true; - }); - if (clickedHandle || this.options.disabled || !(this.currentHandle || this.previousHandle)) - return; - - // If a previous handle was focussed, focus it again - if (!this.currentHandle && this.previousHandle) - this.focus(this.previousHandle, true); - - // propagate only for distance > 0, otherwise propagation is done my drag - this.offset = this.element.offset(); - - this.moveTo({ - y: this.convertValue(e.pageY - this.offset.top - this.currentHandle[0].offsetHeight/2, "y"), - x: this.convertValue(e.pageX - this.offset.left - this.currentHandle[0].offsetWidth/2, "x") - }, null, !this.options.distance); - }, - - - - createRange: function() { - if(this.rangeElement) return; - this.rangeElement = $('<div></div>') - .addClass('ui-slider-range') - .css({ position: 'absolute' }) - .appendTo(this.element); - this.updateRange(); - }, - removeRange: function() { - this.rangeElement.remove(); - this.rangeElement = null; - }, - updateRange: function() { - var prop = this.options.axis == "vertical" ? "top" : "left"; - var size = this.options.axis == "vertical" ? "height" : "width"; - this.rangeElement.css(prop, (parseInt($(this.handle[0]).css(prop),10) || 0) + this.handleSize(0, this.options.axis == "vertical" ? "y" : "x")/2); - this.rangeElement.css(size, (parseInt($(this.handle[1]).css(prop),10) || 0) - (parseInt($(this.handle[0]).css(prop),10) || 0)); - }, - getRange: function() { - return this.rangeElement ? this.convertValue(parseInt(this.rangeElement.css(this.options.axis == "vertical" ? "height" : "width"),10), this.options.axis == "vertical" ? "y" : "x") : null; - }, - - handleIndex: function() { - return this.handle.index(this.currentHandle[0]); - }, - value: function(handle, axis) { - if(this.handle.length == 1) this.currentHandle = this.handle; - if(!axis) axis = this.options.axis == "vertical" ? "y" : "x"; - - var curHandle = $(handle != undefined && handle !== null ? this.handle[handle] || handle : this.currentHandle); - - if(curHandle.data("mouse").sliderValue) { - return parseInt(curHandle.data("mouse").sliderValue[axis],10); - } else { - return parseInt(((parseInt(curHandle.css(axis == "x" ? "left" : "top"),10) / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(handle,axis))) * this.options.realMax[axis]) + this.options.min[axis],10); - } - - }, - convertValue: function(value,axis) { - return this.options.min[axis] + (value / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis))) * this.options.realMax[axis]; - }, - - translateValue: function(value,axis) { - return ((value - this.options.min[axis]) / this.options.realMax[axis]) * (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis)); - }, - translateRange: function(value,axis) { - if (this.rangeElement) { - if (this.currentHandle[0] == this.handle[0] && value >= this.translateValue(this.value(1),axis)) - value = this.translateValue(this.value(1,axis) - this.oneStep(axis), axis); - if (this.currentHandle[0] == this.handle[1] && value <= this.translateValue(this.value(0),axis)) - value = this.translateValue(this.value(0,axis) + this.oneStep(axis), axis); - } - if (this.options.handles) { - var handle = this.options.handles[this.handleIndex()]; - if (value < this.translateValue(handle.min,axis)) { - value = this.translateValue(handle.min,axis); - } else if (value > this.translateValue(handle.max,axis)) { - value = this.translateValue(handle.max,axis); - } - } - return value; - }, - translateLimits: function(value,axis) { - if (value >= this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis)) - value = this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null,axis); - if (value <= 0) - value = 0; - return value; - }, - handleSize: function(handle,axis) { - return $(handle != undefined && handle !== null ? this.handle[handle] : this.currentHandle)[0]["offset"+(axis == "x" ? "Width" : "Height")]; - }, - oneStep: function(axis) { - return this.options.stepping[axis] || 1; - }, - - - start: function(e, handle) { - - var o = this.options; - if(o.disabled) return false; - - // Prepare the outer size - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - // This is a especially ugly fix for strange blur events happening on mousemove events - if (!this.currentHandle) - this.focus(this.previousHandle, true); - - this.offset = this.element.offset(); - - this.handleOffset = this.currentHandle.offset(); - this.clickOffset = { top: e.pageY - this.handleOffset.top, left: e.pageX - this.handleOffset.left }; - - this.firstValue = this.value(); - - this.propagate('start', e); - this.drag(e, handle); - return true; - - }, - stop: function(e) { - this.propagate('stop', e); - if (this.firstValue != this.value()) - this.propagate('change', e); - // This is a especially ugly fix for strange blur events happening on mousemove events - this.focus(this.currentHandle, true); - return false; - }, - drag: function(e, handle) { - - var o = this.options; - var position = { top: e.pageY - this.offset.top - this.clickOffset.top, left: e.pageX - this.offset.left - this.clickOffset.left}; - if(!this.currentHandle) this.focus(this.previousHandle, true); //This is a especially ugly fix for strange blur events happening on mousemove events - - position.left = this.translateLimits(position.left, "x"); - position.top = this.translateLimits(position.top, "y"); - - if (o.stepping.x) { - var value = this.convertValue(position.left, "x"); - value = Math.round(value / o.stepping.x) * o.stepping.x; - position.left = this.translateValue(value, "x"); - } - if (o.stepping.y) { - var value = this.convertValue(position.top, "y"); - value = Math.round(value / o.stepping.y) * o.stepping.y; - position.top = this.translateValue(value, "y"); - } - - position.left = this.translateRange(position.left, "x"); - position.top = this.translateRange(position.top, "y"); - - if(o.axis != "vertical") this.currentHandle.css({ left: position.left }); - if(o.axis != "horizontal") this.currentHandle.css({ top: position.top }); - - //Store the slider's value - this.currentHandle.data("mouse").sliderValue = { - x: Math.round(this.convertValue(position.left, "x")) || 0, - y: Math.round(this.convertValue(position.top, "y")) || 0 - }; - - if (this.rangeElement) - this.updateRange(); - this.propagate('slide', e); - return false; - }, - - moveTo: function(value, handle, noPropagation) { - - var o = this.options; - - // Prepare the outer size - this.actualSize = { width: this.element.outerWidth() , height: this.element.outerHeight() }; - - //If no handle has been passed, no current handle is available and we have multiple handles, return false - if (handle == undefined && !this.currentHandle && this.handle.length != 1) - return false; - - //If only one handle is available, use it - if (handle == undefined && !this.currentHandle) - handle = 0; - - if (handle != undefined) - this.currentHandle = this.previousHandle = $(this.handle[handle] || handle); - - - if(value.x !== undefined && value.y !== undefined) { - var x = value.x, y = value.y; - } else { - var x = value, y = value; - } - - if(x !== undefined && x.constructor != Number) { - var me = /^\-\=/.test(x), pe = /^\+\=/.test(x); - if(me || pe) { - x = this.value(null, "x") + parseInt(x.replace(me ? '=' : '+=', ''), 10); - } else { - x = isNaN(parseInt(x, 10)) ? undefined : parseInt(x, 10); - } - } - - if(y !== undefined && y.constructor != Number) { - var me = /^\-\=/.test(y), pe = /^\+\=/.test(y); - if(me || pe) { - y = this.value(null, "y") + parseInt(y.replace(me ? '=' : '+=', ''), 10); - } else { - y = isNaN(parseInt(y, 10)) ? undefined : parseInt(y, 10); - } - } - - if(o.axis != "vertical" && x !== undefined) { - if(o.stepping.x) x = Math.round(x / o.stepping.x) * o.stepping.x; - x = this.translateValue(x, "x"); - x = this.translateLimits(x, "x"); - x = this.translateRange(x, "x"); - this.currentHandle.css({ left: x }); - } - - if(o.axis != "horizontal" && y !== undefined) { - if(o.stepping.y) y = Math.round(y / o.stepping.y) * o.stepping.y; - y = this.translateValue(y, "y"); - y = this.translateLimits(y, "y"); - y = this.translateRange(y, "y"); - this.currentHandle.css({ top: y }); - } - - if (this.rangeElement) - this.updateRange(); - - //Store the slider's value - this.currentHandle.data("mouse").sliderValue = { - x: Math.round(this.convertValue(x, "x")) || 0, - y: Math.round(this.convertValue(y, "y")) || 0 - }; - - if (!noPropagation) { - this.propagate('start', null); - this.propagate('stop', null); - this.propagate('change', null); - this.propagate("slide", null); - } - } -}); - -$.ui.slider.getter = "value"; - -$.ui.slider.defaults = { - handle: ".ui-slider-handle", - distance: 1 -}; - -})(jQuery); -/* - * jQuery UI Tabs - * - * Copyright (c) 2007, 2008 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * ui.core.js - */ -(function($) { - -$.widget("ui.tabs", { - init: function() { - this.options.event += '.tabs'; // namespace event - - // create tabs - this.tabify(true); - }, - setData: function(key, value) { - if ((/^selected/).test(key)) - this.select(value); - else { - this.options[key] = value; - this.tabify(); - } - }, - length: function() { - return this.$tabs.length; - }, - tabId: function(a) { - return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') - || this.options.idPrefix + $.data(a); - }, - ui: function(tab, panel) { - return { - options: this.options, - tab: tab, - panel: panel - }; - }, - tabify: function(init) { - - this.$lis = $('li:has(a[href])', this.element); - this.$tabs = this.$lis.map(function() { return $('a', this)[0]; }); - this.$panels = $([]); - - var self = this, o = this.options; - - this.$tabs.each(function(i, a) { - // inline tab - if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an empty hash - self.$panels = self.$panels.add(a.hash); - // remote tab - else if ($(a).attr('href') != '#') { // prevent loading the page itself if href is just "#" - $.data(a, 'href.tabs', a.href); // required for restore on destroy - $.data(a, 'load.tabs', a.href); // mutable - var id = self.tabId(a); - a.href = '#' + id; - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass) - .insertAfter( self.$panels[i - 1] || self.element ); - $panel.data('destroy.tabs', true); - } - self.$panels = self.$panels.add( $panel ); - } - // invalid tab href - else - o.disabled.push(i + 1); - }); - - if (init) { - - // attach necessary classes for styling if not present - this.element.addClass(o.navClass); - this.$panels.each(function() { - var $this = $(this); - $this.addClass(o.panelClass); - }); - - // Selected tab - // use "selected" option or try to retrieve: - // 1. from fragment identifier in url - // 2. from cookie - // 3. from selected class attribute on <li> - if (o.selected === undefined) { - if (location.hash) { - this.$tabs.each(function(i, a) { - if (a.hash == location.hash) { - o.selected = i; - // prevent page scroll to fragment - if ($.browser.msie || $.browser.opera) { // && !o.remote - var $toShow = $(location.hash), toShowId = $toShow.attr('id'); - $toShow.attr('id', ''); - setTimeout(function() { - $toShow.attr('id', toShowId); // restore id - }, 500); - } - scrollTo(0, 0); - return false; // break - } - }); - } - else if (o.cookie) { - var index = parseInt($.cookie('ui-tabs' + $.data(self.element)),10); - if (index && self.$tabs[index]) - o.selected = index; - } - else if (self.$lis.filter('.' + o.selectedClass).length) - o.selected = self.$lis.index( self.$lis.filter('.' + o.selectedClass)[0] ); - } - o.selected = o.selected === null || o.selected !== undefined ? o.selected : 0; // first tab selected by default - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - // A selected tab cannot become disabled. - o.disabled = $.unique(o.disabled.concat( - $.map(this.$lis.filter('.' + o.disabledClass), - function(n, i) { return self.$lis.index(n); } ) - )).sort(); - if ($.inArray(o.selected, o.disabled) != -1) - o.disabled.splice($.inArray(o.selected, o.disabled), 1); - - // highlight selected tab - this.$panels.addClass(o.hideClass); - this.$lis.removeClass(o.selectedClass); - if (o.selected !== null) { - this.$panels.eq(o.selected).show().removeClass(o.hideClass); // use show and remove class to show in any case no matter how it has been hidden before - this.$lis.eq(o.selected).addClass(o.selectedClass); - - // seems to be expected behavior that the show callback is fired - var onShow = function() { - $(self.element).triggerHandler('tabsshow', - [null, self.ui(self.$tabs[o.selected], self.$panels[o.selected])], o.show); - }; - - // load if remote tab - if ($.data(this.$tabs[o.selected], 'load.tabs')) - this.load(o.selected, onShow); - // just trigger show event - else - onShow(); - - } - - // clean up to avoid memory leaks in certain versions of IE 6 - $(window).bind('unload', function() { - self.$tabs.unbind('.tabs'); - self.$lis = self.$tabs = self.$panels = null; - }); - - } - - // disable tabs - for (var i = 0, li; li = this.$lis[i]; i++) - $(li)[$.inArray(i, o.disabled) != -1 && !$(li).hasClass(o.selectedClass) ? 'addClass' : 'removeClass'](o.disabledClass); - - // reset cache if switching from cached to not cached - if (o.cache === false) - this.$tabs.removeData('cache.tabs'); - - // set up animations - var hideFx, showFx, baseFx = { 'min-width': 0, duration: 1 }, baseDuration = 'normal'; - if (o.fx && o.fx.constructor == Array) - hideFx = o.fx[0] || baseFx, showFx = o.fx[1] || baseFx; - else - hideFx = showFx = o.fx || baseFx; - - // reset some styles to maintain print style sheets etc. - var resetCSS = { display: '', overflow: '', height: '' }; - if (!$.browser.msie) // not in IE to prevent ClearType font issue - resetCSS.opacity = ''; - - // Hide a tab, animation prevents browser scrolling to fragment, - // $show is optional. - function hideTab(clicked, $hide, $show) { - $hide.animate(hideFx, hideFx.duration || baseDuration, function() { // - $hide.addClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc. - if ($.browser.msie && hideFx.opacity) - $hide[0].style.filter = ''; - if ($show) - showTab(clicked, $show, $hide); - }); - } - - // Show a tab, animation prevents browser scrolling to fragment, - // $hide is optional. - function showTab(clicked, $show, $hide) { - if (showFx === baseFx) - $show.css('display', 'block'); // prevent occasionally occuring flicker in Firefox cause by gap between showing and hiding the tab panels - $show.animate(showFx, showFx.duration || baseDuration, function() { - $show.removeClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc. - if ($.browser.msie && showFx.opacity) - $show[0].style.filter = ''; - - // callback - $(self.element).triggerHandler('tabsshow', - [null, self.ui(clicked, $show[0])], o.show); - - }); - } - - // switch a tab - function switchTab(clicked, $li, $hide, $show) { - /*if (o.bookmarkable && trueClick) { // add to history only if true click occured, not a triggered click - $.ajaxHistory.update(clicked.hash); - }*/ - $li.addClass(o.selectedClass) - .siblings().removeClass(o.selectedClass); - hideTab(clicked, $hide, $show); - } - - // attach tab event handler, unbind to avoid duplicates from former tabifying... - this.$tabs.unbind('.tabs').bind(o.event, function() { - - //var trueClick = e.clientX; // add to history only if true click occured, not a triggered click - var $li = $(this).parents('li:eq(0)'), - $hide = self.$panels.filter(':visible'), - $show = $(this.hash); - - // If tab is already selected and not unselectable or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if (($li.hasClass(o.selectedClass) && !o.unselect) - || $li.hasClass(o.disabledClass) - || $(this).hasClass(o.loadingClass) - || $(self.element).triggerHandler('tabsselect', [null, self.ui(this, $show[0])], o.select) === false - ) { - this.blur(); - return false; - } - - self.options.selected = self.$tabs.index(this); - - // if tab may be closed - if (o.unselect) { - if ($li.hasClass(o.selectedClass)) { - self.options.selected = null; - $li.removeClass(o.selectedClass); - self.$panels.stop(); - hideTab(this, $hide); - this.blur(); - return false; - } else if (!$hide.length) { - self.$panels.stop(); - var a = this; - self.load(self.$tabs.index(this), function() { - $li.addClass(o.selectedClass).addClass(o.unselectClass); - showTab(a, $show); - }); - this.blur(); - return false; - } - } - - if (o.cookie) - $.cookie('ui-tabs' + $.data(self.element), self.options.selected, o.cookie); - - // stop possibly running animations - self.$panels.stop(); - - // show new tab - if ($show.length) { - - // prevent scrollbar scrolling to 0 and than back in IE7, happens only if bookmarking/history is enabled - /*if ($.browser.msie && o.bookmarkable) { - var showId = this.hash.replace('#', ''); - $show.attr('id', ''); - setTimeout(function() { - $show.attr('id', showId); // restore id - }, 0); - }*/ - - var a = this; - self.load(self.$tabs.index(this), $hide.length ? - function() { - switchTab(a, $li, $hide, $show); - } : - function() { - $li.addClass(o.selectedClass); - showTab(a, $show); - } - ); - - // Set scrollbar to saved position - need to use timeout with 0 to prevent browser scroll to target of hash - /*var scrollX = window.pageXOffset || document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft || 0; - var scrollY = window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop || 0; - setTimeout(function() { - scrollTo(scrollX, scrollY); - }, 0);*/ - - } else - throw 'jQuery UI Tabs: Mismatching fragment identifier.'; - - // Prevent IE from keeping other link focussed when using the back button - // and remove dotted border from clicked link. This is controlled in modern - // browsers via CSS, also blur removes focus from address bar in Firefox - // which can become a usability and annoying problem with tabsRotate. - if ($.browser.msie) - this.blur(); - - //return o.bookmarkable && !!trueClick; // convert trueClick == undefined to Boolean required in IE - return false; - - }); - - // disable click if event is configured to something else - if (!(/^click/).test(o.event)) - this.$tabs.bind('click.tabs', function() { return false; }); - - }, - add: function(url, label, index) { - if (index == undefined) - index = this.$tabs.length; // append by default - - var o = this.options; - var $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)); - $li.data('destroy.tabs', true); - - var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId( $('a:first-child', $li)[0] ); - - // try to find an existing element before creating a new one - var $panel = $('#' + id); - if (!$panel.length) { - $panel = $(o.panelTemplate).attr('id', id) - .addClass(o.hideClass) - .data('destroy.tabs', true); - } - $panel.addClass(o.panelClass); - if (index >= this.$lis.length) { - $li.appendTo(this.element); - $panel.appendTo(this.element[0].parentNode); - } else { - $li.insertBefore(this.$lis[index]); - $panel.insertBefore(this.$panels[index]); - } - - o.disabled = $.map(o.disabled, - function(n, i) { return n >= index ? ++n : n }); - - this.tabify(); - - if (this.$tabs.length == 1) { - $li.addClass(o.selectedClass); - $panel.removeClass(o.hideClass); - var href = $.data(this.$tabs[0], 'load.tabs'); - if (href) - this.load(index, href); - } - - // callback - this.element.triggerHandler('tabsadd', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.add - ); - }, - remove: function(index) { - var o = this.options, $li = this.$lis.eq(index).remove(), - $panel = this.$panels.eq(index).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1) - this.select(index + (index + 1 < this.$tabs.length ? 1 : -1)); - - o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }), - function(n, i) { return n >= index ? --n : n }); - - this.tabify(); - - // callback - this.element.triggerHandler('tabsremove', - [null, this.ui($li.find('a')[0], $panel[0])], o.remove - ); - }, - enable: function(index) { - var o = this.options; - if ($.inArray(index, o.disabled) == -1) - return; - - var $li = this.$lis.eq(index).removeClass(o.disabledClass); - if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2... - $li.css('display', 'inline-block'); - setTimeout(function() { - $li.css('display', 'block'); - }, 0); - } - - o.disabled = $.grep(o.disabled, function(n, i) { return n != index; }); - - // callback - this.element.triggerHandler('tabsenable', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.enable - ); - - }, - disable: function(index) { - var self = this, o = this.options; - if (index != o.selected) { // cannot disable already selected tab - this.$lis.eq(index).addClass(o.disabledClass); - - o.disabled.push(index); - o.disabled.sort(); - - // callback - this.element.triggerHandler('tabsdisable', - [null, this.ui(this.$tabs[index], this.$panels[index])], o.disable - ); - } - }, - select: function(index) { - if (typeof index == 'string') - index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] ); - this.$tabs.eq(index).trigger(this.options.event); - }, - load: function(index, callback) { // callback is for internal usage only - - var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0], - bypassCache = callback == undefined || callback === false, url = $a.data('load.tabs'); - - callback = callback || function() {}; - - // no remote or from cache - just finish with callback - if (!url || !bypassCache && $.data(a, 'cache.tabs')) { - callback(); - return; - } - - // load remote from here on - - var inner = function(parent) { - var $parent = $(parent), $inner = $parent.find('*:last'); - return $inner.length && $inner || $parent; - }; - var cleanup = function() { - self.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass) - .each(function() { - if (o.spinner) - inner(this).parent().html(inner(this).data('label.tabs')); - }); - self.xhr = null; - }; - - if (o.spinner) { - var label = inner(a).html(); - inner(a).wrapInner('<em></em>') - .find('em').data('label.tabs', label).html(o.spinner); - } - - var ajaxOptions = $.extend({}, o.ajaxOptions, { - url: url, - success: function(r, s) { - $(a.hash).html(r); - cleanup(); - - if (o.cache) - $.data(a, 'cache.tabs', true); // if loaded once do not load them again - - // callbacks - $(self.element).triggerHandler('tabsload', - [null, self.ui(self.$tabs[index], self.$panels[index])], o.load - ); - o.ajaxOptions.success && o.ajaxOptions.success(r, s); - - // This callback is required because the switch has to take - // place after loading has completed. Call last in order to - // fire load before show callback... - callback(); - } - }); - if (this.xhr) { - // terminate pending requests from other tabs and restore tab label - this.xhr.abort(); - cleanup(); - } - $a.addClass(o.loadingClass); - setTimeout(function() { // timeout is again required in IE, "wait" for id being restored - self.xhr = $.ajax(ajaxOptions); - }, 0); - - }, - url: function(index, url) { - this.$tabs.eq(index).removeData('cache.tabs').data('load.tabs', url); - }, - destroy: function() { - var o = this.options; - this.element.unbind('.tabs') - .removeClass(o.navClass).removeData('tabs'); - this.$tabs.each(function() { - var href = $.data(this, 'href.tabs'); - if (href) - this.href = href; - var $this = $(this).unbind('.tabs'); - $.each(['href', 'load', 'cache'], function(i, prefix) { - $this.removeData(prefix + '.tabs'); - }); - }); - this.$lis.add(this.$panels).each(function() { - if ($.data(this, 'destroy.tabs')) - $(this).remove(); - else - $(this).removeClass([o.selectedClass, o.unselectClass, - o.disabledClass, o.panelClass, o.hideClass].join(' ')); - }); - } -}); - -$.ui.tabs.defaults = { - // basic setup - unselect: false, - event: 'click', - disabled: [], - cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - // TODO history: false, - - // Ajax - spinner: 'Loading…', - cache: false, - idPrefix: 'ui-tabs-', - ajaxOptions: {}, - - // animations - fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } - - // templates - tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>', - panelTemplate: '<div></div>', - - // CSS classes - navClass: 'ui-tabs-nav', - selectedClass: 'ui-tabs-selected', - unselectClass: 'ui-tabs-unselect', - disabledClass: 'ui-tabs-disabled', - panelClass: 'ui-tabs-panel', - hideClass: 'ui-tabs-hide', - loadingClass: 'ui-tabs-loading' -}; - -$.ui.tabs.getter = "length"; - -/* - * Tabs Extensions - */ - -/* - * Rotate - */ -$.extend($.ui.tabs.prototype, { - rotation: null, - rotate: function(ms, continuing) { - - continuing = continuing || false; - - var self = this, t = this.options.selected; - - function start() { - self.rotation = setInterval(function() { - t = ++t < self.$tabs.length ? t : 0; - self.select(t); - }, ms); - } - - function stop(e) { - if (!e || e.clientX) { // only in case of a true click - clearInterval(self.rotation); - } - } - - // start interval - if (ms) { - start(); - if (!continuing) - this.$tabs.bind(this.options.event, stop); - else - this.$tabs.bind(this.options.event, function() { - stop(); - t = self.options.selected; - start(); - }); - } - // stop interval - else { - stop(); - this.$tabs.unbind(this.options.event, stop); - } - } -}); - -})(jQuery); diff --git a/utils/jsdoc-toolkit/README.txt b/utils/jsdoc-toolkit/README.txt new file mode 100755 index 0000000..44575d3 --- /dev/null +++ b/utils/jsdoc-toolkit/README.txt @@ -0,0 +1,186 @@ +====================================================================== + +DESCRIPTION: + +This is the source code for JsDoc Toolkit, an automatic documentation +generation tool for JavaScript. It is written in JavaScript and is run +from a command line (or terminal) using the Java and Mozilla's Rhino +JavaScript runtime engine. + +Using this tool you can automatically turn JavaDoc-like comments in +your JavaScript source code into published output files, such as HTML +or XML. + +For more information, to report a bug, or to browse the technical +documentation for this tool please visit the official JsDoc Toolkit +project homepage at http://code.google.com/p/jsdoc-toolkit/ + +For the most up-to-date documentation on JsDoc Toolkit see the +official wiki at http://code.google.com/p/jsdoc-toolkit/w/list + +====================================================================== + +REQUIREMENTS: + +JsDoc Toolkit is known to work with: +java version "1.6.0_03" +Java(TM) SE Runtime Environment (build 1.6.0_03-b05) +on Windows XP, +and java version "1.5.0_13" +Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-241) +on Mac OS X 10.4. + +Other versions of java may or may not work with JsDoc Toolkit. + +====================================================================== + +USAGE: + +Running JsDoc Toolkit requires you to have Java installed on your +computer. For more information see http://www.java.com/getjava/ + +Before running the JsDoc Toolkit app you should change your current +working directory to the jsdoc-toolkit folder. Then follow the +examples below, or as shown on the project wiki. + +On a computer running Windows a valid command line to run JsDoc +Toolkit might look like this: + +> java -jar jsrun.jar app\run.js -a -t=templates\jsdoc mycode.js + +On Mac OS X or Linux the same command would look like this: + +$ java -jar jsrun.jar app/run.js -a -t=templates/jsdoc mycode.js + +The above assumes your current working directory contains jsrun.jar, +the "app" and "templates" subdirectories from the standard JsDoc +Toolkit distribution and that the relative path to the code you wish +to document is "mycode.js". + +The output documentation files will be saved to a new directory named +"out" (by default) in the current directory, or if you specify a +-d=somewhere_else option, to the somewhere_else directory. + +For help (usage notes) enter this on the command line: + +$ java -jar jsrun.jar app/run.js --help + +More information about the various command line options used by JsDoc +Toolkit are available on the project wiki. + +====================================================================== + +RUNNING VIA SHELL SCRIPT + +Avi Deitcher has contributed the file jsrun.sh with the following usage notes: + +A script to simplify running jsdoc from the command-line, especially when +running from within a development or build environment such as ant. + +Normally, to run jsdoc, you need a command-line as the following: +java -Djsdoc.dir=/some/long/dir/path/to/jsdoc -jar +/some/long/dir/path/to/jsdoc/jsrun.jar /some/long/dir/path/to/jsdoc/app/run.js +-t=template -r=4 /some/long/dir/path/to/my/src/code + +This can get tedious to redo time and again, and difficult to use from within a +build environment. + +To simplify the process, jsrun.sh will automatically run this path, as well as +passing through any arguments. + +Usage: jsrun.sh <run.js arguments> + +All <run.js arguments> will be passed through. +Additionally, jsrun.sh will take the following actions: +1) If the environment variable JSDOCDIR is set, it will add +"-Djsdoc.dir=$JSDOCDIR" to the command-line +2) If the environment variable JSDOCTEMPLATEDIR is set, it will add +"-Djsdoc.template.dir=$JSDOCTEMPLATEDIR" to the command-line +3) java with the appropriate path to jsrun.jar and run.js will be instantiated + +If not variables are set, it is assumed that the path to jsrun.jar and app/ is +in the current working directory. + +Example: +# jsrun.sh ./src/ +Assuming JSDOCDIR=/some/path/to/my/jsdoc will cause the following command to +execute: +java -Djsdoc.dir=/some/path/to/my/jsdoc -jar /some/path/to/my/jsdoc/jsrun.jar +/some/path/to/my/jsdoc/app/run.js ./src/ + +====================================================================== + +TESTING: + +To run the suite of unit tests included with JsDoc Toolkit enter this +on the command line: + +$ java -jar jsrun.jar app/run.js -T + +To see a dump of the internal data structure that JsDoc Toolkit has +built from your source files use this command: + +$ java -jar jsrun.jar app/run.js mycode.js -Z + +====================================================================== + +LICENSE: + +JSDoc.pm + +This project is based on the JSDoc.pm tool, created by Michael +Mathews and Gabriel Reid. More information on JsDoc.pm can +be found on the JSDoc.pm homepage: http://jsdoc.sourceforge.net/ + +Complete documentation on JsDoc Toolkit can be found on the project +wiki at http://code.google.com/p/jsdoc-toolkit/w/list + +Rhino + +Rhino (JavaScript in Java) is open source and licensed by Mozilla +under the MPL 1.1 or later/GPL 2.0 or later licenses, the text of +which is available at http://www.mozilla.org/MPL/ + +You can obtain the source code for Rhino from the Mozilla web site at +http://www.mozilla.org/rhino/download.html + +JsDoc Toolkit is a larger work that uses the Rhino JavaScript engine +but is not derived from it in any way. The Rhino library is used +without modification and without any claims whatsoever. + +The Rhino Debugger + +You can obtain more information about the Rhino Debugger from the +Mozilla web site at http://www.mozilla.org/rhino/debugger.html + +JsDoc Toolkit is a larger work that uses the Rhino Debugger but +is not derived from it in any way. The Rhino Debugger is used +without modification and without any claims whatsoever. + +JsDoc Toolkit + +All code specific to JsDoc Toolkit are free, open source and licensed +for use under the X11/MIT License. + +JsDoc Toolkit is Copyright (c)2009 Michael Mathews <micmath@gmail.com> + +This program is free software; you can redistribute it and/or +modify it under the terms below. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: The above copyright notice and this +permission notice must be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/utils/jsdoc-toolkit/app/frame.js b/utils/jsdoc-toolkit/app/frame.js new file mode 100755 index 0000000..1beb405 --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame.js @@ -0,0 +1,33 @@ +IO.include("frame/Opt.js"); +IO.include("frame/Chain.js"); +IO.include("frame/Link.js"); +IO.include("frame/String.js"); +IO.include("frame/Hash.js"); +IO.include("frame/Namespace.js"); +//IO.include("frame/Reflection.js"); + +/** A few helper functions to make life a little easier. */ + +function defined(o) { + return (o !== undefined); +} + +function copy(o) { // todo check for circular refs + if (o == null || typeof(o) != 'object') return o; + var c = new o.constructor(); + for(var p in o) c[p] = copy(o[p]); + return c; +} + +function isUnique(arr) { + var l = arr.length; + for(var i = 0; i < l; i++ ) { + if (arr.lastIndexOf(arr[i]) > i) return false; + } + return true; +} + +/** Returns the given string with all regex meta characters backslashed. */ +RegExp.escapeMeta = function(str) { + return str.replace(/([$^\\\/()|?+*\[\]{}.-])/g, "\\$1"); +} diff --git a/utils/jsdoc-toolkit/app/frame/Chain.js b/utils/jsdoc-toolkit/app/frame/Chain.js new file mode 100755 index 0000000..506469d --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Chain.js @@ -0,0 +1,102 @@ +/**@constructor*/ +function ChainNode(object, link) { + this.value = object; + this.link = link; // describes this node's relationship to the previous node +} + +/**@constructor*/ +function Chain(valueLinks) { + this.nodes = []; + this.cursor = -1; + + if (valueLinks && valueLinks.length > 0) { + this.push(valueLinks[0], "//"); + for (var i = 1, l = valueLinks.length; i < l; i+=2) { + this.push(valueLinks[i+1], valueLinks[i]); + } + } +} + +Chain.prototype.push = function(o, link) { + if (this.nodes.length > 0 && link) this.nodes.push(new ChainNode(o, link)); + else this.nodes.push(new ChainNode(o)); +} + +Chain.prototype.unshift = function(o, link) { + if (this.nodes.length > 0 && link) this.nodes[0].link = link; + this.nodes.unshift(new ChainNode(o)); + this.cursor++; +} + +Chain.prototype.get = function() { + if (this.cursor < 0 || this.cursor > this.nodes.length-1) return null; + return this.nodes[this.cursor]; +} + +Chain.prototype.first = function() { + this.cursor = 0; + return this.get(); +} + +Chain.prototype.last = function() { + this.cursor = this.nodes.length-1; + return this.get(); +} + +Chain.prototype.next = function() { + this.cursor++; + return this.get(); +} + +Chain.prototype.prev = function() { + this.cursor--; + return this.get(); +} + +Chain.prototype.toString = function() { + var string = ""; + for (var i = 0, l = this.nodes.length; i < l; i++) { + if (this.nodes[i].link) string += " -("+this.nodes[i].link+")-> "; + string += this.nodes[i].value.toString(); + } + return string; +} + +Chain.prototype.joinLeft = function() { + var result = ""; + for (var i = 0, l = this.cursor; i < l; i++) { + if (result && this.nodes[i].link) result += this.nodes[i].link; + result += this.nodes[i].value.toString(); + } + return result; +} + + +/* USAGE: + +var path = "one/two/three.four/five-six"; +var pathChain = new Chain(path.split(/([\/.-])/)); +print(pathChain); + +var lineage = new Chain(); +lineage.push("Port"); +lineage.push("Les", "son"); +lineage.push("Dawn", "daughter"); +lineage.unshift("Purdie", "son"); + +print(lineage); + +// walk left +for (var node = lineage.last(); node !== null; node = lineage.prev()) { + print("< "+node.value); +} + +// walk right +var node = lineage.first() +while (node !== null) { + print(node.value); + node = lineage.next(); + if (node && node.link) print("had a "+node.link+" named"); +} + +*/
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Dumper.js b/utils/jsdoc-toolkit/app/frame/Dumper.js new file mode 100755 index 0000000..d8b007b --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Dumper.js @@ -0,0 +1,144 @@ +/** + * @class +<pre> +This is a lightly modified version of Kevin Jones' JavaScript +library Data.Dump. To download the original visit: + <a href="http://openjsan.org/doc/k/ke/kevinj/Data/Dump/">http://openjsan.org/doc/k/ke/kevinj/Data/Dump/</a> + +AUTHORS + +The Data.Dump JavaScript module is written by Kevin Jones +(kevinj@cpan.org), based on Data::Dump by Gisle Aas (gisle@aas.no), +based on Data::Dumper by Gurusamy Sarathy (gsar@umich.edu). + +COPYRIGHT + +Copyright 2007 Kevin Jones. Copyright 1998-2000,2003-2004 Gisle Aas. +Copyright 1996-1998 Gurusamy Sarathy. + +This program is free software; you can redistribute it and/or modify +it under the terms of the Perl Artistic License + +See http://www.perl.com/perl/misc/Artistic.html +</pre> + * @static + */ +Dumper = { + /** @param [...] The objects to dump. */ + dump: function () { + if (arguments.length > 1) + return this._dump(arguments); + else if (arguments.length == 1) + return this._dump(arguments[0]); + else + return "()"; + }, + + _dump: function (obj) { + if (typeof obj == 'undefined') return 'undefined'; + var out; + if (obj.serialize) { return obj.serialize(); } + var type = this._typeof(obj); + if (obj.circularReference) obj.circularReference++; + switch (type) { + case 'circular': + out = "{ //circularReference\n}"; + break; + case 'object': + var pairs = new Array; + + for (var prop in obj) { + if (prop != "circularReference" && obj.hasOwnProperty(prop)) { //hide inherited properties + pairs.push(prop + ': ' + this._dump(obj[prop])); + } + } + + out = '{' + this._format_list(pairs) + '}'; + break; + + case 'string': + for (var prop in Dumper.ESC) { + if (Dumper.ESC.hasOwnProperty(prop)) { + obj = obj.replace(prop, Dumper.ESC[prop]); + } + } + + // Escape UTF-8 Strings + if (obj.match(/^[\x00-\x7f]*$/)) { + out = '"' + obj.replace(/\"/g, "\\\"").replace(/([\n\r]+)/g, "\\$1") + '"'; + } + else { + out = "unescape('"+escape(obj)+"')"; + } + break; + + case 'array': + var elems = new Array; + + for (var i=0; i<obj.length; i++) { + elems.push( this._dump(obj[i]) ); + } + + out = '[' + this._format_list(elems) + ']'; + break; + + case 'date': + // firefox returns GMT strings from toUTCString()... + var utc_string = obj.toUTCString().replace(/GMT/,'UTC'); + out = 'new Date("' + utc_string + '")'; + break; + + case 'element': + // DOM element + out = this._dump_dom(obj); + break; + + default: + out = obj; + } + + out = String(out).replace(/\n/g, '\n '); + out = out.replace(/\n (.*)$/,"\n$1"); + + return out; + }, + + _format_list: function (list) { + if (!list.length) return ''; + var nl = list.toString().length > 60 ? '\n' : ' '; + return nl + list.join(',' + nl) + nl; + }, + + _typeof: function (obj) { + if (obj && obj.circularReference && obj.circularReference > 1) return 'circular'; + if (Array.prototype.isPrototypeOf(obj)) return 'array'; + if (Date.prototype.isPrototypeOf(obj)) return 'date'; + if (typeof obj.nodeType != 'undefined') return 'element'; + return typeof(obj); + }, + + _dump_dom: function (obj) { + return '"' + Dumper.nodeTypes[obj.nodeType] + '"'; + } +}; + +Dumper.ESC = { + "\t": "\\t", + "\n": "\\n", + "\f": "\\f" +}; + +Dumper.nodeTypes = { + 1: "ELEMENT_NODE", + 2: "ATTRIBUTE_NODE", + 3: "TEXT_NODE", + 4: "CDATA_SECTION_NODE", + 5: "ENTITY_REFERENCE_NODE", + 6: "ENTITY_NODE", + 7: "PROCESSING_INSTRUCTION_NODE", + 8: "COMMENT_NODE", + 9: "DOCUMENT_NODE", + 10: "DOCUMENT_TYPE_NODE", + 11: "DOCUMENT_FRAGMENT_NODE", + 12: "NOTATION_NODE" +};
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Hash.js b/utils/jsdoc-toolkit/app/frame/Hash.js new file mode 100755 index 0000000..62cfad6 --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Hash.js @@ -0,0 +1,84 @@ +/** + @constructor + @example + var _index = new Hash(); + _index.set("a", "apple"); + _index.set("b", "blue"); + _index.set("c", "coffee"); + + for (var p = _index.first(); p; p = _index.next()) { + print(p.key+" is for "+p.value); + } + + */ +var Hash = function() { + this._map = {}; + this._keys = []; + this._vals = []; + this.reset(); +} + +Hash.prototype.set = function(k, v) { + if (k != "") { + this._keys.push(k); + this._map["="+k] = this._vals.length; + this._vals.push(v); + } +} + +Hash.prototype.replace = function(k, k2, v) { + if (k == k2) return; + + var offset = this._map["="+k]; + this._keys[offset] = k2; + if (typeof v != "undefined") this._vals[offset] = v; + this._map["="+k2] = offset; + delete(this._map["="+k]); +} + +Hash.prototype.drop = function(k) { + if (k != "") { + var offset = this._map["="+k]; + this._keys.splice(offset, 1); + this._vals.splice(offset, 1); + delete(this._map["="+k]); + for (var p in this._map) { + if (this._map[p] >= offset) this._map[p]--; + } + if (this._cursor >= offset && this._cursor > 0) this._cursor--; + } +} + +Hash.prototype.get = function(k) { + if (k != "") { + return this._vals[this._map["="+k]]; + } +} + +Hash.prototype.keys = function() { + return this._keys; +} + +Hash.prototype.hasKey = function(k) { + if (k != "") { + return (typeof this._map["="+k] != "undefined"); + } +} + +Hash.prototype.values = function() { + return this._vals; +} + +Hash.prototype.reset = function() { + this._cursor = 0; +} + +Hash.prototype.first = function() { + this.reset(); + return this.next(); +} + +Hash.prototype.next = function() { + if (this._cursor++ < this._keys.length) + return {key: this._keys[this._cursor-1], value: this._vals[this._cursor-1]}; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Link.js b/utils/jsdoc-toolkit/app/frame/Link.js new file mode 100755 index 0000000..ef5dc0a --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Link.js @@ -0,0 +1,153 @@ +/** Handle the creation of HTML links to documented symbols. + @constructor +*/ +function Link() { + this.alias = ""; + this.src = ""; + this.file = ""; + this.text = ""; + this.innerName = ""; + this.classLink = false; + this.targetName = ""; + + this.target = function(targetName) { + if (defined(targetName)) this.targetName = targetName; + return this; + } + this.inner = function(inner) { + if (defined(inner)) this.innerName = inner; + return this; + } + this.withText = function(text) { + if (defined(text)) this.text = text; + return this; + } + this.toSrc = function(filename) { + if (defined(filename)) this.src = filename; + return this; + } + this.toSymbol = function(alias) { + if (defined(alias)) this.alias = new String(alias); + return this; + } + this.toClass = function(alias) { + this.classLink = true; + return this.toSymbol(alias); + } + this.toFile = function(file) { + if (defined(file)) this.file = file; + return this; + } + + this.toString = function() { + var linkString; + var thisLink = this; + + if (this.alias) { + linkString = this.alias.replace(/(^|[^a-z$0-9_#.:^-])([|a-z$0-9_#.:^-]+)($|[^a-z$0-9_#.:^-])/i, + function(match, prematch, symbolName, postmatch) { + var symbolNames = symbolName.split("|"); + var links = []; + for (var i = 0, l = symbolNames.length; i < l; i++) { + thisLink.alias = symbolNames[i]; + links.push(thisLink._makeSymbolLink(symbolNames[i])); + } + return prematch+links.join("|")+postmatch; + } + ); + } + else if (this.src) { + linkString = thisLink._makeSrcLink(this.src); + } + else if (this.file) { + linkString = thisLink._makeFileLink(this.file); + } + + return linkString; + } +} + +/** prefixed for hashes */ +Link.hashPrefix = ""; + +/** Appended to the front of relative link paths. */ +Link.base = ""; + +Link.symbolNameToLinkName = function(symbol) { + var linker = ""; + if (symbol.isStatic) linker = "."; + else if (symbol.isInner) linker = "-"; + + return Link.hashPrefix+linker+symbol.name; +} + +/** Create a link to another symbol. */ +Link.prototype._makeSymbolLink = function(alias) { + var linkBase = Link.base+publish.conf.symbolsDir; + var linkTo = Link.symbolSet.getSymbol(alias); + var linkPath; + var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; + + // is it an internal link? + if (alias.charAt(0) == "#") var linkPath = alias; + + // if there is no symbol by that name just return the name unaltered + else if (!linkTo) return this.text || alias; + + // it's a symbol in another file + else { + if (!linkTo.is("CONSTRUCTOR") && !linkTo.isNamespace) { // it's a method or property + if (linkTo.isEvent) { + linkPath = + (Link.filemap)? Link.filemap[linkTo.memberOf] + : + escape(linkTo.memberOf) || "_global_"; + linkPath += publish.conf.ext + "#event:" + Link.symbolNameToLinkName(linkTo); + } + else { + linkPath = + (Link.filemap)? Link.filemap[linkTo.memberOf] + : + escape(linkTo.memberOf) || "_global_"; + linkPath += publish.conf.ext + "#" + Link.symbolNameToLinkName(linkTo); + } + } + else { + linkPath = (Link.filemap)? Link.filemap[linkTo.alias] : escape(linkTo.alias); + linkPath += publish.conf.ext;// + (this.classLink? "":"#" + Link.hashPrefix + "constructor"); + } + linkPath = linkBase + linkPath + } + + var linkText = this.text || alias; + + var link = {linkPath: linkPath, linkText: linkText, linkInner: (this.innerName? "#"+this.innerName : "")}; + + if (typeof JSDOC.PluginManager != "undefined") { + JSDOC.PluginManager.run("onSymbolLink", link); + } + + return "<a href=\""+link.linkPath+link.linkInner+"\""+target+">"+link.linkText+"</a>"; +} + +/** Create a link to a source file. */ +Link.prototype._makeSrcLink = function(srcFilePath) { + var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; + + // transform filepath into a filename + var srcFile = srcFilePath.replace(/\.\.?[\\\/]/g, "").replace(/[:\\\/]/g, "_"); + var outFilePath = Link.base + publish.conf.srcDir + srcFile + publish.conf.ext; + + if (!this.text) this.text = FilePath.fileName(srcFilePath); + return "<a href=\""+outFilePath+"\""+target+">"+this.text+"</a>"; +} + +/** Create a link to a source file. */ +Link.prototype._makeFileLink = function(filePath) { + var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; + + var outFilePath = Link.base + filePath; + + if (!this.text) this.text = filePath; + return "<a href=\""+outFilePath+"\""+target+">"+this.text+"</a>"; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Namespace.js b/utils/jsdoc-toolkit/app/frame/Namespace.js new file mode 100755 index 0000000..fa1e41d --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Namespace.js @@ -0,0 +1,10 @@ +_global_ = this; + +function Namespace(name, f) { + var n = name.split("."); + for (var o = _global_, i = 0, l = n.length; i < l; i++) { + o = o[n[i]] = o[n[i]] || {}; + } + + if (f) f(); +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Opt.js b/utils/jsdoc-toolkit/app/frame/Opt.js new file mode 100755 index 0000000..352f159 --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Opt.js @@ -0,0 +1,134 @@ +/** @namespace */ +Opt = { + /** + * Get commandline option values. + * @param {Array} args Commandline arguments. Like ["-a=xml", "-b", "--class=new", "--debug"] + * @param {object} optNames Map short names to long names. Like {a:"accept", b:"backtrace", c:"class", d:"debug"}. + * @return {object} Short names and values. Like {a:"xml", b:true, c:"new", d:true} + */ + get: function(args, optNames) { + var opt = {"_": []}; // the unnamed option allows multiple values + for (var i = 0; i < args.length; i++) { + var arg = new String(args[i]); + var name; + var value; + if (arg.charAt(0) == "-") { + if (arg.charAt(1) == "-") { // it's a longname like --foo + arg = arg.substring(2); + var m = arg.split("="); + name = m.shift(); + value = m.shift(); + if (typeof value == "undefined") value = true; + + for (var n in optNames) { // convert it to a shortname + if (name == optNames[n]) { + name = n; + } + } + } + else { // it's a shortname like -f + arg = arg.substring(1); + var m = arg.split("="); + name = m.shift(); + value = m.shift(); + if (typeof value == "undefined") value = true; + + for (var n in optNames) { // find the matching key + if (name == n || name+'[]' == n) { + name = n; + break; + } + } + } + if (name.match(/(.+)\[\]$/)) { // it's an array type like n[] + name = RegExp.$1; + if (!opt[name]) opt[name] = []; + } + + if (opt[name] && opt[name].push) { + opt[name].push(value); + } + else { + opt[name] = value; + } + } + else { // not associated with any optname + opt._.push(args[i]); + } + } + return opt; + } +} + +/*t: + plan(11, "Testing Opt."); + + is( + typeof Opt, + "object", + "Opt is an object." + ); + + is( + typeof Opt.get, + "function", + "Opt.get is a function." + ); + + var optNames = {a:"accept", b:"backtrace", c:"class", d:"debug", "e[]":"exceptions"}; + var t_options = Opt.get(["-a=xml", "-b", "--class=new", "--debug", "-e=one", "-e=two", "foo", "bar"], optNames); + + is( + t_options.a, + "xml", + "an option defined with a short name can be accessed by its short name." + ); + + is( + t_options.b, + true, + "an option defined with a short name and no value are true." + ); + + is( + t_options.c, + "new", + "an option defined with a long name can be accessed by its short name." + ); + + is( + t_options.d, + true, + "an option defined with a long name and no value are true." + ); + + is( + typeof t_options.e, + "object", + "an option that can accept multiple values is defined." + ); + + is( + t_options.e.length, + 2, + "an option that can accept multiple values can have more than one value." + ); + + is( + t_options.e[1], + "two", + "an option that can accept multiple values can be accessed as an array." + ); + + is( + typeof t_options._, + "object", + "the property '_' is defined for unnamed options." + ); + + is( + t_options._[0], + "foo", + "the property '_' can be accessed as an array." + ); + */
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Reflection.js b/utils/jsdoc-toolkit/app/frame/Reflection.js new file mode 100755 index 0000000..0968f1c --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Reflection.js @@ -0,0 +1,26 @@ +/**@constructor*/ +function Reflection(obj) { + this.obj = obj; +} + +Reflection.prototype.getConstructorName = function() { + if (this.obj.constructor.name) return this.obj.constructor.name; + var src = this.obj.constructor.toSource(); + var name = src.substring(name.indexOf("function")+8, src.indexOf('(')).replace(/ /g,''); + return name; +} + +Reflection.prototype.getMethod = function(name) { + for (var p in this.obj) { + if (p == name && typeof(this.obj[p]) == "function") return this.obj[p]; + } + return null; +} + +Reflection.prototype.getParameterNames = function() { + var src = this.obj.toSource(); + src = src.substring( + src.indexOf("(", 8)+1, src.indexOf(")") + ); + return src.split(/, ?/); +} diff --git a/utils/jsdoc-toolkit/app/frame/String.js b/utils/jsdoc-toolkit/app/frame/String.js new file mode 100755 index 0000000..c183c27 --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/String.js @@ -0,0 +1,93 @@ +/** + @name String + @class Additions to the core string object. +*/ + +/** @author Steven Levithan, released as public domain. */ +String.prototype.trim = function() { + var str = this.replace(/^\s+/, ''); + for (var i = str.length - 1; i >= 0; i--) { + if (/\S/.test(str.charAt(i))) { + str = str.substring(0, i + 1); + break; + } + } + return str; +} +/*t: + plan(6, "Testing String.prototype.trim."); + + var s = " a bc ".trim(); + is(s, "a bc", "multiple spaces front and back are trimmed."); + + s = "a bc\n\n".trim(); + is(s, "a bc", "newlines only in back are trimmed."); + + s = "\ta bc".trim(); + is(s, "a bc", "tabs only in front are trimmed."); + + s = "\n \t".trim(); + is(s, "", "an all-space string is trimmed to empty."); + + s = "a b\nc".trim(); + is(s, "a b\nc", "a string with no spaces in front or back is trimmed to itself."); + + s = "".trim(); + is(s, "", "an empty string is trimmed to empty."); + +*/ + +String.prototype.balance = function(open, close) { + var i = 0; + while (this.charAt(i) != open) { + if (i == this.length) return [-1, -1]; + i++; + } + + var j = i+1; + var balance = 1; + while (j < this.length) { + if (this.charAt(j) == open) balance++; + if (this.charAt(j) == close) balance--; + if (balance == 0) break; + j++; + if (j == this.length) return [-1, -1]; + } + + return [i, j]; +} +/*t: + plan(16, "Testing String.prototype.balance."); + + var s = "{abc}".balance("{","}"); + is(s[0], 0, "opener in first is found."); + is(s[1], 4, "closer in last is found."); + + s = "ab{c}de".balance("{","}"); + is(s[0], 2, "opener in middle is found."); + is(s[1], 4, "closer in middle is found."); + + s = "a{b{c}de}f".balance("{","}"); + is(s[0], 1, "nested opener is found."); + is(s[1], 8, "nested closer is found."); + + s = "{}".balance("{","}"); + is(s[0], 0, "opener with no content is found."); + is(s[1], 1, "closer with no content is found."); + + s = "".balance("{","}"); + is(s[0], -1, "empty string opener is -1."); + is(s[1], -1, "empty string closer is -1."); + + s = "{abc".balance("{","}"); + is(s[0], -1, "opener with no closer returns -1."); + is(s[1], -1, "no closer returns -1."); + + s = "abc".balance("{","}"); + is(s[0], -1, "no opener or closer returns -1 for opener."); + is(s[1], -1, "no opener or closer returns -1 for closer."); + + s = "a<bc}de".balance("<","}"); + is(s[0], 1, "unmatching opener is found."); + is(s[1], 4, "unmatching closer is found."); +*/
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/frame/Testrun.js b/utils/jsdoc-toolkit/app/frame/Testrun.js new file mode 100755 index 0000000..db7ecc8 --- /dev/null +++ b/utils/jsdoc-toolkit/app/frame/Testrun.js @@ -0,0 +1,129 @@ +/** + * @fileOverview + * @name JsTestrun + * @author Michael Mathews micmath@gmail.com + * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/frame/Testrun.js $ + * @revision $Id: Testrun.js 418 2008-01-15 21:40:33Z micmath $ + * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a> + * (See the accompanying README file for full details.) + */ + +/** + Yet another unit testing tool for JavaScript. + @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a> + @param {object} testCases Properties are testcase names, values are functions to execute as tests. +*/ +function testrun(testCases) { + var ran = 0; + for (t in testCases) { + var result = testCases[t](); + ran++; + } + + return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n"; +} + + +testrun.count = 0; +testrun.current = null; +testrun.passes = 0; +testrun.fails = 0; +testrun.reportOut = ""; + +/** @private */ +testrun.report = function(text) { + testrun.reportOut += text+"\n"; +} + +/** + Check if test evaluates to true. + @param {string} test To be evaluated. + @param {string} message Optional. To be displayed in the report. + @return {boolean} True if the string test evaluates to true. +*/ +ok = function(test, message) { + testrun.count++; + + var result; + try { + result = eval(test); + + if (result) { + testrun.passes++; + testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); + } + else { + testrun.fails++; + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + } + } + catch(e) { + testrun.fails++ + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + + } +} + +/** + Check if test is same as expected. + @param {string} test To be evaluated. + @param {string} expected + @param {string} message Optional. To be displayed in the report. + @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check. +*/ +is = function(test, expected, message) { + testrun.count++; + + var result; + try { + result = eval(test); + + if (result == expected) { + testrun.passes++ + testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); + } + else { + testrun.fails++ + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + testrun.report("expected: "+expected); + testrun.report(" got: "+result); + } + } + catch(e) { + testrun.fails++ + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + testrun.report("expected: "+expected); + testrun.report(" got: "+result);} +} + +/** + Check if test matches pattern. + @param {string} test To be evaluated. + @param {string} pattern Used to create a RegExp. + @param {string} message Optional. To be displayed in the report. + @return {boolean} True if test matches pattern. +*/ +like = function(test, pattern, message) { + testrun.count++; + + var result; + try { + result = eval(test); + var rgx = new RegExp(pattern); + + if (rgx.test(result)) { + testrun.passes++ + testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); + } + else { + testrun.fails++ + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + testrun.report(" this: "+result); + testrun.report("is not like: "+pattern); + } + } + catch(e) { + testrun.fails++ + testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/handlers/FOODOC.js b/utils/jsdoc-toolkit/app/handlers/FOODOC.js new file mode 100755 index 0000000..b208f55 --- /dev/null +++ b/utils/jsdoc-toolkit/app/handlers/FOODOC.js @@ -0,0 +1,26 @@ +/** + This is the main container for the FOODOC handler. + @namespace +*/ +FOODOC = { +}; + +/** The current version string of this application. */ +FOODOC.VERSION = "1.0"; + +FOODOC.handle = function(srcFile, src) { + LOG.inform("Handling file '" + srcFile + "'"); + + return [ + new JSDOC.Symbol( + "foo", + [], + "VIRTUAL", + new JSDOC.DocComment("/** This is a foo. */") + ) + ]; +}; + +FOODOC.publish = function(symbolgroup) { + LOG.inform("Publishing symbolgroup."); +}; diff --git a/utils/jsdoc-toolkit/app/handlers/XMLDOC.js b/utils/jsdoc-toolkit/app/handlers/XMLDOC.js new file mode 100755 index 0000000..40f87b3 --- /dev/null +++ b/utils/jsdoc-toolkit/app/handlers/XMLDOC.js @@ -0,0 +1,26 @@ +/** + * This is the main container for the XMLDOC handler. + * @namespace + * @author Brett Fattori (bfattori@fry.com) + * @version $Revision: 498 $ + */ +XMLDOC = { + +}; + +/** The current version string of this application. */ +XMLDOC.VERSION = "1.0"; + +/** Include the library necessary to handle XML files */ +IO.includeDir("handlers/XMLDOC/"); + +/** + * @type Symbol[] + */ +XMLDOC.handle = function(srcFile, src) { + +}; + +XMLDOC.publish = function(symbolgroup) { + +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js b/utils/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js new file mode 100755 index 0000000..240563d --- /dev/null +++ b/utils/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js @@ -0,0 +1,159 @@ +LOG.inform("XMLDOC.DomReader loaded"); + +XMLDOC.DomReader = function(root) { + + this.dom = root; + + /** + * The current node the reader is on + */ + this.node = root; + + /** + * Get the current node the reader is on + * @type XMLDOC.Parser.node + */ + XMLDOC.DomReader.prototype.getNode = function() { + return this.node; + }; + + /** + * Set the node the reader should be positioned on. + * @param node {XMLDOC.Parser.node} + */ + XMLDOC.DomReader.prototype.setNode = function(node) { + this.node = node; + }; + + /** + * A helper method to make sure the current node will + * never return null, unless null is passed as the root. + * @param step {String} An expression to evaluate - should return a node or null + */ + XMLDOC.DomReader.prototype.navigate = function(step) { + var n; + if ((n = step) != null) + { + this.node = n; + return this.node; + } + return null; + }; + + /** + * Get the root node of the current node's document. + */ + XMLDOC.DomReader.prototype.root = function() { + this.navigate(this.dom); + }; + + /** + * Get the parent of the current node. + */ + XMLDOC.DomReader.prototype.parent = function() { + return this.navigate(this.node.parentNode()); + }; + + /** + * Get the first child of the current node. + */ + XMLDOC.DomReader.prototype.firstChild = function() { + return this.navigate(this.node.firstChild()); + }; + + /** + * Get the last child of the current node. + */ + XMLDOC.DomReader.prototype.lastChild = function() { + return this.navigate(this.node.lastChild()); + }; + + /** + * Get the next sibling of the current node. + */ + XMLDOC.DomReader.prototype.nextSibling = function() { + return this.navigate(this.node.nextSibling()); + }; + + /** + * Get the previous sibling of the current node. + */ + XMLDOC.DomReader.prototype.prevSibling = function() { + return this.navigate(this.node.prevSibling()); + }; + + //=============================================================================================== + // Support methods + + /** + * Walk the tree starting with the current node, calling the plug-in for + * each node visited. Each time the plug-in is called, the DomReader + * is passed as the only parameter. Use the {@link XMLDOC.DomReader#getNode} method + * to access the current node. <i>This method uses a depth first traversal pattern.</i> + * + * @param srcFile {String} The source file being evaluated + */ + XMLDOC.DomReader.prototype.getSymbols = function(srcFile) + { + XMLDOC.DomReader.symbols = []; + XMLDOC.DomReader.currentFile = srcFile; + JSDOC.Symbol.srcFile = (srcFile || ""); + + if (defined(JSDOC.PluginManager)) { + JSDOC.PluginManager.run("onDomGetSymbols", this); + } + + return XMLDOC.DomReader.symbols; + }; + + /** + * Find the node with the given name using a depth first traversal. + * Does not modify the DomReader's current node. + * + * @param name {String} The name of the node to find + * @return the node that was found, or null if not found + */ + XMLDOC.DomReader.prototype.findNode = function(name) + { + var findNode = null; + + // Start at the current node and move into the subtree, + // looking for the node with the given name + function deeper(node, find) + { + var look = null; + + if (node) { + if (node.name == find) + { + return node; + } + + if (node.firstChild()) + { + look = deeper(node.firstChild(), find); + } + + if (!look && node.nextSibling()) + { + look = deeper(node.nextSibling(), find); + } + } + + return look; + } + + return deeper(this.getNode().firstChild(), name); + }; + + /** + * Find the next node with the given name using a depth first traversal. + * + * @param name {String} The name of the node to find + */ + XMLDOC.DomReader.prototype.findPreviousNode = function(name) + { + }; + +}; + diff --git a/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js b/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js new file mode 100755 index 0000000..e9b3e3c --- /dev/null +++ b/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js @@ -0,0 +1,16 @@ +LOG.inform("XMLDOC.symbolize loaded"); + +/** + * Convert the source file to a set of symbols + */ +XMLDOC.symbolize = function(srcFile, src) { + + LOG.inform("Symbolizing file '" + srcFile + "'"); + + // XML files already have a defined structure, so we don't need to + // do anything but parse them. The DOM reader can create a symbol + // table from the parsed XML. + var dr = new XMLDOC.DomReader(XMLDOC.Parser.parse(src)); + return dr.getSymbols(srcFile); + +}; diff --git a/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js b/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js new file mode 100755 index 0000000..78e8f45 --- /dev/null +++ b/utils/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js @@ -0,0 +1,292 @@ +LOG.inform("XMLDOC.Parser loaded"); + +/** + * XML Parser object. Returns an {@link #XMLDOC.Parser.node} which is + * the root element of the parsed document. + * <p/> + * By default, this parser will only handle well formed XML. To + * allow the parser to handle HTML, set the <tt>XMLDOC.Parser.strictMode</tt> + * variable to <tt>false</tt> before calling <tt>XMLDOC.Parser.parse()</tt>. + * <p/> + * <i>Note: If you pass poorly formed XML, it will cause the parser to throw + * an exception.</i> + * + * @author Brett Fattori (bfattori@fry.com) + * @author $Author: micmath $ + * @version $Revision: 497 $ + */ +XMLDOC.Parser = {}; + +/** + * Strict mode setting. Setting this to false allows HTML-style source to + * be parsed. Normally, well formed XML has defined end tags, or empty tags + * are properly formed. Default: <tt>true</tt> + * @type Boolean + */ +XMLDOC.Parser.strictMode = true; + +/** + * A node in an XML Document. Node types are ROOT, ELEMENT, COMMENT, PI, and TEXT. + * @param parent {XMLDOC.Parser.node} The parent node + * @param name {String} The node name + * @param type {String} One of the types + */ +XMLDOC.Parser.node = function(parent, name, type) +{ + this.name = name; + this.type = type || "ELEMENT"; + this.parent = parent; + this.charData = ""; + this.attrs = {}; + this.nodes = []; + this.cPtr = 0; + + XMLDOC.Parser.node.prototype.getAttributeNames = function() { + var a = []; + for (var o in this.attrs) + { + a.push(o); + } + + return a; + }; + + XMLDOC.Parser.node.prototype.getAttribute = function(attr) { + return this.attrs[attr]; + }; + + XMLDOC.Parser.node.prototype.setAttribute = function(attr, val) { + this.attrs[attr] = val; + }; + + XMLDOC.Parser.node.prototype.getChild = function(idx) { + return this.nodes[idx]; + }; + + XMLDOC.Parser.node.prototype.parentNode = function() { + return this.parent; + }; + + XMLDOC.Parser.node.prototype.firstChild = function() { + return this.nodes[0]; + }; + + XMLDOC.Parser.node.prototype.lastChild = function() { + return this.nodes[this.nodes.length - 1]; + }; + + XMLDOC.Parser.node.prototype.nextSibling = function() { + var p = this.parent; + if (p && (p.nodes.indexOf(this) + 1 != p.nodes.length)) + { + return p.getChild(p.nodes.indexOf(this) + 1); + } + return null; + }; + + XMLDOC.Parser.node.prototype.prevSibling = function() { + var p = this.parent; + if (p && (p.nodes.indexOf(this) - 1 >= 0)) + { + return p.getChild(p.nodes.indexOf(this) - 1); + } + return null; + }; +}; + +/** + * Parse an XML Document from the specified source. The XML should be + * well formed, unless strict mode is disabled, then the parser will + * handle HTML-style XML documents. + * @param src {String} The source to parse + */ +XMLDOC.Parser.parse = function(src) +{ + var A = []; + + // Normailize whitespace + A = src.split("\r\n"); + src = A.join("\n"); + A = src.split("\r"); + src = A.join("\n"); + + // Remove XML and DOCTYPE specifier + src.replace(/<\?XML .*\?>/i, ""); + src.replace(/<!DOCTYPE .*\>/i, ""); + + // The document is the root node and cannot be modified or removed + var doc = new XMLDOC.Parser.node(null, "ROOT", "DOCUMENT"); + + // Let's break it down + XMLDOC.Parser.eat(doc, src); + + return doc; +}; + +/** + * The XML fragment processing routine. This method is private and should not be called + * directly. + * @param parentNode {XMLDOC.Parser.node} The node which is the parent of this fragment + * @param src {String} The source within the fragment to process + * @private + */ +XMLDOC.Parser.eat = function(parentNode, src) +{ + // A simple tag def + var reTag = new RegExp("<(!|)(\\?|--|)((.|\\s)*?)\\2>","g"); + + // Special tag types + var reCommentTag = /<!--((.|\s)*?)-->/; + var rePITag = /<\?((.|\s)*?)\?>/; + + // A start tag (with potential empty marker) + var reStartTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*(\/)?>/; + + // An empty HTML style tag (not proper XML, but we'll accept it so we can process HTML) + var reHTMLEmptyTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*>/; + + // Fully enclosing tag with nested tags + var reEnclosingTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*?)\4)*>((.|\s)*?)<\/\1>/; + + // Breaks down attributes + var reAttributes = new RegExp(" +([\\w_\\-]*)=(\"|')(.*?)\\2","g"); + + // Find us a tag + var tag; + while ((tag = reTag.exec(src)) != null) + { + if (tag.index > 0) + { + // The next tag has some text before it + var text = src.substring(0, tag.index).replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1"); + + if (text.length > 0 && (text != "\n")) + { + var txtnode = new XMLDOC.Parser.node(parentNode, "", "TEXT"); + txtnode.charData = text; + + // Append the new text node + parentNode.nodes.push(txtnode); + } + + // Reset the lastIndex of reTag + reTag.lastIndex -= src.substring(0, tag.index).length; + + // Eat the text + src = src.substring(tag.index); + } + + if (reCommentTag.test(tag[0])) + { + // Is this a comment? + var comment = new XMLDOC.Parser.node(parentNode, "", "COMMENT"); + comment.charData = reCommentTag.exec(tag[0])[1]; + + // Append the comment + parentNode.nodes.push(comment); + + // Move the lastIndex of reTag + reTag.lastIndex -= tag[0].length; + + // Eat the tag + src = src.replace(reCommentTag, ""); + } + else if (rePITag.test(tag[0])) + { + // Is this a processing instruction? + var pi = new XMLDOC.Parser.node(parentNode, "", "PI"); + pi.charData = rePITag.exec(tag[0])[1]; + + // Append the processing instruction + parentNode.nodes.push(pi); + + // Move the lastIndex of reTag + reTag.lastIndex -= tag[0].length; + + // Eat the tag + src = src.replace(rePITag, ""); + } + else if (reStartTag.test(tag[0])) + { + // Break it down + var e = reStartTag.exec(tag[0]); + var elem = new XMLDOC.Parser.node(parentNode, e[1], "ELEMENT"); + + // Get attributes from the tag + var a; + while ((a = reAttributes.exec(e[2])) != null ) + { + elem.attrs[a[1]] = a[3]; + } + + // Is this an empty XML-style tag? + if (e[6] == "/") + { + // Append the empty element + parentNode.nodes.push(elem); + + // Move the lastIndex of reTag (include the start tag length) + reTag.lastIndex -= e[0].length; + + // Eat the tag + src = src.replace(reStartTag, ""); + } + else + { + // Check for malformed XML tags + var htmlParsed = false; + var htmlStartTag = reHTMLEmptyTag.exec(src); + + // See if there isn't an end tag within this block + var reHTMLEndTag = new RegExp("</" + htmlStartTag[1] + ">"); + var htmlEndTag = reHTMLEndTag.exec(src); + + if (XMLDOC.Parser.strictMode && htmlEndTag == null) + { + // Poorly formed XML fails in strict mode + var err = new Error("Malformed XML passed to XMLDOC.Parser... Error contains malformed 'src'"); + err.src = src; + throw err; + } + else if (htmlEndTag == null) + { + // This is an HTML-style empty tag, store the element for it in non-strict mode + parentNode.nodes.push(elem); + + // Eat the tag + src = src.replace(reHTMLEmptyTag, ""); + htmlParsed = true; + } + + // If we didn't parse HTML-style, it must be an enclosing tag + if (!htmlParsed) + { + var enc = reEnclosingTag.exec(src); + + // Go deeper into the document + XMLDOC.Parser.eat(elem, enc[6]); + + // Append the new element node + parentNode.nodes.push(elem); + + // Eat the tag + src = src.replace(reEnclosingTag, ""); + } + } + + // Reset the lastIndex of reTag + reTag.lastIndex = 0; + } + } + + // No tag was found... append the text if there is any + src = src.replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1"); + if (src.length > 0 && (src != "\n")) + { + var txtNode = new XMLDOC.Parser.node(parentNode, "", "TEXT"); + txtNode.charData = src; + + // Append the new text node + parentNode.nodes.push(txtNode); + } +}; diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC.js b/utils/jsdoc-toolkit/app/lib/JSDOC.js new file mode 100755 index 0000000..2dbc0a3 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC.js @@ -0,0 +1,104 @@ +/** + @overview + @date $Date: 2009-06-21 23:36:33 +0100 (Sun, 21 Jun 2009) $ + @version $Revision: 801 $ + @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/lib/JSDOC.js $ + @name JSDOC.js + */ + +/** + This is the main container for the JSDOC application. + @namespace +*/ +JSDOC = { +}; + +/** + @requires Opt + */ +if (typeof arguments == "undefined") arguments = []; +JSDOC.opt = Opt.get( + arguments, + { + a: "allfunctions", + c: "conf", + d: "directory", + "D[]": "define", + e: "encoding", + "E[]": "exclude", + h: "help", + n: "nocode", + o: "out", + p: "private", + q: "quiet", + r: "recurse", + S: "securemodules", + s: "suppress", + t: "template", + T: "testmode", + u: "unique", + v: "verbose", + x: "ext" + } +); + +/** The current version string of this application. */ +JSDOC.VERSION = "2.3.0"; + +/** Print out usage information and quit. */ +JSDOC.usage = function() { + print("USAGE: java -jar jsrun.jar app/run.js [OPTIONS] <SRC_DIR> <SRC_FILE> ..."); + print(""); + print("OPTIONS:"); + print(" -a or --allfunctions\n Include all functions, even undocumented ones.\n"); + print(" -c or --conf\n Load a configuration file.\n"); + print(" -d=<PATH> or --directory=<PATH>\n Output to this directory (defaults to \"out\").\n"); + print(" -D=\"myVar:My value\" or --define=\"myVar:My value\"\n Multiple. Define a variable, available in JsDoc as JSDOC.opt.D.myVar.\n"); + print(" -e=<ENCODING> or --encoding=<ENCODING>\n Use this encoding to read and write files.\n"); + print(" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n"); + print(" -h or --help\n Show this message and exit.\n"); + print(" -n or --nocode\n Ignore all code, only document comments with @name tags.\n"); + print(" -o=<PATH> or --out=<PATH>\n Print log messages to a file (defaults to stdout).\n"); + print(" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n"); + print(" -q or --quiet\n Do not output any messages, not even warnings.\n"); + print(" -r=<DEPTH> or --recurse=<DEPTH>\n Descend into src directories.\n"); + print(" -s or --suppress\n Suppress source code output.\n"); + print(" -S or --securemodules\n Use Secure Modules mode to parse source code.\n"); + print(" -t=<PATH> or --template=<PATH>\n Required. Use this template to format the output.\n"); + print(" -T or --test\n Run all unit tests and exit.\n"); + print(" -u or --unique\n Force file names to be unique, but not based on symbol names.\n"); + print(" -v or --verbose\n Provide verbose feedback about what is happening.\n"); + print(" -x=<EXT>[,EXT]... or --ext=<EXT>[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n"); + + quit(); +} + +/*t: + plan(4, "Testing JSDOC namespace."); + + is( + typeof JSDOC, + "object", + "JSDOC.usage is a function." + ); + + is( + typeof JSDOC.VERSION, + "string", + "JSDOC.VERSION is a string." + ); + + is( + typeof JSDOC.usage, + "function", + "JSDOC.usage is a function." + ); + + is( + typeof JSDOC.opt, + "object", + "JSDOC.opt is a object." + ); + */ + +if (this.IO) IO.includeDir("lib/JSDOC/"); diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/DocComment.js b/utils/jsdoc-toolkit/app/lib/JSDOC/DocComment.js new file mode 100755 index 0000000..c6c8d7d --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/DocComment.js @@ -0,0 +1,200 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + Create a new DocComment. This takes a raw documentation comment, + and wraps it in useful accessors. + @class Represents a documentation comment object. + */ +JSDOC.DocComment = function(/**String*/comment) { + this.init(); + if (typeof comment != "undefined") { + this.parse(comment); + } +} + +JSDOC.DocComment.prototype.init = function() { + this.isUserComment = true; + this.src = ""; + this.meta = ""; + this.tagTexts = []; + this.tags = []; +} + +/** + @requires JSDOC.DocTag + */ +JSDOC.DocComment.prototype.parse = function(/**String*/comment) { + if (comment == "") { + comment = "/** @desc */"; + this.isUserComment = false; + } + + this.src = JSDOC.DocComment.unwrapComment(comment); + + this.meta = ""; + if (this.src.indexOf("#") == 0) { + this.src.match(/#(.+[+-])([\s\S]*)$/); + if (RegExp.$1) this.meta = RegExp.$1; + if (RegExp.$2) this.src = RegExp.$2; + } + + if (typeof JSDOC.PluginManager != "undefined") { + JSDOC.PluginManager.run("onDocCommentSrc", this); + } + + this.fixDesc(); + + this.src = JSDOC.DocComment.shared+"\n"+this.src; + + this.tagTexts = + this.src + .split(/(^|[\r\n])\s*@/) + .filter(function($){return $.match(/\S/)}); + + /** + The tags found in the comment. + @type JSDOC.DocTag[] + */ + this.tags = this.tagTexts.map(function($){return new JSDOC.DocTag($)}); + + if (typeof JSDOC.PluginManager != "undefined") { + JSDOC.PluginManager.run("onDocCommentTags", this); + } +} + +/*t: + plan(5, "testing JSDOC.DocComment"); + requires("../frame/String.js"); + requires("../lib/JSDOC/DocTag.js"); + + var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); + is(com.tagTexts[0], "foo some\ncomment here", "first tag text is found."); + is(com.tags[0].title, "foo", "the title is found in a comment with one tag."); + + var com = new JSDOC.DocComment("/** @foo first\n* @bar second*"+"/"); + is(com.getTag("bar").length, 1, "getTag() returns one tag by that title."); + + JSDOC.DocComment.shared = "@author John Smith"; + var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); + is(com.tags[0].title, "author", "shared comment is added."); + is(com.tags[1].title, "foo", "shared comment is added to existing tag."); +*/ + +/** + If no @desc tag is provided, this function will add it. + */ +JSDOC.DocComment.prototype.fixDesc = function() { + if (this.meta && this.meta != "@+") return; + if (/^\s*[^@\s]/.test(this.src)) { + this.src = "@desc "+this.src; + } +} + +/*t: + plan(5, "testing JSDOC.DocComment#fixDesc"); + + var com = new JSDOC.DocComment(); + + com.src = "this is a desc\n@author foo"; + com.fixDesc(); + is(com.src, "@desc this is a desc\n@author foo", "if no @desc tag is provided one is added."); + + com.src = "x"; + com.fixDesc(); + is(com.src, "@desc x", "if no @desc tag is provided one is added to a single character."); + + com.src = "\nx"; + com.fixDesc(); + is(com.src, "@desc \nx", "if no @desc tag is provided one is added to return and character."); + + com.src = " "; + com.fixDesc(); + is(com.src, " ", "if no @desc tag is provided one is not added to just whitespace."); + + com.src = ""; + com.fixDesc(); + is(com.src, "", "if no @desc tag is provided one is not added to empty."); +*/ + +/** + Remove slash-star comment wrapper from a raw comment string. + @type String + */ +JSDOC.DocComment.unwrapComment = function(/**String*/comment) { + if (!comment) return ""; + var unwrapped = comment.replace(/(^\/\*\*|\*\/$)/g, "").replace(/^\s*\* ?/gm, ""); + return unwrapped; +} + +/*t: + plan(5, "testing JSDOC.DocComment.unwrapComment"); + + var com = "/**x*"+"/"; + var unwrapped = JSDOC.DocComment.unwrapComment(com); + is(unwrapped, "x", "a single character jsdoc is found."); + + com = "/***x*"+"/"; + unwrapped = JSDOC.DocComment.unwrapComment(com); + is(unwrapped, "x", "three stars are allowed in the opener."); + + com = "/****x*"+"/"; + unwrapped = JSDOC.DocComment.unwrapComment(com); + is(unwrapped, "*x", "fourth star in the opener is kept."); + + com = "/**x\n * y\n*"+"/"; + unwrapped = JSDOC.DocComment.unwrapComment(com); + is(unwrapped, "x\ny\n", "leading stars and spaces are trimmed."); + + com = "/**x\n * y\n*"+"/"; + unwrapped = JSDOC.DocComment.unwrapComment(com); + is(unwrapped, "x\n y\n", "only first space after leading stars are trimmed."); +*/ + +/** + Provides a printable version of the comment. + @type String + */ +JSDOC.DocComment.prototype.toString = function() { + return this.src; +} + +/*t: + plan(1, "testing JSDOC.DocComment#fixDesc"); + var com = new JSDOC.DocComment(); + com.src = "foo"; + is(""+com, "foo", "stringifying a comment returns the unwrapped src."); +*/ + +/** + Given the title of a tag, returns all tags that have that title. + @type JSDOC.DocTag[] + */ +JSDOC.DocComment.prototype.getTag = function(/**String*/tagTitle) { + return this.tags.filter(function($){return $.title == tagTitle}); +} + +/*t: + plan(1, "testing JSDOC.DocComment#getTag"); + requires("../frame/String.js"); + requires("../lib/JSDOC/DocTag.js"); + + var com = new JSDOC.DocComment("/**@foo some\n* @bar\n* @bar*"+"/"); + is(com.getTag("bar").length, 2, "getTag returns expected number of tags."); +*/ + +/** + Used to store the currently shared tag text. +*/ +JSDOC.DocComment.shared = ""; + +/*t: + plan(2, "testing JSDOC.DocComment.shared"); + requires("../frame/String.js"); + requires("../lib/JSDOC/DocTag.js"); + + JSDOC.DocComment.shared = "@author Michael"; + + var com = new JSDOC.DocComment("/**@foo\n* @foo*"+"/"); + is(com.getTag("author").length, 1, "getTag returns shared tag."); + is(com.getTag("foo").length, 2, "getTag returns unshared tags too."); +*/
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/DocTag.js b/utils/jsdoc-toolkit/app/lib/JSDOC/DocTag.js new file mode 100755 index 0000000..77ec07c --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/DocTag.js @@ -0,0 +1,294 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + @constructor + */ +JSDOC.DocTag = function(src) { + this.init(); + if (typeof src != "undefined") { + this.parse(src); + } +} + +/** + Create and initialize the properties of this. + */ +JSDOC.DocTag.prototype.init = function() { + this.title = ""; + this.type = ""; + this.name = ""; + this.isOptional = false; + this.defaultValue = ""; + this.desc = ""; + + return this; +} + +/** + Populate the properties of this from the given tag src. + @param {string} src + */ +JSDOC.DocTag.prototype.parse = function(src) { + if (typeof src != "string") throw "src must be a string not "+(typeof src); + + try { + src = this.nibbleTitle(src); + if (JSDOC.PluginManager) { + JSDOC.PluginManager.run("onDocTagSynonym", this); + } + + src = this.nibbleType(src); + + // only some tags are allowed to have names. + if (this.title == "param" || this.title == "property" || this.title == "config") { // @config is deprecated + src = this.nibbleName(src); + } + } + catch(e) { + if (LOG) LOG.warn(e); + else throw e; + } + this.desc = src; // whatever is left + + // example tags need to have whitespace preserved + if (this.title != "example") this.desc = this.desc.trim(); + + if (JSDOC.PluginManager) { + JSDOC.PluginManager.run("onDocTag", this); + } +} + +/** + Automatically called when this is stringified. + */ +JSDOC.DocTag.prototype.toString = function() { + return this.desc; +} + +/*t: + plan(1, "testing JSDOC.DocTag#toString"); + + var tag = new JSDOC.DocTag("param {object} date A valid date."); + is(""+tag, "A valid date.", "stringifying a tag returns the desc."); + */ + +/** + Find and shift off the title of a tag. + @param {string} src + @return src + */ +JSDOC.DocTag.prototype.nibbleTitle = function(src) { + if (typeof src != "string") throw "src must be a string not "+(typeof src); + + var parts = src.match(/^\s*(\S+)(?:\s([\s\S]*))?$/); + + if (parts && parts[1]) this.title = parts[1]; + if (parts && parts[2]) src = parts[2]; + else src = ""; + + return src; +} + +/*t: + plan(8, "testing JSDOC.DocTag#nibbleTitle"); + + var tag = new JSDOC.DocTag(); + + tag.init().nibbleTitle("aTitleGoesHere"); + is(tag.title, "aTitleGoesHere", "a title can be found in a single-word string."); + + var src = tag.init().nibbleTitle("aTitleGoesHere and the rest"); + is(tag.title, "aTitleGoesHere", "a title can be found in a multi-word string."); + is(src, "and the rest", "the rest is returned when the title is nibbled off."); + + src = tag.init().nibbleTitle(""); + is(tag.title, "", "given an empty string the title is empty."); + is(src, "", "the rest is empty when the tag is empty."); + + var src = tag.init().nibbleTitle(" aTitleGoesHere\n a description"); + is(tag.title, "aTitleGoesHere", "leading and trailing spaces are not part of the title."); + is(src, " a description", "leading spaces (less one) are part of the description."); + + tag.init().nibbleTitle("a.Title::Goes_Here foo"); + is(tag.title, "a.Title::Goes_Here", "titles with punctuation are allowed."); + */ + +/** + Find and shift off the type of a tag. + @requires frame/String.js + @param {string} src + @return src + */ +JSDOC.DocTag.prototype.nibbleType = function(src) { + if (typeof src != "string") throw "src must be a string not "+(typeof src); + + if (src.match(/^\s*\{/)) { + var typeRange = src.balance("{", "}"); + if (typeRange[1] == -1) { + throw "Malformed comment tag ignored. Tag type requires an opening { and a closing }: "+src; + } + this.type = src.substring(typeRange[0]+1, typeRange[1]).trim(); + this.type = this.type.replace(/\s*,\s*/g, "|"); // multiples can be separated by , or | + src = src.substring(typeRange[1]+1); + } + + return src; +} + +/*t: + plan(5, "testing JSDOC.DocTag.parser.nibbleType"); + requires("../frame/String.js"); + + var tag = new JSDOC.DocTag(); + + tag.init().nibbleType("{String[]} aliases"); + is(tag.type, "String[]", "type can have non-alpha characters."); + + tag.init().nibbleType("{ aTypeGoesHere } etc etc"); + is(tag.type, "aTypeGoesHere", "type is trimmed."); + + tag.init().nibbleType("{ oneType, twoType ,\n threeType } etc etc"); + is(tag.type, "oneType|twoType|threeType", "multiple types can be separated by commas."); + + var error; + try { tag.init().nibbleType("{widget foo"); } + catch(e) { error = e; } + is(typeof error, "string", "malformed tag type throws error."); + isnt(error.indexOf("Malformed"), -1, "error message tells tag is malformed."); + */ + +/** + Find and shift off the name of a tag. + @requires frame/String.js + @param {string} src + @return src + */ +JSDOC.DocTag.prototype.nibbleName = function(src) { + if (typeof src != "string") throw "src must be a string not "+(typeof src); + + src = src.trim(); + + // is optional? + if (src.charAt(0) == "[") { + var nameRange = src.balance("[", "]"); + if (nameRange[1] == -1) { + throw "Malformed comment tag ignored. Tag optional name requires an opening [ and a closing ]: "+src; + } + this.name = src.substring(nameRange[0]+1, nameRange[1]).trim(); + this.isOptional = true; + + src = src.substring(nameRange[1]+1); + + // has default value? + var nameAndValue = this.name.split("="); + if (nameAndValue.length) { + this.name = nameAndValue.shift().trim(); + this.defaultValue = nameAndValue.join("="); + } + } + else { + var parts = src.match(/^(\S+)(?:\s([\s\S]*))?$/); + if (parts) { + if (parts[1]) this.name = parts[1]; + if (parts[2]) src = parts[2].trim(); + else src = ""; + } + } + + return src; +} + +/*t: + requires("../frame/String.js"); + plan(9, "testing JSDOC.DocTag.parser.nibbleName"); + + var tag = new JSDOC.DocTag(); + + tag.init().nibbleName("[foo] This is a description."); + is(tag.isOptional, true, "isOptional syntax is detected."); + is(tag.name, "foo", "optional param name is found."); + + tag.init().nibbleName("[foo] This is a description."); + is(tag.isOptional, true, "isOptional syntax is detected when no type."); + is(tag.name, "foo", "optional param name is found when no type."); + + tag.init().nibbleName("[foo=7] This is a description."); + is(tag.name, "foo", "optional param name is found when default value."); + is(tag.defaultValue, 7, "optional param default value is found when default value."); + + //tag.init().nibbleName("[foo= a value] This is a description."); + //is(tag.defaultValue, " a value", "optional param default value is found when default value has spaces (issue #112)."); + + tag.init().nibbleName("[foo=[]] This is a description."); + is(tag.defaultValue, "[]", "optional param default value is found when default value is [] (issue #95)."); + + tag.init().nibbleName("[foo=a=b] This is a description."); + is(tag.name, "foo", "optional param name is found when default value is a=b."); + is(tag.defaultValue, "a=b", "optional param default value is found when default value is a=b.") + */ + +/*t: + plan(32, "Testing JSDOC.DocTag.parser."); + requires("../frame/String.js"); + + var tag = new JSDOC.DocTag(); + + is(typeof tag, "object", "JSDOC.DocTag.parser with an empty string returns an object."); + is(typeof tag.title, "string", "returned object has a string property 'title'."); + is(typeof tag.type, "string", "returned object has a string property 'type'."); + is(typeof tag.name, "string", "returned object has a string property 'name'."); + is(typeof tag.defaultValue, "string", "returned object has a string property 'defaultValue'."); + is(typeof tag.isOptional, "boolean", "returned object has a boolean property 'isOptional'."); + is(typeof tag.desc, "string", "returned object has a string property 'desc'."); + + tag = new JSDOC.DocTag("param {widget} foo"); + is(tag.title, "param", "param title is found."); + is(tag.name, "foo", "param name is found when desc is missing."); + is(tag.desc, "", "param desc is empty when missing."); + + tag = new JSDOC.DocTag("param {object} date A valid date."); + is(tag.name, "date", "param name is found with a type."); + is(tag.type, "object", "param type is found."); + is(tag.desc, "A valid date.", "param desc is found with a type."); + + tag = new JSDOC.DocTag("param aName a description goes\n here."); + is(tag.name, "aName", "param name is found without a type."); + is(tag.desc, "a description goes\n here.", "param desc is found without a type."); + + tag = new JSDOC.DocTag("param {widget}"); + is(tag.name, "", "param name is empty when it is not given."); + + tag = new JSDOC.DocTag("param {widget} [foo] This is a description."); + is(tag.name, "foo", "optional param name is found."); + + tag = new JSDOC.DocTag("return {aType} This is a description."); + is(tag.type, "aType", "when return tag has no name, type is found."); + is(tag.desc, "This is a description.", "when return tag has no name, desc is found."); + + tag = new JSDOC.DocTag("author Joe Coder <jcoder@example.com>"); + is(tag.title, "author", "author tag has a title."); + is(tag.type, "", "the author tag has no type."); + is(tag.name, "", "the author tag has no name."); + is(tag.desc, "Joe Coder <jcoder@example.com>", "author tag has desc."); + + tag = new JSDOC.DocTag("private \t\n "); + is(tag.title, "private", "private tag has a title."); + is(tag.type, "", "the private tag has no type."); + is(tag.name, "", "the private tag has no name."); + is(tag.desc, "", "private tag has no desc."); + + tag = new JSDOC.DocTag("example\n example(code);\n more();"); + is(tag.desc, " example(code);\n more();", "leading whitespace (less one) in examples code is preserved."); + + tag = new JSDOC.DocTag("param theName \n"); + is(tag.name, "theName", "name only is found."); + + tag = new JSDOC.DocTag("type theDesc \n"); + is(tag.desc, "theDesc", "desc only is found."); + + tag = new JSDOC.DocTag("type {theType} \n"); + is(tag.type, "theType", "type only is found."); + + tag = new JSDOC.DocTag(""); + is(tag.title, "", "title is empty when tag is empty."); + */
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js b/utils/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js new file mode 100755 index 0000000..2c4bfb8 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js @@ -0,0 +1,126 @@ +/** + @constructor + @param [opt] Used to override the commandline options. Useful for testing. + @version $Id: JsDoc.js 773 2009-01-24 09:42:04Z micmath $ +*/ +JSDOC.JsDoc = function(/**object*/ opt) { + if (opt) { + JSDOC.opt = opt; + } + + if (JSDOC.opt.h) { + JSDOC.usage(); + quit(); + } + + // defend against options that are not sane + if (JSDOC.opt._.length == 0) { + LOG.warn("No source files to work on. Nothing to do."); + quit(); + } + if (JSDOC.opt.t === true || JSDOC.opt.d === true) { + JSDOC.usage(); + } + + if (typeof JSDOC.opt.d == "string") { + if (!JSDOC.opt.d.charAt(JSDOC.opt.d.length-1).match(/[\\\/]/)) { + JSDOC.opt.d = JSDOC.opt.d+"/"; + } + LOG.inform("Output directory set to '"+JSDOC.opt.d+"'."); + IO.mkPath(JSDOC.opt.d); + } + if (JSDOC.opt.e) IO.setEncoding(JSDOC.opt.e); + + // the -r option: scan source directories recursively + if (typeof JSDOC.opt.r == "boolean") JSDOC.opt.r = 10; + else if (!isNaN(parseInt(JSDOC.opt.r))) JSDOC.opt.r = parseInt(JSDOC.opt.r); + else JSDOC.opt.r = 1; + + // the -D option: define user variables + var D = {}; + if (JSDOC.opt.D) { + for (var i = 0; i < JSDOC.opt.D.length; i++) { + var defineParts = JSDOC.opt.D[i].split(":", 2); + if (defineParts) D[defineParts[0]] = defineParts[1]; + } + } + JSDOC.opt.D = D; + // combine any conf file D options with the commandline D options + if (defined(JSDOC.conf)) for (var c in JSDOC.conf.D) { + if (!defined(JSDOC.opt.D[c])) { + JSDOC.opt.D[c] = JSDOC.conf.D[c]; + } + } + + // Give plugins a chance to initialize + if (defined(JSDOC.PluginManager)) { + JSDOC.PluginManager.run("onInit", JSDOC.opt); + } + + JSDOC.opt.srcFiles = JSDOC.JsDoc._getSrcFiles(); + JSDOC.JsDoc._parseSrcFiles(); + JSDOC.JsDoc.symbolSet = JSDOC.Parser.symbols; +} + +/** + Retrieve source file list. + @returns {String[]} The pathnames of the files to be parsed. + */ +JSDOC.JsDoc._getSrcFiles = function() { + JSDOC.JsDoc.srcFiles = []; + + var ext = ["js"]; + if (JSDOC.opt.x) { + ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()}); + } + + for (var i = 0; i < JSDOC.opt._.length; i++) { + JSDOC.JsDoc.srcFiles = JSDOC.JsDoc.srcFiles.concat( + IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter( + function($) { + var thisExt = $.split(".").pop().toLowerCase(); + + if (JSDOC.opt.E) { + for(var n = 0; n < JSDOC.opt.E.length; n++) { + if ($.match(new RegExp(JSDOC.opt.E[n]))) { + LOG.inform("Excluding " + $); + return false; // if the file matches the regex then it's excluded. + } + } + } + + return (ext.indexOf(thisExt) > -1); // we're only interested in files with certain extensions + } + ) + ); + } + + return JSDOC.JsDoc.srcFiles; +} + +JSDOC.JsDoc._parseSrcFiles = function() { + JSDOC.Parser.init(); + for (var i = 0, l = JSDOC.JsDoc.srcFiles.length; i < l; i++) { + var srcFile = JSDOC.JsDoc.srcFiles[i]; + + if (JSDOC.opt.v) LOG.inform("Parsing file: " + srcFile); + + try { + var src = IO.readFile(srcFile); + } + catch(e) { + LOG.warn("Can't read source file '"+srcFile+"': "+e.message); + } + + var tr = new JSDOC.TokenReader(); + var ts = new JSDOC.TokenStream(tr.tokenize(new JSDOC.TextStream(src))); + + JSDOC.Parser.parse(ts, srcFile); + + } + JSDOC.Parser.finish(); + + if (JSDOC.PluginManager) { + JSDOC.PluginManager.run("onFinishedParsing", JSDOC.Parser.symbols); + } +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js b/utils/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js new file mode 100755 index 0000000..79ac61f --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js @@ -0,0 +1,109 @@ +/** + @constructor +*/ +JSDOC.JsPlate = function(templateFile) { + if (templateFile) this.template = IO.readFile(templateFile); + + this.templateFile = templateFile; + this.code = ""; + this.parse(); +} + +JSDOC.JsPlate.prototype.parse = function() { + this.template = this.template.replace(/\{#[\s\S]+?#\}/gi, ""); + this.code = "var output=``"+this.template; + + this.code = this.code.replace( + /<for +each="(.+?)" +in="(.+?)" *>/gi, + function (match, eachName, inName) { + return "``;\rvar $"+eachName+"_keys = keys("+inName+");\rfor(var $"+eachName+"_i = 0; $"+eachName+"_i < $"+eachName+"_keys.length; $"+eachName+"_i++) {\rvar $"+eachName+"_last = ($"+eachName+"_i == $"+eachName+"_keys.length-1);\rvar $"+eachName+"_key = $"+eachName+"_keys[$"+eachName+"_i];\rvar "+eachName+" = "+inName+"[$"+eachName+"_key];\routput+=``"; + } + ); + this.code = this.code.replace(/<if test="(.+?)">/g, "``;\rif ($1) { output+=``"); + this.code = this.code.replace(/<elseif test="(.+?)"\s*\/>/g, "``;}\relse if ($1) { output+=``"); + this.code = this.code.replace(/<else\s*\/>/g, "``;}\relse { output+=``"); + this.code = this.code.replace(/<\/(if|for)>/g, "``;\r};\routput+=``"); + this.code = this.code.replace( + /\{\+\s*([\s\S]+?)\s*\+\}/gi, + function (match, code) { + code = code.replace(/"/g, "``"); // prevent qoute-escaping of inline code + code = code.replace(/(\r?\n)/g, " "); + return "``+ ("+code+") +``"; + } + ); + this.code = this.code.replace( + /\{!\s*([\s\S]+?)\s*!\}/gi, + function (match, code) { + code = code.replace(/"/g, "``"); // prevent qoute-escaping of inline code + code = code.replace(/(\n)/g, " "); + return "``; "+code+";\routput+=``"; + } + ); + this.code = this.code+"``;"; + + this.code = this.code.replace(/(\r?\n)/g, "\\n"); + this.code = this.code.replace(/"/g, "\\\""); + this.code = this.code.replace(/``/g, "\""); +} + +JSDOC.JsPlate.prototype.toCode = function() { + return this.code; +} + +JSDOC.JsPlate.keys = function(obj) { + var keys = []; + if (obj.constructor.toString().indexOf("Array") > -1) { + for (var i = 0; i < obj.length; i++) { + keys.push(i); + } + } + else { + for (var i in obj) { + keys.push(i); + } + } + return keys; +}; + +JSDOC.JsPlate.values = function(obj) { + var values = []; + if (obj.constructor.toString().indexOf("Array") > -1) { + for (var i = 0; i < obj.length; i++) { + values.push(obj[i]); + } + } + else { + for (var i in obj) { + values.push(obj[i]); + } + } + return values; +}; + +JSDOC.JsPlate.prototype.process = function(data, compact) { + var keys = JSDOC.JsPlate.keys; + var values = JSDOC.JsPlate.values; + + try { + eval(this.code); + } + catch (e) { + print(">> There was an error evaluating the compiled code from template: "+this.templateFile); + print(" The error was on line "+e.lineNumber+" "+e.name+": "+e.message); + var lines = this.code.split("\r"); + if (e.lineNumber-2 >= 0) print("line "+(e.lineNumber-1)+": "+lines[e.lineNumber-2]); + print("line "+e.lineNumber+": "+lines[e.lineNumber-1]); + print(""); + } + + if (compact) { // patch by mcbain.asm + // Remove lines that contain only space-characters, usually left by lines in the template + // which originally only contained JSPlate tags or code. This makes it easier to write + // non-tricky templates which still put out nice code (not bloated with extra lines). + // Lines purposely left blank (just a line ending) are left alone. + output = output.replace(/\s+?(\r?)\n/g, "$1\n"); + } + + /*debug*///print(this.code); + return output; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Lang.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Lang.js new file mode 100755 index 0000000..62919d7 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Lang.js @@ -0,0 +1,144 @@ +/** + @namespace +*/ +JSDOC.Lang = { +} + +JSDOC.Lang.isBuiltin = function(name) { + return (JSDOC.Lang.isBuiltin.coreObjects.indexOf(name) > -1); +} +JSDOC.Lang.isBuiltin.coreObjects = ['_global_', 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', 'RegExp', 'String']; + +JSDOC.Lang.whitespace = function(ch) { + return JSDOC.Lang.whitespace.names[ch]; +} +JSDOC.Lang.whitespace.names = { + " ": "SPACE", + "\f": "FORMFEED", + "\t": "TAB", + "\u0009": "UNICODE_TAB", + "\u000A": "UNICODE_NBR", + "\u0008": "VERTICAL_TAB" +}; + +JSDOC.Lang.newline = function(ch) { + return JSDOC.Lang.newline.names[ch]; +} +JSDOC.Lang.newline.names = { + "\n": "NEWLINE", + "\r": "RETURN", + "\u000A": "UNICODE_LF", + "\u000D": "UNICODE_CR", + "\u2029": "UNICODE_PS", + "\u2028": "UNICODE_LS" +}; + +JSDOC.Lang.keyword = function(word) { + return JSDOC.Lang.keyword.names["="+word]; +} +JSDOC.Lang.keyword.names = { + "=break": "BREAK", + "=case": "CASE", + "=catch": "CATCH", + "=const": "VAR", + "=continue": "CONTINUE", + "=default": "DEFAULT", + "=delete": "DELETE", + "=do": "DO", + "=else": "ELSE", + "=false": "FALSE", + "=finally": "FINALLY", + "=for": "FOR", + "=function": "FUNCTION", + "=if": "IF", + "=in": "IN", + "=instanceof": "INSTANCEOF", + "=new": "NEW", + "=null": "NULL", + "=return": "RETURN", + "=switch": "SWITCH", + "=this": "THIS", + "=throw": "THROW", + "=true": "TRUE", + "=try": "TRY", + "=typeof": "TYPEOF", + "=void": "VOID", + "=while": "WHILE", + "=with": "WITH", + "=var": "VAR" +}; + +JSDOC.Lang.punc = function(ch) { + return JSDOC.Lang.punc.names[ch]; +} +JSDOC.Lang.punc.names = { + ";": "SEMICOLON", + ",": "COMMA", + "?": "HOOK", + ":": "COLON", + "||": "OR", + "&&": "AND", + "|": "BITWISE_OR", + "^": "BITWISE_XOR", + "&": "BITWISE_AND", + "===": "STRICT_EQ", + "==": "EQ", + "=": "ASSIGN", + "!==": "STRICT_NE", + "!=": "NE", + "<<": "LSH", + "<=": "LE", + "<": "LT", + ">>>": "URSH", + ">>": "RSH", + ">=": "GE", + ">": "GT", + "++": "INCREMENT", + "--": "DECREMENT", + "+": "PLUS", + "-": "MINUS", + "*": "MUL", + "/": "DIV", + "%": "MOD", + "!": "NOT", + "~": "BITWISE_NOT", + ".": "DOT", + "[": "LEFT_BRACKET", + "]": "RIGHT_BRACKET", + "{": "LEFT_CURLY", + "}": "RIGHT_CURLY", + "(": "LEFT_PAREN", + ")": "RIGHT_PAREN" +}; + +JSDOC.Lang.matching = function(name) { + return JSDOC.Lang.matching.names[name]; +} +JSDOC.Lang.matching.names = { + "LEFT_PAREN": "RIGHT_PAREN", + "RIGHT_PAREN": "LEFT_PAREN", + "LEFT_CURLY": "RIGHT_CURLY", + "RIGHT_CURLY": "LEFT_CURLY", + "LEFT_BRACE": "RIGHT_BRACE", + "RIGHT_BRACE": "LEFT_BRACE" +} + +JSDOC.Lang.isNumber = function(str) { + return /^(\.[0-9]|[0-9]+\.|[0-9])[0-9]*([eE][+-][0-9]+)?$/i.test(str); +} + +JSDOC.Lang.isHexDec = function(str) { + return /^0x[0-9A-F]+$/i.test(str); +} + +JSDOC.Lang.isWordChar = function(str) { + return /^[a-zA-Z0-9$_.]+$/.test(str); +} + +JSDOC.Lang.isSpace = function(str) { + return (typeof JSDOC.Lang.whitespace(str) != "undefined"); +} + +JSDOC.Lang.isNewline = function(str) { + return (typeof JSDOC.Lang.newline(str) != "undefined"); +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Parser.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Parser.js new file mode 100755 index 0000000..f407dd1 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Parser.js @@ -0,0 +1,145 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + @namespace + @requires JSDOC.Walker + @requires JSDOC.Symbol + @requires JSDOC.DocComment +*/ +JSDOC.Parser = { + conf: { + ignoreCode: JSDOC.opt.n, + ignoreAnonymous: true, // factory: true + treatUnderscoredAsPrivate: true, // factory: true + explain: false // factory: false + }, + + addSymbol: function(symbol) { + +if (JSDOC.Parser.rename) { + for (var n in JSDOC.Parser.rename) { + if (symbol.alias.indexOf(n) == 0) { + if (symbol.name == symbol.alias) { + symbol.name = symbol.name.replace(n, JSDOC.Parser.rename[n]); + } + symbol.alias = symbol.alias.replace(n, JSDOC.Parser.rename[n]); + } + } +} + +if (JSDOC.opt.S) { + if (typeof JSDOC.Parser.secureModules == "undefined") JSDOC.Parser.secureModules = {}; + if (/^exports\./.test(symbol.alias)) { + symbol.srcFile.match(/(^|[\\\/])([^\\\/]+)\.js/i); + var fileNS = RegExp.$2; + symbol.alias = symbol.alias.replace(/^exports\./, fileNS); + symbol.name = symbol.name.replace(/^exports\./, ""); + symbol.memberOf = fileNS; + + // need to create the namespace associated with this file first + if (!JSDOC.Parser.secureModules[fileNS]) { + JSDOC.Parser.secureModules[fileNS] = 1; + var nsSymbol = new JSDOC.Symbol(fileNS, [], "GLOBAL", new JSDOC.DocComment("")); + nsSymbol.isNamespace = true; + nsSymbol.srcFile = ""; + nsSymbol.isPrivate = false; + nsSymbol.srcFile = symbol.srcFile; + nsSymbol.desc = (JSDOC.Parser.symbols.getSymbol(symbol.srcFile) || {desc: ""}).desc; + JSDOC.Parser.addSymbol(nsSymbol); + + } + } + else { // a method that is not exported? + if (!symbol.isNamespace) return; + } +} + // if a symbol alias is documented more than once the last one with the user docs wins + if (JSDOC.Parser.symbols.hasSymbol(symbol.alias)) { + var oldSymbol = JSDOC.Parser.symbols.getSymbol(symbol.alias); + if (oldSymbol.comment.isUserComment) { + if (symbol.comment.isUserComment) { // old and new are both documented + LOG.warn("The symbol '"+symbol.alias+"' is documented more than once."); + } + else { // old is documented but new isn't + return; + } + } + } + + // we don't document anonymous things + if (JSDOC.Parser.conf.ignoreAnonymous && symbol.name.match(/\$anonymous\b/)) return; + + // uderscored things may be treated as if they were marked private, this cascades + if (JSDOC.Parser.conf.treatUnderscoredAsPrivate && symbol.name.match(/[.#-]_[^.#-]+$/)) { + if (!symbol.comment.getTag("public").length > 0) symbol.isPrivate = true; + } + + // -p flag is required to document private things + if (!JSDOC.opt.p && symbol.isPrivate) return; // issue #161 fixed by mcbain.asm + + // ignored things are not documented, this doesn't cascade + if (symbol.isIgnored) return; + JSDOC.Parser.symbols.addSymbol(symbol); + }, + + addBuiltin: function(name) { + var builtin = new JSDOC.Symbol(name, [], "CONSTRUCTOR", new JSDOC.DocComment("")); + builtin.isNamespace = true; + builtin.srcFile = ""; + builtin.isPrivate = false; + JSDOC.Parser.addSymbol(builtin); + return builtin; + }, + + init: function() { + JSDOC.Parser.symbols = new JSDOC.SymbolSet(); + JSDOC.Parser.walker = new JSDOC.Walker(); + }, + + finish: function() { + JSDOC.Parser.symbols.relate(); + + // make a litle report about what was found + if (JSDOC.Parser.conf.explain) { + var symbols = JSDOC.Parser.symbols.toArray(); + var srcFile = ""; + for (var i = 0, l = symbols.length; i < l; i++) { + var symbol = symbols[i]; + if (srcFile != symbol.srcFile) { + srcFile = symbol.srcFile; + print("\n"+srcFile+"\n-------------------"); + } + print(i+":\n alias => "+symbol.alias + "\n name => "+symbol.name+ "\n isa => "+symbol.isa + "\n memberOf => " + symbol.memberOf + "\n isStatic => " + symbol.isStatic + ", isInner => " + symbol.isInner+ ", isPrivate => " + symbol.isPrivate); + } + print("-------------------\n"); + } + } +} + +JSDOC.Parser.parse = function(/**JSDOC.TokenStream*/ts, /**String*/srcFile) { + JSDOC.Symbol.srcFile = (srcFile || ""); + JSDOC.DocComment.shared = ""; // shared comments don't cross file boundaries + + if (!JSDOC.Parser.walker) JSDOC.Parser.init(); + JSDOC.Parser.walker.walk(ts); // adds to our symbols + + // filter symbols by option + for (var p = JSDOC.Parser.symbols._index.first(); p; p = JSDOC.Parser.symbols._index.next()) { + var symbol = p.value; + + if (!symbol) continue; + + if (symbol.is("FILE") || symbol.is("GLOBAL")) { + continue; + } + else if (!JSDOC.opt.a && !symbol.comment.isUserComment) { + JSDOC.Parser.symbols.deleteSymbol(symbol.alias); + } + + if (/#$/.test(symbol.alias)) { // we don't document prototypes + JSDOC.Parser.symbols.deleteSymbol(symbol.alias); + } + } + + return JSDOC.Parser.symbols.toArray(); +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js b/utils/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js new file mode 100755 index 0000000..9c91193 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js @@ -0,0 +1,33 @@ +/** + @namespace Holds functionality related to running plugins. +*/ +JSDOC.PluginManager = { +} + +/** + @param name A unique name that identifies that plugin. + @param handlers A collection of named functions. The names correspond to hooks in the core code. +*/ +JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handlers) { + if (!defined(JSDOC.PluginManager.plugins)) + /** The collection of all plugins. Requires a unique name for each. + */ + JSDOC.PluginManager.plugins = {}; + + + JSDOC.PluginManager.plugins[name] = handlers; +} + +/** + @param hook The name of the hook that is being caught. + @param target Any object. This will be passed as the only argument to the handler whose + name matches the hook name. Handlers cannot return a value, so must modify the target + object to have an effect. +*/ +JSDOC.PluginManager.run = function(/**String*/hook, /**Mixed*/target) { + for (var name in JSDOC.PluginManager.plugins) { + if (defined(JSDOC.PluginManager.plugins[name][hook])) { + JSDOC.PluginManager.plugins[name][hook](target); + } + } +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Symbol.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Symbol.js new file mode 100755 index 0000000..c5b76a8 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Symbol.js @@ -0,0 +1,645 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + Create a new Symbol. + @class Represents a symbol in the source code. + */ +JSDOC.Symbol = function() { + this.init(); + if (arguments.length) this.populate.apply(this, arguments); +} + +JSDOC.Symbol.count = 0; + +JSDOC.Symbol.prototype.init = function() { + this._name = ""; + this._params = []; + this.$args = []; + this.addOn = ""; + this.alias = ""; + this.augments = []; + this.author = ""; + this.classDesc = ""; + this.comment = {}; + this.defaultValue = undefined; + this.deprecated = ""; + this.desc = ""; + this.example = []; + this.exceptions = []; + this.fires = []; + this.id = JSDOC.Symbol.count++; + this.inherits = []; + this.inheritsFrom = []; + this.isa = "OBJECT"; + this.isConstant = false; + this.isEvent = false; + this.isIgnored = false; + this.isInner = false; + this.isNamespace = false; + this.isPrivate = false; + this.isStatic = false; + this.memberOf = ""; + this.methods = []; + this.properties = []; + this.requires = []; + this.returns = []; + this.see = []; + this.since = ""; + this.srcFile = {}; + this.type = ""; + this.version = ""; +} + +JSDOC.Symbol.prototype.serialize = function() { + var keys = []; + for (var p in this) { + keys.push (p); + } + keys = keys.sort(); + + var out = ""; + for (var i in keys) { + if (typeof this[keys[i]] == "function") continue; + out += keys[i]+" => "+Dumper.dump(this[keys[i]])+",\n"; + } + return "\n{\n" + out + "}\n"; +} + +JSDOC.Symbol.prototype.clone = function() { + var clone = new JSDOC.Symbol(); + clone.populate.apply(clone, this.$args); // repopulate using the original arguments + clone.srcFile = this.srcFile; // not the current srcFile, the one when the original was made + return clone; +} + +JSDOC.Symbol.prototype.__defineSetter__("name", + function(n) { n = n.replace(/^_global_[.#-]/, ""); n = n.replace(/\.prototype\.?/g, '#'); this._name = n; } +); +JSDOC.Symbol.prototype.__defineGetter__("name", + function() { return this._name; } +); +JSDOC.Symbol.prototype.__defineSetter__("params", + function(v) { + for (var i = 0, l = v.length; i < l; i++) { + if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...} + this._params[i] = new JSDOC.DocTag("param"+((v[i].type)?" {"+v[i].type+"}":"")+" "+v[i].name); + } + else { + this._params[i] = v[i]; + } + } + } +); +JSDOC.Symbol.prototype.__defineGetter__("params", + function() { return this._params; } +); + +JSDOC.Symbol.prototype.getEvents = function() { + var events = []; + for (var i = 0, l = this.methods.length; i < l; i++) { + if (this.methods[i].isEvent) { + this.methods[i].name = this.methods[i].name.replace("event:", ""); + events.push(this.methods[i]); + } + } + return events; +} + +JSDOC.Symbol.prototype.getMethods = function() { + var nonEvents = []; + for (var i = 0, l = this.methods.length; i < l; i++) { + if (!this.methods[i].isEvent) { + nonEvents.push(this.methods[i]); + } + } + return nonEvents; +} + + +JSDOC.Symbol.prototype.populate = function( + /** String */ name, + /** Object[] */ params, + /** String */ isa, + /** JSDOC.DocComment */ comment +) { + this.$args = arguments; + + this.name = name; + this.alias = this.name; + + this.params = params; + this.isa = (isa == "VIRTUAL")? "OBJECT":isa; + this.comment = comment || new JSDOC.DocComment(""); + this.srcFile = JSDOC.Symbol.srcFile; + + if (this.is("FILE") && !this.alias) this.alias = this.srcFile; + + this.setTags(); + + if (typeof JSDOC.PluginManager != "undefined") { + JSDOC.PluginManager.run("onSymbol", this); + } +} + +JSDOC.Symbol.prototype.setTags = function() { + // @author + var authors = this.comment.getTag("author"); + if (authors.length) { + this.author = authors.map(function($){return $.desc;}).join(", "); + } + + /*t: + plan(34, "testing JSDOC.Symbol"); + + requires("../lib/JSDOC/DocComment.js"); + requires("../frame/String.js"); + requires("../lib/JSDOC/DocTag.js"); + + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/")); + is(sym.author, "Joe Smith", "@author tag, author is found."); + */ + + // @desc + var descs = this.comment.getTag("desc"); + if (descs.length) { + this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/")); + is(sym.desc, "This is a description.", "@desc tag, description is found."); + */ + + // @overview + if (this.is("FILE")) { + if (!this.alias) this.alias = this.srcFile; + + var overviews = this.comment.getTag("overview"); + if (overviews.length) { + this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n"); + } + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/")); + is(sym.desc, "\nThis is an overview.", "@overview tag, description is found."); + */ + + // @since + var sinces = this.comment.getTag("since"); + if (sinces.length) { + this.since = sinces.map(function($){return $.desc;}).join(", "); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/")); + is(sym.since, "1.01", "@since tag, description is found."); + */ + + // @constant + if (this.comment.getTag("constant").length) { + this.isConstant = true; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/")); + is(sym.isConstant, true, "@constant tag, isConstant set."); + */ + + // @version + var versions = this.comment.getTag("version"); + if (versions.length) { + this.version = versions.map(function($){return $.desc;}).join(", "); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/")); + is(sym.version, "2.0x", "@version tag, version is found."); + */ + + // @deprecated + var deprecateds = this.comment.getTag("deprecated"); + if (deprecateds.length) { + this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n"); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/")); + is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found."); + */ + + // @example + var examples = this.comment.getTag("example"); + if (examples.length) { + this.example = examples.map( + // trim trailing whitespace + function($) { + $.desc = $.desc.replace(/\s+$/, ""); + return $; + } + ); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/")); + isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array."); + is(sym.example[0], "This\n is an example.", "@example tag, desc is found."); + */ + + // @see + var sees = this.comment.getTag("see"); + if (sees.length) { + var thisSee = this.see; + sees.map(function($){thisSee.push($.desc);}); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/")); + is(sym.see, "The other thing.", "@see tag, desc is found."); + */ + + // @class + var classes = this.comment.getTag("class"); + if (classes.length) { + this.isa = "CONSTRUCTOR"; + this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none. + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/")); + is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor."); + is(sym.classDesc, "This describes the class.", "@class tag, class description is found."); + */ + + // @namespace + var namespaces = this.comment.getTag("namespace"); + if (namespaces.length) { + this.classDesc = namespaces[0].desc; + this.isNamespace = true; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/")); + is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found."); + */ + + // @param + var params = this.comment.getTag("param"); + if (params.length) { + // user-defined params overwrite those with same name defined by the parser + var thisParams = this.params; + + if (thisParams.length == 0) { // none exist yet, so just bung all these user-defined params straight in + this.params = params; + } + else { // need to overlay these user-defined params on to existing parser-defined params + for (var i = 0, l = params.length; i < l; i++) { + if (thisParams[i]) { + if (params[i].type) thisParams[i].type = params[i].type; + thisParams[i].name = params[i].name; + thisParams[i].desc = params[i].desc; + thisParams[i].isOptional = params[i].isOptional; + thisParams[i].defaultValue = params[i].defaultValue; + } + else thisParams[i] = params[i]; + } + } + } + + /*t: + var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/")); + is(sym.params.length, 1, "parser defined param is found."); + + sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/")); + is(sym.params.length, 1, "user defined param is found."); + is(sym.params[0].type, "array", "user defined param type is found."); + is(sym.params[0].name, "pages", "user defined param name is found."); + + sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); + is(sym.params.length, 1, "user defined param overwrites parser defined param."); + is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type."); + is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name."); + + sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); + is(sym.params.length, 2, "user defined params overlay parser defined params."); + is(sym.params[1].type, "number", "user defined param type overlays parser defined param type."); + is(sym.params[1].name, "count", "user defined param name overlays parser defined param name."); + + sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages The pages description.*"+"/")); + is(sym.params.length, 1, "user defined param with description is found."); + is(sym.params[0].desc, "The pages description.", "user defined param description is found."); + */ + + // @constructor + if (this.comment.getTag("constructor").length) { + this.isa = "CONSTRUCTOR"; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/")); + is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor."); + */ + + // @static + if (this.comment.getTag("static").length) { + this.isStatic = true; + if (this.isa == "CONSTRUCTOR") { + this.isNamespace = true; + } + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/")); + is(sym.isStatic, true, "@static tag, makes isStatic true."); + is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true."); + */ + + // @inner + if (this.comment.getTag("inner").length) { + this.isInner = true; + this.isStatic = false; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/")); + is(sym.isStatic, false, "@inner tag, makes isStatic false."); + is(sym.isInner, true, "@inner makes isInner true."); + */ + + // @name + var names = this.comment.getTag("name"); + if (names.length) { + this.name = names[0].desc; + } + + /*t: + // todo + */ + + // @field + if (this.comment.getTag("field").length) { + this.isa = "OBJECT"; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/")); + is(sym.isa, "OBJECT", "@field tag, makes symbol an object."); + */ + + // @function + if (this.comment.getTag("function").length) { + this.isa = "FUNCTION"; + if (/event:/.test(this.alias)) this.isEvent = true; + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/")); + is(sym.isa, "FUNCTION", "@function tag, makes symbol a function."); + */ + + // @event + var events = this.comment.getTag("event"); + if (events.length) { + this.isa = "FUNCTION"; + this.isEvent = true; + if (!/event:/.test(this.alias)) + this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2"); + } + + /*t: + var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/")); + is(sym.isa, "FUNCTION", "@event tag, makes symbol a function."); + is(sym.isEvent, true, "@event makes isEvent true."); + */ + + // @fires + var fires = this.comment.getTag("fires"); + if (fires.length) { + for (var i = 0; i < fires.length; i++) { + this.fires.push(fires[i].desc); + } + } + + /*t: + // todo + */ + + // @property + var properties = this.comment.getTag("property"); + if (properties.length) { + thisProperties = this.properties; + for (var i = 0; i < properties.length; i++) { + var property = new JSDOC.Symbol(this.alias+"#"+properties[i].name, [], "OBJECT", new JSDOC.DocComment("/**"+properties[i].desc+"\n@name "+properties[i].name+"\n@memberOf "+this.alias+"#*/")); + // TODO: shouldn't the following happen in the addProperty method of Symbol? + property.name = properties[i].name; + property.memberOf = this.alias; + if (properties[i].type) property.type = properties[i].type; + if (properties[i].defaultValue) property.defaultValue = properties[i].defaultValue; + this.addProperty(property); + JSDOC.Parser.addSymbol(property); + } + } + + /*t: + // todo + */ + + // @return + var returns = this.comment.getTag("return"); + if (returns.length) { // there can be many return tags in a single doclet + this.returns = returns; + this.type = returns.map(function($){return $.type}).join(", "); + } + + /*t: + // todo + */ + + // @exception + this.exceptions = this.comment.getTag("throws"); + + /*t: + // todo + */ + + // @requires + var requires = this.comment.getTag("requires"); + if (requires.length) { + this.requires = requires.map(function($){return $.desc}); + } + + /*t: + // todo + */ + + // @type + var types = this.comment.getTag("type"); + if (types.length) { + this.type = types[0].desc; //multiple type tags are ignored + } + + /*t: + // todo + */ + + // @private + if (this.comment.getTag("private").length || this.isInner) { + this.isPrivate = true; + } + + // @ignore + if (this.comment.getTag("ignore").length) { + this.isIgnored = true; + } + + /*t: + // todo + */ + + // @inherits ... as ... + var inherits = this.comment.getTag("inherits"); + if (inherits.length) { + for (var i = 0; i < inherits.length; i++) { + if (/^\s*([a-z$0-9_.#:-]+)(?:\s+as\s+([a-z$0-9_.#:-]+))?/i.test(inherits[i].desc)) { + var inAlias = RegExp.$1; + var inAs = RegExp.$2 || inAlias; + + if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#"); + + if (inAs) { + inAs = inAs.replace(/\.prototype\.?/g, "#"); + inAs = inAs.replace(/^this\.?/, "#"); + } + + if (inAs.indexOf(inAlias) != 0) { //not a full namepath + var joiner = "."; + if (this.alias.charAt(this.alias.length-1) == "#" || inAs.charAt(0) == "#") { + joiner = ""; + } + inAs = this.alias + joiner + inAs; + } + } + this.inherits.push({alias: inAlias, as: inAs}); + } + } + + /*t: + // todo + */ + + // @augments + this.augments = this.comment.getTag("augments"); + + // @default + var defaults = this.comment.getTag("default"); + if (defaults.length) { + if (this.is("OBJECT")) { + this.defaultValue = defaults[0].desc; + } + } + + /*t: + // todo + */ + + // @memberOf + var memberOfs = this.comment.getTag("memberOf"); + if (memberOfs.length) { + this.memberOf = memberOfs[0].desc; + this.memberOf = this.memberOf.replace(/\.prototype\.?/g, "#"); + } + + /*t: + // todo + */ + + // @public + if (this.comment.getTag("public").length) { + this.isPrivate = false; + } + + /*t: + // todo + */ + + if (JSDOC.PluginManager) { + JSDOC.PluginManager.run("onSetTags", this); + } +} + +JSDOC.Symbol.prototype.is = function(what) { + return this.isa === what; +} + +JSDOC.Symbol.prototype.isBuiltin = function() { + return JSDOC.Lang.isBuiltin(this.alias); +} + +JSDOC.Symbol.prototype.setType = function(/**String*/comment, /**Boolean*/overwrite) { + if (!overwrite && this.type) return; + var typeComment = JSDOC.DocComment.unwrapComment(comment); + this.type = typeComment; +} + +JSDOC.Symbol.prototype.inherit = function(symbol) { + if (!this.hasMember(symbol.name) && !symbol.isInner) { + if (symbol.is("FUNCTION")) + this.methods.push(symbol); + else if (symbol.is("OBJECT")) + this.properties.push(symbol); + } +} + +JSDOC.Symbol.prototype.hasMember = function(name) { + return (this.hasMethod(name) || this.hasProperty(name)); +} + +JSDOC.Symbol.prototype.addMember = function(symbol) { + if (symbol.is("FUNCTION")) { this.addMethod(symbol); } + else if (symbol.is("OBJECT")) { this.addProperty(symbol); } +} + +JSDOC.Symbol.prototype.hasMethod = function(name) { + var thisMethods = this.methods; + for (var i = 0, l = thisMethods.length; i < l; i++) { + if (thisMethods[i].name == name) return true; + if (thisMethods[i].alias == name) return true; + } + return false; +} + +JSDOC.Symbol.prototype.addMethod = function(symbol) { + var methodAlias = symbol.alias; + var thisMethods = this.methods; + for (var i = 0, l = thisMethods.length; i < l; i++) { + if (thisMethods[i].alias == methodAlias) { + thisMethods[i] = symbol; // overwriting previous method + return; + } + } + thisMethods.push(symbol); // new method with this alias +} + +JSDOC.Symbol.prototype.hasProperty = function(name) { + var thisProperties = this.properties; + for (var i = 0, l = thisProperties.length; i < l; i++) { + if (thisProperties[i].name == name) return true; + if (thisProperties[i].alias == name) return true; + } + return false; +} + +JSDOC.Symbol.prototype.addProperty = function(symbol) { + var propertyAlias = symbol.alias; + var thisProperties = this.properties; + for (var i = 0, l = thisProperties.length; i < l; i++) { + if (thisProperties[i].alias == propertyAlias) { + thisProperties[i] = symbol; // overwriting previous property + return; + } + } + + thisProperties.push(symbol); // new property with this alias +} + +JSDOC.Symbol.srcFile = ""; //running reference to the current file being parsed diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js b/utils/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js new file mode 100755 index 0000000..82657e4 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js @@ -0,0 +1,241 @@ +/** @constructor */ +JSDOC.SymbolSet = function() { + this.init(); +} + +JSDOC.SymbolSet.prototype.init = function() { + this._index = new Hash(); +} + +JSDOC.SymbolSet.prototype.keys = function() { + return this._index.keys(); +} + +JSDOC.SymbolSet.prototype.hasSymbol = function(alias) { + return this._index.hasKey(alias); +} + +JSDOC.SymbolSet.prototype.addSymbol = function(symbol) { + if (this.hasSymbol(symbol.alias)) { + LOG.warn("Overwriting symbol documentation for: "+symbol.alias + "."); + } + this._index.set(symbol.alias, symbol); +} + +JSDOC.SymbolSet.prototype.getSymbol = function(alias) { + if (this.hasSymbol(alias)) return this._index.get(alias); +} + +JSDOC.SymbolSet.prototype.getSymbolByName = function(name) { + for (var p = this._index.first(); p; p = this._index.next()) { + var symbol = p.value; + if (symbol.name == name) return symbol; + } +} + +JSDOC.SymbolSet.prototype.toArray = function() { + return this._index.values(); +} + +JSDOC.SymbolSet.prototype.deleteSymbol = function(alias) { + if (!this.hasSymbol(alias)) return; + this._index.drop(alias); +} + +JSDOC.SymbolSet.prototype.renameSymbol = function(oldName, newName) { + // todo: should check if oldname or newname already exist + this._index.replace(oldName, newName); + this._index.get(newName).alias = newName; + return newName; +} + +JSDOC.SymbolSet.prototype.relate = function() { + this.resolveBorrows(); + this.resolveMemberOf(); + this.resolveAugments(); +} + +JSDOC.SymbolSet.prototype.resolveBorrows = function() { + for (var p = this._index.first(); p; p = this._index.next()) { + var symbol = p.value; + if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; + + var borrows = symbol.inherits; + for (var i = 0; i < borrows.length; i++) { + +if (/#$/.test(borrows[i].alias)) { + LOG.warn("Attempted to borrow entire instance of "+borrows[i].alias+" but that feature is not yet implemented."); + return; +} + var borrowed = this.getSymbol(borrows[i].alias); + + if (!borrowed) { + LOG.warn("Can't borrow undocumented "+borrows[i].alias+"."); + continue; + } + + if (borrows[i].as == borrowed.alias) { + var assumedName = borrowed.name.split(/([#.-])/).pop(); + borrows[i].as = symbol.name+RegExp.$1+assumedName; + LOG.inform("Assuming borrowed as name is "+borrows[i].as+" but that feature is experimental."); + } + + var borrowAsName = borrows[i].as; + var borrowAsAlias = borrowAsName; + if (!borrowAsName) { + LOG.warn("Malformed @borrow, 'as' is required."); + continue; + } + + if (borrowAsName.length > symbol.alias.length && borrowAsName.indexOf(symbol.alias) == 0) { + borrowAsName = borrowAsName.replace(borrowed.alias, "") + } + else { + var joiner = ""; + if (borrowAsName.charAt(0) != "#") joiner = "."; + borrowAsAlias = borrowed.alias + joiner + borrowAsName; + } + + borrowAsName = borrowAsName.replace(/^[#.]/, ""); + + if (this.hasSymbol(borrowAsAlias)) continue; + + var clone = borrowed.clone(); + clone.name = borrowAsName; + clone.alias = borrowAsAlias; + this.addSymbol(clone); + } + } +} + +JSDOC.SymbolSet.prototype.resolveMemberOf = function() { + for (var p = this._index.first(); p; p = this._index.next()) { + var symbol = p.value; + if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; + + // the memberOf value was provided in the @memberOf tag + else if (symbol.memberOf) { + + // like foo.bar is a memberOf foo + if (symbol.alias.indexOf(symbol.memberOf) == 0) { + var memberMatch = new RegExp("^("+symbol.memberOf+")[.#-]?(.+)$"); + var aliasParts = symbol.alias.match(memberMatch); + + if (aliasParts) { + symbol.memberOf = aliasParts[1]; + symbol.name = aliasParts[2]; + } + + var nameParts = symbol.name.match(memberMatch); + + if (nameParts) { + symbol.name = nameParts[2]; + } + } + // like bar is a memberOf foo + else { + var joiner = symbol.memberOf.charAt(symbol.memberOf.length-1); + if (!/[.#-]/.test(joiner)) symbol.memberOf += "."; + this.renameSymbol(symbol.alias, symbol.memberOf + symbol.name); + } + } + // the memberOf must be calculated + else { + var parts = symbol.alias.match(/^(.*[.#-])([^.#-]+)$/); + if (parts) { + symbol.memberOf = parts[1]; + symbol.name = parts[2]; + } + } + + // set isStatic, isInner + if (symbol.memberOf) { + switch (symbol.memberOf.charAt(symbol.memberOf.length-1)) { + case '#' : + symbol.isStatic = false; + symbol.isInner = false; + break; + case '.' : + symbol.isStatic = true; + symbol.isInner = false; + break; + case '-' : + symbol.isStatic = false; + symbol.isInner = true; + break; + default: // memberOf ends in none of the above + symbol.isStatic = true; + break; + } + } + + // unowned methods and fields belong to the global object + if (!symbol.is("CONSTRUCTOR") && !symbol.isNamespace && symbol.memberOf == "") { + symbol.memberOf = "_global_"; + } + + // clean up + if (symbol.memberOf.match(/[.#-]$/)) { + symbol.memberOf = symbol.memberOf.substr(0, symbol.memberOf.length-1); + } + // add to parent's methods or properties list + if (symbol.memberOf) { + + var container = this.getSymbol(symbol.memberOf); + if (!container) { + if (JSDOC.Lang.isBuiltin(symbol.memberOf)) container = JSDOC.Parser.addBuiltin(symbol.memberOf); + else { + LOG.warn("Trying to document "+symbol.name +" as a member of undocumented symbol "+symbol.memberOf+"."); + } + } + + if (container) container.addMember(symbol); + } + } +} + +JSDOC.SymbolSet.prototype.resolveAugments = function() { + for (var p = this._index.first(); p; p = this._index.next()) { + var symbol = p.value; + + if (symbol.alias == "_global_" || symbol.is("FILE")) continue; + JSDOC.SymbolSet.prototype.walk.apply(this, [symbol]); + } +} + +JSDOC.SymbolSet.prototype.walk = function(symbol) { + var augments = symbol.augments; + for(var i = 0; i < augments.length; i++) { + var contributer = this.getSymbol(augments[i]); + if (!contributer && JSDOC.Lang.isBuiltin(''+augments[i])) { + contributer = new JSDOC.Symbol("_global_."+augments[i], [], augments[i], new JSDOC.DocComment("Built in.")); + contributer.isNamespace = true; + contributer.srcFile = ""; + contributer.isPrivate = false; + JSDOC.Parser.addSymbol(contributer); + } + + if (contributer) { + if (contributer.augments.length) { + JSDOC.SymbolSet.prototype.walk.apply(this, [contributer]); + } + + symbol.inheritsFrom.push(contributer.alias); + //if (!isUnique(symbol.inheritsFrom)) { + // LOG.warn("Can't resolve augments: Circular reference: "+symbol.alias+" inherits from "+contributer.alias+" more than once."); + //} + //else { + var cmethods = contributer.methods; + var cproperties = contributer.properties; + + for (var ci = 0, cl = cmethods.length; ci < cl; ci++) { + if (!cmethods[ci].isStatic) symbol.inherit(cmethods[ci]); + } + for (var ci = 0, cl = cproperties.length; ci < cl; ci++) { + if (!cproperties[ci].isStatic) symbol.inherit(cproperties[ci]); + } + //} + } + else LOG.warn("Can't augment contributer: "+augments[i]+", not found."); + } +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/TextStream.js b/utils/jsdoc-toolkit/app/lib/JSDOC/TextStream.js new file mode 100755 index 0000000..ccc48a8 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/TextStream.js @@ -0,0 +1,41 @@ + +/** + @constructor +*/ +JSDOC.TextStream = function(text) { + if (typeof(text) == "undefined") text = ""; + text = ""+text; + this.text = text; + this.cursor = 0; +} + +JSDOC.TextStream.prototype.look = function(n) { + if (typeof n == "undefined") n = 0; + + if (this.cursor+n < 0 || this.cursor+n >= this.text.length) { + var result = new String(""); + result.eof = true; + return result; + } + return this.text.charAt(this.cursor+n); +} + +JSDOC.TextStream.prototype.next = function(n) { + if (typeof n == "undefined") n = 1; + if (n < 1) return null; + + var pulled = ""; + for (var i = 0; i < n; i++) { + if (this.cursor+i < this.text.length) { + pulled += this.text.charAt(this.cursor+i); + } + else { + var result = new String(""); + result.eof = true; + return result; + } + } + + this.cursor += n; + return pulled; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Token.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Token.js new file mode 100755 index 0000000..fb7f9d9 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Token.js @@ -0,0 +1,18 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + @constructor +*/ +JSDOC.Token = function(data, type, name) { + this.data = data; + this.type = type; + this.name = name; +} + +JSDOC.Token.prototype.toString = function() { + return "<"+this.type+" name=\""+this.name+"\">"+this.data+"</"+this.type+">"; +} + +JSDOC.Token.prototype.is = function(what) { + return this.name === what || this.type === what; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js b/utils/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js new file mode 100755 index 0000000..9f658fb --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js @@ -0,0 +1,332 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + @class Search a {@link JSDOC.TextStream} for language tokens. +*/ +JSDOC.TokenReader = function() { + this.keepDocs = true; + this.keepWhite = false; + this.keepComments = false; +} + +/** + @type {JSDOC.Token[]} + */ +JSDOC.TokenReader.prototype.tokenize = function(/**JSDOC.TextStream*/stream) { + var tokens = []; + /**@ignore*/ tokens.last = function() { return tokens[tokens.length-1]; } + /**@ignore*/ tokens.lastSym = function() { + for (var i = tokens.length-1; i >= 0; i--) { + if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i]; + } + } + + while (!stream.look().eof) { + if (this.read_mlcomment(stream, tokens)) continue; + if (this.read_slcomment(stream, tokens)) continue; + if (this.read_dbquote(stream, tokens)) continue; + if (this.read_snquote(stream, tokens)) continue; + if (this.read_regx(stream, tokens)) continue; + if (this.read_numb(stream, tokens)) continue; + if (this.read_punc(stream, tokens)) continue; + if (this.read_newline(stream, tokens)) continue; + if (this.read_space(stream, tokens)) continue; + if (this.read_word(stream, tokens)) continue; + + // if execution reaches here then an error has happened + tokens.push(new JSDOC.Token(stream.next(), "TOKN", "UNKNOWN_TOKEN")); + } + return tokens; +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_word = function(/**JSDOC.TokenStream*/stream, tokens) { + var found = ""; + while (!stream.look().eof && JSDOC.Lang.isWordChar(stream.look())) { + found += stream.next(); + } + + if (found === "") { + return false; + } + else { + var name; + if ((name = JSDOC.Lang.keyword(found))) tokens.push(new JSDOC.Token(found, "KEYW", name)); + else tokens.push(new JSDOC.Token(found, "NAME", "NAME")); + return true; + } +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_punc = function(/**JSDOC.TokenStream*/stream, tokens) { + var found = ""; + var name; + while (!stream.look().eof && JSDOC.Lang.punc(found+stream.look())) { + found += stream.next(); + } + + if (found === "") { + return false; + } + else { + tokens.push(new JSDOC.Token(found, "PUNC", JSDOC.Lang.punc(found))); + return true; + } +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_space = function(/**JSDOC.TokenStream*/stream, tokens) { + var found = ""; + + while (!stream.look().eof && JSDOC.Lang.isSpace(stream.look())) { + found += stream.next(); + } + + if (found === "") { + return false; + } + else { + if (this.collapseWhite) found = " "; + if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "SPACE")); + return true; + } +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_newline = function(/**JSDOC.TokenStream*/stream, tokens) { + var found = ""; + + while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())) { + found += stream.next(); + } + + if (found === "") { + return false; + } + else { + if (this.collapseWhite) found = "\n"; + if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "NEWLINE")); + return true; + } +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_mlcomment = function(/**JSDOC.TokenStream*/stream, tokens) { + if (stream.look() == "/" && stream.look(1) == "*") { + var found = stream.next(2); + + while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) { + found += stream.next(); + } + + // to start doclet we allow /** or /*** but not /**/ or /**** + if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new JSDOC.Token(found, "COMM", "JSDOC")); + else if (this.keepComments) tokens.push(new JSDOC.Token(found, "COMM", "MULTI_LINE_COMM")); + return true; + } + return false; +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_slcomment = function(/**JSDOC.TokenStream*/stream, tokens) { + var found; + if ( + (stream.look() == "/" && stream.look(1) == "/" && (found=stream.next(2))) + || + (stream.look() == "<" && stream.look(1) == "!" && stream.look(2) == "-" && stream.look(3) == "-" && (found=stream.next(4))) + ) { + + while (!stream.look().eof && !JSDOC.Lang.isNewline(stream.look())) { + found += stream.next(); + } + + if (this.keepComments) { + tokens.push(new JSDOC.Token(found, "COMM", "SINGLE_LINE_COMM")); + } + return true; + } + return false; +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_dbquote = function(/**JSDOC.TokenStream*/stream, tokens) { + if (stream.look() == "\"") { + // find terminator + var string = stream.next(); + + while (!stream.look().eof) { + if (stream.look() == "\\") { + if (JSDOC.Lang.isNewline(stream.look(1))) { + do { + stream.next(); + } while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())); + string += "\\\n"; + } + else { + string += stream.next(2); + } + } + else if (stream.look() == "\"") { + string += stream.next(); + tokens.push(new JSDOC.Token(string, "STRN", "DOUBLE_QUOTE")); + return true; + } + else { + string += stream.next(); + } + } + } + return false; // error! unterminated string +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_snquote = function(/**JSDOC.TokenStream*/stream, tokens) { + if (stream.look() == "'") { + // find terminator + var string = stream.next(); + + while (!stream.look().eof) { + if (stream.look() == "\\") { // escape sequence + string += stream.next(2); + } + else if (stream.look() == "'") { + string += stream.next(); + tokens.push(new JSDOC.Token(string, "STRN", "SINGLE_QUOTE")); + return true; + } + else { + string += stream.next(); + } + } + } + return false; // error! unterminated string +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, tokens) { + if (stream.look() === "0" && stream.look(1) == "x") { + return this.read_hex(stream, tokens); + } + + var found = ""; + + while (!stream.look().eof && JSDOC.Lang.isNumber(found+stream.look())){ + found += stream.next(); + } + + if (found === "") { + return false; + } + else { + if (/^0[0-7]/.test(found)) tokens.push(new JSDOC.Token(found, "NUMB", "OCTAL")); + else tokens.push(new JSDOC.Token(found, "NUMB", "DECIMAL")); + return true; + } +} +/*t: + requires("../lib/JSDOC/TextStream.js"); + requires("../lib/JSDOC/Token.js"); + requires("../lib/JSDOC/Lang.js"); + + plan(3, "testing JSDOC.TokenReader.prototype.read_numb"); + + //// setup + var src = "function foo(num){while (num+8.0 >= 0x20 && num < 0777){}}"; + var tr = new JSDOC.TokenReader(); + var tokens = tr.tokenize(new JSDOC.TextStream(src)); + + var hexToken, octToken, decToken; + for (var i = 0; i < tokens.length; i++) { + if (tokens[i].name == "HEX_DEC") hexToken = tokens[i]; + if (tokens[i].name == "OCTAL") octToken = tokens[i]; + if (tokens[i].name == "DECIMAL") decToken = tokens[i]; + } + //// + + is(decToken.data, "8.0", "decimal number is found in source."); + is(hexToken.data, "0x20", "hexdec number is found in source (issue #99)."); + is(octToken.data, "0777", "octal number is found in source."); +*/ + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_hex = function(/**JSDOC.TokenStream*/stream, tokens) { + var found = stream.next(2); + + while (!stream.look().eof) { + if (JSDOC.Lang.isHexDec(found) && !JSDOC.Lang.isHexDec(found+stream.look())) { // done + tokens.push(new JSDOC.Token(found, "NUMB", "HEX_DEC")); + return true; + } + else { + found += stream.next(); + } + } + return false; +} + +/** + @returns {Boolean} Was the token found? + */ +JSDOC.TokenReader.prototype.read_regx = function(/**JSDOC.TokenStream*/stream, tokens) { + var last; + if ( + stream.look() == "/" + && + ( + + ( + !(last = tokens.lastSym()) // there is no last, the regex is the first symbol + || + ( + !last.is("NUMB") + && !last.is("NAME") + && !last.is("RIGHT_PAREN") + && !last.is("RIGHT_BRACKET") + ) + ) + ) + ) { + var regex = stream.next(); + + while (!stream.look().eof) { + if (stream.look() == "\\") { // escape sequence + regex += stream.next(2); + } + else if (stream.look() == "/") { + regex += stream.next(); + + while (/[gmi]/.test(stream.look())) { + regex += stream.next(); + } + + tokens.push(new JSDOC.Token(regex, "REGX", "REGX")); + return true; + } + else { + regex += stream.next(); + } + } + // error: unterminated regex + } + return false; +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js b/utils/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js new file mode 100755 index 0000000..1eeb44c --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js @@ -0,0 +1,133 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** + @constructor +*/ +JSDOC.TokenStream = function(tokens) { + this.tokens = (tokens || []); + this.rewind(); +} + +/** + @constructor + @private +*/ +function VoidToken(/**String*/type) { + this.toString = function() {return "<VOID type=\""+type+"\">"}; + this.is = function(){return false;} +} + +JSDOC.TokenStream.prototype.rewind = function() { + this.cursor = -1; +} + +/** + @type JSDOC.Token +*/ +JSDOC.TokenStream.prototype.look = function(/**Number*/n, /**Boolean*/considerWhitespace) { + if (typeof n == "undefined") n = 0; + + if (considerWhitespace == true) { + if (this.cursor+n < 0 || this.cursor+n > this.tokens.length) return {}; + return this.tokens[this.cursor+n]; + } + else { + var count = 0; + var i = this.cursor; + + while (true) { + if (i < 0) return new JSDOC.Token("", "VOID", "START_OF_STREAM"); + else if (i > this.tokens.length) return new JSDOC.Token("", "VOID", "END_OF_STREAM"); + + if (i != this.cursor && (this.tokens[i] === undefined || this.tokens[i].is("WHIT"))) { + if (n < 0) i--; else i++; + continue; + } + + if (count == Math.abs(n)) { + return this.tokens[i]; + } + count++; + (n < 0)? i-- : i++; + } + + return new JSDOC.Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object + } +} + +/** + @type JSDOC.Token|JSDOC.Token[] +*/ +JSDOC.TokenStream.prototype.next = function(/**Number*/howMany) { + if (typeof howMany == "undefined") howMany = 1; + if (howMany < 1) return null; + var got = []; + + for (var i = 1; i <= howMany; i++) { + if (this.cursor+i >= this.tokens.length) { + return null; + } + got.push(this.tokens[this.cursor+i]); + } + this.cursor += howMany; + + if (howMany == 1) { + return got[0]; + } + else return got; +} + +/** + @type JSDOC.Token[] +*/ +JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop) { + if (!stop) stop = JSDOC.Lang.matching(start); + + var depth = 0; + var got = []; + var started = false; + + while ((token = this.look())) { + if (token.is(start)) { + depth++; + started = true; + } + + if (started) { + got.push(token); + } + + if (token.is(stop)) { + depth--; + if (depth == 0) return got; + } + if (!this.next()) break; + } +} + +JSDOC.TokenStream.prototype.getMatchingToken = function(/**String*/start, /**String*/stop) { + var depth = 0; + var cursor = this.cursor; + + if (!start) { + start = JSDOC.Lang.matching(stop); + depth = 1; + } + if (!stop) stop = JSDOC.Lang.matching(start); + + while ((token = this.tokens[cursor])) { + if (token.is(start)) { + depth++; + } + + if (token.is(stop) && cursor) { + depth--; + if (depth == 0) return this.tokens[cursor]; + } + cursor++; + } +} + +JSDOC.TokenStream.prototype.insertAhead = function(/**JSDOC.Token*/token) { + this.tokens.splice(this.cursor+1, 0, token); +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Util.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Util.js new file mode 100755 index 0000000..6d7edb3 --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Util.js @@ -0,0 +1,32 @@ +/** + * @namespace + * @deprecated Use {@link FilePath} instead. + */ +JSDOC.Util = { +} + +/** + * @deprecated Use {@link FilePath.fileName} instead. + */ +JSDOC.Util.fileName = function(path) { + LOG.warn("JSDOC.Util.fileName is deprecated. Use FilePath.fileName instead."); + var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); + return path.substring(nameStart); +} + +/** + * @deprecated Use {@link FilePath.fileExtension} instead. + */ +JSDOC.Util.fileExtension = function(filename) { + LOG.warn("JSDOC.Util.fileExtension is deprecated. Use FilePath.fileExtension instead."); + return filename.split(".").pop().toLowerCase(); +}; + +/** + * @deprecated Use {@link FilePath.dir} instead. + */ +JSDOC.Util.dir = function(path) { + LOG.warn("JSDOC.Util.dir is deprecated. Use FilePath.dir instead."); + var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); + return path.substring(0, nameStart-1); +} diff --git a/utils/jsdoc-toolkit/app/lib/JSDOC/Walker.js b/utils/jsdoc-toolkit/app/lib/JSDOC/Walker.js new file mode 100755 index 0000000..befec4d --- /dev/null +++ b/utils/jsdoc-toolkit/app/lib/JSDOC/Walker.js @@ -0,0 +1,474 @@ +if (typeof JSDOC == "undefined") JSDOC = {}; + +/** @constructor */ +JSDOC.Walker = function(/**JSDOC.TokenStream*/ts) { + this.init(); + if (typeof ts != "undefined") { + this.walk(ts); + } +} + +JSDOC.Walker.prototype.init = function() { + this.ts = null; + + var globalSymbol = new JSDOC.Symbol("_global_", [], "GLOBAL", new JSDOC.DocComment("")); + globalSymbol.isNamespace = true; + globalSymbol.srcFile = ""; + globalSymbol.isPrivate = false; + JSDOC.Parser.addSymbol(globalSymbol); + this.lastDoc = null; + this.token = null; + + /** + The chain of symbols under which we are currently nested. + @type Array + */ + this.namescope = [globalSymbol]; + this.namescope.last = function(n){ if (!n) n = 0; return this[this.length-(1+n)] || "" }; +} + +JSDOC.Walker.prototype.walk = function(/**JSDOC.TokenStream*/ts) { + this.ts = ts; + while (this.token = this.ts.look()) { + if (this.token.popNamescope) { + + var symbol = this.namescope.pop(); + if (symbol.is("FUNCTION")) { + if (this.ts.look(1).is("LEFT_PAREN") && symbol.comment.getTag("function").length == 0) { + symbol.isa = "OBJECT"; + } + } + } + this.step(); + if (!this.ts.next()) break; + } +} + +JSDOC.Walker.prototype.step = function() { + if (this.token.is("JSDOC")) { // it's a doc comment + + var doc = new JSDOC.DocComment(this.token.data); + + + if (doc.getTag("exports").length > 0) { + var exports = doc.getTag("exports")[0]; + + exports.desc.match(/(\S+) as (\S+)/i); + var n1 = RegExp.$1; + var n2 = RegExp.$2; + + if (!n1 && n2) throw "@exports tag requires a value like: 'name as ns.name'"; + + JSDOC.Parser.rename = (JSDOC.Parser.rename || {}); + JSDOC.Parser.rename[n1] = n2 + } + + if (doc.getTag("lends").length > 0) { + var lends = doc.getTag("lends")[0]; + + var name = lends.desc + if (!name) throw "@lends tag requires a value."; + + var symbol = new JSDOC.Symbol(name, [], "OBJECT", doc); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + + this.lastDoc = null; + return true; + } + else if (doc.getTag("name").length > 0 && doc.getTag("overview").length == 0) { // it's a virtual symbol + var virtualName = doc.getTag("name")[0].desc; + if (!virtualName) throw "@name tag requires a value."; + + var symbol = new JSDOC.Symbol(virtualName, [], "VIRTUAL", doc); + + JSDOC.Parser.addSymbol(symbol); + + this.lastDoc = null; + return true; + } + else if (doc.meta) { // it's a meta doclet + if (doc.meta == "@+") JSDOC.DocComment.shared = doc.src; + else if (doc.meta == "@-") JSDOC.DocComment.shared = ""; + else if (doc.meta == "nocode+") JSDOC.Parser.conf.ignoreCode = true; + else if (doc.meta == "nocode-") JSDOC.Parser.conf.ignoreCode = JSDOC.opt.n; + else throw "Unrecognized meta comment: "+doc.meta; + + this.lastDoc = null; + return true; + } + else if (doc.getTag("overview").length > 0) { // it's a file overview + symbol = new JSDOC.Symbol("", [], "FILE", doc); + + JSDOC.Parser.addSymbol(symbol); + + this.lastDoc = null; + return true; + } + else { + this.lastDoc = doc; + return false; + } + } + else if (!JSDOC.Parser.conf.ignoreCode) { // it's code + if (this.token.is("NAME")) { // it's the name of something + var symbol; + var name = this.token.data; + var doc = null; if (this.lastDoc) doc = this.lastDoc; + var params = []; + + // it's inside an anonymous object + if (this.ts.look(1).is("COLON") && this.ts.look(-1).is("LEFT_CURLY") && !(this.ts.look(-2).is("JSDOC") || this.namescope.last().comment.getTag("lends").length || this.ts.look(-2).is("ASSIGN") || this.ts.look(-2).is("COLON"))) { + name = "$anonymous"; + name = this.namescope.last().alias+"-"+name + + params = []; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + + JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken(null, "RIGHT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // function foo() {} + else if (this.ts.look(-1).is("FUNCTION") && this.ts.look(1).is("LEFT_PAREN")) { + var isInner; + + if (this.lastDoc) doc = this.lastDoc; + name = this.namescope.last().alias+"-"+name; + if (!this.namescope.last().is("GLOBAL")) isInner = true; + + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); + if (isInner) symbol.isInner = true; + + if (this.ts.look(1).is("JSDOC")) { + var inlineReturn = ""+this.ts.look(1).data; + inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); + symbol.type = inlineReturn; + } + + JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // foo = function() {} + else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("FUNCTION")) { + var isInner; + if (this.ts.look(-1).is("VAR") || this.isInner) { + name = this.namescope.last().alias+"-"+name + if (!this.namescope.last().is("GLOBAL")) isInner = true; + } + else if (name.indexOf("this.") == 0) { + name = this.resolveThis(name); + } + + if (this.lastDoc) doc = this.lastDoc; + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); + if (isInner) symbol.isInner = true; + + if (this.ts.look(1).is("JSDOC")) { + var inlineReturn = ""+this.ts.look(1).data; + inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); + symbol.type = inlineReturn; + } + + JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // foo = new function() {} or foo = (function() {} + else if (this.ts.look(1).is("ASSIGN") && (this.ts.look(2).is("NEW") || this.ts.look(2).is("LEFT_PAREN")) && this.ts.look(3).is("FUNCTION")) { + var isInner; + if (this.ts.look(-1).is("VAR") || this.isInner) { + name = this.namescope.last().alias+"-"+name + if (!this.namescope.last().is("GLOBAL")) isInner = true; + } + else if (name.indexOf("this.") == 0) { + name = this.resolveThis(name); + } + + this.ts.next(3); // advance past the "new" or "(" + + if (this.lastDoc) doc = this.lastDoc; + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + if (isInner) symbol.isInner = true; + + if (this.ts.look(1).is("JSDOC")) { + var inlineReturn = ""+this.ts.look(1).data; + inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); + symbol.type = inlineReturn; + } + + JSDOC.Parser.addSymbol(symbol); + + symbol.scopeType = "INSTANCE"; + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // foo: function() {} + else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("FUNCTION")) { + name = (this.namescope.last().alias+"."+name).replace("#.", "#"); + + if (this.lastDoc) doc = this.lastDoc; + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + + if (doc && doc.getTag("constructs").length) { + name = name.replace(/\.prototype(\.|$)/, "#"); + + if (name.indexOf("#") > -1) name = name.match(/(^[^#]+)/)[0]; + else name = this.namescope.last().alias; + + symbol = new JSDOC.Symbol(name, params, "CONSTRUCTOR", doc); + } + else { + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); + } + + if (this.ts.look(1).is("JSDOC")) { + var inlineReturn = ""+this.ts.look(1).data; + inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); + symbol.type = inlineReturn; + } + + JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // foo = {} + else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("LEFT_CURLY")) { + var isInner; + if (this.ts.look(-1).is("VAR") || this.isInner) { + name = this.namescope.last().alias+"-"+name + if (!this.namescope.last().is("GLOBAL")) isInner = true; + } + else if (name.indexOf("this.") == 0) { + name = this.resolveThis(name); + } + + if (this.lastDoc) doc = this.lastDoc; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + if (isInner) symbol.isInner = true; + + + if (doc) JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // var foo; + else if (this.ts.look(1).is("SEMICOLON")) { + var isInner; + + if (this.ts.look(-1).is("VAR") || this.isInner) { + name = this.namescope.last().alias+"-"+name + if (!this.namescope.last().is("GLOBAL")) isInner = true; + + if (this.lastDoc) doc = this.lastDoc; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + if (isInner) symbol.isInner = true; + + + if (doc) JSDOC.Parser.addSymbol(symbol); + } + } + // foo = x + else if (this.ts.look(1).is("ASSIGN")) { + var isInner; + if (this.ts.look(-1).is("VAR") || this.isInner) { + name = this.namescope.last().alias+"-"+name + if (!this.namescope.last().is("GLOBAL")) isInner = true; + } + else if (name.indexOf("this.") == 0) { + name = this.resolveThis(name); + } + + if (this.lastDoc) doc = this.lastDoc; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + if (isInner) symbol.isInner = true; + + + if (doc) JSDOC.Parser.addSymbol(symbol); + } + // foo: {} + else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("LEFT_CURLY")) { + name = (this.namescope.last().alias+"."+name).replace("#.", "#"); + + if (this.lastDoc) doc = this.lastDoc; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + + + if (doc) JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + // foo: x + else if (this.ts.look(1).is("COLON")) { + name = (this.namescope.last().alias+"."+name).replace("#.", "#");; + + if (this.lastDoc) doc = this.lastDoc; + + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); + + + if (doc) JSDOC.Parser.addSymbol(symbol); + } + // foo(...) + else if (this.ts.look(1).is("LEFT_PAREN")) { + if (typeof JSDOC.PluginManager != "undefined") { + var functionCall = {name: name}; + + var cursor = this.ts.cursor; + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + this.ts.cursor = cursor; + + for (var i = 0; i < params.length; i++) + functionCall["arg" + (i + 1)] = params[i].name; + + JSDOC.PluginManager.run("onFunctionCall", functionCall); + if (functionCall.doc) { + this.ts.insertAhead(new JSDOC.Token(functionCall.doc, "COMM", "JSDOC")); + } + } + } + this.lastDoc = null; + } + else if (this.token.is("FUNCTION")) { // it's an anonymous function + if ( + (!this.ts.look(-1).is("COLON") || !this.ts.look(-1).is("ASSIGN")) + && !this.ts.look(1).is("NAME") + ) { + if (this.lastDoc) doc = this.lastDoc; + + name = "$anonymous"; + name = this.namescope.last().alias+"-"+name + + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); + + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); + + JSDOC.Parser.addSymbol(symbol); + + this.namescope.push(symbol); + + var matching = this.ts.getMatchingToken("LEFT_CURLY"); + if (matching) matching.popNamescope = name; + else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); + } + } + } + return true; +} + +/** + Resolves what "this." means when it appears in a name. + @param name The name that starts with "this.". + @returns The name with "this." resolved. + */ +JSDOC.Walker.prototype.resolveThis = function(name) { + name.match(/^this\.(.+)$/) + var nameFragment = RegExp.$1; + if (!nameFragment) return name; + + var symbol = this.namescope.last(); + var scopeType = symbol.scopeType || symbol.isa; + + // if we are in a constructor function, `this` means the instance + if (scopeType == "CONSTRUCTOR") { + name = symbol.alias+"#"+nameFragment; + } + + // if we are in an anonymous constructor function, `this` means the instance + else if (scopeType == "INSTANCE") { + name = symbol.alias+"."+nameFragment; + } + + // if we are in a function, `this` means the container (possibly the global) + else if (scopeType == "FUNCTION") { + // in a method of a prototype, so `this` means the constructor + if (symbol.alias.match(/(^.*)[#.-][^#.-]+/)) { + var parentName = RegExp.$1; + var parent = JSDOC.Parser.symbols.getSymbol(parentName); + + if (!parent) { + if (JSDOC.Lang.isBuiltin(parentName)) parent = JSDOC.Parser.addBuiltin(parentName); + else { + if (symbol.alias.indexOf("$anonymous") < 0) // these will be ignored eventually + LOG.warn("Trying to document "+symbol.alias+" without first documenting "+parentName+"."); + } + } + if (parent) name = parentName+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment; + } + else { + parent = this.namescope.last(1); + name = parent.alias+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment; + } + } + // otherwise it means the global + else { + name = nameFragment; + } + + return name; +} + +JSDOC.Walker.onParamList = function(/**Array*/paramTokens) { + if (!paramTokens) { + LOG.warn("Malformed parameter list. Can't parse code."); + return []; + } + var params = []; + for (var i = 0, l = paramTokens.length; i < l; i++) { + if (paramTokens[i].is("JSDOC")) { + var paramType = paramTokens[i].data.replace(/(^\/\*\* *| *\*\/$)/g, ""); + + if (paramTokens[i+1] && paramTokens[i+1].is("NAME")) { + i++; + params.push({type: paramType, name: paramTokens[i].data}); + } + } + else if (paramTokens[i].is("NAME")) { + params.push({name: paramTokens[i].data}); + } + } + return params; +} diff --git a/utils/jsdoc-toolkit/app/main.js b/utils/jsdoc-toolkit/app/main.js new file mode 100755 index 0000000..9b78182 --- /dev/null +++ b/utils/jsdoc-toolkit/app/main.js @@ -0,0 +1,111 @@ +/** + * @version $Id: main.js 795 2009-06-19 07:03:22Z micmath $ + */ + +function main() { + IO.include("lib/JSDOC.js"); + IO.includeDir("plugins/"); + + // process the options + + // the -c option: options are defined in a configuration file + if (JSDOC.opt.c) { + eval("JSDOC.conf = " + IO.readFile(JSDOC.opt.c)); + + LOG.inform("Using configuration file at '"+JSDOC.opt.c+"'."); + + for (var c in JSDOC.conf) { + if (c !== "D" && !defined(JSDOC.opt[c])) { // commandline overrules config file + JSDOC.opt[c] = JSDOC.conf[c]; + } + } + + if (typeof JSDOC.conf["_"] != "undefined") { + JSDOC.opt["_"] = JSDOC.opt["_"].concat(JSDOC.conf["_"]); + } + + LOG.inform("With configuration: "); + for (var o in JSDOC.opt) { + LOG.inform(" "+o+": "+JSDOC.opt[o]); + } + } + + // be verbose + if (JSDOC.opt.v) LOG.verbose = true; + + // send log messages to a file + if (JSDOC.opt.o) LOG.out = IO.open(JSDOC.opt.o); + + // run the unit tests + if (JSDOC.opt.T) { + LOG.inform("JsDoc Toolkit running in test mode at "+new Date()+"."); + IO.include("frame/Testrun.js"); + IO.include("test.js"); + } + else { + // a template must be defined and must be a directory path + if (!JSDOC.opt.t && System.getProperty("jsdoc.template.dir")) { + JSDOC.opt.t = System.getProperty("jsdoc.template.dir"); + } + if (JSDOC.opt.t && !JSDOC.opt.t.charAt(JSDOC.opt.t.length-1).match(/[\\\/]/)) { + JSDOC.opt.t += SYS.slash; + } + + // verbose messages about the options we were given + LOG.inform("JsDoc Toolkit main() running at "+new Date()+"."); + LOG.inform("With options: "); + for (var o in JSDOC.opt) { + LOG.inform(" "+o+": "+JSDOC.opt[o]); + } + + // initialize and build a symbolSet from your code + JSDOC.JsDoc(); + + // debugger's option: dump the entire symbolSet produced from your code + if (JSDOC.opt.Z) { + LOG.warn("So you want to see the data structure, eh? This might hang if you have circular refs..."); + IO.include("frame/Dumper.js"); + var symbols = JSDOC.JsDoc.symbolSet.toArray(); + for (var i = 0, l = symbols.length; i < l; i++) { + var symbol = symbols[i]; + print("// symbol: " + symbol.alias); + print(symbol.serialize()); + } + } + else { + if (typeof JSDOC.opt.t != "undefined") { + try { + // a file named "publish.js" must exist in the template directory + load(JSDOC.opt.t+"publish.js"); + + // and must define a function named "publish" + if (!publish) { + LOG.warn("No publish() function is defined in that template so nothing to do."); + } + else { + // which will be called with the symbolSet produced from your code + publish(JSDOC.JsDoc.symbolSet); + } + } + catch(e) { + LOG.warn("Sorry, that doesn't seem to be a valid template: "+JSDOC.opt.t+"publish.js : "+e); + } + } + else { + LOG.warn("No template given. Might as well read the usage notes."); + JSDOC.usage(); + } + } + } + + // notify of any warnings + if (!JSDOC.opt.q && LOG.warnings.length) { + print(LOG.warnings.length+" warning"+(LOG.warnings.length != 1? "s":"")+"."); + } + + // stop sending log messages to a file + if (LOG.out) { + LOG.out.flush(); + LOG.out.close(); + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/plugins/commentSrcJson.js b/utils/jsdoc-toolkit/app/plugins/commentSrcJson.js new file mode 100755 index 0000000..e826b57 --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/commentSrcJson.js @@ -0,0 +1,20 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.commentSrcJson", + { + onDocCommentSrc: function(comment) { + var json; + if (/^\s*@json\b/.test(comment)) { + comment.src = new String(comment.src).replace("@json", ""); + + eval("json = "+comment.src); + var tagged = ""; + for (var i in json) { + var tag = json[i]; + // todo handle cases where tag is an object + tagged += "@"+i+" "+tag+"\n"; + } + comment.src = tagged; + } + } + } +);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/plugins/frameworkPrototype.js b/utils/jsdoc-toolkit/app/plugins/frameworkPrototype.js new file mode 100755 index 0000000..9c41751 --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/frameworkPrototype.js @@ -0,0 +1,16 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.frameworkPrototype", + { + onPrototypeClassCreate: function(classCreator) { + var desc = ""; + if (classCreator.comment) { + desc = classCreator.comment; + } + var insert = desc+"/** @name "+classCreator.name+"\n@constructor\n@scope "+classCreator.name+".prototype */" + + insert = insert.replace(/\*\/\/\*\*/g, "\n"); + /*DEBUG*///print("insert is "+insert); + classCreator.addComment.data = insert; + } + } +); diff --git a/utils/jsdoc-toolkit/app/plugins/functionCall.js b/utils/jsdoc-toolkit/app/plugins/functionCall.js new file mode 100755 index 0000000..6f87705 --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/functionCall.js @@ -0,0 +1,10 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.functionCall", + { + onFunctionCall: function(functionCall) { + if (functionCall.name == "dojo.define" && functionCall.arg1) { + functionCall.doc = "/** @lends "+eval(functionCall.arg1)+".prototype */"; + } + } + } +);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/plugins/publishSrcHilite.js b/utils/jsdoc-toolkit/app/plugins/publishSrcHilite.js new file mode 100755 index 0000000..65514f2 --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/publishSrcHilite.js @@ -0,0 +1,62 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.publishSrcHilite", + { + onPublishSrc: function(src) { + if (src.path in JsHilite.cache) { + return; // already generated src code + } + else JsHilite.cache[src.path] = true; + + try { + var sourceCode = IO.readFile(src.path); + } + catch(e) { + print(e.message); + quit(); + } + + var hiliter = new JsHilite(sourceCode, src.charset); + src.hilited = hiliter.hilite(); + } + } +); + +function JsHilite(src, charset) { + + var tr = new JSDOC.TokenReader(); + + tr.keepComments = true; + tr.keepDocs = true; + tr.keepWhite = true; + + this.tokens = tr.tokenize(new JSDOC.TextStream(src)); + + // TODO is redefining toString() the best way? + JSDOC.Token.prototype.toString = function() { + return "<span class=\""+this.type+"\">"+this.data.replace(/</g, "<")+"</span>"; + } + + if (!charset) charset = "utf-8"; + + this.header = '<html><head><meta http-equiv="content-type" content="text/html; charset='+charset+'"> '+ + "<style>\n\ + .KEYW {color: #933;}\n\ + .COMM {color: #bbb; font-style: italic;}\n\ + .NUMB {color: #393;}\n\ + .STRN {color: #393;}\n\ + .REGX {color: #339;}\n\ + .line {border-right: 1px dotted #666; color: #666; font-style: normal;}\n\ + </style></head><body><pre>"; + this.footer = "</pre></body></html>"; + this.showLinenumbers = true; +} + +JsHilite.cache = {}; + +JsHilite.prototype.hilite = function() { + var hilited = this.tokens.join(""); + var line = 1; + if (this.showLinenumbers) hilited = hilited.replace(/(^|\n)/g, function(m){return m+"<span class='line'>"+((line<10)? " ":"")+((line<100)? " ":"")+(line++)+"</span> "}); + + return this.header+hilited+this.footer; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/plugins/symbolLink.js b/utils/jsdoc-toolkit/app/plugins/symbolLink.js new file mode 100755 index 0000000..c87f1ca --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/symbolLink.js @@ -0,0 +1,10 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.symbolLink", + { + onSymbolLink: function(link) { + // modify link.linkPath (the href part of the link) + // or link.linkText (the text displayed) + // or link.linkInner (the #name part of the link) + } + } +);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/plugins/tagParamConfig.js b/utils/jsdoc-toolkit/app/plugins/tagParamConfig.js new file mode 100755 index 0000000..3ea8a1b --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/tagParamConfig.js @@ -0,0 +1,31 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.tagParamConfig", + { + onDocCommentTags: function(comment) { + var currentParam = null; + var tags = comment.tags; + for (var i = 0, l = tags.length; i < l; i++) { + + if (tags[i].title == "param") { + if (tags[i].name.indexOf(".") == -1) { + currentParam = i; + } + } + else if (tags[i].title == "config") { + tags[i].title = "param"; + if (currentParam == null) { + tags[i].name = "arguments"+"."+tags[i].name; + } + else if (tags[i].name.indexOf(tags[currentParam].name+".") != 0) { + tags[i].name = tags[currentParam].name+"."+tags[i].name; + } + currentParam != null + //tags[currentParam].properties.push(tags[i]); + } + else { + currentParam = null; + } + } + } + } +); diff --git a/utils/jsdoc-toolkit/app/plugins/tagSynonyms.js b/utils/jsdoc-toolkit/app/plugins/tagSynonyms.js new file mode 100755 index 0000000..49a874f --- /dev/null +++ b/utils/jsdoc-toolkit/app/plugins/tagSynonyms.js @@ -0,0 +1,43 @@ +JSDOC.PluginManager.registerPlugin( + "JSDOC.tagSynonyms", + { + onDocCommentSrc: function(comment) { + comment.src = comment.src.replace(/@methodOf\b/i, "@function\n@memberOf"); + comment.src = comment.src.replace(/@fieldOf\b/i, "@field\n@memberOf"); + }, + + onDocCommentTags: function(comment) { + for (var i = 0, l = comment.tags.length; i < l; i++) { + var title = comment.tags[i].title.toLowerCase(); + var syn; + if ((syn = JSDOC.tagSynonyms.synonyms["="+title])) { + comment.tags[i].title = syn; + } + } + } + } +); + +new Namespace( + "JSDOC.tagSynonyms", + function() { + JSDOC.tagSynonyms.synonyms = { + "=member": "memberOf", + "=memberof": "memberOf", + "=description": "desc", + "=exception": "throws", + "=argument": "param", + "=returns": "return", + "=classdescription": "class", + "=fileoverview": "overview", + "=extends": "augments", + "=base": "augments", + "=projectdescription": "overview", + "=classdescription": "class", + "=link": "see", + "=borrows": "inherits", + "=scope": "lends", + "=construct": "constructor" + } + } +);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/run.js b/utils/jsdoc-toolkit/app/run.js new file mode 100755 index 0000000..1f875cd --- /dev/null +++ b/utils/jsdoc-toolkit/app/run.js @@ -0,0 +1,348 @@ +/** + * @fileOverview + * A bootstrap script that creates some basic required objects + * for loading other scripts. + * @author Michael Mathews, micmath@gmail.com + * @version $Id: run.js 756 2009-01-07 21:32:58Z micmath $ + */ + +/** + * @namespace Keep track of any messages from the running script. + */ +LOG = { + warn: function(msg, e) { + if (JSDOC.opt.q) return; + if (e) msg = e.fileName+", line "+e.lineNumber+": "+msg; + + msg = ">> WARNING: "+msg; + LOG.warnings.push(msg); + if (LOG.out) LOG.out.write(msg+"\n"); + else print(msg); + }, + + inform: function(msg) { + if (JSDOC.opt.q) return; + msg = " > "+msg; + if (LOG.out) LOG.out.write(msg+"\n"); + else if (typeof LOG.verbose != "undefined" && LOG.verbose) print(msg); + } +}; +LOG.warnings = []; +LOG.verbose = false +LOG.out = undefined; + +/** + * @class Manipulate a filepath. + */ +function FilePath(absPath, separator) { + this.slash = separator || "/"; + this.root = this.slash; + this.path = []; + this.file = ""; + + var parts = absPath.split(/[\\\/]/); + if (parts) { + if (parts.length) this.root = parts.shift() + this.slash; + if (parts.length) this.file = parts.pop() + if (parts.length) this.path = parts; + } + + this.path = this.resolvePath(); +} + +/** Collapse any dot-dot or dot items in a filepath. */ +FilePath.prototype.resolvePath = function() { + var resolvedPath = []; + for (var i = 0; i < this.path.length; i++) { + if (this.path[i] == "..") resolvedPath.pop(); + else if (this.path[i] != ".") resolvedPath.push(this.path[i]); + } + return resolvedPath; +} + +/** Trim off the filename. */ +FilePath.prototype.toDir = function() { + if (this.file) this.file = ""; + return this; +} + +/** Go up a directory. */ +FilePath.prototype.upDir = function() { + this.toDir(); + if (this.path.length) this.path.pop(); + return this; +} + +FilePath.prototype.toString = function() { + return this.root + + this.path.join(this.slash) + + ((this.path.length > 0)? this.slash : "") + + this.file; +} + +/** + * Turn a path into just the name of the file. + */ +FilePath.fileName = function(path) { + var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); + return path.substring(nameStart); +} + +/** + * Get the extension of a filename + */ +FilePath.fileExtension = function(filename) { + return filename.split(".").pop().toLowerCase(); +}; + +/** + * Turn a path into just the directory part. + */ +FilePath.dir = function(path) { + var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); + return path.substring(0, nameStart-1); +} + + +importClass(java.lang.System); + +/** + * @namespace A collection of information about your system. + */ +SYS = { + /** + * Information about your operating system: arch, name, version. + * @type string + */ + os: [ + new String(System.getProperty("os.arch")), + new String(System.getProperty("os.name")), + new String(System.getProperty("os.version")) + ].join(", "), + + /** + * Which way does your slash lean. + * @type string + */ + slash: System.getProperty("file.separator")||"/", + + /** + * The path to the working directory where you ran java. + * @type string + */ + userDir: new String(System.getProperty("user.dir")), + + /** + * Where is Java's home folder. + * @type string + */ + javaHome: new String(System.getProperty("java.home")), + + /** + * The absolute path to the directory containing this script. + * @type string + */ + pwd: undefined +}; + +// jsrun appends an argument, with the path to here. +if (arguments[arguments.length-1].match(/^-j=(.+)/)) { + if (RegExp.$1.charAt(0) == SYS.slash || RegExp.$1.charAt(1) == ":") { // absolute path to here + SYS.pwd = new FilePath(RegExp.$1).toDir().toString(); + } + else { // relative path to here + SYS.pwd = new FilePath(SYS.userDir + SYS.slash + RegExp.$1).toDir().toString(); + } + arguments.pop(); +} +else { + print("The run.js script requires you use jsrun.jar."); + quit(); +} + +// shortcut +var File = Packages.java.io.File; + +/** + * @namespace A collection of functions that deal with reading a writing to disk. + */ +IO = { + + /** + * Create a new file in the given directory, with the given name and contents. + */ + saveFile: function(/**string*/ outDir, /**string*/ fileName, /**string*/ content) { + var out = new Packages.java.io.PrintWriter( + new Packages.java.io.OutputStreamWriter( + new Packages.java.io.FileOutputStream(outDir+SYS.slash+fileName), + IO.encoding + ) + ); + out.write(content); + out.flush(); + out.close(); + }, + + /** + * @type string + */ + readFile: function(/**string*/ path) { + if (!IO.exists(path)) { + throw "File doesn't exist there: "+path; + } + return readFile(path, IO.encoding); + }, + + /** + * @param inFile + * @param outDir + * @param [fileName=The original filename] + */ + copyFile: function(/**string*/ inFile, /**string*/ outDir, /**string*/ fileName) { + if (fileName == null) fileName = FilePath.fileName(inFile); + + var inFile = new File(inFile); + var outFile = new File(outDir+SYS.slash+fileName); + + var bis = new Packages.java.io.BufferedInputStream(new Packages.java.io.FileInputStream(inFile), 4096); + var bos = new Packages.java.io.BufferedOutputStream(new Packages.java.io.FileOutputStream(outFile), 4096); + var theChar; + while ((theChar = bis.read()) != -1) { + bos.write(theChar); + } + bos.close(); + bis.close(); + }, + + /** + * Creates a series of nested directories. + */ + mkPath: function(/**Array*/ path) { + if (path.constructor != Array) path = path.split(/[\\\/]/); + var make = ""; + for (var i = 0, l = path.length; i < l; i++) { + make += path[i] + SYS.slash; + if (! IO.exists(make)) { + IO.makeDir(make); + } + } + }, + + /** + * Creates a directory at the given path. + */ + makeDir: function(/**string*/ path) { + (new File(path)).mkdir(); + }, + + /** + * @type string[] + * @param dir The starting directory to look in. + * @param [recurse=1] How many levels deep to scan. + * @returns An array of all the paths to files in the given dir. + */ + ls: function(/**string*/ dir, /**number*/ recurse, _allFiles, _path) { + if (_path === undefined) { // initially + var _allFiles = []; + var _path = [dir]; + } + if (_path.length == 0) return _allFiles; + if (recurse === undefined) recurse = 1; + + dir = new File(dir); + if (!dir.directory) return [String(dir)]; + var files = dir.list(); + + for (var f = 0; f < files.length; f++) { + var file = String(files[f]); + if (file.match(/^\.[^\.\/\\]/)) continue; // skip dot files + + if ((new File(_path.join(SYS.slash)+SYS.slash+file)).list()) { // it's a directory + _path.push(file); + if (_path.length-1 < recurse) IO.ls(_path.join(SYS.slash), recurse, _allFiles, _path); + _path.pop(); + } + else { + _allFiles.push((_path.join(SYS.slash)+SYS.slash+file).replace(SYS.slash+SYS.slash, SYS.slash)); + } + } + + return _allFiles; + }, + + /** + * @type boolean + */ + exists: function(/**string*/ path) { + file = new File(path); + + if (file.isDirectory()){ + return true; + } + if (!file.exists()){ + return false; + } + if (!file.canRead()){ + return false; + } + return true; + }, + + /** + * + */ + open: function(/**string*/ path, /**string*/ append) { + var append = true; + var outFile = new File(path); + var out = new Packages.java.io.PrintWriter( + new Packages.java.io.OutputStreamWriter( + new Packages.java.io.FileOutputStream(outFile, append), + IO.encoding + ) + ); + return out; + }, + + /** + * Sets {@link IO.encoding}. + * Encoding is used when reading and writing text to files, + * and in the meta tags of HTML output. + */ + setEncoding: function(/**string*/ encoding) { + if (/ISO-8859-([0-9]+)/i.test(encoding)) { + IO.encoding = "ISO8859_"+RegExp.$1; + } + else { + IO.encoding = encoding; + } + }, + + /** + * @default "utf-8" + * @private + */ + encoding: "utf-8", + + /** + * Load the given script. + */ + include: function(relativePath) { + load(SYS.pwd+relativePath); + }, + + /** + * Loads all scripts from the given directory path. + */ + includeDir: function(path) { + if (!path) return; + + for (var lib = IO.ls(SYS.pwd+path), i = 0; i < lib.length; i++) + if (/\.js$/i.test(lib[i])) load(lib[i]); + } +} + +// now run the application +IO.include("frame.js"); +IO.include("main.js"); + +main(); diff --git a/utils/jsdoc-toolkit/app/t/TestDoc.js b/utils/jsdoc-toolkit/app/t/TestDoc.js new file mode 100755 index 0000000..c0768b7 --- /dev/null +++ b/utils/jsdoc-toolkit/app/t/TestDoc.js @@ -0,0 +1,144 @@ +var TestDoc = { + fails: 0, + plans: 0, + passes: 0, + results: [] +}; + +TestDoc.record = function(result) { + TestDoc.results.push(result); + if (typeof result.verdict == "boolean") { + if (result.verdict === false) TestDoc.fails++; + if (result.verdict === true) TestDoc.passes++; + } +} + +TestDoc.prove = function(filePath) { + if (typeof document != "undefined" && typeof document.write != "undefined") { + if (TestDoc.console) print = function(s) { TestDoc.console.appendChild(document.createTextNode(s+"\n")); } + else print = function(s) { document.write(s+"<br />"); } + } + TestDoc.run(TestDoc.readFile(filePath)); +} + +TestDoc.run = function(src) { + try { eval(src); } catch(e) { print("# ERROR! "+e); } + + var chunks = src.split(/\/\*t:/); + + var run = function(chunk) { + // local shortcuts + var is = TestDoc.assertEquals; + var isnt = TestDoc.assertNotEquals; + var plan = TestDoc.plan; + var requires = TestDoc.requires; + + try { eval(chunk); } catch(e) { print("# ERROR! "+e); } + } + for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) { + run( + src.substring( + start+4, + (end = src.indexOf("*/", start)) + ) + ); + } +} + +TestDoc.Result = function(verdict, message) { + this.verdict = verdict; + this.message = message; +} + +TestDoc.Result.prototype.toString = function() { + if (typeof this.verdict == "boolean") { + return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message; + } + + return "# " + this.message; +} + +TestDoc.requires = function(file) { + if (!TestDoc.requires.loaded[file]) { + load(file); + TestDoc.requires.loaded[file] = true; + } +} +TestDoc.requires.loaded = {}; + +TestDoc.report = function() { + TestDoc.report.counter = 0; + print("1.."+TestDoc.plans); + for (var i = 0; i < TestDoc.results.length; i++) { + print(TestDoc.results[i]); + } + print("----------------------------------------"); + if (TestDoc.fails == 0 && TestDoc.passes == TestDoc.plans) { + print("All tests successful."); + } + else { + print("Failed " + TestDoc.fails + "/" + TestDoc.plans + " tests, "+((TestDoc.plans == 0)? 0 : Math.round(TestDoc.passes/(TestDoc.passes+TestDoc.fails)*10000)/100)+"% okay. Planned to run "+TestDoc.plans+", did run "+(TestDoc.passes+TestDoc.fails)+".") + } +} + +TestDoc.plan = function(n, message) { + TestDoc.plans += n; + TestDoc.record(new TestDoc.Result(null, message+" ("+n+" tests)")); +} + +TestDoc.assertEquals = function(a, b, message) { + var result = (a == b); + if (!result) message += "\n#\n# " + a + " does not equal " + b + "\n#"; + TestDoc.record(new TestDoc.Result(result, message)); +} + +TestDoc.assertNotEquals = function(a, b, message) { + var result = (a != b); + if (!result) message += "\n#\n# " + a + " equals " + b + "\n#"; + TestDoc.record(new TestDoc.Result(result, message)); +} + +TestDoc.readFile = (function(){ + // rhino + if (typeof readFile == "function") { + return function(url) { + var text = readFile(url); + return text || ""; + } + } + + // a web browser + else { + return function(url) { + var httpRequest; + + if (window.XMLHttpRequest) { // Mozilla, Safari, etc + httpRequest = new XMLHttpRequest(); + } + else if (window.ActiveXObject) { // IE + try { + httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); + } + catch (e) { + try { + httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); + } + catch (e) { + } + } + } + + if (!httpRequest) { throw "Cannot create HTTP Request."; } + + httpRequest.open('GET', url, false); + httpRequest.send(''); + if (httpRequest.readyState == 4) { + if (httpRequest.status >= 400) { + throw "The HTTP Request returned an error code: "+httpRequest.status; + } + } + + return httpRequest.responseText || ""; + } + } +})(); diff --git a/utils/jsdoc-toolkit/app/t/runner.js b/utils/jsdoc-toolkit/app/t/runner.js new file mode 100755 index 0000000..3f9fb4c --- /dev/null +++ b/utils/jsdoc-toolkit/app/t/runner.js @@ -0,0 +1,13 @@ +// try: java -jar ../../jsrun.jar runner.js + +load("TestDoc.js"); + +TestDoc.prove("../frame/Opt.js"); +TestDoc.prove("../lib/JSDOC.js"); +TestDoc.prove("../frame/String.js"); +TestDoc.prove("../lib/JSDOC/DocTag.js"); +TestDoc.prove("../lib/JSDOC/DocComment.js"); +TestDoc.prove("../lib/JSDOC/TokenReader.js"); +TestDoc.prove("../lib/JSDOC/Symbol.js"); + +TestDoc.report(); diff --git a/utils/jsdoc-toolkit/app/test.js b/utils/jsdoc-toolkit/app/test.js new file mode 100755 index 0000000..787d84f --- /dev/null +++ b/utils/jsdoc-toolkit/app/test.js @@ -0,0 +1,325 @@ +load("app/frame/Dumper.js"); +function symbolize(opt) { + symbols = null; + JSDOC.JsDoc(opt); + symbols = JSDOC.JsDoc.symbolSet; +} + +var testCases = [ + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/overview.js"]}); + //print(Dumper.dump(symbols)); + is('symbols.getSymbolByName("My Cool Library").name', 'My Cool Library', 'File overview can be found by alias.'); + } + , + function() { + symbolize({_: [SYS.pwd+"test/name.js"]}); + + is('symbols.getSymbol("Response").name', "Response", 'Virtual class name is found.'); + is('symbols.getSymbol("Response#text").alias', "Response#text", 'Virtual method name is found.'); + is('symbols.getSymbol("Response#text").memberOf', "Response", 'Virtual method parent name is found.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype.js"]}); + + is('symbols.getSymbol("Article").name', "Article", 'Function set to constructor prototype with inner constructor name is found.'); + is('symbols.getSymbol("Article").hasMethod("init")', true, 'The initializer method name of prototype function is correct.'); + is('symbols.getSymbol("Article").hasMember("counter")', true, 'A static property set in the prototype definition is found.'); + is('symbols.getSymbol("Article").hasMember("title")', true, 'An instance property set in the prototype is found.'); + is('symbols.getSymbol("Article#title").isStatic', false, 'An instance property has isStatic set to false.'); + is('symbols.getSymbol("Article.counter").name', "counter", 'A static property set in the initializer has the name set correctly.'); + is('symbols.getSymbol("Article.counter").memberOf', "Article", 'A static property set in the initializer has the memberOf set correctly.'); + is('symbols.getSymbol("Article.counter").isStatic', true, 'A static property set in the initializer has isStatic set to true.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/prototype_oblit.js"]}); + + is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype name is found.'); + is('typeof symbols.getSymbol("Article.prototype")', "undefined", 'The prototype oblit is not a symbol.'); + is('symbols.getSymbol("Article#getTitle").name', "getTitle", 'The nonstatic method name of prototype oblit is correct.'); + is('symbols.getSymbol("Article#getTitle").alias', "Article#getTitle", 'The alias of non-static method of prototype oblit is correct.'); + is('symbols.getSymbol("Article#getTitle").isStatic', false, 'The isStatic of a nonstatic method of prototype oblit is correct.'); + is('symbols.getSymbol("Article.getTitle").name', "getTitle", 'The static method name of prototype oblit is correct.'); + is('symbols.getSymbol("Article.getTitle").isStatic', true, 'The isStatic of a static method of prototype oblit is correct.'); + is('symbols.getSymbol("Article#getTitle").isa', "FUNCTION", 'The isa of non-static method of prototype oblit is correct.'); + is('symbols.getSymbol("Article.getTitle").alias', "Article.getTitle", 'The alias of a static method of prototype oblit is correct.'); + is('symbols.getSymbol("Article.getTitle").isa', "FUNCTION", 'The isa of static method of prototype oblit is correct.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype_oblit_constructor.js"]}); + + is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype with inner constructor name is found.'); + is('symbols.getSymbol("Article#init").name', "init", 'The initializer method name of prototype oblit is correct.'); + is('symbols.getSymbol("Article").hasMember("pages")', true, 'Property set by initializer method "this" is on the outer constructor.'); + is('symbols.getSymbol("Article#Title").name', "Title", 'Name of the inner constructor name is found.'); + is('symbols.getSymbol("Article#Title").memberOf', "Article", 'The memberOf of the inner constructor name is found.'); + is('symbols.getSymbol("Article#Title").isa', "CONSTRUCTOR", 'The isa of the inner constructor name is constructor.'); + is('symbols.getSymbol("Article#Title").hasMember("title")', true, 'A property set on the inner constructor "this" is on the inner constructor.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/inner.js"]}); + + is('symbols.getSymbol("Outer").name', "Outer", 'Outer constructor prototype name is found.'); + is('symbols.getSymbol("Outer").methods.length', 1, 'Inner function doesnt appear as a method of the outer.'); + is('symbols.getSymbol("Outer").hasMethod("open")', true, 'Outer constructors methods arent affected by inner function.'); + is('symbols.getSymbol("Outer-Inner").alias', "Outer-Inner", 'Alias of inner function is found.'); + is('symbols.getSymbol("Outer-Inner").isa', "CONSTRUCTOR", 'isa of inner function constructor is found.'); + is('symbols.getSymbol("Outer-Inner").memberOf', "Outer", 'The memberOf of inner function is found.'); + is('symbols.getSymbol("Outer-Inner").name', "Inner", 'The name of inner function is found.'); + is('symbols.getSymbol("Outer-Inner#name").name', "name", 'A member of the inner function constructor, attached to "this" is found on inner.'); + is('symbols.getSymbol("Outer-Inner#name").memberOf', "Outer-Inner", 'The memberOf of an inner function member is found.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/prototype_nested.js"]}); + + is('symbols.getSymbol("Word").name', "Word", 'Base constructor name is found.'); + is('symbols.getSymbol("Word").hasMethod("reverse")', true, 'Base constructor method is found.'); + is('symbols.getSymbol("Word").methods.length', 1, 'Base constructor has only one method.'); + is('symbols.getSymbol("Word").memberOf', "", 'Base constructor memberOf is empty.'); + is('symbols.getSymbol("Word#reverse").name', "reverse", 'Member of constructor prototype name is found.'); + is('symbols.getSymbol("Word#reverse").memberOf', "Word", 'Member of constructor prototype memberOf is found.'); + is('symbols.getSymbol("Word#reverse.utf8").name', "utf8", 'Member of constructor prototype method name is found.'); + is('symbols.getSymbol("Word#reverse.utf8").memberOf', "Word#reverse", 'Static nested member memberOf is found.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/namespace_nested.js"]}); + + is('symbols.getSymbol("ns1").name', "ns1", 'Base namespace name is found.'); + is('symbols.getSymbol("ns1").memberOf', "", 'Base namespace memberOf is empty (its a constructor).'); + is('symbols.getSymbol("ns1.ns2").name', "ns2", 'Nested namespace name is found.'); + is('symbols.getSymbol("ns1.ns2").alias', "ns1.ns2", 'Nested namespace alias is found.'); + is('symbols.getSymbol("ns1.ns2").memberOf', "ns1", 'Nested namespace memberOf is found.'); + is('symbols.getSymbol("ns1.ns2.Function1").name', "Function1", 'Method of nested namespace name is found.'); + is('symbols.getSymbol("ns1.ns2.Function1").memberOf', "ns1.ns2", 'Constructor of nested namespace memberOf is found.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_nested.js"]}); + + is('symbols.getSymbol("Zop").name', "Zop", 'Any constructor name is found.'); + is('symbols.getSymbol("Zop").isa', "CONSTRUCTOR", 'It isa constructor.'); + is('symbols.getSymbol("Zop").hasMethod("zap")', true, 'Its method name, set later, is in methods array.'); + is('symbols.getSymbol("Foo").name', "Foo", 'The containing constructor name is found.'); + is('symbols.getSymbol("Foo").hasMethod("methodOne")', true, 'Its method name is found.'); + is('symbols.getSymbol("Foo").hasMethod("methodTwo")', true, 'Its second method name is found.'); + is('symbols.getSymbol("Foo#methodOne").alias', "Foo#methodOne", 'A methods alias is found.'); + is('symbols.getSymbol("Foo#methodOne").isStatic', false, 'A methods is not static.'); + is('symbols.getSymbol("Bar").name', "Bar", 'A global function declared inside another function is found.'); + is('symbols.getSymbol("Bar").isa', "FUNCTION", 'It isa function.'); + is('symbols.getSymbol("Bar").memberOf', "_global_", 'It is global.'); + is('symbols.getSymbol("Foo-inner").name', "inner", 'An inner functions name is found.'); + is('symbols.getSymbol("Foo-inner").memberOf', "Foo", 'It is member of the outer function.'); + is('symbols.getSymbol("Foo-inner").isInner', true, 'It is an inner function.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/memberof_constructor.js"]}); + + is('symbols.getSymbol("Circle#Tangent").name', "Tangent", 'Constructor set on prototype using @member has correct name.'); + is('symbols.getSymbol("Circle#Tangent").memberOf', "Circle", 'Constructor set on prototype using @member has correct memberOf.'); + is('symbols.getSymbol("Circle#Tangent").alias', "Circle#Tangent", 'Constructor set on prototype using @member has correct alias.'); + is('symbols.getSymbol("Circle#Tangent").isa', "CONSTRUCTOR", 'Constructor set on prototype using @member has correct isa.'); + is('symbols.getSymbol("Circle#Tangent").isStatic', false, 'Constructor set on prototype using @member is not static.'); + is('symbols.getSymbol("Circle#Tangent#getDiameter").name', "getDiameter", 'Method set on prototype using @member has correct name.'); + is('symbols.getSymbol("Circle#Tangent#getDiameter").memberOf', "Circle#Tangent", 'Method set on prototype using @member has correct memberOf.'); + is('symbols.getSymbol("Circle#Tangent#getDiameter").alias', "Circle#Tangent#getDiameter", 'Method set on prototype using @member has correct alias.'); + is('symbols.getSymbol("Circle#Tangent#getDiameter").isa', "FUNCTION", 'Method set on prototype using @member has correct isa.'); + is('symbols.getSymbol("Circle#Tangent#getDiameter").isStatic', false, 'Method set on prototype using @member is not static.'); + } + , + function() { + symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof.js"]}); + + is('symbols.getSymbol("pack.install").alias', "pack.install", 'Using @memberOf sets alias, when parent name is in memberOf tag.'); + is('symbols.getSymbol("pack.install.overwrite").name', "install.overwrite", 'Using @memberOf sets name, even if the name is dotted.'); + is('symbols.getSymbol("pack.install.overwrite").memberOf', "pack", 'Using @memberOf sets memberOf.'); + is('symbols.getSymbol("pack.install.overwrite").isStatic', true, 'Using @memberOf with value not ending in octothorp sets isStatic to true.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows.js"]}); + + is('symbols.getSymbol("Layout").name', "Layout", 'Constructor can be found.'); + is('symbols.getSymbol("Layout").hasMethod("init")', true, 'Constructor method name can be found.'); + is('symbols.getSymbol("Layout").hasMember("orientation")', true, 'Constructor property name can be found.'); + + is('symbols.getSymbol("Page").hasMethod("reset")', true, 'Second constructor method name can be found.'); + is('symbols.getSymbol("Page").hasMember("orientation")', true, 'Second constructor borrowed property name can be found in properties.'); + is('symbols.getSymbol("Page#orientation").memberOf', "Page", 'Second constructor borrowed property memberOf can be found.'); + is('symbols.getSymbol("Page-getInnerElements").alias', "Page-getInnerElements", 'Can borrow an inner function and it is still inner.'); + is('symbols.getSymbol("Page.units").alias', "Page.units", 'Can borrow a static function and it is still static.'); + + is('symbols.getSymbol("ThreeColumnPage#init").alias', "ThreeColumnPage#init", 'Third constructor method can be found even though method with same name is borrowed.'); + is('symbols.getSymbol("ThreeColumnPage#reset").alias', "ThreeColumnPage#reset", 'Borrowed method can be found.'); + is('symbols.getSymbol("ThreeColumnPage#orientation").alias', "ThreeColumnPage#orientation", 'Twice borrowed method can be found.'); + + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows2.js"]}); + + is('symbols.getSymbol("Foo").hasMethod("my_zop")', true, 'Borrowed method can be found.'); + is('symbols.getSymbol("Bar").hasMethod("my_zip")', true, 'Second borrowed method can be found.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/constructs.js"]}); + + is('symbols.getSymbol("Person").hasMethod("say")', true, 'The constructs tag creates a class that lends can add a method to.'); + } + , + function() { + symbolize({a: true, _: [SYS.pwd+"test/augments.js", SYS.pwd+"test/augments2.js"]}); + + is('symbols.getSymbol("Page").augments[0]', "Layout", 'An augmented class can be found.'); + is('symbols.getSymbol("Page#reset").alias', "Page#reset", 'Method of augmenter can be found.'); + is('symbols.getSymbol("Page").hasMethod("Layout#init")', true, 'Method from augmented can be found.'); + is('symbols.getSymbol("Page").hasMember("Layout#orientation")', true, 'Property from augmented can be found.'); + is('symbols.getSymbol("Page").methods.length', 3, 'Methods of augmented class are included in methods array.'); + + is('symbols.getSymbol("ThreeColumnPage").augments[0]', "Page", 'The extends tag is a synonym for augments.'); + is('symbols.getSymbol("ThreeColumnPage").hasMethod("ThreeColumnPage#init")', true, 'Local method overrides augmented method of same name.'); + is('symbols.getSymbol("ThreeColumnPage").methods.length', 3, 'Local method count is right.'); + + is('symbols.getSymbol("NewsletterPage").augments[0]', "ThreeColumnPage", 'Can augment across file boundaries.'); + is('symbols.getSymbol("NewsletterPage").augments.length', 2, 'Multiple augments are supported.'); + is('symbols.getSymbol("NewsletterPage").inherits[0].alias', "Junkmail#annoy", 'Inherited method with augments.'); + is('symbols.getSymbol("NewsletterPage").methods.length', 6, 'Methods of augmented class are included in methods array across files.'); + is('symbols.getSymbol("NewsletterPage").properties.length', 1, 'Properties of augmented class are included in properties array across files.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/static_this.js"]}); + + is('symbols.getSymbol("box.holder").name', "holder", 'Static namespace name can be found.'); + is('symbols.getSymbol("box.holder.foo").name', "foo", 'Static namespace method name can be found.'); + is('symbols.getSymbol("box.holder").isStatic', true, 'Static namespace method is static.'); + + is('symbols.getSymbol("box.holder.counter").name', "counter", 'Instance namespace property name set on "this" can be found.'); + is('symbols.getSymbol("box.holder.counter").alias', "box.holder.counter", 'Instance namespace property alias set on "this" can be found.'); + is('symbols.getSymbol("box.holder.counter").memberOf', "box.holder", 'Static namespace property memberOf set on "this" can be found.'); + } + , + function() { + symbolize({a:true, p: true, _: [SYS.pwd+"test/lend.js"]}); + + is('symbols.getSymbol("Person").name', "Person", 'Class defined in lend comment is found.'); + is('symbols.getSymbol("Person").hasMethod("initialize")', true, 'Lent instance method name can be found.'); + is('symbols.getSymbol("Person").hasMethod("say")', true, 'Second instance method can be found.'); + is('symbols.getSymbol("Person#sing").isStatic', false, 'Instance method is known to be not static.'); + + is('symbols.getSymbol("Person.getCount").name', "getCount", 'Static method name from second lend comment can be found.'); + is('symbols.getSymbol("Person.getCount").isStatic', true, 'Static method from second lend comment is known to be static.'); + + is('LOG.warnings.filter(function($){if($.indexOf("notok") > -1) return $}).length', 1, 'A warning is emitted when lending to an undocumented parent.'); + } + , + function() { + symbolize({a:true, _: [SYS.pwd+"test/param_inline.js"]}); + + is('symbols.getSymbol("Layout").params[0].type', "int", 'Inline param name is set.'); + is('symbols.getSymbol("Layout").params[0].desc', "The number of columns.", 'Inline param desc is set from comment.'); + is('symbols.getSymbol("Layout#getElement").params[0].name', "id", 'User defined param documentation takes precedence over parser defined.'); + is('symbols.getSymbol("Layout#getElement").params[0].isOptional', true, 'Default for param is to not be optional.'); + is('symbols.getSymbol("Layout#getElement").params[1].isOptional', false, 'Can mark a param as being optional.'); + is('symbols.getSymbol("Layout#getElement").params[1].type', "number|string", 'Type of inline param doc can have multiple values.'); + is('symbols.getSymbol("Layout#Canvas").params[0].type', "", 'Type can be not defined for some params.'); + is('symbols.getSymbol("Layout#Canvas").params[2].type', "int", 'Type can be defined inline for only some params.'); + is('symbols.getSymbol("Layout#rotate").params.length', 0, 'Docomments inside function sig is ignored without a param.'); + is('symbols.getSymbol("Layout#init").params[2].type', "zoppler", 'Doc comment type overrides inline type for param with same name.'); + } + , + function() { + symbolize({a: true, _: [SYS.pwd+"test/shared.js", SYS.pwd+"test/shared2.js"]}); + + is('symbols.getSymbol("Array#some").name', 'some', 'The name of a symbol in a shared section is found.'); + is('symbols.getSymbol("Array#some").alias', 'Array#some', 'The alias of a symbol in a shared section is found.'); + is('symbols.getSymbol("Array#some").desc', "Extension to builtin array.", 'A description can be shared.'); + is('symbols.getSymbol("Array#filter").desc', "Extension to builtin array.\nChange every element of an array.", 'A shared description is appended.'); + is('symbols.getSymbol("Queue").desc', "A first in, first out data structure.", 'A description is not shared when outside a shared section.'); + is('symbols.getSymbol("Queue.rewind").alias', "Queue.rewind", 'Second shared tag can be started.'); + is('symbols.getSymbol("startOver").alias', "startOver", 'Shared tag doesnt cross over files.'); + } + , + function() { + symbolize({a: true, _: [SYS.pwd+"test/config.js"]}); + is('symbols.getSymbol("Contact").params[0].name', 'person', 'The name of a param is found.'); + is('symbols.getSymbol("Contact").params[1].name', 'person.name', 'The name of a param set with a dot name is found.'); + is('symbols.getSymbol("Contact").params[2].name', 'person.age', 'The name of a second param set with a dot name is found.'); + is('symbols.getSymbol("Contact").params[4].name', 'connection', 'The name of a param after config is found.'); + + is('symbols.getSymbol("Family").params[0].name', 'persons', 'Another name of a param is found.'); + is('symbols.getSymbol("Family").params[1].name', 'persons.Father', 'The name of a param+config is found.'); + is('symbols.getSymbol("Family").params[2].name', 'persons.Mother', 'The name of a second param+config is found.'); + is('symbols.getSymbol("Family").params[3].name', 'persons.Children', 'The name of a third param+config is found.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/ignore.js"]}); + is('LOG.warnings.filter(function($){if($.indexOf("undocumented symbol Ignored") > -1) return $}).length', 1, 'A warning is emitted when documenting members of an ignored parent.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_anon.js"]}); + is('symbols.getSymbol("a.b").alias', 'a.b', 'In anonymous constructor this is found to be the container object.'); + is('symbols.getSymbol("a.f").alias', 'a.f', 'In anonymous constructor this can have a method.'); + is('symbols.getSymbol("a.c").alias', 'a.c', 'In anonymous constructor method this is found to be the container object.'); + is('symbols.getSymbol("g").alias', 'g', 'In anonymous function executed inline this is the global.'); + is('symbols.getSymbol("bar2.p").alias', 'bar2.p', 'In named constructor executed inline this is the container object.'); + is('symbols.getSymbol("module.pub").alias', 'module.pub', 'In parenthesized anonymous function executed inline function scoped variables arent documented.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/oblit_anon.js"]}); + is('symbols.getSymbol("opt").name', 'opt', 'Anonymous object properties are created.'); + is('symbols.getSymbol("opt.conf.keep").alias', 'opt.conf.keep', 'Anonymous object first property is assigned to $anonymous.'); + is('symbols.getSymbol("opt.conf.base").alias', 'opt.conf.base', 'Anonymous object second property is assigned to $anonymous.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/params_optional.js"]}); + is('symbols.getSymbol("Document").params.length', 3, 'Correct number of params are found when optional param syntax is used.'); + is('symbols.getSymbol("Document").params[1].name', "id", 'Name of optional param is found.'); + is('symbols.getSymbol("Document").params[1].isOptional', true, 'Optional param is marked isOptional.'); + is('symbols.getSymbol("Document").params[2].name', "title", 'Name of optional param with default value is found.'); + is('symbols.getSymbol("Document").params[2].isOptional', true, 'Optional param with default value is marked isOptional.'); + is('symbols.getSymbol("Document").params[2].defaultValue', " This is untitled.", 'Optional param default value is found.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/synonyms.js"]}); + is('symbols.getSymbol("myObject.myFunc").type', 'function', 'Type can be set to function.'); + } + , + function() { + symbolize({a:true, p:true, _: [SYS.pwd+"test/event.js"]}); + is('symbols.getSymbol("Kitchen#event:cakeEaten").isEvent', true, 'Function with event prefix is an event.'); + is('symbols.getSymbol("Kitchen#cakeEaten").isa', "FUNCTION", 'Function with same name as event isa function.'); + } + , + function() { + symbolize({x:"js", a:true, _: [SYS.pwd+"test/scripts/"]}); + is('JSDOC.JsDoc.srcFiles.length', 1, 'Only js files are scanned when -x=js.'); + } + , + function() { + symbolize({x:"js", a:true, _: [SYS.pwd+"test/exports.js"]}); + is('symbols.getSymbol("mxn.Map#doThings").name', 'doThings', 'Exports creates a documentation alias that can have methods.'); + } + , + function() { + symbolize({p:true, a:true, _: [SYS.pwd+"test/module.js"]}); + is('symbols.getSymbol("myProject.myModule.myPublicMethod").name', 'myPublicMethod', 'A function wrapped in parens can be recognized.'); + is('symbols.getSymbol("myProject.myModule-myPrivateMethod").name', 'myPrivateMethod', 'A private method in the scope of a function wrapped in parens can be recognized.'); + is('symbols.getSymbol("myProject.myModule-myPrivateVar").name', 'myPrivateVar', 'A private member in the scope of a function wrapped in parens can be recognized.'); + } +]; + +//// run and print results +print(testrun(testCases)); diff --git a/utils/jsdoc-toolkit/app/test/addon.js b/utils/jsdoc-toolkit/app/test/addon.js new file mode 100755 index 0000000..8886205 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/addon.js @@ -0,0 +1,24 @@ +String.prototype.reverse = function() { +} + +String.prototype.reverse.utf8 = function() { +} + +Function.count = function() { +} + +/** @memberOf Function */ +Function.count.reset = function() { +} + +/** @memberOf Function */ +count.getValue = function() { +} + +/** @memberOf Function.prototype */ +getSig = function() { +} + +/** @memberOf Function.prototype */ +Function.prototype.getProps = function() { +} diff --git a/utils/jsdoc-toolkit/app/test/anon_inner.js b/utils/jsdoc-toolkit/app/test/anon_inner.js new file mode 100755 index 0000000..227eeee --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/anon_inner.js @@ -0,0 +1,14 @@ +/** + * @name bar + * @namespace + */ + +new function() { + /** + * @name bar-foo + * @function + * @param {number} x + */ + function foo(x) { + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/augments.js b/utils/jsdoc-toolkit/app/test/augments.js new file mode 100755 index 0000000..12e706e --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/augments.js @@ -0,0 +1,31 @@ +/** +@constructor +*/ +function Layout(p) { + this.init = function(p) { + } + + this.getId = function() { + } + + /** @type Page */ + this.orientation = "landscape"; +} + +/** +@constructor +@augments Layout +*/ +function Page() { + this.reset = function(b) { + } +} + +/** +@extends Page +@constructor +*/ +function ThreeColumnPage() { + this.init = function(resetCode) { + } +} diff --git a/utils/jsdoc-toolkit/app/test/augments2.js b/utils/jsdoc-toolkit/app/test/augments2.js new file mode 100755 index 0000000..e8388f0 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/augments2.js @@ -0,0 +1,26 @@ +/** +@constructor +*/ +function LibraryItem() { + this.reserve = function() { + } +} + +/** +@constructor +*/ +function Junkmail() { + this.annoy = function() { + } +} + +/** +@inherits Junkmail.prototype.annoy as pester +@augments ThreeColumnPage +@augments LibraryItem +@constructor +*/ +function NewsletterPage() { + this.getHeadline = function() { + } +} diff --git a/utils/jsdoc-toolkit/app/test/borrows.js b/utils/jsdoc-toolkit/app/test/borrows.js new file mode 100755 index 0000000..a5d8ea4 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/borrows.js @@ -0,0 +1,46 @@ +/** +@constructor +*/ +function Layout(p) { + /** initilize 1 */ + this.init = function(p) { + } + + /** get the id */ + this.getId = function() { + } + + /** @type string */ + this.orientation = "landscape"; + + function getInnerElements(elementSecretId){ + } +} + +/** A static method. */ +Layout.units = function() { +} + +/** +@constructor +@borrows Layout#orientation +@borrows Layout-getInnerElements +@borrows Layout.units +*/ +function Page() { + /** reset the page */ + this.reset = function(b) { + } +} + +/** +@constructor +@borrows Layout.prototype.orientation as this.orientation +@borrows Layout.prototype.init as #init +@inherits Page.prototype.reset as #reset +*/ +function ThreeColumnPage() { + /** initilize 2 */ + this.init = function(p) { + } +} diff --git a/utils/jsdoc-toolkit/app/test/borrows2.js b/utils/jsdoc-toolkit/app/test/borrows2.js new file mode 100755 index 0000000..c0d5ea2 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/borrows2.js @@ -0,0 +1,23 @@ +// testing circular borrows + +/** + @class + @borrows Bar#zop as this.my_zop +*/ +function Foo() { + /** this is a zip. */ + this.zip = function() {} + + this.my_zop = new Bar().zop; +} + +/** + @class + @borrows Foo#zip as this.my_zip +*/ +function Bar() { + /** this is a zop. */ + this.zop = function() {} + + this.my_zip = new Foo().zip; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/config.js b/utils/jsdoc-toolkit/app/test/config.js new file mode 100755 index 0000000..0748a21 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/config.js @@ -0,0 +1,22 @@ +/** + * @constructor + * @param person The person. + * @param {string} person.name The person's name. + * @config {integer} age The person's age. + * @config [id=1] Optional id number to use. + * @param connection + */ +function Contact(person, connection) { + +} + +/** + * @constructor + * @param persons + * @config {string} Father The paternal person. + * @config {string} Mother The maternal person. + * @config {string[]} Children And the rest. + */ +function Family(/**Object*/persons) { + +} diff --git a/utils/jsdoc-toolkit/app/test/constructs.js b/utils/jsdoc-toolkit/app/test/constructs.js new file mode 100755 index 0000000..cca5dbd --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/constructs.js @@ -0,0 +1,18 @@ +var Person = makeClass( + /** + @scope Person + */ + { + /** + This is just another way to define a constructor. + @constructs + @param {string} name The name of the person. + */ + initialize: function(name) { + this.name = name; + }, + say: function(message) { + return this.name + " says: " + message; + } + } +);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/encoding.js b/utils/jsdoc-toolkit/app/test/encoding.js new file mode 100755 index 0000000..ba64219 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/encoding.js @@ -0,0 +1,10 @@ + +/** + * @Constructor + * @desc é…置文件 + * @class 什么也ä¸è¿”回 + */ +function Test(conf) { + // do something; +} + diff --git a/utils/jsdoc-toolkit/app/test/encoding_other.js b/utils/jsdoc-toolkit/app/test/encoding_other.js new file mode 100755 index 0000000..b144da4 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/encoding_other.js @@ -0,0 +1,12 @@ + +/** + * @Constructor + * @desc ðïîÛ + * @class ßàáâãäåæçèçìëêíîï °±²³´µ¡¶·¸¹ + */ +function Test(conf) { + // do something; +} + +// run with commanline option -e=iso-8859-5 + diff --git a/utils/jsdoc-toolkit/app/test/event.js b/utils/jsdoc-toolkit/app/test/event.js new file mode 100755 index 0000000..7e41d6f --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/event.js @@ -0,0 +1,54 @@ +/** + * @name Kitchen + * @constructor + * @fires Bakery#event:donutOrdered + */ + +/** + * Fired when some cake is eaten. + * @name Kitchen#event:cakeEaten + * @function + * @param {Number} pieces The number of pieces eaten. + */ + +/** + * Find out if cake was eaten. + * @name Kitchen#cakeEaten + * @function + * @param {Boolean} wasEaten + */ + +/** + * @name getDesert + * @function + * @fires Kitchen#event:cakeEaten + */ + +/** + * @name Bakery + * @constructor + * @extends Kitchen + */ + +/** + * Fired when a donut order is made. + * @name Bakery#event:donutOrdered + * @event + * @param {Event} e The event object. + * @param {String} [e.topping] Optional sprinkles. + */ + +/** + * @constructor + * @borrows Bakery#event:donutOrdered as this.event:cakeOrdered + */ +function CakeShop() { +} + +/** @event */ +CakeShop.prototype.icingReady = function(isPink) { +} + +/** @event */ +function amHungry(/**Boolean*/enoughToEatAHorse) { +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/exports.js b/utils/jsdoc-toolkit/app/test/exports.js new file mode 100755 index 0000000..63a87cb --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/exports.js @@ -0,0 +1,14 @@ +/** @namespace */ +var mxn = {}; + +(function(){ + /** @exports Map as mxn.Map */ + var Map = + /** @constructor */ + mxn.Map = function() { + }; + + /** A method. */ + Map.prototype.doThings = function() { + }; +})();
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/functions_anon.js b/utils/jsdoc-toolkit/app/test/functions_anon.js new file mode 100755 index 0000000..e9dd6c1 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/functions_anon.js @@ -0,0 +1,39 @@ +/** an anonymous constructor executed inline */ +a = new function() { + /** a.b*/ + this.b = 1; + /** a.f */ + this.f = function() { + /** a.c */ + this.c = 2; + } +} + + +/** + named function executed inline +*/ +bar1 = function Zoola1() { + /** property of global */ + this.g = 1; +}(); + +/** + named constructor executed inline +*/ +bar2 = new function Zoola2() { + /** property of bar */ + this.p = 1; +}; + +/** module pattern */ +module = (function () { + /** won't appear in documentation */ + var priv = 1; + + /** @scope module */ + return { + /** will appear as a property of module */ + pub: 1 + } +})(); diff --git a/utils/jsdoc-toolkit/app/test/functions_nested.js b/utils/jsdoc-toolkit/app/test/functions_nested.js new file mode 100755 index 0000000..f044faf --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/functions_nested.js @@ -0,0 +1,33 @@ +/** @constructor */ +function Zop() { +} + +/** + @class +*/ +Foo = function(id) { + // this is a bit twisted, but if you call Foo() you will then + // modify Foo(). This is kinda, sorta non-insane, because you + // would have to call Foo() 100% of the time to use Foo's methods + Foo.prototype.methodOne = function(bar) { + alert(bar); + }; + + // same again + Foo.prototype.methodTwo = function(bar2) { + alert(bar2); + }; + + // and these are only executed if the enclosing function is actually called + // and who knows if that will ever happen? + Bar = function(pez) { + alert(pez); + }; + Zop.prototype.zap = function(p){ + alert(p); + }; + + // but this is only visible inside Foo + function inner() { + } +}; diff --git a/utils/jsdoc-toolkit/app/test/global.js b/utils/jsdoc-toolkit/app/test/global.js new file mode 100755 index 0000000..5ea4894 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/global.js @@ -0,0 +1,13 @@ +/** ecks */ +var x = [1, 2, 4]; + +var y = { + foo: function(){ + } +} + +bar = function() { +} + +function zop() { +} diff --git a/utils/jsdoc-toolkit/app/test/globals.js b/utils/jsdoc-toolkit/app/test/globals.js new file mode 100755 index 0000000..3f83fb1 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/globals.js @@ -0,0 +1,25 @@ +function example(/**Circle*/a, b) { + /** a global defined in function */ + var number = a; + + var hideNumber = function(){ + } + + setNumber = function(){ + } + alert('You have chosen: ' + b); +} + +function initPage() { + var supported = document.createElement && document.getElementsByTagName; + if (!supported) return; + // start of DOM script + var x = document.getElementById('writeroot'); + // etc. +} + +/** an example var */ +var document = new Document(x, y); + +var getNumber = function(){ +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/ignore.js b/utils/jsdoc-toolkit/app/test/ignore.js new file mode 100755 index 0000000..d3fac9e --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/ignore.js @@ -0,0 +1,10 @@ +/** + * A test constructor. + * @constructor + * @ignore + */ +function Ignored() { + /** a method */ + this.bar = function() { + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/inner.js b/utils/jsdoc-toolkit/app/test/inner.js new file mode 100755 index 0000000..37cfa9d --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/inner.js @@ -0,0 +1,16 @@ +/** + * @constructor + */ +function Outer() { + /** + * @constructor + */ + function Inner(name) { + /** The name of this. */ + this.name = name; + } + + this.open = function(name) { + return (new Inner(name)); + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/jsdoc_test.js b/utils/jsdoc-toolkit/app/test/jsdoc_test.js new file mode 100755 index 0000000..0817712 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/jsdoc_test.js @@ -0,0 +1,477 @@ +/** + * @fileoverview This file is to be used for testing the JSDoc parser + * It is not intended to be an example of good JavaScript OO-programming, + * nor is it intended to fulfill any specific purpose apart from + * demonstrating the functionality of the + * <a href='http://sourceforge.net/projects/jsdoc'>JSDoc</a> parser + * + * @author Gabriel Reid gab_reid@users.sourceforge.net + * @version 0.1 + */ + + +/** + * Construct a new Shape object. + * @class This is the basic Shape class. + * It can be considered an abstract class, even though no such thing + * really existing in JavaScript + * @constructor + * @throws MemoryException if there is no more memory + * @throws GeneralShapeException rarely (if ever) + * @return {Shape|Coordinate} A new shape. + */ +function Shape(){ + + /** + * This is an example of a function that is not given as a property + * of a prototype, but instead it is assigned within a constructor. + * For inner functions like this to be picked up by the parser, the + * function that acts as a constructor <b>must</b> be denoted with + * the <b>@constructor</b> tag in its comment. + * @type String + */ + this.getClassName = function(){ + return "Shape"; + } + + /** + * This is an inner method, just used here as an example + * @since version 0.5 + * @author Sue Smart + */ + function addReference(){ + // Do nothing... + } + +} + +/** + * Create a new Hexagon instance. + * @extends Shape + * @class Hexagon is a class that is a <i>logical</i> sublcass of + * {@link Shape} (thanks to the <code>@extends</code> tag), but in + * reality it is completely unrelated to Shape. + * @param {int} sideLength The length of one side for the new Hexagon + * @example + * var h = new Hexagon(2); + * @example + * if (hasHex) { + * hex = new Hexagon(5); + * color = hex.getColor(); + * } + */ +function Hexagon(sideLength) { +} + + +/** + * This is an unattached (static) function that adds two integers together. + * @param {int} One The first number to add + * @param {int} Two The second number to add + * @author Gabriel Reid + * @deprecated So you shouldn't use it anymore! Use {@link Shape#getClassName} instead. + */ +function Add(One, Two){ + return One + Two; +} + + +/** + * The color of this shape + * @type Color + */ +Shape.prototype.color = null; + +/** + * The border of this shape. + * @field + * @type int + */ +Shape.prototype.border = function(){return border;}; + +/* + * These are all the instance method implementations for Shape + */ + +/** + * Get the coordinates of this shape. It is assumed that we're always talking + * about shapes in a 2D location here. + * @requires The {@link Shape} class + * @returns A Coordinate object representing the location of this Shape + * @type Coordinate[] + */ +Shape.prototype.getCoords = function(){ + return this.coords; +} + +/** + * Get the color of this shape. + * @see #setColor + * @see The <a href="http://example.com">Color</a> library. + * @link Shape + * @type Color + */ +Shape.prototype.getColor = function(){ + return this.color; +} + +/** + * Set the coordinates for this Shape + * @param {Coordinate} coordinates The coordinates to set for this Shape + */ +Shape.prototype.setCoords = function(coordinates){ + this.coords = coordinates; +} + +/** + * Set the color for this Shape + * @param {Color} color The color to set for this Shape + * @param other There is no other param, but it can still be documented if + * optional parameters are used + * @throws NonExistantColorException (no, not really!) + * @see #getColor + */ +Shape.prototype.setColor = function(color){ + this.color = color; +} + +/** + * Clone this shape + * @returns A copy of this shape + * @type Shape + * @author Gabriel Reid + */ +Shape.prototype.clone = function(){ + return new Shape(); +} + +/** + * Create a new Rectangle instance. + * @class A basic rectangle class, inherits from Shape. + * This class could be considered a concrete implementation class + * @constructor + * @param {int} width The optional width for this Rectangle + * @param {int} height Thie optional height for this Rectangle + * @author Gabriel Reid + * @see Shape is the base class for this + * @augments Shape + * @hilited + */ +function Rectangle(width, // This is the width + height // This is the height + ){ + if (width){ + this.width = width; + if (height){ + this.height = height; + } + } +} + + +/* Inherit from Shape */ +Rectangle.prototype = new Shape(); + +/** + * Value to represent the width of the Rectangle. + * <br>Text in <b>bold</b> and <i>italic</i> and a + * link to <a href="http://sf.net">SourceForge</a> + * @private + * @type int + */ +Rectangle.prototype.width = 0; + +/** + * Value to represent the height of the Rectangle + * @private + * @type int + */ +Rectangle.prototype.height = 0; + +/** + * Get the type of this object. + * @type String + */ +Rectangle.prototype.getClassName= function(){ + return "Rectangle"; +} + +/** + * Get the value of the width for the Rectangle + * @type int + * @see Rectangle#setWidth + */ +Rectangle.prototype.getWidth = function(){ + return this.width; +} + +/** + * Get the value of the height for the Rectangle. + * Another getter is the {@link Shape#getColor} method in the + * {@link Shape} base class. + * @return The height of this Rectangle + * @type int + * @see Rectangle#setHeight + */ +Rectangle.prototype.getHeight = function(){ + return this.height; +} + +/** + * Set the width value for this Rectangle. + * @param {int} width The width value to be set + * @see #setWidth + */ +Rectangle.prototype.setWidth = function(width){ + this.width = width; +} + +/** + * Set the height value for this Rectangle. + * @param {int} height The height value to be set + * @see #getHeight + */ +Rectangle.prototype.setHeight = function(height){ + this.height = height; +} + +/** + * Get the value for the total area of this Rectangle + * @return total area of this Rectangle + * @type int + */ +Rectangle.prototype.getArea = function(){ + return width * height; +} + + +/** + * Create a new Square instance. + * @class A Square is a subclass of {@link Rectangle} + * @param {int} width The optional width for this Rectangle + * @param {int} height The optional height for this Rectangle + * @augments Rectangle + */ +function Square(width, height){ + if (width){ + this.width = width; + if (height){ + this.height = height; + } + } + +} + +/* Square is a subclass of Rectangle */ +Square.prototype = new Rectangle(); + +/** + * Set the width value for this Shape. + * @param {int} width The width value to be set + * @see #getWidth + */ +Square.prototype.setWidth = function(width){ + this.width = this.height = width; +} + +/** + * Set the height value for this Shape + * Sets the {@link Rectangle#height} attribute in the Rectangle. + * @param {int} height The height value to be set + */ +Square.prototype.setHeight = function(height){ + this.height = this.width = height; +} + + +/** + * Create a new Circle instance based on a radius. + * @class Circle class is another subclass of Shape + * @extends Shape + * @param {int} radius The optional radius of this {@link Circle } + * @mixin Square.prototype.setWidth as this.setDiameter + */ +function Circle(radius){ + if (radius) { + /** The radius of the this Circle. */ + this.radius = radius; + } +} + +/* Circle inherits from {@link Shape} */ +Circle.prototype = new Shape(); + +/** + * The radius value for this Circle + * @private + * @type int + */ +Circle.prototype.radius = 0; + +/** + * A very simple class (static) field that is also a constant + * @final + * @type float + */ +Circle.PI = 3.14; + +/** + * Get the radius value for this Circle + * @type int + * @see #setRadius + */ +Circle.prototype.getRadius = function(){ + return this.radius; +} + +/** + * Set the radius value for this Circle + * @param {int} radius The {@link Circle#radius} value to set + * @see #getRadius + */ +Circle.prototype.setRadius = function(radius){ + this.radius = radius; +} + +/** + * An example of a class (static) method that acts as a factory for Circle + * objects. Given a radius value, this method creates a new Circle. + * @param {int} radius The radius value to use for the new Circle. + * @type Circle + */ +Circle.createCircle = function(radius){ + return new Circle(radius); +} + + +/** + * Create a new Coordinate instance based on x and y grid data. + * @class Coordinate is a class that can encapsulate location information. + * @param {int} [x=0] The optional x portion of the Coordinate + * @param {int} [y=0] The optinal y portion of the Coordinate + */ +function Coordinate(x, y){ + if (x){ + this.x = x; + if (y){ + this.y = y; + } + } +} + +/** + * The x portion of the Coordinate + * @type int + * @see #getX + * @see #setX + */ +Coordinate.prototype.x = 0; + +/** + * The y portion of the Coordinate + * @type int + * @see #getY + * @see #setY + */ +Coordinate.prototype.y = 0; + +/** + * Gets the x portion of the Coordinate. + * @type int + * @see #setX + */ +Coordinate.prototype.getX = function(){ + return this.x; +} + +/** + * Get the y portion of the Coordinate. + * @type int + * @see #setY + */ +Coordinate.prototype.getY = function(){ + return this.y; +} + +/** + * Sets the x portion of the Coordinate. + * @param {int} x The x value to set + * @see #getX + */ +Coordinate.prototype.setX = function(x){ + this.x = x; +} + +/** + * Sets the y portion of the Coordinate. + * @param {int} y The y value to set + * @see #getY + */ +Coordinate.prototype.setY = function(y){ + this.y = y; +} + +/** + * @class This class exists to demonstrate the assignment of a class prototype + * as an anonymous block. + */ +function ShapeFactory(){ +} + +ShapeFactory.prototype = { + /** + * Creates a new {@link Shape} instance. + * @return A new {@link Shape} + * @type Shape + */ + createShape: function(){ + return new Shape(); + } +} + +/** + * An example of a singleton class + * @param ... Arguments represent {@link coordinate}s in the shape. + * @constructor + */ +MySingletonShapeFactory = function(){ + + /** + * Get the next {@link Shape} + * @type Shape + * @return A new {@link Shape} + */ + this.getShape = function(){ + return null; + } + +} + + +/** + * Create a new Foo instance. + * @class This is the Foo class. It exists to demonstrate 'nested' classes. + * @constructor + * @see Foo.Bar + */ +function Foo(){} + +/** + * Creates a new instance of Bar. + * @class This class exists to demonstrate 'nested' classes. + * @constructor + * @see Foo.Bar + */ +function Bar(){} + +/** + * Nested class + * @constructor + */ +Foo.Bar = function(){ + /** The x. */ this.x = 2; +} + +Foo.Bar.prototype = new Bar(); +/** The y. */ +Foo.Bar.prototype.y = '3'; diff --git a/utils/jsdoc-toolkit/app/test/lend.js b/utils/jsdoc-toolkit/app/test/lend.js new file mode 100755 index 0000000..92b15d5 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/lend.js @@ -0,0 +1,33 @@ + /** @class */ +var Person = Class.create( + /** + @lends Person.prototype + */ + { + initialize: function(name) { + this.name = name; + }, + say: function(message) { + return this.name + ': ' + message; + } + } + ); + +/** @lends Person.prototype */ +{ + /** like say but more musical */ + sing: function(song) { + } +} + +/** @lends Person */ +{ + getCount: function() { + } +} + +/** @lends Unknown.prototype */ +{ + notok: function() { + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/memberof.js b/utils/jsdoc-toolkit/app/test/memberof.js new file mode 100755 index 0000000..883bbde --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/memberof.js @@ -0,0 +1,19 @@ +/** @constructor */ +pack = function() { + this.init = function(){} + function config(){} +} + + pack.build = function(task) {}; + +/** @memberOf pack */ +pack.install = function() {} + +/** @memberOf pack */ +pack.install.overwrite = function() {} + +/** @memberOf pack */ +clean = function() {} + +/** @memberOf pack-config */ +install = function() {}; diff --git a/utils/jsdoc-toolkit/app/test/memberof_constructor.js b/utils/jsdoc-toolkit/app/test/memberof_constructor.js new file mode 100755 index 0000000..80fde73 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/memberof_constructor.js @@ -0,0 +1,17 @@ +/** @constructor */ +function Circle(){} + +/** + @constructor + @memberOf Circle# + */ +Circle.prototype.Tangent = function(){}; + +// renaming Circle#Tangent to Circle#Circle#Tangent + +/** + @memberOf Circle#Tangent# + */ +Circle.prototype.Tangent.prototype.getDiameter = function(){}; + + diff --git a/utils/jsdoc-toolkit/app/test/module.js b/utils/jsdoc-toolkit/app/test/module.js new file mode 100755 index 0000000..5b3fe42 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/module.js @@ -0,0 +1,17 @@ +/** @namespace */ +myProject = myProject || {}; + +/** @namespace */ +myProject.myModule = (function () { + /** describe myPrivateVar here */ + var myPrivateVar = ""; + + var myPrivateMethod = function () { + } + + /** @scope myProject.myModule */ + return { + myPublicMethod: function () { + } + }; +})();
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/name.js b/utils/jsdoc-toolkit/app/test/name.js new file mode 100755 index 0000000..e88a51a --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/name.js @@ -0,0 +1,19 @@ +/** + @name Response + @class +*/ + +Response.prototype = { + /** + @name Response#text + @function + @description + Gets the body of the response as plain text + @returns {String} + Response as text + */ + + text: function() { + return this.nativeResponse.responseText; + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/namespace_nested.js b/utils/jsdoc-toolkit/app/test/namespace_nested.js new file mode 100755 index 0000000..46cafa2 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/namespace_nested.js @@ -0,0 +1,23 @@ +/** + @namespace This is the first namespace. +*/ +ns1 = {}; + +/** + This is the second namespace. + @namespace +*/ +ns1.ns2 = {}; + +/** + This part of ns1.ns2 + @constructor +*/ +ns1.ns2.Function1 = function() { +}; + +ns1.staticFunction = function() { +}; + +/** A static field in a namespace. */ +ns1.ns2.staticField = 1; diff --git a/utils/jsdoc-toolkit/app/test/nocode.js b/utils/jsdoc-toolkit/app/test/nocode.js new file mode 100755 index 0000000..1cf99bc --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/nocode.js @@ -0,0 +1,13 @@ +/**#nocode+*/ + /** + @name star + @function + */ + function blahblah() { + + } +/**#nocode-*/ + +function yaddayadda() { + +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/oblit_anon.js b/utils/jsdoc-toolkit/app/test/oblit_anon.js new file mode 100755 index 0000000..8d9e941 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/oblit_anon.js @@ -0,0 +1,20 @@ +/** the options */ +opt = Opt.get( + arguments, + { + d: "directory", + c: "conf", + "D[]": "define" + } +); + +/** configuration */ +opt.conf = { + /** keep */ + keep: true, + /** base */ + base: getBase(this, {p: properties}) +} + + + diff --git a/utils/jsdoc-toolkit/app/test/overview.js b/utils/jsdoc-toolkit/app/test/overview.js new file mode 100755 index 0000000..1dfc09b --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/overview.js @@ -0,0 +1,20 @@ +/** + * @overview This "library" contains a + * lot of classes and functions. + * @example + <pre> + var x (x < 1); + alert("This 'is' \"code\""); + </pre> + * @name My Cool Library + * @author Joe Smith jsmith@company.com + * @version 0.1 + */ + +/** + * Gets the current foo + * @param {String} fooId The unique identifier for the foo. + * @return {Object} Returns the current foo. + */ +function getFoo(fooID){ +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/param_inline.js b/utils/jsdoc-toolkit/app/test/param_inline.js new file mode 100755 index 0000000..09845b2 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/param_inline.js @@ -0,0 +1,37 @@ +/** + @constructor + @param columns The number of columns. +*/ +function Layout(/**int*/columns){ + /** + @param [id] The id of the element. + @param elName The name of the element. + */ + this.getElement = function( + /** string */ elName, + /** number|string */ id + ) { + }; + + /** + @constructor + */ + this.Canvas = function(top, left, /**int*/width, height) { + /** Is it initiated yet? */ + this.initiated = true; + } + + this.rotate = function(/**nothing*/) { + } + + /** + @param x + @param y + @param {zoppler} z*/ + this.init = function(x, y, /**abbler*/z) { + /** The xyz. */ + this.xyz = x+y+z; + this.getXyz = function() { + } + } +} diff --git a/utils/jsdoc-toolkit/app/test/params_optional.js b/utils/jsdoc-toolkit/app/test/params_optional.js new file mode 100755 index 0000000..18bf598 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/params_optional.js @@ -0,0 +1,8 @@ + +/** + * @param {Page[]} pages + * @param {number} [id] Specifies the id, if applicable. + * @param {String} [title = This is untitled.] Specifies the title. + */ +function Document(pages, id, title){ +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/prototype.js b/utils/jsdoc-toolkit/app/test/prototype.js new file mode 100755 index 0000000..1147008 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/prototype.js @@ -0,0 +1,17 @@ +/** @constructor */ +function Article() { +} + +Article.prototype.init = function(title) { + /** the instance title */ + this.title = title; + + /** the static counter */ + Article.counter = 1; +} + +a = new Article(); +a.Init("my title"); + +print(a.title); +print(Article.counter);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/prototype_nested.js b/utils/jsdoc-toolkit/app/test/prototype_nested.js new file mode 100755 index 0000000..e8ca1ce --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/prototype_nested.js @@ -0,0 +1,9 @@ +/** @constructor */ +function Word() { +} + +Word.prototype.reverse = function() { +} + +Word.prototype.reverse.utf8 = function() { +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/prototype_oblit.js b/utils/jsdoc-toolkit/app/test/prototype_oblit.js new file mode 100755 index 0000000..6cfc39c --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/prototype_oblit.js @@ -0,0 +1,13 @@ +/** @constructor */ +function Article() { +} + +Article.prototype = { + /** instance get title */ + getTitle: function(){ + } +} + +/** static get title */ +Article.getTitle = function(){ +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/prototype_oblit_constructor.js b/utils/jsdoc-toolkit/app/test/prototype_oblit_constructor.js new file mode 100755 index 0000000..9248248 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/prototype_oblit_constructor.js @@ -0,0 +1,24 @@ +/** @constructor */ +function Article() { +} + +Article.prototype = { + /** @constructor */ + Title: function(title) { + /** the value of the Title instance */ + this.title = title; + }, + + init: function(pages) { + /** the value of the pages of the Article instance */ + this.pages = pages; + } +} + +f = new Article(); +f.init("one two three"); + +t = new f.Title("my title"); + +print(f.pages); +print(t.title);
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/public.js b/utils/jsdoc-toolkit/app/test/public.js new file mode 100755 index 0000000..35d34f6 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/public.js @@ -0,0 +1,10 @@ +/**@constructor*/ +function Foo() { + /** + @public + @static + @field + */ + var bar = function(x) { + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/scripts/code.js b/utils/jsdoc-toolkit/app/test/scripts/code.js new file mode 100755 index 0000000..e9d7ed2 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/scripts/code.js @@ -0,0 +1,5 @@ +/** + @class + */ +function thisiscode() { +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/scripts/notcode.txt b/utils/jsdoc-toolkit/app/test/scripts/notcode.txt new file mode 100755 index 0000000..fcd737e --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/scripts/notcode.txt @@ -0,0 +1,5 @@ +(This is not code) +function foo(){{{{ +( +! +@
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/shared.js b/utils/jsdoc-toolkit/app/test/shared.js new file mode 100755 index 0000000..e1c277a --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/shared.js @@ -0,0 +1,42 @@ + +/** + * Builtin object. + * @class + * @name Array + */ + +/**#@+ + * Extension to builtin array. + * @memberOf Array + * @method + */ + +/** + * @returns Boolen if some array members... + */ +Array.prototype.some = function(){}; + +/** + * Change every element of an array. + * @returns Filtered array copy. + */ +Array.prototype.filter = function(){}; + +/**#@-*/ + + +/** + * A first in, first out data structure. + * @constructor + */ +Queue = function(){}; + +/**#@+ + * Extension to Queue. + * @memberOf Queue + */ + +rewind = function(){ +} + +// should close automatically here.
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/shared2.js b/utils/jsdoc-toolkit/app/test/shared2.js new file mode 100755 index 0000000..3f7736a --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/shared2.js @@ -0,0 +1,2 @@ +startOver = function(){ +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/shortcuts.js b/utils/jsdoc-toolkit/app/test/shortcuts.js new file mode 100755 index 0000000..f738f1e --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/shortcuts.js @@ -0,0 +1,22 @@ +// /**#=+ +// * { +// * 'D': 'Date.prototype', +// * '$N': 'Number' +// * } +// */ +// var D = Date.prototype, +// $N = Number; +// +// D.locale = function(){ +// }; +// +// /** +// @return {string} The cardinal number string. +// */ +// $N.nth = function(n){ +// }; +// +// LOAD.file = function(){ +// } +// +// /**#=-*/
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/static_this.js b/utils/jsdoc-toolkit/app/test/static_this.js new file mode 100755 index 0000000..9407b20 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/static_this.js @@ -0,0 +1,13 @@ +/** the parent */ +var box = {}; + +/** @namespace */ +box.holder = {} + +box.holder.foo = function() { + /** the counter */ + this.counter = 1; +} + +box.holder.foo(); +print(box.holder.counter); diff --git a/utils/jsdoc-toolkit/app/test/synonyms.js b/utils/jsdoc-toolkit/app/test/synonyms.js new file mode 100755 index 0000000..09066b9 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/synonyms.js @@ -0,0 +1,31 @@ +/** + @class + @inherits Bar#zop as #my_zop +*/ +function Foo() { + /** this is a zip. */ + this.zip = function() {} + + /** from Bar */ + this.my_zop = new Bar().zop; +} + +/** + @class + @borrows Foo#zip as this.my_zip +*/ +function Bar() { + /** this is a zop. */ + this.zop = function() {} + + /** from Foo */ + this.my_zip = new Foo().zip; +} + +/** @namespace */ +var myObject = { + /** + @type function + */ + myFunc: getFunction() +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/tosource.js b/utils/jsdoc-toolkit/app/test/tosource.js new file mode 100755 index 0000000..706d476 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/tosource.js @@ -0,0 +1,23 @@ +/** + * @param {Object} object + * @return {string} + */ +function valueOf(object) {} + +/** + * @param {Object} object + * @return {string} + */ +function toString(object) {} + +/** + * @param {Object} object + * @return {string} + */ +function toSource(object) {} + +/** + * @param {Object} object + * @return {string} + */ +function constructor(object) {}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/app/test/variable_redefine.js b/utils/jsdoc-toolkit/app/test/variable_redefine.js new file mode 100755 index 0000000..2c07da0 --- /dev/null +++ b/utils/jsdoc-toolkit/app/test/variable_redefine.js @@ -0,0 +1,14 @@ +/** @constructor */ +function Foo() { + var bar = 1; + bar = 2; // redefining a private + + this.baz = 1; + baz = 2; // global + + /** a private */ + var blap = { + /** in here */ + tada: 1 + } +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/changes.txt b/utils/jsdoc-toolkit/changes.txt new file mode 100755 index 0000000..35ee299 --- /dev/null +++ b/utils/jsdoc-toolkit/changes.txt @@ -0,0 +1,96 @@ +== 2.3.0 == + + * Added option -u, --unique to avoid bug that causes multiple symbols with names that differ only by case to overwrite each others output on case-insensitive filesystems. ( issue #162 ) + * Fixed bug where {@links} in @deprecated tags did not resolve. ( issue #220 ) + * Fixed bug that caused parens around a function to make it to be unrecognized. ( issue #213 ) + * Fixed bug prevented explicit links to named anchors from working (thanks katgao.pku). ( issue #215 ) + * Fixed bug that prevented full description from appearing in file overview. ( issue #224 ) + +== 2.2.1 == + + * Fixed bug with class template, where sorting of methods was accidentally removed (thanks dezfowler). + * Added missing test files for the @exports unit tests. + +== 2.2.0 == + + * Fixed bug that caused exception when given a folder containing non-js files, even with the x commandline option set to "js". ( issue #193 ) + * Fixed typo in index template [patch submitted by olle]. ( issue #198 ) + * Modified @borrows tag experimentally to allow for missing "as ..." clause. + * Added support for the @exports tag, to allow one symbol to be documented as another. + * Added support for the -S option to document code following the Secure Modules pattern. + +== 2.1.0 == + + * Added support for the @event tag. + * Fixed bug that prevented the : character from appearing in symbol names. + * Fixed bug that prevented underscored symbols marked with @public being tagged as private. (issue #184 ) + * Fixed bug that randomly affected the @memberOf tag when the name of the symbol did not include the parent name. + * Fixed bug that prevented templates that were not in the jsdoc-toolkit folder from being found. ( issue #176 ) + * Added ability to check for trailing slash on template path. ( issue #177 ) + * Modified classDesc so that it no longer is appended with the constructor desc. + * Fixed call to plugin onDocCommentSrc. + * Added missing support for inline doc comments for function return types. ( issue #189 ) + * Added command line option -q, --quiet. + * Added command line option -E, --exclude. ( issue #143 ) + * Added 2 more hooks for plugins. ( issue #163 ) + * Added support for extending built-ins. ( issue #160 ) + * Added "compact" option to JSDOC.JsPlate.prototype.process. ( issue #159 ) + * @augments no longer documents static members as inherited. ( issue #138 ) + * @link to a class now goes to the page for that class, not the constructor. ( issue #178 ) + * Warnings of mismatched curly brace now include filename. ( issue #166 ) + * Fixed bug affecting template paths loaded via a configuration file when the trailing slash is missing. ( issue #191 ) + * Minor optimizations. + +== 2.0.2 == + + * Fixed bug that sometimes caused an example of division in the source code to be interpretted as a regex by the JsDoc Toolkit analyzer. ( issue #158 ) + * Fixed a bug that prevented private variables marked as @public from appearing in the documentation. ( issue #161 ) + * Fixed bug that prevented variable names with underscored properties from appearing in summaries. ( issue #173 ) + +== 2.0.1 == + + * Fixed bug that prevented @fileOverview tag from being recognized. + * Added support for @fieldOf as a synonym for @field plus @memberOf. + * Added support for @name tag in a @fileOverview comment to control the displayed name of the file. + * Added support for multiple @example tags. ( issue #152 ) + * Modified style sheet of jsdoc template to make more readable. ( issue #151 ) + * Fixed bug that prevented @since documentation from displaying correctly when it appeared in a class. ( issue #150 ) + * Fixed bug that caused inhertited properties to sometimes not resolve correctly. ( issue #144 ) + * Modified so that trailing whitespace in @example is always trimmed. ( issue #153 ) + * Added support for elseif to JsPlate. (hat tip to fredck) + * Added support for @location urls in the @overview comment to the jsdoc template. + +== Changes From Versions 1.4.0 to 2.0.0 == + + * Upgraded included version of Rhino from 1.6 to 1.7R1. + * Removed circular references in parsed documentation objects. + * Improved inheritance handling, now properties and events can be inherited same as methods. + * Improved handling of cross-file relationships, now having two related objects in separate files is not a problem. + * Improved ability to recognize membership of previously defined objects. + * Added ability to redefine parsing behavior with plugins. + * @methodOf is a synonym for @function and @memberOf. + * Added @default to document default values of members that are objects. + * Added ability to parse and refer to inner functions. + * Fixed bug that appeared when calling a method to set properties of the instance referred to by "this". + * Added ability to automatically create links to other symbols. + * New "jsdoc" template now produces fully W3C valid XHTML. + * Inline parameter type hint comments are now documented. + * Fixed error: Locally scoped variables (declared with var) no longer appear as global. + * It is now possible to run JsDoc Toolkit from any directory. + * Added support for inline {@link ...} tags. + * Added support for the -H command-line option to allow for custom content handlers. + * Tag names @inherits and @scope changed to @borrows and @lends. + ? Combining @constructor in a doclet with @lends now supported. + * Multiple @lend tags now supported. + * Added support for the @constructs tag, used inside a @lends block. + * Added support for the @constant tag. + * Fixed bug that prevented the use of [] as a default value. + * Added support for the @field tag. + * Added support for the @public tag (applied to inner functions). + * @namespace tag can now be applied to functions, not just object literals. + * Added support for the -s command line option to suppress source code output. + * Added new unit test framework. + * Underscored symbols are now treated as if they have a @private tag by default. + * Improved support for anonymous constructors. + * Added support for the nocode meta tag. +
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/conf/sample.conf b/utils/jsdoc-toolkit/conf/sample.conf new file mode 100755 index 0000000..ad0f08e --- /dev/null +++ b/utils/jsdoc-toolkit/conf/sample.conf @@ -0,0 +1,31 @@ +/* + This is an example of one way you could set up a configuration file to more + conveniently define some commandline options. You might like to do this if + you frequently reuse the same options. Note that you don't need to define + every option in this file, you can combine a configuration file with + additional options on the commandline if your wish. + + You would include this configuration file by running JsDoc Toolkit like so: + java -jar jsrun.jar app/run.js -c=conf/sample.conf + +*/ + +{ + // source files to use + _: ['app/test/jsdoc_test.js'], + + // document all functions, even uncommented ones + a: true, + + // including those marked @private + p: true, + + // some extra variables I want to include + D: {generatedBy: "Michael Mathews", copyright: "2008"}, + + // use this directory as the output directory + d: "docs", + + // use this template + t: "templates/jsdoc" +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/java/build.xml b/utils/jsdoc-toolkit/java/build.xml new file mode 100755 index 0000000..bb845ce --- /dev/null +++ b/utils/jsdoc-toolkit/java/build.xml @@ -0,0 +1,36 @@ +<project> + <target name="clean"> + <delete dir="build"/> + </target> + + <target name="compile"> + <mkdir dir="build/classes"/> + <javac + srcdir="src" destdir="build/classes" + classpath="./classes/js.jar" + /> + </target> + + <target name="jar"> + <mkdir dir="build/jar"/> + <jar destfile="build/jar/jsrun.jar" basedir="build/classes"> + <manifest> + <attribute name="Main-Class" value="JsRun"/> + <attribute name="Class-Path" value="./java/classes/js.jar"/> + </manifest> + </jar> + </target> + + <target name="debugjar"> + <mkdir dir="build/jar"/> + <jar destfile="build/jar/jsdebug.jar" basedir="build/classes"> + <manifest> + <attribute name="Main-Class" value="JsDebugRun"/> + <attribute name="Class-Path" value="./java/classes/js.jar"/> + </manifest> + </jar> + </target> + + <target name="clean-build" depends="clean,compile,jar"/> + <target name="clean-debug" depends="clean,compile,debugjar"/> +</project>
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/java/build_1.4.xml b/utils/jsdoc-toolkit/java/build_1.4.xml new file mode 100755 index 0000000..ab408a4 --- /dev/null +++ b/utils/jsdoc-toolkit/java/build_1.4.xml @@ -0,0 +1,36 @@ +<project default="clean-build"><!-- use this build script if you are stuck with ant version 1.4 --> + <target name="clean"> + <delete dir="build"/> + </target> + + <target name="compile"> + <mkdir dir="build/classes"/> + <javac + srcdir="src" destdir="build/classes" + classpath="./classes/js.jar" + /> + </target> + + <target name="jar"> + <mkdir dir="build/jar"/> + <jar jarfile="build/jar/jsrun.jar" basedir="build/classes"> + <manifest> + <attribute name="Main-Class" value="JsRun"/> + <attribute name="Class-Path" value="./java/classes/js.jar"/> + </manifest> + </jar> + </target> + + <target name="debugjar"> + <mkdir dir="build/jar"/> + <jar jarfile="build/jar/jsdebug.jar" basedir="build/classes"> + <manifest> + <attribute name="Main-Class" value="JsDebugRun"/> + <attribute name="Class-Path" value="./java/classes/js.jar"/> + </manifest> + </jar> + </target> + + <target name="clean-build" depends="clean,compile,jar"/> + <target name="clean-debug" depends="clean,compile,debugjar"/> +</project> diff --git a/utils/jsdoc-toolkit/java/classes/js.jar b/utils/jsdoc-toolkit/java/classes/js.jar Binary files differnew file mode 100755 index 0000000..0352cb1 --- /dev/null +++ b/utils/jsdoc-toolkit/java/classes/js.jar diff --git a/utils/jsdoc-toolkit/java/src/JsDebugRun.java b/utils/jsdoc-toolkit/java/src/JsDebugRun.java new file mode 100755 index 0000000..319a5c6 --- /dev/null +++ b/utils/jsdoc-toolkit/java/src/JsDebugRun.java @@ -0,0 +1,21 @@ +/** + * A trivial bootstrap class that simply adds the path to the + * .js file as an argument to the Rhino call. This little hack + * allows the code in the .js file to have access to it's own + * path via the Rhino arguments object. This is necessary to + * allow the .js code to find resource files in a location + * relative to itself. + * + * USAGE: java -jar jsdebug.jar path/to/file.js + */ +public class JsDebugRun { + public static void main(String[] args) { + String[] jsargs = {"-j="+args[0]}; + + String[] allArgs = new String[jsargs.length + args.length]; + System.arraycopy(args, 0, allArgs, 0, args.length); + System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); + + org.mozilla.javascript.tools.debugger.Main.main(allArgs); + } +} diff --git a/utils/jsdoc-toolkit/java/src/JsRun.java b/utils/jsdoc-toolkit/java/src/JsRun.java new file mode 100755 index 0000000..25f519a --- /dev/null +++ b/utils/jsdoc-toolkit/java/src/JsRun.java @@ -0,0 +1,21 @@ +/** + * A trivial bootstrap class that simply adds the path to the + * .js file as an argument to the Rhino call. This little hack + * allows the code in the .js file to have access to it's own + * path via the Rhino arguments object. This is necessary to + * allow the .js code to find resource files in a location + * relative to itself. + * + * USAGE: java -jar jsrun.jar path/to/file.js + */ +public class JsRun { + public static void main(String[] args) { + String[] jsargs = {"-j="+args[0]}; + + String[] allArgs = new String[jsargs.length + args.length]; + System.arraycopy(args, 0, allArgs, 0, args.length); + System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); + + org.mozilla.javascript.tools.shell.Main.main(allArgs); + } +} diff --git a/utils/jsdoc-toolkit/jsdebug.jar b/utils/jsdoc-toolkit/jsdebug.jar Binary files differnew file mode 100755 index 0000000..a0ac7da --- /dev/null +++ b/utils/jsdoc-toolkit/jsdebug.jar diff --git a/utils/jsdoc-toolkit/jsrun.jar b/utils/jsdoc-toolkit/jsrun.jar Binary files differnew file mode 100755 index 0000000..49c03f4 --- /dev/null +++ b/utils/jsdoc-toolkit/jsrun.jar diff --git a/utils/jsdoc-toolkit/jsrun.sh b/utils/jsdoc-toolkit/jsrun.sh new file mode 100755 index 0000000..74ca79c --- /dev/null +++ b/utils/jsdoc-toolkit/jsrun.sh @@ -0,0 +1,52 @@ +#!/bin/ksh + +# launcher script for jsdoc +# Author: Avi Deitcher +# +# This program is released under the MIT License as follows: + +# Copyright (c) 2008-2009 Atomic Inc <avi@jsorm.com> +# +#Permission is hereby granted, free of charge, to any person +#obtaining a copy of this software and associated documentation +#files (the "Software"), to deal in the Software without +#restriction, including without limitation the rights to use, +#copy, modify, merge, publish, distribute, sublicense, and/or sell +#copies of the Software, and to permit persons to whom the +#Software is furnished to do so, subject to the following +#conditions: +## +#The above copyright notice and this permission notice shall be +#included in all copies or substantial portions of the Software. +# +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +#OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +#NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +#WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +#FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +#OTHER DEALINGS IN THE SOFTWARE. +# + + +if [[ -n "$JSDOCDIR" ]]; then + _DOCDIR="-Djsdoc.dir=$JSDOCDIR" + _APPDIR="$JSDOCDIR/app" + _BASEDIR="$JSDOCDIR" +else + _DOCDIR="" + _APPDIR="./app" + _BASEDIR="." +fi + +if [[ -n "$JSDOCTEMPLATEDIR" ]]; then + _TDIR="-Djsdoc.template.dir=$JSDOCTEMPLATEDIR" +else + _TDIR="" +fi + +CMD="java $_DOCDIR $_TDIR -jar $_BASEDIR/jsrun.jar $_APPDIR/run.js $@" +echo $CMD +$CMD + diff --git a/utils/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl b/utils/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl new file mode 100755 index 0000000..32f4358 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl @@ -0,0 +1,17 @@ +<div align="center">{+new Link().toFile("index.html").withText("Class Index")+} +| {+new Link().toFile("files.html").withText("File Index")+}</div> +<hr /> +<h2>Classes</h2> +<ul class="classList"> + <for each="thisClass" in="data"> + <li>{! + if (thisClass.alias == "_global_") { + output += "<i>"+new Link().toClass(thisClass.alias)+"</i>"; + } + else { + output += new Link().toClass(thisClass.alias); + } + !}</li> + </for> +</ul> +<hr />
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl b/utils/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl new file mode 100755 index 0000000..86c7590 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}"" /> + {! Link.base = ""; /* all generated links will be relative to this */ !} + <title>JsDoc Reference - File Index</title> + <meta name="generator" content="JsDoc Toolkit" /> + + <style type="text/css"> + {+include("static/default.css")+} + </style> + </head> + + <body> + {+include("static/header.html")+} + + <div id="index"> + {+publish.classesIndex+} + </div> + + <div id="content"> + <h1 class="classTitle">File Index</h1> + + <for each="item" in="data"> + <div> + <h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2> + <if test="item.desc">{+resolveLinks(item.desc)+}</if> + <dl> + <if test="item.author"> + <dt class="heading">Author:</dt> + <dd>{+item.author+}</dd> + </if> + <if test="item.version"> + <dt class="heading">Version:</dt> + <dd>{+item.version+}</dd> + </if> + {! var locations = item.comment.getTag('location').map(function($){return $.toString().replace(/(^\$ ?| ?\$$)/g, '').replace(/^HeadURL: https:/g, 'http:');}) !} + <if test="locations.length"> + <dt class="heading">Location:</dt> + <for each="location" in="locations"> + <dd><a href="{+location+}">{+location+}</a></dd> + </for> + </if> + </dl> + </div> + <hr /> + </for> + + </div> + <div class="fineprint" style="clear:both"> + <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+} + </div> + </body> +</html>
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/class.tmpl b/utils/jsdoc-toolkit/templates/jsdoc/class.tmpl new file mode 100755 index 0000000..e51f1d3 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/class.tmpl @@ -0,0 +1,646 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" /> + <meta name="generator" content="JsDoc Toolkit" /> + {! Link.base = "../"; /* all generated links will be relative to this */ !} + <title>JsDoc Reference - {+data.alias+}</title> + + <style type="text/css"> + {+include("static/default.css")+} + </style> + </head> + + <body> +<!-- ============================== header ================================= --> + <!-- begin static/header.html --> + {+include("static/header.html")+} + <!-- end static/header.html --> + +<!-- ============================== classes index ============================ --> + <div id="index"> + <!-- begin publish.classesIndex --> + {+publish.classesIndex+} + <!-- end publish.classesIndex --> + </div> + + <div id="content"> +<!-- ============================== class title ============================ --> + <h1 class="classTitle"> + {! + var classType = ""; + + if (data.isBuiltin()) { + classType += "Built-In "; + } + + if (data.isNamespace) { + if (data.is('FUNCTION')) { + classType += "Function "; + } + classType += "Namespace "; + } + else { + classType += "Class "; + } + !} + {+classType+}{+data.alias+} + </h1> + +<!-- ============================== class summary ========================== --> + <p class="description"> + <if test="data.augments.length"><br />Extends + {+ + data.augments + .sort() + .map( + function($) { return new Link().toSymbol($); } + ) + .join(", ") + +}.<br /> + </if> + + {+resolveLinks(data.classDesc)+} + + <if test="!data.isBuiltin()">{# isn't defined in any file #} + <br /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}. + </if> + </p> + +<!-- ============================== constructor summary ==================== --> + <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))"> + <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class {+data.alias+}."> + <caption>{+classType+}Summary</caption> + <thead> + <tr> + <th scope="col">Constructor Attributes</th> + <th scope="col">Constructor Name and Description</th> + </tr> + </thead> + <tbody> + <tr> + <td class="attributes">{! + if (data.isPrivate) output += "<private> "; + if (data.isInner) output += "<inner> "; + !} </td> + <td class="nameDescription" {!if (data.comment.getTag("hilited").length){output += 'style="color: red"'}!}> + <div class="fixedFont"> + <b>{+ new Link().toSymbol(data.alias).inner('constructor')+}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if> + </div> + <div class="description">{+resolveLinks(summarize(data.desc))+}</div> + </td> + </tr> + </tbody> + </table> + </if> + +<!-- ============================== properties summary ===================== --> + <if test="data.properties.length"> + {! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} + <if test="ownProperties.length"> + <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class {+data.alias+}."> + <caption>Field Summary</caption> + <thead> + <tr> + <th scope="col">Field Attributes</th> + <th scope="col">Field Name and Description</th> + </tr> + </thead> + <tbody> + <for each="member" in="ownProperties"> + <tr> + <td class="attributes">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + if (member.isConstant) output += "<constant> "; + !} </td> + <td class="nameDescription"> + <div class="fixedFont"> + <if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b> + </div> + <div class="description">{+resolveLinks(summarize(member.desc))+}</div> + </td> + </tr> + </for> + </tbody> + </table> + </if> + + <if test="data.inheritsFrom.length"> + <dl class="inheritsList"> + {! + var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias}); + + var contributers = []; + borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); + for (var i = 0, l = contributers.length; i < l; i++) { + output += + "<dt>Fields borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>" + + + "<dd>" + + borrowedMembers + .filter( + function($) { return $.memberOf == contributers[i] } + ) + .sort(makeSortby("name")) + .map( + function($) { return new Link().toSymbol($.alias).withText($.name) } + ) + .join(", ") + + + "</dd>"; + } + !} + </dl> + </if> + </if> + +<!-- ============================== methods summary ======================== --> + <if test="data.methods.length"> + {! var ownMethods = data.methods.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} + <if test="ownMethods.length"> + <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class {+data.alias+}."> + <caption>Method Summary</caption> + <thead> + <tr> + <th scope="col">Method Attributes</th> + <th scope="col">Method Name and Description</th> + </tr> + </thead> + <tbody> + <for each="member" in="ownMethods"> + <tr> + <td class="attributes">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + !} </td> + <td class="nameDescription"> + <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+} + </div> + <div class="description">{+resolveLinks(summarize(member.desc))+}</div> + </td> + </tr> + </for> + </tbody> + </table> + </if> + + <if test="data.inheritsFrom.length"> + <dl class="inheritsList"> + {! + var borrowedMembers = data.methods.filter(function($) {return $.memberOf != data.alias}); + var contributers = []; + borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); + for (var i = 0, l = contributers.length; i < l; i++) { + output += + "<dt>Methods borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>" + + + "<dd>" + + borrowedMembers + .filter( + function($) { return $.memberOf == contributers[i] } + ) + .sort(makeSortby("name")) + .map( + function($) { return new Link().toSymbol($.alias).withText($.name) } + ) + .join(", ") + + + "</dd>"; + } + + !} + </dl> + </if> + </if> +<!-- ============================== events summary ======================== --> + <if test="data.events.length"> + {! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} + <if test="ownEvents.length"> + <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class {+data.alias+}."> + <caption>Event Summary</caption> + <thead> + <tr> + <th scope="col">Event Attributes</th> + <th scope="col">Event Name and Description</th> + </tr> + </thead> + <tbody> + <for each="member" in="ownEvents"> + <tr> + <td class="attributes">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + !} </td> + <td class="nameDescription"> + <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+} + </div> + <div class="description">{+resolveLinks(summarize(member.desc))+}</div> + </td> + </tr> + </for> + </tbody> + </table> + </if> + + <if test="data.inheritsFrom.length"> + <dl class="inheritsList"> + {! + var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias}); + var contributers = []; + borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); + for (var i = 0, l = contributers.length; i < l; i++) { + output += + "<dt>Events borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>" + + + "<dd>" + + borrowedMembers + .filter( + function($) { return $.memberOf == contributers[i] } + ) + .sort(makeSortby("name")) + .map( + function($) { return new Link().toSymbol($.alias).withText($.name) } + ) + .join(", ") + + + "</dd>"; + } + + !} + </dl> + </if> + </if> + +<!-- ============================== constructor details ==================== --> + <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))"> + <div class="details"><a name="constructor"> </a> + <div class="sectionTitle"> + {+classType+}Detail + </div> + + <div class="fixedFont">{! + if (data.isPrivate) output += "<private> "; + if (data.isInner) output += "<inner> "; + !} + <b>{+ data.alias +}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if> + </div> + + <div class="description"> + {+resolveLinks(data.desc)+} + <if test="data.author"><br /><i>Author: </i>{+data.author+}.</if> + </div> + + <if test="data.example.length"> + <for each="example" in="data.example"> + <pre class="code">{+example+}</pre> + </for> + </if> + + + <if test="data.params.length"> + <dl class="detailList"> + <dt class="heading">Parameters:</dt> + <for each="item" in="data.params"> + <dt> + {+((item.type)?""+("<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type)+"}</span> ")) : "")+} <b>{+item.name+}</b> + <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if> + </dt> + <dd>{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="data.deprecated"> + <dl class="detailList"> + <dt class="heading">Deprecated:</dt> + <dt> + {+resolveLinks(data.deprecated)+} + </dt> + </dl> + </if> + <if test="data.since"> + <dl class="detailList"> + <dt class="heading">Since:</dt> + <dd>{+ data.since +}</dd> + </dl> + </if> + <if test="data.exceptions.length"> + <dl class="detailList"> + <dt class="heading">Throws:</dt> + <for each="item" in="data.exceptions"> + <dt> + {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b> + </dt> + <dd>{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="data.returns.length"> + <dl class="detailList"> + <dt class="heading">Returns:</dt> + <for each="item" in="data.returns"> + <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="data.requires.length"> + <dl class="detailList"> + <dt class="heading">Requires:</dt> + <for each="item" in="data.requires"> + <dd>{+ resolveLinks(item) +}</dd> + </for> + </dl> + </if> + <if test="data.see.length"> + <dl class="detailList"> + <dt class="heading">See:</dt> + <for each="item" in="data.see"> + <dd>{+ new Link().toSymbol(item) +}</dd> + </for> + </dl> + </if> + + </div> + </if> + +<!-- ============================== field details ========================== --> + <if test="defined(ownProperties) && ownProperties.length"> + <div class="sectionTitle"> + Field Detail + </div> + <for each="member" in="ownProperties"> + <a name="{+Link.symbolNameToLinkName(member)+}"> </a> + <div class="fixedFont">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + if (member.isConstant) output += "<constant> "; + !} + + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> + <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b> + + </div> + <div class="description"> + {+resolveLinks(member.desc)+} + <if test="member.srcFile != data.srcFile"> + <br /> + <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}. + </if> + <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> + </div> + + <if test="member.example.length"> + <for each="example" in="member.example"> + <pre class="code">{+example+}</pre> + </for> + </if> + + <if test="member.deprecated"> + <dl class="detailList"> + <dt class="heading">Deprecated:</dt> + <dt> + {+ resolveLinks(member.deprecated) +} + </dt> + </dl> + </if> + <if test="member.since"> + <dl class="detailList"> + <dt class="heading">Since:</dt> + <dd>{+ member.since +}</dd> + </dl> + </if> + <if test="member.see.length"> + <dl class="detailList"> + <dt class="heading">See:</dt> + <for each="item" in="member.see"> + <dd>{+ new Link().toSymbol(item) +}</dd> + </for> + </dl> + </if> + <if test="member.defaultValue"> + <dl class="detailList"> + <dt class="heading">Default Value:</dt> + <dd> + {+resolveLinks(member.defaultValue)+} + </dd> + </dl> + </if> + + <if test="!$member_last"><hr /></if> + </for> + </if> + +<!-- ============================== method details ========================= --> + <if test="defined(ownMethods) && ownMethods.length"> + <div class="sectionTitle"> + Method Detail + </div> + <for each="member" in="ownMethods"> + <a name="{+Link.symbolNameToLinkName(member)+}"> </a> + <div class="fixedFont">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + !} + + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> + <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+} + + </div> + <div class="description"> + {+resolveLinks(member.desc)+} + <if test="member.srcFile != data.srcFile"> + <br /> + <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}. + </if> + <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> + </div> + + <if test="member.example.length"> + <for each="example" in="member.example"> + <pre class="code">{+example+}</pre> + </for> + </if> + + <if test="member.params.length"> + <dl class="detailList"> + <dt class="heading">Parameters:</dt> + <for each="item" in="member.params"> + <dt> + {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b> + <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if> + </dt> + <dd>{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="member.deprecated"> + <dl class="detailList"> + <dt class="heading">Deprecated:</dt> + <dt> + {+ resolveLinks(member.deprecated) +} + </dt> + </dl> + </if> + <if test="member.since"> + <dl class="detailList"> + <dt class="heading">Since:</dt> + <dd>{+ member.since +}</dd> + </dl> + </dl> + </if> + <if test="member.exceptions.length"> + <dl class="detailList"> + <dt class="heading">Throws:</dt> + <for each="item" in="member.exceptions"> + <dt> + {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b> + </dt> + <dd>{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="member.returns.length"> + <dl class="detailList"> + <dt class="heading">Returns:</dt> + <for each="item" in="member.returns"> + <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="member.requires.length"> + <dl class="detailList"> + <dt class="heading">Requires:</dt> + <for each="item" in="member.requires"> + <dd>{+ resolveLinks(item) +}</dd> + </for> + </dl> + </if> + <if test="member.see.length"> + <dl class="detailList"> + <dt class="heading">See:</dt> + <for each="item" in="member.see"> + <dd>{+ new Link().toSymbol(item) +}</dd> + </for> + </dl> + </if> + + <if test="!$member_last"><hr /></if> + </for> + </if> + +<!-- ============================== event details ========================= --> + <if test="defined(ownEvents) && ownEvents.length"> + <div class="sectionTitle"> + Event Detail + </div> + <for each="member" in="ownEvents"> + <a name="event:{+Link.symbolNameToLinkName(member)+}"> </a> + <div class="fixedFont">{! + if (member.isPrivate) output += "<private> "; + if (member.isInner) output += "<inner> "; + if (member.isStatic) output += "<static> "; + !} + + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> + <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+} + + </div> + <div class="description"> + {+resolveLinks(member.desc)+} + <if test="member.srcFile != data.srcFile"> + <br /> + <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}. + </if> + <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> + </div> + + <if test="member.example.length"> + <for each="example" in="member.example"> + <pre class="code">{+example+}</pre> + </for> + </if> + + <if test="member.params.length"> + <dl class="detailList"> + <dt class="heading">Parameters:</dt> + <for each="item" in="member.params"> + <dt> + {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b> + <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if> + </dt> + <dd>{+ resolveLinks(item.desc) +}</dd> + </for> + </dl> + </if> + <if test="member.deprecated"> + <dl class="detailList"> + <dt class="heading">Deprecated:</dt> + <dt> + {+ resolveLinks(member.deprecated) +} + </dt> + </dl> + </if> + <if test="member.since"> + <dl class="detailList"> + <dt class="heading">Since:</dt> + <dd>{+ member.since +}</dd> + </dl> + </dl> + </if> + <if test="member.exceptions.length"> + <dl class="detailList"> + <dt class="heading">Throws:</dt> + <for each="item" in="member.exceptions"> + <dt> + {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b> + </dt> + <dd>{+ resolveLinks(item.desc) +}</dd> + </for> + </dl> + </if> + <if test="member.returns.length"> + <dl class="detailList"> + <dt class="heading">Returns:</dt> + <for each="item" in="member.returns"> + <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd> + </for> + </dl> + </if> + <if test="member.requires.length"> + <dl class="detailList"> + <dt class="heading">Requires:</dt> + <for each="item" in="member.requires"> + <dd>{+ resolveLinks(item) +}</dd> + </for> + </dl> + </if> + <if test="member.see.length"> + <dl class="detailList"> + <dt class="heading">See:</dt> + <for each="item" in="member.see"> + <dd>{+ new Link().toSymbol(item) +}</dd> + </for> + </dl> + </if> + + <if test="!$member_last"><hr /></if> + </for> + </if> + + <hr /> + </div> + + +<!-- ============================== footer ================================= --> + <div class="fineprint" style="clear:both"> + <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+} + </div> + </body> +</html> diff --git a/utils/jsdoc-toolkit/templates/jsdoc/index.tmpl b/utils/jsdoc-toolkit/templates/jsdoc/index.tmpl new file mode 100755 index 0000000..a5dc115 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/index.tmpl @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" /> + + <title>JsDoc Reference - Index</title> + <meta name="generator" content="JsDoc Toolkit" /> + + <style type="text/css"> + {+include("static/default.css")+} + </style> + </head> + + <body> + {+include("static/header.html")+} + + <div id="index"> + {+publish.classesIndex+} + </div> + + <div id="content"> + <h1 class="classTitle">Class Index</h1> + + <for each="thisClass" in="data"> + <div> + <h2>{+(new Link().toSymbol(thisClass.alias))+}</h2> + {+resolveLinks(summarize(thisClass.classDesc))+} + </div> + <hr /> + </for> + + </div> + <div class="fineprint" style="clear:both"> + <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> + Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+} + </div> + </body> +</html>
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/publish.js b/utils/jsdoc-toolkit/templates/jsdoc/publish.js new file mode 100755 index 0000000..446c92b --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/publish.js @@ -0,0 +1,200 @@ +/** Called automatically by JsDoc Toolkit. */ +function publish(symbolSet) { + publish.conf = { // trailing slash expected for dirs + ext: ".html", + outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/", + templatesDir: JSDOC.opt.t || SYS.pwd+"../templates/jsdoc/", + symbolsDir: "symbols/", + srcDir: "symbols/src/" + }; + + // is source output is suppressed, just display the links to the source file + if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) { + Link.prototype._makeSrcLink = function(srcFilePath) { + return "<"+srcFilePath+">"; + } + } + + // create the folders and subfolders to hold the output + IO.mkPath((publish.conf.outDir+"symbols/src").split("/")); + + // used to allow Link to check the details of things being linked to + Link.symbolSet = symbolSet; + + // create the required templates + try { + var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl"); + var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl"); + } + catch(e) { + print("Couldn't create the required templates: "+e); + quit(); + } + + // some ustility filters + function hasNoParent($) {return ($.memberOf == "")} + function isaFile($) {return ($.is("FILE"))} + function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)} + + // get an array version of the symbolset, useful for filtering + var symbols = symbolSet.toArray(); + + // create the hilited source code files + var files = JSDOC.opt.srcFiles; + for (var i = 0, l = files.length; i < l; i++) { + var file = files[i]; + var srcDir = publish.conf.outDir + "symbols/src/"; + makeSrcFile(file, srcDir); + } + + // get a list of all the classes in the symbolset + var classes = symbols.filter(isaClass).sort(makeSortby("alias")); + + // create a filemap in which outfiles must be to be named uniquely, ignoring case + if (JSDOC.opt.u) { + var filemapCounts = {}; + Link.filemap = {}; + for (var i = 0, l = classes.length; i < l; i++) { + var lcAlias = classes[i].alias.toLowerCase(); + + if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1; + else filemapCounts[lcAlias]++; + + Link.filemap[classes[i].alias] = + (filemapCounts[lcAlias] > 1)? + lcAlias+"_"+filemapCounts[lcAlias] : lcAlias; + } + } + + // create a class index, displayed in the left-hand column of every class page + Link.base = "../"; + publish.classesIndex = classesTemplate.process(classes); // kept in memory + + // create each of the class pages + for (var i = 0, l = classes.length; i < l; i++) { + var symbol = classes[i]; + + symbol.events = symbol.getEvents(); // 1 order matters + symbol.methods = symbol.getMethods(); // 2 + + var output = ""; + output = classTemplate.process(symbol); + + IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output); + } + + // regenerate the index with different relative links, used in the index pages + Link.base = ""; + publish.classesIndex = classesTemplate.process(classes); + + // create the class index page + try { + var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl"); + } + catch(e) { print(e.message); quit(); } + + var classesIndex = classesindexTemplate.process(classes); + IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex); + classesindexTemplate = classesIndex = classes = null; + + // create the file index page + try { + var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl"); + } + catch(e) { print(e.message); quit(); } + + var documentedFiles = symbols.filter(isaFile); // files that have file-level docs + var allFiles = []; // not all files have file-level docs, but we need to list every one + + for (var i = 0; i < files.length; i++) { + allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */"))); + } + + for (var i = 0; i < documentedFiles.length; i++) { + var offset = files.indexOf(documentedFiles[i].alias); + allFiles[offset] = documentedFiles[i]; + } + + allFiles = allFiles.sort(makeSortby("name")); + + // output the file index page + var filesIndex = fileindexTemplate.process(allFiles); + IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex); + fileindexTemplate = filesIndex = files = null; +} + + +/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */ +function summarize(desc) { + if (typeof desc != "undefined") + return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc; +} + +/** Make a symbol sorter by some attribute. */ +function makeSortby(attribute) { + return function(a, b) { + if (a[attribute] != undefined && b[attribute] != undefined) { + a = a[attribute].toLowerCase(); + b = b[attribute].toLowerCase(); + if (a < b) return -1; + if (a > b) return 1; + return 0; + } + } +} + +/** Pull in the contents of an external file at the given path. */ +function include(path) { + var path = publish.conf.templatesDir+path; + return IO.readFile(path); +} + +/** Turn a raw source file into a code-hilited page in the docs. */ +function makeSrcFile(path, srcDir, name) { + if (JSDOC.opt.s) return; + + if (!name) { + name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); + name = name.replace(/\:/g, "_"); + } + + var src = {path: path, name:name, charset: IO.encoding, hilited: ""}; + + if (defined(JSDOC.PluginManager)) { + JSDOC.PluginManager.run("onPublishSrc", src); + } + + if (src.hilited) { + IO.saveFile(srcDir, name+publish.conf.ext, src.hilited); + } +} + +/** Build output for displaying function parameters. */ +function makeSignature(params) { + if (!params) return "()"; + var signature = "(" + + + params.filter( + function($) { + return $.name.indexOf(".") == -1; // don't show config params in signature + } + ).map( + function($) { + return $.name; + } + ).join(", ") + + + ")"; + return signature; +} + +/** Find symbol {@link ...} strings in text and turn into html links */ +function resolveLinks(str, from) { + str = str.replace(/\{@link ([^} ]+) ?\}/gi, + function(match, symbolName) { + return new Link().toSymbol(symbolName); + } + ); + + return str; +} diff --git a/utils/jsdoc-toolkit/templates/jsdoc/static/default.css b/utils/jsdoc-toolkit/templates/jsdoc/static/default.css new file mode 100755 index 0000000..97e021e --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/static/default.css @@ -0,0 +1,162 @@ +/* default.css */ +body +{ + font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; + width: 800px; +} + +.header +{ + clear: both; + background-color: #ccc; + padding: 8px; +} + +h1 +{ + font-size: 150%; + font-weight: bold; + padding: 0; + margin: 1em 0 0 .3em; +} + +hr +{ + border: none 0; + border-top: 1px solid #7F8FB1; + height: 1px; +} + +pre.code +{ + display: block; + padding: 8px; + border: 1px dashed #ccc; +} + +#index +{ + margin-top: 24px; + float: left; + width: 160px; + position: absolute; + left: 8px; + background-color: #F3F3F3; + padding: 8px; +} + +#content +{ + margin-left: 190px; + width: 600px; +} + +.classList +{ + list-style-type: none; + padding: 0; + margin: 0 0 0 8px; + font-family: arial, sans-serif; + font-size: 1em; + overflow: auto; +} + +.classList li +{ + padding: 0; + margin: 0 0 8px 0; +} + +.summaryTable { width: 100%; } + +h1.classTitle +{ + font-size:170%; + line-height:130%; +} + +h2 { font-size: 110%; } +caption, div.sectionTitle +{ + background-color: #7F8FB1; + color: #fff; + font-size:130%; + text-align: left; + padding: 2px 6px 2px 6px; + border: 1px #7F8FB1 solid; +} + +div.sectionTitle { margin-bottom: 8px; } +.summaryTable thead { display: none; } + +.summaryTable td +{ + vertical-align: top; + padding: 4px; + border-bottom: 1px #7F8FB1 solid; + border-right: 1px #7F8FB1 solid; +} + +/*col#summaryAttributes {}*/ +.summaryTable td.attributes +{ + border-left: 1px #7F8FB1 solid; + width: 140px; + text-align: right; +} + +td.attributes, .fixedFont +{ + line-height: 15px; + color: #002EBE; + font-family: "Courier New",Courier,monospace; + font-size: 13px; +} + +.summaryTable td.nameDescription +{ + text-align: left; + font-size: 13px; + line-height: 15px; +} + +.summaryTable td.nameDescription, .description +{ + line-height: 15px; + padding: 4px; + padding-left: 4px; +} + +.summaryTable { margin-bottom: 8px; } + +ul.inheritsList +{ + list-style: square; + margin-left: 20px; + padding-left: 0; +} + +.detailList { + margin-left: 20px; + line-height: 15px; +} +.detailList dt { margin-left: 20px; } + +.detailList .heading +{ + font-weight: bold; + padding-bottom: 6px; + margin-left: 0; +} + +.light, td.attributes, .light a:link, .light a:visited +{ + color: #777; + font-style: italic; +} + +.fineprint +{ + text-align: right; + font-size: 10px; +}
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/static/header.html b/utils/jsdoc-toolkit/templates/jsdoc/static/header.html new file mode 100755 index 0000000..353b735 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/static/header.html @@ -0,0 +1,2 @@ +<div id="header"> +</div>
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/static/index.html b/utils/jsdoc-toolkit/templates/jsdoc/static/index.html new file mode 100755 index 0000000..661f6f6 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/static/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <title>Generated Javascript Documentation</title> +</head> +<frameset cols="20%,80%"> + <frame src="allclasses-frame.html" name="packageFrame" /> + <frame src="splash.html" name="classFrame" /> + <noframes> + <body> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + </body> + </noframes> +</frameset> +</html>
\ No newline at end of file diff --git a/utils/jsdoc-toolkit/templates/jsdoc/symbol.tmpl b/utils/jsdoc-toolkit/templates/jsdoc/symbol.tmpl new file mode 100755 index 0000000..f8f4bd1 --- /dev/null +++ b/utils/jsdoc-toolkit/templates/jsdoc/symbol.tmpl @@ -0,0 +1,35 @@ +<symbol alias="{+data.alias+}"> + <name>{+data.name+}</name> + <memberOf>{+data.memberOf+}</memberOf> + <isStatic>{+data.isStatic+}</isStatic> + <isa>{+data.isa+}</isa> + <desc>{+data.desc+}</desc> + <classDesc>{+data.classDesc+}</classDesc> + + <methods><for each="method" in="data.methods"> + <method> + <name>{+method.name+}</name> + <memberOf>{+method.memberOf+}</memberOf> + <isStatic>{+method.isStatic+}</isStatic> + <desc>{+method.desc+}</desc> + <params><for each="param" in="method.params"> + <param> + <type>{+param.type+}</type> + <name>{+param.name+}</name> + <desc>{+param.desc+}</desc> + <defaultValue>{+param.defaultValue+}</defaultValue> + </param></for> + </params> + </method></for> + </methods> + + <properties><for each="property" in="data.properties"> + <property> + <name>{+property.name+}</name> + <memberOf>{+property.memberOf+}</memberOf> + <isStatic>{+property.isStatic+}</isStatic> + <desc>{+property.desc+}</desc> + <type>{+property.type+}</type> + </property></for> + </properties> +</symbol> |