summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2010-12-24 16:12:24 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2010-12-24 16:12:24 (GMT)
commitfe6ff0cfd058b1b09bf389dd2c20be317183e094 (patch)
tree2e3f5d0757e53645fc902d0a87aa44dfd31d2d4d
parent0014470c309dccbc2ac72c527391039900b8cf3d (diff)
downloadDoxygen-fe6ff0cfd058b1b09bf389dd2c20be317183e094.zip
Doxygen-fe6ff0cfd058b1b09bf389dd2c20be317183e094.tar.gz
Doxygen-fe6ff0cfd058b1b09bf389dd2c20be317183e094.tar.bz2
Release-1.7.2-20101224
-rw-r--r--Doxyfile2
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--addon/doxywizard/doxywizard.qrc1
-rw-r--r--addon/doxywizard/wizard.cpp40
-rw-r--r--addon/doxywizard/wizard.h17
-rwxr-xr-xconfigure2
-rw-r--r--doc/commands.doc9
-rw-r--r--doc/config.doc10
-rw-r--r--doc/maintainers.txt1
-rw-r--r--qtools/Doxyfile16
-rw-r--r--src/classdef.cpp34
-rw-r--r--src/code.l10
-rw-r--r--src/config.l1
-rw-r--r--src/config.xml18
-rw-r--r--src/configoptions.cpp19
-rw-r--r--src/defargs.l23
-rw-r--r--src/definition.cpp40
-rw-r--r--src/dirdef.cpp74
-rw-r--r--src/dot.cpp4
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp72
-rw-r--r--src/doxygen.css74
-rw-r--r--src/doxygen_css.h74
-rw-r--r--src/eclipsehelp.cpp10
-rw-r--r--src/filedef.cpp49
-rw-r--r--src/fortranscanner.l199
-rw-r--r--src/ftvhelp.cpp573
-rw-r--r--src/ftvhelp.h37
-rw-r--r--src/groupdef.cpp17
-rw-r--r--src/htmlgen.cpp535
-rw-r--r--src/htmlgen.h12
-rw-r--r--src/htmlhelp.cpp2
-rw-r--r--src/index.cpp592
-rw-r--r--src/index.h4
-rw-r--r--src/instdox.cpp8
-rw-r--r--src/jquery.js50
-rw-r--r--src/jquery_js.h50
-rw-r--r--src/latexgen.cpp4
-rw-r--r--src/latexgen.h2
-rw-r--r--src/layout.cpp4
-rw-r--r--src/libdoxygen.pro.in4
-rw-r--r--src/libdoxygen.t15
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp26
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/memberlist.cpp20
-rw-r--r--src/namespacedef.cpp25
-rw-r--r--src/navtree.css123
-rw-r--r--src/navtree.js245
-rw-r--r--src/navtree_css.h123
-rw-r--r--src/navtree_js.h245
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.h4
-rw-r--r--src/pagedef.cpp25
-rw-r--r--src/resize.js81
-rw-r--r--src/resize_js.h81
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/search.php13
-rw-r--r--src/search_php.h13
-rw-r--r--src/translator_cn.h77
-rw-r--r--src/util.cpp349
-rw-r--r--src/util.h12
63 files changed, 3190 insertions, 998 deletions
diff --git a/Doxyfile b/Doxyfile
index c56f940..c214224 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -190,7 +190,7 @@ ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
USE_INLINE_TREES = YES
TREEVIEW_WIDTH = 250
-EXT_LINKS_IN_WINDOW = YES
+EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
diff --git a/INSTALL b/INSTALL
index 7adabd1..ef7908f 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.7.2-20101118
+DOXYGEN Version 1.7.2-20101224
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (18 November 2010)
+Dimitri van Heesch (24 December 2010)
diff --git a/README b/README
index 79dbd9c..213685f 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.7.2_20101118
+DOXYGEN Version 1.7.2_20101224
Please read INSTALL for compilation instructions.
@@ -26,4 +26,4 @@ forum.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (18 November 2010)
+Dimitri van Heesch (dimitri@stack.nl) (24 December 2010)
diff --git a/addon/doxywizard/doxywizard.qrc b/addon/doxywizard/doxywizard.qrc
index dd23c5d..88316ed 100644
--- a/addon/doxywizard/doxywizard.qrc
+++ b/addon/doxywizard/doxywizard.qrc
@@ -6,5 +6,6 @@
<file>images/file.png</file>
<file>images/folder.png</file>
<file>images/refresh.png</file>
+ <file>images/tunecolor.png</file>
</qresource>
</RCC>
diff --git a/addon/doxywizard/wizard.cpp b/addon/doxywizard/wizard.cpp
index b756d0f..bdccd81 100644
--- a/addon/doxywizard/wizard.cpp
+++ b/addon/doxywizard/wizard.cpp
@@ -117,6 +117,32 @@ static void updateStringOption(
//==========================================================================
+TuneColorDialog::TuneColorDialog(QWidget *parent) : QDialog(parent)
+{
+ setWindowTitle(tr("Tune the color of the HTML output"));
+ QGridLayout *layout = new QGridLayout(this);
+ m_image = new QImage(QString::fromAscii(":/images/tunecolor.png"));
+ m_imageLab = new QLabel;
+ m_imageLab->setPixmap(QPixmap::fromImage(*m_image));
+ layout->addWidget(new QLabel(tr("Example output: use the sliders to change")),0,0);
+ layout->addWidget(m_imageLab,1,0);
+ QHBoxLayout *buttonsLayout = new QHBoxLayout;
+
+ QPushButton *okButton = new QPushButton(tr("Ok"));
+ connect(okButton,SIGNAL(clicked()),SLOT(accept()));
+ okButton->setDefault(true);
+ QPushButton *cancelButton = new QPushButton(tr("Cancel"));
+ connect(cancelButton,SIGNAL(clicked()),SLOT(reject()));
+
+ buttonsLayout->addStretch();
+ buttonsLayout->addWidget(okButton);
+ buttonsLayout->addWidget(cancelButton);
+ layout->addLayout(buttonsLayout,5,0);
+
+}
+
+//==========================================================================
+
Step1::Step1(Wizard *wizard,const QHash<QString,Input*> &modelData) : m_wizard(wizard), m_modelData(modelData)
{
QVBoxLayout *layout = new QVBoxLayout(this);
@@ -477,9 +503,14 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
m_htmlOptionsGroup->addButton(r, 2);
// GENERATE_HTMLHELP
vbox->addWidget(r);
- m_searchEnabled=new QCheckBox(tr("With search function (requires PHP enabled web server)"));
+ m_searchEnabled=new QCheckBox(tr("With search function"));
vbox->addWidget(m_searchEnabled);
// SEARCH_ENGINE
+ QHBoxLayout *hbox = new QHBoxLayout;
+ m_tuneColor=new QPushButton(tr("Change color..."));
+ hbox->addWidget(m_tuneColor);
+ hbox->addStretch(1);
+ vbox->addLayout(hbox);
m_htmlOptions->setLayout(vbox);
m_htmlOptions->setChecked(true);
}
@@ -531,6 +562,13 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
SLOT(setHtmlOptions(int)));
connect(m_texOptionsGroup,SIGNAL(buttonClicked(int)),
SLOT(setLatexOptions(int)));
+ connect(m_tuneColor,SIGNAL(clicked()),SLOT(tuneColorDialog()));
+}
+
+void Step3::tuneColorDialog()
+{
+ TuneColorDialog tuneColor(this);
+ tuneColor.exec();
}
void Step3::setHtmlEnabled(bool b)
diff --git a/addon/doxywizard/wizard.h b/addon/doxywizard/wizard.h
index d482db9..94cccc2 100644
--- a/addon/doxywizard/wizard.h
+++ b/addon/doxywizard/wizard.h
@@ -17,6 +17,7 @@
#include <QSplitter>
#include <QHash>
+#include <QDialog>
class Input;
class QTreeWidget;
@@ -29,12 +30,26 @@ class QRadioButton;
class QGroupBox;
class QButtonGroup;
class Wizard;
+class QImage;
+class QLabel;
enum OptLang { Lang_Cpp, Lang_C, Lang_Java, Lang_CS };
enum HtmlStyle { HS_Plain, HS_TreeView, HS_CHM };
enum TexStyle { TS_PDFHyper, TS_PDF, TS_PS };
enum DiagramMode { DM_None, DM_Builtin, DM_Dot };
+class TuneColorDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ TuneColorDialog(QWidget *parent=0);
+
+ private:
+ QImage *m_image;
+ QLabel *m_imageLab;
+};
+
class Step1 : public QWidget
{
Q_OBJECT
@@ -103,6 +118,7 @@ class Step3 : public QWidget
void setSearchEnabled(int);
void setHtmlOptions(int);
void setLatexOptions(int);
+ void tuneColorDialog();
private:
QGroupBox *m_texOptions;
@@ -115,6 +131,7 @@ class Step3 : public QWidget
QCheckBox *m_rtfEnabled;
QCheckBox *m_xmlEnabled;
QCheckBox *m_searchEnabled;
+ QPushButton *m_tuneColor;
Wizard *m_wizard;
const QHash<QString,Input *> &m_modelData;
};
diff --git a/configure b/configure
index f2e9d00..c76413f 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20101118
+doxygen_version_mmn=20101224
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
diff --git a/doc/commands.doc b/doc/commands.doc
index a954d1a..40b800d 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -189,6 +189,7 @@ documentation:
\refitem cmdhash \\\#
\refitem cmdperc \\\%
\refitem cmdquot \\\"
+\refitem cmddcolon \\\::
\endsecreflist
The following subsections provide a list of all commands that are recognized by
@@ -2702,6 +2703,14 @@ class Receiver
to indicate an unformatted text fragment.
<hr>
+\section cmddcolon \\::
+
+ \addindex \\\::
+ This command write a double colon (\::) to the output. This
+ character sequence has to be escaped in some cases, because it is used
+ to ref to documented entities.
+
+<hr>
\htmlonly <center> \endhtmlonly
<h2>
\htmlonly --- \endhtmlonly
diff --git a/doc/config.doc b/doc/config.doc
index 23d3b54..e9bd647 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -801,6 +801,16 @@ function's detailed documentation block.
putting \ref cmddeprecated "\\deprecated"
commands in the documentation.
+\anchor cfg_strict_proto_matching
+<dt>\c STRICT_PROTO_MATCHING <dd>
+ \addindex STRICT_PROTO_MATCHING
+ If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+ do proper type resolution of all parameters of a function it will reject a
+ match between the prototype and the implementation of a member function even
+ if there is only one candidate or it is obvious which candidate to choose
+ by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen
+ will still accept a match between prototype and implementation in such cases.
+
\anchor cfg_generate_todolist
<dt>\c GENERATE_TODOLIST <dd>
\addindex GENERATE_TODOLIST
diff --git a/doc/maintainers.txt b/doc/maintainers.txt
index 2205119..f909ba3 100644
--- a/doc/maintainers.txt
+++ b/doc/maintainers.txt
@@ -30,6 +30,7 @@ Maximiliano Pin: max dot pin at bitroit dot com
Albert Mora: [unreachable] amora at iua dot upf dot es
TranslatorChinese
+Lang Yang: lian dot yang dot cn at gmail dot com
Li Daobing: lidaobing at gmail dot com
Wei Liu: liuwei at asiainfo dot com
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index bf28583..9e2a9f4 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.6.3
+# Doxyfile 1.7.2
#---------------------------------------------------------------------------
# Project related configuration options
@@ -62,6 +62,7 @@ SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
@@ -104,6 +105,7 @@ IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
@@ -131,9 +133,9 @@ HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_COLORSTYLE_HUE = 220
-HTML_COLORSTYLE_SAT = 80
+HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
-HTML_TIMESTAMP = NO
+HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = YES
@@ -165,6 +167,9 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_RELPATH = http://www.mathjax.org/mathjax
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
@@ -241,10 +246,10 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
+CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = YES
+HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = FreeSans.ttf
DOT_FONTSIZE = 10
@@ -263,6 +268,7 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
+MSCFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = YES
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a924dd6..355763d 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1434,6 +1434,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
// write all documentation for this class
void ClassDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString pageType = " ";
@@ -1459,12 +1460,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
m_impl->tempArgs != 0);
}
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,TRUE);
- if (getOuterScope()!=Doxygen::globalScope)
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);
+ if (!generateTreeView)
{
- writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
@@ -1621,8 +1625,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
}
+
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
- endFile(ol);
+ endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
@@ -1730,14 +1741,23 @@ void ClassDef::writeMemberList(OutputList &ol)
{
static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
if (m_impl->allMemberNameInfoSDict==0 || cOpt) return;
// only for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString memListFile = getMemberListFileName();
- startFile(ol,memListFile,memListFile,
- theTranslator->trMemberList(),HLI_ClassVisible);
+ startFile(ol,memListFile,memListFile,theTranslator->trMemberList(),
+ HLI_ClassVisible,!generateTreeView,getOutputFileBase());
+ if (!generateTreeView)
+ {
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
+ }
startTitle(ol,0);
ol.parseText(displayName()+" "+theTranslator->trMemberList());
endTitle(ol,0,0);
diff --git a/src/code.l b/src/code.l
index 82f807e..b69f216 100644
--- a/src/code.l
+++ b/src/code.l
@@ -1890,8 +1890,14 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
bool ambig;
bool found=FALSE;
FileDef *fd=0;
- //printf("looking for include %s\n",yytext);
- if ((fd=findFileDef(Doxygen::inputNameDict,yytext,ambig)) &&
+ QCString absPath = yytext;
+ if (g_sourceFileDef && QDir::isRelativePath(absPath))
+ {
+ absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
+ }
+
+ //printf("looking for include %s -> %s\n",yytext,absPath.data());
+ if ((fd=findFileDef(Doxygen::inputNameDict,absPath,ambig)) &&
fd->isLinkable())
{
if (ambig) // multiple input files match the name
diff --git a/src/config.l b/src/config.l
index 532b1c4..30ed8dc 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1303,6 +1303,7 @@ void Config::check()
filePatternList.append("*.py");
filePatternList.append("*.f90");
filePatternList.append("*.f");
+ filePatternList.append("*.for");
filePatternList.append("*.vhd");
filePatternList.append("*.vhdl");
if (portable_fileSystemIsCaseSensitive())
diff --git a/src/config.xml b/src/config.xml
index d7d4669..e9cd4a7 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -15,6 +15,17 @@ The PROJECT_NUMBER tag can be used to enter a project or revision number.
This could be handy for archiving the generated documentation or
if some version control system is used.
' defval=''/>
+ <option type='string' id='PROJECT_BRIEF' format='string' docs='
+Using the PROJECT_BRIEF tag one can provide an optional one line description
+for a project that appears at the top of each page and should give viewer
+a quick idea about the purpose of the project. Keep the description short.
+' defval=''/>
+ <option type='string' id='PROJECT_LOGO' format='file' docs='
+With the PROJECT_LOGO tag one can specify an logo or icon that is
+included in the documentation. The maximum height of the logo should not
+exceed 55 pixels and the maximum width should not exceed 200 pixels.
+Doxygen will copy the logo to the output directory.
+' defval=''/>
<option type='string' id='OUTPUT_DIRECTORY' format='dir' docs='
The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
base path where the generated documentation will be put.
@@ -565,7 +576,7 @@ and *.h) to filter out the source-files in the directories. If left
blank the following patterns are tested:
*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-*.f90 *.f *.vhd *.vhdl
+*.f90 *.f *.for *.vhd *.vhdl
'>
<value name='*.c'/>
<value name='*.cc'/>
@@ -596,6 +607,7 @@ blank the following patterns are tested:
<value name='*.py'/>
<value name='*.f90'/>
<value name='*.f'/>
+ <value name='*.for'/>
<value name='*.vhd'/>
<value name='*.vhdl'/>
</option>
@@ -666,7 +678,7 @@ input file. Doxygen will then use the output that the filter program writes
to standard output. If FILTER_PATTERNS is specified, this tag will be
ignored.
' defval=''/>
- <option type='list' id='FILTER_PATTERNS' format='file' docs='
+ <option type='list' id='FILTER_PATTERNS' format='string' docs='
The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
basis. Doxygen will compare the file name with each pattern and apply the
filter if there is a match. The filters are a list of the form:
@@ -680,7 +692,7 @@ If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
INPUT_FILTER) will be used to filter the input files when producing source
files to browse (i.e. when SOURCE_BROWSER is set to YES).
' defval='0'/>
- <option type='list' id='FILTER_SOURCE_PATTERNS' format='file' docs='
+ <option type='list' id='FILTER_SOURCE_PATTERNS' format='string' docs='
The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
pattern. A pattern will override the setting for FILTER_PATTERN (if any)
and it is also possible to disable source filtering for a specific pattern
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index d3d4aa4..99c33c3 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -44,6 +44,20 @@ void addConfigOptions(Config *cfg)
);
//----
cs = cfg->addString(
+ "PROJECT_BRIEF",
+ "Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short."
+ );
+ //----
+ cs = cfg->addString(
+ "PROJECT_LOGO",
+ "With the PROJECT_LOGO tag one can specify an logo or icon that is\n"
+ "included in the documentation. The maximum height of the logo should not\n"
+ "exceed 55 pixels and the maximum width should not exceed 200 pixels.\n"
+ "Doxygen will copy the logo to the output directory."
+ );
+ cs->setWidgetType(ConfigString::File);
+ //----
+ cs = cfg->addString(
"OUTPUT_DIRECTORY",
"The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)\n"
"base path where the generated documentation will be put.\n"
@@ -811,7 +825,7 @@ void addConfigOptions(Config *cfg)
"blank the following patterns are tested:\n"
"*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh\n"
"*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py\n"
- "*.f90 *.f *.vhd *.vhdl"
+ "*.f90 *.f *.for *.vhd *.vhdl"
);
cl->addValue("*.c");
cl->addValue("*.cc");
@@ -842,6 +856,7 @@ void addConfigOptions(Config *cfg)
cl->addValue("*.py");
cl->addValue("*.f90");
cl->addValue("*.f");
+ cl->addValue("*.for");
cl->addValue("*.vhd");
cl->addValue("*.vhdl");
//----
@@ -945,7 +960,6 @@ void addConfigOptions(Config *cfg)
"info on how filters are used. If FILTER_PATTERNS is empty or if\n"
"non of the patterns match the file name, INPUT_FILTER is applied."
);
- cl->setWidgetType(ConfigList::File);
//----
cb = cfg->addBool(
"FILTER_SOURCE_FILES",
@@ -964,7 +978,6 @@ void addConfigOptions(Config *cfg)
"FILTER_SOURCE_FILES is enabled."
);
cl->addDependency("FILTER_SOURCE_FILES");
- cl->setWidgetType(ConfigList::File);
//---------------------------------------------------------------------------
cfg->addInfo("Source Browser","configuration options related to source browsing");
//---------------------------------------------------------------------------
diff --git a/src/defargs.l b/src/defargs.l
index 048fafd..048d6f6 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -275,11 +275,10 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
int i=l-1;
while (i>=0 && (isspace((uchar)g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
- //printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
- // a->type.data(),a->name.data(),i,l);
+ // a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
@@ -300,24 +299,28 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
- a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
+ a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
// if the type becomes a type specifier only then we make a mistake
// and need to correct it to avoid seeing a nameless parameter
// "struct A" as a parameter with type "struct" and name "A".
int sv=0;
- if (a->type.left(6)=="const ") sv=6;
- else if (a->type.left(8)=="volatile ") sv=9;
- if (a->type.mid(sv)=="struct" ||
- a->type.mid(sv)=="union" ||
- a->type.mid(sv)=="class" ||
- a->type.mid(sv)=="typename" ||
- a->type=="const" || a->type=="volatile")
+ if (a->type.left(6)=="const ") sv=6;
+ else if (a->type.left(9)=="volatile ") sv=9;
+
+ if (a->type.mid(sv)=="struct" ||
+ a->type.mid(sv)=="union" ||
+ a->type.mid(sv)=="class" ||
+ a->type.mid(sv)=="typename" ||
+ a->type=="const" ||
+ a->type=="volatile"
+ )
{
a->type = a->type + " " + a->name;
a->name.resize(0);
}
+ //printf(" --> a->type='%s'\n",a->type.data());
}
else // assume only the type was specified, try to determine name later
{
diff --git a/src/definition.cpp b/src/definition.cpp
index e4cf2c8..5c62632 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -575,6 +575,7 @@ static bool readCodeFragment(const char *fileName,
char cn=0;
while (lineNr<=endLine && !feof(f) && !found)
{
+ int pc=0;
while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
{
//printf("parsing char `%c'\n",c);
@@ -586,10 +587,24 @@ static bool readCodeFragment(const char *fileName,
{
col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
}
+ else if (pc=='/' && c=='/') // skip single line comment
+ {
+ while ((c=fgetc(f))!='\n' && c!=EOF) pc=c;
+ if (c=='\n') lineNr++,col=0;
+ }
+ else if (pc=='/' && c=='*') // skip C style comment
+ {
+ while (((c=fgetc(f))!='/' || pc!='*') && c!=EOF)
+ {
+ if (c=='\n') lineNr++,col=0;
+ pc=c;
+ }
+ }
else
{
col++;
}
+ pc = c;
}
if (c==':')
{
@@ -1291,7 +1306,7 @@ void Definition::writePathFragment(OutputList &ol) const
{
m_impl->outerScope->writePathFragment(ol);
}
- ol.writeString(" <li>");
+ ol.writeString(" <li class=\"navelem\">");
if (isLinkable())
{
if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
@@ -1327,14 +1342,31 @@ void Definition::writePathFragment(OutputList &ol) const
void Definition::writeNavigationPath(OutputList &ol) const
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool hasCustomFooter = !Config_getString("HTML_FOOTER").isEmpty();
+
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- ol.writeString(" <div class=\"navpath\">\n");
+ if (generateTreeView)
+ {
+ ol.writeString("</div>\n");
+ }
+
+ ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
ol.writeString(" <ul>\n");
writePathFragment(ol);
- ol.writeString(" </ul>\n");
- ol.writeString(" </div>\n");
+ if (!hasCustomFooter)
+ {
+ if (generateTreeView) // write the doxygen logo as part of the navigation bar
+ {
+ ol.writeString(" <li class=\"footer\">");
+ ol.writeLogo();
+ ol.writeString("</li>\n");
+ }
+ ol.writeString(" </ul>\n");
+ ol.writeString(" </div>\n");
+ }
ol.popGeneratorState();
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 333513b..2a88c06 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -191,12 +191,12 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
{
msg("Generating dependency graph for directory %s\n",displayName().data());
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
+ //ol.startParagraph();
ol.startDirDepGraph();
//TODO: ol.parseText(theTranslator->trDirDepGraph());
ol.parseText((QCString)"Directory dependency graph for "+displayName()+":");
ol.endDirDepGraph(dirDep);
- ol.endParagraph();
+ //ol.endParagraph();
ol.enableAll();
}
}
@@ -318,16 +318,19 @@ void DirDef::endMemberDeclarations(OutputList &ol)
void DirDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
QCString shortTitle=theTranslator->trDirReference(m_shortName);
QCString title=theTranslator->trDirReference(m_dispName);
- startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
+ startFile(ol,getOutputFileBase(),name(),title,HLI_None,!generateTreeView);
- // write navigation path
- writeNavigationPath(ol);
-
- ol.endQuickIndices();
+ if (!generateTreeView)
+ {
+ // write navigation path
+ writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
@@ -422,35 +425,18 @@ void DirDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
- endFile(ol);
- ol.popGeneratorState();
-
-
-}
+ ol.endContents();
-#if 0
-void DirDef::writePathFragment(OutputList &ol) const
-{
- if (m_parent)
+ if (generateTreeView)
{
- m_parent->writePathFragment(ol);
- ol.writeString("&#160;/&#160;");
+ writeNavigationPath(ol);
}
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,shortName());
-}
-void DirDef::writeNavigationPath(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
+ endFile(ol,TRUE);
+ ol.popGeneratorState();
- ol.writeString("<div class=\"nav\">\n");
- writePathFragment(ol);
- ol.writeString("</div>\n");
- ol.popGeneratorState();
}
-#endif
void DirDef::setLevel()
{
@@ -701,6 +687,7 @@ static void writePartialFilePath(OutputList &ol,const DirDef *root,const FileDef
void DirRelation::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -710,28 +697,24 @@ void DirRelation::writeDocumentation(OutputList &ol)
QCString title=theTranslator->trDirRelation(
m_src->displayName()+" -> "+
m_dst->dir()->shortName());
- startFile(ol,getOutputFileBase(),getOutputFileBase(),title);
+ startFile(ol,getOutputFileBase(),getOutputFileBase(),
+ title,HLI_None,!generateTreeView,m_src->getOutputFileBase());
- // write navigation path
- m_src->writeNavigationPath(ol);
+ if (!generateTreeView)
+ {
+ // write navigation path
+ m_src->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
ol.startContents();
- //startTitle(ol,getOutputFileBase());
- // ol.parseText(shortTitle);
- //endTitle(ol,getOutputFileBase(),title);
ol.writeString("<h3>"+shortTitle+"</h3>");
-
ol.writeString("<table class=\"dirtab\">");
ol.writeString("<tr class=\"dirtab\">");
- // TODO: translate me! "File in %s"
ol.writeString("<th class=\"dirtab\">");
ol.parseText(theTranslator->trFileIn(m_src->pathFragment()));
- //m_src->writePathFragment(ol);
ol.writeString("</th>");
- // TODO: translate me! "Includes file in %s"
ol.writeString("<th class=\"dirtab\">");
- //ol.writeString("Includes file in ");
- //m_dst->dir()->writePathFragment(ol);
ol.parseText(theTranslator->trIncludesFileIn(m_dst->dir()->pathFragment()));
ol.writeString("</th>");
ol.writeString("</tr>");
@@ -750,8 +733,15 @@ void DirRelation::writeDocumentation(OutputList &ol)
ol.writeString("</tr>");
}
ol.writeString("</table>");
+
+ ol.endContents();
- endFile(ol);
+ if (generateTreeView)
+ {
+ m_src->writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
ol.popGeneratorState();
}
diff --git a/src/dot.cpp b/src/dot.cpp
index 423e45d..134f51a 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -453,7 +453,7 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
out << "<iframe src=\""
<< relPath << baseName << ".svg\" width=\""
<< ((width*96+48)/72) << "\" height=\""
- << ((height*96+48)/72) << "\">";
+ << ((height*96+48)/72) << "\" frameborder=\"0\" scrolling=\"no\">";
writeSVGNotSupported(out);
// out << "</object>";
out << "</iframe>";
@@ -1744,7 +1744,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
QCString baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
- baseName = convertNameToFile(baseName);
+ //baseName = convertNameToFile(baseName);
QCString imgName = baseName+"."+ imgExt;
QCString mapName = baseName+".map";
QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
diff --git a/src/dot.h b/src/dot.h
index 0b45af5..be243e9 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -144,7 +144,7 @@ class DotGfxHierarchyTable
public:
DotGfxHierarchyTable();
~DotGfxHierarchyTable();
- void writeGraph(FTextStream &t,const char *path,const char *fileName) const;
+ void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
private:
void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index f229ded..124c980 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -672,6 +672,7 @@ static void buildFileList(EntryNav *rootNav)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{
gd->addFile(fd);
+ fd->makePartOfGroup(gd);
//printf("File %s: in group %s\n",fd->name().data(),s->data());
}
}
@@ -8554,34 +8555,66 @@ static void readTagFile(Entry *root,const char *tl)
}
//----------------------------------------------------------------------------
+static void copyFile(const QCString &src,const QCString &dest)
+{
+ QFile sf(src);
+ if (sf.open(IO_ReadOnly))
+ {
+ QFileInfo fi(src);
+ QFile df(dest);
+ if (df.open(IO_WriteOnly))
+ {
+ char *buffer = new char[fi.size()];
+ sf.readBlock(buffer,fi.size());
+ df.writeBlock(buffer,fi.size());
+ df.flush();
+ delete[] buffer;
+ }
+ else
+ {
+ err("error: could not write to file %s\n",dest.data());
+ }
+ }
+ else
+ {
+ err("error: could not open user specified file %s\n",src.data());
+ }
+}
+
static void copyStyleSheet()
{
QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
if (!htmlStyleSheet.isEmpty())
{
- QFile cssf(htmlStyleSheet);
- QFileInfo cssfi(htmlStyleSheet);
- if (cssf.open(IO_ReadOnly))
+ QFileInfo fi(htmlStyleSheet);
+ if (!fi.exists())
{
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+cssfi.fileName().data();
- QFile df(destFileName);
- if (df.open(IO_WriteOnly))
- {
- char *buffer = new char[cssf.size()];
- cssf.readBlock(buffer,cssf.size());
- df.writeBlock(buffer,cssf.size());
- df.flush();
- delete[] buffer;
- }
- else
- {
- err("error: could not write to style sheet %s\n",destFileName.data());
- }
+ err("Style sheet '%s' specified by HTML_STYLESHEET does not exist!\n",htmlStyleSheet.data());
+ htmlStyleSheet.resize(0); // revert to the default
}
else
{
- err("error: could not open user specified style sheet %s\n",Config_getString("HTML_STYLESHEET").data());
- htmlStyleSheet.resize(0); // revert to the default
+ QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
+ copyFile(htmlStyleSheet,destFileName);
+ }
+ }
+}
+
+static void copyLogo()
+{
+ QCString &projectLogo = Config_getString("PROJECT_LOGO");
+ if (!projectLogo.isEmpty())
+ {
+ QFileInfo fi(projectLogo);
+ if (!fi.exists())
+ {
+ err("Project logo '%s' specified by PROJECT_LOGO does not exist!\n",projectLogo.data());
+ projectLogo.resize(0); // revert to the default
+ }
+ else
+ {
+ QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
+ copyFile(projectLogo,destFileName);
}
}
}
@@ -10340,6 +10373,7 @@ void generateOutput()
#endif
//if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages();
copyStyleSheet();
+ copyLogo();
if (!generateTreeView && Config_getBool("USE_INLINE_TREES"))
{
FTVHelp::generateTreeViewImages();
diff --git a/src/doxygen.css b/src/doxygen.css
index 3a07205..226cefd 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -636,14 +636,14 @@ table.doxtable th {
list-style-type:none;
float:left;
padding-left:10px;
- padding-right: 15px;
+ padding-right:15px;
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:##45;
}
-.navpath a
+.navpath li.navelem a
{
height:32px;
display:block;
@@ -651,11 +651,25 @@ table.doxtable th {
outline: none;
}
-.navpath a:hover
+.navpath li.navelem a:hover
{
color:##80;
}
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:##45;
+ font-size: 8pt;
+}
+
+
div.summary
{
float: right;
@@ -670,6 +684,19 @@ div.summary a
white-space: nowrap;
}
+div.ingroups
+{
+ font-size: 8pt;
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
div.header
{
background-image:url('nav_h.png');
@@ -724,3 +751,44 @@ dl.bug
border-color: #C08050;
}
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectbrief
+{
+ font: 120% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid ##70;
+}
+
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 63bcd89..f00828b 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -636,14 +636,14 @@
" list-style-type:none;\n"
" float:left;\n"
" padding-left:10px;\n"
-" padding-right: 15px;\n"
+" padding-right:15px;\n"
" background-image:url('bc_s.png');\n"
" background-repeat:no-repeat;\n"
" background-position:right;\n"
" color:##45;\n"
"}\n"
"\n"
-".navpath a\n"
+".navpath li.navelem a\n"
"{\n"
" height:32px;\n"
" display:block;\n"
@@ -651,11 +651,25 @@
" outline: none;\n"
"}\n"
"\n"
-".navpath a:hover\n"
+".navpath li.navelem a:hover\n"
"{\n"
" color:##80;\n"
"}\n"
"\n"
+".navpath li.footer\n"
+"{\n"
+" list-style-type:none;\n"
+" float:right;\n"
+" padding-left:10px;\n"
+" padding-right:15px;\n"
+" background-image:none;\n"
+" background-repeat:no-repeat;\n"
+" background-position:right;\n"
+" color:##45;\n"
+" font-size: 8pt;\n"
+"}\n"
+"\n"
+"\n"
"div.summary\n"
"{\n"
" float: right;\n"
@@ -670,6 +684,19 @@
" white-space: nowrap;\n"
"}\n"
"\n"
+"div.ingroups\n"
+"{\n"
+" font-size: 8pt;\n"
+" padding-left: 5px;\n"
+" width: 50%;\n"
+" text-align: left;\n"
+"}\n"
+"\n"
+"div.ingroups a\n"
+"{\n"
+" white-space: nowrap;\n"
+"}\n"
+"\n"
"div.header\n"
"{\n"
" background-image:url('nav_h.png');\n"
@@ -724,3 +751,44 @@
" border-color: #C08050;\n"
"}\n"
"\n"
+"#projectlogo\n"
+"{\n"
+" text-align: center;\n"
+" vertical-align: bottom;\n"
+" border-collapse: separate;\n"
+"}\n"
+" \n"
+"#projectlogo img\n"
+"{ \n"
+" border: 0px none;\n"
+"}\n"
+" \n"
+"#projectname\n"
+"{\n"
+" font: 300% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+" \n"
+"#projectbrief\n"
+"{\n"
+" font: 120% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+"\n"
+"#projectnumber\n"
+"{\n"
+" font: 50% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+"\n"
+"#titlearea\n"
+"{\n"
+" padding: 0px;\n"
+" margin: 0px;\n"
+" width: 100%;\n"
+" border-bottom: 1px solid ##70;\n"
+"}\n"
+"\n"
diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp
index 8669530..fe7d4f1 100644
--- a/src/eclipsehelp.cpp
+++ b/src/eclipsehelp.cpp
@@ -84,7 +84,9 @@ void EclipseHelp::initialize()
{
title = "Doxygen generated documentation";
}
- m_tocstream << "<toc label=\"" << convertToXML(title) << "\">" << endl;
+ m_tocstream << "<toc label=\"" << convertToXML(title)
+ << "\" topic=\"" << convertToXML(m_pathprefix)
+ << "index" << Doxygen::htmlFileExtension << "\">" << endl;
++ m_depth;
}
@@ -155,7 +157,7 @@ void EclipseHelp::decContentsDepth()
* @param anchor Name of an anchor of the item.
*/
void EclipseHelp::addContentsItem(
- bool isDir,
+ bool /* isDir */,
const char *name,
const char * /* ref */,
const char *file,
@@ -165,8 +167,8 @@ void EclipseHelp::addContentsItem(
closedTag();
indent();
m_tocstream << "<topic label=\"" << convertToXML(name) << "\"";
- if (!isDir && file)
- { // -- Eclipse help cannot handle directories
+ if (file)
+ {
m_tocstream << " href=\"" << convertToXML(m_pathprefix)
<< file << Doxygen::htmlFileExtension;
if (anchor)
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 1cc840b..d049376 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -497,6 +497,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
*/
void FileDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
//funcList->countDecMembers();
//QCString fn = name();
@@ -517,9 +518,12 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE);
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
+ if (!generateTreeView)
+ {
+ getDirDef()->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
QCString pageTitleShort=theTranslator->trFileReference(name());
startTitle(ol,getOutputFileBase(),this);
ol.pushGeneratorState();
@@ -534,7 +538,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
else
{
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
+ if (!generateTreeView)
+ {
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
@@ -672,7 +680,14 @@ void FileDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
- endFile(ol);
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
@@ -746,6 +761,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
/*! Write a source listing of this file to the output */
void FileDef::writeSource(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
QCString title = docname;
@@ -760,16 +776,21 @@ void FileDef::writeSource(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
+ startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
+ !generateTreeView,getOutputFileBase());
+ if (!generateTreeView)
+ {
+ getDirDef()->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase());
ol.parseText(name());
endTitle(ol,getOutputFileBase(),title);
}
else
{
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
+ startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
+ !generateTreeView,getOutputFileBase());
startTitle(ol,getSourceFileBase());
ol.parseText(title);
endTitle(ol,getSourceFileBase(),0);
@@ -795,7 +816,15 @@ void FileDef::writeSource(OutputList &ol)
);
ol.endCodeFragment();
ol.endContents();
- endFile(ol);
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ endFile(ol,TRUE);
+ }
+ else
+ {
+ endFile(ol);
+ }
ol.enableAll();
}
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 3156eb1..03f75d4 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -66,6 +66,7 @@
#define YY_NEVER_INTERACTIVE 1
enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
+enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
// {{{ ----- Helper structs -----
//! Holds modifiers (ie attributes) for one symbol (variable, function, etc)
@@ -86,11 +87,15 @@ struct SymbolModifiers {
bool pointer;
bool target;
bool save;
+ bool nopass;
+ bool pass;
+ QCString passVar;
SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
optional(FALSE), dimension(), allocatable(FALSE),
external(FALSE), intrinsic(FALSE), parameter(FALSE),
- pointer(FALSE), target(FALSE), save(FALSE) {}
+ pointer(FALSE), target(FALSE), save(FALSE),
+ nopass(FALSE), pass(FALSE), passVar() {}
SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
SymbolModifiers& operator|=(QCString mdfrString);
@@ -158,6 +163,7 @@ static int initializerArrayScope; // number if nested array scope
static int initializerScope; // number if nested function calls in initializer
static QCString useModuleName; // name of module in the use statement
static Protection defaultProtection;
+static InterfaceType ifType = IF_NONE;
static char stringStartSymbol; // single or double quote
@@ -174,7 +180,7 @@ static void handleCommentBlock(const QCString &doc,bool brief);
static void addCurrentEntry();
static void addModule(const char *name, bool isModule=FALSE);
static void addSubprogram(const char *text);
-static void addInterface(QCString name);
+static void addInterface(QCString name, InterfaceType type);
static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs);
static void scanner_abort();
@@ -205,7 +211,7 @@ SEPARATE [:, \t]
ID [a-z_A-Z%]+{IDSYM}*
PP_ID {ID}
LABELID [a-z_A-Z]+[a-z_A-Z0-9\-]*
-SUBPROG (subroutine|function|block)
+SUBPROG (subroutine|function)
B [ \t]
BS [ \t]*
BS_ [ \t]+
@@ -220,11 +226,12 @@ NOARGS {BS}"\n"
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
+TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}|PROCEDURE{ARGS})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET)
+ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS})
ACCESS_SPEC (PRIVATE|PUBLIC)
+LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
/* Assume that attribute statements are almost the same as attributes. */
ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
@@ -403,38 +410,52 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_pop_state();
}
- /*------ ignore special fortran statements */
-<Start,ModuleBody,SubprogBody>^[ \t]*interface({BS_}{ID}({ARGS}?)?)?/{BS}(!|\n) { // handle interface block
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
+ /* INTERFACE definitions */
+<Start,ModuleBody,SubprogBody>{
+^{BS}interface { ifType = IF_SPECIFIC;
+ yy_push_state(InterfaceBody);
+ // do not start a scope here, every
+ // interface body is a scope of its own
+ }
- QCString name = yytext;
- int index = name.find("interface", 0, FALSE);
- index = name.find(QRegExp("[^ \\t]"), index+9);
- //printf(stderr,"%s,%d\n",name.data(),index);
- if (index!=-1)
- name = name.right(name.length()-index);
- else // interface without name, must be inside subprog
- name = "interface";
- addInterface(name);
- yy_push_state(InterfaceBody);
- startScope(last_entry);
+^{BS}abstract{BS_}interface { ifType = IF_ABSTRACT;
+ yy_push_state(InterfaceBody);
+ // do not start a scope here, every
+ // interface body is a scope of its own
}
-<InterfaceBody>^{BS}"end"({BS}"interface"({BS_}{ID}{ARGS}?)?)?{BS}/(\n|!) {
- if (!endScope(current_root))
- yyterminate();
- yy_pop_state();
+
+^{BS}interface{BS_}{ID} { ifType = IF_GENERIC;
+ yy_push_state(InterfaceBody);
+
+ // extract generic name
+ QCString name = QCString(yytext).stripWhiteSpace();
+ name = name.right(name.length() - 9).stripWhiteSpace();
+ addInterface(name, ifType);
+
+ startScope(last_entry);
+ }
+}
+
+<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
+ // end scope only if GENERIC interface
+ if (ifType == IF_GENERIC && !endScope(current_root))
+ yyterminate();
+
+ ifType = IF_NONE;
+ yy_pop_state();
}
<InterfaceBody>module{BS}procedure { yy_push_state(YY_START);
BEGIN(ModuleProcedure);
}
-<ModuleProcedure>{ID} {
+<ModuleProcedure>{ID} { if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface(yytext, ifType);
+ startScope(last_entry);
+ }
+
current->section = Entry::FUNCTION_SEC ;
current->name = yytext;
- moduleProcedures.append(current);
+ moduleProcedures.append(current);
addCurrentEntry();
}
<ModuleProcedure>"\n" { unput(*yytext);
@@ -485,7 +506,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- type definition -------------------------------------------------------------------------------*/
-<Start,ModuleBody>"type"({BS_}|({COMMA}{ACCESS_SPEC})) { /* type definition found : TYPE , access-spec::type-name |*/
+<Start,ModuleBody>"type"({BS_}|({COMMA}{ACCESS_SPEC}|{COMMA}{LANGUAGE_BIND_SPEC})) {
if(YY_START == Start)
{
addModule(NULL);
@@ -498,6 +519,9 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
<Typedef>{ACCESS_SPEC} {
QCString type= yytext;
}
+<Typedef>{LANGUAGE_BIND_SPEC} {
+ /* ignored for now */
+ }
<Typedef>{ID} { /* type name found */
//cout << "=========> got typedef " << yytext << ": " << yyLineNr << endl;
current->section = Entry::CLASS_SEC; // was Entry::STRUCT_SEC;
@@ -528,12 +552,14 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- module/global/typedef variable ---------------------------------------------------*/
<SubprogBody,SubprogBodyContains>^{BS}[0-9]*{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) {
- //fprintf(stderr,"1e=========> got end subprog: %s\n", yytext);
+ //
+ // ABSTRACT and specific interfaces are stored
+ // in a scope of their own, even if multiple
+ // are group in one INTERFACE/END INTERFACE block.
+ //
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ endScope(current_root);
- /* args is used for parameters in list of functions, argList for
- parameters in detailed function descripttion */
- //current->args = argListToString(current->argList);
- //current->endBodyLine = yyLineNr; // ??? what ist endBodyLine for
if (!endScope(current_root))
yyterminate();
yy_pop_state() ;
@@ -692,15 +718,18 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------ fortran subroutine/function handling ------------------------------------------------------------*/
/* Start is initial condition */
-<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} {
- // TYPE_SPEC is for old function style function result
- result= yytext;
- result= result.stripWhiteSpace();
- //extractPrefix(result);
- //fprintf(stderr, "===%s\n", (const char*)result);
- current->type = result;
- yy_push_state(SubprogPrefix);
- }
+<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} {
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface(yytext, ifType);
+ startScope(last_entry);
+ }
+
+ // TYPE_SPEC is for old function style function result
+ result = QCString(yytext).stripWhiteSpace();
+ current->type = result;
+ yy_push_state(SubprogPrefix);
+ }
<SubprogPrefix>{BS}{SUBPROG}{BS_} {
// Fortran subroutine or function found
@@ -710,20 +739,30 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{SUBPROG}{BS_} {
// Fortran subroutine or function found
- result= yytext;
- result= result.stripWhiteSpace();
- //extractPrefix(result);
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface("$interface$", ifType);
+ startScope(last_entry);
+ }
+
+ result = QCString(yytext).stripWhiteSpace();
addSubprogram(result);
yy_push_state(Subprog);
}
<Subprog>{BS} { /* ignore white space */ }
-<Subprog>{ID} { current->name = yytext;
- //cout << "1a==========> got " << current->type << " " << yytext << " " << yyLineNr << endl;
- modifiers[current_root][current->name.lower()].returnName = current->name;
- BEGIN(Parameterlist);
- }
-<Parameterlist>{ARGS} {
+<Subprog>{ID} { current->name = yytext;
+ //cout << "1a==========> got " << current->type << " " << yytext << " " << yyLineNr << endl;
+ modifiers[current_root][current->name.lower()].returnName = current->name;
+
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ current_root->name.replace(QRegExp("\\$interface\\$"), yytext);
+ }
+
+ BEGIN(Parameterlist);
+ }
+<Parameterlist>{ARGS} {
//current->type not yet available
QCString arglist= yytext;
//cout << "3=========> got parameterlist " << yytext << endl;
@@ -735,6 +774,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->args = removeRedundantWhiteSpace(current->args);
stringToArgumentList(current->args, current->argList);
addCurrentEntry();
+
startScope(last_entry);
BEGIN(SubprogBody);
}
@@ -1168,6 +1208,9 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
pointer |= mdfs.pointer;
target |= mdfs.target;
save |= mdfs.save;
+ nopass |= mdfs.nopass;
+ pass |= mdfs.pass;
+ passVar = mdfs.passVar;
return *this;
}
@@ -1230,6 +1273,15 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
{
newMdf.save = TRUE;
}
+ else if (mdfString=="nopass")
+ {
+ newMdf.nopass = TRUE;
+ }
+ else if (mdfString.contains("pass"))
+ {
+ newMdf.pass = TRUE;
+ newMdf.passVar = extractFromParens(mdfString);
+ }
(*this) |= newMdf;
return *this;
@@ -1336,6 +1388,16 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
typeName += ",";
typeName += "save";
}
+ if (mdfs.nopass)
+ {
+ typeName += ",";
+ typeName += "nopass";
+ }
+ if (mdfs.pass)
+ {
+ typeName += ",";
+ typeName += "pass(" + mdfs.passVar + ")";
+ }
if (mdfs.protection == SymbolModifiers::PUBLIC)
{
typeName += ",";
@@ -1570,23 +1632,40 @@ static void addSubprogram(const char *text)
* \note Code was brought to this procedure from the parser,
* because there was/is idea to use it in several parts of the parser.
*/
-static void addInterface(QCString name)
+static void addInterface(QCString name, InterfaceType type)
{
+ if (YY_START == Start)
+ {
+ addModule(NULL);
+ yy_push_state(ModuleBody); //anon program
+ }
+
current->section = Entry::CLASS_SEC; // was Entry::INTERFACE_SEC;
current->spec = Entry::Interface;
current->name = name;
+ switch (type)
+ {
+ case IF_ABSTRACT:
+ current->type = "abstract";
+ break;
+
+ case IF_GENERIC:
+ current->type = "generic";
+ break;
+
+ case IF_SPECIFIC:
+ case IF_NONE:
+ default:
+ current->type = "";
+ }
+
/* if type is part of a module, mod name is necessary for output */
if ((current_root) &&
(current_root->section == Entry::CLASS_SEC ||
current_root->section == Entry::NAMESPACE_SEC))
{
- current->name= current_root->name+"::"+current->name;
- }
- if ((current_root) &&
- (current_root->section == Entry::FUNCTION_SEC))
- {
- current->name = getFullName(current_root) + "__" + QCString(current->name);
+ current->name= current_root->name + "::" + current->name;
}
current->fileName = yyFileName;
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 95ff514..754ea25 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -30,9 +30,29 @@
#include "doxygen.h"
#include "language.h"
#include "htmlgen.h"
+#include "layout.h"
#define MAX_INDENT 1024
+
+static const char navtree_script[]=
+#include "navtree_js.h"
+;
+
+static const char resize_script[]=
+#include "resize_js.h"
+;
+
+static const char jquery_script[]=
+#include "jquery_js.h"
+;
+
+static const char navtree_css[]=
+#include "navtree_css.h"
+;
+
+
+#if 0
unsigned char ftv2blank_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
@@ -301,23 +321,415 @@ unsigned char ftv2vertline_png[] = {
0x3a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82
};
+#endif
-FTVImageInfo image_info[] =
-{
- { "&#160;", "ftv2blank.png",ftv2blank_png,174,16,22 },
- { "*", "ftv2doc.png",ftv2doc_png,255,24,22 },
- { "+", "ftv2folderclosed.png",ftv2folderclosed_png,259,24,22 },
- { "-", "ftv2folderopen.png",ftv2folderopen_png,261,24,22 },
- { "\\", "ftv2lastnode.png",ftv2lastnode_png,233,16,22 },
- { "-", "ftv2link.png",ftv2link_png,358,24,22 },
- { "\\", "ftv2mlastnode.png",ftv2mlastnode_png,160,16,22 },
- { "o", "ftv2mnode.png",ftv2mnode_png,194,16,22 },
- { "o", "ftv2node.png",ftv2node_png,235,16,22 },
- { "\\", "ftv2plastnode.png",ftv2plastnode_png,165,16,22 },
- { "o", "ftv2pnode.png",ftv2pnode_png,200,16,22 },
- { "|", "ftv2vertline.png",ftv2vertline_png,229,16,22 },
- { 0,0,0,0,0,0 }
+static unsigned char blank_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char folderopen_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
+ 255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
+ 255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
+ 255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
+ 255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
+ 255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
+ 255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
+ 255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
+ 255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
+ 255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
+ 255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
+ 255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
+ 255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char folderopen_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char folderclosed_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
+ 255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
+ 255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
+ 255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
+ 255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
+ 255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
+ 255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
+ 255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
+ 255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
+ 255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
+ 255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
+ 255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
+ 255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char folderclosed_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char doc_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
+ 255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
+ 255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
+ 255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
+ 255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
+ 255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
+ 255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
+ 255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
+ 255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
+ 255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
+ 255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
+ 255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
+ 255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
+ 255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
+ 255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char doc_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char arrow_right_png[352] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char arrow_right_a_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255, 77, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char arrow_down_png[352] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
+ 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char arrow_down_a_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,231,255,255,255,255,255,255,255,216, 0, 0, 0, 0,
+ 0, 0, 0, 87,255,255,255,255,255,255,255, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0,186,255,255,255,255,255,164, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 38,251,255,255,255,241, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,127,255,255,255,107, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,221,255,204, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72,253, 52, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#define SPLITBAR_LINE 170,242,224,202,183,170
+#define SPLITBAR_BLOCK2 SPLITBAR_LINE , SPLITBAR_LINE
+#define SPLITBAR_BLOCK4 SPLITBAR_BLOCK2 , SPLITBAR_BLOCK2
+#define SPLITBAR_BLOCK8 SPLITBAR_BLOCK4 , SPLITBAR_BLOCK4
+#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8 , SPLITBAR_BLOCK8
+#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
+
+#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
+#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
+#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1 , SPLITBAR_ALTLINE2
+#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2
+#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
+
+static unsigned char splitbar_png[32*32*6] =
+{
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_ALTBLOCK8,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32
+};
+
+struct FTVImageInfo
+{
+ const char *alt;
+ const char *name;
+ const unsigned char *data;
+ unsigned int len;
+ unsigned short width, height;
+};
+
+//extern FTVImageInfo image_info[];
+
+#define FTVIMG_blank 0
+#define FTVIMG_doc 1
+#define FTVIMG_folderclosed 2
+#define FTVIMG_folderopen 3
+#define FTVIMG_lastnode 4
+#define FTVIMG_link 5
+#define FTVIMG_mlastnode 6
+#define FTVIMG_mnode 7
+#define FTVIMG_node 8
+#define FTVIMG_plastnode 9
+#define FTVIMG_pnode 10
+#define FTVIMG_vertline 11
+
+#define FTV_S(name) #name
+#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
+#define FTVIMG_INDEX(name) FTVIMG_ ## name
+#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
+#define FTV_IMGATTRIBS(name) \
+ "src=\"" FTV_ICON_FILE(name) "\" " \
+ "alt=\"" << FTV_INFO(name).alt << "\" " \
+ "width=\"" << FTV_INFO(name).width << "\" " \
+ "height=\"" << FTV_INFO(name).height << "\" "
+
+
+static FTVImageInfo image_info[] =
+{
+ { "&#160;", "ftv2blank.png", 0 /*ftv2blank_png*/ ,174,16,22 },
+ { "*", "ftv2doc.png", 0 /*ftv2doc_png*/ ,255,24,22 },
+ { "+", "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ ,259,24,22 },
+ { "-", "ftv2folderopen.png", 0 /*ftv2folderopen_png*/ ,261,24,22 },
+ { "\\", "ftv2lastnode.png", 0 /*ftv2lastnode_png*/ ,233,16,22 },
+ { "-", "ftv2link.png", 0 /*ftv2link_png*/ ,358,24,22 },
+ { "\\", "ftv2mlastnode.png", 0 /*ftv2mlastnode_png*/ ,160,16,22 },
+ { "o", "ftv2mnode.png", 0 /*ftv2mnode_png*/ ,194,16,22 },
+ { "o", "ftv2node.png", 0 /*ftv2node_png*/ ,235,16,22 },
+ { "\\", "ftv2plastnode.png", 0 /*ftv2plastnode_png*/ ,165,16,22 },
+ { "o", "ftv2pnode.png", 0 /*ftv2pnode_png*/ ,200,16,22 },
+ { "|", "ftv2vertline.png", 0 /*ftv2vertline_png*/ ,229,16,22 },
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+static ColoredImgDataItem ftv_image_data[] =
+{
+ { "ftv2blank.png", 16, 22, blank_png, blank_png },
+ { "ftv2doc.png", 24, 22, doc_png, doc_a_png },
+ { "ftv2folderclosed.png", 24, 22, folderclosed_png, folderclosed_a_png },
+ { "ftv2folderopen.png", 24, 22, folderopen_png, folderopen_a_png },
+ { "ftv2lastnode.png", 16, 22, blank_png, blank_png },
+ { "ftv2link.png", 24, 22, doc_png, doc_a_png },
+ { "ftv2mlastnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
+ { "ftv2mnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
+ { "ftv2node.png", 16, 22, blank_png, blank_png },
+ { "ftv2plastnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
+ { "ftv2pnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
+ { "ftv2vertline.png", 16, 22, blank_png, blank_png },
+ { "ftv2splitbar.png", 6,1024, splitbar_png, 0 },
+ { 0, 0, 0, 0, 0 }
};
struct FTVNode
@@ -514,6 +926,24 @@ void FTVHelp::generateLink(FTextStream &t,FTVNode *n)
}
}
+void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
+{
+ if (n->file.isEmpty()) // no link
+ {
+ t << "\"" << n->name << "\", null, ";
+ }
+ else // link into other page
+ {
+ // TODO: external links with installdox
+ // TODO: use m_topLevelIndex
+ t << "\"" << n->name << "\", \"";
+ t << externalRef("",n->ref,TRUE);
+ t << n->file << Doxygen::htmlFileExtension;
+ if (!n->anchor.isEmpty()) t << "#" << n->anchor;
+ t << "\", ";
+ }
+}
+
void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
{
QCString spaces;
@@ -543,6 +973,40 @@ void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
}
}
+bool FTVHelp::generateJSTree(FTextStream &t, const QList<FTVNode> &nl,int level,bool &first)
+{
+ QCString indentStr;
+ indentStr.fill(' ',level*2);
+ bool found=FALSE;
+ QListIterator<FTVNode> nli(nl);
+ FTVNode *n;
+ for (nli.toFirst();(n=nli.current());++nli)
+ {
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first=FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found=TRUE;
+
+ bool firstChild=TRUE;
+ t << indentStr << " [ ";
+ generateJSLink(t,n);
+ bool emptySection = !generateJSTree(t,n->children,level+1,firstChild);
+ if (emptySection)
+ t << "null ]";
+ else
+ t << endl << indentStr << " ] ]";
+ }
+ return found;
+}
+
+
+#if 0
void FTVHelp::generateTreeViewImages()
{
static bool done=FALSE;
@@ -567,7 +1031,78 @@ void FTVHelp::generateTreeViewImages()
p++;
}
}
+#endif
+
+// new style images
+void FTVHelp::generateTreeViewImages()
+{
+ QCString dname=Config_getString("HTML_OUTPUT");
+ writeColoredImgData(dname,ftv_image_data);
+}
+
+// new style scripts
+void FTVHelp::generateTreeViewScripts()
+{
+ // generate navtree.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/navtree.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << "var NAVTREE =" << endl;
+ t << "[" << endl;
+ t << " [ ";
+ QCString &projName = Config_getString("PROJECT_NAME");
+ if (projName.isEmpty())
+ {
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::MainPage);
+ t << "\"" << lne->title() << "\", ";
+ }
+ else
+ {
+ t << "\"" << projName << "\", ";
+ }
+ t << "\"index" << Doxygen::htmlFileExtension << "\", ";
+
+ bool first=TRUE;
+ generateJSTree(t,m_indentNodes[0],1,first);
+ if (first) t << "]";
+
+ t << endl << " ] ]" << endl;
+ t << "];" << endl;
+ t << endl << navtree_script;
+ }
+ }
+ // generate resize.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/resize.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << resize_script;
+ }
+ }
+ // generate jquery.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << jquery_script;
+ }
+ }
+ // generate navtree.css
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << replaceColorMarkers(navtree_css);
+ }
+ }
+}
+// old style script (used for inline trees)
void FTVHelp::generateScript(FTextStream &t)
{
t << " <script type=\"text/javascript\">\n";
@@ -630,6 +1165,7 @@ void FTVHelp::generateScript(FTextStream &t)
t << " </script>\n";
}
+// write tree inside page
void FTVHelp::generateTreeViewInline(FTextStream &t)
{
generateScript(t);
@@ -643,14 +1179,16 @@ void FTVHelp::generateTreeViewInline(FTextStream &t)
t << " </div>\n";
}
-
+// write old style index.html and tree.html
void FTVHelp::generateTreeView()
{
+ generateTreeViewImages();
+ generateTreeViewScripts();
+#if 0
QCString fileName;
QFile f;
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- generateTreeViewImages();
fileName=Config_getString("HTML_OUTPUT")+"/index"+Doxygen::htmlFileExtension;
f.setName(fileName);
@@ -811,5 +1349,6 @@ void FTVHelp::generateTreeView()
f.close();
}
+#endif
}
diff --git a/src/ftvhelp.h b/src/ftvhelp.h
index a857f16..cdac6c8 100644
--- a/src/ftvhelp.h
+++ b/src/ftvhelp.h
@@ -33,40 +33,6 @@ class QFile;
struct FTVNode;
class FTextStream;
-struct FTVImageInfo
-{
- const char *alt;
- const char *name;
- const unsigned char *data;
- unsigned int len;
- unsigned short width, height;
-};
-
-extern FTVImageInfo image_info[];
-
-#define FTVIMG_blank 0
-#define FTVIMG_doc 1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen 3
-#define FTVIMG_lastnode 4
-#define FTVIMG_link 5
-#define FTVIMG_mlastnode 6
-#define FTVIMG_mnode 7
-#define FTVIMG_node 8
-#define FTVIMG_plastnode 9
-#define FTVIMG_pnode 10
-#define FTVIMG_vertline 11
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
- "src=\"" FTV_ICON_FILE(name) "\" " \
- "alt=\"" << FTV_INFO(name).alt << "\" " \
- "width=\"" << FTV_INFO(name).width << "\" " \
- "height=\"" << FTV_INFO(name).height << "\" "
-
/*! A class that generates a dynamic tree view side panel.
*/
class FTVHelp : public IndexIntf
@@ -93,11 +59,14 @@ class FTVHelp : public IndexIntf
void generateTreeView();
void generateTreeViewInline(FTextStream &t);
static void generateTreeViewImages();
+ void generateTreeViewScripts();
private:
void generateScript(FTextStream &t);
void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level);
+ bool generateJSTree(FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
void generateIndent(FTextStream &t,FTVNode *n,int level);
void generateLink(FTextStream &t,FTVNode *n);
+ void generateJSLink(FTextStream &t,FTVNode *n);
QList<FTVNode> *m_indentNodes;
int m_indent;
bool m_topLevelIndex;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 7d7ea6c..9150395 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -589,11 +589,11 @@ void GroupDef::writeGroupGraph(OutputList &ol)
msg("Generating dependency graph for group %s\n",qualifiedName().data());
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
+ //ol.startParagraph();
ol.startGroupCollaboration();
ol.parseText(theTranslator->trCollaborationDiagram(title));
ol.endGroupCollaboration(graph);
- ol.endParagraph();
+ //ol.endParagraph();
ol.popGeneratorState();
}
}
@@ -848,12 +848,20 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
void GroupDef::writeDocumentation(OutputList &ol)
{
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
startFile(ol,getOutputFileBase(),name(),title);
- startTitle(ol,getOutputFileBase(),this);
+
+ ol.startHeaderSection();
+ writeSummaryLinks(ol);
+ ol.startTitleHead(getOutputFileBase());
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
ol.parseText(title);
+ ol.popGeneratorState();
+ ol.endTitleHead(getOutputFileBase(),title);
addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
+ ol.endHeaderSection();
ol.startContents();
if (Doxygen::searchIndex)
@@ -989,6 +997,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
endFile(ol);
+
ol.popGeneratorState();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 1c0596c..4e916fc 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -16,7 +16,7 @@
*/
#include <stdlib.h>
-#include <math.h>
+//#include <math.h>
#include "qtbc.h"
#include <qdir.h>
@@ -43,8 +43,8 @@
#include "image.h"
-#define DBG_HTML(x) x;
-//#define DBG_HTML(x)
+//#define DBG_HTML(x) x;
+#define DBG_HTML(x)
static const char defaultStyleSheet[] =
#include "doxygen_css.h"
@@ -657,15 +657,6 @@ struct img_data_item
unsigned int len;
};
-struct colored_img_data_item
-{
- const char *name;
- unsigned short width;
- unsigned short height;
- unsigned char *content;
- unsigned char *alpha;
-};
-
static void writeImgData(const char *dir,img_data_item *data)
{
@@ -688,32 +679,7 @@ static void writeImgData(const char *dir,img_data_item *data)
}
}
-static void writeColoredImgData(const char *dir,colored_img_data_item *data)
-{
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- while (data->name)
- {
- QCString fileName;
- fileName=(QCString)dir+"/"+data->name;
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- ColoredImage img(data->width,data->height,data->content,data->alpha,
- sat,hue,gamma);
- img.save(fileName);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
- }
- Doxygen::indexList.addImageFile(data->name);
- data++;
- }
-}
-
-static colored_img_data_item colored_tab_data[] =
+static ColoredImgDataItem colored_tab_data[] =
{
{ "tab_a.png", 1, 36, tab_a_png, 0 },
{ "tab_b.png", 1, 36, tab_b_png, 0 },
@@ -749,50 +715,114 @@ static img_data_item search_server_data[] =
//------------------------------------------------------------------------
-static QCString replaceColorMarkers(const char *str)
+static void writeClientSearchBox(FTextStream &t,const char *relPath)
{
- QCString result;
- QCString s=str;
- if (s.isEmpty()) return result;
- static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
- static const char hex[] = "0123456789ABCDEF";
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- int i,l,sl=s.length(),p=0;
- while ((i=re.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- QCString lumStr = s.mid(i+2,l-2);
-#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \
- ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \
- ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
-
- double r,g,b;
- int red,green,blue;
- int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
- ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
- pow(level/255.0,gamma/100.0),&r,&g,&b);
- red = (int)(r*255.0);
- green = (int)(g*255.0);
- blue = (int)(b*255.0);
- char colStr[8];
- colStr[0]='#';
- colStr[1]=hex[red>>4];
- colStr[2]=hex[red&0xf];
- colStr[3]=hex[green>>4];
- colStr[4]=hex[green&0xf];
- colStr[5]=hex[blue>>4];
- colStr[6]=hex[blue&0xf];
- colStr[7]=0;
- //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
- result+=colStr;
- p=i+l;
- }
- result+=s.right(sl-p);
- return result;
+ t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
+ t << " <span class=\"left\">\n";
+ t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
+ t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
+ t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
+ t << " alt=\"\"/>\n";
+ t << " <input type=\"text\" id=\"MSearchField\" value=\""
+ << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
+ t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
+ t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
+ t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
+ t << " </span><span class=\"right\">\n";
+ t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
+ << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
+ t << " </span>\n";
+ t << " </div>\n";
+}
+
+static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch)
+{
+ t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
+ t << " <span class=\"left\">\n";
+ t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
+ t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
+ if (!highlightSearch)
+ {
+ t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
+ << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
+ t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
+ t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
+ t << " </form>\n";
+ t << " </span><span class=\"right\"></span>\n";
+ t << " </div>\n";
+ }
}
+static QCString getLogoName()
+{
+ static QCString projectLogo = Config_getString("PROJECT_LOGO");
+ QFileInfo fi(projectLogo);
+ if (fi.exists())
+ {
+ return fi.fileName().data();
+ }
+ return "";
+}
+
+static void writeTitleArea(FTextStream &t,const char *relPath)
+{
+ QCString logoName = getLogoName();
+ static QCString projectName = Config_getString("PROJECT_NAME");
+ static QCString projectBrief = Config_getString("PROJECT_BRIEF");
+ static QCString projectNumber = Config_getString("PROJECT_NUMBER");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+ static bool searchEngine = Config_getBool("SEARCHENGINE");
+ static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
+ if (!(logoName.isEmpty() && projectName.isEmpty() && projectBrief.isEmpty()) ||
+ (disableIndex && searchEngine))
+ {
+ t << "<div id=\"titlearea\">" << endl;
+ t << "<table cellspacing=\"0\" cellpadding=\"0\">" << endl;
+ t << " <tbody>" << endl;
+ t << " <tr style=\"height: 56px;\">" << endl;
+ if (!logoName.isEmpty())
+ {
+ t << " <td id=\"projectlogo\"><img alt=\"Logo\" src=\"" << relPath << logoName << "\"></td>" << endl;
+ }
+ if (!(projectName.isEmpty() && projectBrief.isEmpty()))
+ {
+ t << " <td style=\"padding-left: 0.5em;\">" << endl;
+ if (!projectName.isEmpty())
+ {
+ t << " <div id=\"projectname\">" << projectName;
+ if (!projectNumber.isEmpty())
+ {
+ t << "&#160;<span id=\"projectnumber\">" << projectNumber << "</span>";
+ }
+ t << "</div>" << endl;
+ }
+ if (!projectBrief.isEmpty())
+ {
+ t << " <div id=\"projectbrief\">" << projectBrief << "</div>" << endl;
+ }
+ t << " </td>" << endl;
+ }
+ if (disableIndex && searchEngine)
+ {
+ t << " <td>" << endl;
+ if (serverBasedSearch)
+ {
+ writeServerSearchBox(t,relPath,FALSE);
+ }
+ else
+ {
+ writeClientSearchBox(t,relPath);
+ }
+ t << " </td>" << endl;
+ }
+ t << " </tr>" << endl;
+ t << " </tbody>" << endl;
+ t << "</table>" << endl;
+ t << "</div>" << endl;
+ }
+}
+
+
//------------------------- Pictures for the Tabs ------------------------
HtmlGenerator::HtmlGenerator() : OutputGenerator()
@@ -871,6 +901,21 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file)
t << replaceColorMarkers(defaultStyleSheet);
}
+static void writeDefaultNavTree(FTextStream &t,const char *relPathStr)
+{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ if (generateTreeView)
+ {
+ t << "<link href=\"" << relPathStr << "navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "jquery.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "navtree.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "resize.js\"></script>\n";
+ t << "<script type=\"text/javascript\">" << endl;
+ t << "$(document).ready(initResizable);" << endl;
+ t << "</script>" << endl;
+ }
+}
+
static void writeDefaultHeaderFile(FTextStream &t, const char *title,
const char *relPath,bool usePathCmd,
bool searchPage=FALSE)
@@ -881,7 +926,6 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
else
relPathStr=relPath;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
//if (searchEngine && !generateTreeView)
@@ -897,11 +941,14 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
t << convertToHtml(title);
t << "</title>\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView*/ )
{
t << "<link href=\"" << relPathStr << "search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
- t << "<script type=\"text/javaScript\" src=\"" << relPathStr << "search/search.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "search/search.js\"></script>\n";
}
+
+ writeDefaultNavTree(t,relPathStr);
+
if (Config_getBool("USE_MATHJAX"))
{
QCString path = Config_getString("MATHJAX_RELPATH");
@@ -939,7 +986,7 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
t << "\" rel=\"stylesheet\" type=\"text/css\"/>\n";
t << "</head>\n";
- if (searchEngine && !generateTreeView && !serverBasedSearch)
+ if (searchEngine && /*!generateTreeView &&*/ !serverBasedSearch)
{
// for the javascript based search select the default filter
t << "<body onload='searchBox.OnSelectItem(0);'>\n";
@@ -963,18 +1010,35 @@ void HtmlGenerator::writeHeaderFile(QFile &file)
{
FTextStream t(&file);
writeDefaultHeaderFile(t,"$title",relativePathToRoot(0),TRUE);
+ t << "<div id=\"top\"><!-- do not remove this div! -->" << endl;
+ writeTitleArea(t,"$relpath$");
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
FTextStream t(&file);
- t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n";
- t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
- t << "&#160;<a href=\"http://www.doxygen.org/index.html\">"
- << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>"
- << "</a> $doxygenversion";
- t << "</small></address>\n"
- << "</body>\n"
+
+ if (generateTreeView)
+ {
+ t << " <li class=\"footer\">";
+ t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ) << endl;
+ t << " <a href=\"http://www.doxygen.org/index.html\">\n";
+ t << " <img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n";
+ t << " </ul>\n";
+ t << " </div>\n";
+ }
+ else
+ {
+ t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n";
+ t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
+ t << "&#160;<a href=\"http://www.doxygen.org/index.html\">"
+ << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>"
+ << "</a> $doxygenversion";
+ t << "</small></address>\n";
+ }
+
+ t << "</body>\n"
<< "</html>\n";
}
@@ -1104,9 +1168,9 @@ void HtmlGenerator::startFile(const char *name,const char *,
}
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /*&& !generateTreeView*/)
{
t << "<script type=\"text/javascript\"><!--\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
@@ -1137,44 +1201,61 @@ void HtmlGenerator::writeSearchFooter(FTextStream &t,const QCString &relPath)
t << "\n";
}
-static void writePageFooter(FTextStream &t,const QCString &lastTitle,
- const QCString relPath)
+QCString HtmlGenerator::writeLogoAsString(const char *path)
+{
+ static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
+ QCString result;
+ if (timeStamp)
+ {
+ result += theTranslator->trGeneratedAt(
+ dateToString(TRUE),
+ Config_getString("PROJECT_NAME")
+ );
+ }
+ else
+ {
+ result += theTranslator->trGeneratedBy();
+ }
+ result += "&#160;\n<a href=\"http://www.doxygen.org/index.html\">\n"
+ "<img class=\"footer\" src=\"";
+ result += path;
+ result += "doxygen.png\" alt=\"doxygen\"/></a> ";
+ result += versionString;
+ result += " ";
+ return result;
+}
+
+void HtmlGenerator::writeLogo()
+{
+ t << writeLogoAsString(relPath);
+}
+
+void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,const QCString &relPath)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
- if (searchEngine && !generateTreeView && !serverBasedSearch)
+ if (searchEngine /*&& !generateTreeView*/ && !serverBasedSearch)
{
HtmlGenerator::writeSearchFooter(t,relPath);
}
if (g_footer.isEmpty())
{
- t << "<hr class=\"footer\"/><address class=\"footer\"><small>";
- if (timeStamp)
- {
- t << theTranslator->trGeneratedAt(
- dateToString(TRUE),
- Config_getString("PROJECT_NAME")
- );
- }
- else
- {
- t << theTranslator->trGeneratedBy();
- }
- t << "&#160;" << endl << "<a href=\"http://www.doxygen.org/index.html\">";
- t << endl << "<img class=\"footer\" src=\"" << relPath << "doxygen.png\" alt=\"doxygen\"/>"
- << "</a> " << versionString << " ";
- t << "</small></address>";
- if (Debug::isFlagSet(Debug::Validate))
+ if (!generateTreeView)
{
- t << "<p><a href=\"http://validator.w3.org/check/referer\">"
- "<img class=\"footer\" src=\"http://www.w3.org/Icons/valid-html401\""
- " height=\"31\" width=\"88\" alt=\"This page is Valid HTML 4.01 "
- "Transitional!\"></a><a href=\"http://jigsaw.w3.org/css-validator/\">"
- "<img class=\"footer\" style=\"border:0;width:88px;height:31px\" "
- "src=\"http://jigsaw.w3.org/css-validator/images/vcss\" "
- "alt=\"This page uses valid CSS!\"/></a></p>";
+ t << "<hr class=\"footer\"/><address class=\"footer\"><small>";
+ t << writeLogoAsString(relPath);
+ t << "</small></address>";
+ if (Debug::isFlagSet(Debug::Validate))
+ {
+ t << "<p><a href=\"http://validator.w3.org/check/referer\">"
+ "<img class=\"footer\" src=\"http://www.w3.org/Icons/valid-html401\""
+ " height=\"31\" width=\"88\" alt=\"This page is Valid HTML 4.01 "
+ "Transitional!\"></a><a href=\"http://jigsaw.w3.org/css-validator/\">"
+ "<img class=\"footer\" style=\"border:0;width:88px;height:31px\" "
+ "src=\"http://jigsaw.w3.org/css-validator/images/vcss\" "
+ "alt=\"This page uses valid CSS!\"/></a></p>";
+ }
}
t << "\n</body>\n</html>\n";
}
@@ -1552,7 +1633,7 @@ void HtmlGenerator::writeChar(char c)
static void startSectionHeader(FTextStream &t,
const QCString &relPath,int sectionCount)
{
- t << "<!-- startSectionHeader -->";
+ //t << "<!-- startSectionHeader -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1571,13 +1652,13 @@ static void startSectionHeader(FTextStream &t,
static void endSectionHeader(FTextStream &t)
{
- t << "<!-- endSectionHeader -->";
+ //t << "<!-- endSectionHeader -->";
t << "</div>" << endl;
}
static void startSectionSummary(FTextStream &t,int sectionCount)
{
- t << "<!-- startSectionSummary -->";
+ //t << "<!-- startSectionSummary -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1589,7 +1670,7 @@ static void startSectionSummary(FTextStream &t,int sectionCount)
static void endSectionSummary(FTextStream &t)
{
- t << "<!-- endSectionSummary -->";
+ //t << "<!-- endSectionSummary -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1599,7 +1680,7 @@ static void endSectionSummary(FTextStream &t)
static void startSectionContent(FTextStream &t,int sectionCount)
{
- t << "<!-- startSectionContent -->";
+ //t << "<!-- startSectionContent -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1615,7 +1696,7 @@ static void startSectionContent(FTextStream &t,int sectionCount)
static void endSectionContent(FTextStream &t)
{
- t << "<!-- endSectionContent -->";
+ //t << "<!-- endSectionContent -->";
t << "</div>" << endl;
}
@@ -1961,7 +2042,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
{
if (emptyList)
{
- if (closeBracket) t << "&#160;)";
+ if (closeBracket) t << "</td><td>)";
t << "</td>" << endl;
t << " <td>";
}
@@ -2233,11 +2314,11 @@ static void startQuickIndexList(FTextStream &t,bool compact,bool topLevel=TRUE)
{
if (topLevel)
{
- t << " <div class=\"tabs\">\n";
+ t << " <div id=\"navrow1\" class=\"tabs\">\n";
}
else
{
- t << " <div class=\"tabs2\">\n";
+ t << " <div id=\"navrow2\" class=\"tabs2\">\n";
}
t << " <ul class=\"tablist\">\n";
}
@@ -2264,7 +2345,16 @@ static void startQuickIndexItem(FTextStream &t,const char *l,
bool hl,bool /*compact*/,
const QCString &relPath)
{
- t << " <li"; if (hl) t << " class=\"current\"";
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ t << " <li";
+ if (hl)
+ {
+ t << " class=\"current\"";
+ //if (generateTreeView)
+ //{
+ // t << " onmouseover=\"return navShow('" << l << "')\"";
+ //}
+ }
t << "><a ";
t << "href=\"" << relPath << l << "\">";
t << "<span>";
@@ -2323,9 +2413,9 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
FALSE,FALSE,relPath);
t << fixSpaces(entry->title());
- endQuickIndexItem(t);
// recursive into child list
renderQuickLinksAsTree(t,relPath,entry);
+ endQuickIndexItem(t);
}
}
endQuickIndexList(t,FALSE);
@@ -2337,6 +2427,7 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
bool highlightParent,bool highlightSearch)
{
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
{
renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
@@ -2360,7 +2451,10 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
if (entry->visible() && quickLinkVisible(entry->kind()))
{
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
- entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent)),
+ entry==hlEntry &&
+ (entry->children().count()>0 ||
+ (entry->kind()==kind && !highlightParent)
+ ),
TRUE,relPath);
t << fixSpaces(entry->title());
endQuickIndexItem(t);
@@ -2368,80 +2462,29 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
}
if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry())
{
-#if 0 // old PHP based search engine
- // last item of the top row -> special case for search engine
- if (Config_getBool("SEARCHENGINE"))
- {
- QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
- if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
- t << " <li>\n";
- t << " <form action=\"" << relPath << "search.php\" method=\"get\">\n";
- t << " <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
- t << " <tr>\n";
- t << " <td><label>&#160;" << searchFor << "&#160;</label></td>\n";
- if (!highlightSearch)
- {
- t << " <td><input type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/></td>\n";
- t << " </tr>\n";
- t << " </table>\n";
- t << " </form>\n";
- t << " </li>\n";
- }
- }
- if (!highlightSearch) // on the search page the page will be ended by the
- // page itself
- {
- endQuickIndexList(t,TRUE);
- }
-#endif
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView */)
{
if (!serverBasedSearch) // pure client side search
{
t << " <li id=\"searchli\">\n";
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <span class=\"left\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
- t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
- t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
- t << " alt=\"\"/>\n";
- t << " <input type=\"text\" id=\"MSearchField\" value=\""
- << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
- t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
- t << " </span><span class=\"right\">\n";
- t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
- << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
- t << " </span>\n";
- t << " </div>\n";
+ writeClientSearchBox(t,relPath);
t << " </li>\n";
}
- else if (!generateTreeView) // server based search
+ else // if (!generateTreeView) // server based search
{
t << " <li id=\"searchli\">\n";
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <span class=\"left\">\n";
- t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
+ writeServerSearchBox(t,relPath,highlightSearch);
if (!highlightSearch)
{
- t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
- << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
- t << " </form>\n";
- t << " </span><span class=\"right\"></span>\n";
- t << " </div>\n";
t << " </li>\n";
}
}
}
if (!highlightSearch) // on the search page the page will be ended by the
- // page itself
+ // page itself
{
endQuickIndexList(t,TRUE);
}
@@ -2451,6 +2494,18 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
endQuickIndexList(t,TRUE);
}
}
+#if 0
+ if (generateTreeView)
+ {
+ // add empty rows for the dynamic menus (max 4 levels)
+ t << " <div id=\"navrow2\" class=\"tabs2\">\n";
+ t << " </div>\n";
+ t << " <div id=\"navrow3\" class=\"tabs3\">\n";
+ t << " </div>\n";
+ t << " <div id=\"navrow4\" class=\"tabs3\">\n";
+ t << " </div>\n";
+ }
+#endif
}
}
@@ -2505,18 +2560,56 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact,
void HtmlGenerator::startQuickIndices()
{
- if (!Config_getBool("DISABLE_INDEX"))
+ static bool customHeader = !Config_getString("HTML_HEADER").isEmpty();
+
+ if (!customHeader)
{
- t << "<div class=\"navigation\" id=\"top\">" << endl;
+ t << "<div id=\"top\"";
+ //if (generateTreeView)
+ //{
+ // t << " onmouseout=\"return navLeave()\" onmouseover=\"navEnter()\"";
+ //}
+ t << ">" << endl;
+ writeTitleArea(t,relPath);
}
}
void HtmlGenerator::endQuickIndices()
{
- if (!Config_getBool("DISABLE_INDEX"))
- {
- t << "</div>" << endl;
+ t << "</div>" << endl;
+}
+
+QCString HtmlGenerator::writeSplitBarAsString(const char *name,const char *relpath)
+{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ QCString result;
+ // write split bar
+ if (generateTreeView)
+ {
+ result = QCString(
+ "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n"
+ " <div id=\"nav-tree\">\n"
+ " <div id=\"nav-tree-contents\">\n"
+ " </div>\n"
+ " </div>\n"
+ " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
+ " class=\"ui-resizable-handle\">\n"
+ " </div>\n"
+ "</div>\n"
+ "<script type=\"text/javascript\">\n"
+ " initNavTree('") +
+ QCString(name) + Doxygen::htmlFileExtension +
+ QCString("','") + relpath +
+ QCString("');\n"
+ "</script>\n"
+ "<div id=\"doc-content\">\n");
}
+ return result;
+}
+
+void HtmlGenerator::writeSplitBar(const char *name)
+{
+ t << writeSplitBarAsString(name,relPath);
}
void HtmlGenerator::startContents()
@@ -2537,6 +2630,7 @@ void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli)
// PHP based search script
void HtmlGenerator::writeSearchPage()
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
QFile f(fileName);
if (f.open(IO_WriteOnly))
@@ -2553,24 +2647,27 @@ void HtmlGenerator::writeSearchPage()
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView*/)
{
t << "<script type=\"text/javascript\"><!--\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
<< "search\",false,'" << theTranslator->trSearch() << "');\n";
t << "--></script>\n";
}
+ t << "<div id=\"top\">" << endl;
+ writeTitleArea(t,"");
if (!Config_getBool("DISABLE_INDEX"))
{
writeDefaultQuickLinks(t,TRUE,HLI_Search,"");
}
else
{
- t << "&#160;\n<div class=\"qindex\">\n";
- t << " <form class=\"search\" action=\"search.php\" "
- << "method=\"get\">\n";
+ //t << "&#160;\n<div class=\"qindex\">\n";
+ //t << " <form class=\"search\" action=\"search.php\" "
+ // << "method=\"get\">\n";
+ t << "</div>" << endl;
}
t << "\n<script language=\"php\">\n\n";
@@ -2601,10 +2698,10 @@ void HtmlGenerator::writeSearchPage()
t << "}\n";
t << "function end_form($value)\n";
t << "{\n";
- if (!generateTreeView)
- {
- t << " echo \""
- << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
+ t << " echo \"";
+ if (!Config_getBool("DISABLE_INDEX"))
+ {
+ t << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
<< "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" "
<< "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n"
<< " </form>\\n"
@@ -2612,16 +2709,34 @@ void HtmlGenerator::writeSearchPage()
<< " </div>\\n"
<< " </li>\\n"
<< " </ul>\\n"
- << " </div>\\n"
- << "\";\n";
+ << " </div>\\n";
+ t << "</div>\\n";
}
- else
+ if (generateTreeView)
{
- t << " echo \""
- << " </ul>\\n"
- << " </div>\\n"
- << "\";\n";
+ t << substitute(substitute(writeSplitBarAsString("",""),
+ "\"","\\\""),
+ "\n","\\n");
+ }
+ t << "\";\n";
+ t << "}\n";
+ t << "function end_page()\n";
+ t << "{\n";
+ t << " echo \"";
+ if (generateTreeView)
+ {
+ t << "</div>\\n";
+ t << "<div id=\\\"nav-path\\\" class=\\\"navpath\\\">\\n";
+ t << " <ul>\\n";
+ t << " <li class=\\\"footer\\\">";
+ t << substitute(substitute(writeLogoAsString(""),
+ "\"","\\\""),
+ "\n","\\n");
+ t << "</li>\\n";
+ t << " </ul>\\n";
+ t << "</div>\\n";
}
+ t << "</body></html>\";\n";
t << "}\n";
t << "\n";
t << search_script;
diff --git a/src/htmlgen.h b/src/htmlgen.h
index c4b9da4..bacb947 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -36,8 +36,12 @@ class HtmlGenerator : public OutputGenerator
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
- static void writeSearchPage();
static void writeTabData();
+ static void writeSearchFooter(FTextStream &t,const QCString &relPath);
+ static void writeSearchData(const char *dir);
+ static void writeSearchPage();
+ static QCString writeLogoAsString(const char *path);
+ static QCString writeSplitBarAsString(const char *name,const char *relpath);
void enable()
{ if (genStack->top()) active=*genStack->top(); else active=TRUE; }
@@ -188,6 +192,8 @@ class HtmlGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices();
void endQuickIndices();
+ void writeSplitBar(const char *name);
+ void writeLogo();
void writeQuickLinks(bool compact,HighlightedItem hli);
void startContents();
void endContents();
@@ -245,15 +251,15 @@ class HtmlGenerator : public OutputGenerator
void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
void endFontClass() { t << "</span>"; }
+
void writeCodeAnchor(const char *anchor)
{ t << "<a name=\"" << anchor << "\"></a>"; }
void linkableSymbol(int,const char *,Definition *,Definition *) {}
- static void writeSearchFooter(FTextStream &t,const QCString &relPath);
- static void writeSearchData(const char *dir);
//static void generateSectionImages();
private:
+ static void writePageFooter(FTextStream &t,const QCString &,const QCString &);
QCString lastTitle;
QCString lastFile;
QCString relPath;
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index c4d4e9e..fb84938 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -447,7 +447,7 @@ void HtmlHelp::createProjectFile()
FTextStream t(&f);
QCString indexName="index"+Doxygen::htmlFileExtension;
- if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
+ //if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
t << "[OPTIONS]\n";
if (!Config_getString("CHM_FILE").isEmpty())
{
diff --git a/src/index.cpp b/src/index.cpp
index a049a3f..a60f5be 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -51,6 +51,10 @@ static const char search_script[]=
#include "search_js.h"
;
+//static const char navindex_script[]=
+//#include "navindex_js.h"
+//;
+
int annotatedClasses;
int hierarchyClasses;
int documentedFiles;
@@ -199,11 +203,11 @@ static void startQuickIndexList(OutputList &ol,bool letterTabs=FALSE)
{
if (letterTabs)
{
- ol.writeString(" <div class=\"tabs3\">\n");
+ ol.writeString(" <div id=\"navrow4\" class=\"tabs3\">\n");
}
else
{
- ol.writeString(" <div class=\"tabs2\">\n");
+ ol.writeString(" <div id=\"navrow3\" class=\"tabs2\">\n");
}
ol.writeString(" <ul class=\"tablist\">\n");
}
@@ -288,33 +292,51 @@ void endTitle(OutputList &ol,const char *fileName,const char *name)
}
void startFile(OutputList &ol,const char *name,const char *manName,
- const char *title,HighlightedItem hli,bool additionalIndices)
+ const char *title,HighlightedItem hli,bool additionalIndices,
+ const char *altSidebarName)
{
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.startFile(name,manName,title);
- if (!Config_getBool("DISABLE_INDEX"))
+ ol.startQuickIndices();
+ if (!disableIndex)
{
- ol.startQuickIndices();
ol.writeQuickLinks(TRUE,hli);
- if (!additionalIndices)
- {
- ol.endQuickIndices();
- //ol.startContents();
- }
}
- else
+ if (!additionalIndices)
{
- if (!additionalIndices)
- {
- // ol.startContents();
- }
+ ol.endQuickIndices();
+ }
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(altSidebarName ? altSidebarName : name);
}
}
-void endFile(OutputList &ol,bool)
+void endFile(OutputList &ol,bool skipNavIndex)
{
- ol.endContents();
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool hasCustomFooter = !Config_getString("HTML_FOOTER").isEmpty();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
+ if (!skipNavIndex)
+ {
+ ol.endContents();
+ if (generateTreeView)
+ {
+ ol.writeString("</div>\n");
+ ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
+ ol.writeString(" <ul>\n");
+ if (!hasCustomFooter)
+ {
+ ol.writeString(" <li class=\"footer\">");
+ ol.writeLogo();
+ ol.writeString("</li>\n");
+ ol.writeString(" </ul>\n");
+ ol.writeString(" </div>\n");
+ }
+ }
+ }
ol.writeFooter(); // write the footer
ol.popGeneratorState();
ol.endFile();
@@ -685,10 +707,10 @@ void writeHierarchicalIndex(OutputList &ol)
if (hierarchyClasses==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"hierarchy",0, theTranslator->trHierarchicalIndex().data(),
- HLI_Hierarchy);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
+ QCString title = lne->title();
+ startFile(ol,"hierarchy",0, title, HLI_Hierarchy);
startTitle(ol,0);
- QCString title = theTranslator->trClassHierarchy();
if (vhdlOpt) title = VhdlDocGen::trDesignUnitHierarchy();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -744,8 +766,9 @@ void writeGraphicalClassHierarchy(OutputList &ol)
{
if (hierarchyClasses==0) return;
ol.disableAllBut(OutputGenerator::Html);
- QCString title = theTranslator->trGraphicalHierarchy();
- startFile(ol,"inherits",0,title.data(),HLI_Hierarchy);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
+ QCString title = lne->title();
+ startFile(ol,"inherits",0,title,HLI_Hierarchy,FALSE,"hierarchy");
startTitle(ol,0);
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -755,7 +778,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0);
+ //Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0);
ol.startParagraph();
ol.startTextLink("hierarchy",0);
ol.parseText(theTranslator->trGotoTextualHierarchy());
@@ -810,9 +833,10 @@ void writeFileIndex(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"files",0,theTranslator->trFileIndex().data(),HLI_Files);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files);
+ QCString title = lne->title();
+ startFile(ol,"files",0,title,HLI_Files);
startTitle(ol,0);
- QCString title = theTranslator->trFileList();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -821,7 +845,7 @@ void writeFileIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trFileList(),0,"files",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
ol.endTextBlock();
@@ -981,29 +1005,15 @@ void writeNamespaceIndex(OutputList &ol)
if (documentedNamespaces==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title;
- if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
- {
- startFile(ol,"namespaces",0,theTranslator->trPackageList().data(),HLI_Namespaces);
- title = theTranslator->trPackageList();
- }
- else if (fortranOpt)
- {
- startFile(ol,"namespaces",0,theTranslator->trModulesIndex().data(),HLI_Namespaces);
- title = theTranslator->trModulesList();
- }
- else
- {
- startFile(ol,"namespaces",0,theTranslator->trNamespaceIndex().data(),HLI_Namespaces);
- title = theTranslator->trNamespaceList();
- }
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces);
+ QCString title = lne->title();
+ startFile(ol,"namespaces",0,title,HLI_Namespaces);
startTitle(ol,0);
- QCString longTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// longTitle.prepend(Config_getString("PROJECT_NAME")+" ");
//}
- ol.parseText(longTitle);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
@@ -1438,18 +1448,22 @@ void writeAlphabeticalClassList(OutputList &ol)
void writeAlphabeticalIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (annotatedClasses==0) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"classes"+Doxygen::htmlFileExtension,0,theTranslator->trAlphabeticalList().data(),HLI_Classes);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes);
+ QCString title = lne->title();
+ startFile(ol,"classes",0,title,HLI_Classes);
startTitle(ol,0);
- ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/
- (fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
- theTranslator->trCompoundIndex()
- ));
+ ol.parseText(title);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0);
+ //ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/
+ // (fortranOpt ? theTranslator->trCompoundIndexFortran() :
+ // vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
+ // theTranslator->trCompoundIndex()
+ // ));
endTitle(ol,0,0);
ol.startContents();
writeAlphabeticalClassList(ol);
@@ -1467,17 +1481,16 @@ void writeAnnotatedIndex(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title = fortranOpt ? theTranslator->trCompoundListFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitList() :
- theTranslator->trCompoundList() ;
- startFile(ol,"annotated",0,title.data(),HLI_Annotated);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassAnnotated);
+ QCString title = lne->title();
+ startFile(ol,"annotated",0,title,HLI_Annotated);
startTitle(ol,0);
- QCString longTitle = title;
+ //QCString longTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// longTitle.prepend(Config_getString("PROJECT_NAME")+" ");
//}
- ol.parseText(longTitle);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
@@ -1913,8 +1926,10 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
if (documentedClassMembers[hl]==0) return;
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
int numPages=1;
@@ -1924,36 +1939,12 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
numPages=127;
}
-#if 0
- struct CmhlInfo
- {
- CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } cmhlInfo[] =
- {
- CmhlInfo("functions", theTranslator->trAll()),
- CmhlInfo("functions_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- CmhlInfo("functions_vars",theTranslator->trVariables()),
- CmhlInfo("functions_type",theTranslator->trTypedefs()),
- CmhlInfo("functions_enum",theTranslator->trEnumerations()),
- CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
- CmhlInfo("functions_prop",theTranslator->trProperties()),
- CmhlInfo("functions_evnt",theTranslator->trEvents()),
- CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
- };
-#endif
-
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt ? theTranslator->trCompoundMembersFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitMembers() :
- theTranslator->trCompoundMembers() ;
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
+ QCString title = lne->title();
if (hl!=CMHL_All) title+=(QCString)" - "+getCmhlInfo(hl)->title;
int page;
@@ -1967,9 +1958,14 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title,HLI_Functions,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_Functions);
+ }
startQuickIndexList(ol);
// index item for global member list
@@ -1995,14 +1991,18 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
endQuickIndexList(ol);
// quick alphabetical index
- bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
- getCmhlInfo(hl)->fname,multiPageIndex);
+ getCmhlInfo(hl)->fname,multiPageIndex);
}
-
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getCmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==CMHL_All)
@@ -2032,7 +2032,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
void writeClassMemberIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
writeClassMemberIndexFiltered(ol,CMHL_All);
writeClassMemberIndexFiltered(ol,CMHL_Functions);
writeClassMemberIndexFiltered(ol,CMHL_Variables);
@@ -2045,33 +2045,25 @@ void writeClassMemberIndex(OutputList &ol)
if (documentedClassMembers[CMHL_All]>0)
{
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"functions",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"functions",0);
}
}
//----------------------------------------------------------------------------
-static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
+struct FmhlInfo
{
- if (documentedFileMembers[hl]==0) return;
-
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- bool multiPageIndex=FALSE;
- int numPages=1;
- if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
- {
- multiPageIndex=TRUE;
- numPages=127;
- }
+ FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
+ const char *fname;
+ QCString title;
+};
- struct FmhlInfo
- {
- FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } fmhlInfo[] =
+static const FmhlInfo *getFmhlInfo(int hl)
+{
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static FmhlInfo fmhlInfo[] =
{
FmhlInfo("globals", theTranslator->trAll()),
FmhlInfo("globals_func",
@@ -2084,12 +2076,31 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
FmhlInfo("globals_defs",theTranslator->trDefines())
};
+ return &fmhlInfo[hl];
+}
+
+static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
+{
+ if (documentedFileMembers[hl]==0) return;
+
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+
+ bool multiPageIndex=FALSE;
+ int numPages=1;
+ if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
+ {
+ multiPageIndex=TRUE;
+ numPages=127;
+ }
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
+ QCString title = lne->title();
int page;
bool first=TRUE;
@@ -2097,20 +2108,25 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
{
if (!multiPageIndex || g_fileIndexLetterUsed[hl][page].count()>0)
{
- QCString fileName = fmhlInfo[hl].fname;
+ QCString fileName = getFmhlInfo(hl)->fname;
if (multiPageIndex && !first)
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title.data(),HLI_Globals,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_Globals);
+ }
startQuickIndexList(ol);
// index item for all member lists
startQuickIndexItem(ol,
- fmhlInfo[0].fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
- ol.writeString(fixSpaces(fmhlInfo[0].title));
+ getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
+ ol.writeString(fixSpaces(getFmhlInfo(0)->title));
endQuickIndexItem(ol);
int i;
@@ -2120,22 +2136,26 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
if (documentedFileMembers[i]>0)
{
startQuickIndexItem(ol,
- fmhlInfo[i].fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(fmhlInfo[i].title));
+ getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+ ol.writeString(fixSpaces(getFmhlInfo(i)->title));
endQuickIndexItem(ol);
}
}
endQuickIndexList(ol);
- bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
- fmhlInfo[hl].fname,multiPageIndex);
+ getFmhlInfo(hl)->fname,multiPageIndex);
}
-
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getFmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==FMHL_All)
@@ -2151,9 +2171,9 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
//ol.newParagraph(); // FIXME:PARA
//writeFileMemberList(ol,quickIndex,hl,page);
writeMemberList(ol,quickIndex,
- multiPageIndex?page:-1,
- g_fileIndexLetterUsed[hl],
- Definition::TypeFile);
+ multiPageIndex?page:-1,
+ g_fileIndexLetterUsed[hl],
+ Definition::TypeFile);
endFile(ol);
first=FALSE;
}
@@ -2173,11 +2193,38 @@ void writeFileMemberIndex(OutputList &ol)
if (documentedFileMembers[FMHL_All]>0)
{
- QCString title = theTranslator->trFileMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"globals",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"globals",0);
}
}
+//----------------------------------------------------------------------------
+
+struct NmhlInfo
+{
+ NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
+ const char *fname;
+ QCString title;
+};
+
+static const NmhlInfo *getNmhlInfo(int hl)
+{
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static NmhlInfo nmhlInfo[] =
+ {
+ NmhlInfo("namespacemembers", theTranslator->trAll()),
+ NmhlInfo("namespacemembers_func",
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions()),
+ NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
+ NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
+ NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
+ NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
+ };
+ return &nmhlInfo[hl];
+}
//----------------------------------------------------------------------------
@@ -2186,8 +2233,9 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
if (documentedNamespaceMembers[hl]==0) return;
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
int numPages=1;
@@ -2197,29 +2245,12 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
numPages=127;
}
- struct NmhlInfo
- {
- NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } nmhlInfo[] =
- {
- NmhlInfo("namespacemembers", theTranslator->trAll()),
- NmhlInfo("namespacemembers_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
- NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
- NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
- NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
- };
-
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
+ QCString title = lne->title();
int page;
bool first=TRUE;
@@ -2227,19 +2258,24 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
if (!multiPageIndex || g_namespaceIndexLetterUsed[hl][page].count()>0)
{
- QCString fileName = nmhlInfo[hl].fname;
+ QCString fileName = getNmhlInfo(hl)->fname;
if (multiPageIndex && !first)
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title,HLI_NamespaceMembers,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_NamespaceMembers);
+ }
startQuickIndexList(ol);
startQuickIndexItem(ol,
- nmhlInfo[0].fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
- ol.writeString(fixSpaces(nmhlInfo[0].title));
+ getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
+ ol.writeString(fixSpaces(getNmhlInfo(0)->title));
endQuickIndexItem(ol);
int i;
@@ -2248,22 +2284,27 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
if (documentedNamespaceMembers[i]>0)
{
startQuickIndexItem(ol,
- nmhlInfo[i].fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(nmhlInfo[i].title));
+ getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+ ol.writeString(fixSpaces(getNmhlInfo(i)->title));
endQuickIndexItem(ol);
}
}
endQuickIndexList(ol);
- bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
- nmhlInfo[hl].fname,multiPageIndex);
+ getNmhlInfo(hl)->fname,multiPageIndex);
}
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getNmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==NMHL_All)
@@ -2291,7 +2332,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
void writeNamespaceMemberIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
writeNamespaceMemberIndexFiltered(ol,NMHL_All);
writeNamespaceMemberIndexFiltered(ol,NMHL_Functions);
writeNamespaceMemberIndexFiltered(ol,NMHL_Variables);
@@ -2301,8 +2342,8 @@ void writeNamespaceMemberIndex(OutputList &ol)
if (documentedNamespaceMembers[NMHL_All]>0)
{
- QCString title = fortranOpt?theTranslator->trModulesMembers():theTranslator->trNamespaceMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"namespacemembers",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"namespacemembers",0);
}
}
@@ -2538,7 +2579,7 @@ class SearchIndexCategoryMapping
void writeJavascriptSearchIndex()
{
if (!Config_getBool("GENERATE_HTML")) return;
- static bool treeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool treeView = Config_getBool("GENERATE_TREEVIEW");
ClassSDict::Iterator cli(*Doxygen::classSDict);
ClassDef *cd;
@@ -2690,7 +2731,7 @@ void writeJavascriptSearchIndex()
if (!extLinksInWindow || d->getReference().isEmpty())
{
t << " target=\"";
- if (treeView) t << "basefrm"; else t << "_parent";
+ /*if (treeView) t << "basefrm"; else*/ t << "_parent";
t << "\"";
}
t << ">";
@@ -2771,7 +2812,7 @@ void writeJavascriptSearchIndex()
if (!extLinksInWindow || d->getReference().isEmpty())
{
t << " target=\"";
- if (treeView) t << "basefrm"; else t << "_parent";
+ /*if (treeView) t << "basefrm"; else*/ t << "_parent";
t << "\"";
}
t << ">";
@@ -2968,8 +3009,9 @@ void writeExampleIndex(OutputList &ol)
if (Doxygen::exampleSDict->count()==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title = theTranslator->trExamples();
- startFile(ol,"examples",0,title.data(),HLI_Examples);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Examples);
+ QCString title = lne->title();
+ startFile(ol,"examples",0,title,HLI_Examples);
startTitle(ol,0);
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -2979,7 +3021,7 @@ void writeExampleIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trExamples(),0,"examples",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trExamplesDescription());
//ol.newParagraph();
@@ -3013,52 +3055,158 @@ void writeExampleIndex(OutputList &ol)
//----------------------------------------------------------------------------
-void writeFullNavIndex(QTextStream &t, LayoutNavEntry *root,int indent)
+template<typename T>
+bool writeMemberNavIndex(FTextStream &t,
+ int indent,
+ int n,
+ int documentedMembers[],
+ MemberIndexList indexLetterUsed[][MEMBER_INDEX_ENTRIES],
+ const T *(*getInfo)(int),
+ bool &first
+ )
+
{
+ bool found=FALSE;
QCString indentStr;
indentStr.fill(' ',indent*2);
- if (root->children().count()>0)
+ // index items per category member lists
+ int i;
+ for (i=0;i<n;i++)
{
- t << indentStr << "<ul>" << endl;
- QListIterator<LayoutNavEntry> li(root->children());
- LayoutNavEntry *entry;
- for (li.toFirst();(entry=li.current());++li)
+ bool hasIndex = documentedMembers[i]>0;
+ bool quickIndex = documentedMembers[i]>maxItemsBeforeQuickIndex;
+ bool multiIndexPage = documentedMembers[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX;
+ if (hasIndex)
{
- t << indentStr << "<li>";
- t << "<a href=\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\">";
- t << fixSpaces(entry->title());
- t << "</a>";
- t << "</li>" << endl;
- writeFullNavIndex(t,entry,indent+1);
- if (entry->kind()==LayoutNavEntry::ClassMembers)
- {
- t << indentStr << " <ul>" << endl;
- // index items per category member lists
- int i;
- for (i=0;i<CMHL_Total;i++)
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first = FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found = TRUE;
+
+ t << indentStr << " [ ";
+ t << "\"" << fixSpaces(getInfo(i)->title) << "\", ";
+ t << "\"" << getInfo(i)->fname << Doxygen::htmlFileExtension << "\", ";
+ bool firstPage=TRUE;
+ if (quickIndex)
+ {
+ t << "[ " << endl;
+ int j;
+ for (j=33;j<127;j++)
{
- if (documentedClassMembers[i]>0)
+ if (indexLetterUsed[i][j].count()>0)
{
- t << indentStr << " <li>";
- t << "<a href=\"" << getCmhlInfo(i)->fname << Doxygen::htmlFileExtension << "\">";
- t << fixSpaces(getCmhlInfo(i)->title);
- t << "</a>";
- t << "</li>" << endl;
+ if (!firstPage) t << "," << endl;
+ QCString fullName = getInfo(i)->fname;
+ QCString extension = Doxygen::htmlFileExtension;
+ QCString anchor;
+ if (firstPage || !multiIndexPage)
+ anchor=fullName+extension+"#index_";
+ else
+ anchor=fullName+QCString().sprintf("_0x%02x",j)+extension+"#index_";
+ char is[2];is[0]=(char)j;is[1]='\0';
+ QCString ci = letterToLabel((char)j);
+ t << indentStr << " [ ";
+ t << "\"" << is << "\", ";
+ t << "\"" << anchor << ci << "\", null ]";
+ firstPage=FALSE;
}
}
- t << indentStr << " </ul>" << endl;
+ t << endl << indentStr << " ] ]";
}
- else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
+ else
{
- t << indentStr << " <namespacemembers>" << endl;
+ t << "null" << " ]";
}
- else if (entry->kind()==LayoutNavEntry::FileGlobals)
+ }
+ }
+ return found;
+}
+
+//----------------------------------------------------------------------------
+
+bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
+{
+ static struct NavEntryCountMap
+ {
+ LayoutNavEntry::Kind kind;
+ bool hasItems;
+ } navEntryCountMap[] =
+ {
+ { LayoutNavEntry::MainPage, TRUE },
+ { LayoutNavEntry::Pages, indexedPages>0 },
+ { LayoutNavEntry::Modules, documentedGroups>0 },
+ { LayoutNavEntry::Namespaces, documentedNamespaces>0 },
+ { LayoutNavEntry::NamespaceMembers, documentedNamespaceMembers[NMHL_All]>0 },
+ { LayoutNavEntry::Classes, annotatedClasses>0 },
+ { LayoutNavEntry::ClassAnnotated, annotatedClasses>0 },
+ { LayoutNavEntry::ClassHierarchy, hierarchyClasses>0 },
+ { LayoutNavEntry::ClassMembers, documentedClassMembers[CMHL_All]>0 },
+ { LayoutNavEntry::Files, documentedFiles>0 },
+ { LayoutNavEntry::FileGlobals, documentedFileMembers[FMHL_All]>0 },
+ { LayoutNavEntry::Dirs, documentedDirs>0 },
+ { LayoutNavEntry::Examples, Doxygen::exampleSDict->count()>0 }
+ };
+
+ QCString indentStr;
+ indentStr.fill(' ',indent*2);
+ bool found=FALSE;
+ if (root->children().count()>0)
+ {
+ QListIterator<LayoutNavEntry> li(root->children());
+ LayoutNavEntry *entry;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (navEntryCountMap[entry->kind()].hasItems && entry->visible())
{
- t << indentStr << " <fileglobals>" << endl;
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first = FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found = TRUE;
+
+ bool emptySection=TRUE;
+ t << indentStr << " [ ";
+ t << "\"" << fixSpaces(entry->title()) << "\", ";
+ t << "\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\", ";
+
+ // write children (if any)
+ bool firstChild=TRUE;
+ if (entry->kind()==LayoutNavEntry::ClassMembers)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,CMHL_Total,documentedClassMembers,g_memberIndexLetterUsed,&getCmhlInfo,firstChild);
+ }
+ else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,NMHL_Total,documentedNamespaceMembers,g_namespaceIndexLetterUsed,&getNmhlInfo,firstChild);
+ }
+ else if (entry->kind()==LayoutNavEntry::FileGlobals)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,FMHL_Total,documentedFileMembers,g_fileIndexLetterUsed,&getFmhlInfo,firstChild);
+ }
+ else
+ {
+ emptySection = !writeFullNavIndex(t,entry,indent+1,firstChild);
+ }
+ // end entry
+ if (emptySection) // entry without children
+ t << "null ]";
+ else // entry with children
+ t << endl << indentStr << " ] ]";
}
}
- t << indentStr << "</ul>" << endl;
}
+ return found;
}
//----------------------------------------------------------------------------
@@ -3117,9 +3265,10 @@ void writePageIndex(OutputList &ol)
if (indexedPages==0) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"pages",0,theTranslator->trPageIndex().data(),HLI_Pages);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Pages);
+ QCString title = lne->title();
+ startFile(ol,"pages",0,title,HLI_Pages);
startTitle(ol,0);
- QCString title = theTranslator->trRelatedPages();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3128,8 +3277,8 @@ void writePageIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- //Doxygen::indexList.addContentsItem(TRUE,theTranslator->trRelatedPages(),0,"pages",0);
- //Doxygen::indexList.incContentsDepth();
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0);
+ Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trRelatedPagesDescription());
ol.endTextBlock();
startIndexHierarchy(ol,0);
@@ -3165,7 +3314,7 @@ void writePageIndex(OutputList &ol)
}
}
endIndexHierarchy(ol,0);
- //Doxygen::indexList.decContentsDepth();
+ Doxygen::indexList.decContentsDepth();
endFile(ol);
ol.popGeneratorState();
}
@@ -3588,9 +3737,11 @@ void writeGroupIndex(OutputList &ol)
if (documentedGroups==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"modules",0,theTranslator->trModuleIndex().data(),HLI_Modules);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Modules);
+ QCString title = lne->title();
+ startFile(ol,"modules",0,title,HLI_Modules);
startTitle(ol,0);
- QCString title = theTranslator->trModules();
+ //QCString title = theTranslator->trModules();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3599,7 +3750,7 @@ void writeGroupIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trModules(),0,"modules",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trModulesDescription());
ol.endTextBlock();
@@ -3636,9 +3787,10 @@ void writeDirIndex(OutputList &ol)
if (documentedDirs==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"dirs",0,theTranslator->trDirIndex().data(),HLI_Directories);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Dirs);
+ QCString title = lne->title();
+ startFile(ol,"dirs",0,title,HLI_Directories);
startTitle(ol,0);
- QCString title = theTranslator->trDirectories();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3647,7 +3799,7 @@ void writeDirIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trDirIndex(),0,"dirs",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trDirDescription());
ol.endTextBlock();
@@ -3704,12 +3856,16 @@ void writeIndex(OutputList &ol)
#if 0
{
- QFile f("navindex.html");
+ QFile f(Config_getString("HTML_OUTPUT")+"/navindex.js");
if (f.open(IO_WriteOnly))
{
- QTextStream t(&f);
+ FTextStream t(&f);
+ t << "var NAVINDEX =" << endl;
LayoutNavEntry *layout = LayoutDocManager::instance().rootNavEntry();
- writeFullNavIndex(t,layout,0);
+ bool first=TRUE;
+ writeFullNavIndex(t,layout,0,first);
+ t << endl << "];" << endl;
+ t << endl << navindex_script;
}
}
#endif
@@ -3734,7 +3890,9 @@ void writeIndex(OutputList &ol)
title = filterTitle(Doxygen::mainPage->title());
}
- QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString indexName="index";
ol.startFile(indexName,0,title);
if (Doxygen::mainPage)
@@ -3747,11 +3905,15 @@ void writeIndex(OutputList &ol)
}
}
+ ol.startQuickIndices();
if (!Config_getBool("DISABLE_INDEX"))
{
- ol.startQuickIndices();
ol.writeQuickLinks(TRUE,HLI_Main);
- ol.endQuickIndices();
+ }
+ ol.endQuickIndices();
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(indexName);
}
bool headerWritten=FALSE;
if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty())
@@ -3782,6 +3944,7 @@ void writeIndex(OutputList &ol)
ol.endHeaderSection();
}
ol.startContents();
+#if 0
// ol.newParagraph(); // FIXME:PARA
if (!Config_getString("PROJECT_NUMBER").isEmpty())
{
@@ -3793,6 +3956,7 @@ void writeIndex(OutputList &ol)
TRUE,FALSE);
ol.endProjectNumber();
}
+#endif
if (Config_getBool("DISABLE_INDEX") && Doxygen::mainPage==0)
{
ol.writeQuickLinks(FALSE,HLI_Main);
diff --git a/src/index.h b/src/index.h
index 986b72c..26947a6 100644
--- a/src/index.h
+++ b/src/index.h
@@ -261,8 +261,8 @@ void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
void endTitle(OutputList &ol,const char *fileName,const char *name);
void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,HighlightedItem hli=HLI_None,
- bool additionalIndices=FALSE);
-void endFile(OutputList &ol,bool external=FALSE);
+ bool additionalIndices=FALSE,const char *altSidebarName=0);
+void endFile(OutputList &ol,bool skipNavIndex=FALSE);
void initClassMemberIndices();
void initFileMemberIndices();
diff --git a/src/instdox.cpp b/src/instdox.cpp
index 648a5c7..6ad0ea7 100644
--- a/src/instdox.cpp
+++ b/src/instdox.cpp
@@ -59,12 +59,6 @@ void writeInstallScript()
t << ");\n";
t << "$quiet = 0;\n";
t << "\n";
- t << "if (open(F,\"search.cfg\"))\n";
- t << "{\n";
- t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_doc\"} = $_;\n";
- t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_cgi\"} = $_;\n";
- t << "}\n";
- t << "\n";
t << "while ( @ARGV ) {\n";
t << " $_ = shift @ARGV;\n";
t << " if ( s/^-// ) {\n";
@@ -120,7 +114,7 @@ void writeInstallScript()
t << " next if ( $file =~ /^\\.\\.?$/ );\n";
t << " ($file =~ /$match/) && (push @files, $file);\n";
t << " ($file =~ /\\.svg/) && (push @files, $file);\n";
- t << " ($file =~ \"tree.js\") && (push @files, $file);\n";
+ t << " ($file =~ \"navtree.js\") && (push @files, $file);\n";
t << " }\n";
t << " closedir(D);\n";
t << " }\n";
diff --git a/src/jquery.js b/src/jquery.js
new file mode 100644
index 0000000..2724efb
--- /dev/null
+++ b/src/jquery.js
@@ -0,0 +1,50 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
+ * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
+ * Date: 2/8/2008
+ * @author Ariel Flesler
+ * @version 1.3.2
+ */
+;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+
diff --git a/src/jquery_js.h b/src/jquery_js.h
new file mode 100644
index 0000000..b09267f
--- /dev/null
+++ b/src/jquery_js.h
@@ -0,0 +1,50 @@
+"/*\n"
+" * jQuery JavaScript Library v1.3.2\n"
+" * http://jquery.com/\n"
+" *\n"
+" * Copyright (c) 2009 John Resig\n"
+" * Dual licensed under the MIT and GPL licenses.\n"
+" * http://docs.jquery.com/License\n"
+" *\n"
+" * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)\n"
+" * Revision: 6246\n"
+" */\n"
+"(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\\s)+>)[^>]*$|^#([\\w-]+)$/,f=/^.[^:#\\[\\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E===\"string\"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:\"\",jquery:\"1.3.2\",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H===\"find\"){G.selector=this.selector+(this.selector?\" \":\"\")+E}else{if(H){G.selector=this.selector+\".\"+H+\"(\"+E+\")\"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F===\"string\"){if(H===g){return this[0]&&o[G||\"attr\"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E==\"width\"||E==\"height\")&&parseFloat(F)<0){F=g}return this.attr(E,F,\"curCSS\")},text:function(F){if(typeof F!==\"object\"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E=\"\";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],\"find\",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),\"find\",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement(\"div\");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\").replace(/^\\s*/,\"\")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find(\"*\").andSelf(),F=0;E.find(\"*\").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],\"events\");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),\"filter\",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,\"closest\",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E===\"string\"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),\"not\",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E===\"string\"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is(\".\"+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,\"option\")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,\"select\")){var I=E.selectedIndex,L=[],M=E.options,H=E.type==\"select-one\";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||\"\").replace(/\\r/g,\"\")}return g}if(typeof K===\"number\"){K+=\"\"}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,\"select\")){var N=o.makeArray(K);o(\"option\",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\"):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),\"slice\",Array.prototype.slice.call(arguments).join(\",\"))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,\"table\")&&o.nodeName(O,\"tr\")?(N.getElementsByTagName(\"tbody\")[0]||N.appendChild(N.ownerDocument.createElement(\"tbody\"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:\"script\"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||\"\")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J===\"boolean\"){E=J;J=arguments[1]||{};H=2}if(typeof J!==\"object\"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L===\"object\"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)===\"[object Function]\"},isArray:function(E){return s.call(E)===\"[object Array]\"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!==\"HTML\"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\\S/.test(G)){var F=document.getElementsByTagName(\"head\")[0]||document.documentElement,E=document.createElement(\"script\");E.type=\"text/javascript\";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I===\"number\"&&G==\"curCSS\"&&!b.test(E)?I+\"px\":I},className:{add:function(E,F){o.each((F||\"\").split(/\\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?\" \":\"\")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\\s+/),function(G){return !o.className.has(F,G)}).join(\" \"):\"\"}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F==\"width\"||F==\"height\"){var L,G={position:\"absolute\",visibility:\"hidden\",display:\"block\"},K=F==\"width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"];function I(){L=F==\"width\"?H.offsetWidth:H.offsetHeight;if(E===\"border\"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,\"padding\"+this,true))||0}if(E===\"margin\"){L+=parseFloat(o.curCSS(H,\"margin\"+this,true))||0}else{L-=parseFloat(o.curCSS(H,\"border\"+this+\"Width\",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F==\"opacity\"&&!o.support.opacity){L=o.attr(E,\"opacity\");return L==\"\"?\"1\":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F=\"float\"}F=F.replace(/([A-Z])/g,\"-$1\").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F==\"opacity\"&&L==\"\"){L=\"1\"}}else{if(I.currentStyle){var J=F.replace(/\\-(\\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\\d+(px)?$/i.test(L)&&/^\\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+\"px\";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement===\"undefined\"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]===\"string\"){var H=/^<(\\w+)\\s*\\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement(\"div\");o.each(F,function(P,S){if(typeof S===\"number\"){S+=\"\"}if(!S){return}if(typeof S===\"string\"){S=S.replace(/(<(\\w+)[^>]*?)\\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+\"></\"+T+\">\"});var O=S.replace(/^\\s+/,\"\").substring(0,10).toLowerCase();var Q=!O.indexOf(\"<opt\")&&[1,\"<select multiple='multiple'>\",\"</select>\"]||!O.indexOf(\"<leg\")&&[1,\"<fieldset>\",\"</fieldset>\"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,\"<table>\",\"</table>\"]||!O.indexOf(\"<tr\")&&[2,\"<table><tbody>\",\"</tbody></table>\"]||(!O.indexOf(\"<td\")||!O.indexOf(\"<th\"))&&[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"]||!O.indexOf(\"<col\")&&[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"]||!o.support.htmlSerialize&&[1,\"div<div>\",\"</div>\"]||[0,\"\",\"\"];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf(\"<table\")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]==\"<table>\"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],\"tbody\")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],\"script\")&&(!G[J].type||G[J].type.toLowerCase()===\"text/javascript\")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName(\"script\"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G==\"selected\"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G==\"type\"&&o.nodeName(J,\"input\")&&J.parentNode){throw\"type property can't be changed\"}J[G]=K}if(o.nodeName(J,\"form\")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G==\"tabIndex\"){var I=J.getAttributeNode(\"tabIndex\");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G==\"style\"){return o.attr(J.style,\"cssText\",K)}if(L){J.setAttribute(G,\"\"+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G==\"opacity\"){if(L){J.zoom=1;J.filter=(J.filter||\"\").replace(/alpha\\([^)]*\\)/,\"\")+(parseInt(K)+\"\"==\"NaN\"?\"\":\"alpha(opacity=\"+K*100+\")\")}return J.filter&&J.filter.indexOf(\"opacity=\")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+\"\":\"\"}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||\"\").replace(/^\\s+|\\s+$/g,\"\")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G===\"string\"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/)||[0,\"0\"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,\"parentNode\")},next:function(E){return o.nth(E,2,\"nextSibling\")},prev:function(E){return o.nth(E,2,\"previousSibling\")},nextAll:function(E){return o.dir(E,\"nextSibling\")},prevAll:function(E){return o.dir(E,\"previousSibling\")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,\"iframe\")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G==\"string\"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,\"\");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!==\"boolean\"){E=!o.className.has(this,F)}o.className[E?\"add\":\"remove\"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o(\"*\",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h=\"jQuery\"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E=\"\";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||\"fx\")+\"queue\";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G===\"fx\"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(\".\");H[1]=H[1]?\".\"+H[1]:\"\";if(G===g){var F=this.triggerHandler(\"getData\"+H[1]+\"!\",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger(\"setData\"+H[1]+\"!\",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!==\"string\"){F=E;E=\"fx\"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E==\"fx\"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});\n"
+"/*\n"
+" * Sizzle CSS Selector Engine - v0.9.3\n"
+" * Copyright 2009, The Dojo Foundation\n"
+" * Released under the MIT, BSD, and GPL Licenses.\n"
+" * More information: http://sizzlejs.com/\n"
+" */\n"
+"(function(){var R=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^[\\]]*\\]|['\"][^'\"]*['\"]|[^[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!==\"string\"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=\"\"}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw\"Syntax error, unrecognized expression: \"+(ah||Y)}if(H.call(ai)===\"[object Array]\"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!==\"\\\\\"){X[1]=(X[1]||\"\").replace(/\\\\/g,\"\");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],\"\");break}}}}if(!Z){Z=T.getElementsByTagName(\"*\")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],\"\");if(!T){return[]}break}}}if(ad==V){if(T==null){throw\"Syntax error, unrecognized expression: \"+ad}else{break}}V=ad}return aa};var I=F.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(['\"]*)(.*?)\\3|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*_-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\((even|odd|[\\dn+-]*)\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)(?:\\((['\"]*)((?:\\([^\\)]+\\)|[^\\2\\(\\)]*)+)\\2\\))?/},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(T){return T.getAttribute(\"href\")}},relative:{\"+\":function(aa,T,Z){var X=typeof T===\"string\",ab=X&&!/\\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},\">\":function(Z,U,aa){var X=typeof U===\"string\";if(X&&!/\\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},\"\":function(W,U,Y){var V=L++,T=S;if(!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"parentNode\",U,V,W,X,Y)},\"~\":function(W,U,Y){var V=L++,T=S;if(typeof U===\"string\"&&!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"previousSibling\",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!==\"undefined\"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!==\"undefined\"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute(\"name\")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=\" \"+W[1].replace(/\\\\/g,\"\")+\" \";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(\" \"+Y.className+\" \").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\\\/g,\"\")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]==\"nth\"){var U=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(T[2]==\"even\"&&\"2n\"||T[2]==\"odd\"&&\"2n+1\"||!/\\D/.test(T[2])&&\"0n+\"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\\\/g,\"\");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]===\"~=\"){X[4]=\" \"+X[4]+\" \"}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]===\"not\"){if(X[3].match(R).length>1||/^\\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!==\"hidden\"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\\d/i.test(T.nodeName)},text:function(T){return\"text\"===T.type},radio:function(T){return\"radio\"===T.type},checkbox:function(T){return\"checkbox\"===T.type},file:function(T){return\"file\"===T.type},password:function(T){return\"password\"===T.type},submit:function(T){return\"submit\"===T.type},image:function(T){return\"image\"===T.type},reset:function(T){return\"reset\"===T.type},button:function(T){return\"button\"===T.type||T.nodeName.toUpperCase()===\"BUTTON\"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U===\"contains\"){return(Z.textContent||Z.innerText||\"\").indexOf(V[3])>=0}else{if(U===\"not\"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case\"only\":case\"first\":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z==\"first\"){return true}U=T;case\"last\":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case\"nth\":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute(\"id\")===T},TAG:function(U,T){return(T===\"*\"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(\" \"+(U.className||U.getAttribute(\"class\"))+\" \").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+\"\",X=W[2],U=W[4];return T==null?X===\"!=\":X===\"=\"?Z===U:X===\"*=\"?Z.indexOf(U)>=0:X===\"~=\"?(\" \"+Z+\" \").indexOf(U)>=0:!U?Z&&T!==false:X===\"!=\"?Z!=U:X===\"^=\"?Z.indexOf(U)===0:X===\"$=\"?Z.substr(Z.length-U.length)===U:X===\"|=\"?Z===U||Z.substr(0,U.length+1)===U+\"-\":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)===\"[object Array]\"){Array.prototype.push.apply(U,X)}else{if(typeof X.length===\"number\"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if(\"sourceIndex\" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement(\"form\"),V=\"script\"+(new Date).getTime();U.innerHTML=\"<input name='\"+V+\"'/>\";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!==\"undefined\"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!==\"undefined\"&&W.getAttributeNode(\"id\").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!==\"undefined\"&&Y.getAttributeNode(\"id\");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement(\"div\");T.appendChild(document.createComment(\"\"));if(T.getElementsByTagName(\"*\").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]===\"*\"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML=\"<a href='#'></a>\";if(T.firstChild&&typeof T.firstChild.getAttribute!==\"undefined\"&&T.firstChild.getAttribute(\"href\")!==\"#\"){I.attrHandle.href=function(U){return U.getAttribute(\"href\",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement(\"div\");U.innerHTML=\"<p class='TEST'></p>\";if(U.querySelectorAll&&U.querySelectorAll(\".TEST\").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement(\"div\");T.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(T.getElementsByClassName(\"e\").length===0){return}T.lastChild.className=\"e\";if(T.getElementsByClassName(\"e\").length===1){return}I.order.splice(1,0,\"CLASS\");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!==\"undefined\"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!==\"string\"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!==\"HTML\"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X=\"\",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,\"\")}T=I.relative[T]?T+\"*\":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[\":\"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=\":not(\"+V+\")\"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,\"events\")||o.data(I,\"events\",{}),J=o.data(I,\"handle\")||o.data(I,\"handle\",function(){return typeof o!==\"undefined\"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\\s+/),function(M,N){var O=N.split(\".\");N=O.shift();H.type=O.slice().sort().join(\".\");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent(\"on\"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,\"events\"),F,E;if(G){if(H===g||(typeof H===\"string\"&&H.charAt(0)==\".\")){for(var I in G){this.remove(K,I+(H||\"\"))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\\s+/),function(M,O){var Q=O.split(\".\");O=Q.shift();var N=RegExp(\"(^|\\\\.)\"+Q.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,\"handle\"),false)}else{if(K.detachEvent){K.detachEvent(\"on\"+O,o.data(K,\"handle\"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,\"handle\");if(L){L.elem=null}o.removeData(K,\"events\");o.removeData(K,\"handle\")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I===\"object\"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf(\"!\")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,\"handle\");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,\"a\")&&G==\"click\"))&&H[\"on\"+G]&&H[\"on\"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,\"a\")&&G==\"click\")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(\".\");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp(\"(^|\\\\.)\"+L.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");E=(o.data(this,\"events\")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:\"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which\".split(\" \"),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp(\"(^|\\\\.)\"+G[0]+\"(\\\\.|$)\");o.each((o.data(this,\"events\").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:\"mouseenter\",mouseout:\"mouseleave\"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F==\"unload\"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp(\"(^|\\\\.)\"+H.type+\"(\\\\.|$)\"),G=true,F=[];o.each(o.data(this,\"events\").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,\"closest\")-o.data(I.elem,\"closest\")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return[\"live\",F,E.replace(/\\./g,\"`\").replace(/ /g,\"|\")].join(\".\")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler(\"ready\")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener(\"DOMContentLoaded\",function(){document.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent(\"onreadystatechange\",function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll(\"left\")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,\"load\",o.ready)}o.each((\"blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error\").split(\",\"),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind(\"unload\",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement(\"script\"),K=document.createElement(\"div\"),J=\"script\"+(new Date).getTime();K.style.display=\"none\";K.innerHTML=' <link/><table></table><a href=\"/a\" style=\"color:red;float:left;opacity:.5;\">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName(\"*\"),E=K.getElementsByTagName(\"a\")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName(\"tbody\").length,objectAll:!!K.getElementsByTagName(\"object\")[0].getElementsByTagName(\"*\").length,htmlSerialize:!!K.getElementsByTagName(\"link\").length,style:/red/.test(E.getAttribute(\"style\")),hrefNormalized:E.getAttribute(\"href\")===\"/a\",opacity:E.style.opacity===\"0.5\",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type=\"text/javascript\";try{G.appendChild(document.createTextNode(\"window.\"+J+\"=1;\"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent(\"onclick\",function(){o.support.noCloneEvent=false;K.detachEvent(\"onclick\",arguments.callee)});K.cloneNode(true).fireEvent(\"onclick\")}o(function(){var L=document.createElement(\"div\");L.style.width=L.style.paddingLeft=\"1px\";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display=\"none\"})})();var w=o.support.cssFloat?\"cssFloat\":\"styleFloat\";o.props={\"for\":\"htmlFor\",\"class\":\"className\",\"float\":w,cssFloat:w,styleFloat:w,readonly:\"readOnly\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",rowspan:\"rowSpan\",tabindex:\"tabIndex\"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!==\"string\"){return this._load(G)}var I=G.indexOf(\" \");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H=\"GET\";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J===\"object\"){J=o.param(J);H=\"POST\"}}}var F=this;o.ajax({url:G,type:H,dataType:\"html\",data:J,complete:function(M,L){if(L==\"success\"||L==\"notmodified\"){F.html(E?o(\"<div/>\").append(M.responseText.replace(/<script(.|\\s)*?\\/script>/g,\"\")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each(\"ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend\".split(\",\"),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:\"GET\",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,\"script\")},getJSON:function(E,F,G){return o.get(E,F,G,\"json\")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:\"POST\",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject(\"Microsoft.XMLHTTP\"):new XMLHttpRequest()},accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",script:\"text/javascript, application/javascript\",json:\"application/json, text/javascript\",text:\"text/plain\",_default:\"*/*\"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!==\"string\"){M.data=o.param(M.data)}if(M.dataType==\"jsonp\"){if(G==\"GET\"){if(!M.url.match(F)){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+(M.jsonp||\"callback\")+\"=?\"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+\"&\":\"\")+(M.jsonp||\"callback\")+\"=?\"}}M.dataType=\"json\"}if(M.dataType==\"json\"&&(M.data&&M.data.match(F)||M.url.match(F))){W=\"jsonp\"+r++;if(M.data){M.data=(M.data+\"\").replace(F,\"=\"+W+\"$1\")}M.url=M.url.replace(F,\"=\"+W+\"$1\");M.dataType=\"script\";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType==\"script\"&&M.cache==null){M.cache=false}if(M.cache===false&&G==\"GET\"){var E=e();var U=M.url.replace(/(\\?|&)_=.*?(&|$)/,\"$1_=\"+E+\"$2\");M.url=U+((U==M.url)?(M.url.match(/\\?/)?\"&\":\"?\")+\"_=\"+E:\"\")}if(M.data&&G==\"GET\"){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger(\"ajaxStart\")}var Q=/^(\\w+:)?\\/\\/([^\\/?#]+)/.exec(M.url);if(M.dataType==\"script\"&&G==\"GET\"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName(\"head\")[0];var T=document.createElement(\"script\");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState==\"loaded\"||this.readyState==\"complete\")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader(\"Content-Type\",M.contentType)}if(M.ifModified){J.setRequestHeader(\"If-Modified-Since\",o.lastModified[M.url]||\"Thu, 01 Jan 1970 00:00:00 GMT\")}J.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");J.setRequestHeader(\"Accept\",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+\", */*\":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}J.abort();return false}if(M.global){o.event.trigger(\"ajaxSend\",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}}else{if(!K&&J&&(J.readyState==4||X==\"timeout\")){K=true;if(P){clearInterval(P);P=null}R=X==\"timeout\"?\"timeout\":!o.httpSuccess(J)?\"error\":M.ifModified&&o.httpNotModified(J,M.url)?\"notmodified\":\"success\";if(R==\"success\"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R=\"parsererror\"}}if(R==\"success\"){var Y;try{Y=J.getResponseHeader(\"Last-Modified\")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N(\"timeout\")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger(\"ajaxSuccess\",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger(\"ajaxComplete\",[J,M])}if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger(\"ajaxError\",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol==\"file:\"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader(\"Last-Modified\");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader(\"content-type\"),E=H==\"xml\"||!H&&F&&F.indexOf(\"xml\")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName==\"parsererror\"){throw\"parsererror\"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I===\"string\"){if(H==\"script\"){o.globalEval(I)}if(H==\"json\"){I=l[\"eval\"](\"(\"+I+\")\")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+\"=\"+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join(\"&\").replace(/%20/g,\"+\")}});var m={},n,d=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t(\"show\",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],\"olddisplay\");this[H].style.display=E||\"\";if(o.css(this[H],\"display\")===\"none\"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o(\"<\"+G+\" />\").appendTo(\"body\");K=I.css(\"display\");if(K===\"none\"){K=\"block\"}I.remove();m[G]=K}o.data(this[H],\"olddisplay\",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],\"olddisplay\")||\"\"}return this}},hide:function(H,I){if(H){return this.animate(t(\"hide\",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],\"olddisplay\");if(!E&&E!==\"none\"){o.data(this[G],\"olddisplay\",o.css(this[G],\"display\"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display=\"none\"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G===\"boolean\";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(\":hidden\");o(this)[H?\"show\":\"hide\"]()}):this.animate(t(\"toggle\",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?\"each\":\"queue\"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(\":hidden\"),J=this;for(M in I){if(I[M]==\"hide\"&&L||I[M]==\"show\"&&!L){return K.complete.call(this)}if((M==\"height\"||M==\"width\")&&this.style){K.display=o.css(this,\"display\");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow=\"hidden\"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S==\"toggle\"?L?\"show\":\"hide\":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||\"px\";if(P!=\"px\"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]==\"-=\"?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,\"\")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t(\"show\",1),slideUp:t(\"hide\",1),slideToggle:t(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G===\"object\"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration===\"number\"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop==\"height\"||this.prop==\"width\")&&this.elem.style){this.elem.style.display=\"block\"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||\"px\";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop==\"width\"||this.prop==\"height\"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,\"display\")==\"none\"){this.elem.style.display=\"block\"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?\"swing\":\"linear\")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,\"opacity\",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!==\"visible\"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position===\"relative\"||E.position===\"static\"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position===\"fixed\"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement(\"div\"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\"><div></div></div><table style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\" cellpadding=\"0\" cellspacing=\"0\"><tr><td></td></tr></table>';M={position:\"absolute\",top:0,left:0,margin:0,border:0,width:\"1px\",height:\"1px\",visibility:\"hidden\"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow=\"hidden\",H.style.position=\"relative\";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop=\"1px\";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,\"marginTop\",true),10)||0,F+=parseInt(o.curCSS(E,\"marginLeft\",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,\"marginTop\");J.left-=j(this,\"marginLeft\");E.top+=j(G,\"borderTopWidth\");E.left+=j(G,\"borderLeftWidth\");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,\"position\")==\"static\")){E=E.offsetParent}return o(E)}});o.each([\"Left\",\"Top\"],function(F,E){var G=\"scroll\"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?\"pageYOffset\":\"pageXOffset\"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each([\"Height\",\"Width\"],function(I,G){var E=I?\"Left\":\"Top\",H=I?\"Right\":\"Bottom\",F=G.toLowerCase();o.fn[\"inner\"+G]=function(){return this[0]?o.css(this[0],F,false,\"padding\"):null};o.fn[\"outer\"+G]=function(K){return this[0]?o.css(this[0],F,false,K?\"margin\":\"border\"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode==\"CSS1Compat\"&&document.documentElement[\"client\"+G]||document.body[\"client\"+G]:this[0]==document?Math.max(document.documentElement[\"client\"+G],document.body[\"scroll\"+G],document.documentElement[\"scroll\"+G],document.body[\"offset\"+G],document.documentElement[\"offset\"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K===\"string\"?K:K+\"px\")}})})();\n"
+"/*\n"
+" * jQuery UI 1.7.2\n"
+" *\n"
+" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
+" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
+" * and GPL (GPL-LICENSE.txt) licenses.\n"
+" *\n"
+" * http://docs.jquery.com/UI\n"
+" */\n"
+"jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:\"1.7.2\",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css(\"overflow\")==\"hidden\"){return false}var j=(k&&k==\"left\")?\"scrollLeft\":\"scrollTop\",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h=\"http://www.w3.org/2005/07/aaa\",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j==\"role\"?(m?f.call(this,k,j,\"wairole:\"+l):(f.apply(this,arguments)||\"\").replace(b,\"\")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,\"aaa:\"),l):f.call(this,k,j.replace(a,\"aaa:\"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,\"\"))}):e.call(this,j))}}c.fn.extend({remove:function(){c(\"*\",this).add(this).each(function(){c(this).triggerHandler(\"remove\")});return i.apply(this,arguments)},enableSelection:function(){return this.attr(\"unselectable\",\"off\").css(\"MozUserSelect\",\"\").unbind(\"selectstart.ui\")},disableSelection:function(){return this.attr(\"unselectable\",\"on\").css(\"MozUserSelect\",\"none\").bind(\"selectstart.ui\",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!j.length?c(document):j}});c.extend(c.expr[\":\"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,\"tabindex\");return(/input|select|textarea|button|object/.test(l)?!k.disabled:\"a\"==l||\"area\"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)[\"area\"==l?\"parents\":\"closest\"](\":hidden\").length},tabbable:function(k){var j=c.attr(k,\"tabindex\");return(isNaN(j)||j>=0)&&c(k).is(\":focusable\")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p==\"string\"?p.split(/,?\\s+/):p)}var j=k(\"getter\");if(l.length==1&&typeof l[0]==\"string\"){j=j.concat(k(\"getterSetter\"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(\".\")[0];k=k.split(\".\")[1];c.fn[k]=function(p){var n=(typeof p==\"string\"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)==\"_\"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+\"-\"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind(\"setData.\"+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind(\"getData.\"+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind(\"remove\",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter=\"option\"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").removeAttr(\"aria-disabled\")},option:function(l,m){var k=l,j=this;if(typeof l==\"string\"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j==\"disabled\"){this.element[k?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").attr(\"aria-disabled\",k)}},enable:function(){this._setData(\"disabled\",false)},disable:function(){this._setData(\"disabled\",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind(\"mousedown.\"+this.widgetName,function(k){return j._mouseDown(k)}).bind(\"click.\"+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr(\"unselectable\");this.element.attr(\"unselectable\",\"on\")}this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName);(c.browser.msie&&this.element.attr(\"unselectable\",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel==\"string\"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2\n"
+" *\n"
+" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
+" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
+" * and GPL (GPL-LICENSE.txt) licenses.\n"
+" *\n"
+" * http://docs.jquery.com/UI/Resizables\n"
+" *\n"
+" * Depends:\n"
+" * ui.core.js\n"
+" */\n"
+"(function(c){c.widget(\"ui.resizable\",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css(\"position\"))&&c.browser.opera){this.element.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=j.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var k=this.handles.split(\",\");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d=\"ui-resizable-\"+h;var g=c('<div class=\"ui-resizable-handle '+d+'\"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if(\"se\"==h){g.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[h]=\".ui-resizable-\"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=[\"padding\",/ne|nw|n/.test(m)?\"Top\":/se|sw|s/.test(m)?\"Bottom\":/^e$/.test(m)?\"Right\":\"Left\"].join(\"\");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:\"se\"}});if(j.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){c(this).removeClass(\"ui-resizable-autohide\");e._handles.show()},function(){if(!e.resizing){c(this).addClass(\"ui-resizable-autohide\");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")})).end().remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(\".ui-draggable\")||(/absolute/).test(d.css(\"position\"))){d.css({position:\"absolute\",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css(\"position\"))){d.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this._renderProxy();var j=b(this.helper.css(\"left\")),g=b(this.helper.css(\"top\"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio==\"number\")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",h==\"auto\"?this.axis+\"-resize\":h);d.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate(\"resize\",d);g.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger(\"resize\",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],\"left\")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css(\"left\"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css(\"top\"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d==\"sw\"){g.left=i.left+(e.width-g.width);g.top=null}if(d==\"nw\"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css(\"borderTopWidth\"),g.css(\"borderRightWidth\"),g.css(\"borderBottomWidth\"),g.css(\"borderLeftWidth\")],h=[g.css(\"paddingTop\"),g.css(\"paddingRight\"),g.css(\"paddingBottom\"),g.css(\"paddingLeft\")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(\":hidden\")||c(f).parents(\":hidden\").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:\"absolute\",left:this.elementOffset.left-f+\"px\",top:this.elementOffset.top-f+\"px\",zIndex:++h.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!=\"resize\"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:\"1.7.2\",eventPrefix:\"resize\",defaults:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,cancel:\":input,option\",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;_store=function(h){c(h).each(function(){c(this).data(\"resizable-alsoresize\",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css(\"left\"),10),top:parseInt(c(this).css(\"top\"),10)})})};if(typeof(g.alsoResize)==\"object\"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data(\"resizable\"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data(\"resizable-alsoresize\"),o={},n=m&&m.length?m:[\"width\",\"height\",\"top\",\"left\"];c.each(n||[\"width\",\"height\",\"top\",\"left\"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css(\"position\"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:\"absolute\",top:\"auto\",left:\"auto\"})}p.css(o)})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data(\"resizable\");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:\"relative\"})}c(this).removeData(\"resizable-alsoresize-start\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(h,m){var n=c(this).data(\"resizable\"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],\"left\")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css(\"left\"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css(\"top\"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css(\"width\"),10),height:parseInt(n.element.css(\"height\"),10),top:parseInt(n.element.css(\"top\"),10),left:parseInt(n.element.css(\"left\"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate(\"resize\",h)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(e,q){var s=c(this).data(\"resizable\"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){h[p]=b(m.css(\"padding\"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,\"left\")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data(\"resizable\"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css(\"position\"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css(\"position\"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data(\"resizable\"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(f,g){var d=c(this).data(\"resizable\"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof h.ghost==\"string\"?h.ghost:\"\");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost){d.ghost.css({position:\"relative\",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(d,l){var n=c(this).data(\"resizable\"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid==\"number\"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;\n"
+"/**\n"
+" * jQuery.ScrollTo - Easy element scrolling using jQuery.\n"
+" * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com\n"
+" * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).\n"
+" * Date: 2/8/2008\n"
+" * @author Ariel Flesler\n"
+" * @version 1.3.2\n"
+" */\n"
+";(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);\n"
+"\n"
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 4c5ae50..8002743 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -161,11 +161,7 @@ void LatexGenerator::init()
t << endl
<< "clean:" << endl
-#if defined(_MSC_VER)
- << "\tdel "
-#else
<< "\trm -f "
-#endif
<< "*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf" << endl;
createSubDirs(d);
diff --git a/src/latexgen.h b/src/latexgen.h
index f846ca3..e9af96d 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -180,6 +180,8 @@ class LatexGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/layout.cpp b/src/layout.cpp
index f2b3b4a..36c5d26 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -759,7 +759,7 @@ class LayoutParser : public QXmlDefaultHandler
{
// no MainPage node... add one the first item of the root node...
new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE,
- Config_getBool("GENERATE_TREEVIEW") ? "main" : "index",
+ /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index",
theTranslator->trMainPage(),TRUE);
}
}
@@ -780,7 +780,7 @@ class LayoutParser : public QXmlDefaultHandler
QCString baseFile; // base name of the file containing the index page
} mapping[] =
{
- { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), Config_getBool("GENERATE_TREEVIEW") ? "main" : "index" },
+ { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index" },
{ "pages", LayoutNavEntry::Pages, theTranslator->trRelatedPages(), QCString(), "pages" },
{ "modules", LayoutNavEntry::Modules, theTranslator->trModules(), QCString(), "modules" },
{ "namespaces", LayoutNavEntry::Namespaces, javaOpt ? theTranslator->trPackages() :
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 52adf17..a02fabf 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -61,6 +61,7 @@ HEADERS = bufstr.h \
index.h \
index_xsd.h \
instdox.h \
+ jquery_js.h \
language.h \
latexdocvisitor.h \
latexgen.h \
@@ -78,6 +79,8 @@ HEADERS = bufstr.h \
message.h \
msc.h \
namespacedef.h \
+ navtree_css.h \
+ navtree_js.h \
objcache.h \
outputgen.h \
outputlist.h \
@@ -95,6 +98,7 @@ HEADERS = bufstr.h \
qhpxmlwriter.h \
qtbc.h \
reflist.h \
+ resize_js.h \
rtfdocvisitor.h \
rtfgen.h \
rtfstyle.h \
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
index 29c6fb7..5ee344a 100644
--- a/src/libdoxygen.t
+++ b/src/libdoxygen.t
@@ -120,3 +120,18 @@ search_css.h: search.css
doxygen_css.h: doxygen.css
cat doxygen.css | $(TO_C_CMD) >doxygen_css.h
+navtree_js.h: navtree.js
+ cat navtree.js | $(TO_C_CMD) >navtree_js.h
+
+navindex_js.h: navindex.js
+ cat navindex.js | $(TO_C_CMD) >navindex_js.h
+
+resize_js.h: resize.js
+ cat resize.js | $(TO_C_CMD) >resize_js.h
+
+jquery_js.h: jquery.js
+ cat jquery.js | $(TO_C_CMD) >jquery_js.h
+
+navtree_css.h: navtree.css
+ cat navtree.css | $(TO_C_CMD) >navtree_css.h
+
diff --git a/src/mangen.h b/src/mangen.h
index e855942..8a997de 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -178,6 +178,8 @@ class ManGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 098c58e..be6a3a3 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -143,7 +143,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
- //if (!md->isDefine()) ol.startParameter(TRUE); else ol.docify(" ");
bool first=TRUE;
bool paramTypeStarted=FALSE;
bool isDefine = md->isDefine();
@@ -166,10 +165,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
// use the following to put the function pointer type before the name
bool hasFuncPtrType=FALSE;
- // or use the following to put the function pointer as it appears in
- // the prototype.
- //bool hasFuncPtrType=vp!=-1 && wp!=-1 && wp<vp;
-
if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{
ol.docify(a->attrib+" ");
@@ -208,10 +203,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
{
- if (!hasFuncPtrType)
- {
- ol.docify(" ");
- }
+ //if (!hasFuncPtrType)
+ //{
+ // ol.docify(" ");
+ //}
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex);
ol.startEmphasis();
@@ -277,21 +272,12 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Latex);
- //if (!first) ol.writeString("&#160;");
if (!md->isObjCMethod()) ol.docify(")"); // end argument list
ol.enableAll();
if (htmlOn) ol.enable(OutputGenerator::Html);
if (latexOn) ol.enable(OutputGenerator::Latex);
- //if (!isDefine)
- {
- if (first) ol.startParameterName(defArgList->count()<2);
- ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
- }
- //else // isDefine
- //{
- // if (first) ol.startParameterName(TRUE);
- // ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
- //}
+ if (first) ol.startParameterName(defArgList->count()<2);
+ ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
ol.popGeneratorState();
if (md->extraTypeChars())
{
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 3e0f4e0..fefcc95 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -107,7 +107,7 @@ void MemberGroup::setAnchors(ClassDef *context)
void MemberGroup::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{
- printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
+ //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
QCString ldoc = doc;
if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\"></a>");
memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc/*,TRUE,TRUE*/);
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index ca034d7..8aeb42a 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -515,14 +515,19 @@ void MemberList::writeDocumentation(OutputList &ol,
void MemberList::writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
MemberListIterator mli(*this);
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
QCString diskName=md->getOutputFileBase();
QCString title=md->qualifiedName();
- startFile(ol,diskName,md->name(),title);
- container->writeNavigationPath(ol);
+ startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,
+ container->getOutputFileBase());
+ if (!generateTreeView)
+ {
+ container->writeNavigationPath(ol);
+ }
ol.startContents();
ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
@@ -539,8 +544,15 @@ void MemberList::writeDocumentationPage(OutputList &ol,
ol.writeString(" </td>\n");
ol.writeString(" </tr>\n");
ol.writeString("</table>\n");
-
- endFile(ol);
+
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ container->writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
}
if (memberGroupList)
{
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 337403d..d31ed1a 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -411,7 +411,8 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
void NamespaceDef::writeDocumentation(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString pageTitle;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
@@ -426,12 +427,17 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
pageTitle = theTranslator->trNamespaceReference(displayName());
}
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,TRUE);
- if (getOuterScope()!=Doxygen::globalScope)
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
+
+ if (!generateTreeView)
{
- writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
+
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
@@ -544,7 +550,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
- endFile(ol);
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
if (generateTagFile)
{
diff --git a/src/navtree.css b/src/navtree.css
new file mode 100644
index 0000000..a87fa62
--- /dev/null
+++ b/src/navtree.css
@@ -0,0 +1,123 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ padding:2px;
+ margin:0px;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 300px;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background:url("ftv2splitbar.png") repeat scroll right center transparent;
+ cursor:e-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: ##FA;
+}
+
+
+
diff --git a/src/navtree.js b/src/navtree.js
new file mode 100644
index 0000000..1301083
--- /dev/null
+++ b/src/navtree.js
@@ -0,0 +1,245 @@
+function createIndent(o,domNode,node,level)
+{
+ if (node.parentNode && node.parentNode.parentNode)
+ {
+ createIndent(o,domNode,node.parentNode,level+1);
+ }
+ var imgNode = document.createElement("img");
+ if (level==0 && node.childrenData)
+ {
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function()
+ {
+ if (node.expanded)
+ {
+ $(node.getChildrenUL()).slideUp("fast");
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2pnode.png";
+ }
+ node.expanded = false;
+ }
+ else
+ {
+ expandNode(o, node, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ }
+ else
+ {
+ domNode.appendChild(imgNode);
+ }
+ if (level==0)
+ {
+ if (node.isLast)
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2lastnode.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ else
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2pnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2node.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ }
+ else
+ {
+ if (node.isLast)
+ {
+ imgNode.src = node.relpath+"ftv2blank.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2vertline.png";
+ }
+ }
+ imgNode.border = "0";
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ a.appendChild(node.label);
+ if (link)
+ {
+ a.href = node.relpath+link;
+ }
+ else
+ {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ node.expanded = false;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function()
+ {
+ if (!node.childrenUL)
+ {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+}
+
+function expandNode(o, node, imm)
+{
+ if (node.childrenData && !node.expanded)
+ {
+ if (!node.childrenVisited)
+ {
+ getNode(o, node);
+ }
+ if (imm)
+ {
+ $(node.getChildrenUL()).show();
+ }
+ else
+ {
+ $(node.getChildrenUL()).slideDown("fast",showRoot);
+ }
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2mnode.png";
+ }
+ node.expanded = true;
+ }
+}
+
+function getNode(o, po)
+{
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData)
+ {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+}
+
+function findNavTreePage(url, data)
+{
+ var nodes = data;
+ var result = null;
+ for (var i in nodes)
+ {
+ var d = nodes[i];
+ if (d[1] == url)
+ {
+ return new Array(i);
+ }
+ else if (d[2] != null) // array of children
+ {
+ result = findNavTreePage(url, d[2]);
+ if (result != null)
+ {
+ return (new Array(i).concat(result));
+ }
+ }
+ }
+ return null;
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+
+ getNode(o, o.node);
+
+ o.breadcrumbs = findNavTreePage(toroot, NAVTREE);
+ if (o.breadcrumbs == null)
+ {
+ o.breadcrumbs = findNavTreePage("index.html",NAVTREE);
+ }
+ if (o.breadcrumbs != null && o.breadcrumbs.length>0)
+ {
+ var p = o.node;
+ for (var i in o.breadcrumbs)
+ {
+ var j = o.breadcrumbs[i];
+ p = p.children[j];
+ expandNode(o,p,true);
+ }
+ p.itemDiv.className = p.itemDiv.className + " selected";
+ p.itemDiv.id = "selected";
+ $(window).load(showRoot);
+ }
+}
+
diff --git a/src/navtree_css.h b/src/navtree_css.h
new file mode 100644
index 0000000..57f119f
--- /dev/null
+++ b/src/navtree_css.h
@@ -0,0 +1,123 @@
+"#nav-tree .children_ul {\n"
+" margin:0;\n"
+" padding:4px;\n"
+"}\n"
+"\n"
+"#nav-tree ul {\n"
+" list-style:none outside none;\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree li {\n"
+" white-space:nowrap;\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .plus {\n"
+" margin:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .selected {\n"
+" background-image: url('tab_a.png');\n"
+" background-repeat:repeat-x;\n"
+" color: #fff;\n"
+" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
+"}\n"
+"\n"
+"#nav-tree img {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+" border:0px;\n"
+" vertical-align: middle;\n"
+"}\n"
+"\n"
+"#nav-tree a {\n"
+" text-decoration:none;\n"
+" padding:0px;\n"
+" margin:0px;\n"
+" outline:none;\n"
+"}\n"
+"\n"
+"#nav-tree .label {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .label a {\n"
+" padding:2px;\n"
+"}\n"
+"\n"
+"#nav-tree .selected a {\n"
+" text-decoration:none;\n"
+" padding:2px;\n"
+" margin:0px;\n"
+" color:#fff;\n"
+"}\n"
+"\n"
+"#nav-tree .children_ul {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .item {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree {\n"
+" padding: 0px 0px;\n"
+" background-color: #FAFAFF; \n"
+" font-size:14px;\n"
+" overflow:auto;\n"
+"}\n"
+"\n"
+"#doc-content {\n"
+" overflow:auto;\n"
+" display:block;\n"
+" padding:0px;\n"
+" margin:0px;\n"
+"}\n"
+"\n"
+"#side-nav {\n"
+" padding:0 6px 0 0;\n"
+" margin: 0px;\n"
+" display:block;\n"
+" position: absolute;\n"
+" left: 0px;\n"
+" width: 300px;\n"
+"}\n"
+"\n"
+".ui-resizable .ui-resizable-handle {\n"
+" display:block;\n"
+"}\n"
+"\n"
+".ui-resizable-e {\n"
+" background:url(\"ftv2splitbar.png\") repeat scroll right center transparent;\n"
+" cursor:e-resize;\n"
+" height:100%;\n"
+" right:0;\n"
+" top:0;\n"
+" width:6px;\n"
+"}\n"
+"\n"
+".ui-resizable-handle {\n"
+" display:none;\n"
+" font-size:0.1px;\n"
+" position:absolute;\n"
+" z-index:1;\n"
+"}\n"
+"\n"
+"#nav-tree-contents {\n"
+" margin: 6px 0px 0px 0px;\n"
+"}\n"
+"\n"
+"#nav-tree {\n"
+" background-image:url('nav_h.png');\n"
+" background-repeat:repeat-x;\n"
+" background-color: ##FA;\n"
+"}\n"
+"\n"
+"\n"
+"\n"
diff --git a/src/navtree_js.h b/src/navtree_js.h
new file mode 100644
index 0000000..8e81d55
--- /dev/null
+++ b/src/navtree_js.h
@@ -0,0 +1,245 @@
+"function createIndent(o,domNode,node,level)\n"
+"{\n"
+" if (node.parentNode && node.parentNode.parentNode)\n"
+" {\n"
+" createIndent(o,domNode,node.parentNode,level+1);\n"
+" }\n"
+" var imgNode = document.createElement(\"img\");\n"
+" if (level==0 && node.childrenData)\n"
+" {\n"
+" node.plus_img = imgNode;\n"
+" node.expandToggle = document.createElement(\"a\");\n"
+" node.expandToggle.href = \"javascript:void(0)\";\n"
+" node.expandToggle.onclick = function() \n"
+" {\n"
+" if (node.expanded) \n"
+" {\n"
+" $(node.getChildrenUL()).slideUp(\"fast\");\n"
+" if (node.isLast)\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2plastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2pnode.png\";\n"
+" }\n"
+" node.expanded = false;\n"
+" } \n"
+" else \n"
+" {\n"
+" expandNode(o, node, false);\n"
+" }\n"
+" }\n"
+" node.expandToggle.appendChild(imgNode);\n"
+" domNode.appendChild(node.expandToggle);\n"
+" }\n"
+" else\n"
+" {\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" if (level==0)\n"
+" {\n"
+" if (node.isLast)\n"
+" {\n"
+" if (node.childrenData)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2plastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2lastnode.png\";\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" }\n"
+" else\n"
+" {\n"
+" if (node.childrenData)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2pnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2node.png\";\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" }\n"
+" }\n"
+" else\n"
+" {\n"
+" if (node.isLast)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2blank.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2vertline.png\";\n"
+" }\n"
+" }\n"
+" imgNode.border = \"0\";\n"
+"}\n"
+"\n"
+"function newNode(o, po, text, link, childrenData, lastNode)\n"
+"{\n"
+" var node = new Object();\n"
+" node.children = Array();\n"
+" node.childrenData = childrenData;\n"
+" node.depth = po.depth + 1;\n"
+" node.relpath = po.relpath;\n"
+" node.isLast = lastNode;\n"
+"\n"
+" node.li = document.createElement(\"li\");\n"
+" po.getChildrenUL().appendChild(node.li);\n"
+" node.parentNode = po;\n"
+"\n"
+" node.itemDiv = document.createElement(\"div\");\n"
+" node.itemDiv.className = \"item\";\n"
+"\n"
+" node.labelSpan = document.createElement(\"span\");\n"
+" node.labelSpan.className = \"label\";\n"
+"\n"
+" createIndent(o,node.itemDiv,node,0);\n"
+" node.itemDiv.appendChild(node.labelSpan);\n"
+" node.li.appendChild(node.itemDiv);\n"
+"\n"
+" var a = document.createElement(\"a\");\n"
+" node.labelSpan.appendChild(a);\n"
+" node.label = document.createTextNode(text);\n"
+" a.appendChild(node.label);\n"
+" if (link) \n"
+" {\n"
+" a.href = node.relpath+link;\n"
+" } \n"
+" else \n"
+" {\n"
+" if (childrenData != null) \n"
+" {\n"
+" a.className = \"nolink\";\n"
+" a.href = \"javascript:void(0)\";\n"
+" a.onclick = node.expandToggle.onclick;\n"
+" node.expanded = false;\n"
+" }\n"
+" }\n"
+"\n"
+" node.childrenUL = null;\n"
+" node.getChildrenUL = function() \n"
+" {\n"
+" if (!node.childrenUL) \n"
+" {\n"
+" node.childrenUL = document.createElement(\"ul\");\n"
+" node.childrenUL.className = \"children_ul\";\n"
+" node.childrenUL.style.display = \"none\";\n"
+" node.li.appendChild(node.childrenUL);\n"
+" }\n"
+" return node.childrenUL;\n"
+" };\n"
+"\n"
+" return node;\n"
+"}\n"
+"\n"
+"function showRoot()\n"
+"{\n"
+" var headerHeight = $(\"#top\").height();\n"
+" var footerHeight = $(\"#nav-path\").height();\n"
+" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
+" navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
+"}\n"
+"\n"
+"function expandNode(o, node, imm)\n"
+"{\n"
+" if (node.childrenData && !node.expanded) \n"
+" {\n"
+" if (!node.childrenVisited) \n"
+" {\n"
+" getNode(o, node);\n"
+" }\n"
+" if (imm)\n"
+" {\n"
+" $(node.getChildrenUL()).show();\n"
+" } \n"
+" else \n"
+" {\n"
+" $(node.getChildrenUL()).slideDown(\"fast\",showRoot);\n"
+" }\n"
+" if (node.isLast)\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
+" }\n"
+" node.expanded = true;\n"
+" }\n"
+"}\n"
+"\n"
+"function getNode(o, po)\n"
+"{\n"
+" po.childrenVisited = true;\n"
+" var l = po.childrenData.length-1;\n"
+" for (var i in po.childrenData) \n"
+" {\n"
+" var nodeData = po.childrenData[i];\n"
+" po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],\n"
+" i==l);\n"
+" }\n"
+"}\n"
+"\n"
+"function findNavTreePage(url, data)\n"
+"{\n"
+" var nodes = data;\n"
+" var result = null;\n"
+" for (var i in nodes) \n"
+" {\n"
+" var d = nodes[i];\n"
+" if (d[1] == url) \n"
+" {\n"
+" return new Array(i);\n"
+" }\n"
+" else if (d[2] != null) // array of children\n"
+" {\n"
+" result = findNavTreePage(url, d[2]);\n"
+" if (result != null) \n"
+" {\n"
+" return (new Array(i).concat(result));\n"
+" }\n"
+" }\n"
+" }\n"
+" return null;\n"
+"}\n"
+"\n"
+"function initNavTree(toroot,relpath)\n"
+"{\n"
+" var o = new Object();\n"
+" o.toroot = toroot;\n"
+" o.node = new Object();\n"
+" o.node.li = document.getElementById(\"nav-tree-contents\");\n"
+" o.node.childrenData = NAVTREE;\n"
+" o.node.children = new Array();\n"
+" o.node.childrenUL = document.createElement(\"ul\");\n"
+" o.node.getChildrenUL = function() { return o.node.childrenUL; };\n"
+" o.node.li.appendChild(o.node.childrenUL);\n"
+" o.node.depth = 0;\n"
+" o.node.relpath = relpath;\n"
+"\n"
+" getNode(o, o.node);\n"
+"\n"
+" o.breadcrumbs = findNavTreePage(toroot, NAVTREE);\n"
+" if (o.breadcrumbs == null)\n"
+" {\n"
+" o.breadcrumbs = findNavTreePage(\"index.html\",NAVTREE);\n"
+" }\n"
+" if (o.breadcrumbs != null && o.breadcrumbs.length>0)\n"
+" {\n"
+" var p = o.node;\n"
+" for (var i in o.breadcrumbs) \n"
+" {\n"
+" var j = o.breadcrumbs[i];\n"
+" p = p.children[j];\n"
+" expandNode(o,p,true);\n"
+" }\n"
+" p.itemDiv.className = p.itemDiv.className + \" selected\";\n"
+" p.itemDiv.id = \"selected\";\n"
+" $(window).load(showRoot);\n"
+" }\n"
+"}\n"
+"\n"
diff --git a/src/outputgen.h b/src/outputgen.h
index b3e7745..6d7e672 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -379,6 +379,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0;
virtual void startQuickIndices() = 0;
virtual void endQuickIndices() = 0;
+ virtual void writeSplitBar(const char *) = 0;
+ virtual void writeLogo() = 0;
virtual void writeQuickLinks(bool compact,HighlightedItem hli) = 0;
virtual void startContents() = 0;
virtual void endContents() = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index fd5b5d7..5572004 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -328,6 +328,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startQuickIndices); }
void endQuickIndices()
{ forall(&OutputGenerator::endQuickIndices); }
+ void writeSplitBar(const char *name)
+ { forall(&OutputGenerator::writeSplitBar,name); }
+ void writeLogo()
+ { forall(&OutputGenerator::writeLogo); }
void writeQuickLinks(bool compact,HighlightedItem hli)
{ forall(&OutputGenerator::writeQuickLinks,compact,hli); }
void startContents()
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index e7bcc1a..8563ec0 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -69,13 +69,15 @@ bool PageDef::hasParentPage() const
void PageDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+
//outputList->disable(OutputGenerator::Man);
QCString pageName;
pageName=escapeCharsInString(name(),FALSE,TRUE);
//printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
- startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,TRUE);
+ startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,!generateTreeView);
ol.pushGeneratorState();
//1.{
@@ -92,13 +94,15 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.enable(OutputGenerator::Html);
}
- if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ if (!generateTreeView)
{
- getOuterScope()->writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ {
+ getOuterScope()->writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
-
// save old generator state and write title only to Man generator
ol.pushGeneratorState();
//2.{
@@ -135,7 +139,16 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
//1.}
- endFile(ol);
+ if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ {
+ ol.endContents();
+ getOuterScope()->writeNavigationPath(ol);
+ endFile(ol,TRUE);
+ }
+ else
+ {
+ endFile(ol);
+ }
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
diff --git a/src/resize.js b/src/resize.js
new file mode 100644
index 0000000..04fa95c
--- /dev/null
+++ b/src/resize.js
@@ -0,0 +1,81 @@
+var cookie_namespace = 'doxygen';
+var sidenav,navtree,content,header;
+
+function readCookie(cookie)
+{
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie)
+ {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1)
+ {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1)
+ {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+}
+
+function writeCookie(cookie, val, expiration)
+{
+ if (val==undefined) return;
+ if (expiration == null)
+ {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+}
+
+function resizeWidth()
+{
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).width();
+ content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+ writeCookie('width',sidenavWidth, null);
+}
+
+function restoreWidth(navWidth)
+{
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+6+"px"});
+ sidenav.css({width:navWidth + "px"});
+}
+
+function resizeHeight()
+{
+ var headerHeight = header.height();
+ var footerHeight = footer.height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
+}
+
+function initResizable()
+{
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(window).resize(function() { resizeHeight(); });
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+}
+
+
diff --git a/src/resize_js.h b/src/resize_js.h
new file mode 100644
index 0000000..7e627cc
--- /dev/null
+++ b/src/resize_js.h
@@ -0,0 +1,81 @@
+"var cookie_namespace = 'doxygen'; \n"
+"var sidenav,navtree,content,header;\n"
+"\n"
+"function readCookie(cookie) \n"
+"{\n"
+" var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
+" if (document.cookie) \n"
+" {\n"
+" var index = document.cookie.indexOf(myCookie);\n"
+" if (index != -1) \n"
+" {\n"
+" var valStart = index + myCookie.length;\n"
+" var valEnd = document.cookie.indexOf(\";\", valStart);\n"
+" if (valEnd == -1) \n"
+" {\n"
+" valEnd = document.cookie.length;\n"
+" }\n"
+" var val = document.cookie.substring(valStart, valEnd);\n"
+" return val;\n"
+" }\n"
+" }\n"
+" return 0;\n"
+"}\n"
+"\n"
+"function writeCookie(cookie, val, expiration) \n"
+"{\n"
+" if (val==undefined) return;\n"
+" if (expiration == null) \n"
+" {\n"
+" var date = new Date();\n"
+" date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
+" expiration = date.toGMTString();\n"
+" }\n"
+" document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
+"}\n"
+" \n"
+"function resizeWidth() \n"
+"{\n"
+" var windowWidth = $(window).width() + \"px\";\n"
+" var sidenavWidth = $(sidenav).width();\n"
+" content.css({marginLeft:parseInt(sidenavWidth)+6+\"px\"}); //account for 6px-wide handle-bar\n"
+" writeCookie('width',sidenavWidth, null);\n"
+"}\n"
+"\n"
+"function restoreWidth(navWidth)\n"
+"{\n"
+" var windowWidth = $(window).width() + \"px\";\n"
+" content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
+" sidenav.css({width:navWidth + \"px\"});\n"
+"}\n"
+"\n"
+"function resizeHeight() \n"
+"{\n"
+" var headerHeight = header.height();\n"
+" var footerHeight = footer.height();\n"
+" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
+" content.css({height:windowHeight + \"px\"});\n"
+" navtree.css({height:windowHeight + \"px\"});\n"
+" sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
+"}\n"
+"\n"
+"function initResizable()\n"
+"{\n"
+" header = $(\"#top\");\n"
+" sidenav = $(\"#side-nav\");\n"
+" content = $(\"#doc-content\");\n"
+" navtree = $(\"#nav-tree\");\n"
+" footer = $(\"#nav-path\");\n"
+" $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
+" $(window).resize(function() { resizeHeight(); });\n"
+" var width = readCookie('width');\n"
+" if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
+" resizeHeight();\n"
+" var url = location.href;\n"
+" var i=url.indexOf(\"#\");\n"
+" if (i>=0) window.location.hash=url.substr(i);\n"
+" var _preventDefault = function(evt) { evt.preventDefault(); };\n"
+" $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
+"}\n"
+"\n"
+"\n"
diff --git a/src/rtfgen.h b/src/rtfgen.h
index ce92d53..f534505 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -173,6 +173,8 @@ class RTFGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/search.php b/src/search.php
index bddb487..bc848c1 100644
--- a/src/search.php
+++ b/src/search.php
@@ -140,7 +140,7 @@ function combine_results($results,&$docs)
{
$key=$di["url"];
$rank=$di["rank"];
- if (in_array($key, array_keys($docs)))
+ if ($docs[$key])
{
$docs[$key]["rank"]+=$rank;
}
@@ -219,10 +219,13 @@ function sort_results($docs,&$sorted)
function report_results(&$docs)
{
+ echo "<div class=\"header\">";
+ echo " <div class=\"headertitle\">\n";
+ echo " <h1>".search_results()."</h1>\n";
+ echo " </div>\n";
+ echo "</div>\n";
+ echo "<div class=\"searchresults\">\n";
echo "<table cellspacing=\"2\">\n";
- echo " <tr>\n";
- echo " <td colspan=\"2\"><h2>".search_results()."</h2></td>\n";
- echo " </tr>\n";
$numDocs = sizeof($docs);
if ($numDocs==0)
{
@@ -279,7 +282,6 @@ function main()
$query=$_GET["query"];
}
end_form(preg_replace("/[^a-zA-Z0-9\-\_\.]/i", " ", $query ));
- echo "&#160;\n<div class=\"searchresults\">\n";
$results = array();
$requiredWords = array();
$forbiddenWords = array();
@@ -307,6 +309,7 @@ function main()
// report results to the user
report_results($sorted);
echo "</div>\n";
+ end_page();
fclose($file);
}
diff --git a/src/search_php.h b/src/search_php.h
index 3380cee..d75a95c 100644
--- a/src/search_php.h
+++ b/src/search_php.h
@@ -140,7 +140,7 @@
" {\n"
" $key=$di[\"url\"];\n"
" $rank=$di[\"rank\"];\n"
-" if (in_array($key, array_keys($docs)))\n"
+" if ($docs[$key])\n"
" {\n"
" $docs[$key][\"rank\"]+=$rank;\n"
" }\n"
@@ -219,10 +219,13 @@
"\n"
"function report_results(&$docs)\n"
"{\n"
+" echo \"<div class=\\\"header\\\">\";\n"
+" echo \" <div class=\\\"headertitle\\\">\\n\";\n"
+" echo \" <h1>\".search_results().\"</h1>\\n\";\n"
+" echo \" </div>\\n\";\n"
+" echo \"</div>\\n\";\n"
+" echo \"<div class=\\\"searchresults\\\">\\n\";\n"
" echo \"<table cellspacing=\\\"2\\\">\\n\";\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td colspan=\\\"2\\\"><h2>\".search_results().\"</h2></td>\\n\";\n"
-" echo \" </tr>\\n\";\n"
" $numDocs = sizeof($docs);\n"
" if ($numDocs==0)\n"
" {\n"
@@ -279,7 +282,6 @@
" $query=$_GET[\"query\"];\n"
" }\n"
" end_form(preg_replace(\"/[^a-zA-Z0-9\\-\\_\\.]/i\", \" \", $query ));\n"
-" echo \"&#160;\\n<div class=\\\"searchresults\\\">\\n\";\n"
" $results = array();\n"
" $requiredWords = array();\n"
" $forbiddenWords = array();\n"
@@ -307,6 +309,7 @@
" // report results to the user\n"
" report_results($sorted);\n"
" echo \"</div>\\n\";\n"
+" end_page();\n"
" fclose($file);\n"
"}\n"
"\n"
diff --git a/src/translator_cn.h b/src/translator_cn.h
index a296daa..f48c66e 100644
--- a/src/translator_cn.h
+++ b/src/translator_cn.h
@@ -24,7 +24,7 @@
*/
#define CN_SPC
-class TranslatorChinese : public TranslatorAdapter_1_6_0
+class TranslatorChinese : public Translator
{
public:
/*! Used for identification of the language. The identification
@@ -1787,6 +1787,81 @@ class TranslatorChinese : public TranslatorAdapter_1_6_0
{
return "类型限制";
}
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0
+//////////////////////////////////////////////////////////////////////////
+ virtual QCString trDirRelation(const char *name)
+ {
+ // return QCString(name)+" Relation";
+ // unsure
+ return QCString(name)+CN_SPC"关系";
+ }
+
+ virtual QCString trLoading()
+ {
+ return "载入中...";
+ }
+
+ virtual QCString trGlobalNamespace()
+ {
+ return "全局命名空间";
+ }
+
+ virtual QCString trSearching()
+ {
+ return "搜索中...";
+ }
+
+ virtual QCString trNoMatches()
+ {
+ return "未找到";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDirDependency(const char *name)
+ {
+ // return (QCString)"Directory dependency graph for "+name;
+ // unsure
+ return QCString(name)+CN_SPC"的目录依赖关系图";
+ }
+
+ virtual QCString trFileIn(const char *name)
+ {
+ // return (QCString)"File in "+name;
+ // unsure
+ return (QCString)"文件在"+CN_SPC+name;
+ }
+
+ virtual QCString trIncludesFileIn(const char *name)
+ {
+ // return (QCString)"Includes file in "+name;
+ // unsure
+ return (QCString)"在"CN_SPC+name+CN_SPC"中引用";
+ }
+
+ virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+ int hour,int minutes,int seconds,
+ bool includeTime)
+ {
+ static const char *days[] = { "一","二","三","四","五","六","日" };
+ static const char *months[] = { "一","二","三","四","五","六","七","八","九","十","十一","十二" };
+
+ QCString sdate;
+
+ sdate.sprintf("%d年%s月%d日 星期%s",year, months[month-1], day, days[dayOfWeek-1]);
+
+ if (includeTime)
+ {
+ QCString stime;
+ stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+ sdate+=stime;
+ }
+ return sdate;
+ }
};
#endif
diff --git a/src/util.cpp b/src/util.cpp
index e22df70..4b25ecb 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -18,6 +18,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
+#include <math.h>
#include <md5.h>
@@ -50,6 +51,7 @@
#include "portable.h"
#include "parserintf.h"
#include "bufstr.h"
+#include "image.h"
#define ENABLE_TRACINGSUPPORT 0
@@ -1520,13 +1522,10 @@ static bool findOperator2(const QCString &s,int i)
return TRUE;
}
-static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
+static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
-//#define ADD_CHAR(c) if (resultPos>=resultLen) { resultLen+=1024; result.resize(resultLen); }
-// result[resultPos++]=(c)
-
class StrBuf
{
public:
@@ -1551,14 +1550,7 @@ class StrBuf
int len;
};
-#define CLR_BUF() g_strBuf.clear()
-#define ADD_CHAR(c) g_strBuf.addChar(c)
-#define ADD_STR(s) g_strBuf.addStr(s)
-#define GET_STR() g_strBuf.get()
-#define STR_POS() g_strBuf.getPos()
-#define STR_AT(i) g_strBuf.at(i)
-
-// Not this function is not reentrant due to the use of static buffer!
+// Note: this function is not reentrant due to the use of static buffer!
QCString removeRedundantWhiteSpace(const QCString &s)
{
static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
@@ -2099,7 +2091,6 @@ static QCString getFilterFromList(const char *name,const QStrList &filterList,bo
{
QCString fs = filterStr;
int i_equals=fs.find('=');
-
if (i_equals!=-1)
{
QCString filterPattern = fs.left(i_equals);
@@ -2141,7 +2132,7 @@ QCString getFileFilter(const char* name,bool isSourceCode)
{ // first look for source filter pattern list
filterName = getFilterFromList(name,filterSrcList,found);
}
- if (!found && !filterName.isEmpty())
+ if (!found && filterName.isEmpty())
{ // then look for filter pattern list
filterName = getFilterFromList(name,filterList,found);
}
@@ -2155,45 +2146,6 @@ QCString getFileFilter(const char* name,bool isSourceCode)
}
}
-#if 0
-QCString recodeString(const QCString &str,const char *fromEncoding,const char *toEncoding)
-{
- QCString inputEncoding = fromEncoding;
- QCString outputEncoding = toEncoding;
- if (inputEncoding.isEmpty() || outputEncoding.isEmpty() ||
- inputEncoding==outputEncoding) return str;
- int inputSize=str.length();
- int outputSize=inputSize*4+1;
- QCString output(outputSize);
- void *cd = portable_iconv_open(outputEncoding,inputEncoding);
- if (cd==(void *)(-1))
- {
- err("error: unsupported character conversion: '%s'->'%s'\n",
- inputEncoding.data(),outputEncoding.data());
- exit(1);
- }
- size_t iLeft=inputSize;
- size_t oLeft=outputSize;
- const char *inputPtr = str.data();
- char *outputPtr = output.data();
- if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
- {
- outputSize-=oLeft;
- output.resize(outputSize+1);
- output.at(outputSize)='\0';
- //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
- }
- else
- {
- err("error: failed to translate characters from %s to %s: %s\n",
- inputEncoding.data(),outputEncoding.data(),strerror(errno));
- exit(1);
- }
- portable_iconv_close(cd);
- return output;
-}
-#endif
-
QCString transcodeCharacterStringToUTF8(const QCString &input)
{
@@ -2343,22 +2295,6 @@ QCString dateToString(bool includeTime)
current.time().minute(),
current.time().second(),
includeTime);
-#if 0
- if (includeTime)
- {
- return convertToQCString(QDateTime::currentDateTime().toString());
- }
- else
- {
- const QDate &d=QDate::currentDate();
- QCString result;
- result.sprintf("%d %s %d",
- d.day(),
- convertToQCString(d.monthName(d.month())).data(),
- d.year());
- return result;
- }
-#endif
}
QCString yearToString()
@@ -4692,7 +4628,6 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
path=name.left(slashPos+1);
name=name.right(name.length()-slashPos-1);
}
- //printf("findFileDef path=`%s' name=`%s'\n",path.data(),name.data());
if (name.isEmpty()) goto exit;
if ((fn=(*fnDict)[name]))
{
@@ -4730,6 +4665,10 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
return lastMatch;
}
}
+ else
+ {
+ //printf("not found!\n");
+ }
exit:
g_findFileDefCache.insert(key,cachedResult);
return 0;
@@ -5981,215 +5920,21 @@ void addGroupListToTitle(OutputList &ol,Definition *d)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- ol.lineBreak();
- ol.startSmall();
- ol.docify("[");
+ ol.writeString("<div class=\"ingroups\">");
GroupListIterator gli(*groups);
GroupDef *gd;
bool first=TRUE;
for (gli.toFirst();(gd=gli.current());++gli)
{
- if (!first) { ol.docify(","); ol.writeNonBreakableSpace(1); } else first=FALSE;
+ if (!first) { ol.writeString(" &#124; "); } else first=FALSE;
ol.writeObjectLink(gd->getReference(),
gd->getOutputFileBase(),0,gd->groupTitle());
}
- ol.docify("]");
- ol.endSmall();
+ ol.writeString("</div>");
ol.popGeneratorState();
}
}
-#if 0
-/*!
- * Function converts Latin1 character to latex string representing the same
- * character.
- */
-static void latin1ToLatex(QTextStream &t,unsigned char c)
-{
- switch (c)
- {
- // the Latin-1 characters
- case 161: t << "!`"; break;
- case 181: t << "$\\mu$"; break;
- case 191: t << "?`"; break;
- case 192: t << "\\`{A}"; break;
- case 193: t << "\\'{A}"; break;
- case 194: t << "\\^{A}"; break;
- case 195: t << "\\~{A}"; break;
- case 196: t << "\\\"{A}"; break;
- case 197: t << "\\AA{}"; break;
- case 198: t << "\\AE{}"; break;
- case 199: t << "\\c{C}"; break;
- case 200: t << "\\`{E}"; break;
- case 201: t << "\\'{E}"; break;
- case 202: t << "\\^{E}"; break;
- case 203: t << "\\\"{E}"; break;
- case 204: t << "\\`{I}"; break;
- case 205: t << "\\'{I}"; break;
- case 206: t << "\\^{I}"; break;
- case 207: t << "\\\"{I}"; break;
- case 208: t << "D "; break; // anyone know the real code?
- case 209: t << "\\~{N}"; break;
- case 210: t << "\\`{O}"; break;
- case 211: t << "\\'{O}"; break;
- case 212: t << "\\^{O}"; break;
- case 213: t << "\\~{O}"; break;
- case 214: t << "\\\"{O}"; break;
- case 215: t << "$\\times$"; break;
- case 216: t << "\\O"; break;
- case 217: t << "\\`{U}"; break;
- case 218: t << "\\'{U}"; break;
- case 219: t << "\\^{U}"; break;
- case 220: t << "\\\"{U}"; break;
- case 221: t << "\\'{Y}"; break;
- case 223: t << "\\ss{}"; break;
- case 224: t << "\\`{a}"; break;
- case 225: t << "\\'{a}"; break;
- case 226: t << "\\^{a}"; break;
- case 227: t << "\\~{a}"; break;
- case 228: t << "\\\"{a}"; break;
- case 229: t << "\\aa{}"; break;
- case 230: t << "\\ae{}"; break;
- case 231: t << "\\c{c}"; break;
- case 232: t << "\\`{e}"; break;
- case 233: t << "\\'{e}"; break;
- case 234: t << "\\^{e}"; break;
- case 235: t << "\\\"{e}"; break;
- case 236: t << "\\`{\\i}"; break;
- case 237: t << "\\'{\\i}"; break;
- case 238: t << "\\^{\\i}"; break;
- case 239: t << "\\\"{\\i}"; break;
- case 241: t << "\\~{n}"; break;
- case 242: t << "\\`{o}"; break;
- case 243: t << "\\'{o}"; break;
- case 244: t << "\\^{o}"; break;
- case 245: t << "\\~{o}"; break;
- case 246: t << "\\\"{o}"; break;
- case 248: t << "\\o{}"; break;
- case 249: t << "\\`{u}"; break;
- case 250: t << "\\'{u}"; break;
- case 251: t << "\\^{u}"; break;
- case 252: t << "\\\"{u}"; break;
- case 253: t << "\\'{y}"; break;
- case 255: t << "\\\"{y}"; break;
- default: t << (char)c;
- }
-}
-
-/*!
- * Function converts Latin2 character to latex string representing the same
- * character.
- */
-static void latin2ToLatex(QTextStream &t,unsigned char c)
-{
- switch (c)
- {
- case 0xA1: t << "\\k{A}"; break;
- case 0xA2: t << (char)c; break;
- case 0xA3: t << "\\L{}"; break;
- case 0xA4: t << (char)c; break;
- case 0xA5: t << (char)c; break;
- case 0xA6: t << "\\'{S}"; break;
- case 0xA7: t << (char)c; break;
- case 0xA8: t << (char)c; break;
- case 0xA9: t << "\\v{S}"; break;
- case 0xAA: t << "\\c{S}"; break;
- case 0xAB: t << "\\v{T}"; break;
- case 0xAC: t << "\\'{Z}"; break;
- case 0xAD: t << (char)c; break;
- case 0xAE: t << "\\v{Z}"; break;
- case 0xAF: t << "\\.{Z}"; break;
-
- case 0xB0: t << (char)c; break;
- case 0xB1: t << "\\k{a}"; break;
- case 0xB2: t << (char)c; break;
- case 0xB3: t << "\\l{}"; break;
- case 0xB4: t << (char)c; break;
- case 0xB5: t << (char)c; break;
- case 0xB6: t << "\\'{s}"; break;
- case 0xB7: t << (char)c; break;
- case 0xB8: t << (char)c; break;
- case 0xB9: t << "\\v{s}"; break;
- case 0xBA: t << "\\c{s}"; break;
- case 0xBB: t << "\\v{t}"; break;
- case 0xBC: t << "\\'{z}"; break;
- case 0xBD: t << (char)c; break;
- case 0xBE: t << "\\v{z}"; break;
- case 0xBF: t << "\\.{z}"; break;
-
- case 0xC0: t << "\\'{R}"; break;
- case 0xC1: t << "\\'{A}"; break;
- case 0xC2: t << "\\^{A}"; break;
- case 0xC3: t << "\\u{A}"; break;
- case 0xC4: t << "\\\"{A}"; break;
- case 0xC5: t << "\\'{L}"; break;
- case 0xC6: t << "\\'{C}"; break;
- case 0xC7: t << "\\c{C}"; break;
- case 0xC8: t << "\\v{C}"; break;
- case 0xC9: t << "\\'{E}"; break;
- case 0xCA: t << "\\k{E}"; break;
- case 0xCB: t << "\\\"{E}"; break;
- case 0xCC: t << "\\v{E}"; break;
- case 0xCD: t << "\\'{I}"; break;
- case 0xCE: t << "\\^{I}"; break;
- case 0xCF: t << "\\v{D}"; break;
-
- case 0xD0: t << "\\DJ "; break;
- case 0xD1: t << "\\'{N}"; break;
- case 0xD2: t << "\\v{N}"; break;
- case 0xD3: t << "\\'{O}"; break;
- case 0xD4: t << "\\^{O}"; break;
- case 0xD5: t << "\\H{O}"; break;
- case 0xD6: t << "\\\"{O}"; break;
- case 0xD7: t << (char)c; break;
- case 0xD8: t << "\\v{R}"; break;
- case 0xD9: t << (char)c; break;
- case 0xDA: t << "\\'{U}"; break;
- case 0xDB: t << "\\H{U}"; break;
- case 0xDC: t << "\\\"{U}"; break;
- case 0xDD: t << "\\'{Y}"; break;
- case 0xDE: t << "\\c{T}"; break;
- case 0xDF: t << "\\ss"; break;
-
- case 0xE0: t << "\\'{r}"; break;
- case 0xE1: t << "\\'{a}"; break;
- case 0xE2: t << "\\^{a}"; break;
- case 0xE3: t << (char)c; break;
- case 0xE4: t << "\\\"{a}"; break;
- case 0xE5: t << "\\'{l}"; break;
- case 0xE6: t << "\\'{c}"; break;
- case 0xE7: t << "\\c{c}"; break;
- case 0xE8: t << "\\v{c}"; break;
- case 0xE9: t << "\\'{e}"; break;
- case 0xEA: t << "\\k{e}"; break;
- case 0xEB: t << "\\\"{e}"; break;
- case 0xEC: t << "\\v{e}"; break;
- case 0xED: t << "\\'{\\i}"; break;
- case 0xEE: t << "\\^{\\i}"; break;
- case 0xEF: t << "\\v{d}"; break;
-
- case 0xF0: t << "\\dj "; break;
- case 0xF1: t << "\\'{n}"; break;
- case 0xF2: t << "\\v{n}"; break;
- case 0xF3: t << "\\'{o}"; break;
- case 0xF4: t << "\\^{o}"; break;
- case 0xF5: t << "\\H{o}"; break;
- case 0xF6: t << "\\\"{o}"; break;
- case 0xF7: t << (char)c; break;
- case 0xF8: t << "\\v{r}"; break;
- case 0xF9: t << (char)c; break;
- case 0xFA: t << "\\'{u}"; break;
- case 0xFB: t << "\\H{u}"; break;
- case 0xFC: t << "\\\"{u}"; break;
- case 0xFD: t << "\\'{y}"; break;
- case 0xFE: t << (char)c; break;
- case 0xFF: t << (char)c; break;
-
- default: t << (char)c;
- }
-}
-#endif
-
void filterLatexString(FTextStream &t,const char *str,
bool insideTabbing,bool insidePre,bool insideItem)
{
@@ -6519,6 +6264,7 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".mm", "objective-c");
updateLanguageMapping(".py", "python");
updateLanguageMapping(".f", "fortran");
+ updateLanguageMapping(".for", "fortran");
updateLanguageMapping(".f90", "fortran");
updateLanguageMapping(".vhd", "vhdl");
updateLanguageMapping(".vhdl", "vhdl");
@@ -7137,3 +6883,72 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
return result;
}
+void writeColoredImgData(const char *dir,ColoredImgDataItem data[])
+{
+ static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
+ static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
+ static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
+ while (data->name)
+ {
+ QCString fileName;
+ fileName=(QCString)dir+"/"+data->name;
+ QFile f(fileName);
+ if (f.open(IO_WriteOnly))
+ {
+ ColoredImage img(data->width,data->height,data->content,data->alpha,
+ sat,hue,gamma);
+ img.save(fileName);
+ }
+ else
+ {
+ fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
+ }
+ Doxygen::indexList.addImageFile(data->name);
+ data++;
+ }
+}
+
+QCString replaceColorMarkers(const char *str)
+{
+ QCString result;
+ QCString s=str;
+ if (s.isEmpty()) return result;
+ static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
+ static const char hex[] = "0123456789ABCDEF";
+ static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
+ static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
+ static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
+ int i,l,sl=s.length(),p=0;
+ while ((i=re.match(s,p,&l))!=-1)
+ {
+ result+=s.mid(p,i-p);
+ QCString lumStr = s.mid(i+2,l-2);
+#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \
+ ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \
+ ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
+
+ double r,g,b;
+ int red,green,blue;
+ int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
+ ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
+ pow(level/255.0,gamma/100.0),&r,&g,&b);
+ red = (int)(r*255.0);
+ green = (int)(g*255.0);
+ blue = (int)(b*255.0);
+ char colStr[8];
+ colStr[0]='#';
+ colStr[1]=hex[red>>4];
+ colStr[2]=hex[red&0xf];
+ colStr[3]=hex[green>>4];
+ colStr[4]=hex[green&0xf];
+ colStr[5]=hex[blue>>4];
+ colStr[6]=hex[blue&0xf];
+ colStr[7]=0;
+ //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
+ result+=colStr;
+ p=i+l;
+ }
+ result+=s.right(sl-p);
+ return result;
+}
+
diff --git a/src/util.h b/src/util.h
index ed3750a..5720343 100644
--- a/src/util.h
+++ b/src/util.h
@@ -382,5 +382,17 @@ QCString externalLinkTarget();
QCString externalRef(const QCString &relPath,const QCString &ref,bool href);
int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos);
+struct ColoredImgDataItem
+{
+ const char *name;
+ unsigned short width;
+ unsigned short height;
+ unsigned char *content;
+ unsigned char *alpha;
+};
+
+void writeColoredImgData(const char *dir,ColoredImgDataItem data[]);
+QCString replaceColorMarkers(const char *str);
+
#endif