diff --git a/Commands/Build All.tmCommand b/Commands/Build All.tmCommand
index 269afa5..a30d86d 100644
--- a/Commands/Build All.tmCommand
+++ b/Commands/Build All.tmCommand
@@ -3,35 +3,53 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
- echo "<h1>Building Project</h1>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Build All</h2></div>"
cd "$TM_PROJECT_DIRECTORY"
-echo "<div style='background-color:#ccc'><pre>;"
. build.properties
-if[ ! -f "new.properties"]
+if [ ! -f "new.properties" ]
then
-if[ ${usekeychainaccess} == 'enabled' ]
+if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
fi
fi
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
ant build-all
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
if [ ${usekeychainaccess} == 'enabled' ]
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
then
- cp build.properties build.back
- sed "s/${shellpassword}/${password}/" build.properties > new.properties
- cp new.properties build.properties
rm new.properties
- rm build.back
fi
-echo "</pre></div>"
-echo "<hr>Done"
+fi
+
input
none
keyEquivalent
diff --git a/Commands/Build File.tmCommand b/Commands/Build File.tmCommand
index f947b22..26f7b52 100644
--- a/Commands/Build File.tmCommand
+++ b/Commands/Build File.tmCommand
@@ -5,7 +5,8 @@
beforeRunningCommand
saveActiveFile
command
- echo "<h1>Building ${TM_FILENAME%.*}</h1>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Build File: ${TM_FILENAME%.*}</h2></div>"
if [ ${TM_FILENAME##*.} == 'xml' ]
then
@@ -47,13 +48,13 @@ fi
fi
cd "$TM_PROJECT_DIRECTORY"
-
. build.properties
+
if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
@@ -62,7 +63,6 @@ fi
#echo ${TM_FILENAME%.*}
-echo "<hr><h4>Cleanup</h4>"
rm -R tmp
mkdir tmp
cd tmp
@@ -99,24 +99,37 @@ cp triggers/${TM_FILENAME%.*}.trigger-meta.xml tmp/triggers/
fi
cp package.xml tmp/
-echo "<h1>Building</h1>"
-echo "<div style='background-color:#ccc'>"
-echo "<pre>"
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
ant build
-echo "</pre></div>"
-echo "<hr>Done"
-
-
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
date '+%m-%d-%y %H:%M:%S' > .lastbuild
#cleanup
+
if [ ${usekeychainaccess} == 'enabled' ]
-then
-cp build.properties build.back
-sed "s/${shellpassword}/${password}/" build.properties > new.properties
-cp new.properties build.properties
-rm new.properties
-rm build.back
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
+ then
+ rm new.properties
+fi
fi
input
none
diff --git a/Commands/Build Latest.tmCommand b/Commands/Build Latest.tmCommand
index b7bb2fe..41376cb 100644
--- a/Commands/Build Latest.tmCommand
+++ b/Commands/Build Latest.tmCommand
@@ -3,15 +3,18 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
cd "$TM_PROJECT_DIRECTORY"
. build.properties
+echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Building Latest</h2></div>"
+
if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
@@ -27,8 +30,8 @@ mkdir pages
mkdir triggers
cd ..
-echo "<h1>Building Latest</h1>"
-echo "<pre>"
+echo "<div style='margin: 2px; border: 1px solid #999; padding: 2px; background-color: white'>Found: "
+
cd "${TM_PROJECT_DIRECTORY}"
cd classes
@@ -36,7 +39,7 @@ for file in $(find . -name "*.cls" -mtime -1)
do
filename=${file%.*}
i=${filename:2}
- echo $i
+ echo "${i} "
if [ ! -f "${i}.cls-meta.xml" ]
then
echo '<?xml version="1.0" encoding="UTF-8"?><ApexClass xmlns="http://soap.sforce.com/2006/04/metadata"><apiVersion>22.0</apiVersion><status>Active</status></ApexClass>' > "classes/${i}.cls-meta.xml"
@@ -49,7 +52,7 @@ for file in $(find . -name "*.page" -mtime -1)
do
filename=${file%.*}
i=${filename:2}
- echo $i
+ echo "${i} "
if [ ! -f "${i}.page-meta.xml" ]
then
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ApexPage xmlns=\"http://soap.sforce.com/2006/04/metadata\"><apiVersion>22.0</apiVersion><label>${i}</label></ApexPage>" > "pages/${i}.page-meta.xml"
@@ -62,7 +65,7 @@ for file in $(find . -name "*.component" -mtime -1)
do
filename=${file%.*}
i=${filename:2}
- echo $i
+ echo "${i} "
if [ ! -f "${i}.component-meta.xml" ]
then
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ApexComponent xmlns=\"http://soap.sforce.com/2006/04/metadata\"><apiVersion>22.0</apiVersion><label>${i}</label></ApexComponent>" > "components/${i}.component-meta.xml"
@@ -75,7 +78,7 @@ for file in $(find . -name "*.trigger" -mtime -1)
do
filename=${file%.*}
i=${filename:2}
- echo $i
+ echo "${i} "
if [ ! -f "${i}.cls-meta.xml" ]
then
echo '<?xml version="1.0" encoding="UTF-8"?><ApexTrigger xmlns="http://soap.sforce.com/2006/04/metadata"><apiVersion>22.0</apiVersion><status>Active</status></ApexTrigger>' > "triggers/${i}.triggers-meta.xml"
@@ -83,21 +86,38 @@ do
cp ${i}* ../tmp/triggers
done
-echo "</pre><div style='background-color:#ccc'>"
-echo "<pre>"
+echo "</div>"
+
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
cd ..
cp package.xml tmp/
ant build
echo "</pre>"
-echo "</div>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
if [ ${usekeychainaccess} == 'enabled' ]
-then
-cp build.properties build.back
-sed "s/${shellpassword}/${password}/" build.properties > new.properties
-cp new.properties build.properties
-rm new.properties
-rm build.back
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
+ then
+ rm new.properties
+fi
fi
diff --git a/Commands/Build Sequential.tmCommand b/Commands/Build Sequential.tmCommand
index c90a9fb..f451d6a 100644
--- a/Commands/Build Sequential.tmCommand
+++ b/Commands/Build Sequential.tmCommand
@@ -3,7 +3,7 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
cd "$TM_PROJECT_DIRECTORY"
. build.properties
@@ -11,19 +11,19 @@ if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
fi
fi
-echo "<h1>Building Sequential</h1>"
+echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Building Sequential</h2></div>"
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
-echo "<div style='background-color:#ccc'>"
-echo "<pre>"
-
FILES=*.manifest
for f in $FILES
do
@@ -87,16 +87,31 @@ ant build
done
if [ ${usekeychainaccess} == 'enabled' ]
-then
-cp build.properties build.back
-sed "s/${shellpassword}/${password}/" build.properties > new.properties
-cp new.properties build.properties
-rm new.properties
-rm build.back
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
+ then
+ rm new.properties
+fi
fi
echo "</pre>"
-echo "</div>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
diff --git a/Commands/Get Latest.tmCommand b/Commands/Get Latest.tmCommand
index ed14c0a..324078e 100644
--- a/Commands/Get Latest.tmCommand
+++ b/Commands/Get Latest.tmCommand
@@ -5,8 +5,11 @@
beforeRunningCommand
nop
command
- echo "<h1>Getting Latest From Server</h1>"
-echo "<div style='border:1px solid #ccc; padding: 5px;'><pre>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Getting Latest</h2></div>"
+
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
cd "$TM_PROJECT_DIRECTORY"
. build.properties
@@ -14,7 +17,7 @@ if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
@@ -24,16 +27,31 @@ fi
ant getLatest
if [ ${usekeychainaccess} == 'enabled' ]
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
then
- cp build.properties build.back
- sed "s/${shellpassword}/${password}/" build.properties > new.properties
- cp new.properties build.properties
rm new.properties
- rm build.back
fi
+fi
+
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
-echo "</pre></div>"
-echo "<hr>Done. Updates may not be visible in the TextMate project right away."
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button> TextMate's project folder may not immeadiately see the changes."
input
none
keyEquivalent
diff --git a/Commands/Get Object.tmCommand b/Commands/Get Object.tmCommand
index 69a06ad..2401bce 100644
--- a/Commands/Get Object.tmCommand
+++ b/Commands/Get Object.tmCommand
@@ -5,7 +5,11 @@
beforeRunningCommand
nop
command
- #get username and password from project
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Describing ${TM_SELECTED_TEXT}</h2></div>"
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
+
cd "$TM_PROJECT_DIRECTORY"
. build.properties
@@ -14,8 +18,6 @@ if [ ${usekeychainaccess} == 'enabled' ]
password=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
fi
-
-#go to the HTML widgets folder
cd ~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools
dir=$(pwd)
@@ -61,7 +63,7 @@ fi
sleep 1
#move to HTML widget
-echo "<script>window.location = 'file://${dir}/objectinfo.html'</script>"
+echo "</pre></div><script>window.location = 'file://${dir}/objectinfo.html'</script>"
#cleanup
sleep 1
diff --git a/Commands/Production Deploy.tmCommand b/Commands/Production Deploy.tmCommand
index 58ce3db..a2cd0d7 100644
--- a/Commands/Production Deploy.tmCommand
+++ b/Commands/Production Deploy.tmCommand
@@ -3,20 +3,23 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
- echo "<h1>Getting Latest From Server</h1>"
-echo "<div style='border:1px solid #ccc; padding: 5px;'><pre>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Production Deploy</h2></div>"
+
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
cd "$TM_PROJECT_DIRECTORY"
. build.properties
-if[ ! -f "new.properties"]
+if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${prodpassword})
sed "s/${prodpassword}/${shellpassword}/" build.properties > new.properties
- cp new.properties build.back
cp new.properties build.properties
fi
fi
@@ -24,16 +27,31 @@ fi
ant deployToProdTest
if [ ${usekeychainaccess} == 'enabled' ]
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
then
- sed "s/${shellpassword}/${prodpassword}/" build.properties > new.properties
- cp new.properties build.back
- cp new.properties build.properties
rm new.properties
- rm build.back
fi
+fi
+
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
-echo "</pre></div>"
-echo "<hr>Done."
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
input
none
name
diff --git a/Commands/Production Test.tmCommand b/Commands/Production Test.tmCommand
index 91cdbf8..e8361d5 100644
--- a/Commands/Production Test.tmCommand
+++ b/Commands/Production Test.tmCommand
@@ -3,20 +3,23 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
- echo "<h1>Getting Latest From Server</h1>"
-echo "<div style='border:1px solid #ccc; padding: 5px;'><pre>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Production Test</h2></div>"
+
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
cd "$TM_PROJECT_DIRECTORY"
. build.properties
-if[ ! -f "new.properties"]
+if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
+ cp build.properties build.bak
shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${prodpassword})
sed "s/${prodpassword}/${shellpassword}/" build.properties > new.properties
- cp new.properties build.back
cp new.properties build.properties
fi
fi
@@ -24,15 +27,31 @@ fi
ant deployToProdTest
if [ ${usekeychainaccess} == 'enabled' ]
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
then
- sed "s/${shellpassword}/${prodpassword}/" build.properties > new.properties
- cp new.properties build.back
- cp new.properties build.properties
rm new.properties
- rm build.back
fi
-echo "</pre></div>"
-echo "<hr>Done."
+fi
+
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
input
none
name
diff --git a/Commands/Run Current Tests.tmCommand b/Commands/Run Current Tests.tmCommand
index 18949d5..3e88c60 100644
--- a/Commands/Run Current Tests.tmCommand
+++ b/Commands/Run Current Tests.tmCommand
@@ -3,42 +3,62 @@
beforeRunningCommand
- nop
+ saveActiveFile
command
cd "$TM_PROJECT_DIRECTORY"
-echo "<h1>Running Tests for ${TM_FILENAME%.*}</h1>"
+echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Running Tests: ${TM_FILENAME%.*}</h2></div>"
+
cp build.xml backup-build.xml
sed "s/#TESTCLASS#/${TM_FILENAME%.*}/" build.xml > result.xml
cp result.xml build.xml
-echo "<div style='border:1px solid #ccc; padding: 5px; font-size: 9px'><pre>"
+
. build.properties
-if [ ! -f "new.properties"]
+if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
then
- cp build.properties build.back
- shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools//keychain.sh ${password})
+ cp build.properties build.bak
+ shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
sed "s/${password}/${shellpassword}/" build.properties > new.properties
cp new.properties build.properties
fi
fi
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
+
ant currenttest
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+</script>"
+
if [ ${usekeychainaccess} == 'enabled' ]
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
then
- cp build.properties build.back
- sed "s/${shellpassword}/${password}/" build.properties > new.properties
- cp new.properties build.properties
rm new.properties
- rm build.back
fi
-echo "</pre></div>"
+fi
+
sed "s/${TM_FILENAME%.*}/#TESTCLASS#/" build.xml > result.xml
cp result.xml build.xml
-echo "<hr>Done"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
+
input
none
keyEquivalent
diff --git a/Commands/Run SOQL.tmCommand b/Commands/Run SOQL.tmCommand
index 523bb9a..6cb5491 100644
--- a/Commands/Run SOQL.tmCommand
+++ b/Commands/Run SOQL.tmCommand
@@ -6,6 +6,12 @@
nop
command
#get username and password from project
+echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Running SOQL</h2></div>"
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
+
+
cd "$TM_PROJECT_DIRECTORY"
. build.properties
if [ ${usekeychainaccess} == 'enabled' ]
@@ -61,7 +67,7 @@ fi
sleep 1
#move to HTML widget
-echo "<script>window.location = 'file://${dir}/soql.html'</script>"
+echo "</pre></div><script>window.location = 'file://${dir}/soql.html'</script>"
#cleanup
sleep 1
diff --git a/Commands/Run Tests.tmCommand b/Commands/Run Tests.tmCommand
index fab4143..44aa75a 100644
--- a/Commands/Run Tests.tmCommand
+++ b/Commands/Run Tests.tmCommand
@@ -3,34 +3,58 @@
beforeRunningCommand
- nop
+ saveModifiedFiles
command
- echo "<h1>Running All Tests</h1>"
-echo "<div style='border:1px solid #ccc; padding: 5px; font-size: 9px'><pre>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Running All Tests</h2></div>"
+
+echo "<div style='background-color: white; border:1px solid #999; font-family: Tahoma MS, Lucida, Verdana; padding: 5px; color: #666; margin: 2px;'>"
+echo "<pre id='output_pre'>"
+
cd "$TM_PROJECT_DIRECTORY"
. build.properties
if [ ! -f "new.properties" ]
then
if [ ${usekeychainaccess} == 'enabled' ]
-then
-cp build.properties build.back
-shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
-sed "s/${password}/${shellpassword}/" build.properties > new.properties
-cp new.properties build.properties
+ then
+ cp build.properties build.bak
+ shellpassword=$(~/Library/Application\ Support/TextMate/Bundles/ForceDotBundle.tmbundle/Tools/keychain.sh ${password})
+ sed "s/${password}/${shellpassword}/" build.properties > new.properties
+ cp new.properties build.properties
fi
fi
+
+
ant test
+
if [ ${usekeychainaccess} == 'enabled' ]
-then
-cp build.properties build.back
-sed "s/${shellpassword}/${password}/" build.properties > new.properties
-cp new.properties build.properties
-rm new.properties
-rm build.back
+ then
+ cp build.bak build.properties
+if [ -f "new.properties" ]
+ then
+ rm new.properties
fi
-echo "</pre></div>"
-echo "<hr>Done"
+fi
+
+echo "</pre>"
+echo "<div id='output' style='color:black'></div></div>"
+
+echo "<script>"
+echo "output = document.getElementById('output');
+output.innerHTML = document.getElementById('output_pre').innerHTML;
+document.getElementById('output_pre').style.display='none';
+output.innerHTML = output.innerHTML.replace(/\n/gi,'<br />');
+output.innerHTML = output.innerHTML.replace(/BUILD SUCCESSFUL/gi,'<span style=font-weight:bold;color:#526F35>BUILD SUCCESSFUL</span>');
+output.innerHTML = output.innerHTML.replace(/BUILD FAILED/gi,' <span style=font-weight:bold;color:#CD2626>BUILD FAILED</span>');
+output.innerHTML = output.innerHTML.replace(/ERROR:/gi,'<HR />ERROR:');
+
+output.innerHTML = output.innerHTML.replace(/\(/gi,'<BR /><span style=background-color:black;color:white> (');
+output.innerHTML = output.innerHTML.replace(/\)\:/gi,') </span> Error Message: <BR />');
+</script>"
+
+echo "<hr><button onclick='self.close();' style='border: 1px solid black; background-color:#ccc'>Done</button>"
+
input
none
keyEquivalent
diff --git a/Commands/Start New Project.tmCommand b/Commands/Start New Project.tmCommand
index d08ab1d..bec1cf4 100644
--- a/Commands/Start New Project.tmCommand
+++ b/Commands/Start New Project.tmCommand
@@ -5,7 +5,8 @@
beforeRunningCommand
nop
command
- echo "<h1>Creating new project</h1>"
+ echo "<style>body { margin: 0px; padding: 0px; background-color:#efefef }</style>"
+echo "<div style='width:100%;background-image: -webkit-linear-gradient(left , rgb(76,142,255) 12%, rgb(105,199,250) 56%, rgb(255,255,255) 78%);'><h2>Start New Project</h2></div>"
cd "$TM_PROJECT_DIRECTORY"
mkdir classes
@@ -14,7 +15,7 @@ mkdir pages
mkdir triggers
mkdir tmp
-echo "<h3>Directories built</h3>"
+echo "<h4>Directories built</h4>"
cd tmp
mkdir classes
@@ -22,7 +23,7 @@ mkdir components
mkdir pages
mkdir triggers
-echo "<h3>Temp directory built</h3>"
+echo "<h4>Temp directory built</h4>"
cd ..
@@ -105,9 +106,9 @@ echo '<project default="build-all" basedir="." xmlns:sf="antlib:com.salesforc
</project>' > 'build.xml'
-echo "<h3>Build files set</h3>"
+echo "<h4>Build files set</h4>"
echo "<h3>Done. May take awhile for TextMate to refresh parent directory. You can refresh by viewing the folder in Finder.</h3>"
-
+echo "</pre></div></div>"
input
none
diff --git a/README.md b/README.md
index 120adec..ac59513 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,20 @@
ForceDotBundle
This project is the end result of cleaning up some shell scripts I had been tinkering with
-for using with the Force.com Migration Tool and the OS X editor TextMate. They could be
-potentially be used as standalone shell scripts, but I'll gather those in a different project.
+for using with the Force.com Migration Tool and the OS X editor TextMate. It has templates for Apex and Visualforce and
+offers a few options for building and testing code, easy HTML links into things like the Apex System Log (to execute anonymous code), along with access to a couple of REST API features to run SOQL and get object definitions.
I've got videos on using the bundle on YouTube: http://www.youtube.com/joshuabirk
-Lastest Updates
-November 10th, 2011 :
-
- Updated Project Name handling to support spaces in the commands
- Changed bundle name in info.plist to "ForceDotBundle" for clarity
-
-October 15, 2011 :
-
- Added "Build Sequential" and "Build Latest" commands.
- Updated REST/HTML widgets. More stability, support for OAuth login.
- Data.json being cleared out again
- Adding "Delete Except" command. See description below.
-
-
-October 14, 2011 :
-
- Removed clearing out the data.json file from the HTML interfaces. This has the effect that it might leave results in the tools directory until I
- can figure out a workaround, but it does seem to make the HTML interfaces more stable.
- Added "Build Sequential" command. See description below.
- Added "Build Latest" command. See description below.
- Fixed some bugs with the Keychain handling
-
+This is unofficial software and unsupported as well . I've been able to keep up with updates and bug fixes so far, but make no promises.
Requirements
You will need to download and setup the Force.com Migration Tool, which is fairly straightforward
in OS X. Just go to "Setup -> Develop -> Tools" in your org and download the zip and follow the
instructions. You might need to run "ant -diagnostics" to find your ant lib directory.
+Installation from Downloads Page
+If you go to the Downloads page, there is a zip file. Downloading and unarchiving that should result in a folder with this file, an "install.command" file and a folder named "ForceDotBundle". If you have the CLI command for TextMate installed, you should just be able to double click "install.command". Otherwise, after running "install.command", you will need to double click the now renamed parent directory.
+
Installation from Finder
Fork/download/clone the project. Make sure the resulting folder is named "ForceDotBundle" and rename it if needed. Go into that folder and double click "move_tools.command" (icon looks like a document with a black box). If you have the CLI command
for TextMate installed, you should just see the bundle loaded up. Otherwise double click the now renamed parent directory.
@@ -56,19 +38,38 @@ If the move_tools.sh file won't run for some reason, you can replicate the steps
-Enabling OAuth login for REST
-Not sure if this should be the only source of login or not - but if you want to try using the OAuth endpoints to login instead of SOAP, add "consumerkey" and "privatekey" to build.properties with your Consumer Public and Consumer Secret from a Remote Settings entry.
+
+
Quick Start
+
+ Once you've installed the bundle, create a new project.
+ Create a new directory in Finder, name it something reasonable for your project.
+ Drag the folder to the project pane in TextMate.
+ Create some kind of scratch file.
+ Open the empty file. Now use "Create New Project" from the ForceDotBundle bundle. A popup will give the overview of the changes. These changes may not appear right away in the project pane . They will be in Finder.
+ Update "build.properties" with your username, password and if needed, the login URL (for sandboxes).
+ If you want to pull down existing files, run "Get Latest". These changes may not appear right away in the project pane . They will be in Finder.
+ Or if you just want to be additive, right click on say, classes, and use one of the templates.
+ Enjoy.
+
+
-Known Bugs
-The REST/HTML widgets should not be freezing up now. Please DM me if they are still.
+Enabling Keychain Support
+ForceDotBundle will swap out the password in build.properties with secured text in OS X's keychain if you have set:
+
+usekeychainaccess=enabled
+
-
- consumerkey/private vars have no keychain hook. Easy to add if there is enough demand.
-
+in build.properties. The next step is swap out your password with "password:accountname", highlight that text and then run "Add Password" under
+the Keychain menu in the bundle. There will be some keychain prompts and then your password will be replaced with just "accountname".
+
+From there on out, the bash will swap out your password in build.properties when it runs a build, and then swap it back when it is done. I highly recommend
+this for everyone concerned with having passwords in a text file on your laptop. Which should be everyone. The only downside is with multiple builds that execute
+against build.properties at the same time may wipe the file out. Working on it.
+
+
+Enabling OAuth login for REST
+Not sure if this should be the only source of login or not - but if you want to try using the OAuth endpoints to login instead of SOAP, add "consumerkey" and "privatekey" to build.properties with your Consumer Public and Consumer Secret from a Remote Settings entry.
-
-Note: This is unofficial, unsupported software.
-
Features
@@ -149,20 +150,7 @@ The bundle provides the following:
-
-
Quick Start
-
- Once you've installed the bundle, create a new project.
- Create a new directory in Finder, name it something reasonable for your project.
- Drag the folder to the project pane in TextMate.
- Create some kind of scratch file.
- Open the empty file. Now use "Create New Project" from the ForceDotCom bundle. A popup will give the overview of the changes. These changes may not appear right away in the project pane . They will be in Finder.
- Update "build.properties" with your username, password and if needed, the login URL (for sandboxes).
- If you want to pull down existing files, run "Get Latest". These changes may not appear right away in the project pane . They will be in Finder.
- Or if you just want to be additive, right click on say, classes, and use one of the templates.
- Enjoy.
-
-
+
Using Keychain
For better production, you can now store your passwords in OS X Keychain and refer only to the Keychain account name in build.properties.
diff --git a/Tools/Tools/keychain.sh b/Tools/Tools/keychain.sh
new file mode 100755
index 0000000..1e75414
--- /dev/null
+++ b/Tools/Tools/keychain.sh
@@ -0,0 +1,2 @@
+security 2>&1 >/dev/null find-generic-password -ga $1 \
+|ruby -e 'print $1 if STDIN.gets =~ /^password: "(.*)"$/'
\ No newline at end of file
diff --git a/Tools/Tools/loginasme.php b/Tools/Tools/loginasme.php
new file mode 100755
index 0000000..1aeb5ae
--- /dev/null
+++ b/Tools/Tools/loginasme.php
@@ -0,0 +1,16 @@
+createConnection('soapclient/partner.wsdl.xml');
+$loginResult = $client->login($params[0],$params[1]);
+print $client->getSessionId();
+
+?>
\ No newline at end of file
diff --git a/Tools/Tools/objectinfo.html b/Tools/Tools/objectinfo.html
new file mode 100755
index 0000000..d3977e0
--- /dev/null
+++ b/Tools/Tools/objectinfo.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+ Object Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/.gitignore b/Tools/Tools/slickgrid/.gitignore
new file mode 100755
index 0000000..8b3887f
--- /dev/null
+++ b/Tools/Tools/slickgrid/.gitignore
@@ -0,0 +1,2 @@
+.gitk*
+.idea/*
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/MIT-LICENSE.txt b/Tools/Tools/slickgrid/MIT-LICENSE.txt
new file mode 100755
index 0000000..60f6542
--- /dev/null
+++ b/Tools/Tools/slickgrid/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2010 Michael Leibman, http://github.com/mleibman/slickgrid
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/build/minimize.bat b/Tools/Tools/slickgrid/build/minimize.bat
new file mode 100755
index 0000000..f71fcab
--- /dev/null
+++ b/Tools/Tools/slickgrid/build/minimize.bat
@@ -0,0 +1,23 @@
+@echo off
+
+echo Initializing
+setlocal
+pushd
+cd %~dp0
+set PATH=%windir%/Microsoft.NET/Framework/v3.5;%PATH%
+
+echo Compiling
+csc /nologo /out:minimize.exe /target:exe /debug- minimize.cs
+
+echo Minimizing
+echo ~~~~~~~~~~
+call minimize.exe ../dist/slick.grid-{0}.min.js "\"slickGridVersion\"\s*:\s*\"(.*?)\"" ../slick.grid.js
+echo ~~~~~~~~~~
+call minimize.exe ../dist/slick.grid-{0}.merged.min.js "\"slickGridVersion\"\s*:\s*\"(.*?)\"" ../lib/jquery.event.drag-2.0.min.js ../slick.grid.js
+echo ~~~~~~~~~~
+
+echo Cleaning up
+del minimize.exe
+popd
+endlocal
+pause
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/build/minimize.cs b/Tools/Tools/slickgrid/build/minimize.cs
new file mode 100755
index 0000000..bc147a4
--- /dev/null
+++ b/Tools/Tools/slickgrid/build/minimize.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text.RegularExpressions;
+using System.Web;
+using System.Web.Script.Serialization;
+
+
+///
+/// Simple JavaScript minimizer (using Google's Closure Compiler) implementation.
+///
+public static class Program
+{
+
+ //-------------------------------------------------
+ ///
+ /// Main entry point for the JavaScript minimizer.
+ ///
+ public static int Main(string[] args)
+ {
+ try
+ {
+ if (args.Length < 3)
+ {
+ throw new ArgumentException("Expected at least 3 arguments: outputFileName, versionRegex, file1, ...");
+ }
+
+ Minimize(args[0], args[1], args.Skip(2));
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("Failed");
+ Console.Write(ex.GetType().FullName);
+ Console.Write(": ");
+ Console.WriteLine(ex.Message);
+ Console.WriteLine(ex.StackTrace);
+ return 1;
+ }
+ finally
+ {
+ Console.ResetColor();
+ }
+ }
+
+
+ //-------------------------------------------------
+ ///
+ /// Helper extension method to query dictionary for
+ /// the specified key and cast the value (if found)
+ /// to the specified type in a single statement.
+ ///
+ private static T GetValueOrDefault(this IDictionary dict, string key)
+ {
+ object value;
+ if (dict.TryGetValue(key, out value))
+ {
+ if (value == null || value is T)
+ {
+ return (T)value;
+ }
+ else
+ {
+ throw new InvalidCastException(string.Concat("Requested type \"", typeof(T).FullName, "\" is not compatible with actual type \"", value.GetType().FullName, "\""));
+ }
+ }
+ else
+ {
+ return default(T);
+ }
+ }
+
+
+ //-------------------------------------------------
+ ///
+ /// Create a user-readable list of messages from a list
+ /// of JSON error/warning objects.
+ ///
+ private static void GatherIssues(ArrayList issues, string prefix, ICollection messages)
+ {
+ if (issues != null)
+ {
+ foreach (var issue in issues)
+ {
+ var issueDict = (Dictionary)issue;
+ messages.Add(string.Concat(
+ prefix, " ", issueDict.GetValueOrDefault("type"),
+ " (", issueDict.GetValueOrDefault("lineno"), ", ", issueDict.GetValueOrDefault("charno"), "): ",
+ issueDict.GetValueOrDefault("error") ?? issueDict.GetValueOrDefault("warning")));
+ }
+ }
+ }
+
+
+ //-------------------------------------------------
+ ///
+ /// Gather all the specified input files and call Google's
+ /// Closure Compiler REST API with the combined script.
+ ///
+ private static void Minimize(string outputFileName, string versionRegex, IEnumerable files)
+ {
+ // gather all input files into one ".orig" file
+ Console.ForegroundColor = ConsoleColor.DarkGray;
+ Console.Write("Gathering input files: ");
+ var source = files.Select(f => File.ReadAllText(f)).Aggregate((s1,s2) => string.Concat(s1, Environment.NewLine, s2));
+ source = source.Replace("\"use strict\";", string.Empty);
+ var versionMatch = Regex.Match(source, versionRegex, RegexOptions.CultureInvariant | RegexOptions.Multiline);
+ if (versionMatch.Success && versionMatch.Groups.Count > 1)
+ {
+ outputFileName = string.Format(CultureInfo.InvariantCulture, outputFileName, versionMatch.Groups[1].Value);
+ }
+ var outputFileNameDir = Path.GetDirectoryName(outputFileName);
+ if (!string.IsNullOrEmpty(outputFileNameDir) && !Directory.Exists(outputFileNameDir)) // ensure target dir exists
+ {
+ Directory.CreateDirectory(outputFileNameDir);
+ }
+ var outputFileNameOrig = Path.ChangeExtension(outputFileName, string.Concat(".orig", Path.GetExtension(outputFileName)));
+ if (File.Exists(outputFileNameOrig)) { File.SetAttributes(outputFileNameOrig, FileAttributes.Normal); } // ensure we can overwrite files marked as read-only
+ File.WriteAllText(outputFileNameOrig, source);
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.WriteLine("OK");
+
+ // run closure compiler
+ Console.ForegroundColor = ConsoleColor.DarkGray;
+ Console.Write("Calling Closure Compiler: ");
+ var webClient = new WebClient();
+ webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
+ var request = string.Concat("compilation_level=SIMPLE_OPTIMIZATIONS&output_format=json&output_info=errors&output_info=warnings&output_info=compiled_code&js_code=", HttpUtility.UrlEncode(source));
+ var response = new JavaScriptSerializer().Deserialize>(webClient.UploadString("http://closure-compiler.appspot.com/compile", request));
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.WriteLine("OK");
+
+ // check for compiler errors
+ Console.ForegroundColor = ConsoleColor.DarkGray;
+ Console.Write("Processing Compiler Response: ");
+ var messages = new List();
+ GatherIssues(response.GetValueOrDefault("errors"), "Error", messages);
+ if (messages.Count > 0)
+ {
+ throw new InvalidOperationException(string.Concat("Compiler reported errors", Environment.NewLine, string.Join(Environment.NewLine, messages.ToArray())));
+ }
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.Write("OK");
+
+ // check for compiler warnings
+ GatherIssues(response.GetValueOrDefault("warnings"), "Warning", messages);
+ if (messages.Count > 0)
+ {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Console.WriteLine(string.Concat(" (", messages.Count, " warning", messages.Count == 1 ? ")" : "s)"));
+ Console.WriteLine(string.Join(Environment.NewLine, messages.ToArray()));
+ }
+ else
+ {
+ Console.WriteLine(" (no errors or warnings)");
+ }
+
+ // write output file
+ Console.ForegroundColor = ConsoleColor.DarkGray;
+ Console.Write("Writing Minimized File: ");
+ if (File.Exists(outputFileName)) { File.SetAttributes(outputFileName, FileAttributes.Normal); } // ensure we can overwrite files marked as read-only
+ File.WriteAllText(outputFileName, response.GetValueOrDefault("compiledCode"));
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.WriteLine("OK");
+ }
+
+}
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-anim_basic_16x16.gif b/Tools/Tools/slickgrid/css/smoothness/images/ui-anim_basic_16x16.gif
new file mode 100755
index 0000000..085ccae
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-anim_basic_16x16.gif differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100755
index 0000000..5b5dab2
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100755
index 0000000..ac8b229
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100755
index 0000000..ad3d634
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755
index 0000000..42ccba2
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100755
index 0000000..5a46b47
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100755
index 0000000..86c2baa
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100755
index 0000000..4443fdc
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100755
index 0000000..7c9fa6c
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_222222_256x240.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_222222_256x240.png
new file mode 100755
index 0000000..b273ff1
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_222222_256x240.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_2e83ff_256x240.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_2e83ff_256x240.png
new file mode 100755
index 0000000..09d1cdc
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_2e83ff_256x240.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_454545_256x240.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_454545_256x240.png
new file mode 100755
index 0000000..59bd45b
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_454545_256x240.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_888888_256x240.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_888888_256x240.png
new file mode 100755
index 0000000..6d02426
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_888888_256x240.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_cd0a0a_256x240.png
new file mode 100755
index 0000000..2ab019b
Binary files /dev/null and b/Tools/Tools/slickgrid/css/smoothness/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/Tools/Tools/slickgrid/css/smoothness/jquery-ui-1.8.2.custom.css b/Tools/Tools/slickgrid/css/smoothness/jquery-ui-1.8.2.custom.css
new file mode 100755
index 0000000..3c4a611
--- /dev/null
+++ b/Tools/Tools/slickgrid/css/smoothness/jquery-ui-1.8.2.custom.css
@@ -0,0 +1,489 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Selectable
+----------------------------------*/
+.ui-selectable-helper { border:1px dotted black }
+/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+/* IE7-/Win - Fix extra vertical space in lists */
+.ui-accordion a { zoom: 1; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
+----------------------------------*/
+.ui-autocomplete { position: absolute; cursor: default; }
+.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/* Menu
+----------------------------------*/
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/* Button
+----------------------------------*/
+
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+
+
+
+
+
+/* Dialog
+----------------------------------*/
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/examples/example1-simple.html b/Tools/Tools/slickgrid/examples/example1-simple.html
new file mode 100755
index 0000000..42b30bc
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example1-simple.html
@@ -0,0 +1,67 @@
+
+
+
+
+ SlickGrid example 1: Basic grid
+
+
+
+
+
+
+
+
+
+
+
+ Demonstrates:
+
+ basic grid with minimal configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example10-async-post-render.html b/Tools/Tools/slickgrid/examples/example10-async-post-render.html
new file mode 100755
index 0000000..7f3b8cd
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example10-async-post-render.html
@@ -0,0 +1,125 @@
+
+
+
+
+ SlickGrid example 10: Async post render
+
+
+
+
+
+
+
+
+
+
Demonstrates:
+
+ With SlickGrid, you can still have rich, complex cells rendered against the actual DOM nodes while still preserving the speed and responsiveness.
+ This is achieved through async background post-rendering.
+ SlickGrid exposes a asyncPostRender property on a column which you can use to set your own function that will manipulate the cell DOM node directly.
+ The event is fired one by one for all visible rows in the viewport on a timer so it doesn't impact the UI responsiveness.
+ You should still make sure that post-processing one row doesn't take too long though.
+ SlickGrid will figure out what and when needs to be updated for you.
+
+
+ The example below is a list of 500 rows with a title and 5 integer cells followed by graphical representation of these integers.
+ The graph is drawn using a CANVAS element in the background.
+ The grid is editable, so you can edit the numbers and see the changes reflected (almost) immediately in the graph.
+ The graph cell behaves just like an ordinary cell and can be resized/reordered.
+ The graphs themselves are created using the excellent jQuery Sparklines library.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example11-autoheight.html b/Tools/Tools/slickgrid/examples/example11-autoheight.html
new file mode 100755
index 0000000..522e141
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example11-autoheight.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+ SlickGrid example 11: No vertical scrolling (autoHeight)
+
+
+
+
+
+
+
+
Demonstrates:
+
+ autoHeight:true grid option
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/examples/example12-fillbrowser.html b/Tools/Tools/slickgrid/examples/example12-fillbrowser.html
new file mode 100755
index 0000000..8cc7aec
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example12-fillbrowser.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+ SlickGrid example 12: Fill browser
+
+
+
+
+
+
+
+
Demonstrates:
+
+ Grid filling browser window completely (using absolute positioning)
+ Grid resizing when browser window changes size
+ Overall performance of the grid when displaying large tabular data (17 columns x 10,000 rows)
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/examples/example13-getItem-sorting.html b/Tools/Tools/slickgrid/examples/example13-getItem-sorting.html
new file mode 100755
index 0000000..be30db2
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example13-getItem-sorting.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+ SlickGrid example 13: Indexed Sorting using Functional Data Provider
+
+
+
+
+
+
+
+
Demonstrates:
+
+ Sorting grid items by an index
+ Using the getItem method to provide data
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/examples/example2-formatters.html b/Tools/Tools/slickgrid/examples/example2-formatters.html
new file mode 100755
index 0000000..ebc29c1
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example2-formatters.html
@@ -0,0 +1,89 @@
+
+
+
+
+ SlickGrid example 2: Formatters
+
+
+
+
+
+
+
+
+
+
+
+
+ Demonstrates:
+
+ width, minWidth, maxWidth, resizable, cssClass column attributes
+ custom column formatters
+ rowCssClasses option
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example3-editing.html b/Tools/Tools/slickgrid/examples/example3-editing.html
new file mode 100755
index 0000000..a66dada
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example3-editing.html
@@ -0,0 +1,103 @@
+
+
+
+
+ SlickGrid example 3: Editing
+
+
+
+
+
+
+
+
+
+
+
+
Demonstrates:
+
+ adding basic keyboard navigation and editing
+ custom editors and validators
+ auto-edit settings
+
+
+
Options:
+
Auto-edit ON
+
+
Auto-edit OFF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example3a-compound-editors.html b/Tools/Tools/slickgrid/examples/example3a-compound-editors.html
new file mode 100755
index 0000000..79428df
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example3a-compound-editors.html
@@ -0,0 +1,145 @@
+
+
+
+
+ SlickGrid example 3a: Advanced Editing
+
+
+
+
+
+
+
+
+
+
+
+
Demonstrates:
+
+ compound cell editors driving multiple fields from one cell
+ providing validation from the editor
+ hooking into validation events
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example3b-editing-with-undo.html b/Tools/Tools/slickgrid/examples/example3b-editing-with-undo.html
new file mode 100755
index 0000000..4ff0019
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example3b-editing-with-undo.html
@@ -0,0 +1,110 @@
+
+
+
+
+ SlickGrid example 3: Editing
+
+
+
+
+
+
+
+
+
+
+
+
Demonstrates:
+
+ Using "editCommandHandler" option to intercept edit commands and implement undo support
+
+
+
Controls:
+
Undo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example4-model.html b/Tools/Tools/slickgrid/examples/example4-model.html
new file mode 100755
index 0000000..539a5cb
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example4-model.html
@@ -0,0 +1,357 @@
+
+
+
+
+ SlickGrid example 4: Model
+
+
+
+
+
+
+
+
+
+
+
+
Search:
+
+
+
Show tasks with % at least:
+
+
+
And title including:
+
+
+
Select first 10 rows
+
+
+
+
+
Demonstrates:
+
+
+ a filtered Model (DataView) as a data source instead of a simple array
+ grid reacting to model events (onRowCountChanged, onRowsChanged)
+
+ FAST DataView recalculation and real-time grid updating in response to data changes.
+ The grid holds 50'000 rows, yet you are able to sort, filter, scroll, navigate and edit as if it had 50 rows.
+
+ adding new rows, bidirectional sorting
+ column options: cannotTriggerInsert
+ events: onCellChange, onAddNewRow, onKeyDown, onSelectedRowsChanged, onSort
+ NOTE: all filters are immediately applied to new/edited rows
+ Handling row selection against model changes.
+ Paging.
+ inline filter panel
+
+
+
+
+ Show tasks with title including
+ and % at least
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example5-collapsing.html b/Tools/Tools/slickgrid/examples/example5-collapsing.html
new file mode 100755
index 0000000..ebbc73d
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example5-collapsing.html
@@ -0,0 +1,270 @@
+
+
+
+
+ SlickGrid example 5: Collapsing
+
+
+
+
+
+
+
+
+
+
+
Show tasks with % at least:
+
+
+
And title including:
+
+
+
+
+
+
+ Demonstrates:
+
+ implementing expand/collapse as a filter for DataView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example6-ajax-loading.html b/Tools/Tools/slickgrid/examples/example6-ajax-loading.html
new file mode 100755
index 0000000..49d6f20
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example6-ajax-loading.html
@@ -0,0 +1,150 @@
+
+
+
+
+ SlickGrid example 6: AJAX Load
+
+
+
+
+
+
+
+
+
Demonstrates:
+
+ loading data through AJAX
+ custom row height
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example7-events.html b/Tools/Tools/slickgrid/examples/example7-events.html
new file mode 100755
index 0000000..18ba011
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example7-events.html
@@ -0,0 +1,150 @@
+
+
+
+
+ SlickGrid example 7: Events
+
+
+
+
+
+
+
+
+
+
+
+
+ Demonstrates:
+
+ handling events from the grid:
+ Right-click the row to open the context menu
+ Click the priority cell to toggle values
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example8-alternative-display.html b/Tools/Tools/slickgrid/examples/example8-alternative-display.html
new file mode 100755
index 0000000..b5bd5f0
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example8-alternative-display.html
@@ -0,0 +1,173 @@
+
+
+
+
+ SlickGrid example 8: Alternative display
+
+
+
+
+
+
+
+
+
+
+
+
+ Demonstrates:
+
+
+ Template-based rendering using John Resig's micro-templates while still using SlickGrid's virtual rendering technology.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/example9-row-reordering.html b/Tools/Tools/slickgrid/examples/example9-row-reordering.html
new file mode 100755
index 0000000..b2e3ac4
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/example9-row-reordering.html
@@ -0,0 +1,160 @@
+
+
+
+
+ SlickGrid example 9: Row reordering
+
+
+
+
+
+
+
+
+
Tips:
+
+
+ Click to select, Ctrl-click to toggle selection, Shift-click to select a range.
+ Drag one or more rows to reorder.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Tools/slickgrid/examples/examples.css b/Tools/Tools/slickgrid/examples/examples.css
new file mode 100755
index 0000000..9f7abdc
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/examples.css
@@ -0,0 +1,233 @@
+@import url('slick-default-theme.css');
+
+* {
+ font-family: arial;
+ font-size: 8pt;
+}
+
+body {
+ background: beige;
+}
+
+h2 {
+ font-size: 10pt;
+ border-bottom: 1px dotted gray;
+}
+
+ul {
+ margin-left: 0;
+ padding: 0;
+ cursor: default;
+}
+
+li {
+ background: url("../images/arrow_right_spearmint.png") no-repeat center left;
+ padding: 0 0 0 14px;
+
+ list-style: none;
+ margin: 0;
+}
+
+#myGrid {
+ background: white;
+ outline: 0;
+ border: 1px solid gray;
+}
+
+.grid-header {
+ border: 1px solid gray;
+ border-bottom: 0;
+ border-top: 0;
+ background: url('../images/header-bg.gif') repeat-x center top;
+ color: black;
+ height: 24px;
+ line-height: 24px;
+}
+
+.grid-header label {
+ display: inline-block;
+ font-weight: bold;
+ margin: auto auto auto 6px;
+}
+
+.grid-header .ui-icon {
+ margin: 4px 4px auto 6px;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.grid-header .ui-icon.ui-state-hover {
+ background-color: white;
+}
+
+.grid-header #txtSearch {
+ margin: 0 4px 0 4px;
+ padding: 2px 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border: 1px solid silver;
+}
+
+.options-panel {
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ border: 1px solid silver;
+ background: #f0f0f0;
+ padding: 4px;
+ margin-bottom: 20px;
+}
+
+
+
+/* Individual cell styles */
+.slick-cell.task-name {
+ font-weight: bold;
+ text-align: right;
+}
+
+
+.slick-cell.task-percent {
+ text-align: right;
+}
+
+
+.slick-cell.cell-move-handle {
+ font-weight: bold;
+ text-align: right;
+ border-right: solid gray;
+
+ background: #efefef;
+ cursor: move;
+}
+
+.cell-move-handle:hover {
+ background: #b6b9bd;
+}
+
+.slick-row.selected .cell-move-handle {
+ background: #D5DC8D;
+}
+
+.slick-row .cell-actions {
+ text-align: left;
+}
+
+.slick-row.complete {
+ background-color: #DFD;
+ color: #555;
+}
+
+.percent-complete-bar {
+ display: inline-block;
+ height: 6px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+
+/* TextCellEditor, DateCellEditor */
+input.editor-text {
+ width: 100%;
+ height: 100%;
+ border: 0;
+ margin: 0;
+ background: transparent;
+ outline: 0;
+ padding: 0;
+
+}
+
+.slick-cell .ui-datepicker-trigger {
+ margin-top: 2px;
+ padding: 0;
+ vertical-align: top;
+}
+
+/* PercentCompleteCellEditor */
+input.editor-percentcomplete {
+ width: 100%;
+ height: 100%;
+ border: 0;
+ margin: 0;
+ background: transparent;
+ outline: 0;
+ padding: 0;
+
+ float: left;
+}
+
+.editor-percentcomplete-picker {
+ position: relative;
+ display: inline-block;
+ width: 16px;
+ height: 100%;
+ background: url("../images/pencil.gif") no-repeat center center;
+ overflow: visible;
+ z-index: 1000;
+ float: right;
+}
+
+.editor-percentcomplete-helper {
+ border: 0 solid gray;
+ position: absolute;
+ top: -2px;
+ left: -9px;
+ background: url("../images/editor-helper-bg.gif") no-repeat top left;
+ padding-left: 9px;
+
+ width: 120px;
+ height: 140px;
+ display: none;
+ overflow: visible;
+}
+
+
+.editor-percentcomplete-wrapper {
+ background:beige;
+ padding: 20px 8px;
+
+ width:100%;
+ height:98px;
+ border:1px solid gray;
+ border-left:0;
+}
+
+.editor-percentcomplete-buttons {
+ float: right;
+}
+
+.editor-percentcomplete-buttons button {
+ width: 80px;
+}
+
+
+.editor-percentcomplete-slider {
+ float: left;
+}
+
+ .editor-percentcomplete-picker:hover .editor-percentcomplete-helper {
+ display: block;
+}
+
+.editor-percentcomplete-helper:hover {
+ display: block;
+}
+
+
+
+/* YesNoSelectCellEditor */
+select.editor-yesno {
+ width: 100%;
+ margin: 0;
+ vertical-align: middle;
+}
+
+/* YesNoCheckboxCellEditor */
+input.editor-checkbox {
+ margin: 0;
+ height: 100%;
+ padding: 0;
+ border: 0;
+}
+
+
diff --git a/Tools/Tools/slickgrid/examples/slick-default-theme.css b/Tools/Tools/slickgrid/examples/slick-default-theme.css
new file mode 100755
index 0000000..428f356
--- /dev/null
+++ b/Tools/Tools/slickgrid/examples/slick-default-theme.css
@@ -0,0 +1,67 @@
+/*
+IMPORTANT:
+In order to preserve the uniform grid appearance, all cell styles need to have padding, margin and border sizes.
+No built-in (selected, editable, highlight, flashing, invalid, loading, :focus) or user-specified CSS
+classes should alter those!
+*/
+
+.slick-header-columns {
+ background: url('../images/header-columns-bg.gif') repeat-x center bottom;
+ border-bottom: 1px solid silver;
+}
+
+.slick-header-column {
+ background: url('../images/header-columns-bg.gif') repeat-x center bottom;
+ border-right: 1px solid silver;
+}
+
+.slick-header-column:hover, .slick-header-column-active {
+ background: white url('../images/header-columns-over-bg.gif') repeat-x center bottom;
+}
+
+.slick-row.ui-state-active {
+ background: #F5F7D7;
+}
+
+.slick-row {
+ position: absolute;
+ background: white;
+ border: 0px;
+}
+
+.slick-row.selected {
+ z-index: 10;
+ background: #DFE8F6;
+}
+
+.slick-cell {
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+.slick-cell.selected {
+ border-color: gray;
+ border-style: solid;
+}
+
+
+.slick-sortable-placeholder {
+ background: silver!important;
+}
+
+.slick-row[row$="1"], .slick-row[row$="3"], .slick-row[row$="5"], .slick-row[row$="7"], .slick-row[row$="9"] {
+ background: #fafafa;
+}
+
+.slick-row.ui-state-active {
+ background: #F5F7D7;
+}
+
+.slick-row.loading {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.slick-cell.invalid {
+ border-color: red;
+}
\ No newline at end of file
diff --git a/Tools/Tools/slickgrid/images/actions.gif b/Tools/Tools/slickgrid/images/actions.gif
new file mode 100755
index 0000000..026dd10
Binary files /dev/null and b/Tools/Tools/slickgrid/images/actions.gif differ
diff --git a/Tools/Tools/slickgrid/images/ajax-loader-small.gif b/Tools/Tools/slickgrid/images/ajax-loader-small.gif
new file mode 100755
index 0000000..5b33f7e
Binary files /dev/null and b/Tools/Tools/slickgrid/images/ajax-loader-small.gif differ
diff --git a/Tools/Tools/slickgrid/images/arrow_redo.png b/Tools/Tools/slickgrid/images/arrow_redo.png
new file mode 100755
index 0000000..fdc394c
Binary files /dev/null and b/Tools/Tools/slickgrid/images/arrow_redo.png differ
diff --git a/Tools/Tools/slickgrid/images/arrow_right_peppermint.png b/Tools/Tools/slickgrid/images/arrow_right_peppermint.png
new file mode 100755
index 0000000..1804fa9
Binary files /dev/null and b/Tools/Tools/slickgrid/images/arrow_right_peppermint.png differ
diff --git a/Tools/Tools/slickgrid/images/arrow_right_spearmint.png b/Tools/Tools/slickgrid/images/arrow_right_spearmint.png
new file mode 100755
index 0000000..298515a
Binary files /dev/null and b/Tools/Tools/slickgrid/images/arrow_right_spearmint.png differ
diff --git a/Tools/Tools/slickgrid/images/arrow_undo.png b/Tools/Tools/slickgrid/images/arrow_undo.png
new file mode 100755
index 0000000..6972c5e
Binary files /dev/null and b/Tools/Tools/slickgrid/images/arrow_undo.png differ
diff --git a/Tools/Tools/slickgrid/images/bullet_blue.png b/Tools/Tools/slickgrid/images/bullet_blue.png
new file mode 100755
index 0000000..a7651ec
Binary files /dev/null and b/Tools/Tools/slickgrid/images/bullet_blue.png differ
diff --git a/Tools/Tools/slickgrid/images/bullet_star.png b/Tools/Tools/slickgrid/images/bullet_star.png
new file mode 100755
index 0000000..3829023
Binary files /dev/null and b/Tools/Tools/slickgrid/images/bullet_star.png differ
diff --git a/Tools/Tools/slickgrid/images/bullet_toggle_minus.png b/Tools/Tools/slickgrid/images/bullet_toggle_minus.png
new file mode 100755
index 0000000..b47ce55
Binary files /dev/null and b/Tools/Tools/slickgrid/images/bullet_toggle_minus.png differ
diff --git a/Tools/Tools/slickgrid/images/bullet_toggle_plus.png b/Tools/Tools/slickgrid/images/bullet_toggle_plus.png
new file mode 100755
index 0000000..9ab4a89
Binary files /dev/null and b/Tools/Tools/slickgrid/images/bullet_toggle_plus.png differ
diff --git a/Tools/Tools/slickgrid/images/calendar.gif b/Tools/Tools/slickgrid/images/calendar.gif
new file mode 100755
index 0000000..90fd2e1
Binary files /dev/null and b/Tools/Tools/slickgrid/images/calendar.gif differ
diff --git a/Tools/Tools/slickgrid/images/collapse.gif b/Tools/Tools/slickgrid/images/collapse.gif
new file mode 100755
index 0000000..01e6914
Binary files /dev/null and b/Tools/Tools/slickgrid/images/collapse.gif differ
diff --git a/Tools/Tools/slickgrid/images/comment_yellow.gif b/Tools/Tools/slickgrid/images/comment_yellow.gif
new file mode 100755
index 0000000..df7158a
Binary files /dev/null and b/Tools/Tools/slickgrid/images/comment_yellow.gif differ
diff --git a/Tools/Tools/slickgrid/images/down.gif b/Tools/Tools/slickgrid/images/down.gif
new file mode 100755
index 0000000..9bd9447
Binary files /dev/null and b/Tools/Tools/slickgrid/images/down.gif differ
diff --git a/Tools/Tools/slickgrid/images/drag-handle.png b/Tools/Tools/slickgrid/images/drag-handle.png
new file mode 100755
index 0000000..86727b1
Binary files /dev/null and b/Tools/Tools/slickgrid/images/drag-handle.png differ
diff --git a/Tools/Tools/slickgrid/images/editor-helper-bg.gif b/Tools/Tools/slickgrid/images/editor-helper-bg.gif
new file mode 100755
index 0000000..2daa973
Binary files /dev/null and b/Tools/Tools/slickgrid/images/editor-helper-bg.gif differ
diff --git a/Tools/Tools/slickgrid/images/expand.gif b/Tools/Tools/slickgrid/images/expand.gif
new file mode 100755
index 0000000..1b24ef1
Binary files /dev/null and b/Tools/Tools/slickgrid/images/expand.gif differ
diff --git a/Tools/Tools/slickgrid/images/header-bg.gif b/Tools/Tools/slickgrid/images/header-bg.gif
new file mode 100755
index 0000000..fe7dd1c
Binary files /dev/null and b/Tools/Tools/slickgrid/images/header-bg.gif differ
diff --git a/Tools/Tools/slickgrid/images/header-columns-bg.gif b/Tools/Tools/slickgrid/images/header-columns-bg.gif
new file mode 100755
index 0000000..8d459a3
Binary files /dev/null and b/Tools/Tools/slickgrid/images/header-columns-bg.gif differ
diff --git a/Tools/Tools/slickgrid/images/header-columns-over-bg.gif b/Tools/Tools/slickgrid/images/header-columns-over-bg.gif
new file mode 100755
index 0000000..f9c07af
Binary files /dev/null and b/Tools/Tools/slickgrid/images/header-columns-over-bg.gif differ
diff --git a/Tools/Tools/slickgrid/images/help.png b/Tools/Tools/slickgrid/images/help.png
new file mode 100755
index 0000000..0eff0a5
Binary files /dev/null and b/Tools/Tools/slickgrid/images/help.png differ
diff --git a/Tools/Tools/slickgrid/images/info.gif b/Tools/Tools/slickgrid/images/info.gif
new file mode 100755
index 0000000..5769434
Binary files /dev/null and b/Tools/Tools/slickgrid/images/info.gif differ
diff --git a/Tools/Tools/slickgrid/images/listview.gif b/Tools/Tools/slickgrid/images/listview.gif
new file mode 100755
index 0000000..3ec25ca
Binary files /dev/null and b/Tools/Tools/slickgrid/images/listview.gif differ
diff --git a/Tools/Tools/slickgrid/images/pencil.gif b/Tools/Tools/slickgrid/images/pencil.gif
new file mode 100755
index 0000000..29f78f4
Binary files /dev/null and b/Tools/Tools/slickgrid/images/pencil.gif differ
diff --git a/Tools/Tools/slickgrid/images/row-over-bg.gif b/Tools/Tools/slickgrid/images/row-over-bg.gif
new file mode 100755
index 0000000..b288e38
Binary files /dev/null and b/Tools/Tools/slickgrid/images/row-over-bg.gif differ
diff --git a/Tools/Tools/slickgrid/images/sort-asc.gif b/Tools/Tools/slickgrid/images/sort-asc.gif
new file mode 100755
index 0000000..67a2a4c
Binary files /dev/null and b/Tools/Tools/slickgrid/images/sort-asc.gif differ
diff --git a/Tools/Tools/slickgrid/images/sort-asc.png b/Tools/Tools/slickgrid/images/sort-asc.png
new file mode 100755
index 0000000..e6b6264
Binary files /dev/null and b/Tools/Tools/slickgrid/images/sort-asc.png differ
diff --git a/Tools/Tools/slickgrid/images/sort-desc.gif b/Tools/Tools/slickgrid/images/sort-desc.gif
new file mode 100755
index 0000000..34db47c
Binary files /dev/null and b/Tools/Tools/slickgrid/images/sort-desc.gif differ
diff --git a/Tools/Tools/slickgrid/images/sort-desc.png b/Tools/Tools/slickgrid/images/sort-desc.png
new file mode 100755
index 0000000..74ad154
Binary files /dev/null and b/Tools/Tools/slickgrid/images/sort-desc.png differ
diff --git a/Tools/Tools/slickgrid/images/stripes.png b/Tools/Tools/slickgrid/images/stripes.png
new file mode 100755
index 0000000..0c293a9
Binary files /dev/null and b/Tools/Tools/slickgrid/images/stripes.png differ
diff --git a/Tools/Tools/slickgrid/images/tag_red.png b/Tools/Tools/slickgrid/images/tag_red.png
new file mode 100755
index 0000000..6ebb37d
Binary files /dev/null and b/Tools/Tools/slickgrid/images/tag_red.png differ
diff --git a/Tools/Tools/slickgrid/images/tick.png b/Tools/Tools/slickgrid/images/tick.png
new file mode 100755
index 0000000..a9925a0
Binary files /dev/null and b/Tools/Tools/slickgrid/images/tick.png differ
diff --git a/Tools/Tools/slickgrid/images/user_identity.gif b/Tools/Tools/slickgrid/images/user_identity.gif
new file mode 100755
index 0000000..095831b
Binary files /dev/null and b/Tools/Tools/slickgrid/images/user_identity.gif differ
diff --git a/Tools/Tools/slickgrid/images/user_identity_plus.gif b/Tools/Tools/slickgrid/images/user_identity_plus.gif
new file mode 100755
index 0000000..b276a81
Binary files /dev/null and b/Tools/Tools/slickgrid/images/user_identity_plus.gif differ
diff --git a/Tools/Tools/slickgrid/lib/firebug-lite.js b/Tools/Tools/slickgrid/lib/firebug-lite.js
new file mode 100755
index 0000000..1fa0bb4
--- /dev/null
+++ b/Tools/Tools/slickgrid/lib/firebug-lite.js
@@ -0,0 +1,2068 @@
+var firebug = {
+ version:[1.23,20090122],
+ el:{},
+ env:{
+ "cache":{},
+ "css":"http://getfirebug.com/releases/lite/1.2/firebug-lite.css",
+ "dIndex":"console",
+ "height":295,
+ "init":false,
+ "isPopup":false,
+ "minimized":false,
+ "ml":false,
+ "override":false,
+ "popupWin":null
+ },
+ init:function(_css){
+ with(firebug){
+ if(env.init)
+ return;
+ document.getElementsByTagName("head")[0].appendChild(
+ new lib.element("link").attribute.set("rel","stylesheet").attribute.set("href",env.css).element
+ );
+
+ /*
+ * main interface
+ */
+ el.content = {};
+ el.main = new lib.element("DIV").attribute.set("id","Firebug").environment.addStyle({ "display":"none", "width":lib.util.GetViewport().width+"px" }).insert(document.body);
+ if(!env.isPopup){
+ el.resizer = new lib.element("DIV").attribute.addClass("Resizer").event.addListener("mousedown",win.resizer.start).insert(el.main);
+ }
+ el.header = new lib.element("DIV").attribute.addClass("Header").insert(el.main);
+ el.left = {};
+ el.left.container = new lib.element("DIV").attribute.addClass("Left").insert(el.main);
+ el.right = {};
+ el.right.container = new lib.element("DIV").attribute.addClass("Right").insert(el.main);
+ el.main.child.add(new lib.element("DIV").attribute.addClass('Clear'));
+
+ /*
+ * buttons
+ */
+ el.button = {};
+ el.button.container = new lib.element("DIV").attribute.addClass("ButtonContainer").insert(el.header);
+ el.button.logo = new lib.element("A").attribute.set("title","Firebug Lite").attribute.set("target","_blank").attribute.set("href","http://getfirebug.com/lite.html").update(" ").attribute.addClass("Button Logo").insert(el.button.container);
+ el.button.inspect = new lib.element("A").attribute.addClass("Button").event.addListener("click",(env.isPopup && window.opener || window).firebug.d.inspector.toggle).update("Inspect").insert(el.button.container);
+ el.button.dock = new lib.element("A").attribute.addClass("Button Dock").event.addListener("click", win.dock).insert(el.button.container);
+ el.button.newWindow = new lib.element("A").attribute.addClass("Button NewWindow").event.addListener("click", win.newWindow).insert(el.button.container);
+
+ if(!env.isPopup){
+ el.button.maximize = new lib.element("A").attribute.addClass("Button Maximize").event.addListener("click",win.maximize).insert(el.button.container);
+ el.button.minimize = new lib.element("A").attribute.addClass("Button Minimize").event.addListener("click",win.minimize).insert(el.button.container);
+ el.button.close = new lib.element("A").attribute.addClass("Button Close").event.addListener("click",win.close).insert(el.button.container);
+ }
+
+ if(lib.env.ie||lib.env.webkit){
+ el.button.container.environment.addStyle({ "paddingTop":"12px" });
+ }
+
+ /*
+ * navigation
+ */
+ el.nav = {};
+ el.nav.container = new lib.element("DIV").attribute.addClass("Nav").insert(el.left.container);
+ el.nav.console = new lib.element("A").attribute.addClass("Tab Selected").event.addListener("click",lib.util.Curry(d.navigate,window,"console")).update("Console").insert(el.nav.container);
+ el.nav.html = new lib.element("A").attribute.addClass("Tab").update("HTML").event.addListener("click",lib.util.Curry(d.navigate,window,"html")).insert(el.nav.container);
+ el.nav.css = new lib.element("A").attribute.addClass("Tab").update("CSS").event.addListener("click",lib.util.Curry(d.navigate,window,"css")).insert(el.nav.container);
+ if(!env.isPopup){
+ el.nav.scripts = new lib.element("A").attribute.addClass("Tab").update("Script").event.addListener("click",lib.util.Curry(d.navigate,window,"scripts")).insert(el.nav.container);
+ }
+ el.nav.dom = new lib.element("A").attribute.addClass("Tab").update("DOM").event.addListener("click",lib.util.Curry(d.navigate,env.isPopup && window.opener || window,"dom")).insert(el.nav.container);
+ if(!env.isPopup){
+ el.nav.xhr = new lib.element("A").attribute.addClass("Tab").update("XHR").event.addListener("click",lib.util.Curry(d.navigate,window,"xhr")).insert(el.nav.container);
+ }
+ /*
+ * inspector
+ */
+
+ el.borderInspector = new lib.element("DIV").attribute.set("id","FirebugBorderInspector").event.addListener("click",listen.inspector).insert(document.body);
+ el.bgInspector = new lib.element("DIV").attribute.set("id","FirebugBGInspector").insert(document.body);
+
+ /*
+ * console
+ */
+ el.left.console = {};
+ el.left.console.container = new lib.element("DIV").attribute.addClass("Console").insert(el.left.container);
+ el.left.console.mlButton = new lib.element("A").attribute.addClass("MLButton").event.addListener("click",d.console.toggleML).insert(el.left.console.container);
+ el.left.console.monitor = new lib.element("DIV").insert(
+ new lib.element("DIV").attribute.addClass("Monitor").insert(el.left.console.container)
+ );
+ el.left.console.container.child.add(
+ new lib.element("DIV").attribute.addClass("InputArrow").update(">>>")
+ );
+ el.left.console.input = new lib.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert(
+ new lib.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container)
+ );
+
+ el.right.console = {};
+ el.right.console.container = new lib.element("DIV").attribute.addClass("Console Container").insert(el.right.container);
+ el.right.console.mlButton = new lib.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container);
+ el.right.console.input = new lib.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container);
+ el.right.console.input.event.addListener("keydown",lib.util.Curry(tab,window,el.right.console.input.element));
+ el.right.console.run = new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container);
+ el.right.console.clear = new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.clean,window,el.right.console.input)).update("Clear").insert(el.right.console.container);
+
+ el.button.console = {};
+ el.button.console.container = new lib.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container);
+ el.button.console.clear = new lib.element("A").attribute.addClass("Button").event.addListener("click",d.console.clear).update("Clear").insert(el.button.console.container);
+
+ /*
+ * html
+ */
+
+ el.left.html = {};
+ el.left.html.container = new lib.element("DIV").attribute.addClass("HTML").insert(el.left.container);
+
+ el.right.html = {};
+ el.right.html.container = new lib.element("DIV").attribute.addClass("HTML Container").insert(el.right.container);
+
+ el.right.html.nav = {};
+ el.right.html.nav.container = new lib.element("DIV").attribute.addClass("Nav").insert(el.right.html.container);
+ el.right.html.nav.computedStyle = new lib.element("A").attribute.addClass("Tab Selected").event.addListener("click",lib.util.Curry(d.html.navigate,firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container);
+ el.right.html.nav.dom = new lib.element("A").attribute.addClass("Tab").event.addListener("click",lib.util.Curry(d.html.navigate,firebug,"dom")).update("DOM").insert(el.right.html.nav.container);
+
+ el.right.html.content = new lib.element("DIV").attribute.addClass("Content").insert(el.right.html.container);
+
+ el.button.html = {};
+ el.button.html.container = new lib.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container);
+
+ /*
+ * css
+ */
+
+ el.left.css = {};
+ el.left.css.container = new lib.element("DIV").attribute.addClass("CSS").insert(el.left.container);
+
+ el.right.css = {};
+ el.right.css.container = new lib.element("DIV").attribute.addClass("CSS Container").insert(el.right.container);
+
+ el.right.css.nav = {};
+ el.right.css.nav.container = new lib.element("DIV").attribute.addClass("Nav").insert(el.right.css.container);
+ el.right.css.nav.runCSS = new lib.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container);
+
+ el.right.css.mlButton = new lib.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container);
+ el.right.css.input = new lib.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container);
+ el.right.css.input.event.addListener("keydown",lib.util.Curry(firebug.tab,window,el.right.css.input.element));
+ el.right.css.run = new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container);
+ el.right.css.clear = new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.clean,window,el.right.css.input)).update("Clear").insert(el.right.css.container);
+
+ el.button.css = {};
+ el.button.css.container = new lib.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container);
+ el.button.css.selectbox = new lib.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container);
+
+ /*
+ * scripts
+ */
+
+ el.left.scripts = {};
+ el.left.scripts.container = new lib.element("DIV").attribute.addClass("Scripts").insert(el.left.container);
+
+ el.right.scripts = {};
+ el.right.scripts.container = new lib.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container);
+
+ el.button.scripts = {};
+ el.button.scripts.container = new lib.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container);
+ el.button.scripts.selectbox = new lib.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container);
+ el.button.scripts.lineNumbers = new lib.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container);
+
+ /*
+ * dom
+ */
+
+ el.left.dom = {};
+ el.left.dom.container = new lib.element("DIV").attribute.addClass("DOM").insert(el.left.container);
+
+ el.right.dom = {};
+ el.right.dom.container = new lib.element("DIV").attribute.addClass("DOM Container").insert(el.right.container);
+
+ el.button.dom = {};
+ el.button.dom.container = new lib.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container);
+ el.button.dom.label = new lib.element("LABEL").update("Object Path:").insert(el.button.dom.container);
+ el.button.dom.textbox = new lib.element("INPUT").event.addListener("keydown",listen.domTextbox).update(env.isPopup&&"window.opener"||"window").insert(el.button.dom.container);
+
+ /*
+ * str
+ */
+ el.left.str = {};
+ el.left.str.container = new lib.element("DIV").attribute.addClass("STR").insert(el.left.container);
+
+ el.right.str = {};
+ el.right.str.container = new lib.element("DIV").attribute.addClass("STR").insert(el.left.container);
+
+ el.button.str = {};
+ el.button.str.container = new lib.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
+ el.button.str.watch = new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.navigate,window,"xhr")).update("Back").insert(el.button.str.container);
+
+ /*
+ * xhr
+ */
+ el.left.xhr = {};
+ el.left.xhr.container = new lib.element("DIV").attribute.addClass("XHR").insert(el.left.container);
+
+ el.right.xhr = {};
+ el.right.xhr.container = new lib.element("DIV").attribute.addClass("XHR").insert(el.left.container);
+
+
+ el.button.xhr = {};
+ el.button.xhr.container = new lib.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
+ el.button.xhr.label = new lib.element("LABEL").update("XHR Path:").insert(el.button.xhr.container);
+ el.button.xhr.textbox = new lib.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container);
+ el.button.xhr.watch = new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container);
+
+ if (env.isPopup) {
+ lib.util.AddEvent(window, "unload", win.dock);
+ lib.util.AddEvent(window, "load", win.fitToPopup);
+ lib.util.AddEvent(window, "resize", win.fitToPopup);
+ } else {
+ lib.util.AddEvent(window, "resize", win.refreshSize);
+ }
+ lib.util.AddEvent(document,"mousemove",listen.mouse)("mousemove",win.resizer.resize)("mouseup",win.resizer.stop)("keydown",listen.keyboard);
+
+ env.init = true;
+
+ for(var i=0, len=d.console.cache.length; i -1) {
+ var scriptPath = scripts[i].src;
+ break;
+ }
+ }
+
+ var script = firebug.env.popupWin.document.createElement('script'), done = false;
+ script.type = 'text/javascript';
+ script.src = scriptPath;
+
+ script[firebug.lib.env.ie?"onreadystatechange":"onload"] = function(){
+ if(!done && (!firebug.lib.env.ie || this.readyState == "complete" || this.readyState=="loaded")){
+ done = true;
+
+ with(firebug.env.popupWin.firebug) {
+ env.isPopup = true;
+ env.css = firebug.env.css;
+ init();
+ el.button.dock.environment.addStyle({ "display": "block"});
+ el.button.newWindow.environment.addStyle({ "display": "none"});
+ }
+ }
+ };
+
+ firebug.env.popupWin.document.getElementsByTagName('head')[0].appendChild(script);
+
+ firebug.el.main.environment.addStyle({
+ "display": "none"
+ });
+ }
+ }
+ },
+ dock: function() {
+ with(opener.firebug) {
+ env.popupWin = null;
+ el.main.environment.addStyle({
+ "display": "block"
+ });
+ window.close();
+ };
+ },
+ fitToPopup: function() {
+ with(firebug) {
+ var viewport = lib.util.GetViewport(window);
+ win.setHeight((window.innerHeight||viewport.height) - 38);
+ el.main.environment.addStyle({
+ "width": (viewport.width) + "px"
+ });
+ }
+ },
+ resizer:{
+ y:[], enabled:false,
+ start:function(_event){
+ with(firebug){
+ if(env.minimized)return;
+ win.resizer.y=[el.main.element.offsetHeight,_event.clientY];
+ if(lib.env.ie6){
+ win.resizer.y[3]=parseInt(el.main.environment.getPosition().top);
+ }
+ win.resizer.enabled=true;
+ }
+ },
+ resize:function(_event){
+ with(firebug){
+ if(!win.resizer.enabled)return;
+ win.resizer.y[2]=(win.resizer.y[0]+(win.resizer.y[1]-_event.clientY));
+ el.main.environment.addStyle({ "height":win.resizer.y[2]+"px" });
+ if(lib.env.ie6){
+ el.main.environment.addStyle({ "top":win.resizer.y[3]-(win.resizer.y[1]-_event.clientY)+"px" });
+ }
+ }
+ },
+ stop:function(_event){
+ with(firebug){
+ if(win.resizer.enabled){
+ win.resizer.enabled=false;
+ win.setHeight(win.resizer.y[2]-35);
+ }
+ }
+ }
+ },
+ setHeight:function(_height){
+ with(firebug){
+ env.height=_height;
+
+ el.left.container.environment.addStyle({ "height":_height+"px" });
+ el.right.container.environment.addStyle({ "height":_height+"px" });
+ el.main.environment.addStyle({ "height":_height+38+"px" });
+
+ win.refreshSize();
+
+ // console
+ el.left.console.monitor.element.parentNode.style.height=_height-47+"px";
+ el.left.console.mlButton.environment.addStyle({ "top":_height+19+"px" });
+ el.right.console.mlButton.environment.addStyle({ "top":_height+19+"px" });
+ el.right.console.input.environment.addStyle({ "height":_height-29+"px" });
+
+ // html
+ el.left.html.container.environment.addStyle({"height":_height-23+"px"});
+ el.right.html.content.environment.addStyle({"height":_height-23+"px"});
+
+ // css
+ el.left.css.container.environment.addStyle({"height":_height-33+"px"});
+ el.right.css.input.environment.addStyle({ "height":_height-55+"px" });
+
+ // script
+ el.left.scripts.container.environment.addStyle({"height":_height-23+"px"});
+
+ // dom
+ el.left.dom.container.environment.addStyle({"height":_height-31+"px"});
+
+ // xhr
+ el.left.xhr.container.environment.addStyle({"height":_height-32+"px"});
+
+ // string
+ el.left.str.container.environment.addStyle({"height":_height-32+"px"});
+ }
+ },
+ refreshSize:function(){
+ with(firebug){
+ if(!env.init)
+ return;
+
+ var dim = lib.util.GetViewport();
+ el.main.environment.addStyle({ "width":dim.width+"px"});
+ if(lib.env.ie6)
+ win.setVerticalPosition(dim);
+ }
+ },
+ setVerticalPosition:function(_dim,_event){
+ with(firebug){
+ var dim = _dim||lib.util.GetViewport();
+ el.main.environment.addStyle({ "top":dim.height-el.main.environment.getSize().offsetHeight+Math.max(document.documentElement.scrollTop,document.body.scrollTop)+"px" });
+ }
+ }
+ },
+ d: {
+ clean:function(_element){
+ with(firebug){
+ _element.update("");
+ }
+ },
+ console:{
+ addLine:function(){
+ with (firebug) {
+ return new lib.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor);
+ }
+ },
+ cache:[],
+ clear:function(){
+ with(firebug){
+ d.clean(el.left.console.monitor);
+ d.console.cache = [];
+ }
+ },
+ formatArgs:function(){
+ with(firebug){
+ var content = [];
+ for(var i=0, len=arguments.length; i>> "+_cmd);
+ d.console.addLine().update(d.highlight(_text,false,false,true));
+ d.console.scroll();
+ }
+ },
+ printException: function(_exception){
+ with(firebug){
+ var message = _exception.description||_exception.message||_exception;
+ if(_exception.fileName){
+ message+=' ('+(_exception.name&&(_exception.name+', ')||'')+getFileName(_exception.fileName)+', '+_exception.lineNumber+')';
+ }
+ d.console.addLine().attribute.addClass("Error").update("Error: "+message,true);
+ }
+ },
+ eval:function(_cmd){
+ with(firebug){
+ if(_cmd.length==0)
+ return;
+
+ el.left.console.input.environment.getElement().value = "";
+ d.console.historyIndex = d.console.history.push(_cmd);
+
+ try {
+ var result = eval.call(window,_cmd);
+ d.console.print(_cmd,result);
+ } catch(e){
+ d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd);
+ d.console.printException(e);
+ }
+ d.console.scroll();
+ }
+ },
+ scroll:function(){
+ with(firebug){
+ el.left.console.monitor.environment.getElement().parentNode.scrollTop = Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-(el.left.console.monitor.element.parentNode.offsetHeight-11));
+ }
+ },
+ run:function(_command){
+ with(firebug){
+ if(!env.init){
+ d.console.cache.push({ "command":_command, "arg":Array.prototype.slice.call(arguments,1) });
+ } else {
+ d.console.cmd[_command].apply(window,Array.prototype.slice.call(arguments,1));
+ }
+ }
+ },
+ toggleML:function(){
+ with(firebug){
+ var open = !env.ml;
+ env.ml = !env.ml;
+ d.navigateRightColumn("console",open);
+ el[open?"left":"right"].console.mlButton.environment.addStyle({ display:"none" });
+ el[!open?"left":"right"].console.mlButton.environment.addStyle({ display:"block" });
+ el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML");
+ }
+ },
+ countMap:{}, timeMap: {},
+ cmd:{
+ log: function(_value){
+ with(firebug){
+ var args = d.console.formatArgs.apply(window,arguments);
+ d.console.addLine().attribute.addClass("Log").update(args);
+ d.console.scroll();
+ }
+ },
+ warn: function(_value){
+ with(firebug){
+ var args = d.console.formatArgs.apply(window,arguments);
+ d.console.addLine().attribute.addClass("Warn").update(args);
+ d.console.scroll();
+ }
+ },
+ info: function(_value){
+ with(firebug){
+ var args = d.console.formatArgs.apply(window,arguments);
+ d.console.addLine().attribute.addClass("Info").update(args);
+ d.console.scroll();
+ }
+ },
+ debug: function(_value){
+ with(firebug){
+ var args = d.console.formatArgs.apply(window,arguments);
+ d.console.addLine().attribute.addClass("Debug").update(args);
+ d.console.scroll();
+ }
+ },
+ error: function(_value){
+ with(firebug){
+ var args = d.console.formatArgs.apply(window,arguments);
+ d.console.addLine().attribute.addClass("Error").update(args);
+ d.console.scroll();
+ }
+ },
+ trace: function(_value){
+ with(firebug){
+ var stackAmt = 3, f = arguments.caller, isArray = lib.util.IsArray(f); //function that called trace
+
+ if((!isArray&&f)||(isArray&&f.length>0)){
+ d.console.addLine().attribute.addClass("Arrow").update(">>> console.trace(stack)");
+ for(var i=0;i>> console.dir("+_value+")");
+ d.dom.open(_value,d.console.addLine());
+ }
+ },
+ dirxml: function(){
+ with(firebug){
+ d.console.cmd.log.apply(this, arguments);
+ }
+ },
+ time: function(_name){
+ with(firebug){
+ d.console.timeMap[_name] = new Date().getTime();
+ }
+ },
+ timeEnd: function(_name){
+ with(firebug){
+ if(_name in d.console.timeMap){
+ var delta = new Date().getTime() - d.console.timeMap[_name],
+ args = d.console.formatArgs.apply(window,[_name+":", delta+"ms"]);
+ d.console.addLine().attribute.addClass("log").update(args);
+ delete d.console.timeMap[_name];
+ }
+ }
+ },
+ count: function(_name){
+ with(firebug){
+ if(!d.console.countMap[_name])
+ d.console.countMap[_name] = 0;
+ d.console.countMap[_name]++;
+ d.console.cmd.log.apply(window, [_name, d.console.countMap[_name]]);
+ }
+ },
+ group:function(){
+ with(firebug){
+ d.console.cmd.log.apply(this, ["console.group is not supported"]);
+ }
+ },
+ groupEnd:function(){
+ with(firebug){
+ d.console.cmd.log.apply(this, ["console.groupEnd is not supported"]);
+ }
+ },
+ profile:function(){
+ with(firebug){
+ d.console.cmd.log.apply(this, ["console.profile is not supported"]);
+ }
+ },
+ profileEnd:function(){
+ with(firebug){
+ d.console.cmd.log.apply(this, ["console.profileEnd is not supported"]);
+ }
+ }
+ }
+ },
+ css:{
+ index:-1,
+ open:function(_index){
+ with (firebug) {
+ var item = (env.isPopup&&window.opener||window).document.styleSheets[_index],
+ uri = item.href,
+ dmn = getDomain(uri);
+ if(uri.indexOf("http:\/\/")>-1&&dmn!=document.domain&&'www.'+dmn!=document.domain){
+ el.left.css.container.update("Access to restricted URI denied ");
+ return;
+ }
+ var rules = item[lib.env.ie ? "rules" : "cssRules"], str = "";
+ for (var i=0; i";
+ for(var i=0,len=_css.length; i"+item.replace(/(.+\:)(.+)/,"$1 $2; ")+"";
+ }
+ str+="}
";
+ return str;
+ }
+ },
+ refresh:function(){
+ with(firebug){
+ el.button.css.selectbox.update("");
+ var collection = (env.isPopup&&window.opener||window).document.styleSheets;
+ for(var i=0,len=collection.length; inull");
+ } else if (vtype=="boolean"||vtype=="number") {
+ result.push("" + _value + " ");
+ } else if(vtype=="function"){
+ result.push("function() ");
+ } else {
+ result.push("\""+( !_inObject&&!_inArray?_value : _value.substring(0,35)+(_value.length>35?" ...":"") ).replace(/\n/g,"\\n").replace(/\s/g," ").replace(/>/g,">").replace(/");
+ }
+ }
+ // element
+ else if(isElement){
+
+ if(_value.nodeType==3)
+ result.push(d.highlight(_value.nodeValue));
+ else if(_inObject){
+ result.push(""+_value.nodeName.toLowerCase()+" ");
+ } else {
+ result.push("");
+
+ if(_inArray){
+ result.push(_value.nodeName.toLowerCase());
+ if(_value.getAttribute){
+ if(_value.getAttribute&&_value.getAttribute("id"))
+ result.push("#"+_value.getAttribute("id")+" ");
+ var elClass = _value.getAttribute(lib.env.ie?"className":"class")||"";
+ result.push(!elClass?"":"."+elClass.split(" ")[0]+" ");
+ }
+ result.push(" ");
+ } else {
+ result.push("<"+ _value.nodeName.toLowerCase());
+
+ if(_value.attributes){
+ for(var i=0,len=_value.attributes.length; i"+item.nodeName+"=\""+item.nodeValue+" \" ");
+ }
+ }
+
+ result.push(" > ");
+ }
+ }
+ }
+ // array, hash
+ else if(isArray||isHash){
+ if(isArray){
+ if(_inObject){
+ result.push("["+_value.length+"] ");
+ } else {
+ result.push("[ ");
+
+ for(var i=0,len=_value.length; i3){
+ result.push(", "+(len-4)+" More... ");
+ break;
+ }
+ result.push( (i > 0 ? ", " : "") + d.highlight(_value[i], false, true, true) );
+ }
+
+ result.push(" ] ");
+ }
+ } else if(_inObject){
+ result.push("Object ");
+ } else {
+ result.push("Object");
+ var i=0;
+ for(var key in _value){
+ var value = _value[key];
+ if((_inObject||_inArray)&&i>3){
+ result.push(" More... ");
+ break;
+ }
+ result.push(" "+key+"="+d.highlight(value,true));
+ i++;
+ }
+ result.push(" ");
+ }
+ } else {
+ result.push([""+_value+" "]);
+ }
+ } catch(e){
+ result.push("..");
+ }
+ return result.join("");
+ }
+ },
+ html:{
+ nIndex:"computedStyle",
+ current:null,
+ highlight:function(_element,_clear,_event){
+ with(firebug){
+ if(_element.firebugElement){
+ return;
+ }
+ if(_clear){
+ (env.isPopup&&window.opener||window).firebug.el.bgInspector.environment.addStyle({ "display":"none" });
+ return;
+ }
+ d.inspector.inspect(_element,true);
+ }
+ },
+ inspect:function(_element){
+ var map = [],
+ parentLayer,
+ t,
+ tagName,
+ parent = _element;
+ while (parent) {
+ map.push(parent);
+ if (parent == (firebug.env.isPopup ? window.opener: window).document.body) break;
+ parent = parent.parentNode;
+ }
+ map = map.reverse();
+ with(firebug) {
+ if (env.dIndex != "html") {
+ if (env.isPopup) {
+ window.opener.firebug.d.navigate("html");
+ } else {
+ firebug.d.navigate("html");
+ }
+ }
+ if (env.isPopup) {
+ window.opener.firebug.d.inspector.toggle(false);
+ } else {
+ firebug.d.inspector.toggle(false);
+ }
+ for (t = 0; t < el.left.html.container.child.get().length; t++) {
+ if (el.left.html.container.child.get()[t].childNodes[0].childNodes[1].childNodes[0].childNodes[0]) {
+ if (el.left.html.container.child.get()[t].childNodes[0].childNodes[1].childNodes[0].childNodes[0].innerText) {
+ tagName = el.left.html.container.child.get()[t].childNodes[0].childNodes[1].childNodes[0].childNodes[0].innerText;
+ } else {
+ tagName = el.left.html.container.child.get()[t].childNodes[0].childNodes[1].childNodes[0].childNodes[0].textContent;
+ }
+
+ if (/<html >").insert(parent);
+ };
+
+ for(var i=0; i<=len; i++){
+ if(i==len){
+ new lib.element("A").attribute.addClass("Block").update("</"+element.nodeName.toLowerCase()+" >").insert(container);
+ break;
+ }
+ var item = element.childNodes[i];
+
+ if (item.nodeType != 3){
+ var container = new lib.element().attribute.addClass("Block").insert(parent),
+ link = new lib.element("A").attribute.addClass("Link").insert(container),
+ spacer = new lib.element("SPAN").attribute.addClass("Spacer").update(" ").insert(link),
+ html = new lib.element("SPAN").attribute.addClass("Content").update(d.highlight(item)).insert(link),
+ subContainer = new lib.element("DIV").attribute.addClass("SubContainer").insert(container),
+ view = lib.util.Element.getView(item);
+
+ link.event.addListener("click", lib.util.Curry(d.html.openHtmlTree, window, item, subContainer, false));
+ link.event.addListener("mouseover", lib.util.Curry(d.html.highlight, window, item, false));
+ link.event.addListener("mouseout", lib.util.Curry(d.html.highlight, window, item, true));
+
+ returnParentVal = returnParentEl == item ? subContainer : returnParentVal;
+
+ if(d.html.current==null&&item==document.body){
+ link.attribute.addClass("Selected");
+ d.html.current = [item,link];
+ d.html.openHtmlTree(item,subContainer);
+ }
+
+ if(element.nodeName!="HEAD"&&element!=document.documentElement&&(view.visibility=="hidden"||view.display=="none")){
+ container.attribute.addClass("Unvisible");
+ };
+
+ if (item.childNodes){
+ var childLen = item.childNodes.length;
+ if (childLen == 1 && item.childNodes[0].nodeType == 3) {
+ html.child.add(document.createTextNode(item.childNodes[0].nodeValue.substring(0, 50)));
+ html.child.add(document.createTextNode(""));
+ html.child.add(new lib.element("span").attribute.addClass("Blue").update(item.nodeName.toLowerCase()).environment.getElement());
+ html.child.add(document.createTextNode(">"));
+ continue;
+ }
+ else
+ if (childLen > 0) {
+ link.attribute.addClass("Parent");
+ }
+ }
+ }
+ };
+ return returnParentVal;
+ }
+ },
+ openProperties:function(){
+ with(firebug){
+ var index = d.html.nIndex;
+ var node = d.html.current[0];
+ d.clean(el.right.html.content);
+ var str = "";
+ switch(index){
+ case "computedStyle":
+ var property = ["opacity","filter","azimuth","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderCollapse","borderColor","borderSpacing","borderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","cssFloat","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginTop","marginRight","marginBottom","marginLeft","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"].sort();
+ var view = document.defaultView?document.defaultView.getComputedStyle(node,null):node.currentStyle;
+ for(var i=0,len=property.length; i"+item+"
"+d.highlight(view[item])+"
";
+ }
+ el.right.html.content.update(str);
+ break;
+ case "dom":
+ d.dom.open(node,el.right.html.content,lib.env.ie);
+ break;
+ }
+ }
+ }
+ },
+ inspector:{
+ enabled:false,
+ el:null,
+ inspect:function(_element,_bgInspector){
+ with(firebug){
+ var pos = (env.isPopup && window.opener.firebug || window.firebug).lib.util.Element.getPosition(_element);
+
+ (env.isPopup && window.opener.firebug || window.firebug).el[_bgInspector&&"bgInspector"||"borderInspector"].environment.addStyle({
+ "width":_element.offsetWidth+"px", "height":_element.offsetHeight+"px",
+ "top":pos.offsetTop-(_bgInspector?0:2)+"px", "left":pos.offsetLeft-(_bgInspector?0:2)+"px",
+ "display":"block"
+ });
+
+ if(!_bgInspector){
+ d.inspector.el = _element;
+ }
+ };
+ },
+ toggle:function(_absoluteValue,_event){
+ with (firebug) {
+ if(_absoluteValue==d.inspector.enabled)
+ return;
+ d.inspector.enabled = _absoluteValue!=undefined&&!_absoluteValue.clientX?_absoluteValue:!d.inspector.enabled;
+ el.button.inspect.attribute[(d.inspector.enabled ? "add" : "remove") + "Class"]("Enabled");
+ if(d.inspector.enabled==false){
+ el.borderInspector.environment.addStyle({ "display":"none" });
+ d.inspector.el = null;
+ } else if(lib.env.dIndex!="html") {
+ if (env.popupWin) {
+ env.popupWin.firebug.d.navigate("html");
+ } else {
+ d.navigate("html");
+ }
+ }
+ }
+ }
+ },
+ scripts:{
+ index:-1,
+ lineNumbers:false,
+ open:function(_index){
+ with(firebug){
+ d.scripts.index = _index;
+ el.left.scripts.container.update("");
+ var script = document.getElementsByTagName("script")[_index],uri = script.src||document.location.href,source,dmn=getDomain(uri);
+
+ if(uri.indexOf("http:\/\/")>-1&&dmn!=document.domain&&"www."+dmn!=document.domain){
+ el.left.scripts.container.update("Access to restricted URI denied ");
+ return;
+ }
+
+ if(uri!=document.location.href){
+ source = env.cache[uri]||lib.xhr.get(uri).responseText;
+ env.cache[uri] = source;
+ } else
+ source = script.innerHTML;
+ source = source.replace(/\n|\t|<|>/g,function(_ch){
+ return ({"<":"<",">":">","\t":" ","\n":" "})[_ch];
+ });
+
+ if (!d.scripts.lineNumbers)
+ el.left.scripts.container.child.add(
+ new lib.element("DIV").attribute.addClass("CodeContainer").update(source)
+ );
+ else {
+ source = source.split(" ");
+ for (var i = 0; i < source.length; i++) {
+ el.left.scripts.container.child.add(new lib.element("DIV").child.add(new lib.element("DIV").attribute.addClass("LineNumber").update(i + 1), new lib.element("DIV").attribute.addClass("Code").update(" " + source[i]), new lib.element("DIV").attribute.addClass('Clear')));
+ };
+ };
+ }
+ },
+ toggleLineNumbers:function(){
+ with(firebug){
+ d.scripts.lineNumbers = !d.scripts.lineNumbers;
+ el.button.scripts.lineNumbers.attribute[(d.scripts.lineNumbers ? "add" : "remove") + "Class"]("Enabled");
+ d.scripts.open( d.scripts.index );
+ }
+ },
+ refresh:function(){
+ with(firebug){
+ el.button.scripts.selectbox.clean();
+ var collection = (env.isPopup&&window.parent||window).document.getElementsByTagName("script");
+ for(var i=0,len=collection.length; i "))
+ }
+ }
+ },
+ xhr:{
+ objects:[],
+ addObject:function(){
+ with(firebug){
+ for(var i=0,len=arguments.length; i0&&_object[0]!=undefined&&_object[len-1]!=undefined){
+ return true;
+ } else {
+ for(var key in _object){
+ if(key!="item"&&key!="length"&&key!="setNamedItemNS"&&key!="setNamedItem"&&key!="getNamedItem"&&key!="removeNamedItem"&&key!="getNamedItemNS"&&key!="removeNamedItemNS"&&key!="tags"){
+ return false;
+ }
+ }
+ return true
+ };
+ },
+ IsHash:function(_object){
+ return _object && typeof _object=="object"&&(_object==window||_object instanceof Object)&&!_object.nodeName&&!pi.util.IsArray(_object)
+ },
+ Init:[],
+ AddEvent: function(_element,_eventName,_fn,_useCapture){
+ _element[pi.env.ie?"attachEvent":"addEventListener"]((pi.env.ie?"on":"")+_eventName,_fn,_useCapture||false);
+ return pi.util.Curry(pi.util.AddEvent,this,_element);
+ },
+ RemoveEvent: function(_element,_eventName,_fn,_useCapture){
+ _element[pi.env.ie?"detachEvent":"removeEventListener"]((pi.env.ie?"on":"")+_eventName,_fn,_useCapture||false);
+ return pi.util.Curry(pi.util.RemoveEvent,this,_element);
+ },
+ Element:{
+ addClass:function(_element,_class){
+ if( !pi.util.Element.hasClass(_element,_class) )
+ pi.util.Element.setClass(_element, pi.util.Element.getClass(_element) + " " + _class );
+ },
+ getClass:function(_element){
+ return _element.getAttribute(pi.env.ie?"className":"class")||"";
+ },
+ hasClass:function(_element,_class){
+ return pi.util.Array.indexOf(pi.util.Element.getClass(_element).split(" "),_class)>-1;
+ },
+ removeClass:function(_element,_class){
+ if( pi.util.Element.hasClass(_element,_class) ){
+ var names = pi.util.Element.getClass(_element,_class).split(" ");
+ pi.util.Element.setClass(
+ _element,
+ pi.util.Array.remove(names,pi.util.Array.indexOf(names,_class)).join(" ")
+ );
+ }
+ },
+ setClass:function(_element,_value){
+ _element.setAttribute(pi.env.ie?"className":"class", _value );
+ },
+ toggleClass:function(){
+ if(pi.util.Element.hasClass.apply(this,arguments))
+ pi.util.Element.removeClass.apply(this,arguments);
+ else
+ pi.util.Element.addClass.apply(this,arguments);
+ },
+ getOpacity:function(_styleObject){
+ var styleObject = _styleObject;
+ if(!pi.env.ie)
+ return styleObject["opacity"];
+
+ var alpha = styleObject["filter"].match(/opacity\=(\d+)/i);
+ return alpha?alpha[1]/100:1;
+ },
+ setOpacity:function(_element,_value){
+ if(!pi.env.ie)
+ return pi.util.Element.addStyle(_element,{ "opacity":_value });
+ _value*=100;
+ pi.util.Element.addStyle(_element,{ "filter":"alpha(opacity="+_value+")" });
+ return this._parent_;
+ },
+ getPosition:function(_element){
+ var parent = _element,offsetLeft = document.body.offsetLeft, offsetTop = document.body.offsetTop, view = pi.util.Element.getView(_element);
+ while(parent&&parent!=document.body&&parent!=document.firstChild){
+ offsetLeft +=parseInt(parent.offsetLeft);
+ offsetTop += parseInt(parent.offsetTop);
+ parent = parent.offsetParent;
+ };
+ return {
+ "bottom":view["bottom"],
+ "clientLeft":_element.clientLeft,
+ "clientTop":_element.clientTop,
+ "left":view["left"],
+ "marginTop":view["marginTop"],
+ "marginLeft":view["marginLeft"],
+ "offsetLeft":offsetLeft,
+ "offsetTop":offsetTop,
+ "position":view["position"],
+ "right":view["right"],
+ "top":view["top"],
+ "zIndex":view["zIndex"]
+ };
+ },
+ getSize:function(_element){
+ var view = pi.util.Element.getView(_element);
+ return {
+ "height":view["height"],
+ "clientHeight":_element.clientHeight,
+ "clientWidth":_element.clientWidth,
+ "offsetHeight":_element.offsetHeight,
+ "offsetWidth":_element.offsetWidth,
+ "width":view["width"]
+ }
+ },
+ addStyle:function(_element,_style){
+ for(var key in _style){
+ key = key=="float"?pi.env.ie?"styleFloat":"cssFloat":key;
+ if (key == "opacity" && pi.env.ie) {
+ pi.util.Element.setOpacity(_element,_style[key]);
+ continue;
+ }
+ try {
+ _element.style[key] = _style[key];
+ }catch(e){}
+ }
+ },
+ getStyle:function(_element,_property){
+ _property = _property=="float"?pi.env.ie?"styleFloat":"cssFloat":_property;
+ if(_property=="opacity"&&pi.env.ie)
+ return pi.util.Element.getOpacity(_element.style);
+ return typeof _property=="string"?_element.style[_property]:_element.style;
+ },
+ getValue:function(_element){
+ switch(_element.nodeName.toLowerCase()){
+ case "input":
+ case "textarea":
+ return _element.value;
+ case "select":
+ return _element.options[_element.selectedIndex].value;
+ default:
+ return _element.innerHTML;
+ break;
+ }
+ },
+ getView:function(_element,_property){
+ var view = document.defaultView?document.defaultView.getComputedStyle(_element,null):_element.currentStyle;
+ _property = _property=="float"?pi.env.ie?"styleFloat":"cssFloat":_property;
+ if(_property=="opacity"&&pi.env.ie)
+ return pi.util.Element.getOpacity(_element,view);
+ return typeof _property=="string"?view[_property]:view;
+ }
+ },
+ Hash: {
+ clone:function(_hash,_undeep){
+ var tmp = {};
+ for(var key in _hash){
+ if( !_undeep&&pi.util.IsArray( _hash[key] ) ){
+ tmp[key] = pi.util.Array.clone( _hash[key] );
+ } else if( !_undeep&&pi.util.IsHash( _hash[key] ) ){
+ tmp[ key ] = pi.util.Hash.clone(_hash[key]);
+ } else {
+ tmp[key] = _hash[key];
+ }
+ }
+ return tmp;
+ },
+ merge:function(_hash,_source,_undeep){
+ for(var key in _source){
+ var value = _source[key];
+ if (!_undeep&&pi.util.IsArray(_source[key])) {
+ if(pi.util.IsArray( _hash[key] )){
+ Array.prototype.push.apply( _source[key], _hash[key] )
+ }
+ else
+ value = pi.util.Array.clone(_source[key]);
+ }
+ else if (!_undeep&&pi.util.IsHash(_source[key])) {
+ if (pi.util.IsHash(_hash[key])) {
+ value = pi.util.Hash.merge(_hash[key], _source[key]);
+ } else {
+ value = pi.util.Hash.clone( _source[key] );
+ }
+ } else if( _hash[key] )
+ value = _hash[ key ];
+ _hash[key] = value;
+ };
+ return _hash;
+ }
+ },
+ String:{
+ format:function(_str){
+ var values = Array.prototype.slice.call(arguments,1);
+ return _str.replace(/\{(\d)\}/g,function(){
+ return values[arguments[1]];
+ })
+ }
+ },
+ GetViewport:function(){
+ return {
+ height:document.documentElement.clientHeight||document.body.clientHeight,
+ width:document.documentElement.clientWidth||document.body.clientWidth
+ }
+ }
+ };
+
+ pi.base = function(){
+ this.body = {};
+ this.init = null;
+
+ this.build = function(_skipClonning){
+ var base = this, skipClonning = _skipClonning||false, _private = {},
+ fn = function(){
+ var _p = pi.util.Hash.clone(_private);
+ if(!skipClonning){
+ for(var key in this){
+ if(pi.util.IsArray( this[ key ] ) ){
+ this[key] = pi.util.Array.clone( this[key] );
+ } else
+ if( pi.util.IsHash(this[key]) ){
+ this[key] = pi.util.Hash.clone(
+ this[ key ],
+ function(_key,_object){
+ this[ _key ]._parent_ = this;
+ }
+ );
+ //this[key]._parent_ = this;
+ }
+ }
+ };
+ base.createAccessors( _p, this );
+ if(base.init)
+ return base.init.apply(this,arguments);
+ return this;
+ };
+ this.movePrivateMembers(this.body,_private);
+ if(this.init){
+ fn["$Init"] = this.init;
+ };
+ fn.prototype = this.body;
+ return fn;
+ };
+
+ this.createAccessors = function(_p, _branch){
+ var getter = function(_property){ return this[_property]; },
+ setter = function(_property,_value){ this[_property] = _value; return _branch._parent_||_branch; };
+
+ for (var name in _p) {
+ var isPrivate = name.substring(0, 1) == "_", title = name.substring(1, 2).toUpperCase() + name.substring(2);
+
+ if (isPrivate) {
+ _branch[(_branch["get" + title]?"_":"")+"get" + title] = pi.util.Curry(getter,_p,name);
+ _branch[(_branch["set" + title]?"_":"")+"set" + title] = pi.util.Curry(setter,_p,name);
+ }
+ else
+ if (pi.util.IsHash(_p[name])){
+ _branch[name]._parent_ = _branch;
+ if(!_branch[name])
+ _branch[name] = {};
+ this.createAccessors(_p[name], _branch[name]);
+ }
+ };
+ };
+
+ this.movePrivateMembers = function(_object, _branch){
+ for (var name in _object) {
+ var isPrivate = name.substring(0, 1) == "_";
+
+ if (isPrivate) {
+ _branch[name] = _object[name];
+ delete _object[name];
+ }
+ else
+ if (pi.util.IsHash(_object[name])){
+ _branch[name] = {};
+ this.movePrivateMembers(_object[name], _branch[name]);
+ }
+ };
+ };
+ };
+
+ pi.element = new pi.base;
+ pi.element.init = function(_val){
+ this.environment.setElement(
+ typeof _val=="string"||!_val?
+ document.createElement(_val||"DIV"):
+ _val
+ );
+ return this;
+ };
+
+ pi.element.body = {
+ "addStyle":function(){
+ return this.environment.addStyle.apply(this.environment,arguments);
+ },
+ "clean":function(){
+ var childs = this.child.get();
+ while(childs.length){
+ childs[0].parentNode.removeChild(childs[0]);
+ }
+ },
+ "clone":function(_deep){
+ return this.environment.getElement().cloneNode(_deep);
+ },
+ "insert":function(_element){
+ _element = _element.environment?_element.environment.getElement():_element;
+ _element.appendChild(this.environment.getElement());
+ return this;
+ },
+ "insertAfter":function(_referenceElement){ _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
+ _referenceElement.nextSibling?this.insertBefore(_referenceElement.nextSibling):this.insert(_referenceElement.parentNode);
+ return this;
+ },
+ "insertBefore":function(_referenceElement){
+ _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
+ _referenceElement.parentNode.insertBefore(this.environment.getElement(),_referenceElement);
+ return this;
+ },
+ "query":function(_expression,_resultType,namespaceResolver,_result){
+ return pi.xpath(_expression,_resultType||"ORDERED_NODE_SNAPSHOT_TYPE",this.environment.getElement(),_namespaceResolver,_result);
+ },
+ "remove":function(){
+ if (this.environment.getParent()) {
+ this.environment.getParent().removeChild(this.environment.getElement());
+ }
+ },
+ "update":function(_value){
+ this.element[this.element.nodeName.toLowerCase()=="textarea"||this.element.nodeName.toLowerCase()=="input"?"value":"innerHTML"]=_value;
+ return this;
+ },
+ "attribute":{
+ "getAll":function(){
+ return this._parent_.environment.getElement().attributes;
+ },
+ "clear":function(_name){
+ this.set(_name,"");
+ return this._parent_;
+ },
+ "get":function(_name){
+ return this._parent_.environment.getElement().getAttribute(_name);
+ },
+ "has":function(_name){
+ return pi.env.ie?(this.get(_name)!=null):this._parent_.environment.getElement().hasAttribute(_name);
+ },
+ "remove":function(_name){
+ this._parent_.environment.getElement().removeAttribute(_name);
+ return this._parent_;
+ },
+ "set":function(_name,_value){
+ this._parent_.environment.getElement().setAttribute(_name,_value);
+ return this._parent_;
+ },
+ "addClass":function(_classes){
+ for(var i=0,len=arguments.length; i-1){
+ callback[i].fn.apply(this);
+ }
+ }
+ }
+ };
+ pi.xhr = pi.xhr.build();
+
+ /*
+ * xml.xhr.get
+ */
+
+ pi.xhr.get = function(_url,_returnPiObject){
+ var request = new pi.xhr();
+ request.environment.setAsync(false);
+ request.environment.setUrl(_url);
+ request.send();
+ return _returnPiObject?request:request.environment.getApi();
+ };
+
+ /*
+ * registering onload event for init functions
+ */
+ pi.util.AddEvent(
+ pi.env.ie?window:document,
+ pi.env.ie?"load":"DOMContentLoaded",
+ function(){
+ for(var i=0,len=pi.util.Init.length; i)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;ba ";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML=" ";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l ";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=" ";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="
";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"+d+">"},F={option:[1,""," "],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/
+
+
+
+
+
+
+
+
+
+