nbot

A clone of the eBot by @deStrO fully based on node.js with build in Web Page - WIP
git clone git://archive.git.mtrnord.blog/MTRNord/nbot.git
Log | Files | Refs | README | LICENSE

commit 64da18a6a82ecf4b73c5953bed65ae59a43f85fa
parent e4e5174269315f4a26c5d17583a8b31b0023453f
Author: MTRNord <mtrnord1@gmail.com>
Date:   Tue,  2 Aug 2016 20:17:46 +0200

feature(addServer) Preparing Add Server Form in Administration

Diffstat:
Mbackend/addServer.js | 15+++------------
Mstart.js | 1-
Mweb/server.js | 12++++++------
Aweb/theme/admin/index.html | 162+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aweb/theme/admin/pluginManager.html | 170+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mweb/theme/index.html | 9++++-----
Aweb/theme/js/AdminConnect.js | 22++++++++++++++++++++++
Mweb/theme/js/serverConnect.js | 6------
Dweb/theme/pluginManager.html | 170-------------------------------------------------------------------------------
9 files changed, 367 insertions(+), 200 deletions(-)

diff --git a/backend/addServer.js b/backend/addServer.js @@ -18,7 +18,7 @@ var addServer = module.exports = {} * @method start * @beta Work in Progress */ - addServer.start = function () { + addServer.start = function (socket, command) { var req = https.request({ host: 'raw.githubusercontent.com', port: 443, @@ -26,24 +26,14 @@ var addServer = module.exports = {} }); req.on('response', function(res){ - var len = parseInt(res.headers['content-length'], 10); - - console.log(); - var bar = new ProgressBar(' downloading [:bar] :percent :etas', { - complete: '=', - incomplete: ' ', - width: 20, - total: len - }); - res.on('data', function (chunk) { - bar.tick(chunk.length); fs.writeFile("csgo_servers/csgoserver", chunk, function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); + socket.emit('ScriptDownloaded', {response: "Download Success", command: command.command}) }); }); @@ -55,6 +45,7 @@ var addServer = module.exports = {} req.end(); req.on('error', (e) => { console.error(e); + socket.emit('ScriptDownloaded', {response: "Download Failed --> " + e, command: command.command}) }); }, /** diff --git a/start.js b/start.js @@ -10,6 +10,5 @@ var web = require("./web/server.js") var rcon = require("./backend/rcon.js") var pluginManager = require("./backend/pluginManager.js") rcon.start() -//console.log(pluginManager.getSourcemodVersions()) web.start() web.iojs() diff --git a/web/server.js b/web/server.js @@ -26,11 +26,11 @@ var server = module.exports = {}; app.get('/', function(req, res){ res.sendFile(path.join(__dirname, '/theme/index.html')); }); - app.get('/index', function(req, res){ - res.sendFile(path.join(__dirname, '/theme/index.html')); - }); app.get('/pluginManager', function(req, res){ - res.sendFile(path.join(__dirname, '/theme/pluginManager.html')); + res.sendFile(path.join(__dirname, '/theme/admin/pluginManager.html')); + }); + app.get('/admin', function(req, res){ + res.sendFile(path.join(__dirname, '/theme/admin/index.html')); }); app.use('/css', express.static(path.join(__dirname, '/theme/css'))); app.use('/js', express.static(path.join(__dirname, '/theme/js'))); @@ -60,8 +60,8 @@ var server = module.exports = {}; rcon.status().then(result => console.log('Got status', result)) //socket.emit('status_alert', {response: result}) }else { - if (command.command === "add_server") { - addserver.start() + if (command.command === "script_download") { + addserver.start(socket, command) }else { if (command.command === "refreshSourcemod") { pluginManager.getSourcemodVersions(socket, command) diff --git a/web/theme/admin/index.html b/web/theme/admin/index.html @@ -0,0 +1,162 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content="MTRNord"> + <link rel="icon" href="favicon.ico"> + + <title>nBot | Administration</title> + <!-- Bootstrap core CSS --> + <link href="css/bootstrap.min.css" rel="stylesheet"> + <link href="css/bootstrap-tour.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <!--<link href="css/bootstrap-theme.min.css" rel="stylesheet">--> + <!-- Custom styles for this template --> + <link href="css/theme.css" rel="stylesheet"> + <link href="css/sidebar.css" rel="stylesheet"> + <link href="css/pnotify.custom.min.css" media="all" rel="stylesheet" type="text/css" /> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <link href="//getbootstrap.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + <body> + <div id="wrapper" class="toggled"> + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Bootstrap theme</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="active"><a href="/admin">Admin</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + <!-- Sidebar --> + <div id="sidebar-wrapper"> + <ul class="sidebar-nav"> + <li class="sidebar-brand"> + <a href="#"> + Start Bootstrap + </a> + </li> + <li> + <a href="/">Dashboard</a> + </li> + <li> + <a href="pluginManager">Plugin Manager</a> + </li> + <li> + <a href="#">Overview</a> + </li> + <li> + <a href="#">Events</a> + </li> + <li> + <a href="#">About</a> + </li> + <li> + <a href="#">Services</a> + </li> + <li> + <a href="#">Contact</a> + </li> + </ul> + </div> + <!-- /#sidebar-wrapper --> + <!-- Main jumbotron for a primary marketing message or call to action --> + <div class="jumbotron"> + <div id="page-content-wrapper"> + <div class="container"> + <button type="button" class="btn btn-default" aria-label="Toggle Menu" href="#menu-toggle" id="menu-toggle"> + <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> MENU + </button> + <h1>Admin</h1> + <p>This is a eBot like CSGO Webadministration called nBot.</p> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title" id="install_sourcemod_1">Servers</h3> + </div> + <div class="panel-body"> + <div class="panel panel-default"> + <div class="panel-heading" id="install_sourcemod-data_1">Infos</div> + <div class="panel-body"> + <p><b>Placeholder</b></p> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading">Add Server</div> + <div class="panel-body"> + <ol> + <li style="font-weight: bold; font-size: large;" id="first"><button type="button" class="btn btn-info center-block" id="script_download" style="font-weight: normal; font-size: small;"><span class="glyphicon glyphicon glyphicon-download" aria-hidden="true"></span> Download Script</button></li> + <li style="font-weight: bold; font-size: large; display: none;" id="second"><p>SECOND</p></li> + </ol> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="container"> + <!-- Example row of columns --> + <div class="row"> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + </div> + + <hr> + + <footer> + <p>&copy; 2016 MTRNord &amp; Theme: &copy; 2015 Bootstrap</p> + </footer> + </div> <!-- /container --> + </div> + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> + <script type="text/javascript" src="js/bootstrap.min.js"></script> + <script type="text/javascript" src="https://cdn.socket.io/socket.io-1.4.5.js"></script> + <script type="text/javascript" src="js/pnotify.custom.min.js"></script> + <script type="text/javascript" src="js/bootstrap-tour.min.js"></script> + <script type="text/javascript" src="js/AdminConnect.js"></script> + <script type="text/javascript" src="js/tour.js"></script> + </body> +</html> diff --git a/web/theme/admin/pluginManager.html b/web/theme/admin/pluginManager.html @@ -0,0 +1,170 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content="MTRNord"> + <link rel="icon" href="favicon.ico"> + + <title>nBot | PluginManager</title> + <!-- Bootstrap core CSS --> + <link href="css/bootstrap.min.css" rel="stylesheet"> + <link href="css/bootstrap-tour.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <!--<link href="css/bootstrap-theme.min.css" rel="stylesheet">--> + <!-- Custom styles for this template --> + <link href="css/theme.css" rel="stylesheet"> + <link href="css/sidebar.css" rel="stylesheet"> + <link href="css/pnotify.custom.min.css" media="all" rel="stylesheet" type="text/css" /> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <link href="//getbootstrap.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + <body> + <div id="wrapper" class="toggled"> + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Bootstrap theme</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + <!-- Sidebar --> + <div id="sidebar-wrapper"> + <ul class="sidebar-nav"> + <li class="sidebar-brand"> + <a href="#"> + Start Bootstrap + </a> + </li> + <li> + <a href="/">Dashboard</a> + </li> + <li class="active"> + <a href="pluginManager">Plugin Manager</a> + </li> + <li> + <a href="#">Overview</a> + </li> + <li> + <a href="#">Events</a> + </li> + <li> + <a href="#">About</a> + </li> + <li> + <a href="#">Services</a> + </li> + <li> + <a href="#">Contact</a> + </li> + </ul> + </div> + <!-- /#sidebar-wrapper --> + <!-- Main jumbotron for a primary marketing message or call to action --> + <div class="jumbotron"> + <div id="page-content-wrapper"> + <div class="container"> + <button type="button" class="btn btn-default" aria-label="Toggle Menu" href="#menu-toggle" id="menu-toggle"> + <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> MENU + </button> + <h1>Admin | Plugin Manager</h1> + <p>This is a eBot like CSGO Webadministration called nBot.</p> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title" id="install_sourcemod_1">Install Sourcemod</h3> + </div> + <div class="panel-body"> + <div class="panel panel-default"> + <div class="panel-heading" id="install_sourcemod-data_1">Infos</div> + <div class="panel-body"> + <p><b>Placeholder</b></p> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading">Versions</div> + <div class="panel-body"> + <button type="button" class="btn btn-info pull-right" id="refreshSourcemodReleases"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span> Refresh</button> + <br/> + <table class="table table-hover" id="SourcemodVersions"> + <thead> + <tr> + <th>Version</th> + <th>Zip URL</th> + <th>Commit</th> + </tr> + </thead> + <tbody id="SourcemodVersions_body"> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="container"> + <!-- Example row of columns --> + <div class="row"> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + <div class="col-md-4"> + <h2>Heading</h2> + <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> + <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> + </div> + </div> + + <hr> + + <footer> + <p>&copy; 2016 MTRNord &amp; Theme: &copy; 2015 Bootstrap</p> + </footer> + </div> <!-- /container --> + </div> + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> + <script type="text/javascript" src="js/bootstrap.min.js"></script> + <script type="text/javascript" src="https://cdn.socket.io/socket.io-1.4.5.js"></script> + <script type="text/javascript" src="js/pnotify.custom.min.js"></script> + <script type="text/javascript" src="js/bootstrap-tour.min.js"></script> + <script type="text/javascript" src="js/pluginManagerConnect.js"></script> + <script type="text/javascript" src="js/tour.js"></script> + </body> +</html> diff --git a/web/theme/index.html b/web/theme/index.html @@ -45,7 +45,7 @@ </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> - <li class="active"><a href="#">Home</a></li> + <li class="active"><a href="/">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#contact">Contact</a></li> </ul> @@ -60,11 +60,11 @@ Start Bootstrap </a> </li> - <li> - <a href="#">Dashboard</a> + <li class="active"> + <a href="/">Dashboard</a> </li> <li> - <a href="pluginManager">PluginManager</a> + <a href="pluginManager">Plugin Manager</a> </li> <li> <a href="#">Overview</a> @@ -124,7 +124,6 @@ </div> </div> </div> - <button type="button" class="btn btn-info btn-lg" id="add_server">Add Server</button> </div> </div> </div> diff --git a/web/theme/js/AdminConnect.js b/web/theme/js/AdminConnect.js @@ -0,0 +1,22 @@ +PNotify.prototype.options.styling = "bootstrap3"; +$("#menu-toggle").click(function(e) { + e.preventDefault(); + $("#wrapper").toggleClass("toggled"); +}); +var ws = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: ''); +var socket = io(ws); +$(document).off('click', '#script_download').on('click', '#script_download', function (e) { + console.log('script_download'); + + socket.emit('command', {command: 'script_download'}); + e.preventDefault(); +}); +socket.on('status_alert', function (message) { + console.warn(message) +}); + +socket.on('ScriptDownloaded', function (message) { + console.log(message.response); + $("#first").hide() + $("#second").show() +}); diff --git a/web/theme/js/serverConnect.js b/web/theme/js/serverConnect.js @@ -43,9 +43,3 @@ $(document).off('click', '#check_status').on('click', '#check_status', function socket.emit('command', {command: 'status'}); e.preventDefault(); }); -$(document).off('click', '#add_server').on('click', '#add_server', function (e) { - console.log('Add Server'); - - socket.emit('command', {command: 'add_server'}); - e.preventDefault(); -}); diff --git a/web/theme/pluginManager.html b/web/theme/pluginManager.html @@ -1,170 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> - <meta name="description" content=""> - <meta name="author" content="MTRNord"> - <link rel="icon" href="favicon.ico"> - - <title>nBot | PluginManager</title> - <!-- Bootstrap core CSS --> - <link href="css/bootstrap.min.css" rel="stylesheet"> - <link href="css/bootstrap-tour.min.css" rel="stylesheet"> - <!-- Bootstrap theme --> - <!--<link href="css/bootstrap-theme.min.css" rel="stylesheet">--> - <!-- Custom styles for this template --> - <link href="css/theme.css" rel="stylesheet"> - <link href="css/sidebar.css" rel="stylesheet"> - <link href="css/pnotify.custom.min.css" media="all" rel="stylesheet" type="text/css" /> - <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> - <link href="//getbootstrap.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> - - <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> - <!--[if lt IE 9]> - <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> - <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> - <![endif]--> - </head> - - <body> - <div id="wrapper" class="toggled"> - <!-- Fixed navbar --> - <nav class="navbar navbar-inverse navbar-fixed-top"> - <div class="container"> - <div class="navbar-header"> - <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="navbar-brand" href="#">Bootstrap theme</a> - </div> - <div id="navbar" class="navbar-collapse collapse"> - <ul class="nav navbar-nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </nav> - <!-- Sidebar --> - <div id="sidebar-wrapper"> - <ul class="sidebar-nav"> - <li class="sidebar-brand"> - <a href="#"> - Start Bootstrap - </a> - </li> - <li> - <a href="index">Dashboard</a> - </li> - <li> - <a href="#">PluginManager</a> - </li> - <li> - <a href="#">Overview</a> - </li> - <li> - <a href="#">Events</a> - </li> - <li> - <a href="#">About</a> - </li> - <li> - <a href="#">Services</a> - </li> - <li> - <a href="#">Contact</a> - </li> - </ul> - </div> - <!-- /#sidebar-wrapper --> - <!-- Main jumbotron for a primary marketing message or call to action --> - <div class="jumbotron"> - <div id="page-content-wrapper"> - <div class="container"> - <button type="button" class="btn btn-default" aria-label="Toggle Menu" href="#menu-toggle" id="menu-toggle"> - <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> MENU - </button> - <h1>nBot</h1> - <p>This is a eBot like CSGO Webadministration called nBot.</p> - - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title" id="install_sourcemod_1">Install Sourcemod</h3> - </div> - <div class="panel-body"> - <div class="panel panel-default"> - <div class="panel-heading" id="install_sourcemod-data_1">Infos</div> - <div class="panel-body"> - <p><b>Placeholder</b></p> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading">Versions</div> - <div class="panel-body"> - <button type="button" class="btn btn-info pull-right" id="refreshSourcemodReleases"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span> Refresh</button> - <br/> - <table class="table table-hover" id="SourcemodVersions"> - <thead> - <tr> - <th>Version</th> - <th>Zip URL</th> - <th>Commit</th> - </tr> - </thead> - <tbody id="SourcemodVersions_body"> - </tbody> - </table> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - <div class="container"> - <!-- Example row of columns --> - <div class="row"> - <div class="col-md-4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> - </div> - <div class="col-md-4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> - </div> - <div class="col-md-4"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p> - </div> - </div> - - <hr> - - <footer> - <p>&copy; 2016 MTRNord &amp; Theme: &copy; 2015 Bootstrap</p> - </footer> - </div> <!-- /container --> - </div> - <!-- Bootstrap core JavaScript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> - <script type="text/javascript" src="js/bootstrap.min.js"></script> - <script type="text/javascript" src="https://cdn.socket.io/socket.io-1.4.5.js"></script> - <script type="text/javascript" src="js/pnotify.custom.min.js"></script> - <script type="text/javascript" src="js/bootstrap-tour.min.js"></script> - <script type="text/javascript" src="js/pluginManagerConnect.js"></script> - <script type="text/javascript" src="js/tour.js"></script> - </body> -</html>