Commit 78004ee29fb58017a53cf6f122d4d298347dd7af

Authored by Tohir Solomons
1 parent 45ab1835

KTS-3831

"Upgrade ExtJS to 2.2"
Adding AIR Folder

Committed By: Tohir Solomons
Reviewed By: Megan Watson

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@9757 c91229c3-7414-0410-bfa2-8a42b809f60b
thirdpartyjs/extjs/air/README.txt 0 → 100644
  1 +The ext-air.js file should be included AFTER ext-all.js.
  2 +
  3 +The resources/ext-air.css file should be included AFTER ext-all.css.
  4 +
  5 +XTemplates must be loaded inline while the js file loads (not in an onready block) when used in the application sandbox. Take a look at samples/tasks/js/Templates.js for an example.
  6 +
  7 +For additional date formats other than the ones defined in src/ext-air-adapter.js, you will need to specify them inline similar to XTemplates using Date.precompileFormats(). For multiple formats, separate them with the | character.
  8 +
... ...
thirdpartyjs/extjs/air/air.jsb 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<project path="" name="Ext AIR Support Library" author="Ext JS, LLC" version="0.20" copyright="Ext JS Library $version&#xD;&#xA;Copyright(c) 2006-2008, $author.&#xD;&#xA;licensing@extjs.com&#xD;&#xA;&#xD;&#xA;http://extjs.com/license" output="C:\apps\www\deploy\ext-2.1\air\" source="True" source-dir="$output" minify="False" min-dir="$output\build" doc="False" doc-dir="$output\docs" master="true" master-file="$output\yui-ext.js" zip="true" zip-file="$output\yuo-ext.$version.zip">
  3 + <directory name="" />
  4 + <file name="resources\icons\extlogo128.png" path="resources\icons" />
  5 + <file name="resources\icons\extlogo16.png" path="resources\icons" />
  6 + <file name="resources\icons\extlogo32.png" path="resources\icons" />
  7 + <file name="resources\icons\extlogo48.png" path="resources\icons" />
  8 + <file name="resources\icons\extlogo64.png" path="resources\icons" />
  9 + <file name="resources\images\left-corners.png" path="resources\images" />
  10 + <file name="resources\images\left-right.png" path="resources\images" />
  11 + <file name="resources\images\right-corners.png" path="resources\images" />
  12 + <file name="resources\images\top-bottom.png" path="resources\images" />
  13 + <file name="resources\air-resources.jsb" path="resources" />
  14 + <file name="resources\ext-air.css" path="resources" />
  15 + <file name="samples\tasks\ext-2.0\resources\css\ext-all.css" path="samples\tasks\ext-2.0\resources\css" />
  16 + <file name="samples\tasks\ext-2.0\resources\css\xtheme-gray.css" path="samples\tasks\ext-2.0\resources\css" />
  17 + <file name="samples\tasks\ext-2.0\resources\images\default\box\corners-blue.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  18 + <file name="samples\tasks\ext-2.0\resources\images\default\box\corners.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  19 + <file name="samples\tasks\ext-2.0\resources\images\default\box\l-blue.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  20 + <file name="samples\tasks\ext-2.0\resources\images\default\box\l.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  21 + <file name="samples\tasks\ext-2.0\resources\images\default\box\r-blue.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  22 + <file name="samples\tasks\ext-2.0\resources\images\default\box\r.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  23 + <file name="samples\tasks\ext-2.0\resources\images\default\box\tb-blue.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  24 + <file name="samples\tasks\ext-2.0\resources\images\default\box\tb.gif" path="samples\tasks\ext-2.0\resources\images\default\box" />
  25 + <file name="samples\tasks\ext-2.0\resources\images\default\button\btn-arrow.gif" path="samples\tasks\ext-2.0\resources\images\default\button" />
  26 + <file name="samples\tasks\ext-2.0\resources\images\default\button\btn-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\button" />
  27 + <file name="samples\tasks\ext-2.0\resources\images\default\dd\drop-add.gif" path="samples\tasks\ext-2.0\resources\images\default\dd" />
  28 + <file name="samples\tasks\ext-2.0\resources\images\default\dd\drop-no.gif" path="samples\tasks\ext-2.0\resources\images\default\dd" />
  29 + <file name="samples\tasks\ext-2.0\resources\images\default\dd\drop-yes.gif" path="samples\tasks\ext-2.0\resources\images\default\dd" />
  30 + <file name="samples\tasks\ext-2.0\resources\images\default\editor\tb-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\editor" />
  31 + <file name="samples\tasks\ext-2.0\resources\images\default\form\clear-trigger.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  32 + <file name="samples\tasks\ext-2.0\resources\images\default\form\clear-trigger.psd" path="samples\tasks\ext-2.0\resources\images\default\form" />
  33 + <file name="samples\tasks\ext-2.0\resources\images\default\form\date-trigger.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  34 + <file name="samples\tasks\ext-2.0\resources\images\default\form\date-trigger.psd" path="samples\tasks\ext-2.0\resources\images\default\form" />
  35 + <file name="samples\tasks\ext-2.0\resources\images\default\form\error-tip-corners.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  36 + <file name="samples\tasks\ext-2.0\resources\images\default\form\exclamation.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  37 + <file name="samples\tasks\ext-2.0\resources\images\default\form\search-trigger.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  38 + <file name="samples\tasks\ext-2.0\resources\images\default\form\search-trigger.psd" path="samples\tasks\ext-2.0\resources\images\default\form" />
  39 + <file name="samples\tasks\ext-2.0\resources\images\default\form\text-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  40 + <file name="samples\tasks\ext-2.0\resources\images\default\form\trigger-tpl.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  41 + <file name="samples\tasks\ext-2.0\resources\images\default\form\trigger.gif" path="samples\tasks\ext-2.0\resources\images\default\form" />
  42 + <file name="samples\tasks\ext-2.0\resources\images\default\form\trigger.psd" path="samples\tasks\ext-2.0\resources\images\default\form" />
  43 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\arrow-left-white.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  44 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\arrow-right-white.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  45 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\col-move-bottom.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  46 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\col-move-top.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  47 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\columns.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  48 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\dirty.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  49 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\done.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  50 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\drop-no.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  51 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\drop-yes.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  52 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\footer-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  53 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-blue-hd.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  54 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-blue-split.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  55 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-hrow.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  56 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-loading.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  57 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-split.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  58 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid-vista-hd.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  59 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid3-hd-btn.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  60 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid3-hrow-over.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  61 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid3-hrow.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  62 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid3-special-col-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  63 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\grid3-special-col-sel-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  64 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\group-by.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  65 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\group-expand-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  66 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hd-pop.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  67 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-asc.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  68 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-desc.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  69 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-lock.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  70 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-lock.png" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  71 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-unlock.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  72 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\hmenu-unlock.png" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  73 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\invalid_line.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  74 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\loading.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  75 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\mso-hd.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  76 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\nowait.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  77 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-first-disabled.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  78 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-first.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  79 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-last-disabled.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  80 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-last.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  81 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-next-disabled.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  82 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-next.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  83 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-prev-disabled.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  84 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\page-prev.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  85 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\pick-button.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  86 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\refresh.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  87 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\row-check-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  88 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\row-expand-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  89 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\row-over.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  90 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\row-sel.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  91 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\sort_asc.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  92 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\sort_desc.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  93 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\Thumbs.db" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  94 + <file name="samples\tasks\ext-2.0\resources\images\default\grid\wait.gif" path="samples\tasks\ext-2.0\resources\images\default\grid" />
  95 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\collapse.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  96 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\expand.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  97 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\gradient-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  98 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\mini-bottom.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  99 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\mini-left.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  100 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\mini-right.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  101 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\mini-top.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  102 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\ns-collapse.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  103 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\ns-expand.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  104 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\panel-close.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  105 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\panel-title-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  106 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\panel-title-light-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  107 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\stick.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  108 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\stuck.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  109 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\tab-close-on.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  110 + <file name="samples\tasks\ext-2.0\resources\images\default\layout\tab-close.gif" path="samples\tasks\ext-2.0\resources\images\default\layout" />
  111 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\checked.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  112 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\group-checked.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  113 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\item-over.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  114 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\menu-parent.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  115 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\menu.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  116 + <file name="samples\tasks\ext-2.0\resources\images\default\menu\unchecked.gif" path="samples\tasks\ext-2.0\resources\images\default\menu" />
  117 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\corners-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  118 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\left-right.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  119 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\light-hd.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  120 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\tool-sprite-tpl.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  121 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\tool-sprites.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  122 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\tools-sprites-trans.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  123 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\top-bottom.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  124 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\top-bottom.png" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  125 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\white-corners-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  126 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\white-left-right.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  127 + <file name="samples\tasks\ext-2.0\resources\images\default\panel\white-top-bottom.gif" path="samples\tasks\ext-2.0\resources\images\default\panel" />
  128 + <file name="samples\tasks\ext-2.0\resources\images\default\progress\progress-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\progress" />
  129 + <file name="samples\tasks\ext-2.0\resources\images\default\qtip\bg.gif" path="samples\tasks\ext-2.0\resources\images\default\qtip" />
  130 + <file name="samples\tasks\ext-2.0\resources\images\default\qtip\close.gif" path="samples\tasks\ext-2.0\resources\images\default\qtip" />
  131 + <file name="samples\tasks\ext-2.0\resources\images\default\qtip\tip-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\qtip" />
  132 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\blue-loading.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  133 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\calendar.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  134 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\glass-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  135 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\hd-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  136 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\large-loading.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  137 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\left-btn.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  138 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\loading-balls.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  139 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\right-btn.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  140 + <file name="samples\tasks\ext-2.0\resources\images\default\shared\warning.gif" path="samples\tasks\ext-2.0\resources\images\default\shared" />
  141 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\e-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  142 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\e-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  143 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\ne-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  144 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\ne-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  145 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\nw-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  146 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\nw-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  147 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\s-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  148 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\s-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  149 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\se-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  150 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\se-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  151 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\square.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  152 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\sw-handle-dark.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  153 + <file name="samples\tasks\ext-2.0\resources\images\default\sizer\sw-handle.gif" path="samples\tasks\ext-2.0\resources\images\default\sizer" />
  154 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\scroll-left.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  155 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\scroll-right.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  156 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\scroller-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  157 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-btm-inactive-left-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  158 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-btm-inactive-right-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  159 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-btm-left-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  160 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-btm-right-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  161 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-close.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  162 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-strip-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  163 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-strip-bg.png" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  164 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tab-strip-btm-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  165 + <file name="samples\tasks\ext-2.0\resources\images\default\tabs\tabs-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\tabs" />
  166 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\bg.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  167 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\btn-arrow-light.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  168 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\btn-arrow.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  169 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\btn-over-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  170 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\gray-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  171 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\tb-bg.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  172 + <file name="samples\tasks\ext-2.0\resources\images\default\toolbar\tb-btn-sprite.gif" path="samples\tasks\ext-2.0\resources\images\default\toolbar" />
  173 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\arrows.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  174 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-add.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  175 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-between.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  176 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-no.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  177 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-over.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  178 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-under.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  179 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\drop-yes.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  180 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-end-minus-nl.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  181 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-end-minus.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  182 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-end-plus-nl.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  183 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-end-plus.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  184 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-end.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  185 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-line.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  186 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-minus-nl.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  187 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-minus.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  188 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-plus-nl.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  189 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow-plus.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  190 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\elbow.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  191 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\folder-open.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  192 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\folder.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  193 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\leaf.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  194 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\loading.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  195 + <file name="samples\tasks\ext-2.0\resources\images\default\tree\s.gif" path="samples\tasks\ext-2.0\resources\images\default\tree" />
  196 + <file name="samples\tasks\ext-2.0\resources\images\default\window\icon-error.gif" path="samples\tasks\ext-2.0\resources\images\default\window" />
  197 + <file name="samples\tasks\ext-2.0\resources\images\default\window\icon-info.gif" path="samples\tasks\ext-2.0\resources\images\default\window" />
  198 + <file name="samples\tasks\ext-2.0\resources\images\default\window\icon-question.gif" path="samples\tasks\ext-2.0\resources\images\default\window" />
  199 + <file name="samples\tasks\ext-2.0\resources\images\default\window\icon-warning.gif" path="samples\tasks\ext-2.0\resources\images\default\window" />
  200 + <file name="samples\tasks\ext-2.0\resources\images\default\window\left-corners.png" path="samples\tasks\ext-2.0\resources\images\default\window" />
  201 + <file name="samples\tasks\ext-2.0\resources\images\default\window\left-corners.psd" path="samples\tasks\ext-2.0\resources\images\default\window" />
  202 + <file name="samples\tasks\ext-2.0\resources\images\default\window\left-right.png" path="samples\tasks\ext-2.0\resources\images\default\window" />
  203 + <file name="samples\tasks\ext-2.0\resources\images\default\window\left-right.psd" path="samples\tasks\ext-2.0\resources\images\default\window" />
  204 + <file name="samples\tasks\ext-2.0\resources\images\default\window\right-corners.png" path="samples\tasks\ext-2.0\resources\images\default\window" />
  205 + <file name="samples\tasks\ext-2.0\resources\images\default\window\right-corners.psd" path="samples\tasks\ext-2.0\resources\images\default\window" />
  206 + <file name="samples\tasks\ext-2.0\resources\images\default\window\top-bottom.png" path="samples\tasks\ext-2.0\resources\images\default\window" />
  207 + <file name="samples\tasks\ext-2.0\resources\images\default\window\top-bottom.psd" path="samples\tasks\ext-2.0\resources\images\default\window" />
  208 + <file name="samples\tasks\ext-2.0\resources\images\default\gradient-bg.gif" path="samples\tasks\ext-2.0\resources\images\default" />
  209 + <file name="samples\tasks\ext-2.0\resources\images\default\s.gif" path="samples\tasks\ext-2.0\resources\images\default" />
  210 + <file name="samples\tasks\ext-2.0\resources\images\default\shadow-c.png" path="samples\tasks\ext-2.0\resources\images\default" />
  211 + <file name="samples\tasks\ext-2.0\resources\images\default\shadow-lr.png" path="samples\tasks\ext-2.0\resources\images\default" />
  212 + <file name="samples\tasks\ext-2.0\resources\images\default\shadow.png" path="samples\tasks\ext-2.0\resources\images\default" />
  213 + <file name="samples\tasks\ext-2.0\resources\images\gray\button\btn-arrow.gif" path="samples\tasks\ext-2.0\resources\images\gray\button" />
  214 + <file name="samples\tasks\ext-2.0\resources\images\gray\button\btn-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\button" />
  215 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\corners-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  216 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\left-right.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  217 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\light-hd.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  218 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\tool-sprite-tpl.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  219 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\tool-sprites.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  220 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\tools-sprites-trans.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  221 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\top-bottom.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  222 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\top-bottom.png" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  223 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\white-corners-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  224 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\white-left-right.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  225 + <file name="samples\tasks\ext-2.0\resources\images\gray\panel\white-top-bottom.gif" path="samples\tasks\ext-2.0\resources\images\gray\panel" />
  226 + <file name="samples\tasks\ext-2.0\resources\images\gray\qtip\bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\qtip" />
  227 + <file name="samples\tasks\ext-2.0\resources\images\gray\qtip\close.gif" path="samples\tasks\ext-2.0\resources\images\gray\qtip" />
  228 + <file name="samples\tasks\ext-2.0\resources\images\gray\qtip\tip-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\qtip" />
  229 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\scroll-left.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  230 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\scroll-right.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  231 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\scroller-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  232 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-btm-inactive-left-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  233 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-btm-inactive-right-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  234 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-btm-left-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  235 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-btm-right-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  236 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-close.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  237 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-strip-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  238 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-strip-bg.png" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  239 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tab-strip-btm-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  240 + <file name="samples\tasks\ext-2.0\resources\images\gray\tabs\tabs-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\tabs" />
  241 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  242 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\btn-arrow-light.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  243 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\btn-arrow.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  244 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\btn-over-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  245 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\gray-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  246 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\tb-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  247 + <file name="samples\tasks\ext-2.0\resources\images\gray\toolbar\tb-btn-sprite.gif" path="samples\tasks\ext-2.0\resources\images\gray\toolbar" />
  248 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\icon-error.gif" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  249 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\icon-info.gif" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  250 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\icon-question.gif" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  251 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\icon-warning.gif" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  252 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\left-corners.png" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  253 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\left-corners.pspimage" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  254 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\left-right.png" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  255 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\right-corners.png" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  256 + <file name="samples\tasks\ext-2.0\resources\images\gray\window\top-bottom.png" path="samples\tasks\ext-2.0\resources\images\gray\window" />
  257 + <file name="samples\tasks\ext-2.0\resources\images\gray\gradient-bg.gif" path="samples\tasks\ext-2.0\resources\images\gray" />
  258 + <file name="samples\tasks\ext-2.0\resources\images\gray\s.gif" path="samples\tasks\ext-2.0\resources\images\gray" />
  259 + <file name="samples\tasks\ext-2.0\resources\license.txt" path="samples\tasks\ext-2.0\resources" />
  260 + <file name="samples\tasks\ext-air\resources\icons\extlogo128.png" path="samples\tasks\ext-air\resources\icons" />
  261 + <file name="samples\tasks\ext-air\resources\icons\extlogo16.png" path="samples\tasks\ext-air\resources\icons" />
  262 + <file name="samples\tasks\ext-air\resources\icons\extlogo32.png" path="samples\tasks\ext-air\resources\icons" />
  263 + <file name="samples\tasks\ext-air\resources\icons\extlogo48.png" path="samples\tasks\ext-air\resources\icons" />
  264 + <file name="samples\tasks\ext-air\resources\icons\extlogo64.png" path="samples\tasks\ext-air\resources\icons" />
  265 + <file name="samples\tasks\ext-air\resources\images\left-corners.png" path="samples\tasks\ext-air\resources\images" />
  266 + <file name="samples\tasks\ext-air\resources\images\left-right.png" path="samples\tasks\ext-air\resources\images" />
  267 + <file name="samples\tasks\ext-air\resources\images\right-corners.png" path="samples\tasks\ext-air\resources\images" />
  268 + <file name="samples\tasks\ext-air\resources\images\top-bottom.png" path="samples\tasks\ext-air\resources\images" />
  269 + <file name="samples\tasks\ext-air\resources\air-resources.jsb" path="samples\tasks\ext-air\resources" />
  270 + <file name="samples\tasks\ext-air\resources\ext-air.css" path="samples\tasks\ext-air\resources" />
  271 + <file name="samples\tasks\images\bell.png" path="samples\tasks\images" />
  272 + <file name="samples\tasks\images\check.gif" path="samples\tasks\images" />
  273 + <file name="samples\tasks\images\delete.gif" path="samples\tasks\images" />
  274 + <file name="samples\tasks\images\edit.gif" path="samples\tasks\images" />
  275 + <file name="samples\tasks\images\hd-check.gif" path="samples\tasks\images" />
  276 + <file name="samples\tasks\images\hrow.gif" path="samples\tasks\images" />
  277 + <file name="samples\tasks\images\icon-active.gif" path="samples\tasks\images" />
  278 + <file name="samples\tasks\images\icon-all.gif" path="samples\tasks\images" />
  279 + <file name="samples\tasks\images\icon-by-category.gif" path="samples\tasks\images" />
  280 + <file name="samples\tasks\images\icon-by-date.gif" path="samples\tasks\images" />
  281 + <file name="samples\tasks\images\icon-complete.gif" path="samples\tasks\images" />
  282 + <file name="samples\tasks\images\icon-delete-task.gif" path="samples\tasks\images" />
  283 + <file name="samples\tasks\images\icon-filter.gif" path="samples\tasks\images" />
  284 + <file name="samples\tasks\images\icon-folder-delete.gif" path="samples\tasks\images" />
  285 + <file name="samples\tasks\images\icon-folder-new.gif" path="samples\tasks\images" />
  286 + <file name="samples\tasks\images\icon-folder.gif" path="samples\tasks\images" />
  287 + <file name="samples\tasks\images\icon-list-delete.gif" path="samples\tasks\images" />
  288 + <file name="samples\tasks\images\icon-list-new.gif" path="samples\tasks\images" />
  289 + <file name="samples\tasks\images\icon-list.gif" path="samples\tasks\images" />
  290 + <file name="samples\tasks\images\icon-mark-active.gif" path="samples\tasks\images" />
  291 + <file name="samples\tasks\images\icon-mark-complete.gif" path="samples\tasks\images" />
  292 + <file name="samples\tasks\images\icon-multi-list.gif" path="samples\tasks\images" />
  293 + <file name="samples\tasks\images\icon-no-group.gif" path="samples\tasks\images" />
  294 + <file name="samples\tasks\images\icon-paste-new.gif" path="samples\tasks\images" />
  295 + <file name="samples\tasks\images\icon-show-active.gif" path="samples\tasks\images" />
  296 + <file name="samples\tasks\images\icon-show-all.gif" path="samples\tasks\images" />
  297 + <file name="samples\tasks\images\icon-show-complete.gif" path="samples\tasks\images" />
  298 + <file name="samples\tasks\images\my-lists.png" path="samples\tasks\images" />
  299 + <file name="samples\tasks\images\panel-header.gif" path="samples\tasks\images" />
  300 + <file name="samples\tasks\images\rbtn.gif" path="samples\tasks\images" />
  301 + <file name="samples\tasks\images\reminder-hd.png" path="samples\tasks\images" />
  302 + <file name="samples\tasks\images\s.gif" path="samples\tasks\images" />
  303 + <file name="samples\tasks\images\save.gif" path="samples\tasks\images" />
  304 + <file name="samples\tasks\.project" path="samples\tasks" />
  305 + <file name="samples\tasks\about.html" path="samples\tasks" />
  306 + <file name="samples\tasks\application.xml" path="samples\tasks" />
  307 + <file name="samples\tasks\beep.mp3" path="samples\tasks" />
  308 + <file name="samples\tasks\LICENSE.TXT" path="samples\tasks" />
  309 + <file name="samples\tasks\main.css" path="samples\tasks" />
  310 + <file name="samples\tasks\main.html" path="samples\tasks" />
  311 + <file name="samples\tasks\mimetype" path="samples\tasks" />
  312 + <file name="samples\tasks\preferences.css" path="samples\tasks" />
  313 + <file name="samples\tasks\preferences.html" path="samples\tasks" />
  314 + <file name="samples\tasks\reminder.css" path="samples\tasks" />
  315 + <file name="samples\tasks\reminder.html" path="samples\tasks" />
  316 + <file name="samples\tasks\STasks2.air" path="samples\tasks" />
  317 + <file name="samples\tasks\task.css" path="samples\tasks" />
  318 + <file name="samples\tasks\task.html" path="samples\tasks" />
  319 + <file name="samples\tasks\tasks.db" path="samples\tasks" />
  320 + <file name="src\air.jsb" path="src" />
  321 + <file name="air.jsb" path="" />
  322 + <file name="README.txt" path="" />
  323 + <target name="ext-air" file="$output\ext-air.js" debug="False" shorthand="False" shorthand-list="YAHOO.util.Dom.setStyle&#xD;&#xA;YAHOO.util.Dom.getStyle&#xD;&#xA;YAHOO.util.Dom.getRegion&#xD;&#xA;YAHOO.util.Dom.getViewportHeight&#xD;&#xA;YAHOO.util.Dom.getViewportWidth&#xD;&#xA;YAHOO.util.Dom.get&#xD;&#xA;YAHOO.util.Dom.getXY&#xD;&#xA;YAHOO.util.Dom.setXY&#xD;&#xA;YAHOO.util.CustomEvent&#xD;&#xA;YAHOO.util.Event.addListener&#xD;&#xA;YAHOO.util.Event.getEvent&#xD;&#xA;YAHOO.util.Event.getTarget&#xD;&#xA;YAHOO.util.Event.preventDefault&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Event.stopPropagation&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Anim&#xD;&#xA;YAHOO.util.Motion&#xD;&#xA;YAHOO.util.Connect.asyncRequest&#xD;&#xA;YAHOO.util.Connect.setForm&#xD;&#xA;YAHOO.util.Dom&#xD;&#xA;YAHOO.util.Event">
  324 + <include name="src\ext-air-adapter.js" />
  325 + <include name="src\FileProvider.js" />
  326 + <include name="src\MainWindow.js" />
  327 + <include name="src\NativeObservable.js" />
  328 + <include name="src\NativeWindow.js" />
  329 + <include name="src\sql\Connection.js" />
  330 + <include name="src\sql\Table.js" />
  331 + <include name="src\sql\Proxy.js" />
  332 + <include name="src\sql\AirConnection.js" />
  333 + <include name="src\SystemTray.js" />
  334 + <include name="src\NativeDD.js" />
  335 + <include name="src\Sound.js" />
  336 + <include name="src\SystemMenu.js" />
  337 + </target>
  338 + <file name="samples\tasks\adobe\AIRAliases.js" path="samples\tasks\adobe" />
  339 + <file name="samples\tasks\adobe\AIRIntrospector.js" path="samples\tasks\adobe" />
  340 + <file name="samples\tasks\ext-2.0\adapter\ext\ext-base.js" path="samples\tasks\ext-2.0\adapter\ext" />
  341 + <file name="samples\tasks\ext-2.0\ext-all.js" path="samples\tasks\ext-2.0" />
  342 + <file name="samples\tasks\ext-air\ext-air-debug.js" path="samples\tasks\ext-air" />
  343 + <file name="samples\tasks\ext-air\ext-air.js" path="samples\tasks\ext-air" />
  344 + <file name="samples\tasks\js\columns.js" path="samples\tasks\js" />
  345 + <file name="samples\tasks\js\data.js" path="samples\tasks\js" />
  346 + <file name="samples\tasks\js\DateTimeField.js" path="samples\tasks\js" />
  347 + <file name="samples\tasks\js\Exporter.js" path="samples\tasks\js" />
  348 + <file name="samples\tasks\js\ext-config.js" path="samples\tasks\js" />
  349 + <file name="samples\tasks\js\Importer.js" path="samples\tasks\js" />
  350 + <file name="samples\tasks\js\ListLoader.js" path="samples\tasks\js" />
  351 + <file name="samples\tasks\js\ListSelector.js" path="samples\tasks\js" />
  352 + <file name="samples\tasks\js\ListStore.js" path="samples\tasks\js" />
  353 + <file name="samples\tasks\js\ListTree.js" path="samples\tasks\js" />
  354 + <file name="samples\tasks\js\Reminder.js" path="samples\tasks\js" />
  355 + <file name="samples\tasks\js\SelectBox.js" path="samples\tasks\js" />
  356 + <file name="samples\tasks\js\SwitchButton.js" path="samples\tasks\js" />
  357 + <file name="samples\tasks\js\TaskGrid.js" path="samples\tasks\js" />
  358 + <file name="samples\tasks\js\TaskStore.js" path="samples\tasks\js" />
  359 + <file name="samples\tasks\js\TaskWindow.js" path="samples\tasks\js" />
  360 + <file name="samples\tasks\js\Templates.js" path="samples\tasks\js" />
  361 + <file name="samples\tasks\js\TextDate.js" path="samples\tasks\js" />
  362 + <file name="samples\tasks\js\TreeSelector.js" path="samples\tasks\js" />
  363 + <file name="samples\tasks\main.js" path="samples\tasks" />
  364 + <file name="samples\tasks\preferences.js" path="samples\tasks" />
  365 + <file name="samples\tasks\reminder.js" path="samples\tasks" />
  366 + <file name="samples\tasks\task.js" path="samples\tasks" />
  367 + <file name="src\sql\AirConnection.js" path="src\sql" />
  368 + <file name="src\sql\Connection.js" path="src\sql" />
  369 + <file name="src\sql\Proxy.js" path="src\sql" />
  370 + <file name="src\sql\Table.js" path="src\sql" />
  371 + <file name="src\ext-air-adapter.js" path="src" />
  372 + <file name="src\FileProvider.js" path="src" />
  373 + <file name="src\NativeDD.js" path="src" />
  374 + <file name="src\NativeObservable.js" path="src" />
  375 + <file name="src\NativeWindow.js" path="src" />
  376 + <file name="src\Sound.js" path="src" />
  377 + <file name="src\SystemMenu.js" path="src" />
  378 + <file name="src\SystemTray.js" path="src" />
  379 +</project>
0 380 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/ext-air.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +
  10 +Ext.namespace('Ext.air', 'Ext.sql');
  11 +
  12 +Ext.Template.prototype.compile = function() {
  13 + var fm = Ext.util.Format;
  14 + var useF = this.disableFormats !== true;
  15 +
  16 + var prevOffset = 0;
  17 + var arr = [];
  18 + var tpl = this;
  19 + var fn = function(m, name, format, args, offset, s){
  20 + if (prevOffset != offset) {
  21 + var action = {type: 1, value: s.substr(prevOffset, offset - prevOffset)};
  22 + arr.push(action);
  23 + }
  24 + prevOffset = offset + m.length;
  25 + if(format && useF){
  26 + if (args) {
  27 + var re = /^\s*['"](.*)["']\s*$/;
  28 + args = args.split(/,(?=(?:[^"]*"[^"]*")*(?![^"]*"))/);
  29 + for(var i = 0, len = args.length; i < len; i++){
  30 + args[i] = args[i].replace(re, "$1");
  31 + }
  32 + args = [''].concat(args);
  33 + } else {
  34 + args = [''];
  35 + }
  36 + if(format.substr(0, 5) != "this."){
  37 + var action = {type: 3, value:name, format: fm[format], args: args, scope: fm};
  38 + arr.push(action);
  39 + }else{
  40 + var action = {type: 3, value:name, format:tpl[format.substr(5)], args:args, scope: tpl};
  41 + arr.push(action);
  42 + }
  43 + }else{
  44 + var action = {type: 2, value: name};
  45 + arr.push(action);
  46 + }
  47 + return m;
  48 + };
  49 +
  50 + var s = this.html.replace(this.re, fn);
  51 + if (prevOffset != (s.length - 1)) {
  52 + var action = {type: 1, value: s.substr(prevOffset, s.length - prevOffset)};
  53 + arr.push(action);
  54 + }
  55 +
  56 + this.compiled = function(values) {
  57 + function applyValues(el) {
  58 + switch (el.type) {
  59 + case 1:
  60 + return el.value;
  61 + case 2:
  62 + return (values[el.value] ? values[el.value] : '');
  63 + default:
  64 + el.args[0] = values[el.value];
  65 + return el.format.apply(el.scope, el.args);
  66 + }
  67 + }
  68 + return arr.map(applyValues).join('');
  69 + }
  70 + return this;
  71 +};
  72 +
  73 +Ext.Template.prototype.call = function(fnName, value, allValues){
  74 + return this[fnName](value, allValues);
  75 +}
  76 +
  77 +
  78 +Ext.DomQuery = function(){
  79 + var cache = {}, simpleCache = {}, valueCache = {};
  80 + var nonSpace = /\S/;
  81 + var trimRe = /^\s+|\s+$/g;
  82 + var tplRe = /\{(\d+)\}/g;
  83 + var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
  84 + var tagTokenRe = /^(#)?([\w-\*]+)/;
  85 + var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;
  86 +
  87 + function child(p, index){
  88 + var i = 0;
  89 + var n = p.firstChild;
  90 + while(n){
  91 + if(n.nodeType == 1){
  92 + if(++i == index){
  93 + return n;
  94 + }
  95 + }
  96 + n = n.nextSibling;
  97 + }
  98 + return null;
  99 + };
  100 +
  101 + function next(n){
  102 + while((n = n.nextSibling) && n.nodeType != 1);
  103 + return n;
  104 + };
  105 +
  106 + function prev(n){
  107 + while((n = n.previousSibling) && n.nodeType != 1);
  108 + return n;
  109 + };
  110 +
  111 + function children(d){
  112 + var n = d.firstChild, ni = -1;
  113 + while(n){
  114 + var nx = n.nextSibling;
  115 + if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
  116 + d.removeChild(n);
  117 + }else{
  118 + n.nodeIndex = ++ni;
  119 + }
  120 + n = nx;
  121 + }
  122 + return this;
  123 + };
  124 +
  125 + function byClassName(c, a, v){
  126 + if(!v){
  127 + return c;
  128 + }
  129 + var r = [], ri = -1, cn;
  130 + for(var i = 0, ci; ci = c[i]; i++){
  131 + if((' '+ci.className+' ').indexOf(v) != -1){
  132 + r[++ri] = ci;
  133 + }
  134 + }
  135 + return r;
  136 + };
  137 +
  138 + function attrValue(n, attr){
  139 + if(!n.tagName && typeof n.length != "undefined"){
  140 + n = n[0];
  141 + }
  142 + if(!n){
  143 + return null;
  144 + }
  145 + if(attr == "for"){
  146 + return n.htmlFor;
  147 + }
  148 + if(attr == "class" || attr == "className"){
  149 + return n.className;
  150 + }
  151 + return n.getAttribute(attr) || n[attr];
  152 +
  153 + };
  154 +
  155 + function getNodes(ns, mode, tagName){
  156 + var result = [], ri = -1, cs;
  157 + if(!ns){
  158 + return result;
  159 + }
  160 + tagName = tagName || "*";
  161 + if(typeof ns.getElementsByTagName != "undefined"){
  162 + ns = [ns];
  163 + }
  164 + if(!mode){
  165 + for(var i = 0, ni; ni = ns[i]; i++){
  166 + cs = ni.getElementsByTagName(tagName);
  167 + for(var j = 0, ci; ci = cs[j]; j++){
  168 + result[++ri] = ci;
  169 + }
  170 + }
  171 + }else if(mode == "/" || mode == ">"){
  172 + var utag = tagName.toUpperCase();
  173 + for(var i = 0, ni, cn; ni = ns[i]; i++){
  174 + cn = ni.children || ni.childNodes;
  175 + for(var j = 0, cj; cj = cn[j]; j++){
  176 + if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){
  177 + result[++ri] = cj;
  178 + }
  179 + }
  180 + }
  181 + }else if(mode == "+"){
  182 + var utag = tagName.toUpperCase();
  183 + for(var i = 0, n; n = ns[i]; i++){
  184 + while((n = n.nextSibling) && n.nodeType != 1);
  185 + if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
  186 + result[++ri] = n;
  187 + }
  188 + }
  189 + }else if(mode == "~"){
  190 + for(var i = 0, n; n = ns[i]; i++){
  191 + while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
  192 + if(n){
  193 + result[++ri] = n;
  194 + }
  195 + }
  196 + }
  197 + return result;
  198 + };
  199 +
  200 + function concat(a, b){
  201 + if(b.slice){
  202 + return a.concat(b);
  203 + }
  204 + for(var i = 0, l = b.length; i < l; i++){
  205 + a[a.length] = b[i];
  206 + }
  207 + return a;
  208 + }
  209 +
  210 + function byTag(cs, tagName){
  211 + if(cs.tagName || cs == document){
  212 + cs = [cs];
  213 + }
  214 + if(!tagName){
  215 + return cs;
  216 + }
  217 + var r = [], ri = -1;
  218 + tagName = tagName.toLowerCase();
  219 + for(var i = 0, ci; ci = cs[i]; i++){
  220 + if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
  221 + r[++ri] = ci;
  222 + }
  223 + }
  224 + return r;
  225 + };
  226 +
  227 + function byId(cs, attr, id){
  228 + if(cs.tagName || cs == document){
  229 + cs = [cs];
  230 + }
  231 + if(!id){
  232 + return cs;
  233 + }
  234 + var r = [], ri = -1;
  235 + for(var i = 0,ci; ci = cs[i]; i++){
  236 + if(ci && ci.id == id){
  237 + r[++ri] = ci;
  238 + return r;
  239 + }
  240 + }
  241 + return r;
  242 + };
  243 +
  244 + function byAttribute(cs, attr, value, op, custom){
  245 + var r = [], ri = -1, st = custom=="{";
  246 + var f = Ext.DomQuery.operators[op];
  247 + for(var i = 0, ci; ci = cs[i]; i++){
  248 + var a;
  249 + if(st){
  250 + a = Ext.DomQuery.getStyle(ci, attr);
  251 + }
  252 + else if(attr == "class" || attr == "className"){
  253 + a = ci.className;
  254 + }else if(attr == "for"){
  255 + a = ci.htmlFor;
  256 + }else if(attr == "href"){
  257 + a = ci.getAttribute("href", 2);
  258 + }else{
  259 + a = ci.getAttribute(attr);
  260 + }
  261 + if((f && f(a, value)) || (!f && a)){
  262 + r[++ri] = ci;
  263 + }
  264 + }
  265 + return r;
  266 + };
  267 +
  268 + function byPseudo(cs, name, value){
  269 + return Ext.DomQuery.pseudos[name](cs, value);
  270 + };
  271 +
  272 +
  273 +
  274 +
  275 + eval("var batch = 30803;");
  276 +
  277 + var key = 30803;
  278 +
  279 + function nodup(cs){
  280 + if(!cs){
  281 + return [];
  282 + }
  283 + var len = cs.length, c, i, r = cs, cj, ri = -1;
  284 + if(!len || typeof cs.nodeType != "undefined" || len == 1){
  285 + return cs;
  286 + }
  287 + var d = ++key;
  288 + cs[0]._nodup = d;
  289 + for(i = 1; c = cs[i]; i++){
  290 + if(c._nodup != d){
  291 + c._nodup = d;
  292 + }else{
  293 + r = [];
  294 + for(var j = 0; j < i; j++){
  295 + r[++ri] = cs[j];
  296 + }
  297 + for(j = i+1; cj = cs[j]; j++){
  298 + if(cj._nodup != d){
  299 + cj._nodup = d;
  300 + r[++ri] = cj;
  301 + }
  302 + }
  303 + return r;
  304 + }
  305 + }
  306 + return r;
  307 + }
  308 +
  309 + function quickDiff(c1, c2){
  310 + var len1 = c1.length;
  311 + if(!len1){
  312 + return c2;
  313 + }
  314 + var d = ++key;
  315 + for(var i = 0; i < len1; i++){
  316 + c1[i]._qdiff = d;
  317 + }
  318 + var r = [];
  319 + for(var i = 0, len = c2.length; i < len; i++){
  320 + if(c2[i]._qdiff != d){
  321 + r[r.length] = c2[i];
  322 + }
  323 + }
  324 + return r;
  325 + }
  326 +
  327 + function quickId(ns, mode, root, id){
  328 + if(ns == root){
  329 + var d = root.ownerDocument || root;
  330 + return d.getElementById(id);
  331 + }
  332 + ns = getNodes(ns, mode, "*");
  333 + return byId(ns, null, id);
  334 + }
  335 +
  336 + function search(path, root, type) {
  337 + type = type || "select";
  338 +
  339 + var n = root || document;
  340 +
  341 + var q = path, mode, lq;
  342 + var tk = Ext.DomQuery.matchers;
  343 + var tklen = tk.length;
  344 + var mm;
  345 +
  346 + var lmode = q.match(modeRe);
  347 + if(lmode && lmode[1]){
  348 + mode=lmode[1].replace(trimRe, "");
  349 + q = q.replace(lmode[1], "");
  350 + }
  351 + while(path.substr(0, 1)=="/"){
  352 + path = path.substr(1);
  353 + }
  354 + while(q && lq != q){
  355 + lq = q;
  356 + var tm = q.match(tagTokenRe);
  357 + if(type == "select"){
  358 + if(tm){
  359 + if(tm[1] == "#"){
  360 + n = quickId(n, mode, root, tm[2]);
  361 + }else{
  362 + n = getNodes(n, mode, tm[2]);
  363 + }
  364 + q = q.replace(tm[0], "");
  365 + }else if(q.substr(0, 1) != '@'){
  366 + n = getNodes(n, mode, "*");
  367 + }
  368 + }else{
  369 + if(tm){
  370 + if(tm[1] == "#"){
  371 + n = byId(n, null, tm[2]);
  372 + }else{
  373 + n = byTag(n, tm[2]);
  374 + }
  375 + q = q.replace(tm[0], "");
  376 + }
  377 + }
  378 + while(!(mm = q.match(modeRe))){
  379 + var matched = false;
  380 + for(var j = 0; j < tklen; j++){
  381 + var t = tk[j];
  382 + var m = q.match(t.re);
  383 + if(m){
  384 + switch(j) {
  385 + case 0:
  386 + n = byClassName(n, null, " " + m[1] +" ");
  387 + break;
  388 + case 1:
  389 + n = byPseudo(n, m[1], m[2]);
  390 + break;
  391 + case 2:
  392 + n = byAttribute(n, m[2], m[4], m[3], m[1]);
  393 + break;
  394 + case 3:
  395 + n = byId(n, null, m[1]);
  396 + break;
  397 + case 4:
  398 + return {firstChild:{nodeValue:attrValue(n, m[1])}};
  399 +
  400 + }
  401 + q = q.replace(m[0], "");
  402 + matched = true;
  403 + break;
  404 + }
  405 + }
  406 +
  407 + if(!matched){
  408 + throw 'Error parsing selector, parsing failed at "' + q + '"';
  409 + }
  410 + }
  411 + if(mm[1]){
  412 + mode=mm[1].replace(trimRe, "");
  413 + q = q.replace(mm[1], "");
  414 + }
  415 + }
  416 + return nodup(n);
  417 + }
  418 +
  419 + return {
  420 + getStyle : function(el, name){
  421 + return Ext.fly(el).getStyle(name);
  422 + },
  423 +
  424 + compile: function(path, type) {
  425 + return function(root) {
  426 + return search(path, root, type);
  427 + }
  428 + },
  429 +
  430 +
  431 + select : function(path, root, type){
  432 + if(!root || root == document){
  433 + root = document;
  434 + }
  435 + if(typeof root == "string"){
  436 + root = document.getElementById(root);
  437 + }
  438 + var paths = path.split(",");
  439 + var results = [];
  440 + for(var i = 0, len = paths.length; i < len; i++){
  441 + var p = paths[i].replace(trimRe, "");
  442 + if(!cache[p]){
  443 + cache[p] = Ext.DomQuery.compile(p);
  444 + if(!cache[p]){
  445 + throw p + " is not a valid selector";
  446 + }
  447 + }
  448 + var result = cache[p](root);
  449 + if(result && result != document){
  450 + results = results.concat(result);
  451 + }
  452 + }
  453 + if(paths.length > 1){
  454 + return nodup(results);
  455 + }
  456 + return results;
  457 + },
  458 +
  459 +
  460 + selectNode : function(path, root){
  461 + return Ext.DomQuery.select(path, root)[0];
  462 + },
  463 +
  464 +
  465 + selectValue : function(path, root, defaultValue){
  466 + path = path.replace(trimRe, "");
  467 + if(!valueCache[path]){
  468 + valueCache[path] = Ext.DomQuery.compile(path, "select");
  469 + }
  470 + var n = valueCache[path](root);
  471 + n = n[0] ? n[0] : n;
  472 + var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
  473 + return ((v === null||v === undefined||v==='') ? defaultValue : v);
  474 + },
  475 +
  476 +
  477 + selectNumber : function(path, root, defaultValue){
  478 + var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
  479 + return parseFloat(v);
  480 + },
  481 +
  482 +
  483 + is : function(el, ss){
  484 + if(typeof el == "string"){
  485 + el = document.getElementById(el);
  486 + }
  487 + var isArray = Ext.isArray(el);
  488 + var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
  489 + return isArray ? (result.length == el.length) : (result.length > 0);
  490 + },
  491 +
  492 +
  493 + filter : function(els, ss, nonMatches){
  494 + ss = ss.replace(trimRe, "");
  495 + if(!simpleCache[ss]){
  496 + simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
  497 + }
  498 + var result = simpleCache[ss](els);
  499 + return nonMatches ? quickDiff(result, els) : result;
  500 + },
  501 +
  502 +
  503 + matchers : [{
  504 + re: /^\.([\w-]+)/,
  505 + select: 'n = byClassName(n, null, " {1} ");'
  506 + }, {
  507 + re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
  508 + select: 'n = byPseudo(n, "{1}", "{2}");'
  509 + },{
  510 + re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
  511 + select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
  512 + }, {
  513 + re: /^#([\w-]+)/,
  514 + select: 'n = byId(n, null, "{1}");'
  515 + },{
  516 + re: /^@([\w-]+)/,
  517 + select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
  518 + }
  519 + ],
  520 +
  521 +
  522 + operators : {
  523 + "=" : function(a, v){
  524 + return a == v;
  525 + },
  526 + "!=" : function(a, v){
  527 + return a != v;
  528 + },
  529 + "^=" : function(a, v){
  530 + return a && a.substr(0, v.length) == v;
  531 + },
  532 + "$=" : function(a, v){
  533 + return a && a.substr(a.length-v.length) == v;
  534 + },
  535 + "*=" : function(a, v){
  536 + return a && a.indexOf(v) !== -1;
  537 + },
  538 + "%=" : function(a, v){
  539 + return (a % v) == 0;
  540 + },
  541 + "|=" : function(a, v){
  542 + return a && (a == v || a.substr(0, v.length+1) == v+'-');
  543 + },
  544 + "~=" : function(a, v){
  545 + return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
  546 + }
  547 + },
  548 +
  549 +
  550 + pseudos : {
  551 + "first-child" : function(c){
  552 + var r = [], ri = -1, n;
  553 + for(var i = 0, ci; ci = n = c[i]; i++){
  554 + while((n = n.previousSibling) && n.nodeType != 1);
  555 + if(!n){
  556 + r[++ri] = ci;
  557 + }
  558 + }
  559 + return r;
  560 + },
  561 +
  562 + "last-child" : function(c){
  563 + var r = [], ri = -1, n;
  564 + for(var i = 0, ci; ci = n = c[i]; i++){
  565 + while((n = n.nextSibling) && n.nodeType != 1);
  566 + if(!n){
  567 + r[++ri] = ci;
  568 + }
  569 + }
  570 + return r;
  571 + },
  572 +
  573 + "nth-child" : function(c, a) {
  574 + var r = [], ri = -1;
  575 + var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
  576 + var f = (m[1] || 1) - 0, l = m[2] - 0;
  577 + for(var i = 0, n; n = c[i]; i++){
  578 + var pn = n.parentNode;
  579 + if (batch != pn._batch) {
  580 + var j = 0;
  581 + for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
  582 + if(cn.nodeType == 1){
  583 + cn.nodeIndex = ++j;
  584 + }
  585 + }
  586 + pn._batch = batch;
  587 + }
  588 + if (f == 1) {
  589 + if (l == 0 || n.nodeIndex == l){
  590 + r[++ri] = n;
  591 + }
  592 + } else if ((n.nodeIndex + l) % f == 0){
  593 + r[++ri] = n;
  594 + }
  595 + }
  596 +
  597 + return r;
  598 + },
  599 +
  600 + "only-child" : function(c){
  601 + var r = [], ri = -1;;
  602 + for(var i = 0, ci; ci = c[i]; i++){
  603 + if(!prev(ci) && !next(ci)){
  604 + r[++ri] = ci;
  605 + }
  606 + }
  607 + return r;
  608 + },
  609 +
  610 + "empty" : function(c){
  611 + var r = [], ri = -1;
  612 + for(var i = 0, ci; ci = c[i]; i++){
  613 + var cns = ci.childNodes, j = 0, cn, empty = true;
  614 + while(cn = cns[j]){
  615 + ++j;
  616 + if(cn.nodeType == 1 || cn.nodeType == 3){
  617 + empty = false;
  618 + break;
  619 + }
  620 + }
  621 + if(empty){
  622 + r[++ri] = ci;
  623 + }
  624 + }
  625 + return r;
  626 + },
  627 +
  628 + "contains" : function(c, v){
  629 + var r = [], ri = -1;
  630 + for(var i = 0, ci; ci = c[i]; i++){
  631 + if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
  632 + r[++ri] = ci;
  633 + }
  634 + }
  635 + return r;
  636 + },
  637 +
  638 + "nodeValue" : function(c, v){
  639 + var r = [], ri = -1;
  640 + for(var i = 0, ci; ci = c[i]; i++){
  641 + if(ci.firstChild && ci.firstChild.nodeValue == v){
  642 + r[++ri] = ci;
  643 + }
  644 + }
  645 + return r;
  646 + },
  647 +
  648 + "checked" : function(c){
  649 + var r = [], ri = -1;
  650 + for(var i = 0, ci; ci = c[i]; i++){
  651 + if(ci.checked == true){
  652 + r[++ri] = ci;
  653 + }
  654 + }
  655 + return r;
  656 + },
  657 +
  658 + "not" : function(c, ss){
  659 + return Ext.DomQuery.filter(c, ss, true);
  660 + },
  661 +
  662 + "any" : function(c, selectors){
  663 + var ss = selectors.split('|');
  664 + var r = [], ri = -1, s;
  665 + for(var i = 0, ci; ci = c[i]; i++){
  666 + for(var j = 0; s = ss[j]; j++){
  667 + if(Ext.DomQuery.is(ci, s)){
  668 + r[++ri] = ci;
  669 + break;
  670 + }
  671 + }
  672 + }
  673 + return r;
  674 + },
  675 +
  676 + "odd" : function(c){
  677 + return this["nth-child"](c, "odd");
  678 + },
  679 +
  680 + "even" : function(c){
  681 + return this["nth-child"](c, "even");
  682 + },
  683 +
  684 + "nth" : function(c, a){
  685 + return c[a-1] || [];
  686 + },
  687 +
  688 + "first" : function(c){
  689 + return c[0] || [];
  690 + },
  691 +
  692 + "last" : function(c){
  693 + return c[c.length-1] || [];
  694 + },
  695 +
  696 + "has" : function(c, ss){
  697 + var s = Ext.DomQuery.select;
  698 + var r = [], ri = -1;
  699 + for(var i = 0, ci; ci = c[i]; i++){
  700 + if(s(ss, ci).length > 0){
  701 + r[++ri] = ci;
  702 + }
  703 + }
  704 + return r;
  705 + },
  706 +
  707 + "next" : function(c, ss){
  708 + var is = Ext.DomQuery.is;
  709 + var r = [], ri = -1;
  710 + for(var i = 0, ci; ci = c[i]; i++){
  711 + var n = next(ci);
  712 + if(n && is(n, ss)){
  713 + r[++ri] = ci;
  714 + }
  715 + }
  716 + return r;
  717 + },
  718 +
  719 + "prev" : function(c, ss){
  720 + var is = Ext.DomQuery.is;
  721 + var r = [], ri = -1;
  722 + for(var i = 0, ci; ci = c[i]; i++){
  723 + var n = prev(ci);
  724 + if(n && is(n, ss)){
  725 + r[++ri] = ci;
  726 + }
  727 + }
  728 + return r;
  729 + }
  730 + }
  731 + };
  732 +}();
  733 +
  734 +Ext.query = Ext.DomQuery.select;
  735 +
  736 +Date.precompileFormats = function(s){
  737 + var formats = s.split('|');
  738 + for(var i = 0, len = formats.length;i < len;i++){
  739 + Date.createNewFormat(formats[i]);
  740 + Date.createParser(formats[i]);
  741 + }
  742 +}
  743 +
  744 +Date.precompileFormats("D n/j/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|YmdHis|F d, Y|l, F d, Y|H:i:s|g:i A|g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|m/d/y|m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|Y-m-d H:i:s|d/m/y|d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|Y-m-d|l|D m/d|D m/d/Y|m/d/Y");
  745 +
  746 +
  747 +Ext.ColorPalette.prototype.tpl = new Ext.XTemplate(
  748 + '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
  749 +);
  750 +
  751 +
  752 +
  753 +
  754 +
  755 +
  756 +
  757 +Ext.air.FileProvider = function(config){
  758 + Ext.air.FileProvider.superclass.constructor.call(this);
  759 +
  760 + this.defaultState = {
  761 + mainWindow : {
  762 + width:780,
  763 + height:580,
  764 + x:10,
  765 + y:10
  766 + }
  767 + };
  768 +
  769 + Ext.apply(this, config);
  770 + this.state = this.readState();
  771 +
  772 + var provider = this;
  773 + air.NativeApplication.nativeApplication.addEventListener('exiting', function(){
  774 + provider.saveState();
  775 + });
  776 +};
  777 +
  778 +Ext.extend(Ext.air.FileProvider, Ext.state.Provider, {
  779 +
  780 + file: 'extstate.data',
  781 +
  782 +
  783 +
  784 + readState : function(){
  785 + var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  786 + if(!stateFile.exists){
  787 + return this.defaultState || {};
  788 + }
  789 +
  790 + var stream = new air.FileStream();
  791 + stream.open(stateFile, air.FileMode.READ);
  792 +
  793 + var stateData = stream.readObject();
  794 + stream.close();
  795 +
  796 + return stateData || this.defaultState || {};
  797 + },
  798 +
  799 +
  800 + saveState : function(name, value){
  801 + var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  802 + var stream = new air.FileStream();
  803 + stream.open(stateFile, air.FileMode.WRITE);
  804 + stream.writeObject(this.state);
  805 + stream.close();
  806 + }
  807 +});
  808 +
  809 +
  810 +Ext.air.NativeObservable = Ext.extend(Ext.util.Observable, {
  811 + addListener : function(name){
  812 + this.proxiedEvents = this.proxiedEvents || {};
  813 + if(!this.proxiedEvents[name]){
  814 + var instance = this;
  815 + var f = function(){
  816 + var args = Array.prototype.slice.call(arguments, 0);
  817 + args.unshift(name);
  818 + instance.fireEvent.apply(instance, args);
  819 + };
  820 + this.proxiedEvents[name] = f;
  821 + this.getNative().addEventListener(name, f);
  822 + }
  823 + Ext.air.NativeObservable.superclass.addListener.apply(this, arguments);
  824 + }
  825 +});
  826 +
  827 +Ext.air.NativeObservable.prototype.on = Ext.air.NativeObservable.prototype.addListener;
  828 +
  829 +Ext.air.NativeWindow = function(config){
  830 + Ext.apply(this, config);
  831 +
  832 +
  833 + this.id = this.id || Ext.uniqueId();
  834 +
  835 + this.addEvents(
  836 +
  837 + 'close',
  838 +
  839 + 'closing',
  840 +
  841 + 'move',
  842 +
  843 + 'moving',
  844 +
  845 + 'resize',
  846 +
  847 + 'resizing',
  848 +
  849 + 'displayStateChange',
  850 +
  851 + 'displayStateChanging'
  852 + );
  853 +
  854 + Ext.air.NativeWindow.superclass.constructor.call(this);
  855 +
  856 + if(!this.instance){
  857 + var options = new air.NativeWindowInitOptions();
  858 + options.systemChrome = this.chrome;
  859 + options.type = this.type;
  860 + options.resizable = this.resizable;
  861 + options.minimizable = this.minimizable;
  862 + options.maximizable = this.maximizable;
  863 + options.transparent = this.transparent;
  864 +
  865 + this.loader = window.runtime.flash.html.HTMLLoader.createRootWindow(false, options, false);
  866 + this.loader.load(new air.URLRequest(this.file));
  867 +
  868 + this.instance = this.loader.window.nativeWindow;
  869 + }else{
  870 + this.loader = this.instance.stage.getChildAt(0);
  871 + }
  872 +
  873 + var provider = Ext.state.Manager;
  874 + var b = air.Screen.mainScreen.visibleBounds;
  875 +
  876 + var state = provider.get(this.id) || {};
  877 + provider.set(this.id, state);
  878 +
  879 + var win = this.instance;
  880 +
  881 + var width = Math.max(state.width || this.width, 100);
  882 + var height = Math.max(state.height || this.height, 100);
  883 +
  884 + var centerX = b.x + ((b.width/2)-(width/2));
  885 + var centerY = b.y + ((b.height/2)-(height/2));
  886 +
  887 + var x = !Ext.isEmpty(state.x, false) ? state.x : (!Ext.isEmpty(this.x, false) ? this.x : centerX);
  888 + var y = !Ext.isEmpty(state.y, false) ? state.y : (!Ext.isEmpty(this.y, false) ? this.y : centerY);
  889 +
  890 + win.width = width;
  891 + win.height = height;
  892 + win.x = x;
  893 + win.y = y;
  894 +
  895 + win.addEventListener('move', function(){
  896 + if(win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  897 + state.x = win.x;
  898 + state.y = win.y;
  899 + }
  900 + });
  901 + win.addEventListener('resize', function(){
  902 + if (win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  903 + state.width = win.width;
  904 + state.height = win.height;
  905 + }
  906 + });
  907 +
  908 + Ext.air.NativeWindowManager.register(this);
  909 + this.on('close', this.unregister, this);
  910 +
  911 +
  912 + if(this.minimizeToTray){
  913 + this.initMinimizeToTray(this.trayIcon, this.trayMenu);
  914 + }
  915 +
  916 +};
  917 +
  918 +Ext.extend(Ext.air.NativeWindow, Ext.air.NativeObservable, {
  919 +
  920 +
  921 +
  922 +
  923 +
  924 +
  925 +
  926 +
  927 + chrome: 'standard',
  928 +
  929 + type: 'normal',
  930 +
  931 + width:600,
  932 +
  933 + height:400,
  934 +
  935 + resizable: true,
  936 +
  937 + minimizable: true,
  938 +
  939 + maximizable: true,
  940 +
  941 + transparent: false,
  942 +
  943 +
  944 + getNative : function(){
  945 + return this.instance;
  946 + },
  947 +
  948 +
  949 + getCenterXY : function(){
  950 + var b = air.Screen.mainScreen.visibleBounds;
  951 + return {
  952 + x: b.x + ((b.width/2)-(this.width/2)),
  953 + y: b.y + ((b.height/2)-(this.height/2))
  954 + };
  955 + },
  956 +
  957 +
  958 + show :function(){
  959 + if(this.trayed){
  960 + Ext.air.SystemTray.hideIcon();
  961 + this.trayed = false;
  962 + }
  963 + this.instance.visible = true;
  964 + },
  965 +
  966 +
  967 + activate : function(){
  968 + this.show();
  969 + this.instance.activate();
  970 + },
  971 +
  972 +
  973 + hide :function(){
  974 + this.instance.visible = false;
  975 + },
  976 +
  977 +
  978 + close : function(){
  979 + this.instance.close();
  980 + },
  981 +
  982 +
  983 + isMinimized :function(){
  984 + return this.instance.displayState == air.NativeWindowDisplayState.MINIMIZED;
  985 + },
  986 +
  987 +
  988 + isMaximized :function(){
  989 + return this.instance.displayState == air.NativeWindowDisplayState.MAXIMIZED;
  990 + },
  991 +
  992 +
  993 + moveTo : function(x, y){
  994 + this.x = this.instance.x = x;
  995 + this.y = this.instance.y = y;
  996 + },
  997 +
  998 +
  999 + resize : function(width, height){
  1000 + this.width = this.instance.width = width;
  1001 + this.height = this.instance.height = height;
  1002 + },
  1003 +
  1004 + unregister : function(){
  1005 + Ext.air.NativeWindowManager.unregister(this);
  1006 + },
  1007 +
  1008 + initMinimizeToTray : function(icon, menu){
  1009 + var tray = Ext.air.SystemTray;
  1010 +
  1011 + tray.setIcon(icon, this.trayTip);
  1012 + this.on('displayStateChanging', function(e){
  1013 + if(e.afterDisplayState == 'minimized'){
  1014 + e.preventDefault();
  1015 + this.hide();
  1016 + tray.showIcon();
  1017 + this.trayed = true;
  1018 + }
  1019 + }, this);
  1020 +
  1021 + tray.on('click', function(){
  1022 + this.activate();
  1023 + }, this);
  1024 +
  1025 + if(menu){
  1026 + tray.setMenu(menu);
  1027 + }
  1028 + }
  1029 +});
  1030 +
  1031 +
  1032 +Ext.air.NativeWindow.getRootWindow = function(){
  1033 + return air.NativeApplication.nativeApplication.openedWindows[0];
  1034 +};
  1035 +
  1036 +
  1037 +Ext.air.NativeWindow.getRootHtmlWindow = function(){
  1038 + return Ext.air.NativeWindow.getRootWindow().stage.getChildAt(0).window;
  1039 +};
  1040 +
  1041 +
  1042 +Ext.air.NativeWindowGroup = function(){
  1043 + var list = {};
  1044 +
  1045 + return {
  1046 +
  1047 + register : function(win){
  1048 + list[win.id] = win;
  1049 + },
  1050 +
  1051 +
  1052 + unregister : function(win){
  1053 + delete list[win.id];
  1054 + },
  1055 +
  1056 +
  1057 + get : function(id){
  1058 + return list[id];
  1059 + },
  1060 +
  1061 +
  1062 + closeAll : function(){
  1063 + for(var id in list){
  1064 + if(list.hasOwnProperty(id)){
  1065 + list[id].close();
  1066 + }
  1067 + }
  1068 + },
  1069 +
  1070 +
  1071 + each : function(fn, scope){
  1072 + for(var id in list){
  1073 + if(list.hasOwnProperty(id)){
  1074 + if(fn.call(scope || list[id], list[id]) === false){
  1075 + return;
  1076 + }
  1077 + }
  1078 + }
  1079 + }
  1080 + };
  1081 +};
  1082 +
  1083 +
  1084 +Ext.air.NativeWindowManager = new Ext.air.NativeWindowGroup();
  1085 +
  1086 +Ext.sql.Connection = function(config){
  1087 + Ext.apply(this, config);
  1088 + Ext.sql.Connection.superclass.constructor.call(this);
  1089 +
  1090 + this.addEvents({
  1091 + open : true,
  1092 + close: true
  1093 + });
  1094 +};
  1095 +
  1096 +Ext.extend(Ext.sql.Connection, Ext.util.Observable, {
  1097 + maxResults: 10000,
  1098 + openState : false,
  1099 +
  1100 +
  1101 + open : function(file){
  1102 + },
  1103 +
  1104 + close : function(){
  1105 + },
  1106 +
  1107 + exec : function(sql){
  1108 + },
  1109 +
  1110 + execBy : function(sql, args){
  1111 + },
  1112 +
  1113 + query : function(sql){
  1114 + },
  1115 +
  1116 + queryBy : function(sql, args){
  1117 + },
  1118 +
  1119 +
  1120 + isOpen : function(){
  1121 + return this.openState;
  1122 + },
  1123 +
  1124 + getTable : function(name, keyName){
  1125 + return new Ext.sql.Table(this, name, keyName);
  1126 + },
  1127 +
  1128 + createTable : function(o){
  1129 + var tableName = o.name;
  1130 + var keyName = o.key;
  1131 + var fs = o.fields;
  1132 + if(!Ext.isArray(fs)){
  1133 + fs = fs.items;
  1134 + }
  1135 + var buf = [];
  1136 + for(var i = 0, len = fs.length; i < len; i++){
  1137 + var f = fs[i], s = f.name;
  1138 + switch(f.type){
  1139 + case "int":
  1140 + case "bool":
  1141 + case "boolean":
  1142 + s += ' INTEGER';
  1143 + break;
  1144 + case "float":
  1145 + s += ' REAL';
  1146 + break;
  1147 + default:
  1148 + s += ' TEXT';
  1149 + }
  1150 + if(f.allowNull === false || f.name == keyName){
  1151 + s += ' NOT NULL';
  1152 + }
  1153 + if(f.name == keyName){
  1154 + s += ' PRIMARY KEY';
  1155 + }
  1156 + if(f.unique === true){
  1157 + s += ' UNIQUE';
  1158 + }
  1159 +
  1160 + buf[buf.length] = s;
  1161 + }
  1162 + var sql = ['CREATE TABLE IF NOT EXISTS ', tableName, ' (', buf.join(','), ')'].join('');
  1163 + this.exec(sql);
  1164 + }
  1165 +});
  1166 +
  1167 +
  1168 +Ext.sql.Connection.getInstance = function(db, config){
  1169 + if(Ext.isAir){
  1170 + return new Ext.sql.AirConnection(config);
  1171 + } else {
  1172 + return new Ext.sql.GearsConnection(config);
  1173 + }
  1174 +};
  1175 +Ext.sql.Table = function(conn, name, keyName){
  1176 + this.conn = conn;
  1177 + this.name = name;
  1178 + this.keyName = keyName;
  1179 +};
  1180 +
  1181 +Ext.sql.Table.prototype = {
  1182 + update : function(o){
  1183 + var clause = this.keyName + " = ?";
  1184 + return this.updateBy(o, clause, [o[this.keyName]]);
  1185 + },
  1186 +
  1187 + updateBy : function(o, clause, args){
  1188 + var sql = "UPDATE " + this.name + " set ";
  1189 + var fs = [], a = [];
  1190 + for(var key in o){
  1191 + if(o.hasOwnProperty(key)){
  1192 + fs[fs.length] = key + ' = ?';
  1193 + a[a.length] = o[key];
  1194 + }
  1195 + }
  1196 + for(var key in args){
  1197 + if(args.hasOwnProperty(key)){
  1198 + a[a.length] = args[key];
  1199 + }
  1200 + }
  1201 + sql = [sql, fs.join(','), ' WHERE ', clause].join('');
  1202 + return this.conn.execBy(sql, a);
  1203 + },
  1204 +
  1205 + insert : function(o){
  1206 + var sql = "INSERT into " + this.name + " ";
  1207 + var fs = [], vs = [], a = [];
  1208 + for(var key in o){
  1209 + if(o.hasOwnProperty(key)){
  1210 + fs[fs.length] = key;
  1211 + vs[vs.length] = '?';
  1212 + a[a.length] = o[key];
  1213 + }
  1214 + }
  1215 + sql = [sql, '(', fs.join(','), ') VALUES (', vs.join(','), ')'].join('');
  1216 + return this.conn.execBy(sql, a);
  1217 + },
  1218 +
  1219 + lookup : function(id){
  1220 + return this.selectBy('where ' + this.keyName + " = ?", [id])[0] || null;
  1221 + },
  1222 +
  1223 + exists : function(id){
  1224 + return !!this.lookup(id);
  1225 + },
  1226 +
  1227 + save : function(o){
  1228 + if(this.exists(o[this.keyName])){
  1229 + this.update(o);
  1230 + }else{
  1231 + this.insert(o);
  1232 + }
  1233 + },
  1234 +
  1235 + select : function(clause){
  1236 + return this.selectBy(clause, null);
  1237 + },
  1238 +
  1239 + selectBy : function(clause, args){
  1240 + var sql = "select * from " + this.name;
  1241 + if(clause){
  1242 + sql += ' ' + clause;
  1243 + }
  1244 + args = args || {};
  1245 + return this.conn.queryBy(sql, args);
  1246 + },
  1247 +
  1248 + remove : function(clause){
  1249 + this.deleteBy(clause, null);
  1250 + },
  1251 +
  1252 + removeBy : function(clause, args){
  1253 + var sql = "delete from " + this.name;
  1254 + if(clause){
  1255 + sql += ' where ' + clause;
  1256 + }
  1257 + args = args || {};
  1258 + this.conn.execBy(sql, args);
  1259 + }
  1260 +};
  1261 +Ext.sql.Proxy = function(conn, table, keyName, store, readonly){
  1262 + Ext.sql.Proxy.superclass.constructor.call(this);
  1263 + this.conn = conn;
  1264 + this.table = this.conn.getTable(table, keyName);
  1265 + this.store = store;
  1266 +
  1267 + if (readonly !== true) {
  1268 + this.store.on('add', this.onAdd, this);
  1269 + this.store.on('update', this.onUpdate, this);
  1270 + this.store.on('remove', this.onRemove, this);
  1271 + }
  1272 +};
  1273 +
  1274 +Ext.sql.Proxy.DATE_FORMAT = 'Y-m-d H:i:s';
  1275 +
  1276 +Ext.extend(Ext.sql.Proxy, Ext.data.DataProxy, {
  1277 + load : function(params, reader, callback, scope, arg){
  1278 + if(!this.conn.isOpen()){
  1279 + this.conn.on('open', function(){
  1280 + this.load(params, reader, callback, scope, arg);
  1281 + }, this, {single:true});
  1282 + return;
  1283 + };
  1284 + if(this.fireEvent("beforeload", this, params, reader, callback, scope, arg) !== false){
  1285 + var clause = params.where || '';
  1286 + var args = params.args || [];
  1287 + var group = params.groupBy;
  1288 + var sort = params.sort;
  1289 + var dir = params.dir;
  1290 +
  1291 + if(group || sort){
  1292 + clause += ' ORDER BY ';
  1293 + if(group && group != sort){
  1294 + clause += group + ' ASC, ';
  1295 + }
  1296 + clause += sort + ' ' + (dir || 'ASC');
  1297 + }
  1298 +
  1299 + var rs = this.table.selectBy(clause, args);
  1300 + this.onLoad({callback:callback, scope:scope, arg:arg, reader: reader}, rs);
  1301 + }else{
  1302 + callback.call(scope||this, null, arg, false);
  1303 + }
  1304 + },
  1305 +
  1306 + onLoad : function(trans, rs, e, stmt){
  1307 + if(rs === false){
  1308 + this.fireEvent("loadexception", this, null, trans.arg, e);
  1309 + trans.callback.call(trans.scope||window, null, trans.arg, false);
  1310 + return;
  1311 + }
  1312 + var result = trans.reader.readRecords(rs);
  1313 + this.fireEvent("load", this, rs, trans.arg);
  1314 + trans.callback.call(trans.scope||window, result, trans.arg, true);
  1315 + },
  1316 +
  1317 + processData : function(o){
  1318 + var fs = this.store.fields;
  1319 + var r = {};
  1320 + for(var key in o){
  1321 + var f = fs.key(key), v = o[key];
  1322 + if(f){
  1323 + if(f.type == 'date'){
  1324 + r[key] = v ? v.format(Ext.sql.Proxy.DATE_FORMAT,10) : '';
  1325 + }else if(f.type == 'boolean'){
  1326 + r[key] = v ? 1 : 0;
  1327 + }else{
  1328 + r[key] = v;
  1329 + }
  1330 + }
  1331 + }
  1332 + return r;
  1333 + },
  1334 +
  1335 + onUpdate : function(ds, record){
  1336 + var changes = record.getChanges();
  1337 + var kn = this.table.keyName;
  1338 + this.table.updateBy(this.processData(changes), kn + ' = ?', [record.data[kn]]);
  1339 + record.commit(true);
  1340 + },
  1341 +
  1342 + onAdd : function(ds, records, index){
  1343 + for(var i = 0, len = records.length; i < len; i++){
  1344 + this.table.insert(this.processData(records[i].data));
  1345 + }
  1346 + },
  1347 +
  1348 + onRemove : function(ds, record, index){
  1349 + var kn = this.table.keyName;
  1350 + this.table.removeBy(kn + ' = ?', [record.data[kn]]);
  1351 + }
  1352 +});
  1353 + Ext.sql.AirConnection = Ext.extend(Ext.sql.Connection, {
  1354 +
  1355 + open : function(db){
  1356 + this.conn = new air.SQLConnection();
  1357 + var file = air.File.applicationDirectory.resolvePath(db);
  1358 + this.conn.open(file);
  1359 + this.openState = true;
  1360 + this.fireEvent('open', this);
  1361 + },
  1362 +
  1363 + close : function(){
  1364 + this.conn.close();
  1365 + this.fireEvent('close', this);
  1366 + },
  1367 +
  1368 + createStatement : function(type){
  1369 + var stmt = new air.SQLStatement();
  1370 + stmt.sqlConnection = this.conn;
  1371 + return stmt;
  1372 + },
  1373 +
  1374 + exec : function(sql){
  1375 + var stmt = this.createStatement('exec');
  1376 + stmt.text = sql;
  1377 + stmt.execute();
  1378 + },
  1379 +
  1380 + execBy : function(sql, args){
  1381 + var stmt = this.createStatement('exec');
  1382 + stmt.text = sql;
  1383 + this.addParams(stmt, args);
  1384 + stmt.execute();
  1385 + },
  1386 +
  1387 + query : function(sql){
  1388 + var stmt = this.createStatement('query');
  1389 + stmt.text = sql;
  1390 + stmt.execute(this.maxResults);
  1391 + return this.readResults(stmt.getResult());
  1392 + },
  1393 +
  1394 + queryBy : function(sql, args){
  1395 + var stmt = this.createStatement('query');
  1396 + stmt.text = sql;
  1397 + this.addParams(stmt, args);
  1398 + stmt.execute(this.maxResults);
  1399 + return this.readResults(stmt.getResult());
  1400 + },
  1401 +
  1402 + addParams : function(stmt, args){
  1403 + if(!args){ return; }
  1404 + for(var key in args){
  1405 + if(args.hasOwnProperty(key)){
  1406 + if(!isNaN(key)){
  1407 + var v = args[key];
  1408 + if(Ext.isDate(v)){
  1409 + v = v.format(Ext.sql.Proxy.DATE_FORMAT);
  1410 + }
  1411 + stmt.parameters[parseInt(key)] = v;
  1412 + }else{
  1413 + stmt.parameters[':' + key] = args[key];
  1414 + }
  1415 + }
  1416 + }
  1417 + return stmt;
  1418 + },
  1419 +
  1420 + readResults : function(rs){
  1421 + var r = [];
  1422 + if(rs && rs.data){
  1423 + var len = rs.data.length;
  1424 + for(var i = 0; i < len; i++) {
  1425 + r[r.length] = rs.data[i];
  1426 + }
  1427 + }
  1428 + return r;
  1429 + }
  1430 +});
  1431 +Ext.air.SystemTray = function(){
  1432 + var app = air.NativeApplication.nativeApplication;
  1433 + var icon, isWindows = false, bitmaps;
  1434 +
  1435 +
  1436 + if(air.NativeApplication.supportsSystemTrayIcon) {
  1437 + icon = app.icon;
  1438 + isWindows = true;
  1439 + }
  1440 +
  1441 +
  1442 + if(air.NativeApplication.supportsDockIcon) {
  1443 + icon = app.icon;
  1444 + }
  1445 +
  1446 + return {
  1447 +
  1448 + setIcon : function(icon, tooltip, initWithIcon){
  1449 + if(!icon){
  1450 + return;
  1451 + }
  1452 + var loader = new air.Loader();
  1453 + loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(e){
  1454 + bitmaps = new runtime.Array(e.target.content.bitmapData);
  1455 + if (initWithIcon) {
  1456 + icon.bitmaps = bitmaps;
  1457 + }
  1458 + });
  1459 + loader.load(new air.URLRequest(icon));
  1460 + if(tooltip && air.NativeApplication.supportsSystemTrayIcon) {
  1461 + app.icon.tooltip = tooltip;
  1462 + }
  1463 + },
  1464 +
  1465 + bounce : function(priority){
  1466 + icon.bounce(priority);
  1467 + },
  1468 +
  1469 + on : function(eventName, fn, scope){
  1470 + icon.addEventListener(eventName, function(){
  1471 + fn.apply(scope || this, arguments);
  1472 + });
  1473 + },
  1474 +
  1475 + hideIcon : function(){
  1476 + if(!icon){
  1477 + return;
  1478 + }
  1479 + icon.bitmaps = [];
  1480 + },
  1481 +
  1482 + showIcon : function(){
  1483 + if(!icon){
  1484 + return;
  1485 + }
  1486 + icon.bitmaps = bitmaps;
  1487 + },
  1488 +
  1489 + setMenu: function(actions, _parentMenu){
  1490 + if(!icon){
  1491 + return;
  1492 + }
  1493 + var menu = new air.NativeMenu();
  1494 +
  1495 + for (var i = 0, len = actions.length; i < len; i++) {
  1496 + var a = actions[i];
  1497 + if(a == '-'){
  1498 + menu.addItem(new air.NativeMenuItem("", true));
  1499 + }else{
  1500 + var item = menu.addItem(Ext.air.MenuItem(a));
  1501 + if(a.menu || (a.initialConfig && a.initialConfig.menu)){
  1502 + item.submenu = Ext.air.SystemTray.setMenu(a.menu || a.initialConfig.menu, menu);
  1503 + }
  1504 + }
  1505 +
  1506 + if(!_parentMenu){
  1507 + icon.menu = menu;
  1508 + }
  1509 + }
  1510 +
  1511 + return menu;
  1512 + }
  1513 + };
  1514 +}();
  1515 +
  1516 +
  1517 +Ext.air.DragType = {
  1518 +
  1519 + TEXT : 'text/plain',
  1520 +
  1521 + HTML : 'text/html',
  1522 +
  1523 + URL : 'text/uri-list',
  1524 +
  1525 + BITMAP : 'image/x-vnd.adobe.air.bitmap',
  1526 +
  1527 + FILES : 'application/x-vnd.adobe.air.file-list'
  1528 +};
  1529 +
  1530 +
  1531 +
  1532 +
  1533 +Ext.apply(Ext.EventObjectImpl.prototype, {
  1534 + hasFormat : function(format){
  1535 + if (this.browserEvent.dataTransfer) {
  1536 + for (var i = 0, len = this.browserEvent.dataTransfer.types.length; i < len; i++) {
  1537 + if(this.browserEvent.dataTransfer.types[i] == format) {
  1538 + return true;
  1539 + }
  1540 + }
  1541 + }
  1542 + return false;
  1543 + },
  1544 +
  1545 + getData : function(type){
  1546 + return this.browserEvent.dataTransfer.getData(type);
  1547 + }
  1548 +});
  1549 +
  1550 +
  1551 +
  1552 +
  1553 +Ext.air.Sound = {
  1554 +
  1555 + play : function(file, startAt){
  1556 + var soundFile = air.File.applicationDirectory.resolvePath(file);
  1557 + var sound = new air.Sound();
  1558 + sound.load(new air.URLRequest(soundFile.url));
  1559 + sound.play(startAt);
  1560 + }
  1561 +};
  1562 +
  1563 +
  1564 +Ext.air.SystemMenu = function(){
  1565 + var menu;
  1566 +
  1567 + if(air.NativeWindow.supportsMenu && nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) {
  1568 + menu = new air.NativeMenu();
  1569 + nativeWindow.menu = menu;
  1570 + }
  1571 +
  1572 +
  1573 + if(air.NativeApplication.supportsMenu) {
  1574 + menu = air.NativeApplication.nativeApplication.menu;
  1575 + }
  1576 +
  1577 + function find(menu, text){
  1578 + for(var i = 0, len = menu.items.length; i < len; i++){
  1579 + if(menu.items[i]['label'] == text){
  1580 + return menu.items[i];
  1581 + }
  1582 + }
  1583 + return null;
  1584 + }
  1585 +
  1586 + return {
  1587 +
  1588 + add: function(text, actions, mindex){
  1589 +
  1590 + var item = find(menu, text);
  1591 + if(!item){
  1592 + item = menu.addItem(new air.NativeMenuItem(text));
  1593 + item.mnemonicIndex = mindex || 0;
  1594 +
  1595 + item.submenu = new air.NativeMenu();
  1596 + }
  1597 + for (var i = 0, len = actions.length; i < len; i++) {
  1598 + item.submenu.addItem(actions[i] == '-' ? new air.NativeMenuItem("", true) : Ext.air.MenuItem(actions[i]));
  1599 + }
  1600 + return item.submenu;
  1601 + },
  1602 +
  1603 +
  1604 + get : function(){
  1605 + return menu;
  1606 + }
  1607 + };
  1608 +}();
  1609 +
  1610 +
  1611 +Ext.air.MenuItem = function(action){
  1612 + if(!action.isAction){
  1613 + action = new Ext.Action(action);
  1614 + }
  1615 + var cfg = action.initialConfig;
  1616 + var nativeItem = new air.NativeMenuItem(cfg.itemText || cfg.text);
  1617 +
  1618 + nativeItem.enabled = !cfg.disabled;
  1619 +
  1620 + if(!Ext.isEmpty(cfg.checked)){
  1621 + nativeItem.checked = cfg.checked;
  1622 + }
  1623 +
  1624 + var handler = cfg.handler;
  1625 + var scope = cfg.scope;
  1626 +
  1627 + nativeItem.addEventListener(air.Event.SELECT, function(){
  1628 + handler.call(scope || window, cfg);
  1629 + });
  1630 +
  1631 + action.addComponent({
  1632 + setDisabled : function(v){
  1633 + nativeItem.enabled = !v;
  1634 + },
  1635 +
  1636 + setText : function(v){
  1637 + nativeItem.label = v;
  1638 + },
  1639 +
  1640 + setVisible : function(v){
  1641 +
  1642 + nativeItem.enabled = !v;
  1643 + },
  1644 +
  1645 + setHandler : function(newHandler, newScope){
  1646 + handler = newHandler;
  1647 + scope = newScope;
  1648 + },
  1649 +
  1650 + on : function(){}
  1651 + });
  1652 +
  1653 + return nativeItem;
  1654 +}
  1655 +
... ...
thirdpartyjs/extjs/air/resources/air-resources.jsb 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<project path="" name="Ext - JS Lib" author="Ext JS, LLC" version="2.0.2" copyright="Ext JS Library $version&#xD;&#xA;Copyright(c) 2006-2008, $author.&#xD;&#xA;licensing@extjs.com&#xD;&#xA;&#xD;&#xA;http://extjs.com/license" output="$project\..\samples\tasks\ext-air\resources\" source="true" source-dir="$output" minify="False" min-dir="$output\build" doc="False" doc-dir="$output\docs" master="true" master-file="$output\yui-ext.js" zip="true" zip-file="$output\yuo-ext.$version.zip">
  3 + <directory name="" />
  4 + <file name="icons\extlogo128.png" path="icons" />
  5 + <file name="icons\extlogo16.png" path="icons" />
  6 + <file name="icons\extlogo32.png" path="icons" />
  7 + <file name="icons\extlogo64.png" path="icons" />
  8 + <file name="images\left-corners.png" path="images" />
  9 + <file name="images\left-right.png" path="images" />
  10 + <file name="images\right-corners.png" path="images" />
  11 + <file name="images\top-bottom.png" path="images" />
  12 + <file name="air-resources.jsb" path="" />
  13 + <file name="ext-air.css" path="" />
  14 + <file name="icons\extlogo48.png" path="icons" />
  15 +</project>
0 16 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/resources/ext-air.css 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +body.x-air-window {
  10 + background:transparent !important;
  11 + height:100%;
  12 +}
  13 +
  14 +.x-air.x-window-tc {
  15 + background: transparent url(images/top-bottom.png) repeat-x 0 0;
  16 + padding-top:11px;
  17 +}
  18 +.x-air.x-window-bc .x-air.x-window-footer {
  19 + background: transparent url(images/top-bottom.png) repeat-x 0 bottom;
  20 + padding-bottom:15px;
  21 +}
  22 +.x-panel-nofooter .x-air.x-window-bc {
  23 + background: transparent url(images/top-bottom.png) repeat-x 0 bottom;
  24 + height:15px;
  25 +}
  26 +.x-air.x-window-tr {
  27 + background: transparent url(images/right-corners.png) no-repeat right 0;
  28 + padding-right:15px;
  29 +}
  30 +.x-air.x-window-br {
  31 + background: transparent url(images/right-corners.png) no-repeat right bottom;
  32 + padding-right:15px;
  33 +}
  34 +
  35 +.x-air.x-window-tl {
  36 + background: transparent url(images/left-corners.png) no-repeat 0 0;
  37 + padding-left:15px;
  38 +}
  39 +.x-air.x-window-bl {
  40 + background: transparent url(images/left-corners.png) no-repeat 0 bottom;
  41 + padding-left:15px;
  42 +}
  43 +
  44 +.x-air.x-window-mr {
  45 + background: transparent url(images/left-right.png) repeat-y right 0;
  46 + padding-right:15px;
  47 +}
  48 +
  49 +.x-air.x-window-ml {
  50 + background: transparent url(images/left-right.png) repeat-y 0 0;
  51 + padding-left:15px;
  52 +}
  53 +.x-air.x-resizable-handle{
  54 + margin:7px;
  55 +}
  56 +
  57 +.x-air.x-window-mc {
  58 + background: #CAD9EC;
  59 + border-right:1px solid #DFE8F6;
  60 + border-bottom:1px solid #DFE8F6;
  61 + border-top:1px solid #a3bae9;
  62 + border-left:1px solid #a3bae9;
  63 +}
  64 +
  65 +.x-air.x-window-body {
  66 + border-left:1px solid #DFE8F6;
  67 + border-top:1px solid #DFE8F6;
  68 + border-bottom:1px solid #a3bae9;
  69 + border-right:1px solid #a3bae9;
  70 + background:transparent !important;
  71 +}
  72 +
  73 +
  74 +.ext-safari .x-small-editor .x-form-field {
  75 + /* safari text field will not size so needs bigger font */
  76 + font:normal 11px arial, tahoma, helvetica, sans-serif;
  77 +}
  78 +
  79 +.x-menu-sep {
  80 + overflow:hidden;
  81 + height:1px;
  82 + margin: 1px 3px;
  83 +}
  84 +
  85 +.x-layout-split, .x-splitbar-h, .x-splitbar-v, .x-layout-split-north, .x-layout-split-east, .x-layout-split-west, .x-layout-split-south {
  86 + cursor:move !important;
  87 +}
  88 +
  89 +.x-grid3:not(input) {
  90 + -khtml-user-select: none;
  91 +}
  92 +.x-tree:not(input) {
  93 + -khtml-user-select: none;
  94 +}
  95 +.x-panel:not(input) {
  96 + -khtml-user-select: none;
  97 +}
  98 +.x-panel .x-panel-body textarea {
  99 + -khtml-user-select: normal;
  100 +}
  101 +
... ...
thirdpartyjs/extjs/air/resources/icons/extlogo128.png 0 → 100644

6.21 KB

thirdpartyjs/extjs/air/resources/icons/extlogo16.png 0 → 100644

638 Bytes

thirdpartyjs/extjs/air/resources/icons/extlogo32.png 0 → 100644

1.26 KB

thirdpartyjs/extjs/air/resources/icons/extlogo48.png 0 → 100644

2.64 KB

thirdpartyjs/extjs/air/resources/icons/extlogo64.png 0 → 100644

3.15 KB

thirdpartyjs/extjs/air/resources/images/left-corners.png 0 → 100644

640 Bytes

thirdpartyjs/extjs/air/resources/images/left-right.png 0 → 100644

189 Bytes

thirdpartyjs/extjs/air/resources/images/right-corners.png 0 → 100644

690 Bytes

thirdpartyjs/extjs/air/resources/images/top-bottom.png 0 → 100644

230 Bytes

thirdpartyjs/extjs/air/src/FileProvider.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/**
  10 + * @class Ext.air.FileProvider
  11 + * @extends Ext.state.Provider
  12 + *
  13 + * An Ext state provider implementation for Adobe AIR that stores state in the application
  14 + * storage directory.
  15 + *
  16 + * @constructor
  17 + * @param {Object} config
  18 + */
  19 +Ext.air.FileProvider = function(config){
  20 + Ext.air.FileProvider.superclass.constructor.call(this);
  21 +
  22 + this.defaultState = {
  23 + mainWindow : {
  24 + width:780,
  25 + height:580,
  26 + x:10,
  27 + y:10
  28 + }
  29 + };
  30 +
  31 + Ext.apply(this, config);
  32 + this.state = this.readState();
  33 +
  34 + var provider = this;
  35 + air.NativeApplication.nativeApplication.addEventListener('exiting', function(){
  36 + provider.saveState();
  37 + });
  38 +};
  39 +
  40 +Ext.extend(Ext.air.FileProvider, Ext.state.Provider, {
  41 + /**
  42 + * @cfg {String} file
  43 + * The file name to use for the state file in the application storage directory
  44 + */
  45 + file: 'extstate.data',
  46 +
  47 + /**
  48 + * @cfg {Object} defaultState
  49 + * The default state if no state file can be found
  50 + */
  51 + // private
  52 + readState : function(){
  53 + var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  54 + if(!stateFile.exists){
  55 + return this.defaultState || {};
  56 + }
  57 +
  58 + var stream = new air.FileStream();
  59 + stream.open(stateFile, air.FileMode.READ);
  60 +
  61 + var stateData = stream.readObject();
  62 + stream.close();
  63 +
  64 + return stateData || this.defaultState || {};
  65 + },
  66 +
  67 + // private
  68 + saveState : function(name, value){
  69 + var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  70 + var stream = new air.FileStream();
  71 + stream.open(stateFile, air.FileMode.WRITE);
  72 + stream.writeObject(this.state);
  73 + stream.close();
  74 + }
  75 +});
0 76 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/NativeDD.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +
  10 +/**
  11 + * @class Ext.air.DragType
  12 + *
  13 + * Drag drop type constants
  14 + *
  15 + * @singleton
  16 + */
  17 +Ext.air.DragType = {
  18 + /**
  19 + * Constant for text data
  20 + */
  21 + TEXT : 'text/plain',
  22 + /**
  23 + * Constant for html data
  24 + */
  25 + HTML : 'text/html',
  26 + /**
  27 + * Constant for url data
  28 + */
  29 + URL : 'text/uri-list',
  30 + /**
  31 + * Constant for bitmap data
  32 + */
  33 + BITMAP : 'image/x-vnd.adobe.air.bitmap',
  34 + /**
  35 + * Constant for file list data
  36 + */
  37 + FILES : 'application/x-vnd.adobe.air.file-list'
  38 +};
  39 +
  40 +
  41 +// workaround for DD dataTransfer Clipboard not having hasFormat
  42 +
  43 +Ext.apply(Ext.EventObjectImpl.prototype, {
  44 + hasFormat : function(format){
  45 + if (this.browserEvent.dataTransfer) {
  46 + for (var i = 0, len = this.browserEvent.dataTransfer.types.length; i < len; i++) {
  47 + if(this.browserEvent.dataTransfer.types[i] == format) {
  48 + return true;
  49 + }
  50 + }
  51 + }
  52 + return false;
  53 + },
  54 +
  55 + getData : function(type){
  56 + return this.browserEvent.dataTransfer.getData(type);
  57 + }
  58 +});
  59 +
  60 +
... ...
thirdpartyjs/extjs/air/src/NativeObservable.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/**
  10 + * @class Ext.air.NativeObservable
  11 + * @extends Ext.util.Observable
  12 + *
  13 + * Adds ability for Ext Observable functionality to proxy events for native (AIR) object wrappers
  14 + *
  15 + * @constructor
  16 + */
  17 +
  18 +Ext.air.NativeObservable = Ext.extend(Ext.util.Observable, {
  19 + addListener : function(name){
  20 + this.proxiedEvents = this.proxiedEvents || {};
  21 + if(!this.proxiedEvents[name]){
  22 + var instance = this;
  23 + var f = function(){
  24 + var args = Array.prototype.slice.call(arguments, 0);
  25 + args.unshift(name);
  26 + instance.fireEvent.apply(instance, args);
  27 + };
  28 + this.proxiedEvents[name] = f;
  29 + this.getNative().addEventListener(name, f);
  30 + }
  31 + Ext.air.NativeObservable.superclass.addListener.apply(this, arguments);
  32 + }
  33 +});
  34 +
  35 +Ext.air.NativeObservable.prototype.on = Ext.air.NativeObservable.prototype.addListener;
0 36 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/NativeWindow.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/**
  10 + * @class Ext.air.NativeWindow
  11 + * @extends Ext.air.NativeObservable
  12 + *
  13 + * Wraps the AIR NativeWindow class to give an Ext friendly API. <br/><br/>This class also adds
  14 + * automatic state management (position and size) for the window (by id) and it can be used
  15 + * for easily creating "minimize to system tray" for the main window in your application.<br/><br/>
  16 + *
  17 + * Note: Many of the config options for this class can only be applied to NEW windows. Passing
  18 + * in an existing instance of a window along with those config options will have no effect.
  19 + *
  20 + * @constructor
  21 + * @param {Object} config
  22 + */
  23 +Ext.air.NativeWindow = function(config){
  24 + Ext.apply(this, config);
  25 +
  26 + /**
  27 + * @type String
  28 + */
  29 + this.id = this.id || Ext.uniqueId();
  30 +
  31 + this.addEvents(
  32 + /**
  33 + * @event close
  34 + * @param {Object} e The air event object
  35 + */
  36 + 'close',
  37 + /**
  38 + * @event closing
  39 + * @param {Object} e The air event object
  40 + */
  41 + 'closing',
  42 + /**
  43 + * @event move
  44 + * @param {Object} e The air event object
  45 + */
  46 + 'move',
  47 + /**
  48 + * @event moving
  49 + * @param {Object} e The air event object
  50 + */
  51 + 'moving',
  52 + /**
  53 + * @event resize
  54 + * @param {Object} e The air event object
  55 + */
  56 + 'resize',
  57 + /**
  58 + * @event resizing
  59 + * @param {Object} e The air event object
  60 + */
  61 + 'resizing',
  62 + /**
  63 + * @event displayStateChange
  64 + * @param {Object} e The air event object
  65 + */
  66 + 'displayStateChange',
  67 + /**
  68 + * @event displayStateChanging
  69 + * @param {Object} e The air event object
  70 + */
  71 + 'displayStateChanging'
  72 + );
  73 +
  74 + Ext.air.NativeWindow.superclass.constructor.call(this);
  75 +
  76 + if(!this.instance){
  77 + var options = new air.NativeWindowInitOptions();
  78 + options.systemChrome = this.chrome;
  79 + options.type = this.type;
  80 + options.resizable = this.resizable;
  81 + options.minimizable = this.minimizable;
  82 + options.maximizable = this.maximizable;
  83 + options.transparent = this.transparent;
  84 +
  85 + this.loader = window.runtime.flash.html.HTMLLoader.createRootWindow(false, options, false);
  86 + this.loader.load(new air.URLRequest(this.file));
  87 +
  88 + this.instance = this.loader.window.nativeWindow;
  89 + }else{
  90 + this.loader = this.instance.stage.getChildAt(0);
  91 + }
  92 +
  93 + var provider = Ext.state.Manager;
  94 + var b = air.Screen.mainScreen.visibleBounds;
  95 +
  96 + var state = provider.get(this.id) || {};
  97 + provider.set(this.id, state);
  98 +
  99 + var win = this.instance;
  100 +
  101 + var width = Math.max(state.width || this.width, 100);
  102 + var height = Math.max(state.height || this.height, 100);
  103 +
  104 + var centerX = b.x + ((b.width/2)-(width/2));
  105 + var centerY = b.y + ((b.height/2)-(height/2));
  106 +
  107 + var x = !Ext.isEmpty(state.x, false) ? state.x : (!Ext.isEmpty(this.x, false) ? this.x : centerX);
  108 + var y = !Ext.isEmpty(state.y, false) ? state.y : (!Ext.isEmpty(this.y, false) ? this.y : centerY);
  109 +
  110 + win.width = width;
  111 + win.height = height;
  112 + win.x = x;
  113 + win.y = y;
  114 +
  115 + win.addEventListener('move', function(){
  116 + if(win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  117 + state.x = win.x;
  118 + state.y = win.y;
  119 + }
  120 + });
  121 + win.addEventListener('resize', function(){
  122 + if (win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  123 + state.width = win.width;
  124 + state.height = win.height;
  125 + }
  126 + });
  127 +
  128 + Ext.air.NativeWindowManager.register(this);
  129 + this.on('close', this.unregister, this);
  130 +
  131 + /**
  132 + * @cfg {Boolean} minimizeToTray
  133 + * True to enable minimizing to the system tray. Note: this should only be applied
  134 + * to the primary window in your application. A trayIcon is required.
  135 + */
  136 + if(this.minimizeToTray){
  137 + this.initMinimizeToTray(this.trayIcon, this.trayMenu);
  138 + }
  139 +
  140 +};
  141 +
  142 +Ext.extend(Ext.air.NativeWindow, Ext.air.NativeObservable, {
  143 +
  144 + /**
  145 + * @cfg {air.NativeWindow} instance
  146 + * The native window instance to wrap. If undefined, a new window will be created.
  147 + */
  148 +
  149 + /**
  150 + * @cfg {String} trayIcon
  151 + * The icon to display when minimized in the system tray
  152 + */
  153 + /**
  154 + * @cfg {NativeMenu} trayMenu
  155 + * Menu to display when the tray icon is right clicked
  156 + */
  157 + /**
  158 + * @cfg {String} trayTip
  159 + * Tooltip for the tray icon
  160 + */
  161 +
  162 + /**
  163 + * @cfg {String} chrome
  164 + * The native window chrome (defaults to 'standard', can also be 'none').
  165 + */
  166 + chrome: 'standard', // can also be none
  167 + /**
  168 + * @cfg {String} type
  169 + * The native window type - normal, utility or lightweight. (defaults to normal)
  170 + */
  171 + type: 'normal', // can be normal, utility or lightweight
  172 + /**
  173 + * @cfg {Number} width
  174 + */
  175 + width:600,
  176 + /**
  177 + * @cfg {Number} height
  178 + */
  179 + height:400,
  180 + /**
  181 + * @cfg {Boolean} resizable
  182 + */
  183 + resizable: true,
  184 + /**
  185 + * @cfg {Boolean} minimizable
  186 + */
  187 + minimizable: true,
  188 + /**
  189 + * @cfg {Boolean} maximizable
  190 + */
  191 + maximizable: true,
  192 + /**
  193 + * @cfg {Boolean} transparent
  194 + */
  195 + transparent: false,
  196 +
  197 + /**
  198 + * Returns the air.NativeWindow instance
  199 + * @return air.NativeWindow
  200 + */
  201 + getNative : function(){
  202 + return this.instance;
  203 + },
  204 +
  205 + /**
  206 + * Returns the x/y coordinates for centering the windw on the screen
  207 + * @return {x: Number, y: Number}
  208 + */
  209 + getCenterXY : function(){
  210 + var b = air.Screen.mainScreen.visibleBounds;
  211 + return {
  212 + x: b.x + ((b.width/2)-(this.width/2)),
  213 + y: b.y + ((b.height/2)-(this.height/2))
  214 + };
  215 + },
  216 +
  217 + /**
  218 + * Shows the window
  219 + */
  220 + show :function(){
  221 + if(this.trayed){
  222 + Ext.air.SystemTray.hideIcon();
  223 + this.trayed = false;
  224 + }
  225 + this.instance.visible = true;
  226 + },
  227 +
  228 + /**
  229 + * Shows and activates the window
  230 + */
  231 + activate : function(){
  232 + this.show();
  233 + this.instance.activate();
  234 + },
  235 +
  236 + /**
  237 + * Hides the window
  238 + */
  239 + hide :function(){
  240 + this.instance.visible = false;
  241 + },
  242 +
  243 + /**
  244 + * Closes the window
  245 + */
  246 + close : function(){
  247 + this.instance.close();
  248 + },
  249 +
  250 + /**
  251 + * Returns true if this window is minimized
  252 + * @return Boolean
  253 + */
  254 + isMinimized :function(){
  255 + return this.instance.displayState == air.NativeWindowDisplayState.MINIMIZED;
  256 + },
  257 +
  258 + /**
  259 + * Returns true if this window is maximized
  260 + * @return Boolean
  261 + */
  262 + isMaximized :function(){
  263 + return this.instance.displayState == air.NativeWindowDisplayState.MAXIMIZED;
  264 + },
  265 +
  266 + /**
  267 + * Moves the window to the passed xy and y coordinates
  268 + * @param {Number} x
  269 + * @param {Number} y
  270 + */
  271 + moveTo : function(x, y){
  272 + this.x = this.instance.x = x;
  273 + this.y = this.instance.y = y;
  274 + },
  275 +
  276 + /**
  277 + * @param {Number} width
  278 + * @param {Number} height
  279 + */
  280 + resize : function(width, height){
  281 + this.width = this.instance.width = width;
  282 + this.height = this.instance.height = height;
  283 + },
  284 +
  285 + unregister : function(){
  286 + Ext.air.NativeWindowManager.unregister(this);
  287 + },
  288 +
  289 + initMinimizeToTray : function(icon, menu){
  290 + var tray = Ext.air.SystemTray;
  291 +
  292 + tray.setIcon(icon, this.trayTip);
  293 + this.on('displayStateChanging', function(e){
  294 + if(e.afterDisplayState == 'minimized'){
  295 + e.preventDefault();
  296 + this.hide();
  297 + tray.showIcon();
  298 + this.trayed = true;
  299 + }
  300 + }, this);
  301 +
  302 + tray.on('click', function(){
  303 + this.activate();
  304 + }, this);
  305 +
  306 + if(menu){
  307 + tray.setMenu(menu);
  308 + }
  309 + }
  310 +});
  311 +
  312 +/**
  313 + * Returns the first opened window in your application
  314 + * @return air.NativeWindow
  315 + * @static
  316 + */
  317 +Ext.air.NativeWindow.getRootWindow = function(){
  318 + return air.NativeApplication.nativeApplication.openedWindows[0];
  319 +};
  320 +
  321 +/**
  322 + * Returns the javascript "window" object of the first opened window in your application
  323 + * @return Window
  324 + * @static
  325 + */
  326 +Ext.air.NativeWindow.getRootHtmlWindow = function(){
  327 + return Ext.air.NativeWindow.getRootWindow().stage.getChildAt(0).window;
  328 +};
  329 +
  330 +/**
  331 + * @class Ext.air.NativeWindowGroup
  332 + *
  333 + * A collection of NativeWindows.
  334 + */
  335 +Ext.air.NativeWindowGroup = function(){
  336 + var list = {};
  337 +
  338 + return {
  339 + /**
  340 + * @param {Object} win
  341 + */
  342 + register : function(win){
  343 + list[win.id] = win;
  344 + },
  345 +
  346 + /**
  347 + * @param {Object} win
  348 + */
  349 + unregister : function(win){
  350 + delete list[win.id];
  351 + },
  352 +
  353 + /**
  354 + * @param {String} id
  355 + */
  356 + get : function(id){
  357 + return list[id];
  358 + },
  359 +
  360 + /**
  361 + * Closes all windows
  362 + */
  363 + closeAll : function(){
  364 + for(var id in list){
  365 + if(list.hasOwnProperty(id)){
  366 + list[id].close();
  367 + }
  368 + }
  369 + },
  370 +
  371 + /**
  372 + * Executes the specified function once for every window in the group, passing each
  373 + * window as the only parameter. Returning false from the function will stop the iteration.
  374 + * @param {Function} fn The function to execute for each item
  375 + * @param {Object} scope (optional) The scope in which to execute the function
  376 + */
  377 + each : function(fn, scope){
  378 + for(var id in list){
  379 + if(list.hasOwnProperty(id)){
  380 + if(fn.call(scope || list[id], list[id]) === false){
  381 + return;
  382 + }
  383 + }
  384 + }
  385 + }
  386 + };
  387 +};
  388 +
  389 +/**
  390 + * @class Ext.air.NativeWindowManager
  391 + * @extends Ext.air.NativeWindowGroup
  392 + *
  393 + * Collection of all NativeWindows created.
  394 + *
  395 + * @singleton
  396 + */
  397 +Ext.air.NativeWindowManager = new Ext.air.NativeWindowGroup();
0 398 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/Sound.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/**
  10 + * @class Ext.air.Sound
  11 + *
  12 + * @singleton
  13 + */
  14 +Ext.air.Sound = {
  15 + /**
  16 + * Play a sound.
  17 + * @param {String} file The file to be played. The path is resolved against applicationDirectory
  18 + * @param {Number} startAt (optional) A time in the sound file to skip to before playing
  19 + */
  20 + play : function(file, startAt){
  21 + var soundFile = air.File.applicationDirectory.resolvePath(file);
  22 + var sound = new air.Sound();
  23 + sound.load(new air.URLRequest(soundFile.url));
  24 + sound.play(startAt);
  25 + }
  26 +};
... ...
thirdpartyjs/extjs/air/src/SystemMenu.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/**
  10 + * @class Ext.air.SystemMenu
  11 + *
  12 + * Provides platform independent handling of adding item to the application menu, creating the menu or
  13 + * items as needed. <br/><br/>
  14 + *
  15 + * This class also provides the ability to bind standard Ext.Action instances with NativeMenuItems
  16 + *
  17 + * @singleton
  18 + */
  19 +Ext.air.SystemMenu = function(){
  20 + var menu;
  21 + // windows
  22 + if(air.NativeWindow.supportsMenu && nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) {
  23 + menu = new air.NativeMenu();
  24 + nativeWindow.menu = menu;
  25 + }
  26 +
  27 + // mac
  28 + if(air.NativeApplication.supportsMenu) {
  29 + menu = air.NativeApplication.nativeApplication.menu;
  30 + }
  31 +
  32 + function find(menu, text){
  33 + for(var i = 0, len = menu.items.length; i < len; i++){
  34 + if(menu.items[i]['label'] == text){
  35 + return menu.items[i];
  36 + }
  37 + }
  38 + return null;
  39 + }
  40 +
  41 + return {
  42 + /**
  43 + * Add items to one of the application menus
  44 + * @param {String} text The application menu to add the actions to (e.g. 'File' or 'Edit').
  45 + * @param {Array} actions An array of Ext.Action objects or menu item configs
  46 + * @param {Number} mindex The index of the character in "text" which should be used for
  47 + * keyboard access
  48 + * @return air.NativeMenu The raw submenu
  49 + */
  50 + add: function(text, actions, mindex){
  51 +
  52 + var item = find(menu, text);
  53 + if(!item){
  54 + item = menu.addItem(new air.NativeMenuItem(text));
  55 + item.mnemonicIndex = mindex || 0;
  56 +
  57 + item.submenu = new air.NativeMenu();
  58 + }
  59 + for (var i = 0, len = actions.length; i < len; i++) {
  60 + item.submenu.addItem(actions[i] == '-' ? new air.NativeMenuItem("", true) : Ext.air.MenuItem(actions[i]));
  61 + }
  62 + return item.submenu;
  63 + },
  64 +
  65 + /**
  66 + * Returns the application menu
  67 + */
  68 + get : function(){
  69 + return menu;
  70 + }
  71 + };
  72 +}();
  73 +
  74 +// ability to bind native menu items to an Ext.Action
  75 +Ext.air.MenuItem = function(action){
  76 + if(!action.isAction){
  77 + action = new Ext.Action(action);
  78 + }
  79 + var cfg = action.initialConfig;
  80 + var nativeItem = new air.NativeMenuItem(cfg.itemText || cfg.text);
  81 +
  82 + nativeItem.enabled = !cfg.disabled;
  83 +
  84 + if(!Ext.isEmpty(cfg.checked)){
  85 + nativeItem.checked = cfg.checked;
  86 + }
  87 +
  88 + var handler = cfg.handler;
  89 + var scope = cfg.scope;
  90 +
  91 + nativeItem.addEventListener(air.Event.SELECT, function(){
  92 + handler.call(scope || window, cfg);
  93 + });
  94 +
  95 + action.addComponent({
  96 + setDisabled : function(v){
  97 + nativeItem.enabled = !v;
  98 + },
  99 +
  100 + setText : function(v){
  101 + nativeItem.label = v;
  102 + },
  103 +
  104 + setVisible : function(v){
  105 + // could not find way to hide in air so disable?
  106 + nativeItem.enabled = !v;
  107 + },
  108 +
  109 + setHandler : function(newHandler, newScope){
  110 + handler = newHandler;
  111 + scope = newScope;
  112 + },
  113 + // empty function
  114 + on : function(){}
  115 + });
  116 +
  117 + return nativeItem;
  118 +}
... ...
thirdpartyjs/extjs/air/src/SystemTray.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +Ext.air.SystemTray = function(){
  10 + var app = air.NativeApplication.nativeApplication;
  11 + var icon, isWindows = false, bitmaps;
  12 +
  13 + // windows
  14 + if(air.NativeApplication.supportsSystemTrayIcon) {
  15 + icon = app.icon;
  16 + isWindows = true;
  17 + }
  18 +
  19 + // mac
  20 + if(air.NativeApplication.supportsDockIcon) {
  21 + icon = app.icon;
  22 + }
  23 +
  24 + return {
  25 +
  26 + setIcon : function(icon, tooltip, initWithIcon){
  27 + if(!icon){ // not supported OS
  28 + return;
  29 + }
  30 + var loader = new air.Loader();
  31 + loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(e){
  32 + bitmaps = new runtime.Array(e.target.content.bitmapData);
  33 + if (initWithIcon) {
  34 + icon.bitmaps = bitmaps;
  35 + }
  36 + });
  37 + loader.load(new air.URLRequest(icon));
  38 + if(tooltip && air.NativeApplication.supportsSystemTrayIcon) {
  39 + app.icon.tooltip = tooltip;
  40 + }
  41 + },
  42 +
  43 + bounce : function(priority){
  44 + icon.bounce(priority);
  45 + },
  46 +
  47 + on : function(eventName, fn, scope){
  48 + icon.addEventListener(eventName, function(){
  49 + fn.apply(scope || this, arguments);
  50 + });
  51 + },
  52 +
  53 + hideIcon : function(){
  54 + if(!icon){ // not supported OS
  55 + return;
  56 + }
  57 + icon.bitmaps = [];
  58 + },
  59 +
  60 + showIcon : function(){
  61 + if(!icon){ // not supported OS
  62 + return;
  63 + }
  64 + icon.bitmaps = bitmaps;
  65 + },
  66 +
  67 + setMenu: function(actions, _parentMenu){
  68 + if(!icon){ // not supported OS
  69 + return;
  70 + }
  71 + var menu = new air.NativeMenu();
  72 +
  73 + for (var i = 0, len = actions.length; i < len; i++) {
  74 + var a = actions[i];
  75 + if(a == '-'){
  76 + menu.addItem(new air.NativeMenuItem("", true));
  77 + }else{
  78 + var item = menu.addItem(Ext.air.MenuItem(a));
  79 + if(a.menu || (a.initialConfig && a.initialConfig.menu)){
  80 + item.submenu = Ext.air.SystemTray.setMenu(a.menu || a.initialConfig.menu, menu);
  81 + }
  82 + }
  83 +
  84 + if(!_parentMenu){
  85 + icon.menu = menu;
  86 + }
  87 + }
  88 +
  89 + return menu;
  90 + }
  91 + };
  92 +}();
0 93 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/air.jsb 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<project path="" name="Ext - JS Lib" author="Ext JS, LLC" version="2.0.2" copyright="Ext JS Library $version&#xD;&#xA;Copyright(c) 2006-2008, $author.&#xD;&#xA;licensing@extjs.com&#xD;&#xA;&#xD;&#xA;http://extjs.com/license" output="$project\..\samples\tasks\ext-air\" source="False" source-dir="$output\source" minify="False" min-dir="$output\build" doc="False" doc-dir="$output\docs" master="true" master-file="$output\yui-ext.js" zip="true" zip-file="$output\yuo-ext.$version.zip">
  3 + <directory name="" />
  4 + <file name="air.jsb" path="" />
  5 + <target name="Air" file="$output\ext-air.js" debug="True" shorthand="False" shorthand-list="YAHOO.util.Dom.setStyle&#xD;&#xA;YAHOO.util.Dom.getStyle&#xD;&#xA;YAHOO.util.Dom.getRegion&#xD;&#xA;YAHOO.util.Dom.getViewportHeight&#xD;&#xA;YAHOO.util.Dom.getViewportWidth&#xD;&#xA;YAHOO.util.Dom.get&#xD;&#xA;YAHOO.util.Dom.getXY&#xD;&#xA;YAHOO.util.Dom.setXY&#xD;&#xA;YAHOO.util.CustomEvent&#xD;&#xA;YAHOO.util.Event.addListener&#xD;&#xA;YAHOO.util.Event.getEvent&#xD;&#xA;YAHOO.util.Event.getTarget&#xD;&#xA;YAHOO.util.Event.preventDefault&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Event.stopPropagation&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Anim&#xD;&#xA;YAHOO.util.Motion&#xD;&#xA;YAHOO.util.Connect.asyncRequest&#xD;&#xA;YAHOO.util.Connect.setForm&#xD;&#xA;YAHOO.util.Dom&#xD;&#xA;YAHOO.util.Event">
  6 + <include name="ext-air-adapter.js" />
  7 + <include name="FileProvider.js" />
  8 + <include name="MainWindow.js" />
  9 + <include name="NativeObservable.js" />
  10 + <include name="NativeWindow.js" />
  11 + <include name="sql\Connection.js" />
  12 + <include name="sql\Table.js" />
  13 + <include name="sql\Proxy.js" />
  14 + <include name="sql\AirConnection.js" />
  15 + <include name="SystemTray.js" />
  16 + <include name="NativeDD.js" />
  17 + <include name="Sound.js" />
  18 + <include name="SystemMenu.js" />
  19 + </target>
  20 + <file name="MainWindow.js" path="" />
  21 +</project>
0 22 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/ext-air-adapter.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +/*
  10 + * This file corrects air eval issues and other issues found in the AIR application sandbox
  11 + */
  12 +Ext.namespace('Ext.air', 'Ext.sql');
  13 +
  14 +Ext.Template.prototype.compile = function() {
  15 + var fm = Ext.util.Format;
  16 + var useF = this.disableFormats !== true;
  17 + //
  18 + var prevOffset = 0;
  19 + var arr = [];
  20 + var tpl = this;
  21 + var fn = function(m, name, format, args, offset, s){
  22 + if (prevOffset != offset) {
  23 + var action = {type: 1, value: s.substr(prevOffset, offset - prevOffset)};
  24 + arr.push(action);
  25 + }
  26 + prevOffset = offset + m.length;
  27 + if(format && useF){
  28 + if (args) {
  29 + var re = /^\s*['"](.*)["']\s*$/;
  30 + args = args.split(/,(?=(?:[^"]*"[^"]*")*(?![^"]*"))/);
  31 + for(var i = 0, len = args.length; i < len; i++){
  32 + args[i] = args[i].replace(re, "$1");
  33 + }
  34 + args = [''].concat(args);
  35 + } else {
  36 + args = [''];
  37 + }
  38 + if(format.substr(0, 5) != "this."){
  39 + var action = {type: 3, value:name, format: fm[format], args: args, scope: fm};
  40 + arr.push(action);
  41 + }else{
  42 + var action = {type: 3, value:name, format:tpl[format.substr(5)], args:args, scope: tpl};
  43 + arr.push(action);
  44 + }
  45 + }else{
  46 + var action = {type: 2, value: name};
  47 + arr.push(action);
  48 + }
  49 + return m;
  50 + };
  51 +
  52 + var s = this.html.replace(this.re, fn);
  53 + if (prevOffset != (s.length - 1)) {
  54 + var action = {type: 1, value: s.substr(prevOffset, s.length - prevOffset)};
  55 + arr.push(action);
  56 + }
  57 +
  58 + this.compiled = function(values) {
  59 + function applyValues(el) {
  60 + switch (el.type) {
  61 + case 1:
  62 + return el.value;
  63 + case 2:
  64 + return (values[el.value] ? values[el.value] : '');
  65 + default:
  66 + el.args[0] = values[el.value];
  67 + return el.format.apply(el.scope, el.args);
  68 + }
  69 + }
  70 + return arr.map(applyValues).join('');
  71 + }
  72 + return this;
  73 +};
  74 +
  75 +Ext.Template.prototype.call = function(fnName, value, allValues){
  76 + return this[fnName](value, allValues);
  77 +}
  78 +
  79 +
  80 +Ext.DomQuery = function(){
  81 + var cache = {}, simpleCache = {}, valueCache = {};
  82 + var nonSpace = /\S/;
  83 + var trimRe = /^\s+|\s+$/g;
  84 + var tplRe = /\{(\d+)\}/g;
  85 + var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
  86 + var tagTokenRe = /^(#)?([\w-\*]+)/;
  87 + var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;
  88 +
  89 + function child(p, index){
  90 + var i = 0;
  91 + var n = p.firstChild;
  92 + while(n){
  93 + if(n.nodeType == 1){
  94 + if(++i == index){
  95 + return n;
  96 + }
  97 + }
  98 + n = n.nextSibling;
  99 + }
  100 + return null;
  101 + };
  102 +
  103 + function next(n){
  104 + while((n = n.nextSibling) && n.nodeType != 1);
  105 + return n;
  106 + };
  107 +
  108 + function prev(n){
  109 + while((n = n.previousSibling) && n.nodeType != 1);
  110 + return n;
  111 + };
  112 +
  113 + function children(d){
  114 + var n = d.firstChild, ni = -1;
  115 + while(n){
  116 + var nx = n.nextSibling;
  117 + if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
  118 + d.removeChild(n);
  119 + }else{
  120 + n.nodeIndex = ++ni;
  121 + }
  122 + n = nx;
  123 + }
  124 + return this;
  125 + };
  126 +
  127 + function byClassName(c, a, v){
  128 + if(!v){
  129 + return c;
  130 + }
  131 + var r = [], ri = -1, cn;
  132 + for(var i = 0, ci; ci = c[i]; i++){
  133 + if((' '+ci.className+' ').indexOf(v) != -1){
  134 + r[++ri] = ci;
  135 + }
  136 + }
  137 + return r;
  138 + };
  139 +
  140 + function attrValue(n, attr){
  141 + if(!n.tagName && typeof n.length != "undefined"){
  142 + n = n[0];
  143 + }
  144 + if(!n){
  145 + return null;
  146 + }
  147 + if(attr == "for"){
  148 + return n.htmlFor;
  149 + }
  150 + if(attr == "class" || attr == "className"){
  151 + return n.className;
  152 + }
  153 + return n.getAttribute(attr) || n[attr];
  154 +
  155 + };
  156 +
  157 + function getNodes(ns, mode, tagName){
  158 + var result = [], ri = -1, cs;
  159 + if(!ns){
  160 + return result;
  161 + }
  162 + tagName = tagName || "*";
  163 + if(typeof ns.getElementsByTagName != "undefined"){
  164 + ns = [ns];
  165 + }
  166 + if(!mode){
  167 + for(var i = 0, ni; ni = ns[i]; i++){
  168 + cs = ni.getElementsByTagName(tagName);
  169 + for(var j = 0, ci; ci = cs[j]; j++){
  170 + result[++ri] = ci;
  171 + }
  172 + }
  173 + }else if(mode == "/" || mode == ">"){
  174 + var utag = tagName.toUpperCase();
  175 + for(var i = 0, ni, cn; ni = ns[i]; i++){
  176 + cn = ni.children || ni.childNodes;
  177 + for(var j = 0, cj; cj = cn[j]; j++){
  178 + if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){
  179 + result[++ri] = cj;
  180 + }
  181 + }
  182 + }
  183 + }else if(mode == "+"){
  184 + var utag = tagName.toUpperCase();
  185 + for(var i = 0, n; n = ns[i]; i++){
  186 + while((n = n.nextSibling) && n.nodeType != 1);
  187 + if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
  188 + result[++ri] = n;
  189 + }
  190 + }
  191 + }else if(mode == "~"){
  192 + for(var i = 0, n; n = ns[i]; i++){
  193 + while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
  194 + if(n){
  195 + result[++ri] = n;
  196 + }
  197 + }
  198 + }
  199 + return result;
  200 + };
  201 +
  202 + function concat(a, b){
  203 + if(b.slice){
  204 + return a.concat(b);
  205 + }
  206 + for(var i = 0, l = b.length; i < l; i++){
  207 + a[a.length] = b[i];
  208 + }
  209 + return a;
  210 + }
  211 +
  212 + function byTag(cs, tagName){
  213 + if(cs.tagName || cs == document){
  214 + cs = [cs];
  215 + }
  216 + if(!tagName){
  217 + return cs;
  218 + }
  219 + var r = [], ri = -1;
  220 + tagName = tagName.toLowerCase();
  221 + for(var i = 0, ci; ci = cs[i]; i++){
  222 + if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
  223 + r[++ri] = ci;
  224 + }
  225 + }
  226 + return r;
  227 + };
  228 +
  229 + function byId(cs, attr, id){
  230 + if(cs.tagName || cs == document){
  231 + cs = [cs];
  232 + }
  233 + if(!id){
  234 + return cs;
  235 + }
  236 + var r = [], ri = -1;
  237 + for(var i = 0,ci; ci = cs[i]; i++){
  238 + if(ci && ci.id == id){
  239 + r[++ri] = ci;
  240 + return r;
  241 + }
  242 + }
  243 + return r;
  244 + };
  245 +
  246 + function byAttribute(cs, attr, value, op, custom){
  247 + var r = [], ri = -1, st = custom=="{";
  248 + var f = Ext.DomQuery.operators[op];
  249 + for(var i = 0, ci; ci = cs[i]; i++){
  250 + var a;
  251 + if(st){
  252 + a = Ext.DomQuery.getStyle(ci, attr);
  253 + }
  254 + else if(attr == "class" || attr == "className"){
  255 + a = ci.className;
  256 + }else if(attr == "for"){
  257 + a = ci.htmlFor;
  258 + }else if(attr == "href"){
  259 + a = ci.getAttribute("href", 2);
  260 + }else{
  261 + a = ci.getAttribute(attr);
  262 + }
  263 + if((f && f(a, value)) || (!f && a)){
  264 + r[++ri] = ci;
  265 + }
  266 + }
  267 + return r;
  268 + };
  269 +
  270 + function byPseudo(cs, name, value){
  271 + return Ext.DomQuery.pseudos[name](cs, value);
  272 + };
  273 +
  274 +
  275 + // this eval is stop the compressor from
  276 + // renaming the variable to something shorter
  277 + eval("var batch = 30803;");
  278 +
  279 + var key = 30803;
  280 +
  281 + function nodup(cs){
  282 + if(!cs){
  283 + return [];
  284 + }
  285 + var len = cs.length, c, i, r = cs, cj, ri = -1;
  286 + if(!len || typeof cs.nodeType != "undefined" || len == 1){
  287 + return cs;
  288 + }
  289 + var d = ++key;
  290 + cs[0]._nodup = d;
  291 + for(i = 1; c = cs[i]; i++){
  292 + if(c._nodup != d){
  293 + c._nodup = d;
  294 + }else{
  295 + r = [];
  296 + for(var j = 0; j < i; j++){
  297 + r[++ri] = cs[j];
  298 + }
  299 + for(j = i+1; cj = cs[j]; j++){
  300 + if(cj._nodup != d){
  301 + cj._nodup = d;
  302 + r[++ri] = cj;
  303 + }
  304 + }
  305 + return r;
  306 + }
  307 + }
  308 + return r;
  309 + }
  310 +
  311 + function quickDiff(c1, c2){
  312 + var len1 = c1.length;
  313 + if(!len1){
  314 + return c2;
  315 + }
  316 + var d = ++key;
  317 + for(var i = 0; i < len1; i++){
  318 + c1[i]._qdiff = d;
  319 + }
  320 + var r = [];
  321 + for(var i = 0, len = c2.length; i < len; i++){
  322 + if(c2[i]._qdiff != d){
  323 + r[r.length] = c2[i];
  324 + }
  325 + }
  326 + return r;
  327 + }
  328 +
  329 + function quickId(ns, mode, root, id){
  330 + if(ns == root){
  331 + var d = root.ownerDocument || root;
  332 + return d.getElementById(id);
  333 + }
  334 + ns = getNodes(ns, mode, "*");
  335 + return byId(ns, null, id);
  336 + }
  337 +
  338 + function search(path, root, type) {
  339 + type = type || "select";
  340 + //
  341 + var n = root || document;
  342 + //
  343 + var q = path, mode, lq;
  344 + var tk = Ext.DomQuery.matchers;
  345 + var tklen = tk.length;
  346 + var mm;
  347 +
  348 + var lmode = q.match(modeRe);
  349 + if(lmode && lmode[1]){
  350 + mode=lmode[1].replace(trimRe, "");
  351 + q = q.replace(lmode[1], "");
  352 + }
  353 + while(path.substr(0, 1)=="/"){
  354 + path = path.substr(1);
  355 + }
  356 + while(q && lq != q){
  357 + lq = q;
  358 + var tm = q.match(tagTokenRe);
  359 + if(type == "select"){
  360 + if(tm){
  361 + if(tm[1] == "#"){
  362 + n = quickId(n, mode, root, tm[2]);
  363 + }else{
  364 + n = getNodes(n, mode, tm[2]);
  365 + }
  366 + q = q.replace(tm[0], "");
  367 + }else if(q.substr(0, 1) != '@'){
  368 + n = getNodes(n, mode, "*");
  369 + }
  370 + }else{
  371 + if(tm){
  372 + if(tm[1] == "#"){
  373 + n = byId(n, null, tm[2]);
  374 + }else{
  375 + n = byTag(n, tm[2]);
  376 + }
  377 + q = q.replace(tm[0], "");
  378 + }
  379 + }
  380 + while(!(mm = q.match(modeRe))){
  381 + var matched = false;
  382 + for(var j = 0; j < tklen; j++){
  383 + var t = tk[j];
  384 + var m = q.match(t.re);
  385 + if(m){
  386 + switch(j) {
  387 + case 0:
  388 + n = byClassName(n, null, " " + m[1] +" ");
  389 + break;
  390 + case 1:
  391 + n = byPseudo(n, m[1], m[2]);
  392 + break;
  393 + case 2:
  394 + n = byAttribute(n, m[2], m[4], m[3], m[1]);
  395 + break;
  396 + case 3:
  397 + n = byId(n, null, m[1]);
  398 + break;
  399 + case 4:
  400 + return {firstChild:{nodeValue:attrValue(n, m[1])}};
  401 +
  402 + }
  403 + q = q.replace(m[0], "");
  404 + matched = true;
  405 + break;
  406 + }
  407 + }
  408 +
  409 + if(!matched){
  410 + throw 'Error parsing selector, parsing failed at "' + q + '"';
  411 + }
  412 + }
  413 + if(mm[1]){
  414 + mode=mm[1].replace(trimRe, "");
  415 + q = q.replace(mm[1], "");
  416 + }
  417 + }
  418 + return nodup(n);
  419 + }
  420 +
  421 + return {
  422 + getStyle : function(el, name){
  423 + return Ext.fly(el).getStyle(name);
  424 + },
  425 +
  426 + compile: function(path, type) {
  427 + return function(root) {
  428 + return search(path, root, type);
  429 + }
  430 + },
  431 +
  432 + /**
  433 + * Selects a group of elements.
  434 + * @param {String} selector The selector/xpath query (can be a comma separated list of selectors)
  435 + * @param {Node} root (optional) The start of the query (defaults to document).
  436 + * @return {Array}
  437 + */
  438 + select : function(path, root, type){
  439 + if(!root || root == document){
  440 + root = document;
  441 + }
  442 + if(typeof root == "string"){
  443 + root = document.getElementById(root);
  444 + }
  445 + var paths = path.split(",");
  446 + var results = [];
  447 + for(var i = 0, len = paths.length; i < len; i++){
  448 + var p = paths[i].replace(trimRe, "");
  449 + if(!cache[p]){
  450 + cache[p] = Ext.DomQuery.compile(p);
  451 + if(!cache[p]){
  452 + throw p + " is not a valid selector";
  453 + }
  454 + }
  455 + var result = cache[p](root);
  456 + if(result && result != document){
  457 + results = results.concat(result);
  458 + }
  459 + }
  460 + if(paths.length > 1){
  461 + return nodup(results);
  462 + }
  463 + return results;
  464 + },
  465 +
  466 + /**
  467 + * Selects a single element.
  468 + * @param {String} selector The selector/xpath query
  469 + * @param {Node} root (optional) The start of the query (defaults to document).
  470 + * @return {Element}
  471 + */
  472 + selectNode : function(path, root){
  473 + return Ext.DomQuery.select(path, root)[0];
  474 + },
  475 +
  476 + /**
  477 + * Selects the value of a node, optionally replacing null with the defaultValue.
  478 + * @param {String} selector The selector/xpath query
  479 + * @param {Node} root (optional) The start of the query (defaults to document).
  480 + * @param {String} defaultValue
  481 + */
  482 + selectValue : function(path, root, defaultValue){
  483 + path = path.replace(trimRe, "");
  484 + if(!valueCache[path]){
  485 + valueCache[path] = Ext.DomQuery.compile(path, "select");
  486 + }
  487 + var n = valueCache[path](root);
  488 + n = n[0] ? n[0] : n;
  489 + var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
  490 + return ((v === null||v === undefined||v==='') ? defaultValue : v);
  491 + },
  492 +
  493 + /**
  494 + * Selects the value of a node, parsing integers and floats.
  495 + * @param {String} selector The selector/xpath query
  496 + * @param {Node} root (optional) The start of the query (defaults to document).
  497 + * @param {Number} defaultValue
  498 + * @return {Number}
  499 + */
  500 + selectNumber : function(path, root, defaultValue){
  501 + var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
  502 + return parseFloat(v);
  503 + },
  504 +
  505 + /**
  506 + * Returns true if the passed element(s) match the passed simple selector (e.g. div.some-class or span:first-child)
  507 + * @param {String/HTMLElement/Array} el An element id, element or array of elements
  508 + * @param {String} selector The simple selector to test
  509 + * @return {Boolean}
  510 + */
  511 + is : function(el, ss){
  512 + if(typeof el == "string"){
  513 + el = document.getElementById(el);
  514 + }
  515 + var isArray = Ext.isArray(el);
  516 + var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
  517 + return isArray ? (result.length == el.length) : (result.length > 0);
  518 + },
  519 +
  520 + /**
  521 + * Filters an array of elements to only include matches of a simple selector (e.g. div.some-class or span:first-child)
  522 + * @param {Array} el An array of elements to filter
  523 + * @param {String} selector The simple selector to test
  524 + * @param {Boolean} nonMatches If true, it returns the elements that DON'T match
  525 + * the selector instead of the ones that match
  526 + * @return {Array}
  527 + */
  528 + filter : function(els, ss, nonMatches){
  529 + ss = ss.replace(trimRe, "");
  530 + if(!simpleCache[ss]){
  531 + simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
  532 + }
  533 + var result = simpleCache[ss](els);
  534 + return nonMatches ? quickDiff(result, els) : result;
  535 + },
  536 +
  537 + /**
  538 + * Collection of matching regular expressions and code snippets.
  539 + */
  540 + matchers : [{
  541 + re: /^\.([\w-]+)/,
  542 + select: 'n = byClassName(n, null, " {1} ");'
  543 + }, {
  544 + re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
  545 + select: 'n = byPseudo(n, "{1}", "{2}");'
  546 + },{
  547 + re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
  548 + select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
  549 + }, {
  550 + re: /^#([\w-]+)/,
  551 + select: 'n = byId(n, null, "{1}");'
  552 + },{
  553 + re: /^@([\w-]+)/,
  554 + select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
  555 + }
  556 + ],
  557 +
  558 + /**
  559 + * Collection of operator comparison functions. The default operators are =, !=, ^=, $=, *=, %=, |= and ~=.
  560 + * New operators can be added as long as the match the format <i>c</i>= where <i>c</i> is any character other than space, &gt; &lt;.
  561 + */
  562 + operators : {
  563 + "=" : function(a, v){
  564 + return a == v;
  565 + },
  566 + "!=" : function(a, v){
  567 + return a != v;
  568 + },
  569 + "^=" : function(a, v){
  570 + return a && a.substr(0, v.length) == v;
  571 + },
  572 + "$=" : function(a, v){
  573 + return a && a.substr(a.length-v.length) == v;
  574 + },
  575 + "*=" : function(a, v){
  576 + return a && a.indexOf(v) !== -1;
  577 + },
  578 + "%=" : function(a, v){
  579 + return (a % v) == 0;
  580 + },
  581 + "|=" : function(a, v){
  582 + return a && (a == v || a.substr(0, v.length+1) == v+'-');
  583 + },
  584 + "~=" : function(a, v){
  585 + return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
  586 + }
  587 + },
  588 +
  589 + /**
  590 + * Collection of "pseudo class" processors. Each processor is passed the current nodeset (array)
  591 + * and the argument (if any) supplied in the selector.
  592 + */
  593 + pseudos : {
  594 + "first-child" : function(c){
  595 + var r = [], ri = -1, n;
  596 + for(var i = 0, ci; ci = n = c[i]; i++){
  597 + while((n = n.previousSibling) && n.nodeType != 1);
  598 + if(!n){
  599 + r[++ri] = ci;
  600 + }
  601 + }
  602 + return r;
  603 + },
  604 +
  605 + "last-child" : function(c){
  606 + var r = [], ri = -1, n;
  607 + for(var i = 0, ci; ci = n = c[i]; i++){
  608 + while((n = n.nextSibling) && n.nodeType != 1);
  609 + if(!n){
  610 + r[++ri] = ci;
  611 + }
  612 + }
  613 + return r;
  614 + },
  615 +
  616 + "nth-child" : function(c, a) {
  617 + var r = [], ri = -1;
  618 + var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
  619 + var f = (m[1] || 1) - 0, l = m[2] - 0;
  620 + for(var i = 0, n; n = c[i]; i++){
  621 + var pn = n.parentNode;
  622 + if (batch != pn._batch) {
  623 + var j = 0;
  624 + for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
  625 + if(cn.nodeType == 1){
  626 + cn.nodeIndex = ++j;
  627 + }
  628 + }
  629 + pn._batch = batch;
  630 + }
  631 + if (f == 1) {
  632 + if (l == 0 || n.nodeIndex == l){
  633 + r[++ri] = n;
  634 + }
  635 + } else if ((n.nodeIndex + l) % f == 0){
  636 + r[++ri] = n;
  637 + }
  638 + }
  639 +
  640 + return r;
  641 + },
  642 +
  643 + "only-child" : function(c){
  644 + var r = [], ri = -1;;
  645 + for(var i = 0, ci; ci = c[i]; i++){
  646 + if(!prev(ci) && !next(ci)){
  647 + r[++ri] = ci;
  648 + }
  649 + }
  650 + return r;
  651 + },
  652 +
  653 + "empty" : function(c){
  654 + var r = [], ri = -1;
  655 + for(var i = 0, ci; ci = c[i]; i++){
  656 + var cns = ci.childNodes, j = 0, cn, empty = true;
  657 + while(cn = cns[j]){
  658 + ++j;
  659 + if(cn.nodeType == 1 || cn.nodeType == 3){
  660 + empty = false;
  661 + break;
  662 + }
  663 + }
  664 + if(empty){
  665 + r[++ri] = ci;
  666 + }
  667 + }
  668 + return r;
  669 + },
  670 +
  671 + "contains" : function(c, v){
  672 + var r = [], ri = -1;
  673 + for(var i = 0, ci; ci = c[i]; i++){
  674 + if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
  675 + r[++ri] = ci;
  676 + }
  677 + }
  678 + return r;
  679 + },
  680 +
  681 + "nodeValue" : function(c, v){
  682 + var r = [], ri = -1;
  683 + for(var i = 0, ci; ci = c[i]; i++){
  684 + if(ci.firstChild && ci.firstChild.nodeValue == v){
  685 + r[++ri] = ci;
  686 + }
  687 + }
  688 + return r;
  689 + },
  690 +
  691 + "checked" : function(c){
  692 + var r = [], ri = -1;
  693 + for(var i = 0, ci; ci = c[i]; i++){
  694 + if(ci.checked == true){
  695 + r[++ri] = ci;
  696 + }
  697 + }
  698 + return r;
  699 + },
  700 +
  701 + "not" : function(c, ss){
  702 + return Ext.DomQuery.filter(c, ss, true);
  703 + },
  704 +
  705 + "any" : function(c, selectors){
  706 + var ss = selectors.split('|');
  707 + var r = [], ri = -1, s;
  708 + for(var i = 0, ci; ci = c[i]; i++){
  709 + for(var j = 0; s = ss[j]; j++){
  710 + if(Ext.DomQuery.is(ci, s)){
  711 + r[++ri] = ci;
  712 + break;
  713 + }
  714 + }
  715 + }
  716 + return r;
  717 + },
  718 +
  719 + "odd" : function(c){
  720 + return this["nth-child"](c, "odd");
  721 + },
  722 +
  723 + "even" : function(c){
  724 + return this["nth-child"](c, "even");
  725 + },
  726 +
  727 + "nth" : function(c, a){
  728 + return c[a-1] || [];
  729 + },
  730 +
  731 + "first" : function(c){
  732 + return c[0] || [];
  733 + },
  734 +
  735 + "last" : function(c){
  736 + return c[c.length-1] || [];
  737 + },
  738 +
  739 + "has" : function(c, ss){
  740 + var s = Ext.DomQuery.select;
  741 + var r = [], ri = -1;
  742 + for(var i = 0, ci; ci = c[i]; i++){
  743 + if(s(ss, ci).length > 0){
  744 + r[++ri] = ci;
  745 + }
  746 + }
  747 + return r;
  748 + },
  749 +
  750 + "next" : function(c, ss){
  751 + var is = Ext.DomQuery.is;
  752 + var r = [], ri = -1;
  753 + for(var i = 0, ci; ci = c[i]; i++){
  754 + var n = next(ci);
  755 + if(n && is(n, ss)){
  756 + r[++ri] = ci;
  757 + }
  758 + }
  759 + return r;
  760 + },
  761 +
  762 + "prev" : function(c, ss){
  763 + var is = Ext.DomQuery.is;
  764 + var r = [], ri = -1;
  765 + for(var i = 0, ci; ci = c[i]; i++){
  766 + var n = prev(ci);
  767 + if(n && is(n, ss)){
  768 + r[++ri] = ci;
  769 + }
  770 + }
  771 + return r;
  772 + }
  773 + }
  774 + };
  775 +}();
  776 +
  777 +Ext.query = Ext.DomQuery.select;
  778 +
  779 +Date.precompileFormats = function(s){
  780 + var formats = s.split('|');
  781 + for(var i = 0, len = formats.length;i < len;i++){
  782 + Date.createNewFormat(formats[i]);
  783 + Date.createParser(formats[i]);
  784 + }
  785 +}
  786 +
  787 +Date.precompileFormats("D n/j/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|YmdHis|F d, Y|l, F d, Y|H:i:s|g:i A|g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|m/d/y|m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|Y-m-d H:i:s|d/m/y|d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|Y-m-d|l|D m/d|D m/d/Y|m/d/Y");
  788 +
  789 +// precompile instead of lazy init
  790 +Ext.ColorPalette.prototype.tpl = new Ext.XTemplate(
  791 + '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
  792 +);
  793 +
  794 +
  795 +
  796 +
  797 +
... ...
thirdpartyjs/extjs/air/src/sql/AirConnection.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 + Ext.sql.AirConnection = Ext.extend(Ext.sql.Connection, {
  10 + // abstract methods
  11 + open : function(db){
  12 + this.conn = new air.SQLConnection();
  13 + var file = air.File.applicationDirectory.resolvePath(db);
  14 + this.conn.open(file);
  15 + this.openState = true;
  16 + this.fireEvent('open', this);
  17 + },
  18 +
  19 + close : function(){
  20 + this.conn.close();
  21 + this.fireEvent('close', this);
  22 + },
  23 +
  24 + createStatement : function(type){
  25 + var stmt = new air.SQLStatement();
  26 + stmt.sqlConnection = this.conn;
  27 + return stmt;
  28 + },
  29 +
  30 + exec : function(sql){
  31 + var stmt = this.createStatement('exec');
  32 + stmt.text = sql;
  33 + stmt.execute();
  34 + },
  35 +
  36 + execBy : function(sql, args){
  37 + var stmt = this.createStatement('exec');
  38 + stmt.text = sql;
  39 + this.addParams(stmt, args);
  40 + stmt.execute();
  41 + },
  42 +
  43 + query : function(sql){
  44 + var stmt = this.createStatement('query');
  45 + stmt.text = sql;
  46 + stmt.execute(this.maxResults);
  47 + return this.readResults(stmt.getResult());
  48 + },
  49 +
  50 + queryBy : function(sql, args){
  51 + var stmt = this.createStatement('query');
  52 + stmt.text = sql;
  53 + this.addParams(stmt, args);
  54 + stmt.execute(this.maxResults);
  55 + return this.readResults(stmt.getResult());
  56 + },
  57 +
  58 + addParams : function(stmt, args){
  59 + if(!args){ return; }
  60 + for(var key in args){
  61 + if(args.hasOwnProperty(key)){
  62 + if(!isNaN(key)){
  63 + var v = args[key];
  64 + if(Ext.isDate(v)){
  65 + v = v.format(Ext.sql.Proxy.DATE_FORMAT);
  66 + }
  67 + stmt.parameters[parseInt(key)] = v;
  68 + }else{
  69 + stmt.parameters[':' + key] = args[key];
  70 + }
  71 + }
  72 + }
  73 + return stmt;
  74 + },
  75 +
  76 + readResults : function(rs){
  77 + var r = [];
  78 + if(rs && rs.data){
  79 + var len = rs.data.length;
  80 + for(var i = 0; i < len; i++) {
  81 + r[r.length] = rs.data[i];
  82 + }
  83 + }
  84 + return r;
  85 + }
  86 +});
0 87 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/sql/Connection.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +// Asbtract base class for Connection classes
  10 +Ext.sql.Connection = function(config){
  11 + Ext.apply(this, config);
  12 + Ext.sql.Connection.superclass.constructor.call(this);
  13 +
  14 + this.addEvents({
  15 + open : true,
  16 + close: true
  17 + });
  18 +};
  19 +
  20 +Ext.extend(Ext.sql.Connection, Ext.util.Observable, {
  21 + maxResults: 10000,
  22 + openState : false,
  23 +
  24 + // abstract methods
  25 + open : function(file){
  26 + },
  27 +
  28 + close : function(){
  29 + },
  30 +
  31 + exec : function(sql){
  32 + },
  33 +
  34 + execBy : function(sql, args){
  35 + },
  36 +
  37 + query : function(sql){
  38 + },
  39 +
  40 + queryBy : function(sql, args){
  41 + },
  42 +
  43 + // protected/inherited method
  44 + isOpen : function(){
  45 + return this.openState;
  46 + },
  47 +
  48 + getTable : function(name, keyName){
  49 + return new Ext.sql.Table(this, name, keyName);
  50 + },
  51 +
  52 + createTable : function(o){
  53 + var tableName = o.name;
  54 + var keyName = o.key;
  55 + var fs = o.fields;
  56 + if(!Ext.isArray(fs)){ // Ext fields collection
  57 + fs = fs.items;
  58 + }
  59 + var buf = [];
  60 + for(var i = 0, len = fs.length; i < len; i++){
  61 + var f = fs[i], s = f.name;
  62 + switch(f.type){
  63 + case "int":
  64 + case "bool":
  65 + case "boolean":
  66 + s += ' INTEGER';
  67 + break;
  68 + case "float":
  69 + s += ' REAL';
  70 + break;
  71 + default:
  72 + s += ' TEXT';
  73 + }
  74 + if(f.allowNull === false || f.name == keyName){
  75 + s += ' NOT NULL';
  76 + }
  77 + if(f.name == keyName){
  78 + s += ' PRIMARY KEY';
  79 + }
  80 + if(f.unique === true){
  81 + s += ' UNIQUE';
  82 + }
  83 +
  84 + buf[buf.length] = s;
  85 + }
  86 + var sql = ['CREATE TABLE IF NOT EXISTS ', tableName, ' (', buf.join(','), ')'].join('');
  87 + this.exec(sql);
  88 + }
  89 +});
  90 +
  91 +
  92 +Ext.sql.Connection.getInstance = function(db, config){
  93 + if(Ext.isAir){ // air
  94 + return new Ext.sql.AirConnection(config);
  95 + } else { // gears
  96 + return new Ext.sql.GearsConnection(config);
  97 + }
  98 +};
0 99 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/sql/Proxy.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +Ext.sql.Proxy = function(conn, table, keyName, store, readonly){
  10 + Ext.sql.Proxy.superclass.constructor.call(this);
  11 + this.conn = conn;
  12 + this.table = this.conn.getTable(table, keyName);
  13 + this.store = store;
  14 +
  15 + if (readonly !== true) {
  16 + this.store.on('add', this.onAdd, this);
  17 + this.store.on('update', this.onUpdate, this);
  18 + this.store.on('remove', this.onRemove, this);
  19 + }
  20 +};
  21 +
  22 +Ext.sql.Proxy.DATE_FORMAT = 'Y-m-d H:i:s';
  23 +
  24 +Ext.extend(Ext.sql.Proxy, Ext.data.DataProxy, {
  25 + load : function(params, reader, callback, scope, arg){
  26 + if(!this.conn.isOpen()){ // assume that the connection is in the process of opening
  27 + this.conn.on('open', function(){
  28 + this.load(params, reader, callback, scope, arg);
  29 + }, this, {single:true});
  30 + return;
  31 + };
  32 + if(this.fireEvent("beforeload", this, params, reader, callback, scope, arg) !== false){
  33 + var clause = params.where || '';
  34 + var args = params.args || [];
  35 + var group = params.groupBy;
  36 + var sort = params.sort;
  37 + var dir = params.dir;
  38 +
  39 + if(group || sort){
  40 + clause += ' ORDER BY ';
  41 + if(group && group != sort){
  42 + clause += group + ' ASC, ';
  43 + }
  44 + clause += sort + ' ' + (dir || 'ASC');
  45 + }
  46 +
  47 + var rs = this.table.selectBy(clause, args);
  48 + this.onLoad({callback:callback, scope:scope, arg:arg, reader: reader}, rs);
  49 + }else{
  50 + callback.call(scope||this, null, arg, false);
  51 + }
  52 + },
  53 +
  54 + onLoad : function(trans, rs, e, stmt){
  55 + if(rs === false){
  56 + this.fireEvent("loadexception", this, null, trans.arg, e);
  57 + trans.callback.call(trans.scope||window, null, trans.arg, false);
  58 + return;
  59 + }
  60 + var result = trans.reader.readRecords(rs);
  61 + this.fireEvent("load", this, rs, trans.arg);
  62 + trans.callback.call(trans.scope||window, result, trans.arg, true);
  63 + },
  64 +
  65 + processData : function(o){
  66 + var fs = this.store.fields;
  67 + var r = {};
  68 + for(var key in o){
  69 + var f = fs.key(key), v = o[key];
  70 + if(f){
  71 + if(f.type == 'date'){
  72 + r[key] = v ? v.format(Ext.sql.Proxy.DATE_FORMAT,10) : '';
  73 + }else if(f.type == 'boolean'){
  74 + r[key] = v ? 1 : 0;
  75 + }else{
  76 + r[key] = v;
  77 + }
  78 + }
  79 + }
  80 + return r;
  81 + },
  82 +
  83 + onUpdate : function(ds, record){
  84 + var changes = record.getChanges();
  85 + var kn = this.table.keyName;
  86 + this.table.updateBy(this.processData(changes), kn + ' = ?', [record.data[kn]]);
  87 + record.commit(true);
  88 + },
  89 +
  90 + onAdd : function(ds, records, index){
  91 + for(var i = 0, len = records.length; i < len; i++){
  92 + this.table.insert(this.processData(records[i].data));
  93 + }
  94 + },
  95 +
  96 + onRemove : function(ds, record, index){
  97 + var kn = this.table.keyName;
  98 + this.table.removeBy(kn + ' = ?', [record.data[kn]]);
  99 + }
  100 +});
0 101 \ No newline at end of file
... ...
thirdpartyjs/extjs/air/src/sql/Table.js 0 → 100644
  1 +/*
  2 + * Ext JS Library 0.20
  3 + * Copyright(c) 2006-2008, Ext JS, LLC.
  4 + * licensing@extjs.com
  5 + *
  6 + * http://extjs.com/license
  7 + */
  8 +
  9 +Ext.sql.Table = function(conn, name, keyName){
  10 + this.conn = conn;
  11 + this.name = name;
  12 + this.keyName = keyName;
  13 +};
  14 +
  15 +Ext.sql.Table.prototype = {
  16 + update : function(o){
  17 + var clause = this.keyName + " = ?";
  18 + return this.updateBy(o, clause, [o[this.keyName]]);
  19 + },
  20 +
  21 + updateBy : function(o, clause, args){
  22 + var sql = "UPDATE " + this.name + " set ";
  23 + var fs = [], a = [];
  24 + for(var key in o){
  25 + if(o.hasOwnProperty(key)){
  26 + fs[fs.length] = key + ' = ?';
  27 + a[a.length] = o[key];
  28 + }
  29 + }
  30 + for(var key in args){
  31 + if(args.hasOwnProperty(key)){
  32 + a[a.length] = args[key];
  33 + }
  34 + }
  35 + sql = [sql, fs.join(','), ' WHERE ', clause].join('');
  36 + return this.conn.execBy(sql, a);
  37 + },
  38 +
  39 + insert : function(o){
  40 + var sql = "INSERT into " + this.name + " ";
  41 + var fs = [], vs = [], a = [];
  42 + for(var key in o){
  43 + if(o.hasOwnProperty(key)){
  44 + fs[fs.length] = key;
  45 + vs[vs.length] = '?';
  46 + a[a.length] = o[key];
  47 + }
  48 + }
  49 + sql = [sql, '(', fs.join(','), ') VALUES (', vs.join(','), ')'].join('');
  50 + return this.conn.execBy(sql, a);
  51 + },
  52 +
  53 + lookup : function(id){
  54 + return this.selectBy('where ' + this.keyName + " = ?", [id])[0] || null;
  55 + },
  56 +
  57 + exists : function(id){
  58 + return !!this.lookup(id);
  59 + },
  60 +
  61 + save : function(o){
  62 + if(this.exists(o[this.keyName])){
  63 + this.update(o);
  64 + }else{
  65 + this.insert(o);
  66 + }
  67 + },
  68 +
  69 + select : function(clause){
  70 + return this.selectBy(clause, null);
  71 + },
  72 +
  73 + selectBy : function(clause, args){
  74 + var sql = "select * from " + this.name;
  75 + if(clause){
  76 + sql += ' ' + clause;
  77 + }
  78 + args = args || {};
  79 + return this.conn.queryBy(sql, args);
  80 + },
  81 +
  82 + remove : function(clause){
  83 + this.deleteBy(clause, null);
  84 + },
  85 +
  86 + removeBy : function(clause, args){
  87 + var sql = "delete from " + this.name;
  88 + if(clause){
  89 + sql += ' where ' + clause;
  90 + }
  91 + args = args || {};
  92 + this.conn.execBy(sql, args);
  93 + }
  94 +};
0 95 \ No newline at end of file
... ...