diff options
Diffstat (limited to 'src/template.cpp')
-rw-r--r-- | src/template.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/src/template.cpp b/src/template.cpp new file mode 100644 index 0000000..8c5090d --- /dev/null +++ b/src/template.cpp @@ -0,0 +1,175 @@ +/*************************************************************************** + File: template.cpp + Project: Kio-Sword -- An ioslave for SWORD and KDE + Copyright: Copyright (C) 2005 Luke Plant + ***************************************************************************/ + +/*************************************************************************** + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "template.h" +#include "utils.h" +#include "swordoptions.h" + +#include <kglobal.h> +#include <klocale.h> +#include <kstandarddirs.h> + +#include <qstring.h> + +namespace KioSword { + + + // placeholders + static const char* PAGETITLE = "{$pagetitle}"; + static const char* BASECSS = "{$basecss}"; + static const char* CONTENT = "{$content}"; + static const char* HOMELINK = "{$homelink}"; + static const char* HOMELINKCAPTION = "{$homelinkcaption}"; + static const char* SEARCHLINK = "{$searchlink}"; + static const char* SEARCHLINKCAPTION = "{$searchlinkcaption}"; + static const char* SETTINGSLINK = "{$settingslink}"; + static const char* SETTINGSLINKCAPTION = "{$settingslinkcaption}"; + static const char* HELPLINK = "{$helplink}"; + static const char* HELPLINKCAPTION = "{$helplinkcaption}"; + static const char* TOPNAV = "{$topnav}"; + static const char* BOTTOMNAV = "{$bottomnav}"; + static const char* TOGGLES = "{$toggles}"; + + // static HTML fragments ------------------------------------------------------------------------------------------------------- + static const QString &html_page(QString("") + + "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" " // make W3C valid + "\"http://www.w3.org/TR/html4/strict.dtd\">\n" + "<html><head>\n" + "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n" + "<title>" + PAGETITLE + "</title>\n" + "<link rel=\"StyleSheet\" href=\"file:" + BASECSS + "\" TYPE=\"text/css\">\n" + "</head>\n" + "<body class=\"kiosword\">" + "<div class=\"page\"><div class='inner'>" + " " + TOPNAV + "\n" + " <div class=\"content\"><div class='inner'>" + CONTENT + "</div></div>\n" + " " + TOGGLES + "\n" + " " + BOTTOMNAV + "\n" + " <div class=\"links\"><div class='inner'>\n" + " <ul>\n" + " <li><a accesskey=\"t\" href=\"" + HOMELINK + "\">" + HOMELINKCAPTION + "</a></li>\n" + " <li><a href=\"" + SEARCHLINK + "\">" + SEARCHLINKCAPTION + "</a></li>\n" + " <li><a href=\"" + SETTINGSLINK + "\">" + SETTINGSLINKCAPTION + "</a></li>\n" + " <li><a href=\"" + HELPLINK + "\">" + HELPLINKCAPTION + "</a></li>\n" + " </ul>\n" + " </div></div>\n" + "</div></div>\n" + "</body>\n" + "</html>\n"); + + Template::Template() + { + m_showToggles = false; + } + + QCString Template::render(const SwordOptions& options) const + { + + QString cssdir = KGlobal::dirs()->findResourceDir("data", "kio_sword/kio_sword.css") + "kio_sword/"; + + QString output = html_page; + output = output + .replace(HOMELINK, swordUrl("", options)) + .replace(HOMELINKCAPTION, i18n("Module list")) + .replace(SEARCHLINK, swordUrlForPage("search", options)) + .replace(SEARCHLINKCAPTION, i18n("Search")) + .replace(SETTINGSLINK, swordUrlForSettings(m_currentPath, options)) + .replace(SETTINGSLINKCAPTION, i18n("Settings")) + .replace(HELPLINK, swordUrlForPage("help", options)) + .replace(HELPLINKCAPTION, i18n("Help")) + .replace(BASECSS, cssdir + "kio_sword.css") + .replace(PAGETITLE, m_title) + .replace(CONTENT, m_content); + if (!m_nav.isEmpty()) + { + output = output + .replace(TOPNAV, "<div class='navtop'><div class='inner'>" + m_nav + "</div></div>") + .replace(BOTTOMNAV, "<div class='navbottom'><div class='inner'>" + m_nav + "</div></div>"); + } + else + { + output = output + .replace(TOPNAV, "") + .replace(BOTTOMNAV, ""); + } + if (m_showToggles) + { + QString toggles; + SwordOptions toggledOptions(options); + + toggledOptions.verseNumbers.set(!toggledOptions.verseNumbers()); + toggles += "<li><a href=\"" + swordUrl(m_currentPath, toggledOptions) + "\" accesskey='v'>" + + i18n("Verse Numbers") + "</a></li>"; + toggledOptions.verseNumbers.set(!toggledOptions.verseNumbers()); + + toggledOptions.verseLineBreaks.set(!toggledOptions.verseLineBreaks()); + toggles += "<li><a href=\"" + swordUrl(m_currentPath, toggledOptions) + "\" accesskey='l'>" + + i18n("Verse Line Breaks") + "</a></li>"; + toggledOptions.verseLineBreaks.set(!toggledOptions.verseLineBreaks()); + + toggledOptions.strongs.set(!toggledOptions.strongs()); + toggles += "<li><a href=\"" + swordUrl(m_currentPath, toggledOptions) + "\" accesskey='s'>" + + i18n("Strongs") + "</a></li>"; + toggledOptions.strongs.set(!toggledOptions.strongs()); + + toggledOptions.morph.set(!toggledOptions.morph()); + toggles += "<li><a href=\"" + swordUrl(m_currentPath, toggledOptions) + "\" accesskey='m'>" + + i18n("Morphological tags") + "</a></li>"; + toggledOptions.morph.set(!toggledOptions.morph()); + + output = output.replace(TOGGLES, "<div class='toggles'><div class='inner'><ul>" + toggles + "</ul></div></div>"); + + } + else + { + output = output.replace(TOGGLES, ""); + } + return output.utf8(); + } + + void Template::setTitle(const QString& title) + { + m_title = title; + } + + void Template::setContent(const QString& content) + { + m_content = content; + } + + void Template::setNav(const QString& nav) + { + m_nav = nav; + } + + void Template::setCurrentPath(const QString& currentPath) + { + m_currentPath = currentPath; + } + + void Template::setShowToggles(bool showToggles) + { + m_showToggles = showToggles; + } +} + |