first commit
This commit is contained in:
parent
e411953a73
commit
b202a57180
@ -12,7 +12,7 @@
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
|
||||
|
||||
<link rel="stylesheet" href="/static/css/AdminLTE.min.css">
|
||||
<link rel="stylesheet" href="/static/css/skin-blue.min.css">
|
||||
<link rel="stylesheet" href="/static/css/skin-cpha-dark.min.css">
|
||||
<link rel="stylesheet" href="/static/js/plugins/pace/pace.min.css">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
|
@ -3,41 +3,6 @@
|
||||
|
||||
<!-- sidebar: style can be found in sidebar.less -->
|
||||
<section class="sidebar">
|
||||
|
||||
<!-- Sidebar user panel (optional) -->
|
||||
<div class="user-panel">
|
||||
<div class="pull-left image">
|
||||
<img :src="user.avatar" />
|
||||
</div>
|
||||
<div class="pull-left info">
|
||||
<div>
|
||||
<p class="white">{{user.displayName}}</p>
|
||||
</div>
|
||||
<a href="javascript:;">
|
||||
<i class="fa fa-circle text-success"></i> Online
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- search form (Optional) -->
|
||||
<form v-on:submit.prevent class="sidebar-form" id="searchForm">
|
||||
<div class="input-group" id="searchContainer">
|
||||
<span class="input-group-btn">
|
||||
<input type="text"
|
||||
name="search"
|
||||
id="search"
|
||||
class="search form-control"
|
||||
data-toggle="hideseek" p
|
||||
laceholder="Search Menus"
|
||||
data-list=".sidebar-menu">
|
||||
<button type="submit" name="search" id="search-btn" class="btn btn-flat">
|
||||
<i class="fa fa-search"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
<!-- /.search form -->
|
||||
|
||||
<!-- Sidebar Menu -->
|
||||
<sidebar-menu />
|
||||
<!-- /.sidebar-menu -->
|
||||
|
@ -19,7 +19,7 @@
|
||||
<router-link tag="li" class="pageLink" to="/personalfinances">
|
||||
<a>
|
||||
<i class="fa fa-money"></i>
|
||||
<span class="page">Finances</span>
|
||||
<span class="page">Personal Finances</span>
|
||||
</a>
|
||||
</router-link>
|
||||
<router-link tag="li" class="pageLink" to="/cryptos">
|
||||
@ -28,40 +28,24 @@
|
||||
<span class="page">Cryptos</span>
|
||||
</a>
|
||||
</router-link>
|
||||
<router-link tag="li" class="pageLink" to="/setting">
|
||||
<a>
|
||||
<i class="fa fa-cog"></i>
|
||||
<span class="page">Settings</span>
|
||||
</a>
|
||||
</router-link>
|
||||
|
||||
<li class="treeview">
|
||||
<a href="#">
|
||||
<i class="fa fa-folder-o"></i>
|
||||
<span class="treeview-title">Files</span>
|
||||
<i class="fa fa-cog"></i>
|
||||
<span class="treeview-title">Settings</span>
|
||||
<span class="pull-right-container pull-right">
|
||||
<i class="fa fa-angle-left fa-fw"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="treeview-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-file-word-o"></i> Item 1
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-file-picture-o"></i> Item 2
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-file-pdf-o"></i> Item 3
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="#"><i class="fa fa-cog"></i> Configurations</a></li>
|
||||
<li><a href="#"><i class="fa fa-google"></i> Google</a></li>
|
||||
<li><a href="#"><i class="fa fa-connectdevelop"></i> MQTT / Home Assistant</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="header">ME</li>
|
||||
<!-- Sthope ME Tab -->
|
||||
<!-- <li class="header">ME</li>
|
||||
<router-link tag="li" class="pageLink" to="/tasks">
|
||||
<a>
|
||||
<i class="fa fa-tasks"></i>
|
||||
@ -99,9 +83,10 @@
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</li> -->
|
||||
|
||||
<li class="header">LOGS</li>
|
||||
<!-- Sthope Logs Tab -->
|
||||
<!-- <li class="header">LOGS</li>
|
||||
<router-link tag="li" class="pageLink" to="/access">
|
||||
<a>
|
||||
<i class="fa fa-book"></i>
|
||||
@ -113,16 +98,10 @@
|
||||
<i class="fa fa-hdd-o"></i>
|
||||
<span class="page">Server</span>
|
||||
</a>
|
||||
</router-link>
|
||||
<!-- <router-link tag="li" class="pageLink" to="/repos">
|
||||
<a>
|
||||
<i class="fa fa-heart"></i>
|
||||
<span class="page">Repos</span>
|
||||
<small class="label pull-right bg-green">AJAX</small>
|
||||
</a>
|
||||
</router-link> -->
|
||||
|
||||
<li class="header">PAGES</li>
|
||||
<!-- Sthope Pages Tab -->
|
||||
<!-- <li class="header">PAGES</li>
|
||||
<router-link tag="li" class="pageLink" to="/login">
|
||||
<a>
|
||||
<i class="fa fa-circle-o text-yellow"></i>
|
||||
@ -134,7 +113,7 @@
|
||||
<i class="fa fa-circle-o text-red"></i>
|
||||
<span class="page"> 404</span>
|
||||
</a>
|
||||
</router-link>
|
||||
</router-link> -->
|
||||
</ul>
|
||||
</template>
|
||||
<script>
|
||||
|
@ -23,7 +23,7 @@ const routes = [
|
||||
component: DashView,
|
||||
children: [
|
||||
{
|
||||
path: 'personalfinances',
|
||||
path: 'personalfinancesLogin',
|
||||
alias: '',
|
||||
component: PersonalFinancesView,
|
||||
name: 'Personal Finances',
|
||||
|
2
static/css/skin-blue.min.css
vendored
2
static/css/skin-blue.min.css
vendored
@ -1 +1 @@
|
||||
.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}
|
||||
.skin-blue .main-header .navbar{background-color:#1e282c}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#1e282c}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#1e282c}}.skin-blue .main-header .logo{background-color:#1e282c;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#686868}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#686868}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#686868;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#1e282c}
|
||||
|
1
static/css/skin-cpha-dark.min.css
vendored
Normal file
1
static/css/skin-cpha-dark.min.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.skin-blue .main-header .navbar{background-color:#1e282c}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#1e282c}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#1e282c}}.skin-blue .main-header .logo{background-color:#1e282c;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#686868}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#686868}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#686868;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#1e282c}
|
92
static/js/plugins/gsheets/index.js
Normal file
92
static/js/plugins/gsheets/index.js
Normal file
@ -0,0 +1,92 @@
|
||||
const fs = require('fs');
|
||||
const readline = require('readline');
|
||||
const {google} = require('googleapis');
|
||||
|
||||
// If modifying these scopes, delete token.json.
|
||||
const SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'];
|
||||
// The file token.json stores the user's access and refresh tokens, and is
|
||||
// created automatically when the authorization flow completes for the first
|
||||
// time.
|
||||
const TOKEN_PATH = 'token.json';
|
||||
|
||||
// Load client secrets from a local file.
|
||||
fs.readFile('credentials.json', (err, content) => {
|
||||
if (err) return console.log('Error loading client secret file:', err);
|
||||
// Authorize a client with credentials, then call the Google Sheets API.
|
||||
authorize(JSON.parse(content), listMajors);
|
||||
});
|
||||
|
||||
/**
|
||||
* Create an OAuth2 client with the given credentials, and then execute the
|
||||
* given callback function.
|
||||
* @param {Object} credentials The authorization client credentials.
|
||||
* @param {function} callback The callback to call with the authorized client.
|
||||
*/
|
||||
function authorize(credentials, callback) {
|
||||
const {client_secret, client_id, redirect_uris} = credentials.installed;
|
||||
const oAuth2Client = new google.auth.OAuth2(
|
||||
client_id, client_secret, redirect_uris[0]);
|
||||
|
||||
// Check if we have previously stored a token.
|
||||
fs.readFile(TOKEN_PATH, (err, token) => {
|
||||
if (err) return getNewToken(oAuth2Client, callback);
|
||||
oAuth2Client.setCredentials(JSON.parse(token));
|
||||
callback(oAuth2Client);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and store new token after prompting for user authorization, and then
|
||||
* execute the given callback with the authorized OAuth2 client.
|
||||
* @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
|
||||
* @param {getEventsCallback} callback The callback for the authorized client.
|
||||
*/
|
||||
function getNewToken(oAuth2Client, callback) {
|
||||
const authUrl = oAuth2Client.generateAuthUrl({
|
||||
access_type: 'offline',
|
||||
scope: SCOPES,
|
||||
});
|
||||
console.log('Authorize this app by visiting this url:', authUrl);
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
});
|
||||
rl.question('Enter the code from that page here: ', (code) => {
|
||||
rl.close();
|
||||
oAuth2Client.getToken(code, (err, token) => {
|
||||
if (err) return console.error('Error while trying to retrieve access token', err);
|
||||
oAuth2Client.setCredentials(token);
|
||||
// Store the token to disk for later program executions
|
||||
fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
|
||||
if (err) return console.error(err);
|
||||
console.log('Token stored to', TOKEN_PATH);
|
||||
});
|
||||
callback(oAuth2Client);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints the names and majors of students in a sample spreadsheet:
|
||||
* @see https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
|
||||
* @param {google.auth.OAuth2} auth The authenticated Google OAuth client.
|
||||
*/
|
||||
function listMajors(auth) {
|
||||
const sheets = google.sheets({version: 'v4', auth});
|
||||
sheets.spreadsheets.values.get({
|
||||
spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
|
||||
range: 'Class Data!A2:E',
|
||||
}, (err, res) => {
|
||||
if (err) return console.log('The API returned an error: ' + err);
|
||||
const rows = res.data.values;
|
||||
if (rows.length) {
|
||||
console.log('Name, Major:');
|
||||
// Print columns A and E, which correspond to indices 0 and 4.
|
||||
rows.map((row) => {
|
||||
console.log(`${row[0]}, ${row[4]}`);
|
||||
});
|
||||
} else {
|
||||
console.log('No data found.');
|
||||
}
|
||||
});
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user