From cf74e98908b688d1116941df19c5669a6b05e6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20O=C5=BEana?= Date: Fri, 29 Nov 2013 13:00:02 +0100 Subject: [PATCH 1/3] Fix issue #45 https://github.com/iwind/rockmongo/pull/45 --- .gitignore | 2 + app/controllers/admin.php | 3 - app/controllers/collection.php | 4 +- app/controllers/db.php | 8 +- app/controllers/field.php | 38 ++++--- app/controllers/index.php | 3 - app/controllers/login.php | 2 - app/controllers/logout.php | 2 - app/controllers/plugins.php | 4 +- app/controllers/server.php | 4 +- app/funcs/functions.php | 4 +- app/funcs/render.php | 2 - app/funcs/rock.php | 4 +- app/langs/de_de/message.php | 2 - app/langs/en_us/message.php | 2 - app/langs/es_es/message.php | 2 - app/langs/fr_fr/message.php | 1 - app/langs/it_it/message.php | 1 - app/langs/ja_jp/message.php | 2 - app/langs/pt_br/message.php | 1 - app/langs/pt_pt/message.php | 1 - app/langs/ru_ru/message.php | 1 - app/langs/tr_tr/message.php | 1 - app/langs/zh_cn/message.php | 2 - app/langs/zh_tw/message.php | 1 - app/lib/core/REvent.php | 1 - app/lib/core/RFilter.php | 2 - app/lib/core/RPlugin.php | 36 ++++--- app/lib/ext/RExtController.php | 1 - app/lib/mime/types.php | 2 - app/lib/mongo/RMongo.php | 2 - app/lib/mongo/RMongoException.php | 2 - app/lib/mongo/RObject.php | 1 - app/lib/mongo/RQuery.php | 1 - app/lib/page/RPage.php | 2 - app/lib/page/lang/de_de.php | 2 - app/lib/page/lang/default.php | 2 - app/lib/page/lang/en.php | 2 - app/lib/page/lang/en_us.php | 1 - app/lib/page/lang/es_es.php | 1 - app/lib/page/lang/ru_ru.php | 1 - app/lib/page/lang/zh.php | 2 - app/lib/page/lang/zh_cn.php | 1 - app/models/MCollection.php | 1 - app/models/MDb.php | 4 +- app/models/MServer.php | 12 +-- app/models/MUser.php | 2 - config.php | 2 - index.php | 4 +- rock.php | 161 +++++++++++++++--------------- 50 files changed, 130 insertions(+), 215 deletions(-) diff --git a/.gitignore b/.gitignore index d009b25..5a83cbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .buildpath +.idea + .project .settings/org.eclipse.php.core.prefs diff --git a/app/controllers/admin.php b/app/controllers/admin.php index 1f2540c..85a5cf4 100644 --- a/app/controllers/admin.php +++ b/app/controllers/admin.php @@ -89,6 +89,3 @@ public function doChangeLang() { header("location:index.php"); } } - - -?> \ No newline at end of file diff --git a/app/controllers/collection.php b/app/controllers/collection.php index a53382c..6c4ab03 100644 --- a/app/controllers/collection.php +++ b/app/controllers/collection.php @@ -1071,6 +1071,4 @@ public function doCollectionExport() { public function doCollectionImport() { $this->redirect("db.dbImport", array( "db" => xn("db") )); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/controllers/db.php b/app/controllers/db.php index e4c305b..3915ca4 100644 --- a/app/controllers/db.php +++ b/app/controllers/db.php @@ -121,13 +121,13 @@ public function doDbTransfer() { //start to transfer $targetOptions = array(); if ($this->target_auth) { - $targetOptions["username"] = $this->target_username; + $targetOptions["username"] = $this->target_username; $targetOptions["password"] = $this->target_password; } $targetConnection = new RMongo("mongodb://" . $this->target_host . ":" . $this->target_port, $targetOptions); $targetDb = $targetConnection->selectDB($this->db); if ($this->target_auth) { - // "authenticate" can only be used between 1.0.1 - 1.2.11 + // "authenticate" can only be used between 1.0.1 - 1.2.11 if (RMongo::compareVersion("1.0.1") >= 0 && RMongo::compareVersion("1.2.11") < 0) { $targetDb->authenticate($this->target_username, $this->target_password); } @@ -497,6 +497,4 @@ public function doDropDatabase() { $this->ret = $this->_highlight($ret, "json"); $this->display("dropDatabaseResult"); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/controllers/field.php b/app/controllers/field.php index 63073a4..ede42b4 100644 --- a/app/controllers/field.php +++ b/app/controllers/field.php @@ -131,7 +131,7 @@ function doNew() { $dataType = xn("data_type"); $value = xn("value"); $boolValue = xn("bool_value"); - $integerValue = xn("integer_value"); + $integerValue = xn("integer_value"); $longValue = xn("long_value"); $doubleValue = xn("double_value"); $mixedValue = xn("mixed_value"); @@ -150,11 +150,11 @@ function doNew() { $this->_outputJson(array( "code" => 400, "message" => $e->getMessage())); } - $fieldType = ""; - if ($dataType == "integer") { - $fieldType = "integer"; - } else if ($dataType == "long") { - $fieldType = "long"; + $fieldType = ""; + if ($dataType == "integer") { + $fieldType = "integer"; + } else if ($dataType == "long") { + $fieldType = "long"; } if (!$keep) { @@ -226,7 +226,7 @@ function doLoad() { $type = "boolean"; break; case "integer": - $type = "integer"; + $type = "integer"; break; case "long": $type = "long"; @@ -242,11 +242,11 @@ function doLoad() { $type = "mixed"; break; case "object": - // int64 is returned as object (Kyryl Bilokurov ) - if (get_class($data) == "MongoInt64") { - $type = "long"; - } else { - $type = "mixed"; + // int64 is returned as object (Kyryl Bilokurov ) + if (get_class($data) == "MongoInt64") { + $type = "long"; + } else { + $type = "mixed"; } break; case "resource": @@ -284,7 +284,7 @@ function doUpdate() { $dataType = xn("data_type"); $value = xn("value"); $boolValue = xn("bool_value"); - $integerValue = xn("integer_value"); + $integerValue = xn("integer_value"); $longValue = xn("long_value"); $doubleValue = xn("double_value"); $mixedValue = xn("mixed_value"); @@ -304,10 +304,10 @@ function doUpdate() { } $fieldType = ""; - if ($dataType=="integer") { - $fieldType = "integer"; - } else if ($dataType == "long") { - $fieldType = "long"; + if ($dataType=="integer") { + $fieldType = "integer"; + } else if ($dataType == "long") { + $fieldType = "long"; } $ret = array(); if ($id) { @@ -429,6 +429,4 @@ function doCreateIndex() { $this->_outputJson(array( "code" => 300, "message" => $ret["err"])); } } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/controllers/index.php b/app/controllers/index.php index c3041e2..5dbdbf2 100644 --- a/app/controllers/index.php +++ b/app/controllers/index.php @@ -8,6 +8,3 @@ public function doIndex() { $this->redirect("admin.index"); } } - - -?> \ No newline at end of file diff --git a/app/controllers/login.php b/app/controllers/login.php index b0d047e..4f9d163 100644 --- a/app/controllers/login.php +++ b/app/controllers/login.php @@ -57,5 +57,3 @@ public function doIndex() { } } } - -?> \ No newline at end of file diff --git a/app/controllers/logout.php b/app/controllers/logout.php index 71a9c26..dc716ee 100644 --- a/app/controllers/logout.php +++ b/app/controllers/logout.php @@ -13,5 +13,3 @@ function doIndex() { $this->redirect("login.index"); } } - -?> \ No newline at end of file diff --git a/app/controllers/plugins.php b/app/controllers/plugins.php index c7a88f3..5cc2b1f 100644 --- a/app/controllers/plugins.php +++ b/app/controllers/plugins.php @@ -11,6 +11,4 @@ public function doIndex() { $this->display(); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/controllers/server.php b/app/controllers/server.php index 16c0fa8..5b14fa6 100644 --- a/app/controllers/server.php +++ b/app/controllers/server.php @@ -303,6 +303,4 @@ public function doReplication() { $this->display(); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/funcs/functions.php b/app/funcs/functions.php index 8bcf238..af588e2 100644 --- a/app/funcs/functions.php +++ b/app/funcs/functions.php @@ -235,6 +235,4 @@ function json_format($json) } return $new_json; -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/funcs/render.php b/app/funcs/render.php index f40eb92..7079578 100644 --- a/app/funcs/render.php +++ b/app/funcs/render.php @@ -492,5 +492,3 @@ function render_server_response($response) { function render_url($action, array $params = array()) { echo url($action, $params); } - -?> \ No newline at end of file diff --git a/app/funcs/rock.php b/app/funcs/rock.php index e018d91..9f4a090 100644 --- a/app/funcs/rock.php +++ b/app/funcs/rock.php @@ -256,6 +256,4 @@ function rock_real_value($mongodb, $dataType, $format, $value) { break; } return $realValue; -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/langs/de_de/message.php b/app/langs/de_de/message.php index 8e99f58..2a60192 100644 --- a/app/langs/de_de/message.php +++ b/app/langs/de_de/message.php @@ -192,5 +192,3 @@ $message["loginandrock"] = "Login und abrocken"; $message["changeconfig"] = "Vielleicht möchten Sie ihren Benutzernamen und Passwort in config.php ändern."; $message["rockmongocredits"] = "Powered by RockMongo v" . (ROCK_MONGO_VERSION) . ", auf neue Version prüfen."; - -?> \ No newline at end of file diff --git a/app/langs/en_us/message.php b/app/langs/en_us/message.php index d0c45c0..afe1aa3 100644 --- a/app/langs/en_us/message.php +++ b/app/langs/en_us/message.php @@ -215,5 +215,3 @@ $message["loginandrock"] = "Login and Rock"; $message["changeconfig"] = "You may change your username and password in config.php."; $message["rockmongocredits"] = "Powered by RockMongo v" . (ROCK_MONGO_VERSION) . ", check out new version here.   [Donate 10 dollars]"; - -?> \ No newline at end of file diff --git a/app/langs/es_es/message.php b/app/langs/es_es/message.php index 3ade106..6398e2e 100644 --- a/app/langs/es_es/message.php +++ b/app/langs/es_es/message.php @@ -192,5 +192,3 @@ $message["loginandrock"] = "Iniciar sesión and Rock"; $message["changeconfig"] = "Debe cambiar su nombre de usuario y contraseña en el config.php."; $message["rockmongocredits"] = "Desarrollado por RockMongo v" . (ROCK_MONGO_VERSION) . ", echa un vistazo a la nueva versión aquí."; - -?> \ No newline at end of file diff --git a/app/langs/fr_fr/message.php b/app/langs/fr_fr/message.php index 62f394c..28b87ab 100644 --- a/app/langs/fr_fr/message.php +++ b/app/langs/fr_fr/message.php @@ -208,4 +208,3 @@ $message["changeconfig"] = "Vous devriez changer votre nom d'utilisateur et mot de passe dans le fichier config.php"; $message["rockmongocredits"] = "Powered by RockMongo v" . (ROCK_MONGO_VERSION) . ", check out new version here."; -?> diff --git a/app/langs/it_it/message.php b/app/langs/it_it/message.php index 4e251f0..eee4ddc 100644 --- a/app/langs/it_it/message.php +++ b/app/langs/it_it/message.php @@ -207,4 +207,3 @@ $message["changeconfig"] = "Puoi cambiare la tua username e la password nel file config.php"; $message["rockmongocredits"] = "Powered by RockMongo v" . (ROCK_MONGO_VERSION) . ", verifica nuove versione disponibili."; -?> diff --git a/app/langs/ja_jp/message.php b/app/langs/ja_jp/message.php index 3ab6c93..190cfeb 100644 --- a/app/langs/ja_jp/message.php +++ b/app/langs/ja_jp/message.php @@ -67,5 +67,3 @@

See http://rockmongo.com for more details.

If you have any questions, please send email to me: iwind.liu@gmail.com .

'; - -?> \ No newline at end of file diff --git a/app/langs/pt_br/message.php b/app/langs/pt_br/message.php index 5c21220..304eb5f 100644 --- a/app/langs/pt_br/message.php +++ b/app/langs/pt_br/message.php @@ -68,4 +68,3 @@

Se vocêem alguma dúvida, me envie um email: iwind.liu@gmail.com .

'; -?> \ No newline at end of file diff --git a/app/langs/pt_pt/message.php b/app/langs/pt_pt/message.php index 30a6716..c0b6e83 100644 --- a/app/langs/pt_pt/message.php +++ b/app/langs/pt_pt/message.php @@ -68,4 +68,3 @@

Se têm alguma dúvida, envie um email para: iwind.liu@gmail.com .

'; -?> \ No newline at end of file diff --git a/app/langs/ru_ru/message.php b/app/langs/ru_ru/message.php index e8a30cd..4723102 100644 --- a/app/langs/ru_ru/message.php +++ b/app/langs/ru_ru/message.php @@ -207,4 +207,3 @@ $message["changeconfig"] = "Можно изменить имя пользователя и пароль в config.php."; $message["rockmongocredits"] = "Работает на RockMongo v" . (ROCK_MONGO_VERSION) . ", посмотреть новую версию."; -?> diff --git a/app/langs/tr_tr/message.php b/app/langs/tr_tr/message.php index b08a0e6..2b28ea1 100644 --- a/app/langs/tr_tr/message.php +++ b/app/langs/tr_tr/message.php @@ -207,4 +207,3 @@ $message["changeconfig"] = "Kullanıcı adı ve parolanızı config.php dosyasından değiştirebilirsiniz."; $message["rockmongocredits"] = "RockMongo v" . (ROCK_MONGO_VERSION) . " ile güçlendirilmiştir, yeni sürümü kontrol edin.   [10 Dolar Bağışla]"; -?> diff --git a/app/langs/zh_cn/message.php b/app/langs/zh_cn/message.php index fcb662c..a797758 100644 --- a/app/langs/zh_cn/message.php +++ b/app/langs/zh_cn/message.php @@ -77,5 +77,3 @@

请访问 http://rockmongo.com 获取更多信息.

如果有任何问题和反馈,请发送邮件到:iwind.liu@gmail.com .

'; - -?> \ No newline at end of file diff --git a/app/langs/zh_tw/message.php b/app/langs/zh_tw/message.php index 7139576..8ef9a92 100644 --- a/app/langs/zh_tw/message.php +++ b/app/langs/zh_tw/message.php @@ -78,4 +78,3 @@

如果有任何問題和反饋,請發送郵件到:iwind.liu@gmail.com .

'; -?> \ No newline at end of file diff --git a/app/lib/core/REvent.php b/app/lib/core/REvent.php index 51d55a2..3102d81 100644 --- a/app/lib/core/REvent.php +++ b/app/lib/core/REvent.php @@ -83,4 +83,3 @@ public static function remove($event, $callback) { } } -?> \ No newline at end of file diff --git a/app/lib/core/RFilter.php b/app/lib/core/RFilter.php index 5cdcf11..3bd77ac 100644 --- a/app/lib/core/RFilter.php +++ b/app/lib/core/RFilter.php @@ -88,5 +88,3 @@ public static function remove($dataType, $filter) { } } } - -?> \ No newline at end of file diff --git a/app/lib/core/RPlugin.php b/app/lib/core/RPlugin.php index a9d53ef..371e549 100644 --- a/app/lib/core/RPlugin.php +++ b/app/lib/core/RPlugin.php @@ -108,14 +108,14 @@ public static function load() { */ public static function plugins() { $configPlugins = array(); - require(__ROOT__ . DS . "configs" . DS . "rplugin.php"); - if (empty($plugins) || !is_array($plugins)) { - return $configPlugins; - } - foreach ($plugins as $name => $plugin) { - $dir = __ROOT__ . DS . "plugins" . DS . $name; - if (!is_dir($dir)) { - $dir = dirname(dirname(__ROOT__)) . DS . "plugins" . DS . $name; + require(__ROOT__ . DS . "configs" . DS . "rplugin.php"); + if (empty($plugins) || !is_array($plugins)) { + return $configPlugins; + } + foreach ($plugins as $name => $plugin) { + $dir = __ROOT__ . DS . "plugins" . DS . $name; + if (!is_dir($dir)) { + $dir = dirname(dirname(__ROOT__)) . DS . "plugins" . DS . $name; } $pluginConfig = array( "name" => null, @@ -125,7 +125,7 @@ public static function plugins() { "description" => null, "version" => null, "url" => null, - "enabled" => isset($plugin["enabled"]) ? $plugin["enabled"] : false + "enabled" => isset($plugin["enabled"]) ? $plugin["enabled"] : false ); $descFile = $dir . "/desc.php"; @@ -134,20 +134,20 @@ public static function plugins() { if (isset($config["name"])) { $pluginConfig["name"] = $config["name"]; } - if (isset($config["code"])) { - $pluginConfig["code"] = $config["code"]; + if (isset($config["code"])) { + $pluginConfig["code"] = $config["code"]; } - if (isset($config["author"])) { - $pluginConfig["author"] = $config["author"]; + if (isset($config["author"])) { + $pluginConfig["author"] = $config["author"]; } - if (isset($config["description"])) { - $pluginConfig["description"] = $config["description"]; + if (isset($config["description"])) { + $pluginConfig["description"] = $config["description"]; } if (isset($config["version"])) { $pluginConfig["version"] = $config["version"]; } - if (isset($config["url"])) { - $pluginConfig["url"] = $config["url"]; + if (isset($config["url"])) { + $pluginConfig["url"] = $config["url"]; } } @@ -157,5 +157,3 @@ public static function plugins() { return $configPlugins; } } - -?> \ No newline at end of file diff --git a/app/lib/ext/RExtController.php b/app/lib/ext/RExtController.php index 24f527c..ec584be 100644 --- a/app/lib/ext/RExtController.php +++ b/app/lib/ext/RExtController.php @@ -67,4 +67,3 @@ function isAjax() { } } -?> \ No newline at end of file diff --git a/app/lib/mime/types.php b/app/lib/mime/types.php index 21e4f4e..089d479 100644 --- a/app/lib/mime/types.php +++ b/app/lib/mime/types.php @@ -186,5 +186,3 @@ "xwd" => "image/x-xwindowdump", "z" => "application/x-compress", "zip" => "application/zip"); - -?> \ No newline at end of file diff --git a/app/lib/mongo/RMongo.php b/app/lib/mongo/RMongo.php index 7331152..9dbb894 100644 --- a/app/lib/mongo/RMongo.php +++ b/app/lib/mongo/RMongo.php @@ -290,5 +290,3 @@ static function lastInsertId() { return self::$_lastId; } } - -?> \ No newline at end of file diff --git a/app/lib/mongo/RMongoException.php b/app/lib/mongo/RMongoException.php index 69982a1..c497535 100644 --- a/app/lib/mongo/RMongoException.php +++ b/app/lib/mongo/RMongoException.php @@ -7,5 +7,3 @@ class RMongoException extends MongoException { } - -?> \ No newline at end of file diff --git a/app/lib/mongo/RObject.php b/app/lib/mongo/RObject.php index 03354a9..91399e2 100644 --- a/app/lib/mongo/RObject.php +++ b/app/lib/mongo/RObject.php @@ -327,4 +327,3 @@ function offsetUnset($index) { } } -?> \ No newline at end of file diff --git a/app/lib/mongo/RQuery.php b/app/lib/mongo/RQuery.php index cac2510..0dfbf7c 100644 --- a/app/lib/mongo/RQuery.php +++ b/app/lib/mongo/RQuery.php @@ -598,4 +598,3 @@ function db() { } } -?> \ No newline at end of file diff --git a/app/lib/page/RPage.php b/app/lib/page/RPage.php index 04735ec..b6426c3 100644 --- a/app/lib/page/RPage.php +++ b/app/lib/page/RPage.php @@ -488,5 +488,3 @@ static function pageWithStyle($style, array $params = null) { } } - -?> \ No newline at end of file diff --git a/app/lib/page/lang/de_de.php b/app/lib/page/lang/de_de.php index d08c619..7a2d2df 100644 --- a/app/lib/page/lang/de_de.php +++ b/app/lib/page/lang/de_de.php @@ -13,5 +13,3 @@ $message["pager_input_pageno"] = "Springen zu:"; $message["pager_current_pageno"] = "Aktuell: %d "; $message["pager_total_page"] = "Total: %d "; - -?> \ No newline at end of file diff --git a/app/lib/page/lang/default.php b/app/lib/page/lang/default.php index ad2253c..27073cd 100644 --- a/app/lib/page/lang/default.php +++ b/app/lib/page/lang/default.php @@ -13,5 +13,3 @@ $message["pager_input_pageno"] = "输入页数"; $message["pager_current_pageno"] = "第 %d 页"; $message["pager_total_page"] = "共 %d 页"; - -?> \ No newline at end of file diff --git a/app/lib/page/lang/en.php b/app/lib/page/lang/en.php index 221331a..eec9f3f 100644 --- a/app/lib/page/lang/en.php +++ b/app/lib/page/lang/en.php @@ -13,5 +13,3 @@ $message["pager_input_pageno"] = "Turn To:"; $message["pager_current_pageno"] = "Current: %d "; $message["pager_total_page"] = "Total: %d "; - -?> \ No newline at end of file diff --git a/app/lib/page/lang/en_us.php b/app/lib/page/lang/en_us.php index 221331a..17a636a 100644 --- a/app/lib/page/lang/en_us.php +++ b/app/lib/page/lang/en_us.php @@ -14,4 +14,3 @@ $message["pager_current_pageno"] = "Current: %d "; $message["pager_total_page"] = "Total: %d "; -?> \ No newline at end of file diff --git a/app/lib/page/lang/es_es.php b/app/lib/page/lang/es_es.php index 061ed33..36e8cfa 100644 --- a/app/lib/page/lang/es_es.php +++ b/app/lib/page/lang/es_es.php @@ -14,4 +14,3 @@ $message["pager_current_pageno"] = "Actual: %d "; $message["pager_total_page"] = "Total: %d "; -?> \ No newline at end of file diff --git a/app/lib/page/lang/ru_ru.php b/app/lib/page/lang/ru_ru.php index 2ae7082..a1be5aa 100755 --- a/app/lib/page/lang/ru_ru.php +++ b/app/lib/page/lang/ru_ru.php @@ -14,4 +14,3 @@ $message["pager_current_pageno"] = "Текущая: %d "; $message["pager_total_page"] = "Всего: %d "; -?> diff --git a/app/lib/page/lang/zh.php b/app/lib/page/lang/zh.php index 2e69b21..4343d86 100644 --- a/app/lib/page/lang/zh.php +++ b/app/lib/page/lang/zh.php @@ -13,5 +13,3 @@ $message["pager_input_pageno"] = "输入页数"; $message["pager_current_pageno"] = "第 %d 页"; $message["pager_total_page"] = "共 %d 页"; - -?> \ No newline at end of file diff --git a/app/lib/page/lang/zh_cn.php b/app/lib/page/lang/zh_cn.php index 2e69b21..e4dabe4 100644 --- a/app/lib/page/lang/zh_cn.php +++ b/app/lib/page/lang/zh_cn.php @@ -14,4 +14,3 @@ $message["pager_current_pageno"] = "第 %d 页"; $message["pager_total_page"] = "共 %d 页"; -?> \ No newline at end of file diff --git a/app/models/MCollection.php b/app/models/MCollection.php index f31b637..a34bb26 100644 --- a/app/models/MCollection.php +++ b/app/models/MCollection.php @@ -76,4 +76,3 @@ static function info(MongoDB $db, $collection) { } } -?> \ No newline at end of file diff --git a/app/models/MDb.php b/app/models/MDb.php index 1f21b1c..42e419d 100644 --- a/app/models/MDb.php +++ b/app/models/MDb.php @@ -65,6 +65,4 @@ static function listCollections(MongoDB $db) { } return $collections; } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/app/models/MServer.php b/app/models/MServer.php index 4346784..4930806 100644 --- a/app/models/MServer.php +++ b/app/models/MServer.php @@ -253,11 +253,11 @@ public function docsNatureOrder() { return $this->_docsNatureOrder; } - /** + /** * Set documents highlight render * - * @param string $render can be "default" or "plain" - * @since 1.1.6 + * @param string $render can be "default" or "plain" + * @since 1.1.6 */ public function setDocsRender($render) { $renders = array( "default", "plain" ); @@ -338,7 +338,7 @@ public function auth($username, $password, $db = "admin") { //authenticate if (!empty($this->_mongoUser)) { - // "authenticate" can only be used between 1.0.1 - 1.2.11 + // "authenticate" can only be used between 1.0.1 - 1.2.11 if (RMongo::compareVersion("1.0.1") >= 0 && RMongo::compareVersion("1.2.11") < 0) { return $this->_mongo ->selectDB($db) @@ -349,7 +349,7 @@ public function auth($username, $password, $db = "admin") { else { //authenticate if (!empty($this->_mongoUser)) { - // "authenticate" can only be used between 1.0.1 - 1.2.11 + // "authenticate" can only be used between 1.0.1 - 1.2.11 if (RMongo::compareVersion("1.0.1") >= 0 && RMongo::compareVersion("1.2.11") < 0) { return $this->_mongo ->selectDB($db) @@ -467,5 +467,3 @@ public static function currentServer() { return self::$_currentServer; } } - -?> \ No newline at end of file diff --git a/app/models/MUser.php b/app/models/MUser.php index 5089af8..a683ca3 100644 --- a/app/models/MUser.php +++ b/app/models/MUser.php @@ -122,5 +122,3 @@ public static function userInSession() { return null; } } - -?> \ No newline at end of file diff --git a/config.php b/config.php index 8abdd42..cdff32e 100644 --- a/config.php +++ b/config.php @@ -50,5 +50,3 @@ $MONGO["servers"][$i]["control_users"]["admin"] = "password"; $i ++; **/ - -?> \ No newline at end of file diff --git a/index.php b/index.php index 3f71ff4..cfbb0df 100644 --- a/index.php +++ b/index.php @@ -35,6 +35,4 @@ rock_check_version(); rock_init_lang(); rock_init_plugins(); -Rock::start(); - -?> \ No newline at end of file +Rock::start(); \ No newline at end of file diff --git a/rock.php b/rock.php index 53df5f8..67028af 100644 --- a/rock.php +++ b/rock.php @@ -4,7 +4,7 @@ define("__ROOT__", dirname(__FILE__) . DS . "app"); define("__VERSION__", "0.0.1"); define("nil", "nil_" . uniqid(microtime(true))); -define("PHP_VERSION_5_3", version_compare(PHP_VERSION, "5.3.0")>=0); +define("PHP_VERSION_5_3", version_compare(PHP_VERSION, "5.3.0") >= 0); if (!defined("__ENV__")) { define("__ENV__", "dev"); } @@ -22,7 +22,7 @@ */ class Rock { private static $_controller; - + /** * Start application * @@ -51,8 +51,7 @@ public static function start() { $mainRoot = dirname(dirname(__ROOT__)) . DS . "plugins" . DS . substr($name, 1, strpos($name, ".") - 1); } $name = substr($name, strpos($name, ".") + 1); - } - else { + } else { $isInPlugin = false; $mainRoot = __ROOT__; } @@ -62,6 +61,7 @@ public static function start() { trigger_error("file '{$file}' of controller '{$controller}' is not found", E_USER_ERROR); } require($file); + $class = ucfirst(rock_name_to_java($controller)) . "Controller"; if (!class_exists($class, false)) { $file = realpath($file); @@ -71,7 +71,7 @@ public static function start() { if (!($obj instanceof RController)) { trigger_error("controller class '{$class}' must be a subclass of RController", E_USER_ERROR); } - + define("__ACTION__", $action); $obj->setRoot($mainRoot); $obj->setAction($action); @@ -80,11 +80,11 @@ public static function start() { $obj->setInPlugin($isInPlugin); $obj->exec(); } - + public static function setController($controller) { self::$_controller = $controller; - } - + } + /** * get current running controller object * @@ -92,7 +92,7 @@ public static function setController($controller) { */ public static function controller() { return self::$_controller; - } + } } /** @@ -104,16 +104,16 @@ class RController { private $_path; private $_name; private $_inPlugin = false; - + /** - * set current action name + * set current action name * * @param string $action action name */ public function setAction($action) { $this->_action = $action; } - + /** * Get action name * @@ -122,15 +122,15 @@ public function setAction($action) { public function action() { return $this->_action; } - + public function setRoot($root) { $this->_root = $root; } - + public function root() { return $this->_root; - } - + } + /** * Set controller file path * @@ -139,7 +139,7 @@ public function root() { public function setPath($path) { $this->_path = $path; } - + /** * Set controller name * @@ -148,7 +148,7 @@ public function setPath($path) { public function setName($name) { $this->_name = $name; } - + /** * Get controller name * @@ -157,7 +157,7 @@ public function setName($name) { public function name() { return $this->_name; } - + /** * Set if the controller is in a plugin * @@ -166,35 +166,35 @@ public function name() { public function setInPlugin($isInPlugin) { $this->_inPlugin = $isInPlugin; } - + /** * Call before actions * */ public function onBefore() { - + } - + /** * Call after actions * */ public function onAfter() { - + } - + /** * Execute action * */ public function exec() { Rock::setController($this); - + if (class_exists("RPlugin")) { RPlugin::callBefore(); } $this->onBefore(); - + $method = "do" . $this->_action; if (!method_exists($this, $method)) { trigger_error("can not find action '{$this->_action}' in class '" . get_class($this) . "'", E_USER_ERROR); @@ -203,13 +203,13 @@ public function exec() { if (is_object($ret) && ($ret instanceof RView)) { $ret->display(); } - + $this->onAfter(); if (class_exists("RPlugin")) { RPlugin::callAfter(); } } - + /** * Display View * @@ -221,10 +221,11 @@ public function display($action = null) { } $view = null; if ($this->_inPlugin) { - $view = dirname(dirname($this->_path)) . "/views/" . str_replace(".", "/", $this->_name) . "/{$action}.php"; - } - else { - $view = dirname(__ROOT__) . DS . rock_theme_path() . "/views/" . str_replace(".", "/", $this->_name) . "/{$action}.php"; + $view = dirname(dirname($this->_path)) . "/views/" . str_replace(".", "/", $this->_name) . "/{$action}.php"; + } else { + $view = dirname(__ROOT__) . DS . rock_theme_path() . "/views/" . str_replace( + ".", "/", $this->_name + ) . "/{$action}.php"; } if (is_file($view)) { extract(get_object_vars($this), EXTR_OVERWRITE); @@ -238,7 +239,7 @@ public function display($action = null) { * */ class RModel { - + } /** @@ -251,13 +252,13 @@ class RView { * */ public function display() { - + } } /** * print data to screen - * + * * @param mixed $data1 data to be printed */ function p($data1 = null) { @@ -265,8 +266,7 @@ function p($data1 = null) { foreach ($args as $arg) { if (is_null($arg)) { $arg = "NULL"; - } - else if (is_bool($arg)) { + } else if (is_bool($arg)) { $arg = $arg ? "TRUE" : "FALSE"; } echo "\n" . print_r($arg, true) . "\n\n"; @@ -316,7 +316,7 @@ function rock_filter_param($param, $filter = true) { /** * get parameter value - * + * * different from x($name), the value will not be filtered (trim or htmlspecialchars) * * @param string $name parameter name @@ -327,7 +327,7 @@ function xn($name = nil) { if ($name == nil) { return array_merge(rock_filter_param($GLOBALS["ROCK_HTTP_VARS"], false), $GLOBALS["ROCK_USER_VARS"]); } - + if (array_key_exists($name, $GLOBALS["ROCK_USER_VARS"])) { return $GLOBALS["ROCK_USER_VARS"][$name]; } @@ -350,7 +350,7 @@ function xi($name) { /** * import a class file - * + * * @param string $class full class name * @param boolean $isClass if file is class */ @@ -359,19 +359,18 @@ function import($class, $isClass = true) { if ($isClass && class_exists($className, false)) { return $className; } - + $file = null; if (strstr($class, "@")) { $trace = debug_backtrace(); $calledFile = $trace[0]["file"]; $count = substr_count($class, "@"); $dir = $calledFile; - for ($i = 0; $i < $count; $i ++) { + for ($i = 0; $i < $count; $i++) { $dir = dirname($dir); } $file = $dir . "/" . str_replace(".", "/", str_replace("@.", "", $class)) . ".php"; - } - else { + } else { $file = __ROOT__ . "/" . str_replace(".", "/", $class) . ".php"; } if (empty($GLOBALS["ROCK_LOADED"]) || !in_array($file, $GLOBALS["ROCK_LOADED"])) { @@ -383,9 +382,9 @@ function import($class, $isClass = true) { /** * get configuration value - * + * * support __PLATFORM__ - * + * * o("config.name") - find in app/configs/config.php directory * o("@.config") - find config.php in current directory * o("@.config.servers") - find config.php in current directory @@ -397,7 +396,7 @@ function o($config) { if (isset($GLOBALS["ROCK_CONFIGS"][$config])) { return $GLOBALS["ROCK_CONFIGS"][$config]; } - + $file = null; $option = null; $pieces = explode(".", $config); @@ -406,18 +405,17 @@ function o($config) { $calledFile = $trace[0]["file"]; $count = substr_count($config, "@"); $dir = $calledFile; - for ($i = 0; $i < $count; $i ++) { + for ($i = 0; $i < $count; $i++) { unset($pieces[$i]); $dir = dirname($dir); } $filename = array_shift($pieces); $file = $dir . "/" . $filename . "@" . __PLATFORM__ . ".php"; - } - else { + } else { $filename = array_shift($pieces); $file = __ROOT__ . "/configs/" . $filename . "@" . __PLATFORM__ . ".php"; } - + $options = $pieces; $ret = require($file); @@ -431,7 +429,7 @@ function o($config) { return null; } $ret = rock_array_get($ret, $options); - + $GLOBALS["ROCK_CONFIGS"][$config] = $ret; return $ret; } @@ -441,13 +439,16 @@ function o($config) { * * Example:
* load_xml_config --> loadXmlConfig - * + * * @param string $name name to be converted * @return string */ function rock_name_to_java($name) { - $name = preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name); - return $name; + return preg_replace_callback( + '/_([a-zA-Z])/', function ($matches) { + return strtoupper(reset($matches)); + }, $name + ); } /** @@ -457,7 +458,7 @@ function rock_name_to_java($name) { * @param array|string $keys key or keys, can be a.b.c * @return mixed * @see rock_array_set - */ + */ function rock_array_get(array $array, $keys) { if (is_array($keys) && empty($keys)) { return $array; @@ -471,7 +472,7 @@ function rock_array_get(array $array, $keys) { if (count($keys) == 1) { $firstKey = array_pop($keys); $firstKey = str_replace("\\.", ".", $firstKey); - return array_key_exists($firstKey, $array)?$array[$firstKey]:null; + return array_key_exists($firstKey, $array) ? $array[$firstKey] : null; } $lastKey = array_pop($keys); $lastKey = str_replace("\\.", ".", $lastKey); @@ -480,13 +481,12 @@ function rock_array_get(array $array, $keys) { $key = str_replace("\\.", ".", $key); if (is_array($lastArray) && array_key_exists($key, $lastArray)) { $lastArray = $lastArray[$key]; - } - else { + } else { return null; } } - - return (is_array($lastArray) && array_key_exists($lastKey, $lastArray))? $lastArray[$lastKey] : null; + + return (is_array($lastArray) && array_key_exists($lastKey, $lastArray)) ? $lastArray[$lastKey] : null; } @@ -517,13 +517,13 @@ function rock_array_set(array $array, $keys, $value) { } $lastKey = array_pop($keys); $lastKey = str_replace("\.", ".", $lastKey); - $lastConfig = &$array; + $lastConfig = & $array; foreach ($keys as $key) { $key = str_replace("\.", ".", $key); if (!isset($lastConfig[$key]) || !is_array($lastConfig[$key])) { $lastConfig[$key] = array(); } - $lastConfig = &$lastConfig[$key]; + $lastConfig = & $lastConfig[$key]; } $lastConfig[$lastKey] = $value; return $array; @@ -531,17 +531,17 @@ function rock_array_set(array $array, $keys, $value) { /** * pick values from an array, the make it as keys - * + * * * $array = array( * array("a" => 11, "b" => 12), * array("a" => 21, "b" => 22) * //... * ); - * + * * $array2 = rock_array_combine($array, "a", "b"); * - * + * * then $array2 will be: * * array( @@ -549,20 +549,20 @@ function rock_array_set(array $array, $keys, $value) { * 21 => 22 * ); * - * + * * if $valueName not be set, the element value be "value": - * + * * * $array2 = rock_array_combine($array, "a"); - * + * * array( * 11 => array("a" => 11, "b" => 12), * 21 => array("a" => 21, "b" => 22) * ); * - * + * * support dot (.) operator in keyName and valueName: - * - rock_array_combine($array, "a.b", "a.c"); + * - rock_array_combine($array, "a.b", "a.c"); * $array[n][a][b] will be "key",$array[n][a][c] value be"value", here, n is index * * @param array $array array values to combine from @@ -579,8 +579,7 @@ function rock_array_combine($array, $keyName, $valueName = null) { $value = is_null($valueName) ? $row : rock_array_get($row, $valueName); if ($keyValue) { $ret[$keyValue] = $value; - } - else { + } else { $ret[] = $value; } } @@ -600,8 +599,7 @@ function rock_lang($code) { require($file); if (isset($message) && is_array($message)) { $GLOBALS["ROCK_LANGS"] = $message; - } - else { + } else { $GLOBALS["ROCK_LANGS"] = array(); } } @@ -613,7 +611,7 @@ function rock_lang($code) { } $GLOBALS["ROCK_LANGS"] = array_merge($message, $GLOBALS["ROCK_LANGS"]); } - + $args = func_get_args(); unset($args[0]); if (empty($args)) { @@ -631,10 +629,10 @@ function rock_check_version() { if (!isset($MONGO["servers"][0]["host"])) { return; } - + //version 1.0.x foreach ($MONGO["servers"] as $index => $server) { - foreach($server as $param => $value) { + foreach ($server as $param => $value) { switch ($param) { case "host": $server["mongo_host"] = $value; @@ -682,8 +680,7 @@ function rock_init_lang() { $firstLang = ""; if (strstr($_SERVER["HTTP_ACCEPT_LANGUAGE"], ",")) { list($firstLang) = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); - } - else { + } else { $firstLang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; } if ($firstLang) { @@ -712,6 +709,4 @@ function rock_init_plugins() { import("lib.core.REvent"); import("lib.core.RFilter"); RPlugin::load(); -} - -?> \ No newline at end of file +} \ No newline at end of file From 7926920384adde608f7a6c0648db119f973aeb6e Mon Sep 17 00:00:00 2001 From: Ondrej Prochazka Date: Mon, 16 Dec 2013 12:43:30 +0100 Subject: [PATCH 2/3] Update config.php disable control_auth --- config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.php b/config.php index cdff32e..bf60816 100644 --- a/config.php +++ b/config.php @@ -27,7 +27,7 @@ //$MONGO["servers"][$i]["mongo_pass"] = "MONGO_PASSWORD";//mongo authentication password, works only if mongo_auth=false $MONGO["servers"][$i]["mongo_auth"] = false;//enable mongo authentication? -$MONGO["servers"][$i]["control_auth"] = true;//enable control users, works only if mongo_auth=false +$MONGO["servers"][$i]["control_auth"] = false;//enable control users, works only if mongo_auth=false $MONGO["servers"][$i]["control_users"]["admin"] = "admin";//one of control users ["USERNAME"]=PASSWORD, works only if mongo_auth=false $MONGO["servers"][$i]["ui_only_dbs"] = "";//databases to display From 5e04fd5ee8bdc1dbfd7623c50d98b9591e6afd13 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 Dec 2013 12:48:02 +0100 Subject: [PATCH 3/3] add devel theme --- config.php | 2 +- themes/devel/css/collection.css | 50 + themes/devel/css/global.css | 181 ++ .../devel/css/jquery-ui-1.8.4.smoothness.css | 1864 +++++++++++++++++ themes/devel/css/layout-default-1.3.0.css | 167 ++ themes/devel/favicon.ico | Bin 0 -> 84598 bytes themes/devel/images/accept.png | Bin 0 -> 643 bytes themes/devel/images/add.png | Bin 0 -> 331 bytes themes/devel/images/arrow_refresh.png | Bin 0 -> 733 bytes themes/devel/images/connect.png | Bin 0 -> 754 bytes themes/devel/images/cross.png | Bin 0 -> 764 bytes themes/devel/images/database.png | Bin 0 -> 566 bytes themes/devel/images/databases.png | Bin 0 -> 723 bytes themes/devel/images/error.png | Bin 0 -> 552 bytes themes/devel/images/exclamation.png | Bin 0 -> 686 bytes themes/devel/images/grid.png | Bin 0 -> 234 bytes themes/devel/images/key.png | Bin 0 -> 633 bytes themes/devel/images/menuitem_hover.png | Bin 0 -> 346 bytes themes/devel/images/page_copy.png | Bin 0 -> 393 bytes themes/devel/images/page_white_delete.png | Bin 0 -> 594 bytes themes/devel/images/page_white_edit.png | Bin 0 -> 642 bytes themes/devel/images/page_white_paintbrush.png | Bin 0 -> 598 bytes themes/devel/images/page_white_swoosh.png | Bin 0 -> 608 bytes themes/devel/images/report.png | Bin 0 -> 401 bytes themes/devel/images/server.png | Bin 0 -> 456 bytes themes/devel/images/submenu_bullet.png | Bin 0 -> 264 bytes themes/devel/images/table.png | Bin 0 -> 274 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../devel/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../devel/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../devel/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../devel/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../devel/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../devel/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes themes/devel/images/world.png | Bin 0 -> 863 bytes themes/devel/views/admin/about.php | 1 + themes/devel/views/admin/dbs.php | 114 + themes/devel/views/admin/index.php | 135 ++ themes/devel/views/admin/top.php | 43 + .../views/collection/collectionDuplicate.php | 29 + .../views/collection/collectionIndexes.php | 43 + .../views/collection/collectionProps.php | 27 + .../views/collection/collectionRename.php | 37 + .../views/collection/collectionStats.php | 36 + .../views/collection/collectionValidate.php | 8 + themes/devel/views/collection/createIndex.php | 76 + themes/devel/views/collection/createRow.php | 38 + .../devel/views/collection/explainQuery.php | 12 + themes/devel/views/collection/index.php | 537 +++++ themes/devel/views/collection/modifyRow.php | 46 + .../devel/views/collection/queryHistory.php | 18 + .../views/collection/removeCollection.php | 4 + themes/devel/views/db/addUser.php | 21 + themes/devel/views/db/auth.php | 30 + themes/devel/views/db/dbExport.php | 42 + themes/devel/views/db/dbImport.php | 35 + themes/devel/views/db/dbTransfer.php | 79 + themes/devel/views/db/dropDatabase.php | 12 + themes/devel/views/db/dropDatabaseResult.php | 17 + themes/devel/views/db/index.php | 50 + themes/devel/views/db/newCollection.php | 22 + themes/devel/views/db/profile.php | 19 + themes/devel/views/db/profileLevel.php | 45 + themes/devel/views/db/repairDatabase.php | 8 + themes/devel/views/exception.php | 3 + themes/devel/views/footer.php | 3 + themes/devel/views/header.php | 23 + themes/devel/views/login/index.php | 93 + themes/devel/views/server/command.php | 41 + themes/devel/views/server/createDatabase.php | 22 + themes/devel/views/server/databases.php | 30 + themes/devel/views/server/execute.php | 67 + themes/devel/views/server/index.php | 80 + themes/devel/views/server/killOp.php | 13 + themes/devel/views/server/processlist.php | 62 + themes/devel/views/server/replication.php | 80 + themes/devel/views/server/status.php | 15 + 84 files changed, 4379 insertions(+), 1 deletion(-) create mode 100644 themes/devel/css/collection.css create mode 100644 themes/devel/css/global.css create mode 100644 themes/devel/css/jquery-ui-1.8.4.smoothness.css create mode 100644 themes/devel/css/layout-default-1.3.0.css create mode 100644 themes/devel/favicon.ico create mode 100644 themes/devel/images/accept.png create mode 100644 themes/devel/images/add.png create mode 100644 themes/devel/images/arrow_refresh.png create mode 100644 themes/devel/images/connect.png create mode 100644 themes/devel/images/cross.png create mode 100644 themes/devel/images/database.png create mode 100644 themes/devel/images/databases.png create mode 100644 themes/devel/images/error.png create mode 100644 themes/devel/images/exclamation.png create mode 100644 themes/devel/images/grid.png create mode 100644 themes/devel/images/key.png create mode 100644 themes/devel/images/menuitem_hover.png create mode 100644 themes/devel/images/page_copy.png create mode 100644 themes/devel/images/page_white_delete.png create mode 100644 themes/devel/images/page_white_edit.png create mode 100644 themes/devel/images/page_white_paintbrush.png create mode 100644 themes/devel/images/page_white_swoosh.png create mode 100644 themes/devel/images/report.png create mode 100644 themes/devel/images/server.png create mode 100644 themes/devel/images/submenu_bullet.png create mode 100644 themes/devel/images/table.png create mode 100644 themes/devel/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 themes/devel/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 themes/devel/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 themes/devel/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 themes/devel/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 themes/devel/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 themes/devel/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 themes/devel/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 themes/devel/images/ui-icons_222222_256x240.png create mode 100644 themes/devel/images/ui-icons_2e83ff_256x240.png create mode 100644 themes/devel/images/ui-icons_454545_256x240.png create mode 100644 themes/devel/images/ui-icons_888888_256x240.png create mode 100644 themes/devel/images/ui-icons_cd0a0a_256x240.png create mode 100644 themes/devel/images/ui-icons_ffffff_256x240.png create mode 100644 themes/devel/images/world.png create mode 100644 themes/devel/views/admin/about.php create mode 100644 themes/devel/views/admin/dbs.php create mode 100644 themes/devel/views/admin/index.php create mode 100644 themes/devel/views/admin/top.php create mode 100644 themes/devel/views/collection/collectionDuplicate.php create mode 100644 themes/devel/views/collection/collectionIndexes.php create mode 100644 themes/devel/views/collection/collectionProps.php create mode 100644 themes/devel/views/collection/collectionRename.php create mode 100644 themes/devel/views/collection/collectionStats.php create mode 100644 themes/devel/views/collection/collectionValidate.php create mode 100644 themes/devel/views/collection/createIndex.php create mode 100644 themes/devel/views/collection/createRow.php create mode 100644 themes/devel/views/collection/explainQuery.php create mode 100644 themes/devel/views/collection/index.php create mode 100644 themes/devel/views/collection/modifyRow.php create mode 100644 themes/devel/views/collection/queryHistory.php create mode 100644 themes/devel/views/collection/removeCollection.php create mode 100644 themes/devel/views/db/addUser.php create mode 100644 themes/devel/views/db/auth.php create mode 100644 themes/devel/views/db/dbExport.php create mode 100644 themes/devel/views/db/dbImport.php create mode 100644 themes/devel/views/db/dbTransfer.php create mode 100644 themes/devel/views/db/dropDatabase.php create mode 100644 themes/devel/views/db/dropDatabaseResult.php create mode 100644 themes/devel/views/db/index.php create mode 100644 themes/devel/views/db/newCollection.php create mode 100644 themes/devel/views/db/profile.php create mode 100644 themes/devel/views/db/profileLevel.php create mode 100644 themes/devel/views/db/repairDatabase.php create mode 100644 themes/devel/views/exception.php create mode 100644 themes/devel/views/footer.php create mode 100644 themes/devel/views/header.php create mode 100644 themes/devel/views/login/index.php create mode 100644 themes/devel/views/server/command.php create mode 100644 themes/devel/views/server/createDatabase.php create mode 100644 themes/devel/views/server/databases.php create mode 100644 themes/devel/views/server/execute.php create mode 100644 themes/devel/views/server/index.php create mode 100644 themes/devel/views/server/killOp.php create mode 100644 themes/devel/views/server/processlist.php create mode 100644 themes/devel/views/server/replication.php create mode 100644 themes/devel/views/server/status.php diff --git a/config.php b/config.php index bf60816..695fb98 100644 --- a/config.php +++ b/config.php @@ -8,7 +8,7 @@ $MONGO = array(); $MONGO["features"]["log_query"] = "on";//log queries -$MONGO["features"]["theme"] = "default";//theme +$MONGO["features"]["theme"] = "devel";//theme $MONGO["features"]["plugins"] = "on";//plugins $i = 0; diff --git a/themes/devel/css/collection.css b/themes/devel/css/collection.css new file mode 100644 index 0000000..c2dd212 --- /dev/null +++ b/themes/devel/css/collection.css @@ -0,0 +1,50 @@ +/** fields and hints list **/ +.fieldsmenu { + float: right; + margin-right: 100px; + margin-top: 0px; + background-color: #eee; + border-left: 1px #ccc solid; + border-top: 1px #ccc solid; + border-right: 2px #ccc solid; + border-bottom: 2px #ccc solid; + padding-left: 3px; + position: absolute; + display: none; + width: 400px; +} + +.fieldsmenu ul { + list-style-type: none; + margin: 0; + padding: 0 +} + +.fieldsmenu ul li { + float: left; + width: 200px +} + +/** operation menu **/ +#field_menu a { + display: block; +} + +#field_menu a:hover { + display: block; + background-color: #ccc +} + +#field_menu a:active { + display: block; + color: blue +} + +/** colors **/ +a.disabled { + color: gray +} + +a.disabled:active { + color: gray +} \ No newline at end of file diff --git a/themes/devel/css/global.css b/themes/devel/css/global.css new file mode 100644 index 0000000..f029625 --- /dev/null +++ b/themes/devel/css/global.css @@ -0,0 +1,181 @@ +* { + font-size: 14px; + font-family: monospace; +} + +html, body { + height: 100% +} + +body { + margin: 0; + padding: 0; +} + +a { + text-decoration: none; + color: #004499; + line-height: 1.5 +} + +a:hover { + color: blue +} + +/** select options **/ +.select_hosts { + width: 150px; +} + +/** common **/ +.clear { + clear: both +} + +.page span a { + font-weight: bold; + color: red +} + +blockquote { + padding: 0px; + margin: 0; + border: 1px #ccc solid; + background-color: #eee +} + +.error { + padding: 0px; + margin: 10px 0; + border: 1px #ccc solid; + background-color: #eee; + color: red +} + +.message { + padding: 0px; + margin: 10px 0; + border: 1px #ccc solid; + background-color: #eee; + color: green +} + +.operation { + padding: 3px; + border-bottom: 1px #999 solid; + margin-bottom: 5px; +} + +.operation a { + font-size: 14px; +} + +.operation a.current { + font-weight: bold; + text-decoration: underline +} + +.gap { + height: 20px +} + +.big { + font-size: 14px +} + +h3 { + padding-bottom: 0; + margin-top: 0; + padding-bottom: 3px; + border-bottom: 1px #cc9 solid; + margin-bottom: 7px; + font-size: 14px +} + +h3 a { + font-size: 14px +} + +ul.list { + list-style: none; + width: 600px; + margin: 0; + padding: 0; +} + +ul.list li { + float: left; + width: 200px; +} + +img { + border: 0 +} + +/** left **/ +.dbs { + margin: 0; + padding: 0; + list-style: none; +} + +.dbs li { + padding-left: 20px; +} + +.dbs ul { + padding: 0; + margin: 0; + list-style: none; +} + +.dbs ul li { + padding-left: 20; + border-bottom: 0 +} + +/** collection **/ +.query { + background-color: #eeefff +} + +.field_orders p { + height: 14px; + margin-top: 0 +} + +/** top **/ +.top { + border-bottom: 1px #666 solid; + background-color: #ccc; +} + +.top select { + height: 18px; + background-color: #ccc; + border: 0 +} + +.top .left { + float: left +} + +.top .right { + float: right +} + +.menu, #field_menu, .doc_menu { + float: right; + margin-right: 100px; + margin-top: 0px; + background-color: #eee; + border-left: 1px #ccc solid; + border-top: 1px #ccc solid; + border-right: 2px #ccc solid; + border-bottom: 2px #ccc solid; + padding-left: 3px; + padding-right: 3px; + position: absolute; + display: none; + min-width: 100px; +} \ No newline at end of file diff --git a/themes/devel/css/jquery-ui-1.8.4.smoothness.css b/themes/devel/css/jquery-ui-1.8.4.smoothness.css new file mode 100644 index 0000000..5980f4a --- /dev/null +++ b/themes/devel/css/jquery-ui-1.8.4.smoothness.css @@ -0,0 +1,1864 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + position: absolute; + left: -99999999px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.ui-helper-clearfix { + display: inline-block; +} + +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { + height: 1%; +} + +.ui-helper-clearfix { + display: block; +} + +/* end clearfix */ +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana, Arial, sans-serif; + font-size: 1.1em; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { + font-family: Verdana, Arial, sans-serif; + font-size: 1em; +} + +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url(../images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; + color: #222222; +} + +.ui-widget-content a { + color: #222222; +} + +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url(../images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} + +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url(../images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} + +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { + color: #555555; + text-decoration: none; +} + +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url(../images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} + +.ui-state-hover a, .ui-state-hover a:hover { + color: #212121; + text-decoration: none; +} + +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url(../images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} + +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +.ui-widget :active { + outline: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url(../images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; + color: #363636; +} + +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { + color: #363636; +} + +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(../images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} + +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { + color: #cd0a0a; +} + +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} + +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { + font-weight: bold; +} + +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity=70); + font-weight: normal; +} + +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity=35); + background-image: none; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; + background-image: url(../images/ui-icons_222222_256x240.png); +} + +.ui-widget-content .ui-icon { + background-image: url(../images/ui-icons_222222_256x240.png); +} + +.ui-widget-header .ui-icon { + background-image: url(../images/ui-icons_222222_256x240.png); +} + +.ui-state-default .ui-icon { + background-image: url(../images/ui-icons_888888_256x240.png); +} + +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon { + background-image: url(../images/ui-icons_454545_256x240.png); +} + +.ui-state-active .ui-icon { + background-image: url(../images/ui-icons_454545_256x240.png); +} + +.ui-state-highlight .ui-icon { + background-image: url(../images/ui-icons_2e83ff_256x240.png); +} + +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { + background-image: url(../images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-off { + background-position: -96px -144px; +} + +.ui-icon-radio-on { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} + +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-tr { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bl { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.ui-corner-br { + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bottom { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-right { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.ui-corner-all { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .30; + filter: Alpha(Opacity=30); +} + +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .30; + filter: Alpha(Opacity=30); + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* + * jQuery UI Resizable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + z-index: 99999; + display: block; +} + +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/* + * jQuery UI Selectable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +/* + * jQuery UI Accordion @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { + width: 100%; +} + +.ui-accordion .ui-accordion-header { + cursor: pointer; + position: relative; + margin-top: 1px; + zoom: 1; +} + +.ui-accordion .ui-accordion-li-fix { + display: inline; +} + +.ui-accordion .ui-accordion-header-active { + border-bottom: 0 !important; +} + +.ui-accordion .ui-accordion-header a { + display: block; + font-size: 1em; + padding: .5em .5em .5em .7em; +} + +.ui-accordion-icons .ui-accordion-header a { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-header .ui-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + margin-top: -2px; + position: relative; + top: 1px; + margin-bottom: 2px; + overflow: auto; + display: none; + zoom: 1; +} + +.ui-accordion .ui-accordion-content-active { + display: block; +} + +/* + * jQuery UI Autocomplete @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { + position: absolute; + cursor: default; +} + +/* workarounds */ +* html .ui-autocomplete { + width: 1px; +} + +/* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + float: left; +} + +.ui-menu .ui-menu { + margin-top: -3px; +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: .2em .4em; + line-height: 1.5; + zoom: 1; +} + +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +/* + * jQuery UI Button @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + margin-right: .1em; + text-decoration: none !important; + cursor: pointer; + text-align: center; + zoom: 1; + overflow: visible; +} + +/* the overflow property removes extra width in IE */ +.ui-button-icon-only { + width: 2.2em; +} + +/* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { + width: 2.4em; +} + +/* button elements seem to need a little more width */ +.ui-button-icons-only { + width: 3.4em; +} + +button.ui-button-icons-only { + width: 3.7em; +} + +/*button text element */ +.ui-button .ui-button-text { + display: block; + line-height: 1.4; +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} + +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} + +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} + +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} + +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/*button sets*/ +.ui-buttonset { + margin-right: 7px; +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* reset extra padding in Firefox */ +/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + padding: .2em; + width: 300px; + overflow: hidden; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .5em 1em .3em; + position: relative; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 16px .2em 0; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 19px; + margin: -10px 0 0 0; + padding: 1px; + height: 18px; +} + +.ui-dialog .ui-dialog-titlebar-close span { + display: block; + margin: 1px; +} + +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { + padding: 0; +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; + zoom: 1; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin: .5em 0 0 0; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.ui-dialog .ui-resizable-se { + width: 14px; + height: 14px; + right: 3px; + bottom: 3px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +/* + * jQuery UI Slider @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +/* + * jQuery UI Tabs @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { + position: relative; + padding: .2em; + zoom: 1; +} + +/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 1px; + margin: 0 .2em 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + margin-bottom: 0; + padding-bottom: 1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { + cursor: text; +} + +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { + cursor: pointer; +} + +/* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tabs .ui-tabs-hide { + display: none !important; +} + +/* + * jQuery UI Datepicker @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} + +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span, .ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display /**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} + +/* + * jQuery UI Progressbar @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { + height: 2em; + text-align: left; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} \ No newline at end of file diff --git a/themes/devel/css/layout-default-1.3.0.css b/themes/devel/css/layout-default-1.3.0.css new file mode 100644 index 0000000..0b9dcb8 --- /dev/null +++ b/themes/devel/css/layout-default-1.3.0.css @@ -0,0 +1,167 @@ +/* + * Default Layout Theme + * + * Created for jquery.layout + * + * Copyright (c) 2010 + * Fabrizio Balliano (http://www.fabrizioballiano.net) + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * Last Updated: 2010-02-10 + * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars + */ + +/* + * DEFAULT FONT + * Just to make demo-pages look better - not actually relevant to Layout! + */ +body { + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 100%; + *font-size: 80%; +} + +/* + * PANES & CONTENT-DIVs + */ +.ui-layout-pane { + /* all 'panes' */ + background: #FFF; + border: 1px solid #BBB; + /* DO NOT add scrolling (or padding) to 'panes' that have a content-div, + otherwise you may get double-scrollbars - on the pane AND on the content-div + */ + padding: 0px; + overflow: auto; +} + +/* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */ +.ui-layout-content { + padding: 10px; + position: relative; /* contain floated or positioned elements */ + overflow: auto; /* add scrolling to content-div */ +} + +/* + * RESIZER-BARS + */ +.ui-layout-resizer { + /* all 'resizer-bars' */ + background: #DDD; + border: 1px solid #BBB; + border-width: 0; +} + +.ui-layout-resizer-drag { + /* REAL resizer while resize in progress */ +} + +.ui-layout-resizer-hover { + /* affects both open and closed states */ +} + +/* NOTE: It looks best when 'hover' and 'dragging' are set to the same color, + otherwise color shifts while dragging when bar can't keep up with mouse */ +.ui-layout-resizer-open-hover, /* hover-color to 'resize' */ +.ui-layout-resizer-dragging { + /* resizer beging 'dragging' */ + background: #C4E1A4; +} + +.ui-layout-resizer-dragging { + /* CLONED resizer being dragged */ + border-left: 1px solid #BBB; + border-right: 1px solid #BBB; +} + +/* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */ +.ui-layout-resizer-dragging-limit { + /* CLONED resizer at min or max size-limit */ + background: #E1A4A4; /* red */ +} + +.ui-layout-resizer-closed-hover { + /* hover-color to 'slide open' */ + background: #EBD5AA; +} + +.ui-layout-resizer-sliding { + /* resizer when pane is 'slid open' */ + opacity: .10; /* show only a slight shadow */ + filter: alpha(opacity=10); +} + +.ui-layout-resizer-sliding-hover { + /* sliding resizer - hover */ + opacity: 1.00; /* on-hover, show the resizer-bar normally */ + filter: alpha(opacity=100); +} + +/* sliding resizer - add 'outside-border' to resizer on-hover + * this sample illustrates how to target specific panes and states */ +.ui-layout-resizer-north-sliding-hover { + border-bottom-width: 1px; +} + +.ui-layout-resizer-south-sliding-hover { + border-top-width: 1px; +} + +.ui-layout-resizer-west-sliding-hover { + border-right-width: 1px; +} + +.ui-layout-resizer-east-sliding-hover { + border-left-width: 1px; +} + +/* + * TOGGLER-BUTTONS + */ +.ui-layout-toggler { + border: 1px solid #BBB; /* match pane-border */ + background-color: #BBB; +} + +.ui-layout-resizer-hover .ui-layout-toggler { + opacity: .60; + filter: alpha(opacity=60); +} + +.ui-layout-toggler-hover, /* need when NOT resizable */ +.ui-layout-resizer-hover .ui-layout-toggler-hover { + /* need specificity when IS resizable */ + background-color: #FC6; + opacity: 1.00; + filter: alpha(opacity=100); +} + +.ui-layout-toggler-north, +.ui-layout-toggler-south { + border-width: 0 1px; /* left/right borders */ +} + +.ui-layout-toggler-west, +.ui-layout-toggler-east { + border-width: 1px 0; /* top/bottom borders */ +} + +/* hide the toggler-button when the pane is 'slid open' */ +.ui-layout-resizer-sliding ui-layout-toggler { + display: none; +} + +/* + * style the text we put INSIDE the togglers + */ +.ui-layout-toggler .content { + color: #666; + font-size: 12px; + font-weight: bold; + width: 100%; + padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */ +} + diff --git a/themes/devel/favicon.ico b/themes/devel/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f4bb9b1cd0f216f5c54933193de866621974243d GIT binary patch literal 84598 zcmeFa1$0&C*0!CU1d<(hhXi+*;!>-llZv(l!+;RIq8?y0uOH`t?8f z%&X_?H3keAU^8;$NSncf2b)HZ9&O@!wqwVRwPT+h$L)Ic>SfRT?K^htXy3efbNjEq z{yIa=nl&?UPZ_y42mI*h<>lqb+|A6xkvW-}pA++b3!cTD{)n{Woa?OT;|C``Z{~lF zuCA_*_|q|S=FEo~9WyX4p=iJlUSlXBahVlmpi^;}55P{rWlc9WHI# zwsm9f?tH%o_u*N#Y+3Ju1q=Fxg@yTZpMfqeEmU-+IP2& zeVm^Kgn>{#pBaSUhhVN5=a(z$cz(3UM* zhJE+lciHOJt((1a<;uB>6)Tn>Z59a%3M%R0;ZYjxmWRKOnL{<^Sp$3mYJyteQ&9Ua zpyzzTXBE{!6?{+;f0jW9B?1BhiVzF=ixer6n;6W=J!C`gSz5Jf722gsm(0vRn0pQ2 zo_*oci~DzFF6Ix-A6`vxo{`V!+}(j6pUuQ}4s@Rv?hA8H@pkRnm2TFoSy^JL68^6W z_q7TXDDZifELj@*`S~@0rxx(l4h?ta-g`2aKA;~M00!FStT@{)ca=GIxj&w3SD^Mn zW1Q>bIksV?W^jCvo&)-WzMvQA%5~b~&lbc&V>Hl!IH*Ie`m{`$GS$#uWn!=bdMrbZ zDuo7$q4$E^b8hZE3v&o!F5VxSKbp~aaTqslochZbgz?#Y=%^(AtcYK0bnV);4u1Zs zQKLp*fByOBjjL3t@*{b#4KdjTUH0?!^&P?dCprXVU!0-Tw|gDF7<$2>$=th+?KZtM z_dk_t?tezi{Z5OyFX(d${3hm}C&k?3gqXV>7soC~#If@cacHwA$)U;0$P9Hx-?T5& z@|bN

Q-Xj`zL(YrSP%z|z1%nw6J||8C&xq3i(Eqdn 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 R=gk_R{m0Ap)z9`D_j`&3 z*=%n%T$+J$`78`<6Woo$7~X%r&A`g^i@`}ZfZ^}&zuUnE6ijig19EH7>1UtVGO@#7~0^DCac6~esYEg_Dn41a$Aa(w#ozW&x@ z^FMf7CEdyDvCU^^;hf-O70vMc{bhzP-`_L*{_~6B`RnHlmv3DLs{d`vnA&RbKg>Oq z;qjXb4ALT64Bx;1Vc2zS4a1LL-zs^y_}cv);~1X2xybPS*JrSc-oAg&aPQ$G24L9P z&aF9hgjvH<@aMg!S6$e-m>FJwe8j*6j39FzcZN@2KDyYOcro04aS|A4Zy0_7ZGQ3k zHN%~|4;X#}ZC==L?g%^u+1Od ze`a|6@CDfBH9a?vz`_U~jea@uUEDmJrLxN6U_+3>$M;_to;`dG*1T!T!z0LYDCxi> zRkDkVm$Ot_NrZusi4iRJ`TbXh7Z2ZoHSd`H{0Mp!V>I__unAR4u_Y2I*2ogf(*chEkigBfS4JVJPb2Z dnw>QTFvN&9 z;P>y}3_pMW#1O-3K*1CjYyrmb^VfG&1AhHt0IEd~@#!qTe*VhL4{yaV`OK{iDE!QT zdJHuaS5{}TfJ{DoWf=n@fK3fZFUSQ9-+z8*AP0c-LJjyvz5zgIOh0w<0!AR}8mgi2 zFQ31K&5Y@c*pjkej>3O!BV`n^tLN@AY?|_bk+^gK3><9HNSlO2lcWsHIMZ*Oe1MUi dv8e?JFaU&-kNmLq2fY9Q002ovPDHLkV1lw^iHiUL literal 0 HcmV?d00001 diff --git a/themes/devel/images/arrow_refresh.png b/themes/devel/images/arrow_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..9af27557e3bd1ce3ee30c7bf9969e7e4f733f8de GIT binary patch literal 733 zcmV<30wVp1P)an72FZKGJ>tu_wvu`DYM#;htrFCoOatyh=Vqi%20DbkITta-z3gHjn-rnw$b zx=u$=)4|iZ2lgC7UQPj&L;##yD9UT~z8`!2iS&1kzt#5gwr9BJtjmqMc|zf164((ev^y%Wz;+ujvXjL&LHh z5&ToeSRtwUoKELCx(nlL`zmTNIMD}9HDDOVRHg$q`1wP+F6y#}YVG%wmit00K_7|Q z>uZnQDk{#$LL`Z3R26Rq(hjtwR*=z`!-O}-kF@NTBo0%z#(mX|aC=HHy*P|`JOTgo ze1dEq|IHxvcT#kL@Vw>Z)qGb0gK24KJ=2Ey&?F{iKSE8aNUZ9@zT@4K`Nd6huufHk z+}WkCFr2F?!PLSijXFn6Ng%YKh+c^1KHGK@iNu5rjg5}s)w P00000NkvXXu0mjfR^(Si literal 0 HcmV?d00001 diff --git a/themes/devel/images/connect.png b/themes/devel/images/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..632f85271b419d348c1bb5fe598e10871ea6fb71 GIT binary patch literal 754 zcmV_IxYAr80O}MX98Qs>;vfgZ-^kT!<{ajwGB5cBnIT zh^~d;a?cXjc=X5uMJ-2{U+3j!x#*!~7Z#ktVyHKfTJ7ei)-8m9aT zd~s~PydeFvu)%X2HaBCK_fMe0RDs$v7I>zA!squ(aGY2uMx&^(NE*OfWsWG2 z!SwNk=ZKGU-*L=jh9Fol{P8so7aO3_t4VIc^IpDWD$OZ*jz`LD4!09=HcD*P_Z4Q7 z2^VS_u;}(7z=XghSgiOMNb-AS=8poFO$%5K1|!f(lPHQJffzduqwzQ{Caz(4WB{6j zYQzG+dgZ-Hb7=*SGF9r%#=5%@H$*T&`mYk_;us1`@=$ZG4(zJXb0|0GzGUP76mVR- zUTf%VxZI2}_W&50#)>xto#6m-3bIMj$d^F`d=cBe{pz-@cSahli|btt_09M+^$N@i z1ID{5t!lECU*hl3OF`?FRqozyYZbLE+IDTWrfaW;Lckj(uoSoN}-S8=ypXXny6gR?kchxz8eeE;{K;XiYj*w76uU&BqD({qdeiWSyM9BVkwnm7xA zKh=>lPVK+q|8cCQYM>wwzqZcfbD#FYR$10Tmm7;8Uw~|>)2S{GUSGL`_-wdQ5LnpzNcUcbmOp}uaN7(CL(+j7&rg)W<^2{f3+ zAA$%^M}_*{3!Gk}$|@-8u6A%UQxReOorpwCh8!pOBSDTyx=(Xo-iiqRiVC#W(529q zv1Bk{ZMjHDQR1nlW7J57vDzVv0cE*{RY*W_k89^06=hy$Z6)MIvSZu~MN&~xzXdsE z8+@eJZ|GQ+9OFRC8Na>4&?$*lT9XPRfHB)VPEGdj-`L%-t%q8MN&L5qe7MxP#cVB z0?Bg})SnOumrxK86^IL356x3;@-8%-ZRKX8+U2onfLa=xIMU=3;lv085+5@-=7-Q} uIG`A1wqC4Yv;_~`(;Bas|<|He9oMi zGjqpsxm>7PtrE*U>n-bNdY3TkC&T{DsvGt%))&?v<#L%cyll7I*Jw0aOe7NI^Z6vo zZnu-i;}LtkUT1c@T?Y1Yxx5*TMt9Tc^nu-y0G!X~Vz1XDuh&ZsheMK_PA8dSu~=xo z-;)7A{eB<+7vXDWP%f9FX0u7UuB$+|=i^V9P&r_?_A_Xv?&qc%GFva6> z=>i?NTrSa2C?wSI&UA_CNW21=&1Mt`1f)8G+-|p2g`Q3)0M)OZ0df=oP_f@`w=3;gtyTdsKOS@d8hDRHB2*|8s8Xr?0YH-9@26xk z`40tf$80b}%wx4$sX0Kb_%SP8BW8|ta5x;kHX4m5RKW@%=1o90n+*+zLwUm;)M_=! zQ2^Z1GjHHK>m$2gj67Ul#ISYaq#-zhZ@h`0aNYzM05y*Sl>4C+z5oCK07*qoM6N<$ Ef{f(&KL7v# literal 0 HcmV?d00001 diff --git a/themes/devel/images/databases.png b/themes/devel/images/databases.png new file mode 100644 index 0000000000000000000000000000000000000000..bbee967c373624db68e461ccc46ba7edf944d04e GIT binary patch literal 723 zcmV;^0xbQBP)FKQB?~!g$H&KPC=_xN zp_y-~>~_1Y+uPf^BuOK)*$kV_hCm>ITrQ`{ zB=-l&jr>QhOmbzCYr46)QAVRtB@&4Yyk4*R@bG}Mvoo-T2+Psy^;lnD7X%9n3!pzU z0UC`4_?*Jb4R5ttD3{B)xVYdvO(t2`-QC6Ifm*F5@@Ubx;c=Nq)#-FViz1SF3bSA`-b9v5TR4fw z2t7JZio3uC+uPehHbYSqu~7Ushr=P1Oyzb@PEGA&a_P7S}o zG!s6}jEu~GKp4p&41mvo3NbA|1~KhGFq>2ZZB(et$g5@cY9-1{tFW22MeRe4v~wF$QERIaM<- z{{O*nd`23>@mYBc|Np&XP;x8-%MmglnP1j4N=(g;;pf|paKWFi*D(ky8Zq$8n1Dhw z4W9v-%1)IGf4<*f`2Xh#iNdNA(_lT4EX==BZIP28N-#eIhh~>reEIz qPU=w%q=BsVM~`wErtPJ#XEZxWCXIDY*aX2e*Vk&;oDz^Pv8GCfMoeNnHl(jSc;G3 z|Dluje%!wQcE+||_ae9f?)lqlmF0yhO-+?KFFg9j@cS>s&}+}1f@v*DX)w(KbdSCq z7sJI1_rKq~`=)p2M6X&#r>u=q9PF$&y*%`}FFyUjh#Vxdla#=8>b!d>;iNCa`G5DG zOJBcy{i)9M_xGPC3yU|{<7>o0}@`zox#boAsK7;-Pa zFf#%5DgjOT{rmO%AOHU|GBPsY06%|Wy6zWH45*g@YW2lNUDw#o7shhOW5TUIT(llKOR5)@$1d&Nw@dsm&22?qHS*H9&v?0L=AG U${qL#>;M1&07*qoM6N<$f@}9xvb5{s>tJT@sm;XktP?#i5e!Pgm|+u~n|#Ra5nW>Ynven&zk-isH7=-KV;2N+0L7TfQBJ zO3OP9jxqQNAFQtT;ZV$JD(18FZMkP%FpJ~ZjAW;CmBL%Doyb%=W7&AwWkQgga8$O_ foq3<*8yFdubBOL(GQaK%&|M6ku6{1-oD!M<#|l)b literal 0 HcmV?d00001 diff --git a/themes/devel/images/key.png b/themes/devel/images/key.png new file mode 100644 index 0000000000000000000000000000000000000000..529fce2ccd9f71a913cfebad1019d40ebddead6f GIT binary patch literal 633 zcmV-<0*3vGP)kz{C$UyLzEKO-v}R8+4M ziW0oLd2eb{B;JLv-j3Yj2kqzdgWiSLw~|E8IqrF?6elQ3qBHq@{LCFK++aZDUP0vN z5vbXMK)3_O$_AwG^<-IOSG5F#dPlETSNjt7a@xK4F*S?D>Boq*K0)K|BWUdGiGF)A zawXtHu95L0JGViYOy-0{0!y>=*mG$VOPNn_j0_r@WE+xx0&5IC7%)J>aREkTM>F2s zJPU1m6UeclSTnLWT5W_ZiF{NNrMpZKYu$=iyv03B0msg}eZB&rje69LF6@GUpmibP z2^uRhC>~af@ci0AYCClq`RpUe4M{f=RzXZcx?48BPR^`y`*pRPoH(C^`F#|%T8n!p z)_9GU$wUi+lNif6e3{IwlAzQ4Jm(2K8`@9%y1P8G8c88NHsFcp7T&tsl(88@o&DyV z{BvD_@nLqpaFWUQJ+fMVm|q6ao|;hBHRQMAuT#c{4^ZM_AI#4;e4UE~{7O*~3WBVU z-pp$Kp>pSv1u?9mGpULif)YN;&c|8kH>PeM`-fo(xe(#qNTOt}|3t2+KLQK@*>V1s Tt>Lp100000NkvXXu0mjf!6h6_ literal 0 HcmV?d00001 diff --git a/themes/devel/images/menuitem_hover.png b/themes/devel/images/menuitem_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb6bd5fc839fed8e06ea4a61873e06a12e2e9c7 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~wj^(N7l!{J zxM1({$v_d#0*}aI1_o|n5N2eUHAey{$X?><>&kwUn@LndQUB?|O+X>Z64!_l=ltB< z)VvY~=c3falGGH1^30M91$R&1fbd2>aiF5Do-U3d7N?(1HWWInz{B!A?MG_e1pcQR z3rjS04y3(NTdbGmpb*y1Qe`Wz=4<)O#9T@)VnJb&VW-$U#)ZaLX1dAhG#-rGbiQQE zhUfFdO;;Dq{(bgt=CR***fjS_u3h*|?PlOY-)@UFZ5yX7VA*}$u`>LEhmGpDO KMK`oJJU4u@cS5UYBKf&%yzLEJ@`|~Dem~&2^c_%Z2)^!C|aU9>D zpDUaza2)5h%`kwCFbvmuo=*eUpK+)CXzu_smt}#rZ4XP!vP|+>mJuhe>)uclMQ<%D ziUOLZk$*{&pss5W1ObvHA&{>u=Xt(1O>?OEzQ6M0I1>7qWy3ItWxOq2*SFf`a)DtO zfTI9}&>^sA@x@JYn-8Q_(JR{(Y)?C58JD2m%0AHdH5+-F(V_AYq#6h7&%7o};s<;X?aTRRiI nGpsNmux}F>FIy15%P14}Ee7s@aoA14SGfycNiyD9wh9j3uCYJ_!3Wb8_IL=Ut7*5Ue zJoJ*-wk?HpT}QQAm8?`MD3{BU0;;Nl$EEW5yw+O)u`Ek26h*l}LWr~ij4{MwG4R-w z#_?YQJ_SUK5J@BwQY4$rc0`D9_yT@b-}(a4XcUo11ffs}>2z9%b($XN7U+f8tJP|< zSpvd_!(sSmqyVM#Qh{zEaoCT^WHRWhK$Pug>H}?IWcv-s@d3`DAb4jAZ2#-6tMe~v zeHC<6&J}p19D&L9{==2Gc7DOwQuw`ZtWsJOne^U`_Kn zHK<0qD;Pxc`ySe+iyI5i@b}{eetp`+m1z}b-2gpfvz>QvnTT0$fi?_Oi?49<2k2S1aB_5A^rBVs5>khmC z#v69<_yJs_1&_}SA0d7Z{0jzcw`JW8@FB_ZcRqBSKfK+>kLRms@P2rm^OI5e^rIKJ2+*;6xTdxd^Oo^c+5{hv>zJBB;=Z6x%2WihA@h5)`CJDk}>Uvu*BA zCdsz$-FNS9_q%p)_iizNaK6j=xW99L=bY~_ilQJEi;V){Q5|C~n{$`TFYWY@Wtk6$ z!&TYQXq5l#@}VvN+7g7Nha^dwlg(z4$z(K3r_)HKQkqc&0s(*s{8CMO)OTjcs(=up zISj*CvQnRxNa3=}=-l}ou-OKu9zJPtBhhOpFbDXbiJMt`e0~cZCr_Z&Gm8UUyeB~p z%@_)b#iAtu&8mOv9KgcU5ghI72U)oQMOcKp*$*)%^azDrO%(ym;C7Vo_VEpP2TmE} zT)qv-Z+l^PHsJV`y9uoXQ4}jmpf%4wx>iPRMPj7`CE1Q6{SnOF>)Yyqu7G7(jqJ2Z zc=KQwU7@pOWDjJuU7pi-aDC+VzbTj%P`sLqz!$m%DH*Yli726S@ID-M^#-S+2f4K+ z>}hO5t=kKt3}a(GhvaG_ig^Lv^OGp3@*QT?V|1w09pv;b#&X@vm5XIR*dKXAsrA<{{}EO9|@WvAX;L(-Sx0+_xX~ zhkMb*$3WOxFn?d94$6tY`?3{)?gE{Fi{o%^d;tt=tGZb9U&>KRvJqe`7z}Q=&K2uT ck3Rwo0Gvh+PoO~?`2YX_07*qoM6N<$f;|Hwo&W#< literal 0 HcmV?d00001 diff --git a/themes/devel/images/page_white_paintbrush.png b/themes/devel/images/page_white_paintbrush.png new file mode 100644 index 0000000000000000000000000000000000000000..ff10d65e44ac2a406e6dc857d83f426fb17cb97c GIT binary patch literal 598 zcmV-c0;&CpP)s ziMf=O)_N1&LQe%RLI??ZlOSy_>7h3%{uR9?hd?CaNx?&;hf+#wX^CZBgDF~nkkU4k z?q)Ypn?Oi5G42dZ*aX|)gU1Xr-}k;B^9`3urD6c0xES$pIK1%Bn`AQCZnat$lGs>` zwcBmT`aFhzTFZrHRfqK1ut^mR6dImR~ zRa~09g4Y{|Fpu)M^EtN%FSZP1@&h=lim0y1DC}nt3WYE}KGu2G z&NKFAaQe%{`sWHpodSwqzT^E5AQFi{6va-Et_;{5P~{e|yrSaT@E~?Kb8rX_EX_^B zeRZ&_v38$M3Hv8Cq(78#qMhNlYQS^dg=bH0!{;8NGjE5z1cCeo(zrX~2xUJITlRmL kK-`-1DE<#|w)rc-0G%WiZM9tuUjP6A07*qoM6N<$g4q2Ez5oCK literal 0 HcmV?d00001 diff --git a/themes/devel/images/page_white_swoosh.png b/themes/devel/images/page_white_swoosh.png new file mode 100644 index 0000000000000000000000000000000000000000..78dbd4bb2e6f8cf9765e204753be9faa12c8e756 GIT binary patch literal 608 zcmV-m0-ybfP)7|E)7YhXoT`Rc;>1nM(X%FJbn|R3~AnC0LUWAs0B1Me1>ZQ<2X$iEH zeyGuwENN|JNwS+=-#mFsAXe)ihGFN;{&r?|o}@l0fHZpJdyY8`XUMW8>>afgHV#7* z>~VYH#T_2^iiAd^p{3L5mKW=$jrS{Gp&wTfwN{2=;ghMio6(2j+yz*c#eKP4hT}Le zEgK)#EBM50WI(}#yGc|kUC8J2+HlVvrE-WY0H$ejFG&)L`#%P70_=iiNm$+3YOQ(Jn3I1Dj>j9+GGKlUE0C(*F_H6 zKQ#UdpuM0L=9vx4)l$LRah31>)|XS98Wt}2Wn8-)L~lHdTgh-sdt!*B4^n9fZ|3G; u+xEHsfXs$X_ow+X&9FV!@PC^5CBOi=Am_8VlCqBg0000r4^&$byxfqWPTdC&Kr^Iy*!z6BTnSyDOFJeU6W00000NkvXXu0mjfzT~R> literal 0 HcmV?d00001 diff --git a/themes/devel/images/server.png b/themes/devel/images/server.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e5d154803fda8a1f57b39ed84a890dbb48c157 GIT binary patch literal 456 zcmV;(0XP1MP)TP!xuLlekJI9pV`D z4U|w?$ASenm%KrJgT6>pix{C(TpSbvT?-;kLJ(ZCIEae`rHe*M@40ZTqERXIhm!+0 zIp6v3&AEvvieTIJD}ZOjYsBK6#YeeZ{uYawOa=)8G#ZUa(=_P1j#MgjQoUNOFr7|$ zY`0sBV3kT`v`d>=W`y0VH{=QP!dGbG#}ZVzqMK|OePaPjfd)V yI!9Rm_+=7{q-L}E#L^3kJ6x94?RINF0t^6VH{yAIh4zI20000QL70(Y)*K0-AbW|YuPggaZYEJnxl>W+=L3Z#OI#yLobz*Y zQ}ap~oQqNuOHxx5$}>wc6x=<11Hv2m#DR*EJzX3_IIim+J;>`|z~FFk{wtnKiY9L! zB(MrzY&M)@X_nM%_Ap04FnPt1gKT_zPIs@7eYfbu`hqs+l@g342d>Om#oBR5a+}Fz zCW*^F@0-qlo`2$4i0TFAt>ve67`Y|hPZNE>`pI0%*gAN=B+xnrPgg&ebxsLQ0LO4v A761SM literal 0 HcmV?d00001 diff --git a/themes/devel/images/table.png b/themes/devel/images/table.png new file mode 100644 index 0000000000000000000000000000000000000000..50b4b0a0baf7d29207632cf65d8b9634743de015 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xws^WYhE&{2%83)T>}_mRoZMJquve`lQtb5o{q@GZQ)4}@ z)qZ;?H({v*^S?igg&t-MOZZtL{{8uP_`{2P&Xag2Oq$we;FVVOuf5SY{oEgSwjVzN zYI%J2*Z)mYU_bC>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-bg_flat_75_ffffff_40x100.png b/themes/devel/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-bg_glass_55_fbf9ee_1x400.png b/themes/devel/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-bg_glass_65_ffffff_1x400.png b/themes/devel/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-bg_glass_75_dadada_1x400.png b/themes/devel/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/themes/devel/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-icons_2e83ff_256x240.png b/themes/devel/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-icons_454545_256x240.png b/themes/devel/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..59bd45b907c4fd965697774ce8c5fc6b2fd9c105 GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@f3_WCF#rGn literal 0 HcmV?d00001 diff --git a/themes/devel/images/ui-icons_cd0a0a_256x240.png b/themes/devel/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/themes/devel/images/world.png b/themes/devel/images/world.png new file mode 100644 index 0000000000000000000000000000000000000000..160e86b3389cb8c2dc233fdd698b634cca17946e GIT binary patch literal 863 zcmV-l1EBngP)tgYg@LM zl7<=GDIy5E78wuh%?m?LmC}A58Qm9x|g6KSoncOtSCVs$ib6kVx6!=054$WbB z>JOzSF zD5Y3Yw*h;$A4NR26v>e>OzTr%ijC+30-cWH_2*~sc?LdjWJzca0*S(MO$aXGD#?s7 z4mWVIaqVubS+WD;=}BIK4wHj28n{n889qsW>n zo(}7kjX53*%#H2yXr \ No newline at end of file diff --git a/themes/devel/views/admin/dbs.php b/themes/devel/views/admin/dbs.php new file mode 100644 index 0000000..7d122e9 --- /dev/null +++ b/themes/devel/views/admin/dbs.php @@ -0,0 +1,114 @@ + + +

diff --git a/themes/devel/views/admin/index.php b/themes/devel/views/admin/index.php new file mode 100644 index 0000000..1a51ccf --- /dev/null +++ b/themes/devel/views/admin/index.php @@ -0,0 +1,135 @@ + + + RockMongo + + + + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ + + + + + \ No newline at end of file diff --git a/themes/devel/views/admin/top.php b/themes/devel/views/admin/top.php new file mode 100644 index 0000000..67b7159 --- /dev/null +++ b/themes/devel/views/admin/top.php @@ -0,0 +1,43 @@ + + +
+
+ + | | " target="right" title="">" target="right" + title=""> +
+
| + | | "width:100px", + "onchange" => "window.top.location='index.php?action=admin.changeLang&lang='+this.value" + ) + ); ?> | " target="right">RockMongo v +
+
+
\ No newline at end of file diff --git a/themes/devel/views/collection/collectionDuplicate.php b/themes/devel/views/collection/collectionDuplicate.php new file mode 100644 index 0000000..e64f304 --- /dev/null +++ b/themes/devel/views/collection/collectionDuplicate.php @@ -0,0 +1,29 @@ +

»

+ + +

+ +

+ + +

+ +

+ + + +
+ :
+
+ :
+ "/>
+
+ checked="checked"/>
+
+ checked="checked"/>
+ "/> +
\ No newline at end of file diff --git a/themes/devel/views/collection/collectionIndexes.php b/themes/devel/views/collection/collectionIndexes.php new file mode 100644 index 0000000..26bce2d --- /dev/null +++ b/themes/devel/views/collection/collectionIndexes.php @@ -0,0 +1,43 @@ +

» [">]

+ + + + + + + + + + + + + + + + + + +
Y $db, + "collection" => $collection, + "index" => $index["name"] + ) + ) + ); + ?>"onclick="return window.confirm(' \'\'?');">
\ No newline at end of file diff --git a/themes/devel/views/collection/collectionProps.php b/themes/devel/views/collection/collectionProps.php new file mode 100644 index 0000000..1f4d503 --- /dev/null +++ b/themes/devel/views/collection/collectionProps.php @@ -0,0 +1,27 @@ +

»

+ + +

+ +

+ + +

+ +

+ + +
+ :
+
+ :
+ checked="checked"/>
+ :
+
+ :
+
+ "/>
+ +
+ +
\ No newline at end of file diff --git a/themes/devel/views/collection/collectionRename.php b/themes/devel/views/collection/collectionRename.php new file mode 100644 index 0000000..68825e4 --- /dev/null +++ b/themes/devel/views/collection/collectionRename.php @@ -0,0 +1,37 @@ +

»

+ + +

+ + +

+ + +
+ + :
+
+ :
+ "/>
+
+ checked="checked" />
+ "/> +
+ + + +
+ +
+ +
+
+ + + + + + \ No newline at end of file diff --git a/themes/devel/views/collection/collectionStats.php b/themes/devel/views/collection/collectionStats.php new file mode 100644 index 0000000..a8895d2 --- /dev/null +++ b/themes/devel/views/collection/collectionStats.php @@ -0,0 +1,36 @@ +

» [">]

+ + + + + + $stat): ?> + + + + + + + + + + $stat): ?> + + + + + + +
db..stats()
" . var_export($stat, true) . ""); + } else { + if (in_array($name, array("size", "storageSize", "lastExtentSize", "totalIndexSize"))) { + $stat = round($stat / 1024 / 1024, 2) . "m"; + } + h($stat); + } + ?>
{top:1}
diff --git a/themes/devel/views/collection/collectionValidate.php b/themes/devel/views/collection/collectionValidate.php new file mode 100644 index 0000000..186199f --- /dev/null +++ b/themes/devel/views/collection/collectionValidate.php @@ -0,0 +1,8 @@ +

»

+ +
+ +
+ +
+
diff --git a/themes/devel/views/collection/createIndex.php b/themes/devel/views/collection/createIndex.php new file mode 100644 index 0000000..205aafb --- /dev/null +++ b/themes/devel/views/collection/createIndex.php @@ -0,0 +1,76 @@ + + + + + + +

» $db, + "collection" => $collection + ) + ) + ); + ?>"> »

+ + +

+ + +
+ + + + + + + + + + + + + + + + + + + + +
+
+
"/>
+
\ No newline at end of file diff --git a/themes/devel/views/collection/createRow.php b/themes/devel/views/collection/createRow.php new file mode 100644 index 0000000..6140889 --- /dev/null +++ b/themes/devel/views/collection/createRow.php @@ -0,0 +1,38 @@ + + +

»

+ + +

+ + +

+ + +
+ :
+ +
+ +
+
+ "/> +
\ No newline at end of file diff --git a/themes/devel/views/collection/explainQuery.php b/themes/devel/views/collection/explainQuery.php new file mode 100644 index 0000000..4d8843e --- /dev/null +++ b/themes/devel/views/collection/explainQuery.php @@ -0,0 +1,12 @@ + +

+ + + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/themes/devel/views/collection/index.php b/themes/devel/views/collection/index.php new file mode 100644 index 0000000..8eba583 --- /dev/null +++ b/themes/devel/views/collection/index.php @@ -0,0 +1,537 @@ + + + + + + + + + + +

+ + +
+
+ + + "/> + "/> + + + + + + + + + + + +
+
+ +
style="display:none"> + New Object(see Updating + operators):
+ +
+
+ +

"/>

+

"/>

+

"/>

+

"/>

+
+ + style="display:none"> + + Fields() | + Hints() | + + + + + + style="display:none"> + | + : + +
"/> " + onclick="explainQuery(this.form)"/> + " onclick="window.location=' $db, "collection" => $collection, "format" => xn("format"))) + ); ?>'"/> + Cost s +

+ + +
+
+
    + +
  • + +
+
+
+
+
    + $field): ?> +
  • ">
  • + +
+
+ + +
+
+ + + + + +
+ Update + Query + SortASC + SortDESC + ------ + Rename + Remove + Clear + + ------ + New + + ------ + Indexes + ------ + Hide + Show +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/devel/views/collection/modifyRow.php b/themes/devel/views/collection/modifyRow.php new file mode 100644 index 0000000..9cb6a4e --- /dev/null +++ b/themes/devel/views/collection/modifyRow.php @@ -0,0 +1,46 @@ + + +

» '' []

+ + +

+ +

+ + +

+ +

+ + +
+ :
+
+ _id:
+ " size="72"/> +
+ :
+
+ "/> " + onclick="window.location=''"/> +
\ No newline at end of file diff --git a/themes/devel/views/collection/queryHistory.php b/themes/devel/views/collection/queryHistory.php new file mode 100644 index 0000000..1dda2da --- /dev/null +++ b/themes/devel/views/collection/queryHistory.php @@ -0,0 +1,18 @@ + + + + + + + + + +
+
+
[">] +
+
+
+
+ \ No newline at end of file diff --git a/themes/devel/views/collection/removeCollection.php b/themes/devel/views/collection/removeCollection.php new file mode 100644 index 0000000..f3f6e73 --- /dev/null +++ b/themes/devel/views/collection/removeCollection.php @@ -0,0 +1,4 @@ +

» .

+ \ No newline at end of file diff --git a/themes/devel/views/db/addUser.php b/themes/devel/views/db/addUser.php new file mode 100644 index 0000000..3134371 --- /dev/null +++ b/themes/devel/views/db/addUser.php @@ -0,0 +1,21 @@ +

»

+ + + +
+

+
+ :
+ "/>
+ :
+
+ :
+
+
+
+ "/> +
+
\ No newline at end of file diff --git a/themes/devel/views/db/auth.php b/themes/devel/views/db/auth.php new file mode 100644 index 0000000..b39820f --- /dev/null +++ b/themes/devel/views/db/auth.php @@ -0,0 +1,30 @@ +

»

+ + + + + + + + + + + + + + + + + + +
IDUserRead OnlyOperation
$db, "user" => $user["user"]))); ?>" + onclick="return window.confirm('Are you sure to remove user \'\'?')">Remove +
+ +

+ Official + Document: Control Access to MongoDB Instances with Authentication +

\ No newline at end of file diff --git a/themes/devel/views/db/dbExport.php b/themes/devel/views/db/dbExport.php new file mode 100644 index 0000000..2bd08ca --- /dev/null +++ b/themes/devel/views/db/dbExport.php @@ -0,0 +1,42 @@ + + +

»

+ + +
+ + + [] +
    + + + + +
  • + + +
+
+
+
+ checked="checked" />
+ :
+ + +

+ "/> +
+ + + :
+ + \ No newline at end of file diff --git a/themes/devel/views/db/dbImport.php b/themes/devel/views/db/dbImport.php new file mode 100644 index 0000000..71b6352 --- /dev/null +++ b/themes/devel/views/db/dbImport.php @@ -0,0 +1,35 @@ +

»

+ +

+ +

+ + + +

.js file exported with RockMongo:

+ +
+ + JS File:
+ "/> +
+ +
+

+ +

+ + +

.json file exported with mongoexport:

+ +
+ + Import to collection name:
+ JSON File:
+ "/> +
\ No newline at end of file diff --git a/themes/devel/views/db/dbTransfer.php b/themes/devel/views/db/dbTransfer.php new file mode 100644 index 0000000..474c418 --- /dev/null +++ b/themes/devel/views/db/dbTransfer.php @@ -0,0 +1,79 @@ + + +

»

+ + +

+ +

+ + +

+ +

+ + + +
+
+

[]

+
    + + + + +
  • + + +
+
+
+
+
+

+ + + + + + + + + + + + + + + + + + + + + +
:
:
?checked="checked" + value="1"/>
:
:
+
+
+
+

+ checked="checked"/> +

+
+
+

+ "/> +
+
\ No newline at end of file diff --git a/themes/devel/views/db/dropDatabase.php b/themes/devel/views/db/dropDatabase.php new file mode 100644 index 0000000..ac0773f --- /dev/null +++ b/themes/devel/views/db/dropDatabase.php @@ -0,0 +1,12 @@ +

»

+ +

+ ? +

+

+ +

+" + onclick="window.location=' $db, "confirm" => 1))); ?>'"/> " + onclick="window.location=' $db))); ?>'"/> \ No newline at end of file diff --git a/themes/devel/views/db/dropDatabaseResult.php b/themes/devel/views/db/dropDatabaseResult.php new file mode 100644 index 0000000..86a6b92 --- /dev/null +++ b/themes/devel/views/db/dropDatabaseResult.php @@ -0,0 +1,17 @@ +

»

+ +
+ +
+ +
+
+ +

+ " + onclick="window.location=''"/> +

+ + \ No newline at end of file diff --git a/themes/devel/views/db/index.php b/themes/devel/views/db/index.php new file mode 100644 index 0000000..83f9083 --- /dev/null +++ b/themes/devel/views/db/index.php @@ -0,0 +1,50 @@ + + +

+ +
+ +
+ + + $value): ?> + + + + + +
\ No newline at end of file diff --git a/themes/devel/views/db/newCollection.php b/themes/devel/views/db/newCollection.php new file mode 100644 index 0000000..3acbaae --- /dev/null +++ b/themes/devel/views/db/newCollection.php @@ -0,0 +1,22 @@ +

»

+ + +

+ +

+ + + +
+ :
+
+ :
+ checked="checked" />
+ :
+
+ :
+
+ "/> +
\ No newline at end of file diff --git a/themes/devel/views/db/profile.php b/themes/devel/views/db/profile.php new file mode 100644 index 0000000..d33a030 --- /dev/null +++ b/themes/devel/views/db/profile.php @@ -0,0 +1,19 @@ +

»

+ + + +

+ + +
+ : sec)); ?>
+ +
+ + +

\ No newline at end of file diff --git a/themes/devel/views/db/profileLevel.php b/themes/devel/views/db/profileLevel.php new file mode 100644 index 0000000..a4d40b8 --- /dev/null +++ b/themes/devel/views/db/profileLevel.php @@ -0,0 +1,45 @@ +

»

+ + + +
+
+ + : +
+
+ + + "/> +
+
+ + \ No newline at end of file diff --git a/themes/devel/views/db/repairDatabase.php b/themes/devel/views/db/repairDatabase.php new file mode 100644 index 0000000..58dc2c5 --- /dev/null +++ b/themes/devel/views/db/repairDatabase.php @@ -0,0 +1,8 @@ +

»

+ +
+ : +
+ +
+
\ No newline at end of file diff --git a/themes/devel/views/exception.php b/themes/devel/views/exception.php new file mode 100644 index 0000000..ac73a78 --- /dev/null +++ b/themes/devel/views/exception.php @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/themes/devel/views/footer.php b/themes/devel/views/footer.php new file mode 100644 index 0000000..121ae87 --- /dev/null +++ b/themes/devel/views/footer.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/themes/devel/views/header.php b/themes/devel/views/header.php new file mode 100644 index 0000000..4cd88ae --- /dev/null +++ b/themes/devel/views/header.php @@ -0,0 +1,23 @@ + + + + + !!! RockMongo !!! + + + + + + + + + \ No newline at end of file diff --git a/themes/devel/views/login/index.php b/themes/devel/views/login/index.php new file mode 100644 index 0000000..e9d2e38 --- /dev/null +++ b/themes/devel/views/login/index.php @@ -0,0 +1,93 @@ + + +
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Log-in:
Host
:
:
Non-Admin users:
DB Name(s):
More » +
"/>
+
+ + +
\ No newline at end of file diff --git a/themes/devel/views/server/command.php b/themes/devel/views/server/command.php new file mode 100644 index 0000000..f567193 --- /dev/null +++ b/themes/devel/views/server/command.php @@ -0,0 +1,41 @@ +
+ +
+ +» + + +

+ + +
+ +
+ : + + : +
+ "/> +
+ + + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/themes/devel/views/server/createDatabase.php b/themes/devel/views/server/createDatabase.php new file mode 100644 index 0000000..3cad0aa --- /dev/null +++ b/themes/devel/views/server/createDatabase.php @@ -0,0 +1,22 @@ +

"> » +

+ + + +

+ + +

+ + + + + + +
+ :
+ "/>
+ "/> +
\ No newline at end of file diff --git a/themes/devel/views/server/databases.php b/themes/devel/views/server/databases.php new file mode 100644 index 0000000..46f0983 --- /dev/null +++ b/themes/devel/views/server/databases.php @@ -0,0 +1,30 @@ +
+ +
+ +"> + + + + + + + + + + + + + + + + + + + + + + +
$db["name"]))); ?>">
\ No newline at end of file diff --git a/themes/devel/views/server/execute.php b/themes/devel/views/server/execute.php new file mode 100644 index 0000000..d144210 --- /dev/null +++ b/themes/devel/views/server/execute.php @@ -0,0 +1,67 @@ + +
+ +
+ +» Javascript API + + + +

+ + +
+ +
+ +
style="display:none"> + + $argument): ?> +
+ #[JSON]

+
+ + +
+ : + :"/> +
+ +
+ + + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/themes/devel/views/server/index.php b/themes/devel/views/server/index.php new file mode 100644 index 0000000..5550bb8 --- /dev/null +++ b/themes/devel/views/server/index.php @@ -0,0 +1,80 @@ +
+ +
+ + + + + + + + +
(db.serverCmdLineOpts()) +
+
+ + + + + + $value): ?> + + + + + +
+
+ + + + + + $value): ?> + + + + + +
+
+ + + + + + + + + + + $value): ?> + + + + + + +
+ +
+ + + + + + $value): ?> + + + + + +
+ ({buildinfo:1}) +
+ +
diff --git a/themes/devel/views/server/killOp.php b/themes/devel/views/server/killOp.php new file mode 100644 index 0000000..98e588c --- /dev/null +++ b/themes/devel/views/server/killOp.php @@ -0,0 +1,13 @@ +

"> » ''

+ + + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/themes/devel/views/server/processlist.php b/themes/devel/views/server/processlist.php new file mode 100644 index 0000000..eda5352 --- /dev/null +++ b/themes/devel/views/server/processlist.php @@ -0,0 +1,62 @@ +
+ +
+ + + + + + + "ID", + "desc" => "Description", + "client" => "Client", + "active" => "Active", + "lockType" => "LockType", + "waitingForLock" => "Waiting", + "secs_running" => "SecsRunning", + "op" => "Operation", + "ns" => "NameSpace" + ) as $param => $desc):?> + + + + + + "ID", + "desc" => "Description", + "client" => "Client", + "active" => "Active", + "lockType" => "LockType", + "waitingForLock" => "Waiting", + "secs_running" => "SecsRunning", + "op" => "Operation", + "ns" => "NameSpace", + ) as $param => $desc):?> + + + + + + + + + +
(db.$cmd.sys.inprog.find({$all:1}))
rowspan="2"> + + + 1): ?> [ $prog["opid"]))); ?>" + onclick="return window.confirm(' \'\'?')">] + + +

-----
\ No newline at end of file diff --git a/themes/devel/views/server/replication.php b/themes/devel/views/server/replication.php new file mode 100644 index 0000000..e4ccff8 --- /dev/null +++ b/themes/devel/views/server/replication.php @@ -0,0 +1,80 @@ +
+ +
+ + + + + + $value): ?> + + + + + +
(db.getReplicationInfo())
+ + +
+ + + + + + $value): ?> + + + + + +
( "local", "collection" => "me"))); ?>">local.me) +
+ + + +
+ + + + + + + + + + $value): ?> + + + + + + +
( "local", "collection" => "slaves"))); ?>">local.slaves) +
+ + + +
+ + + + + + + + + + $value): ?> + + + + + + +
( "local", "collection" => "sources")) + ); ?>">local.sources) +
+ \ No newline at end of file diff --git a/themes/devel/views/server/status.php b/themes/devel/views/server/status.php new file mode 100644 index 0000000..db7e780 --- /dev/null +++ b/themes/devel/views/server/status.php @@ -0,0 +1,15 @@ +
+ +
+ + + + + + $value): ?> + + + + + +
({serverStatus:1})