From 724eecf8b73ccbaa14b9bbf366fe8cc755415622 Mon Sep 17 00:00:00 2001 From: trashbo4t Date: Sun, 20 May 2018 01:59:44 -0400 Subject: [PATCH] New Module: Themes --- Themes/api/module.php | 565 ++++++++++++++++++++++++++ Themes/css/1980.css | 452 +++++++++++++++++++++ Themes/css/default.css | 203 ++++++++++ Themes/css/hak5.css | 452 +++++++++++++++++++++ Themes/css/kbeflo-dark.css | 529 +++++++++++++++++++++++++ Themes/css/main.css | 203 ++++++++++ Themes/css/malware.css | 478 ++++++++++++++++++++++ Themes/css/morning.css | 464 ++++++++++++++++++++++ Themes/css/neon.css | 457 +++++++++++++++++++++ Themes/css/spring.css | 479 ++++++++++++++++++++++ Themes/css/starstuff.css | 478 ++++++++++++++++++++++ Themes/img/favicon-dark.ico | Bin 0 -> 533 bytes Themes/img/logo-dark.png | Bin 0 -> 26507 bytes Themes/img/throbber-dark.gif | Bin 0 -> 1739 bytes Themes/js/module.js | 558 ++++++++++++++++++++++++++ Themes/module.html | 744 +++++++++++++++++++++++++++++++++++ Themes/module.info | 6 + Themes/module_icon.svg | 52 +++ 18 files changed, 6120 insertions(+) create mode 100644 Themes/api/module.php create mode 100644 Themes/css/1980.css create mode 100644 Themes/css/default.css create mode 100644 Themes/css/hak5.css create mode 100644 Themes/css/kbeflo-dark.css create mode 100644 Themes/css/main.css create mode 100644 Themes/css/malware.css create mode 100644 Themes/css/morning.css create mode 100644 Themes/css/neon.css create mode 100644 Themes/css/spring.css create mode 100644 Themes/css/starstuff.css create mode 100644 Themes/img/favicon-dark.ico create mode 100644 Themes/img/logo-dark.png create mode 100644 Themes/img/throbber-dark.gif create mode 100644 Themes/js/module.js create mode 100644 Themes/module.html create mode 100644 Themes/module.info create mode 100644 Themes/module_icon.svg diff --git a/Themes/api/module.php b/Themes/api/module.php new file mode 100644 index 0000000..a0ee183 --- /dev/null +++ b/Themes/api/module.php @@ -0,0 +1,565 @@ + "FF0000", + "green" => "00FF00", + "blue" => "0000FF", + "purple" => "800080", + "orange" => "cc3300", + "yellow" => "ffff00", + "pink" => "ff0066", + ); + private $LIGHT_COLOR_HEX_MAP = array( + "red" => "ff4d4d", + "green" => "80ff80", + "blue" => "8080ff", + "purple" => "ff66ff", + "orange" => "ff9f80", + "yellow" => "ffff66", + "pink" => "ff99c2", + ); + private $DARK_COLOR_HEX_MAP = array( + "red" => "990000", + "green" => "004d00", + "blue" => "000077", + "purple" => "4d004d", + "orange" => "992600", + "yellow" => "cccc00", + "pink" => "99003d", + ); + + public function route() + { + switch ($this->request->action) { + case 'getThemeList': + $this->handleGetThemeList(); + break; + case 'themeFields': + $this->getThemeFields(); + break; + case 'deleteTheme': + $this->handleDeleteTheme(); + break; + case 'activateTheme': + $this->activateTheme(); + break; + case 'getThemeCode': + $this->getThemeCode(); + break; + case 'submitThemeCode': + $this->submitThemeCode(); + break; + case 'getCurrentTheme': + $this->getCurrentTheme(); + break; + case 'createNewTheme': + $this->handleCreateNewTheme(); + break; + case 'restoreDefault': + $this->restoreDefault(); + break; + case 'backupFiles': + $this->backupFiles(); + break; + case 'replaceImage': + $this->replaceImage(); + break; + } + } + // Get the CURRENT_ file, which is 1 line with the current color of the icon + public function currentFile($name) + { + $upper = strtoupper($name); + return "/pineapple/modules/Themes/img/CURRENT_{$upper}"; + } + // Move an image from light->dark or vice versa + public function replaceImage() + { + $img = $this->request->img; + switch ($img) + { + // Pineapple Logo + case 'Logo': + $this->response = array("message" => "Logo Changed"); + if ($this->request->light) { + exec("cp $this->BACKUP_LOGO /pineapple/img/logo.png"); + exec("echo light > $this->CURRENT_LOGO"); + } + else + { + exec("echo dark > $this->CURRENT_LOGO"); + exec('cp /pineapple/modules/Themes/img/logo-dark.png /pineapple/img/logo.png'); + } + $this->response = array("message" => "Logo Changed"); + break; + + // Pineapple favicon.ico Image + case 'Icon': + if ($this->request->light) { + exec("echo light > $this->CURRENT_FAVICON"); + exec("cp $this->BACKUP_FAVICON /pineapple/img/favicon.ico"); + } + else + { + exec("echo dark > $this->CURRENT_FAVICON"); + exec('cp /pineapple/modules/Themes/img/favicon-dark.ico /pineapple/img/favicon.ico'); + } + $this->response = array("message" => "Icon Changed"); + break; + + // Pineapple Throbber gif + case 'Throbber': + if ($this->request->light) { + exec("echo light > $this->CURRENT_THROBBER"); + exec("cp $this->BACKUP_THROBBER /pineapple/img/throbber.gif"); + } + else + { + exec("echo dark > $this->CURRENT_THROBBER"); + exec('cp /pineapple/modules/Themes/img/throbber-dark.gif /pineapple/img/throbber.gif'); + } + $this->response = array("message" => "Throbber Changed"); + break; + + // Modify all of the module Icons + case 'All': + foreach ($this->ALL_MODULES as $module) + { + $current = $this->currentFile($module); + $success = $this->replaceModuleImage( + $module, + $this->request->color, + $this->request->brightness + ); + } + $this->response = array( + "success" => true, + "message" => "All module icons changed to {$this->request->color}-{$this->request->brightness}" + ); + break; + // Assume module Icon + default: + $success = $this->replaceModuleImage( + $this->request->img, + $this->request->color, + $this->request->brightness + ); + $this->response = array( + "success" => $success, + "message" => "{$this->request->img} icon changed to {$this->request->color}-{$this->request->brightness}" + ); + break; + } + } + /* + * replaceModuleImage + * $moduleName -> String name of module, can be any format (nEtWoRkIng) because it gets formatted + * $color -> string name of the color, used for index of mapping + * $brightness -> string name of brightness, used for map selection + */ + public function replaceModuleImage($moduleName, $color, $brightness) + { + $current = $this->currentFile($moduleName); + $replace = "/pineapple/modules/{$moduleName}/module_icon.svg"; + switch($color) + { + case 'light': + return $this->restoreModuleIcon ( + $moduleName + ); + break; + case 'dark': + if (exec("echo dark > $current") != 0 || + exec("echo $brightness >> $current") != 0 || + !$this->searchAndReplaceFile($replace, "FFFFFF")) + { + return false; + } + break; + default: + $hex = ""; + switch($brightness) + { + case 'light': + $hex = $this->LIGHT_COLOR_HEX_MAP[$color]; + break; + case 'dark': + $hex = $this->DARK_COLOR_HEX_MAP[$color]; + break; + default: + $hex = $this->NORMAL_COLOR_HEX_MAP[$color]; + break; + } + // Replace the modules icon image + if (exec("echo $color > $current") != 0 || + exec("echo $brightness >> $current") != 0) + { + return false; + } + if (!$this->searchAndReplaceFile($replace, $hex)) { + return false; + } + break; + } + return true; + } + /* + * searchAndReplaceFile + * $s -> substring to find + * return: true or false showing succcessful string replacement + */ + public function searchAndReplaceFile($f, $s) + { + // Use a stream editor so we dont have to load the entire file into RAM + return (exec("sed -i 's/fill:\(.*\);/fill:#{$s};/g' $f") == 0); + } + /* + * setCurrentTheme + * $theme -> modify CURRENT_CSS file with new theme + */ + public function setCurrentTheme($theme) + { + $this->current_theme = $theme; + exec('echo '.$theme.' > /pineapple/modules/Themes/css/CURRENT_CSS'); + } + /* + * getCurrentTheme + * return current theme, and all parameters for icon colors/brightness + */ + public function getCurrentTheme() + { + $line = file('/pineapple/modules/Themes/css/CURRENT_CSS')[0]; + $line = trim(preg_replace('/\s+/', ' ', $line)); + + $logo = file('/pineapple/modules/Themes/img/CURRENT_LOGO')[0]; + $logo = trim(preg_replace('/\s+/', ' ', $logo)); + + $icon = file('/pineapple/modules/Themes/img/CURRENT_FAVICON')[0]; + $icon = trim(preg_replace('/\s+/', ' ', $icon)); + + $throbber = file('/pineapple/modules/Themes/img/CURRENT_THROBBER')[0]; + $throbber = trim(preg_replace('/\s+/', ' ', $throbber)); + $this->response = array( + "current" => $line, + "logo" => $logo, + "icon" => $icon, + "throbber" => $throbber, + ); + foreach ($this->ALL_MODULES as $module) + { + $current = $this->currentFile($module); + $lower = strtolower($module); + $color = file($current)[0]; + $color = trim(preg_replace('/\s+/', ' ', $color)); + $brightness = file($current)[1]; + $brightness = trim(preg_replace('/\s+/', ' ', $brightness)); + $this->response[$lower] = $color; + $this->response[$lower.'brightness'] = $brightness; + } + } + /* + * isCurrentThemeEnv + * $theme string name of theme to check if its current + * check if global current_them var is set, compare against that + * this way we dont open,read,close a file every for every check + */ + public function isCurrentThemeEnv($theme) + { + if ($this->current_theme != "") { + return ($this->current_theme == $theme); + } + if (!file_exists($this->CURRENT_CSS)) { + return false; + } + $line = file($this->CURRENT_CSS)[0]; + $line = trim(preg_replace('/\s+/', ' ', $line)); + return ($line === $theme); + } + /* + * restoreImages + * Undo any changes made by this Module + * This includes: original icons, gifs, svg's + */ + public function restoreImages() + { + $success = true; + exec("cp {$this->BACKUP_FAVICON} /pineapple/img/favicon.ico"); + exec("cp {$this->BACKUP_LOGO} /pineapple/img/logo.png"); + exec("cp {$this->BACKUP_THROBBER} /pineapple/img/throbber.gif"); + exec('echo light > /pineapple/modules/Themes/img/CURRENT_LOGO'); + exec('echo light > /pineapple/modules/Themes/img/CURRENT_FAVICON'); + exec('echo light > /pineapple/modules/Themes/img/CURRENT_THROBBER'); + + foreach ($this->ALL_MODULES as $module) + { + $current = $this->currentFile($module); + $success = $this->restoreModuleIcon ( + $module + ); + } + $this->response = array( + "success" => $success, + "message" => "Restored all files" + ); + } + /* + * restoreModuleIcon + * Generic helper function to put a modules icon back to normal + * using only the name of the module (in any format). + */ + public function restoreModuleIcon($moduleName) + { + $current = $this->currentFile($moduleName); + $replace = "/pineapple/modules/{$moduleName}/module_icon.svg"; + if (!$this->searchAndReplaceFile($replace, $this->RESTORE_HEX)) + { + return false; + } + if (exec("echo light > $current") != 0 || + exec("echo normal >> $current") != 0) + { + return false; + } + return true; + } + /* + * restoreDefault + * backup all files if not done yet + * put the original css file back + * restore all of the images + */ + public function restoreDefault() + { + $this->backupFiles(); + exec("cp {$this->BACKUP_MAIN_CSS} /pineapple/css/main.css"); + $this->setCurrentTheme('main.css'); + $this->restoreImages(); + } + /* + * getThemeCode + * retrieve the css styling code from a theme file + */ + public function getThemeCode() + { + $code = file_get_contents($this->CSS_DIR . $this->request->name); + $this->response = array("code" => $code, "file" => $this->CSS_DIR . $this->request->name); + } + /* + * getThemeFields + * more or less only returns the code for now + */ + public function getThemeFields() + { + $allFields = array(); + $code = file_get_contents($this->CSS_DIR . $this->request->name); + $this->response = array("code" => $code); + } + /* + * activateTheme + * mv the users selected theme to main.css file + */ + public function activateTheme() + { + $themeName = $this->request->name; + $cmd = exec("cp {$this->CSS_DIR}{$themeName} /pineapple/css/main.css"); + if ($cmd == 0) { + $this->setCurrentTheme($themeName); + $message = $themeName . " is now active."; + $this->response = array("return" => true, "message" => $message); + } + else + { + $message = "Could not move theme" . $themeName . "(Something is wrong..)"; + $this->response = array("return" => false,"message" => $message); + } + } + /* Credits to SteveRusin at http://php.net/manual/en/ref.strings.php */ + private function endsWith($str, $sub) + { + return (substr($str, strlen($str) - strlen($sub)) === $sub); + } + /* + * handleDeleteTheme + * delete a users theme file from the local css directory + */ + public function handleDeleteTheme() + { + $themeName = $this->request->name; + exec("rm {$this->CSS_DIR}{$themeName}"); + if (!file_exists("/pineapple/modules/Themes/css/" . $themeName)) { + $message = "Deleted " . $themeName; + } else { + $message = "Error deleting " . $themeName; + } + $this->response = array("message" => $message); + } + /* + * submitThemeCode + * save a users theme file in the local css directory + */ + public function submitThemeCode() + { + $code = $this->request->themeCode; + $themeName = $this->request->name; + $fileName = $this->request->fileName; + file_put_contents($this->CSS_DIR . $themeName, $code); + $message = (!file_exists($this->CSS_DIR . $themeName)) ? "Created " . $themeName : "Updated " . $themeName; + + $this->response = array( + "message" => $message, + "filename" => $fileName + ); + } + /* + * handleGetThemeList + * get the list of .css files in the local css directory + * avoid sending back the main.css file so it cannot be modified + */ + public function handleGetThemeList() + { + $all_themes = array(); + $root_themes = preg_grep('/^([^.])/', scandir("{$this->CSS_DIR}")); + foreach ($root_themes as $theme) { + if (!is_file($theme) && $this->endsWith($theme, '.css') && $theme != "main.css") { + $active = $this->isCurrentThemeEnv($theme); + $obj = array("title" => $theme, "location" => "../Themes/css/", "active" => $active); + array_push($all_themes, $obj); + } + } + $this->response = $all_themes; + } + /* + * handleCreateNewTheme + * create a new .css theme file in the local css directory + */ + public function handleCreateNewTheme() + { + $themePath = $this->CSS_DIR; + $themeName = str_replace(' ', '_', $this->request->themeName); + if (!$this->endswith($themeName, '.css')) { + $themeName = $themeName . ".css"; + } + if (file_exists($themePath . $themeName)) { + $this->response = array("create_success" => false, "create_message" => "A theme named {$themeName} already exists."); + return; + } + exec("cp {$this->SKELETON_CSS} {$themePath}{$themeName}"); + $this->response = array("create_success" => true, "create_message" => "Created {$themeName}"); + } + /* + * backupFiles + * Backup all of the .css/IMG files used so the module can properly restore defaults + */ + public function backupFiles() + { + $success = true; + $modules = array(); + if (!file_exists($this->BACKUP_MAIN_CSS)) { + exec("cp /pineapple/css/main.css {$this->BACKUP_MAIN_CSS}"); + array_push($modules, "Backed up main.css."); + } + if (!file_exists($this->SKELETON_CSS)) { + mkdir($this->CSS_DIR); + exec("cp {$this->BACKUP_MAIN_CSS} {$this->SKELETON_CSS}"); + array_push($modules, "Backed up skeleton.css."); + } + if (!file_exists($this->BACKUP_THROBBER)) { + exec("cp /pineapple/img/throbber.gif {$this->BACKUP_THROBBER}"); + array_push($modules, "Backed up favicon.ico"); + } + if (!file_exists($this->CURRENT_THROBBER)) { + exec("echo light > $this->CURRENT_THROBBER"); + array_push($modules, "Wrote to {$this->CURRENT_THROBBER}"); + } + if (!file_exists($this->BACKUP_FAVICON)) { + exec("cp /pineapple/img/favicon.ico {$this->BACKUP_FAVICON}"); + array_push($modules, "Backed up favicon.ico"); + } + if (!file_exists($this->CURRENT_FAVICON)) { + exec("echo light > $this->CURRENT_FAVICON"); + array_push($modules, "Wrote to /pineapple/modules/Themes/img/CURRENT_FAVICON"); + } + if (!file_exists($this->BACKUP_LOGO)) { + exec("cp /pineapple/img/logo.png $this->BACKUP_LOGO"); + array_push($modules, "Wrote to {$this->BACKUP_LOGO}"); + } + if (!file_exists($this->CURRENT_LOGO)) { + exec("echo light > $this->CURRENT_LOGO"); + array_push($modules, "Wrote to {$this->CURRENT_LOGO}"); + } + foreach ($this->ALL_MODULES as $module) + { + $current = $this->currentFile($module); + if (!$this->backupModuleIcon($current)) + { + array_push($modules, "Did not write to {$current}."); + } + else + { + array_push($modules, "Wrote to {$current}."); + } + } + $this->response = array( + "success" => $success, + "message" => $success ? + "Created a backup file for all files" : + "Failed to backup files! Tread lightly", + "modules" => $modules + ); + } + public function backupModuleIcon($currentFile) { + if (!file_exists($currentFile)) { + if (exec("echo light > $currentFile") != 0 || + exec("echo normal >> $currentFile") != 0) + { + return false; + } + return true; + } + return false; + } +} \ No newline at end of file diff --git a/Themes/css/1980.css b/Themes/css/1980.css new file mode 100644 index 0000000..896db2c --- /dev/null +++ b/Themes/css/1980.css @@ -0,0 +1,452 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:lime; + font-family: monospace; +} + +i { + color: lime; + font: monospace; +} + +b, strong { + font-weight: 700; + font-family: monospace; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: monospace; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: lime; + text-align: center; + background-color: black; + border: 1px solid lime; + border-radius: 4px; +} + +.panel-default { + border-color: lime; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid lime; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: lime; + white-space:nowrap; + background-color: black; + border: lime; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: lime; + background-color: black; + background-image: none; + border: 1px solid lime; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid lime; + border-top: 1px solid lime; +} + +table { + background-color: black; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: black; +} + +* { + color: lime; + border-color: lime; + border-top: lime; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: lime; + word-break: break-all; + word-wrap: break-word; + background-color: #000000; + border: 1px solid lime; + border-radius: 4px; + font-family: monospace; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #000000; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #000; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: limegreen; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid #18ff00; + color:lime; +} + +.btn { + background-color: black; + font-family: monospace; +} + +.alert-info { + color: lime; + background-color: black; + border-color: lime; +} + +p { + color: lime; + font-family: monospace; +} + +.text-muted { + color:forestgreen; +} + +.h3 h3 { + color:lime; +} +.h2, h2 { + font-size: 30px; + color:lime; +} +.h1, h1 { + font-size: 30px; + color:lime; +} + +.btn-default { + color:lime; + border-color: lime; +} + +.btn-default:hover { + color: lime; + background-color: lime; + border-color: lime; +} + +.sidebar .active { + background-color: #13033a; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #000000; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #000; + opacity: 1; + color: lime; +} + +.panel-footer { + padding: 10px 15px; + background-color: #000000; + border-top: 1px solid #0F0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: #000; + opacity: 1; + color: lime; + font-family: monospace; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #000; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #000 !important; + word-wrap: break-word !important; + border: 1px solid #000 !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:lime; +} + +.alert-danger { + color: lime; + background-color: black; + border-color: lime; +} + +.panel-title { + background-color:black; + color: lime; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: lime; +} + +.panel-body { + background-color:black; + font-family:monospace; +} + +.panel-heading { + background-color:black; +} + +.panel-default>.panel-heading { + color: lime; + background-color: black; + border-color: lime; + border-bottom-color: lime; + border-bottom: lime; +} + +td { + background-color:black; +} +.nav { + background-color:black; +} +.sidebar-nav.navbar-collapse { + background-color:black; +} +.navbar-default{ + background-color:black; +} +.navbar-static-top { + background-color:black; + border-color: lime; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: monospace; + background-color: lime; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: black; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid lime; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid lime; +} \ No newline at end of file diff --git a/Themes/css/default.css b/Themes/css/default.css new file mode 100644 index 0000000..9c42935 --- /dev/null +++ b/Themes/css/default.css @@ -0,0 +1,203 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #f8f8f8; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #eee; +} + +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid #e7e7e7; +} + +.sidebar .active { + background-color: #eee; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #e7e7e7; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #fff; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #fff !important; + word-wrap: break-word !important; + border: 1px solid #ccc !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "WiFi Pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; +} \ No newline at end of file diff --git a/Themes/css/hak5.css b/Themes/css/hak5.css new file mode 100644 index 0000000..8b4bfe3 --- /dev/null +++ b/Themes/css/hak5.css @@ -0,0 +1,452 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:blue; + font-family:webkit-pictograph; +} + +i { + color: blue; + font: webkit-pictograph; +} + +b, strong { + font-weight: 700; + font-family: webkit-pictograph; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: webkit-pictograph; + font-weight: 500; + line-height: 1.1; + color: blue; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: red; + text-align: center; + background-color: white; + border: 1px solid red; + border-radius: 4px; +} + +.panel-default { + border-color: red; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid red; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: blue; + white-space:nowrap; + background-color: white; + border: red; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: red; + background-color: white; + background-image: none; + border: 1px solid red; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid red; + border-top: 1px solid red; +} + +table { + background-color: white; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: white; +} + +* { + color: red; + border-color: red; + border-top: red; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid white; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: red; + word-break: break-all; + word-wrap: break-word; + background-color: white; + border: 1px solid red; + border-radius: 4px; + font-family: webkit-pictograph; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: white; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: white; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: red; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid red; + color:blue; +} + +.btn { + background-color: white; + font-family: webkit-pictograph; +} + +.alert-info { + color: red; + background-color: white; + border-color: red; +} + +p { + color: red; + font-family: webkit-pictograph; +} + +.text-muted { + color:blue; +} + +.h3 h3 { + color:blue; +} +.h2, h2 { + font-size: 30px; + color:blue; +} +.h1, h1 { + font-size: 30px; + color:blue; +} + +.btn-default { + color:red; + border-color: red; +} + +.btn-default:hover { + color: red; + background-color: red; + border-color: red; +} + +.sidebar .active { + background-color: white; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid white; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: white; + opacity: 1; + color: red; +} + +.panel-footer { + padding: 10px 15px; + background-color: white; + border-top: 1px solid red; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: white; + opacity: 1; + color: red; + font-family: webkit-pictograph; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: white; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: white !important; + word-wrap: break-word !important; + border: 1px solid white !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:red; +} + +.alert-danger { + color: red; + background-color: white; + border-color: red; +} + +.panel-title { + background-color:white; + color: red; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: red; +} + +.panel-body { + background-color:white; + font-family: webkit-pictograph; +} + +.panel-heading { + background-color:white; +} + +.panel-default>.panel-heading { + color: blue; + background-color: white; + border-color: red; + border-bottom-color: red; + border-bottom: red; +} + +td { + background-color:white; +} +.nav { + background-color:white; +} +.sidebar-nav.navbar-collapse { + background-color:white; +} +.navbar-default{ + background-color:white; +} +.navbar-static-top { + background-color:white; + border-color: red; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: webkit-pictograph; + background-color: red; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: white; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid red; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid red; +} \ No newline at end of file diff --git a/Themes/css/kbeflo-dark.css b/Themes/css/kbeflo-dark.css new file mode 100644 index 0000000..c41c245 --- /dev/null +++ b/Themes/css/kbeflo-dark.css @@ -0,0 +1,529 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #0c0c0c; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #131313; +} + +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid #181818; +} + +.sidebar .active { + background-color: #131313; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #202020; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #000; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #fff !important; + word-wrap: break-word !important; + border: 1px solid #ccc !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "WiFi Pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; +} + +.navbar-default { + background-color: #0c0c0c; + border-color: #181818; +} + +.panel-footer { + background-color: #0e0e0e; + border-top: 1px solid #202020; +} + +.panel-default { + border-color: #202020; +} + +.panel-default>.panel-heading { + color: #c6c6c6; + background-color: #0e0e0e; + border-color: #202020; +} + +.panel-body { + color: #c6c6c6; + background-color: #000; +} + +.h2, h2 { + font-size: 30px; + color: #c6c6c6; +} + +.panel>.panel-body+.table, +.panel>.panel-body+.table-responsive, +.panel>.table+.panel-body, +.panel>.table-responsive+.panel-body { + border-top: 1px solid #202020; +} + +a { + color: #c6c6c6; + text-decoration: none; +} + +a:focus, a:hover { + color: #c6c6c6; + text-decoration: none; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: #131313; +} + +.btn-default { + color: #c6c6c6; + background-color: #010101; + border-color: #454545; +} + +.btn-default.active, .btn-default:active { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-default:hover { + color: #c6c6c6; + background-color: #131313; + border-color: #767676; +} + +.btn-default.focus, .btn-default:focus { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .btn-default:active:focus, .btn-default:active:hover, .open>.dropdown-toggle.btn-default.focus, .open>.dropdown-toggle.btn-default:focus, .open>.dropdown-toggle.btn-default:hover { + color: #212121; + background-color: #010101; + border-color: #171717; +} + +.navbar-default .navbar-nav>li>a { + color: #404041; +} + +.navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover { + color: #404041; + background-color: #0c0c0c; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: #a2a2a2; + text-align: center; + background-color: #131313; + border: 1px solid #2e2e2e; + border-radius: 4px; +} + +.modal-body { + background-color: #000; + border: 1px solid #202020; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.modal-header { + color: #c6c6c6; + border: 1px solid #202020; + border-bottom: none; + background-color: #000; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.form-control { + background-color: #111111; + border: 1px solid #333333; + color: #c6c6c6; +} + +.btn-success { + color: #c6c6c6; + background-color: #010101; + border-color: #454545; +} + +.btn-success.active, .btn-success:active { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-success.focus, .btn-success:focus { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-success:hover { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-success.active.focus, .btn-success.active:focus, .btn-success.active:hover, .btn-success:active.focus, .btn-success:active:focus, .btn-success:active:hover, .open>.dropdown-toggle.btn-success.focus, .open>.dropdown-toggle.btn-success:focus, .open>.dropdown-toggle.success:hover { + color: #212121; + background-color: #010101; + border-color: #171717; +} + +.btn-default.disabled, .btn-default.disabled.active, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled:focus, .btn-default.disabled:hover, .btn-default[disabled], .btn-default[disabled].active, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled]:focus, .btn-default[disabled]:hover, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default.active, fieldset[disabled] .btn-default.focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:hover { + + background-color: #111; + border-color: #333; + color: #333; + +} + +.panel-group .panel-heading+.panel-collapse>.list-group, .panel-group .panel-heading+.panel-collapse>.panel-body { + border-top: 1px solid #212121; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #111111; + opacity: 1; +} + +pre { + color: #c6c6c6; + background-color: #111111; + border: 1px solid #333333; +} + +.alert-info { + color: #a94442; + background-color: #000; + border-color: #000; +} + +.alert-success { + color: #a94442; + background-color: #000; + border-color: #000; +} + +.table { + color: #c6c6c6; + background-color: #000; +} + +.table > thead > tr > th { + border-bottom: 2px solid #333; +} + +.table > tbody > tr.active > td, .table > tbody > tr.active > th, .table > tbody > tr > td.active, .table > tbody > tr > th.active, .table > tfoot > tr.active > td, .table > tfoot > tr.active > th, .table > tfoot > tr > td.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, .table > thead > tr > td.active, .table > thead > tr > th.active { + color: #c6c6c6; + background-color: #000; + border-color: #333; +} + +.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th { + border-top: 1px solid #333; +} + +.progress-bar { + background-color: #202020; + +} + +.progress { + background-color: #111; +} + +.alert-danger { + color: #a94442; + background-color: #000; + border-color: #000; +} + +.table-striped > tbody > tr:nth-of-type(2n+1) { + background-color: #000; +} + +tr:hover td { + background: #000; +} + +.text-info { + color: #a94442; +} + +.open > .dropdown-menu { + background-color: #0c0c0c; + border-color: #181818; + color: #c6c6c6; +} + +.dropdown-menu > li > a { + color: #777; +} + +.dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover { + color: #777; + background-color: #131313; +} + +.btn-info { + color: #c6c6c6; + background-color: #010101; + border-color: #454545; +} + +.btn-info:hover { + color: #c6c6c6; + background-color: #131313; + border-color: #767676; +} + +.btn-info.active, .btn-info:active { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-info.focus, .btn-info:focus { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-info.active.focus, .btn-info.active:focus, .btn-info.active:hover, .btn-info:active.focus, .btn-info:active:focus, .btn-info:active:hover, .open>.dropdown-toggle.btn-info.focus, .open>.dropdown-toggle.btn-info:focus, .open>.dropdown-toggle.btn-info:hover { + color: #212121; + background-color: #010101; + border-color: #171717; +} + +.btn-danger { + color: #c6c6c6; + background-color: #010101; + border-color: #454545; +} + +.btn-danger:hover { + color: #c6c6c6; + background-color: #131313; + border-color: #767676; +} + +.btn-danger.active, .btn-danger:active { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-danger.focus, .btn-danger:focus { + color: #c6c6c6; + background-color: #010101; + border-color: #212121; +} + +.btn-danger.active.focus, .btn-danger.active:focus, .btn-danger.active:hover, .btn-danger:active.focus, .btn-danger:active:focus, .btn-danger:active:hover, .open>.dropdown-toggle.btn-danger.focus, .open>.dropdown-toggle.btn-danger:focus, .open>.dropdown-toggle.btn-danger:hover { + color: #212121; + background-color: #010101; + border-color: #171717; +} +.btn-switch { + position: relative; + display: block; + width: 50px; + height: 25px; + cursor: pointer; + background-color: darkgray; + border: 2px solid darkgray; + border-radius: 40px; + +} +.btn-switch--on { + background-color: #ccffff; + border: 2px solid #ccffff; +} \ No newline at end of file diff --git a/Themes/css/main.css b/Themes/css/main.css new file mode 100644 index 0000000..9c42935 --- /dev/null +++ b/Themes/css/main.css @@ -0,0 +1,203 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #f8f8f8; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #eee; +} + +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid #e7e7e7; +} + +.sidebar .active { + background-color: #eee; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #e7e7e7; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #fff; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #fff !important; + word-wrap: break-word !important; + border: 1px solid #ccc !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "WiFi Pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; +} \ No newline at end of file diff --git a/Themes/css/malware.css b/Themes/css/malware.css new file mode 100644 index 0000000..febedcf --- /dev/null +++ b/Themes/css/malware.css @@ -0,0 +1,478 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:red; + font-family: monospace; +} + +i { + color: red; + font: monospace; +} + +b, strong { + font-weight: 700; + font-family: monospace; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: monospace; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: red; + text-align: center; + background-color: black; + border: 1px solid red; + border-radius: 4px; +} + +.panel-default { + border-color: red; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid red; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: red; + white-space:nowrap; + background-color: black; + border: red; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: red; + background-color: black; + background-image: none; + border: 1px solid red; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid red; + border-top: 1px solid red; +} + +table { + background-color: black; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: black; +} + +* { + color: red; + border-color: red; + border-top: red; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: red; + word-break: break-all; + word-wrap: break-word; + background-color: #000000; + border: 1px solid red; + border-radius: 4px; + font-family: monospace; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #000000; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #000; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: darkred; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #ff0000; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1); +} + +.table>tbody>tr.active>td, .table>tbody>tr.active>th, .table>tbody>tr>td.active, .table>tbody>tr>th.active, .table>tfoot>tr.active>td, .table>tfoot>tr.active>th, .table>tfoot>tr>td.active, .table>tfoot>tr>th.active, .table>thead>tr.active>td, .table>thead>tr.active>th, .table>thead>tr>td.active, .table>thead>tr>th.active { + background-color: #000000; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid darkred; + color:red; +} + +.btn { + background-color: black; + font-family: monospace; +} + +.alert-info { + color: red; + background-color: black; + border-color: red; +} + +p { + color: red; + font-family: monospace; +} + +.text-muted { + color:darkred; +} + +.h3 h3 { + color:red; +} +.h2, h2 { + font-size: 30px; + color:red; +} +.h1, h1 { + font-size: 30px; + color:red; +} + +.btn-default { + color:red; + border-color: red; +} + +.btn-default:hover { + color: red; + background-color: red; + border-color: red; +} + +.sidebar .active { + background-color: #13033a; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #000000; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #000; + opacity: 1; + color: red; +} + +.panel-footer { + padding: 10px 15px; + background-color: #000000; + border-top: 1px solid darkred; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: #000; + opacity: 1; + color: red; + font-family: monospace; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #000; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #000 !important; + word-wrap: break-word !important; + border: 1px solid #000 !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:red; +} + +.alert-danger { + color: red; + background-color: black; + border-color: red; +} + +.panel-title { + background-color:black; + color: red; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: red; +} + +.panel-body { + background-color:black; + font-family:monospace; +} + +.panel-heading { + background-color:black; +} + +.panel-default>.panel-heading { + color: red; + background-color: black; + border-color: red; + border-bottom-color: red; + border-bottom: red; +} + +td { + background-color:black; +} +.nav { + background-color:black; +} +.sidebar-nav.navbar-collapse { + background-color:black; +} +.navbar-default{ + background-color:black; +} +.navbar-static-top { + background-color:black; + border-color: red; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: monospace; + background-color: red; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: black; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid red; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid red; +} + +.modal-content { + position: relative; + background-color: black; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); +} \ No newline at end of file diff --git a/Themes/css/morning.css b/Themes/css/morning.css new file mode 100644 index 0000000..331bc20 --- /dev/null +++ b/Themes/css/morning.css @@ -0,0 +1,464 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:cornflowerblue; + font-family:cursive; +} + +i { + color: cornflowerblue; + font: cursive; +} + +b, strong { + font-weight: 700; + font-family: cursive; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: cursive; + font-weight: 500; + line-height: 1.1; + color: cornflowerblue; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: rosybrown; + text-align: center; + background-color: wheat; + border: 1px solid rosybrown; + border-radius: 4px; +} + +.panel-default { + border-color: rosybrown; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid rosybrown; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: cornflowerblue; + white-space:nowrap; + background-color: wheat; + border: rosybrown; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: rosybrown; + background-color: wheat; + background-image: none; + border: 1px solid rosybrown; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid rosybrown; + border-top: 1px solid rosybrown; +} + +table { + background-color: wheat; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: wheat; +} + +* { + color: rosybrown; + border-color: rosybrown; + border-top: rosybrown; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid wheat; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: rosybrown; + word-break: break-all; + word-wrap: break-word; + background-color: wheat; + border: 1px solid rosybrown; + border-radius: 4px; + font-family: cursive; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: wheat; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: wheat; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: rosybrown; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid rosybrown; + color:cornflowerblue; +} + +.btn { + background-color: wheat; + font-family: cursive; +} + +.alert-info { + color: rosybrown; + background-color: wheat; + border-color: rosybrown; +} + +p { + color: rosybrown; + font-family: cursive; +} + +.text-muted { + color:darkmagenta; +} + +.h3 h3 { + color:cornflowerblue; +} +.h2, h2 { + font-size: 30px; + color:cornflowerblue; +} +.h1, h1 { + font-size: 30px; + color:cornflowerblue; +} + +.btn-default { + color:rosybrown; + border-color: rosybrown; +} + +.btn-default:hover { + color: rosybrown; + background-color: rosybrown; + border-color: rosybrown; +} + +.sidebar .active { + background-color: wheat; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid wheat; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: wheat; + opacity: 1; + color: rosybrown; +} + +.panel-footer { + padding: 10px 15px; + background-color: wheat; + border-top: 1px solid rosybrown; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: wheat; + opacity: 1; + color: rosybrown; + font-family: cursive; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: wheat; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: wheat !important; + word-wrap: break-word !important; + border: 1px solid wheat !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:rosybrown; +} + +.alert-danger { + color: rosybrown; + background-color: wheat; + border-color: rosybrown; +} + +.panel-title { + background-color:wheat; + color: rosybrown; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: rosybrown; +} + +.panel-body { + background-color:wheat; + font-family: cursive; +} + +.panel-heading { + background-color:wheat; +} + +.panel-default>.panel-heading { + color: cornflowerblue; + background-color: wheat; + border-color: rosybrown; + border-bottom-color: rosybrown; + border-bottom: rosybrown; +} + +td { + background-color:wheat; +} +.nav { + background-color:wheat; +} +.sidebar-nav.navbar-collapse { + background-color:wheat; +} +.navbar-default{ + background-color:wheat; +} +.navbar-static-top { + background-color:wheat; + border-color: rosybrown; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: cursive; + background-color: rosybrown; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: wheat; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid rosybrown; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid rosybrown; +} +.modal-content { + position: relative; + background-color: wheat; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); +} \ No newline at end of file diff --git a/Themes/css/neon.css b/Themes/css/neon.css new file mode 100644 index 0000000..3cc8433 --- /dev/null +++ b/Themes/css/neon.css @@ -0,0 +1,457 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:magenta; + font-family: monospace; +} + +i { + color: lime; + font: monospace; +} + +b, strong { + font-weight: 700; + font-family: monospace; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: monospace; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: lime; + text-align: center; + background-color: purple; + border: 1px solid lime; + border-radius: 4px; +} + +.panel-default { + border-color: lime; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid lime; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: lime; + white-space:nowrap; + background-color: purple; + border: lime; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: lime; + background-color: purple; + background-image: none; + border: 1px solid lime; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid lime; + border-top: 1px solid lime; +} + +table { + background-color: purple; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: purple; +} + +* { + color: lime; + border-color: lime; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: lime; + word-break: break-all; + word-wrap: break-word; + background-color: #000000; + border: 1px solid lime; + border-radius: 4px; + font-family: monospace; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #000000; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #000; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: limegreen; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid #18ff00; + color:lime; +} + +.btn { + background-color: purple; + font-family: monospace; +} + +.alert-info { + color: lime; + background-color: purple; + border-color: lime; +} + +p { + color: lime; + font-family: monospace; +} + +.text-muted { + color:violet; +} + +.h3 h3 { + color:lime; +} +.h2, h2 { + font-size: 30px; + color:lime; +} +.h1, h1 { + font-size: 30px; + color:lime; +} + +.btn-default { + color:lime; + border-color: lime; +} + +.btn-default:hover { + color: magenta; + background-color: lime; + border-color: #adadad; +} + +.sidebar .active { + background-color: #13033a; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #000000; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #000; + opacity: 1; + color: lime; +} + +.panel-footer { + padding: 10px 15px; + background-color: #000000; + border-top: 1px solid #0F0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: #000; + opacity: 1; + color: lime; + font-family: monospace; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #000; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #000 !important; + word-wrap: break-word !important; + border: 1px solid #000 !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "Neon Pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:lime; +} + +.alert-danger { + color: lime; + background-color: purple; + border-color: lime; +} + +.panel-title { + background-color:purple; + color: lime; +} + +.panel-body { + background-color:black; + font-family:monospace; +} + +.panel-heading { + background-color:purple; +} + +.panel-default>.panel-heading { + color: lime; + background-color: purple; + border-color: lime; +} + +td { + background-color:black; +} +.nav { + background-color:black; +} +.sidebar-nav.navbar-collapse { + background-color:black; +} +.navbar-default{ + background-color:black; +} +.navbar-static-top { + background-color:black; + border-color: lime; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: monospace; + background-color: lime; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: magenta; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid lime; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid lime; +} +.modal-content { + position: relative; + background-color: black; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); +} \ No newline at end of file diff --git a/Themes/css/spring.css b/Themes/css/spring.css new file mode 100644 index 0000000..39a43d8 --- /dev/null +++ b/Themes/css/spring.css @@ -0,0 +1,479 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:#00e673; + font-family: sans-serif; +} + +i { + color: #00e673; + font: sans-serif; +} + +b, strong { + font-weight: 700; + font-family: sans-serif; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: sans-serif; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: #00e673; + text-align: center; + background-color: #00e673; + border: 1px solid #00e673; + border-radius: 4px; +} + +.panel-default { + border-color: #00e673; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid #00e673; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #00e673; + white-space:nowrap; + background-color: #6666ff; + border: #00e673; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #00e673; + background-color: #6666ff; + background-image: none; + border: 1px solid #00e673; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid #00e673; + border-top: 1px solid #00e673; +} + +table { + background-color: #6666ff; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: #6666ff; +} + +* { + color: #00e673; + border-color: #00e673; + border-top: #00e673; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #6666ff; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #00e673; + word-break: break-all; + word-wrap: break-word; + background-color: #6666ff; + border: 1px solid #00e673; + border-radius: 4px; + font-family: sans-serif; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #6666ff; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #6666ff; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: lightblue; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #ff0000; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1); +} + +.table>tbody>tr.active>td, .table>tbody>tr.active>th, .table>tbody>tr>td.active, .table>tbody>tr>th.active, .table>tfoot>tr.active>td, .table>tfoot>tr.active>th, .table>tfoot>tr>td.active, .table>tfoot>tr>th.active, .table>thead>tr.active>td, .table>thead>tr.active>th, .table>thead>tr>td.active, .table>thead>tr>th.active { + background-color: #6666ff; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid dark#00e673; + color:#00e673; +} + +.btn { + background-color: #6666ff; + font-family: sans-serif; +} + +.alert-info { + color: #00e673; + background-color: springgreen; + border-color: #00e673; +} + +p { + color: #00e673; + font-family: sans-serif; +} + +.text-muted { + color:#00e673; +} + +.h3 h3 { + color:#00e673; +} +.h2, h2 { + font-size: 30px; + color:#00e673; +} +.h1, h1 { + font-size: 30px; + color:#00e673; +} + +.btn-default { + color:#00e673; + border-color: #00e673; +} + +.btn-default:hover { + color: #00e673; + background-color: #00e673; + border-color: #00e673; +} + +.sidebar .active { + background-color: #00e673; + color:black +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #6666ff; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #6666ff; + opacity: 1; + color: #00e673; +} + +.panel-footer { + padding: 10px 15px; + background-color: #6666ff; + border-top: 1px solid dark#00e673; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: #6666ff; + opacity: 1; + color: #00e673; + font-family: sans-serif; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #6666ff; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #000038 !important; + word-wrap: break-word !important; + border: 1px solid #000038 !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:#00e673; +} + +.alert-danger { + color: #00e673; + background-color: #6666ff; + border-color: #00e673; +} + +.panel-title { + background-color:#6666ff; + color: #00e673; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #00e673; +} + +.panel-body { + background-color:#6666ff; + font-family:sans-serif; +} + +.panel-heading { + background-color:#6666ff; +} + +.panel-default>.panel-heading { + color: #00e673; + background-color: #6666ff; + border-color: #00e673; + border-bottom-color: #00e673; + border-bottom: #00e673; +} + +td { + background-color:#6666ff; +} +.nav { + background-color:#6666ff; +} +.sidebar-nav.navbar-collapse { + background-color:#6666ff; +} +.navbar-default{ + background-color:#6666ff; +} +.navbar-static-top { + background-color:#6666ff; + border-color: #00e673; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: sans-serif; + background-color: #00e673; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: #6666ff; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid #00e673; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #00e673; +} + +.modal-content { + position: relative; + background-color: #6666ff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); +} \ No newline at end of file diff --git a/Themes/css/starstuff.css b/Themes/css/starstuff.css new file mode 100644 index 0000000..6f0d2bd --- /dev/null +++ b/Themes/css/starstuff.css @@ -0,0 +1,478 @@ +.truncated { + text-overflow: ellipsis; + overflow: hidden +} + +a { + color:gold; + font-family: sans-serif; +} + +i { + color: gold; + font: sans-serif; +} + +b, strong { + font-weight: 700; + font-family: sans-serif; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: sans-serif; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: gold; + text-align: center; + background-color: #000038; + border: 1px solid gold; + border-radius: 4px; +} + +.panel-default { + border-color: gold; +} + +.panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { + border-top: 1px solid gold; +} + +.dropdown-menu>li>a { + display:block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: gold; + white-space:nowrap; + background-color: #000038; + border: gold; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: gold; + background-color: #000038; + background-image: none; + border: 1px solid gold; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-bottom: 1px solid gold; + border-top: 1px solid gold; +} + +table { + background-color: #000038; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; + background-color: #000038; +} + +* { + color: gold; + border-color: gold; + border-top: gold; +} +.uppercase { + text-transform: uppercase; +} + +.table-layout-fixed { + table-layout: fixed; +} + +.module-icon { + display: inline; + height: 24px; + width: 24px; +} + +.fixed-addon-width { + min-width: 70px; + text-align: left; +} + +.fixed-addon-width-2 { + min-width: 90px; + text-align: left; +} + + +.fixed-addon-width-3 { + min-width: 110px; + text-align: left; +} + +.fixed-width-200 { + min-width: 200px; +} + +.caret-reversed { + border-top-width: 0; + border-bottom: 4px solid #000038; +} + +.image-small-18 { + height: 18px; +} + +.center-text { + text-align: center; +} + +.scrollable-pre { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: gold; + word-break: break-all; + word-wrap: break-word; + background-color: #000038; + border: 1px solid gold; + border-radius: 4px; + font-family: sans-serif; +} + +.log-pre { + max-height: 300px; +} + +.btn-fixed-length { + width: 70px; +} + +.title-message { + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + height: 9px; + border-radius: 3px; +} + +.padding-left { + margin-left: 10px; +} + +.select-inline { + font-weight: normal; +} + +body { + background-color: #000038; +} + +.logout { + cursor: pointer; +} + +.module-nav li a { + margin-left: 30px; +} + +.module-nav li:hover { + background-color: #000038; +} + +.nav>li>a:focus, .nav>li>a:hover { + text-decoration: none; + background-color: lightblue; +} +.sidebar .sidebar-nav.navbar-collapse { + padding-right: 0; + padding-left: 0; +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #ff0000; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1); +} + +.table>tbody>tr.active>td, .table>tbody>tr.active>th, .table>tbody>tr>td.active, .table>tbody>tr>th.active, .table>tfoot>tr.active>td, .table>tfoot>tr.active>th, .table>tfoot>tr>td.active, .table>tfoot>tr>th.active, .table>thead>tr.active>td, .table>thead>tr.active>th, .table>thead>tr>td.active, .table>thead>tr>th.active { + background-color: #000038; +} + +.sidebar ul li { + cursor: pointer; + border-bottom: 1px solid darkgold; + color:gold; +} + +.btn { + background-color: #000038; + font-family: sans-serif; +} + +.alert-info { + color: gold; + background-color: blue; + border-color: gold; +} + +p { + color: gold; + font-family: sans-serif; +} + +.text-muted { + color:darkgold; +} + +.h3 h3 { + color:gold; +} +.h2, h2 { + font-size: 30px; + color:gold; +} +.h1, h1 { + font-size: 30px; + color:gold; +} + +.btn-default { + color:gold; + border-color: gold; +} + +.btn-default:hover { + color: gold; + background-color: gold; + border-color: gold; +} + +.sidebar .active { + background-color: #13033a; +} + +@media(min-width:768px) { + .sidebar { + z-index: 1; + position: absolute; + width: 250px; + margin-top: 51px; + } + + .module-content { + position: inherit; + margin: 0 0 0 250px; + padding: 15px 30px; + border-left: 1px solid #000038; + } + + .navbar-top-links { + margin-left: 10px; + } +} + +.navbar-top-links { + margin-right: 5px; + margin-left: 10px; +} + +.navbar-top-links li { + display: inline-block; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #000038; + opacity: 1; + color: gold; +} + +.panel-footer { + padding: 10px 15px; + background-color: #000038; + border-top: 1px solid darkgold; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +textarea.form-control { + height: auto; + background-color: #000038; + opacity: 1; + color: gold; + font-family: sans-serif; +} +.navbar { + margin-bottom: 0; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.module-content { + padding: 15px 15px; + background-color: #000038; +} + +.pointer { + cursor: pointer; +} + +.dropdown-menu { + cursor: pointer; +} + +.dropdown-menu-top { + max-height: 300px !important; + overflow-y: auto !important; +} + +@media(max-width:768px) { + .dropdown-menu-top { + margin: auto !important; + position: absolute !important; + background-color: #000038 !important; + word-wrap: break-word !important; + border: 1px solid #000038 !important; + width: 300px !important; + max-width: 300px !important; + } + .dropdown-menu-top li a { + white-space: normal !important; + } + + .dropdown-menu-logout { + max-width: 50px !important; + } +} + +.login-logo { + margin: 0 auto; + padding-bottom: 10px; + max-width: 150px; +} + +.brand-logo { + content: url('/img/logo.png'); + max-height: 30px; + padding-bottom: 5px; +} + +.brand-text::after { + content: "pineapple"; + padding-top: 3px; + padding-left: 5px; + float: right; + color:gold; +} + +.alert-danger { + color: gold; + background-color: #000038; + border-color: gold; +} + +.panel-title { + background-color:#000038; + color: gold; +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: gold; +} + +.panel-body { + background-color:#000038; + font-family:sans-serif; +} + +.panel-heading { + background-color:#000038; +} + +.panel-default>.panel-heading { + color: gold; + background-color: #000038; + border-color: gold; + border-bottom-color: gold; + border-bottom: gold; +} + +td { + background-color:#000038; +} +.nav { + background-color:#000038; +} +.sidebar-nav.navbar-collapse { + background-color:#000038; +} +.navbar-default{ + background-color:#000038; +} +.navbar-static-top { + background-color:#000038; + border-color: gold; +} +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + font-family: sans-serif; + background-color: gold; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + color: #000038; +} +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid gold; +} +.table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid gold; +} + +.modal-content { + position: relative; + background-color: #000038; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); +} \ No newline at end of file diff --git a/Themes/img/favicon-dark.ico b/Themes/img/favicon-dark.ico new file mode 100644 index 0000000000000000000000000000000000000000..afb37ed9021682534019f6b2d457eeb80cbdc355 GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah2>S z4={E+nQh0wz!>i7;uxZFUiYHE_hm+g;}4&2|63v*GD}%C@bv_dj!4CpxRwRMP3(#9 zJzl-?)>tw9fnmqHIHMO2!u}mRVbFBo*`0516Rw|s{zHWEV(E*`$!8)AmaqFz?;3x6 z+S8t;)1r=To}(*UE4V2Cdey0(&zT*pr&Y_clshy=Bi5=UUO_QmvAUQh^kMk%6Iwu7Rnpp+$(HrIm@1 qm4TVAfr*uY!Q6*kacg+PDmVpb1B0ilpUXO@geCz0!{87A literal 0 HcmV?d00001 diff --git a/Themes/img/logo-dark.png b/Themes/img/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5f7711016ab1317e9d275f461629c672c6a473 GIT binary patch literal 26507 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 literal 0 HcmV?d00001 diff --git a/Themes/img/throbber-dark.gif b/Themes/img/throbber-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..7877db2f0ac1b3f63e8e0a110406424cb794f46f GIT binary patch literal 1739 zcmciDX-v~+90%}!?^6Cy3Z>lAKUl2D(Sc$CVFhfZ+#6Sm6e*TN4lM&}GbB>vD8-_j zHc){wjsl{MA}YfPh#;uw1jP+OKxL?N!7ZAQC9uM_=w9u`lD&9dKELGm$@lp_``9eH zJD&`YfnPB|XLmOUfZ)G+ZEP_CEQEnS5UW{)KHlk0K}x-3kL%3anf9{@ z$ltGf4>1|>JF(egiAJ3K33LH`6iX$BjWJ0B5Rtrq{@Ih$Zi1+a4^))Rl_ck;tu{?& z+HKjoKb}v9as(nM$`h8Hu^Y|_%?E;VlHioAV&BSAyn|!8YamJnDeBv{XDYbPc+199 zye{kgG3PH(6lICmx5ps7>_&Lv9Znr_j>wxAx_abdVVtG1cY1d2+5EzS4)FJ;4rl-e z5CMXAEr$5B>9r$;ZsUb?qDVF{4-v;n36ByQDrzox zP_uLo*~GGhTpeS9lt^lTjiEXle18qq)efbJxBa*lWc*vID*;Hm?1G98)}{E42wU1+ zTaHZC+AA_F`L7524RJ8WE(=qgj?3YdRA$exuc@CyKhC`p2 zMj6daT0ejBa_Oh#SLU1We;R#UZ|z_6q+GfqTJN1Km46ND##{fq?67ga(83e-B_>hKJ8DpDf}v%zopDHaUaFJ3 zBZgvY2NxohHe{0;G90-t(%K5cVGBvt29!9lRaKMts5XZ}YGf@6LkexX)B!cH8lgJs z8P+hm3vDeacT2+aCkESk>+pbb5hXmse(|4v#@E9!JPi zGyN53jq0EFWB2Lhx7gNzAqXSJ#Eo6fmWICBA%Y4IH(aVTd<3e58;G3rToziNHye2e zflmy;hh~Jl6#;jlnQ^VbF7#_+HD=q1*u~mJ_l{1VJv!{U*mq>uos(UhOR2Ntm%E}t zoljEue+WnRZ3rL3HGWStLMi3nNRWM*VCt4s)FNX{yUq&Y0L9xV5S8ytbxV5%BGi%2;# zmr~XmLaH_okXO1L%o{${lXi|@nX5T|yit~>EzH}PNa_t7EP-#Gk**P?G*W=F_m;>R z$5(cQbcA;hKr|Y>TVP)wb(P9U=YPkj2jMrDa0DsW59jYcWVj?N3FuFfTCy*;j8##? zo&5iygw}o&#@h0W5ZgDe(awKhnYjd(@l-L(*rJ1_>gl{g0b2$iHAe|2mftTfj;`2@ y;MIJM)C|Jv5NZ___w`;&`GN@MTj5<&!~V`km-hbB!`a%tx>vO0LAebK@caWW1$^=V literal 0 HcmV?d00001 diff --git a/Themes/js/module.js b/Themes/js/module.js new file mode 100644 index 0000000..d6d787c --- /dev/null +++ b/Themes/js/module.js @@ -0,0 +1,558 @@ +registerController("ThemesController", ['$api', '$scope','$window','$route', '$http', function ($api, $scope, $window, $route, $http) { + + getThemes(); + getCurrentTheme(); + backupFiles(); + + $scope.debug = true; + + $scope.themes = []; + $scope.themeToDelete = null; + $scope.themeDeleteValidation = ''; + $scope.messages = []; + $scope.newThemeName = ''; + $scope.throbber = true; + $scope.running = false; + $scope.current = ''; + $scope.library = true; + $scope.editor = true; + $scope.workshopTheme = {themeName: "", file: "", code: "", title: ""}; + $scope.editThemeFile = {themeName: "", file: "", code: ""}; + $scope.colors = ['dark', 'light', 'red', 'blue', 'green', 'purple', 'orange', 'yellow', 'pink']; + $scope.brightness = ['light', 'normal', 'dark']; + $scope.working = false; + + // Dark and White + $scope.throbbercontrast = true; // true == light -> false == dark + $scope.logocontrast = true; + $scope.faviconcontrast = true; + $scope.reconcontrast = true; + $scope.logocontrastText = 'light'; + $scope.faviconcontrastText = 'light'; + $scope.throbbercontrastText = 'light'; + + // Collor and brightness + $scope.allcontrastText = 'light'; + $scope.allcontrastBrightness = 'normal'; + $scope.dashboardcontrastText = 'light'; + $scope.dashboardcontrastBrightness = 'normal'; + $scope.reconcontrastText = 'light'; + $scope.reconcontrastBrightness = 'normal'; + $scope.profilingcontrastText = 'light'; + $scope.profilingcontrastBrightness = 'normal'; + $scope.clientscontrastText = 'light'; + $scope.clientscontrastBrightness = 'normal'; + $scope.modulescontrastText = 'light'; + $scope.modulescontrastBrightness = 'normal'; + $scope.filterscontrastText = 'light'; + $scope.filterscontrastBrightness = 'normal'; + $scope.pineapcontrastText = 'light'; + $scope.pineapcontrastBrightness = 'normal'; + $scope.trackingcontrastText = 'light'; + $scope.trackingcontrastBrightness = 'normal'; + $scope.loggingcontrastText = 'light'; + $scope.loggingcontrastBrightness = 'normal'; + $scope.reportingcontrastText = 'light'; + $scope.reportingcontrastBrightness = 'normal'; + $scope.networkingcontrastText = 'light'; + $scope.networkingcontrastBrightness = 'normal'; + $scope.configurationcontrastText = 'light'; + $scope.configurationcontrastBrightness = 'normal'; + $scope.advancedcontrastText = 'light'; + $scope.advancedcontrastBrightness = 'normal'; + $scope.helpcontrastText = 'light'; + $scope.helpcontrastBrightness = 'normal'; + + $scope.switchOn = { + "position" : "relative", + "display" : "block", + "width" : "50px", + "height" : "25px", + "cursor" : "pointer", + "border" : "2px solid darkgray", + "background-color" : "darkgray", + "border-radius" : "40px" + } + + $scope.switchOff = { + "position" : "relative", + "display" : "block", + "width" : "50px", + "height" : "25px", + "cursor" : "pointer", + "border" : "2px solid darkgray", + "background-color" : "white", + "border-radius" : "40px" + } + $scope.selectOptions = { + "position" : "relative", + "display" : "block", + "width" : "100px", + "height" : "25px", + "cursor" : "pointer", + "border" : "2px solid darkgray", + "background-color" : "white", + "color" : "black", + "border-radius" : "40px" + } + $scope.changeThrobber = function(){ + $scope.throbbercontrast = !$scope.throbbercontrast; + $scope.throbbercontrastText = 'light'; + if (!$scope.throbbercontrast) { + $scope.throbbercontrastText = 'dark'; + } + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Throbber', + light: $scope.throbbercontrast + }, function(response) { + $scope.sendMessage("Throbber", "set to " + $scope.throbbercontrastText); + log("changeThrobber", response.message); + }); + }; + + $scope.changeLogo = function(){ + $scope.logocontrast = !$scope.logocontrast; + $scope.logocontrastText = 'light'; + if (!$scope.logocontrast) { + $scope.logocontrastText = 'dark'; + } + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Logo', + light: $scope.logocontrast + }, function(response) { + $scope.sendMessage("Logo", "set to " + $scope.logocontrastText); + log("changeLogo", response.message); + }); + }; + + $scope.changeFavicon = function(){ + $scope.faviconcontrast = !$scope.faviconcontrast; + $scope.faviconcontrastText = 'light'; + if (!$scope.faviconcontrast) { + $scope.faviconcontrastText = 'dark'; + } + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Icon', + light: $scope.faviconcontrast + }, function(response) { + $scope.sendMessage("Icon", "set to " + $scope.faviconcontrastText); + log("changeFavicon", response.message); + }); + }; + $scope.changeAllIcons = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'All', + color: $scope.allcontrastText, + brightness: $scope.allcontrastBrightness + }, function(response) { + for (msg in response) { + $scope.sendMessage("All Icons", "set to " + $scope.allcontrastText + "(" + allcontrastBrightness + ")"); + log("changeAllIcons", "Success? " + response.success + " " + response.message); + } + }); + }; + $scope.changeDashboard = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Dashboard', + color: $scope.dashboardcontrastText, + brightness: $scope.dashboardcontrastBrightness + }, function(response) { + $scope.sendMessage("Dashboard Icon", "set to " + $scope.dashboardcontrastText + " (" + $scope.dashboardcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeRecon = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Recon', + color: $scope.reconcontrastText, + brightness: $scope.reconcontrastBrightness + }, function(response) { + $scope.sendMessage("Recon Icon", "set to " + $scope.reconcontrastText + " (" + $scope.reconcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeProfiling = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Profiling', + color: $scope.profilingcontrastText, + brightness: $scope.profilingcontrastBrightness + }, function(response) { + $scope.sendMessage("Profiling Icon", "set to " + $scope.profilingcontrastText + " (" + $scope.profilingcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeClients = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Clients', + color: $scope.clientscontrastText, + brightness: $scope.clientscontrastBrightness + }, function(response) { + $scope.sendMessage("Clients Icon", "set to " + $scope.clientscontrastText + " (" + $scope.clientscontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeModules = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'ModuleManager', + color: $scope.modulescontrastText, + brightness: $scope.modulescontrastBrightness + }, function(response) { + $scope.sendMessage("ModuleManager Icon", "set to " + $scope.modulescontrastText + " (" + $scope.modulescontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeFilters = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Filters', + color: $scope.filterscontrastText, + brightness: $scope.filterscontrastBrightness + }, function(response) { + $scope.sendMessage("Filters Icon", "set to " + $scope.filterscontrastText + " (" + $scope.filterscontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changePineap = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'PineAP', + color: $scope.pineapcontrastText, + brightness: $scope.pineapcontrastBrightness + }, function(response) { + $scope.sendMessage("Filters Icon", "set to " + $scope.pineapcontrastText + " (" + $scope.pineapcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeTracking = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Tracking', + color: $scope.trackingcontrastText, + brightness: $scope.trackingcontrastBrightness + }, function(response) { + $scope.sendMessage("Tracking Icon", "set to " + $scope.trackingcontrastText + " (" + $scope.trackingcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeLogging = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Logging', + color: $scope.loggingcontrastText, + brightness: $scope.loggingcontrastBrightness + }, function(response) { + $scope.sendMessage("Logging Icon", "set to " + $scope.loggingcontrastText + " (" + $scope.loggingcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeReporting = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Reporting', + color: $scope.reportingcontrastText, + brightness: $scope.reportingcontrastBrightness + }, function(response) { + $scope.sendMessage("Reporting Icon", "set to " + $scope.reportingcontrastText + " (" + $scope.reportingcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeNetworking = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Networking', + color: $scope.networkingcontrastText, + brightness: $scope.networkingcontrastBrightness + }, function(response) { + $scope.sendMessage("Networking Icon", "set to " + $scope.networkingcontrastText + " (" + $scope.networkingcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeConfiguration = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Configuration', + color: $scope.configurationcontrastText, + brightness: $scope.configurationcontrastBrightness + }, function(response) { + $scope.sendMessage("Configuration Icon", "set to " + $scope.configurationcontrastText + " (" + $scope.configurationcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeAdvanced = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Advanced', + color: $scope.advancedcontrastText, + brightness: $scope.advancedcontrastBrightness + }, function(response) { + $scope.sendMessage("Advanced Icon", "set to " + $scope.advancedcontrastText + " (" + $scope.advancedcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + $scope.changeHelp = function(){ + $api.request({ + module: "Themes", + action: "replaceImage", + img: 'Help', + color: $scope.helpcontrastText, + brightness: $scope.helpcontrastBrightness + }, function(response) { + $scope.sendMessage("Help Icon", "set to " + $scope.helpcontrastText + " (" + $scope.helpcontrastBrightness + ")"); + log("changeDashboard", "Success? " + response.success + " " + response.message); + }); + }; + function log(fn, message) { + if ($scope.debug === true) { + console.log("fn[" + fn + "]-> " + message); + } + }; + function backupFiles() { + $api.request({ + module: "Themes", + action: "backupFiles" + }, function(response) { + log('backupFiles', response.message); + for (i=0; i + +
+
+ +
+
+ + + + +
{{ control.title }} +
Current Theme: {{ current }}
+
+ Refresh

+ + + +
+
+
+
+
+ +
+
+

No Messages...

+ Clear + All + + + + +
+
+
{{ message.title }} Dismiss
+

{{ message.msg }}

+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IconColorBrightness
Throbber {{ throbbercontrastText }} N/A
Logo {{ logocontrastText }} N/A
Favicon {{ faviconcontrastText }} N/A
Dashboard {{ dashboardcontrastText }} {{ dashboardcontrastBrightness }}
Recon {{ reconcontrastText }} {{ reconcontrastBrightness }}
Profiling {{ profilingcontrastText }} {{ profilingcontrastBrightness }}
Clients {{ clientscontrastText }} {{ clientscontrastBrightness }}
Modules {{ modulescontrastText }} {{ modulescontrastBrightness }}
Filters {{ filterscontrastText }} {{ filterscontrastBrightness }}
PineAP {{ pineapcontrastText }} {{ pineapcontrastBrightness }}
Tracking {{ trackingcontrastText }} {{ trackingcontrastBrightness }}
Logging {{ loggingcontrastText }} {{ loggingcontrastBrightness }}
Reporting {{ reportingcontrastText }} {{ reportingcontrastBrightness }}
Networking {{ networkingcontrastText }} {{ networkingcontrastBrightness }}
Configuration {{ configurationcontrastText }} {{ configurationcontrastBrightness }}
Advanced {{ advancedcontrastText }} {{ advancedcontrastBrightness }}
Help {{ helpcontrastText }} {{ helpcontrastBrightness }}
+
+
+
+
+ +
+
+ +
+
+
Themes
+
+
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + +
Theme NameLocationActivateDelete
{{ theme.title + }}{{ theme.storage }}Activate + Delete +
+
+
+ +
+

+ No Themes in Library to Display. +

+
+ +
+ +
+

Theme Editor | {{ workshopTheme.themeName }}

+ +
+ + + + + + + + + +
CSS Editor
+
+ +
+
+
+
+ +
+
+
Icons
+
+
+
+
+

Generic

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeImageLightDark
+ Throbber + + + +
+
+
+
+
+
+ Logo + + + +
+
+
+
+
+
+ Icon + + + +
+
+
+
+
+
+
+

Modules

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeImageColorBrightness
+ ALL + + + + + + + +
+ Dashboard + + + + + + + + +
Recon + + +
Profiling + + +
Clients + + +
Modules + + +
Filters + + +
PineAP + + +
Tracking + + +
Logging + + +
Reporting + + +
Networking + + +
Configuration + + +
Advanced + + +
Help + + +
+ +
+
+
+ + +
+
+
How To
+
+
+
+
    +
  • Share your new theme
  • +
      +
    • Navigate to the wifi pineapple modules repository
    • +
    • Add your theme .css file in the css directory of this module
    • +
    • Create a new pull request
    • +
    • Update the version number
    • +
    • Update the module version in module.info
    • +
    +
+
    +
  • Fix Images appearing broken/unable to be loaded
  • +
      +
    • Refresh the page
    • +
    • If the problem persists, see "Submit a Bug"
    • +
    +
+
    +
  • Fix a messy looking page after a save/refresh
  • +
      +
    • Reselect 'Activate' beside your theme
    • +
    • Refresh the page
    • +
    +
+
    +
  • Select the proper Image type
  • +
      +
    • Beside each Image type are two options "Light" and "Dark"
    • +
    • "Dark" images are intended for dark backgrounds
    • +
    • "Light" images are intended for light backgrounds
    • +
    +
+
    +
  • Use a theme once without a module
  • +
      +
    • Navigate to https://github.com/kbeflo/pineapple-themes
    • +
    • Select a theme and run the install.sh script
    • +
    +
+
    +
  • Submit a Bug
  • +
      +
    • Navigate to https://github.com/hak5/wifipineapple-modules/issues
    • +
    • Select the "New Issue" button
    • +
    • Tag @trashbo4t in your issue description
    • +
    +
+
+
+
+ + +
+ +
+
+
    +
  • 1.0
  • +
      +
    • Pending release of 1.0
    • +
    +
+
+
+
+
+
+ + diff --git a/Themes/module.info b/Themes/module.info new file mode 100644 index 0000000..54f518f --- /dev/null +++ b/Themes/module.info @@ -0,0 +1,6 @@ +{ + "title": "Themes", + "description": "Download, create, and share custom themes! With cross domain persistence and custom icon color adjustment", + "version": "1.0", + "author": "trashbo4t" +} diff --git a/Themes/module_icon.svg b/Themes/module_icon.svg new file mode 100644 index 0000000..bdef138 --- /dev/null +++ b/Themes/module_icon.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +