|
From: <be...@us...> - 2014-07-28 04:36:22
|
Revision: 12731
http://sourceforge.net/p/xoops/svn/12731
Author: beckmi
Date: 2014-07-28 04:36:09 +0000 (Mon, 28 Jul 2014)
Log Message:
-----------
1.02 Beta 1: - added tab for bulk Updates and patches for Core files, required for "bulk Update" to work, located in /extras
Modified Paths:
--------------
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/about.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/admin_header.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/index.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/install.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/menu.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/uninstall.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/docs/changelog.txt
XoopsModules/moduleinstaller/trunk/moduleinstaller/docs/install.txt
XoopsModules/moduleinstaller/trunk/moduleinstaller/docs/readme.txt
XoopsModules/moduleinstaller/trunk/moduleinstaller/include/common.inc.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/include/install_tpl.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/language/english/install.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/language/english/main.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/language/english/modinfo.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/xoops_version.php
Added Paths:
-----------
XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip
XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/update.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/index.html
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/reset.css
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/style.css
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/index.html
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/index.html
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/index.html
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/prototype.js
XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/xo-installer.js
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/Original Core 2.5.7 files/
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/Original Core 2.5.7 files/main.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/Original Core 2.5.7 files/modulesadmin.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/main.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/modulesadmin.php
XoopsModules/moduleinstaller/trunk/moduleinstaller/extras/readme.txt
Removed Paths:
-------------
XoopsModules/moduleinstaller/trunk/moduleinstaller/css/
XoopsModules/moduleinstaller/trunk/moduleinstaller/images/
XoopsModules/moduleinstaller/trunk/moduleinstaller/js/
Added: XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip
===================================================================
(Binary files differ)
Index: XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip
===================================================================
--- XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip 2014-07-28 04:36:09 UTC (rev 12731)
Property changes on: XoopsModules/moduleinstaller/trunk/XOOPS2.56_mod_moduleInstaller_1.01_Beta1_xoops.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/about.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/about.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/about.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -16,7 +16,7 @@
* @author XOOPS Development Team
* @version $Id $
**/
-include_once dirname(__FILE__) . '/admin_header.php';
+include_once __DIR__ . '/admin_header.php';
xoops_cp_header();
@@ -25,4 +25,4 @@
echo $aboutAdmin->addNavigation('about.php');
echo $aboutAdmin->renderAbout('6KJ7RW5DR3VTJ', false);
-include 'admin_footer.php';
+include_once __DIR__ . '/admin_footer.php';
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/admin_header.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/admin_header.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/admin_header.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -16,7 +16,7 @@
* @author XOOPS Module Team
* @version $Id $
**/
-$path = dirname(dirname(dirname(dirname(__FILE__))));
+$path = dirname(dirname(dirname(__DIR__)));
include_once $path . '/mainfile.php';
include_once $path . '/include/cp_functions.php';
require_once $path . '/include/cp_header.php';
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/index.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/index.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/index.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -18,7 +18,7 @@
**/
require_once '../../../include/cp_header.php';
-include 'admin_header.php';
+include_once __DIR__ . '/admin_header.php';
xoops_cp_header();
$indexAdmin = new ModuleAdmin();
@@ -26,4 +26,4 @@
echo $indexAdmin->addNavigation('index.php');
echo $indexAdmin->renderIndex();
-include 'admin_footer.php';
+include_once __DIR__ . '/admin_footer.php';
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/install.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/install.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/install.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -14,15 +14,14 @@
* @author DuGris (aka L. JEN) <du...@fr...>
* @version $Id$
**/
-include 'admin_header.php';
+include_once __DIR__ . '/admin_header.php';
xoops_cp_header();
-
$xoopsOption['checkadmin'] = true;
$xoopsOption['hascommon'] = true;
require_once './../include/common.inc.php';
require_once XOOPS_ROOT_PATH . "/modules/system/admin/modulesadmin/modulesadmin.php";
-defined('XOOPS_INSTALL') or die('XOOPS Installation wizard die');
+defined('XOOPS_INSTALL') || die('XOOPS Installation wizard die');
if (!@include_once "../../../language/{$wizard->language}/global.php") {
include_once '../../../language/english/global.php';
@@ -33,7 +32,7 @@
require_once '../../../class/xoopsformloader.php';
require_once '../../../class/xoopslists.php';
-//$xoTheme->addStylesheet( XOOPS_URL . "/modules/" . $xoopsModule->getVar("dirname") . "/css/style.css" );
+//$xoTheme->addStylesheet( XOOPS_URL . "/modules/" . $xoopsModule->getVar("dirname") . "/assets/css/style.css" );
$pageHasForm = true;
$pageHasHelp = false;
@@ -152,6 +151,5 @@
echo $indexAdmin->renderButton('left', '');
-
include './../include/install_tpl.php';
-include 'admin_footer.php';
+include_once __DIR__ . '/admin_footer.php';
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/menu.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/menu.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/menu.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -1,8 +1,8 @@
<?php
-defined("XOOPS_ROOT_PATH") or die("XOOPS root path not defined");
+// defined("XOOPS_ROOT_PATH") || die("XOOPS root path not defined");
-$dirname = basename(dirname(dirname(__FILE__)));
+$dirname = basename(dirname(__DIR__));
$module_handler = xoops_gethandler('module');
$module = $module_handler->getByDirname($dirname);
$pathIcon32 = $module->getInfo('icons32');
@@ -17,7 +17,6 @@
$adminmenu[$i]["icon"] = $pathIcon32.'/home.png';
++$i;
$adminmenu[$i]["title"] = _MI_INSTALLER_MENU_01;
-// $adminmenu[$i]["link"] = 'admin/page_moduleinstaller.php';
$adminmenu[$i]["link"] = 'admin/install.php';
$adminmenu[$i]["icon"] = $pathIcon32.'/add.png';
++$i;
@@ -25,6 +24,10 @@
$adminmenu[$i]["link"] = 'admin/uninstall.php';
$adminmenu[$i]["icon"] = $pathIcon32.'/delete.png';
++$i;
+$adminmenu[$i]["title"] = _MI_INSTALLER_MENU_03;
+$adminmenu[$i]["link"] = 'admin/update.php';
+$adminmenu[$i]["icon"] = $pathIcon32.'/update.png';
+++$i;
$adminmenu[$i]["title"] = _MI_INSTALLER_ADMIN_ABOUT;
$adminmenu[$i]["link"] = 'admin/about.php';
$adminmenu[$i]["icon"] = $pathIcon32.'/about.png';
Modified: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/uninstall.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/uninstall.php 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/uninstall.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -14,13 +14,13 @@
* @author DuGris (aka L. JEN) <du...@fr...>
* @version $Id$
**/
-include 'admin_header.php';
+include_once __DIR__ . '/admin_header.php';
xoops_cp_header();
$xoopsOption['checkadmin'] = true;
$xoopsOption['hascommon'] = true;
require_once './../include/common.inc.php';
require_once XOOPS_ROOT_PATH . "/modules/system/admin/modulesadmin/modulesadmin.php";
-defined('XOOPS_INSTALL') or die('XOOPS Installation wizard die');
+defined('XOOPS_INSTALL') || die('XOOPS Installation wizard die');
if (!@include_once "../../../language/{$wizard->language}/global.php") {
include_once '../../../language/english/global.php';
@@ -31,7 +31,7 @@
require_once '../../../class/xoopsformloader.php';
require_once '../../../class/xoopslists.php';
-//$xoTheme->addStylesheet( XOOPS_URL . "/modules/" . $xoopsModule->getVar("dirname") . "/css/style.css" );
+//$xoTheme->addStylesheet( XOOPS_URL . "/modules/" . $xoopsModule->getVar("dirname") . "/assets/css/style.css" );
$pageHasForm = true;
$pageHasHelp = false;
@@ -136,7 +136,6 @@
$indexAdmin = new ModuleAdmin();
echo $indexAdmin->addNavigation('uninstall.php');
-
$indexAdmin->addItemButton(
_AM_INSTALLER_SELECT_ALL,
"javascript:selectAll();",
@@ -151,6 +150,5 @@
echo $indexAdmin->renderButton('left', '');
-
include './../include/install_tpl.php';
-include 'admin_footer.php';
+include_once __DIR__ . '/admin_footer.php';
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/update.php
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/update.php (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/update.php 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1,192 @@
+<?php
+/**
+ * See the enclosed file license.txt for licensing information.
+ * If you did not receive this file, get it at http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * @copyright The XOOPS project http://www.xoops.org/
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL)
+ * @package installer
+ * @since 2.3.0
+ * @author Haruki Setoyama <ha...@pl...>
+ * @author Kazumi Ono <web...@my...>
+ * @author Skalpa Keo <sk...@xo...>
+ * @author Taiwen Jiang <ph...@us...>
+ * @author DuGris (aka L. JEN) <du...@fr...>
+ * @version $Id$
+**/
+include_once __DIR__ . '/admin_header.php';
+xoops_cp_header();
+$xoopsOption['checkadmin'] = true;
+$xoopsOption['hascommon'] = true;
+require_once './../include/common.inc.php';
+require_once XOOPS_ROOT_PATH . "/modules/system/admin/modulesadmin/modulesadmin.php";
+defined('XOOPS_INSTALL') || die('XOOPS Installation wizard die');
+
+if (!@include_once "../../../language/{$wizard->language}/global.php") {
+ include_once '../../../language/english/global.php';
+}
+if (!@include_once "../../system/language/{$wizard->language}/admin/modulesadmin.php") {
+ include_once '../../system/language/english/admin/modulesadmin.php';
+}
+require_once '../../../class/xoopsformloader.php';
+require_once '../../../class/xoopslists.php';
+
+//$xoTheme->addStylesheet( XOOPS_URL . "/modules/" . $xoopsModule->getVar("dirname") . "/assets/css/style.css" );
+
+$pageHasForm = true;
+$pageHasHelp = false;
+
+/**
+ * @param $dirname
+ */
+
+/*
+function xoops_module_update($dirname) {
+
+//http://localhost/257final/modules/system/admin.php?fct=modulesadmin&op=update&module=mypoints
+
+$url = XOOPS_URL . "/modules/system/admin.php?fct=modulesadmin&op=update&module=".$dirname;
+//$ch = curl_init();
+//curl_setopt($ch, CURLOPT_URL,$url);
+//curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
+//curl_setopt($ch, CURLOPT_TIMEOUT, 10);
+//$result = curl_exec($ch);
+//curl_close($ch);
+
+
+$crl = curl_init();
+curl_setopt($crl, CURLOPT_URL, $url);
+@curl_setopt($crl, CURLOPT_HEADER, 0);
+@curl_setopt($crl, CURLOPT_NOBODY, 1);
+@curl_setopt($crl, CURLOPT_FOLLOWLOCATION, true);
+curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1);
+$res = curl_exec($crl);
+curl_close($crl);
+return $res;
+
+}
+
+*/
+
+if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ include_once '../../../class/xoopsblock.php';
+ include_once '../../../kernel/module.php';
+ include_once '../../../include/cp_functions.php';
+ include_once '../../../include/version.php';
+// include_once './../include/modulesadmin.php';
+
+ $config_handler =& xoops_gethandler('config');
+ $xoopsConfig =& $config_handler->getConfigsByCat(XOOPS_CONF);
+
+ $msgs = array();
+ foreach ($_REQUEST['modules'] as $dirname => $updateModule) {
+ if ($updateModule) {
+ $msgs[] =& xoops_module_update($dirname);
+ }
+ }
+
+ $pageHasForm = false;
+
+ if (count($msgs) > 0) {
+ $content = "<div class='x2-note successMsg'>" . UPDATED_MODULES . "</div><ul class='log'>";
+ foreach ($msgs as $msg) {
+ $content .= "<dt>{$msg}</dt>";
+ }
+ $content .= "</ul>";
+ } else {
+ $content = "<div class='x2-note confirmMsg'>" . NO_INSTALLED_MODULES . "</div>";
+ }
+
+ // Flush cache files for cpanel GUIs
+ xoops_load("cpanel", "system");
+ XoopsSystemCpanel::flush();
+
+ //Set active modules in cache folder
+ xoops_setActiveModules();
+} else {
+ if (!isset($GLOBALS['xoopsConfig']['language'])) {
+ $GLOBALS['xoopsConfig']['language'] = $_COOKIE['xo_install_lang'];
+ }
+
+ // Get installed modules
+ $module_handler =& xoops_gethandler('module');
+ $installed_mods =& $module_handler->getObjects();
+ $listed_mods = array();
+ foreach ($installed_mods as $module) {
+ $listed_mods[] = $module->getVar('dirname');
+ }
+
+ include_once '../../../class/xoopslists.php';
+ $dirlist = XoopsLists::getModulesList();
+ $toinstal = 0;
+
+ $javascript = "";
+ $content = "<ul class='log'><li>";
+ $content .= "<table class='module'>\n";
+ //remove System module and itself from the list of modules that can be uninstalled
+// $dirlist = array_diff($dirlist, array('system', 'moduleinstaller'));
+ foreach ($dirlist as $file) {
+ clearstatcache();
+ if (in_array($file, $listed_mods)) {
+ $value = 0;
+ $style = "";
+ if (in_array($file, $wizard->configs['modules'])) {
+ $value = 1;
+ $style = " style='background-color:#E6EFC2;'";
+ }
+
+ $file = trim($file);
+ $module =& $module_handler->create();
+ if (!$module->loadInfo($file, false)) {
+ continue;
+ }
+
+ $form = new XoopsThemeForm('', 'modules', 'index.php', 'post');
+ $moduleYN = new XoopsFormRadioYN('', 'modules['. $module->getInfo('dirname') . ']', $value, _YES, _NO);
+ $moduleYN->setExtra( "onclick='selectModule(\"" . $file . "\", this)'" );
+ $form->addElement($moduleYN);
+
+ $content .= "<tr id='" . $file . "'" . $style . ">\n";
+ $content .= " <td class='img' ><img src='" . XOOPS_URL . "/modules/" . $module->getInfo('dirname') . "/" . $module->getInfo('image') . "' alt='" . $module->getInfo('name') . "'/></td>\n";
+
+ $moduleHandlerInDB =& xoops_gethandler('module');
+ $moduleInDB =& $module_handler->getByDirname($module->getInfo('dirname'));
+ // Save current version for use in the update function
+ $prevVersion = round($moduleInDB->getVar('version') / 100, 2);
+
+ $content = round($module->getInfo('version'), 2) != $prevVersion ? $content . " <td ><span style='color: #FF0000; font-weight: bold;'>" : $content . " <td><span>";
+ $content .= " " . $module->getInfo('name') . " " . number_format( round($module->getInfo('version'), 2), 2) . " " . $module->getInfo('module_status') . " (folder: /" . $module->getInfo('dirname') . ")";
+ $content .= " <br />" . $module->getInfo('description');
+ $content .= " </span></td>\n";
+ $content .= " <td class='yesno'>";
+ $content .= $moduleYN->render() ;
+ $content .= " </td></tr>\n";
+ ++$toinstal;
+ }
+ }
+ $content .= "</table>";
+ $content .= "</li></ul><script type='text/javascript'>" . $javascript . "</script>";
+ if ($toinstal == 0) {
+ $pageHasForm = false;
+ $content = "<div class='x2-note confirmMsg'>" . NO_MODULES_FOUND . "</div>";
+ }
+}
+$indexAdmin = new ModuleAdmin();
+echo $indexAdmin->addNavigation('update.php');
+
+$indexAdmin->addItemButton(
+ _AM_INSTALLER_SELECT_ALL,
+ "javascript:selectAll();",
+ 'button_ok'
+);
+
+$indexAdmin->addItemButton(
+ _AM_INSTALLER_SELECT_NONE,
+ "javascript:unselectAll();",
+ 'prune'
+);
+
+echo $indexAdmin->renderButton('left', '');
+
+include './../include/install_tpl.php';
+include_once __DIR__ . '/admin_footer.php';
Property changes on: XoopsModules/moduleinstaller/trunk/moduleinstaller/admin/update.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/index.html
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/index.html (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/index.html 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1 @@
+ <script>history.go(-1);</script>
\ No newline at end of file
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/reset.css
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/reset.css (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/reset.css 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1,35 @@
+@charset "UTF-8";
+/*
+ * Suico theme
+ * In memory of Marcello Brandao
+ * @copyright The XOOPS Project http://sourceforge.net/projects/xoops/
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU Public License 3.0
+ * @package themes
+ * @since 2.5.x
+ * @author Kris <http://www.xoofoo.org/>
+ * @maintained The XOOPS Project http://sourceforge.net/projects/xoops/
+ *
+ * @version $Id
+*/
+
+* { margin: 0; padding: 0; border: 0; outline: none; text-decoration: none; font-family: sans-serif; font-size: 1em; font-weight: normal; font-style: normal; resize:none; }
+
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ }
+/* remember to define focus styles! */
+:focus { outline: 0;}
+body { line-height: 1; color: #000; background: #fff;}
+ol, ul { list-style: none; }
+/* tables still need 'cellspacing="0"' in the markup */
+table { border-collapse: separate; border-spacing: 0;}
+caption, th, td { font-weight: normal;}
+blockquote:before, blockquote:after, q:before, q:after { content: "";}
+blockquote, q { quotes: "" "";}
\ No newline at end of file
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/style.css
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/style.css (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/css/style.css 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1,556 @@
+@charset "UTF-8";
+/* ----- Main layout ----- */
+html { margin: 0; padding: 0; height: 100%;}
+
+
+img {
+ border: none;
+}
+
+/* header */
+
+
+#xo-version img {margin-top: -8px;}
+#xo-support {
+ float: right;
+ margin-right: 10px;
+ padding-top: 25px;
+ font-size: 10pt !important;
+ vertical-align: middle;
+ color: #000;
+}
+
+
+/* ----- Wizard layout ----- */
+#wizard {
+ margin: 0 auto;
+ padding: .5em;
+ text-align: left;
+ background: #f3f3f3 url(../img/wizard_bg.png) no-repeat 0 90px;
+ border-top: 1px solid #e3e3e3;
+ -webkit-border-bottom-right-radius: 8px;
+ -webkit-border-bottom-left-radius: 8px;
+ -moz-border-radius-bottomright: 8px;
+ -moz-border-radius-bottomleft: 8px;
+ border-bottom-right-radius: 8px;
+ border-bottom-left-radius: 8px;
+ border-bottom: 2px solid #ccc;
+ border-right: 2px solid #ccc;
+ border-left: 2px solid #ccc;
+}
+#pageslist {
+ float: left;
+ width: 250px;
+ margin: 10px 0 0 0;
+ padding: .5em;
+ border-right: 1px solid #e4e4e4;
+ list-style-type: none;
+ min-height: 350px;
+
+}
+.page {
+ min-height: 350px;
+ margin: 5px 0 0 260px;
+ padding: .5em;
+ background-color : transparent;
+}
+* html .page { height: 350px; }
+
+h1 {
+ margin: 0;
+ padding: 0;
+ color: #fff;
+ font-family: "Lucida Grande", "Trebuchet MS", sans-serif;
+ font-size: 1.5em;
+}
+
+#header {
+ height: 40px;
+ margin: 0;
+ padding: 0;
+ color: #fff;
+ font-family: "Lucida Grande", "Trebuchet MS", sans-serif;
+ font-size: 1.5em;
+}
+
+
+#title {
+ margin: 5px 11px;
+ width: auto;
+ background: url(../img/dark-navcp.png) repeat-x;
+ height: 40px;
+ padding: 0.1em 1em 0 1em;
+ text-shadow: 1px 1px 2px #ccc;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+ border-radius: 8px;
+}
+#step {float: right; margin: 5px;}
+#step2 {float: left; margin: 5px;}
+
+ul, ol { margin:0; padding:0 20px;}
+
+/* ----- Styling ----- */
+
+#pageslist li {
+ padding-left: 15px;
+ padding-top: 1px;
+ padding-bottom: 2px;
+ background: url(../img/bullet.png) no-repeat left center;
+}
+#pageslist li.current {
+ background-image: url(../img/bullet-current.png);
+ background-color: #E9FF8F;
+ filter: alpha(opacity=60);
+ -moz-opacity: 0.6;
+ -webkit-opacity: 0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6;
+ margin-bottom: 2px;
+}
+#pageslist li.disabled {
+ background-image: url(../img/bullet-disabled.png);
+}
+
+
+#buttons {
+ clear: both;
+ text-align: right;
+ padding: .5em;
+}
+
+form { margin: 0;}
+select#support { border-color: #ccc;}
+h1, h2 { font-family: "Lucida Grande", "Trebuchet MS", sans-serif; text-shadow: 1px 1px 2px #ccc;}
+h2 {
+ margin-top: 0;
+ border-bottom: 1px solid #ccc;
+ padding-left: .5em;
+ text-align: left;
+}
+h3 {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin: 1em .5em .5em;
+}
+p { margin: .5em;}
+
+a {
+ text-decoration: none;
+ color: #666;
+ font-weight: bold;
+ background-color: transparent;
+}
+
+a:hover {
+ text-decoration: none;
+ color: #ff9966;
+ font-weight: bold;
+ background-color: transparent;
+}
+
+table {
+ width: 99%;
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin-bottom: 1em;
+ filter: alpha(opacity=80);
+ -moz-opacity: 0.8;
+ -webkit-opacity: 0.8;
+ -khtml-opacity: 0.8;
+ opacity: 0.8;
+}
+
+caption, .caption {
+ background: #fff url(../img/table-caption-grey.png) repeat-x;
+ padding: 2px .25em;
+ color: #000;
+ font-size: 1.1em;
+ font-weight: bold;
+ font-variant: small-caps;
+ text-align: center;
+}
+
+table thead th { background-color: #f4f4f4;}
+
+
+td, th {
+ padding: 2px .25em;
+ background-color: #fcfcfc;
+ border: 1px solid #efefef;
+}
+
+fieldset {
+ margin: .5em;
+ padding: 1em;
+ border: 1px solid #333;
+ color: #000;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ -khtml-border-radius: 6px;
+ border-radius: 6px;
+}
+legend {
+ margin: 0;
+ padding: 0 10px;
+ font-size: 1.1em;
+ font-weight: bold;
+ text-shadow: 1px 1px 2px #ccc;
+}
+
+.xolabel {
+ clear: both;
+ display: block;
+ padding: .5em 0;
+}
+
+#xolabel.center {
+ clear: both;
+ text-align: center;
+ display: block;
+ padding: .5em 0;
+}
+
+#help_button { float: right; cursor:help; }
+
+.xoform-help {
+ display: none;
+ margin: 5px;
+ padding: 5px;
+ color: #333;
+ list-style-type: none;
+ background-color: #F4FAFF;
+ border: 1px solid #E4EAEF;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+ border-radius: 8px;
+}
+body.show-help .xoform-help { display: block;}
+
+
+#langselect.page { text-align: center; }
+
+/*================================================*/
+ul.diags1 {
+ overflow: auto;
+ width: 60%;
+ padding: 5px;
+ margin: 0;
+ border: 1px solid #d0d0d0;
+ list-style-type: none;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+ background-color: #FBE3E4;
+}
+/*================================================*/
+
+ul.diags, ul.log {
+/* height: 310px;*/
+ overflow: auto;
+ padding: 5px;
+ margin: 0;
+ border: 1px solid #d0d0d0;
+ list-style-type: none;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+}
+
+/*ul.log {
+ height: 280px;
+}*/
+ul.diags li, ul.log li {
+ color: #000;
+ padding-left: 20px;
+}
+ul.diags li.success, ul.log li.success { background-image: url(../img/yes.png); }
+ul.diags li.failure, ul.log li.failure {
+ background-image: url(../img/no.png);
+ font-weight: bold;
+ color: #f66;
+}
+
+.module {
+ background-color: #fff;
+}
+
+.module td {
+ margin: 0;
+ padding: 2px;
+ background-color: transparent;
+}
+
+.module td.img {
+ width: 100px;
+}
+
+.module td.yesno {
+ width: 100px;
+}
+
+/* Xoops french installer */
+
+/* ===== messages ===== */
+.pathmessage {
+ position: absolute;
+ float: right;
+ margin-left: 5px;
+ width: 220px;
+}
+.error, .warning, .failure {
+ background-image: url(../img/no.png);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+.success {
+ background-image: url(../img/yes.png);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+.warning { color:#ff0000; background-color: transparent;}
+
+.errorMsg, .confirmMsg, .resultMsg, .successMsg {
+ margin: 5px 2px;
+ padding: 5px;
+ border: 1px solid #ccc;
+}
+.confirmMsg {
+ background-color: #FFF6BF;
+ color: #817134;
+ border: 1px solid #ccc;
+ list-style-type: none;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+}
+.resultMsg, .successMsg {
+ background-color: #E6EFC2;
+ color: #529214;
+ border-color: #C6D880;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+}
+.errorMsg a {background-color: transparent; color: #D12F19;}
+.confirmMsg a {background-color: transparent; color: #817134;}
+.successMsg a {background-color: transparent; color: #529214;}
+.errorMsg {
+ background-color: #FBE3E4;
+ background-repeat: no-repeat;
+ background-position: 10px;
+ color: #D12F19;
+ border-color: #FBC2C4;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -khtml-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.directory, .files {
+ padding-left: 20px;
+ font-weight: bold;
+ font-style: italic;
+}
+.directory {
+ background-image: url(../img/folder.png);
+ background-repeat: no-repeat;
+ background-position: left;
+}
+.files {
+ background-image: url(../img/document.png);
+ background-repeat: no-repeat;
+ background-position: left;
+}
+
+#screenshot {
+ text-align: center;
+}
+#screenshot img {
+ max-width: 500px;
+ margin-top: 5px;
+}
+/* Form element */
+input[type=submit],input[type=reset],input[type=button],.xo-formbuttons,.formButton,button
+ {
+ margin: 2px 5px 2px 5px;
+ background-color: #D3D2D6;
+ padding: 4px 8px;
+ color: #405A80;
+ font-size: 1em;
+ font-weight: bold;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ box-shadow: 0 20px 10px -10px rgba(255, 255, 255, 0.3) inset;
+ -moz-box-shadow: 0 20px 10px -10px rgba(255, 255, 255, 0.3) inset;
+ -webkit-box-shadow: 0 20px 10px -10px rgba(255, 255, 255, 0.3) inset;
+ -khtml-box-shadow: 0 20px 10px -10px rgba(255, 255, 255, 0.3) inset;
+ cursor: pointer;
+}
+
+input[type=submit]:hover,input[type=reset]:hover,input[type=button]:hover,.xo-formbuttons:hover,.formButton:hover,button:hover
+ {
+ background-color: #E6EBFF;
+ padding: 4px 8px;
+ color: inherit;
+ cursor: pointer;
+}
+
+input[type=text],input[type=password],input[type=checkbox],input[type=file],textarea
+ {
+ border: 1px solid #ccc;
+ margin: 2px 5px 2px 0;
+ padding: 2px;
+ background-color: #f7f7f7;
+ padding-left: .2em;
+ color: inherit;
+ border: #ccc solid 1px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ border-radius: 5px;
+
+}
+
+input[type=text],input[type=password],input[type=file] {
+ width: 60%;
+ margin-bottom: .25em;
+ background: #f7f7f7 url(../img/form-input.png) no-repeat left top;
+ padding: 1px .25em;
+ border-bottom: 1px solid #aaa;
+ border-right: 1px solid #aaa;
+}
+
+input[type=text]:hover,input[type=password]:hover,input[type=file]:hover,input[type=checkbox]:hover,textarea:hover
+ {
+ background-color: #EFEFEF;
+ color: inherit;
+ border: 1px solid #E9CB38;
+}
+
+input[type=text]:focus,input[type=password]:focus,input[type=file]:focus,input[type=checkbox]:focus,textarea:focus
+ {
+ background-color: #F4FAFF;
+ color: #333;
+ border: #139EE8 solid 1px;
+ outline: 1px solid #139EE8;
+ -moz-outline-radius: 5px;
+ -webkit-outline-radius: 5px;
+ -khtml-outline-radius: 5px;
+ border-outline: 5px;
+}
+
+input[type=checkbox],input[type=radio] {
+ margin: 3px;
+ padding: 2px;
+}
+
+select {
+ width: 200px;
+ border-right: #000 1px solid;
+ border-top: #000 1px solid;
+ background-color: #f7f7f7;
+ font: 8pt verdana, arial, helvetica;
+ border-left: #000 1px solid;
+ color: #000;
+ border-bottom: #000 1px solid;
+ filter: alpha(opacity=80);
+ -moz-opacity: 0.8;
+ -webkit-opacity: 0.8;
+ -khtml-opacity: 0.8;
+ opacity: 0.8;
+}
+select[name=lang] {
+ min-width: 10em
+}
+.option {
+ padding-left: 27px;
+ font-size: 1.1em;
+ margin: 2px 0;
+}
+
+textarea {
+ width: 95%;
+}
+
+/* Password streng */
+#password {
+ position: relative;
+ min-height: 120px;
+}
+#passwordinput {
+ position : absolute;
+ width: 100%;
+}
+#passwordmetter {
+ position : absolute;
+ right: -7px;
+ top: -17px;
+ width: 200px;
+ padding: 0 5px 5px;
+ border : 1px solid #555;
+ background: none;
+}
+#passwordmetter label, #passwordgenerator, #passwordgenerator input{
+ text-align: center;
+}
+#passwordDescription {
+ text-align: center;
+ position: relative;
+ top: 2px;
+/* left: 5px;*/
+}
+
+#passwordStrength {
+ text-align: center;
+ height: 20px;
+ display: block;
+ margin-bottom: .25em;
+ font-weight: bold;
+}
+
+.strength0 { width: auto; background: #ccc; }
+.strength1 { width: auto; background: #ccc; }
+.strength2 { width: auto; background: #f00; }
+.strength3 { width: auto; background: #ff5f5f; }
+.strength4 { width: auto; background: #56e500; }
+.strength5 { width: auto; background: #4dcd00; }
+.strength6 { width: auto; background: #399800; }
+.strength0 span { color: #000; }
+.strength1 span { color: #000; }
+.strength2 span { color: #fff; }
+.strength3 span { color: #fff; }
+.strength4 span { color: #000; }
+.strength5 span { color: #000; }
+.strength6 span { color: #fff; }
+
+/*==================== logger ============================*/
+#xo-logger-tabs {
+ margin: 5px;
+ padding-top: 10px;
+ font-size: 95%;
+}
+
+#xo-logger-tabs a {
+ text-decoration: none;
+ color: #f7f7f7;
+ font-weight: bold;
+ background-color: transparent;
+}
+
+#xo-logger-tabs a:hover {
+ text-decoration: none;
+ color: #FF0000;
+ font-weight: bold;
+ background-color: transparent;
+}
+.noininstall {display: none;}
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/index.html
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/index.html (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/index.html 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1 @@
+ <script>history.go(-1);</script>
\ No newline at end of file
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png
===================================================================
(Binary files differ)
Index: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png 2014-07-26 11:34:20 UTC (rev 12730)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png 2014-07-28 04:36:09 UTC (rev 12731)
Property changes on: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/images/logo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/index.html
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/index.html (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/index.html 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1 @@
+ <script>history.go(-1);</script>
\ No newline at end of file
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/index.html
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/index.html (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/index.html 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1 @@
+ <script>history.go(-1);</script>
\ No newline at end of file
Added: XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/prototype.js
===================================================================
--- XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/prototype.js (rev 0)
+++ XoopsModules/moduleinstaller/trunk/moduleinstaller/assets/js/prototype.js 2014-07-28 04:36:09 UTC (rev 12731)
@@ -0,0 +1,7036 @@
+/* Prototype JavaScript framework, version 1.7.1
+ * (c) 2005-2010 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+
+ Version: '1.7.1',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile/.test(ua)
+ }
+ })(),
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+
+ SelectorsAPI: !!document.querySelector,
+
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div'),
+ form = document.createElement('form'),
+ isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script\\s*>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+
+ var IS_DONTENUM_BUGGY = (function(){
+ for (var p in { toString: 1 }) {
+ if (p === 'toString') return false;
+ }
+ return true;
+ })();
+
+ function subclass() {};
+ function create() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+ return klass;
+ }
+
+ function addMethods(source) {
+ var ancestor = this.superclass && this.superclass.prototype,
+ properties = Object.keys(source);
+
+ if (IS_DONTENUM_BUGGY) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames()[0] == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = (function(method) {
+ return function() { return method.valueOf.call(method); };
+ })(method);
+
+ value.toString = (function(method) {
+ return function() { return method.toString.call(method); };
+ })(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
+
+ var _toString = Object.prototype.toString,
+ _hasOwnProperty = Object.prototype.hasOwnProperty,
+ NULL_TYPE = 'Null',
+ UNDEFINED_TYPE = 'Undefined',
+ BOOLEAN_TYPE = 'Boolean',
+ NUMBER_TYPE = 'Number',
+ STRING_TYPE = 'String',
+ OBJECT_TYPE = 'Object',
+ FUNCTION_CLASS = '[object Function]',
+ BOOLEAN_CLASS = '[object Boolean]',
+ NUMBER_CLASS = '[object Number]',
+ STRING_CLASS = '[object String]',
+ ARRAY_CLASS = '[object Array]',
+ DATE_CLASS = '[object Date]',
+ NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
+ typeof JSON.stringify === 'function' &&
+ JSON.stringify(0) === '0' &&
+ typeof JSON.stringify(Prototype.K) === 'undefined';
+
+
+
+ var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf',
+ 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];
+
+ var IS_DONTENUM_BUGGY = (function(){
+ for (var p in { toString: 1 }) {
+ if (p === 'toString') return false;
+ }
+ return true;
+ })();
+
+ function Type(o) {
+ switch(o) {
+ case null: return NULL_TYPE;
+ case (void 0): return UNDEFINED_TYPE;
+ }
+ var type = typeof o;
+ switch(type) {
+ case 'boolean': return BOOLEAN_TYPE;
+ case 'number': return NUMBER_TYPE;
+ case 'string': return STRING_TYPE;
+ }
+ return OBJECT_TYPE;
+ }
+
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
+ try {
+ if (isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ }
+
+ function toJSON(value) {
+ return Str('', { '': value }, []);
+ }
+
+ function Str(key, holder, stack) {
+ var value = holder[key];
+ if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+ var _class = _toString.call(value);
+
+ switch (_class) {
+ case NUMBER_CLASS:
+ case BOOLEAN_CLASS:
+ case STRING_CLASS:
+ value = value.valueOf();
+ }
+
+ switch (value) {
+ case null: return 'null';
+ case true: return 'true';
+ case false: return 'false';
+ }
+
+ var type = typeof value;
+ switch (type) {
+ case 'string':
+ return value.inspect(true);
+ case 'number':
+ return isFinite(value) ? String(value) : 'null';
+ case 'object':
+
+ for (var i = 0, length = stack.length; i < length; i++) {
+ if (stack[i] === value) {
+ throw new TypeError("Cyclic reference to '" + value + "' in object");
+ }
+ }
+ stack.push(value);
+
+ var partial = [];
+ if (_class === ARRAY_CLASS) {
+ for (var i = 0, length = value.length; i < length; i++) {
+ var str = Str(i, value, stack);
+ partial.push(typeof str === 'undefined' ? 'null' : str);
+ }
+ partial = '[' + partial.join(',') + ']';
+ } else {
+ var keys = Object.keys(value);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ var key = keys[i], str = Str(key, value, stack);
+ if (typeof str !== "undefined") {
+ partial.push(key.inspect(true)+ ':' + str);
+ }
+ }
+ partial = '{' + partial.join(',') + '}';
+ }
+ stack.pop();
+ return partial;
+ }
+ }
+
+ function stringify(object) {
+ return JSON.stringify(object);
+ }
+
+ function toQueryString(object) {
+ return $H(object).toQueryString();
+ }
+
+ function toHTML(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ }
+
+ function keys(object) {
+ if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
+ var results = [];
+ for (var property in object) {
+ if (_hasOwnProperty.call(object, property))
+ results.push(property);
+ }
+
+ if (IS_DONTENUM_BUGGY) {
+ for (var i = 0; property = DONT_ENUMS[i]; i++) {
+ if (_hasOwnProperty.call(object, property))
+ results.push(property);
+ }
+ }
+
+ return results;
+ }
+
+ function values(object) {
+ var results = [];
+ for (var property in object)
+ results.push(object[property]);
+ return results;
+ }
+
+ function clone(object) {
+ return extend({ }, object);
+ }
+
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) === ARRAY_CLASS;
+ }
+
+ var hasNativeIsArray = (typeof Array.isArray == 'function')
+ && Array.isArray([]) && !Array.isArray({});
+
+ if (hasNativeIsArray) {
+ isArray = Array.isArray;
+ }
+
+ function isHash(object) {
+ return object instanceof Hash;
+ }
+
+ function isFunction(object) {
+ return _toString.call(object) === FUNCTION_CLASS;
+ }
+
+ function isString(object) {
+ return _toString.call(object) === STRING_CLASS;
+ }
+
+ function isNumber(object) {
+ return _toString.call(object) === NUMBER_CLASS;
+ }
+
+ function isDate(object) {
+ return _toString.call(object) === DATE_CLASS;
+ }
+
+ function isUndefined(object) {
+ return typeof object === "undefined";
+ }
+
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: Object.keys || keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isDate: isDate,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ }
+
+
+ function bind(context) {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0]))
+ return this;
+
+ if (!Object.isFunction(this))
+ throw new TypeError("The object is not callable.");
+
+ var nop = function() {};
+ var __method = this, args = slice.call(arguments, 1);
+
+ var bound = function() {
+ var a = merge(args, arguments), c = context;
+ var c = this instanceof bound ? this : context;
+ return __method.apply(c, a);
+ };
+
+ nop.prototype = this.prototype;
+ bound.prototype = new nop();
+
+ return bound;
+ }
+
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
+ return function(event) {
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
+ }
+ }
+
+ function curry() {
+ if (!arguments.length) return this;
+ var __method = this, args = slice.call(arguments, 0);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
+ }
+ }
+
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
+
+ function wrap(wrapper) {
+ var __method = this;
+ return function() {
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
+ }
+ }
+
+ function methodize() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ var a = update([this], arguments);
+ return __method.apply(null, a);
+ };
+ }
+
+ var extensions = {
+ argumentNames: argumentNames,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ };
+
+ if (!Function.prototype.bind)
+ extensions.bind = bind;
+
+ return extensions;
+})());
+
+
+
+(function(proto) {
+
+
+ function toISOString() {
+ return this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z';
+ }
+
+
+ function toJSON() {
+ return this.toISOString();
+ }
+
+ if (!proto.toISOString) proto.toISOString = toISOString;
+ if (!proto.toJSON) proto.toJSON = toJSON;
+
+})(Date.prototype);
+
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, (function() {
+ var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
+ typeof JSON.parse === 'function' &&
+ JSON.parse('{"test": true}').test;
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+ }
+
+ function gsub(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ }
+
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ }
+
+ function scan(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ }
+
+ function truncate(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ }
+
+ function strip() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ }
+
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
+
+ function stripScripts() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ }
+
+ function extractScripts() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
+ matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ }
+
+ function evalScripts() {
+ return this.extractScripts().map(function(script) { return eval(script); });
+ }
+
+ function escapeHTML() {
+ return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
+ }
+
+ function unescapeHTML() {
+ return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');
+ }
+
+
+ function toQueryParams(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift()),
+ value = pair.length > 1 ? pair.join('=') : pair[0];
+
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ }
+
+ function toArray() {
+ return this.split('');
+ }
+
+ function succ() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ }
+
+ function times(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ }
+
+ function camelize() {
+ return this.replace(/-+(.)?/g, function(match, chr) {
+ return chr ? chr.toUpperCase() : '';
+ });
+ }
+
+ function capitalize() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ }
+
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
+
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
+
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
+
+ function isJSON() {
+ var str = this;
+ if (str.blank()) return false;
+ str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
+ str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
+ str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
+ return (/^[\],:{...
[truncated message content] |