Compare commits
	
		
			6 Commits
		
	
	
		
			dd136d19c9
			...
			ba0eb8649b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ba0eb8649b | |||
| e1b64766b6 | |||
| d56d0ba19a | |||
| 8abaa311af | |||
| 6ebf79e0e0 | |||
| a7da12d028 | 
							
								
								
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,15 @@ | ||||
| # ---> Composer | ||||
| composer.phar | ||||
| /vendor/ | ||||
| # Compiled binary | ||||
| raven | ||||
|  | ||||
| # Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control | ||||
| # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file | ||||
| # composer.lock | ||||
| # Vendored dependencies | ||||
| vendor/ | ||||
|  | ||||
| # Local database storage | ||||
| data/raven.db | ||||
|  | ||||
| # Node.js modules for Grunt.js | ||||
| node_modules/ | ||||
|  | ||||
| # Compiled CSS and JS assets | ||||
| public/css/ | ||||
| public/js/ | ||||
|   | ||||
							
								
								
									
										41
									
								
								Gruntfile.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Gruntfile.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| module.exports = function(grunt) { | ||||
|  | ||||
|   // Project configuration. | ||||
|   grunt.initConfig({ | ||||
|     pkg: grunt.file.readJSON('package.json'), | ||||
|  | ||||
|     sass: { | ||||
|       dist: { | ||||
|         options: { | ||||
|           style: 'compressed' | ||||
|         }, | ||||
|         files: [{ | ||||
|           expand: true, | ||||
|           cwd: 'assets/styles', | ||||
|           src: ['**/*.scss'], | ||||
|           dest: 'public/css', | ||||
|           ext: '.css' | ||||
|         }] | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     watch: { | ||||
|       css: { | ||||
|         files: ['assets/styles/**/*.scss'], | ||||
|         tasks: ['sass'], | ||||
|         options: { | ||||
|           atBegin: true, | ||||
|           spawn: false | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   // Load plugins. | ||||
|   grunt.loadNpmTasks('grunt-contrib-watch'); | ||||
|   grunt.loadNpmTasks('grunt-contrib-sass'); | ||||
|  | ||||
|   // CLI tasks. | ||||
|   grunt.registerTask('default', ['sass']); | ||||
|  | ||||
| }; | ||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| Copyright (c) <year> <owner>  | ||||
| Copyright (c) 2022 Metaunix.net | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|   | ||||
							
								
								
									
										20
									
								
								app/db/init.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/db/init.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package db | ||||
|  | ||||
| import ( | ||||
| 	"gorm.io/driver/sqlite" | ||||
| 	"gorm.io/gorm" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	DB gorm.DB | ||||
| ) | ||||
|  | ||||
| func InitDatabase() { | ||||
| 	DB, err := gorm.Open(sqlite.Open("data/raven.db"), &gorm.Config{}) | ||||
| 	if err != nil { | ||||
| 		panic("failed to connect database") | ||||
| 	} | ||||
|  | ||||
| 	// Migrate the schema | ||||
| 	DB.AutoMigrate(&Item{}) | ||||
| } | ||||
							
								
								
									
										18
									
								
								app/db/item.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								app/db/item.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| package db | ||||
|  | ||||
| import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"gorm.io/gorm" | ||||
| ) | ||||
|  | ||||
| type Item struct { | ||||
| 	gorm.Model | ||||
| 	Name          string | ||||
| 	Manufacturer  string | ||||
| 	Type          string | ||||
| 	SerialNumber  string | ||||
| 	SkuNumber     string | ||||
| 	PurchasedFrom string | ||||
| 	PurchasedAt   time.Time | ||||
| } | ||||
							
								
								
									
										26
									
								
								app/web/routes.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								app/web/routes.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| package web | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
|  | ||||
| 	"github.com/flamego/flamego" | ||||
| 	"github.com/flamego/template" | ||||
| ) | ||||
|  | ||||
| func RegisterRoutes(f *flamego.Flame) { | ||||
| 	// index route - landing page for the user | ||||
| 	f.Get("/", func(t template.Template, data template.Data) { | ||||
| 		t.HTML(http.StatusOK, "index") | ||||
| 	}) | ||||
|  | ||||
| 	// item list route - lists all of the items in the database | ||||
| 	f.Group("/item", func() { | ||||
| 		f.Get("/list", func(t template.Template, data template.Data) { | ||||
| 			t.HTML(http.StatusOK, "item/list") | ||||
| 		}) | ||||
|  | ||||
| 		f.Get("/create", func(t template.Template, data template.Data) { | ||||
| 			t.HTML(http.StatusOK, "item/create") | ||||
| 		}) | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										62
									
								
								assets/styles/kraken.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								assets/styles/kraken.scss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| $nav-width: 200px; | ||||
|  | ||||
| $box-shadow-1: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); | ||||
| $box-shadow-2: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); | ||||
|  | ||||
| body{ | ||||
|   background: lightgrey; | ||||
| } | ||||
|  | ||||
| #main-nav{ | ||||
|   position: fixed; | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   width: $nav-width; | ||||
|   height: 100%; | ||||
|   padding: 20px 0; | ||||
|   background: #212121; | ||||
|   color: white; | ||||
|   box-shadow: $box-shadow-1; | ||||
|   box-sizing: border-box; | ||||
|  | ||||
|   h3{ | ||||
|     text-align: center; | ||||
|   } | ||||
|  | ||||
|   ul{ | ||||
|     list-style: none; | ||||
|  | ||||
|     li{ | ||||
|       margin: 0; | ||||
|       border-bottom: 1px solid #999; | ||||
|  | ||||
|       &:first-child{ | ||||
|         border-top: 1px solid #999; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     a{ | ||||
|       display: block; | ||||
|       box-sizing: border-box; | ||||
|       width: $nav-width; | ||||
|       padding: 10px 15px; | ||||
|       color: limegreen; | ||||
|       font-size: 2.5rem; | ||||
|       text-decoration: none; | ||||
|       transition: all 230ms ease-in-out; | ||||
|  | ||||
|       &:hover{ | ||||
|         background: rgba(255, 255, 255, 0.1); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| #main-wrapper{ | ||||
|   max-width: 1200px; | ||||
|   margin-top: 25px; | ||||
|   padding: 20px 30px; | ||||
|   background: white; | ||||
|   border-radius: 5px; | ||||
|   box-shadow: $box-shadow-2; | ||||
| } | ||||
							
								
								
									
										19
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| module git.metaunix.net/metaunix/raven | ||||
|  | ||||
| go 1.18 | ||||
|  | ||||
| require ( | ||||
| 	github.com/alecthomas/participle/v2 v2.0.0-beta.5 // indirect | ||||
| 	github.com/fatih/color v1.13.0 // indirect | ||||
| 	github.com/flamego/flamego v1.7.0 // indirect | ||||
| 	github.com/flamego/template v1.1.0 // indirect | ||||
| 	github.com/jinzhu/inflection v1.0.0 // indirect | ||||
| 	github.com/jinzhu/now v1.1.5 // indirect | ||||
| 	github.com/mattn/go-colorable v0.1.9 // indirect | ||||
| 	github.com/mattn/go-isatty v0.0.14 // indirect | ||||
| 	github.com/mattn/go-sqlite3 v1.14.16 // indirect | ||||
| 	github.com/pkg/errors v0.9.1 // indirect | ||||
| 	golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect | ||||
| 	gorm.io/driver/sqlite v1.4.3 // indirect | ||||
| 	gorm.io/gorm v1.24.2 // indirect | ||||
| ) | ||||
							
								
								
									
										32
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| github.com/alecthomas/participle/v2 v2.0.0-beta.5 h1:y6dsSYVb1G5eK6mgmy+BgI3Mw35a3WghArZ/Hbebrjo= | ||||
| github.com/alecthomas/participle/v2 v2.0.0-beta.5/go.mod h1:RC764t6n4L8D8ITAJv0qdokritYSNR3wV5cVwmIEaMM= | ||||
| github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= | ||||
| github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= | ||||
| github.com/flamego/flamego v1.7.0 h1:c1Lu16PBAZKkpsjHw42vwotdoQnMMpUi60ITP41W12w= | ||||
| github.com/flamego/flamego v1.7.0/go.mod h1:dnVMBJyHKaxjcqRVN93taSK+YB/9p+Op1GdLIuA1hFQ= | ||||
| github.com/flamego/template v1.1.0 h1:iYtCzY3TeYpsoQiGApFXw2qycKdMzimz2gkO/SlcksM= | ||||
| github.com/flamego/template v1.1.0/go.mod h1:bgnmEXNumarhQIUzFgn18CDG6u8cM6X09c7UOTwZcxM= | ||||
| github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= | ||||
| github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= | ||||
| github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= | ||||
| github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= | ||||
| github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= | ||||
| github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= | ||||
| github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= | ||||
| github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= | ||||
| github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= | ||||
| github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= | ||||
| github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= | ||||
| github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= | ||||
| github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= | ||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= | ||||
| golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU= | ||||
| gorm.io/driver/sqlite v1.4.3/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI= | ||||
| gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= | ||||
| gorm.io/gorm v1.24.2 h1:9wR6CFD+G8nOusLdvkZelOEhpJVwwHzpQOUM+REd6U0= | ||||
| gorm.io/gorm v1.24.2/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= | ||||
							
								
								
									
										3064
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										3064
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										33
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| { | ||||
|   "name": "raven", | ||||
|   "version": "0.1.0", | ||||
|   "description": "Self-hosted inventory tracker", | ||||
|   "main": "index.js", | ||||
|   "scripts": { | ||||
|     "grunt": "grunt", | ||||
|     "test": "echo \"Error: no test specified\" && exit 1" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
|     "url": "gitea@git.metaunix.net:Metaunix/raven.git" | ||||
|   }, | ||||
|   "keywords": [ | ||||
|     "inventory", | ||||
|     "tracking" | ||||
|   ], | ||||
|   "author": "Gregory Ballanine <gballantine@metaunix.net>", | ||||
|   "uploaders": [ | ||||
|     { | ||||
|       "name": "Gregory Ballantine", | ||||
|       "email": "gballantine@metaunix.net" | ||||
|     } | ||||
|   ], | ||||
|   "license": "BSD-2-Clause", | ||||
|   "devDependencies": { | ||||
|     "grunt": "^1.5.3", | ||||
|     "grunt-cli": "^1.4.3", | ||||
|     "grunt-contrib-sass": "^2.0.0", | ||||
|     "grunt-contrib-watch": "^1.1.0", | ||||
|     "sass": "^1.55.0" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										31
									
								
								raven.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								raven.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"github.com/flamego/flamego" | ||||
| 	"github.com/flamego/template" | ||||
|  | ||||
| 	"git.metaunix.net/metaunix/raven/app/db" | ||||
| 	"git.metaunix.net/metaunix/raven/app/web" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	f := flamego.New() | ||||
|  | ||||
| 	// Initialize the database connection | ||||
| 	db.InitDatabase() | ||||
|  | ||||
| 	// Initialize template engine | ||||
| 	f.Use(template.Templater(template.Options{ | ||||
| 		Directory: "views", | ||||
| 	})) | ||||
|  | ||||
| 	f.Use(flamego.Static( | ||||
| 		flamego.StaticOptions{ | ||||
| 			Directory: "public", | ||||
| 		}, | ||||
| 	)) | ||||
|  | ||||
| 	web.RegisterRoutes(f) | ||||
|  | ||||
| 	f.Run() | ||||
| } | ||||
							
								
								
									
										9
									
								
								views/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								views/index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| {{ template "layout_header" . }} | ||||
|  | ||||
| <div class="row"> | ||||
|   <div class="twelve columns"> | ||||
|     <p>This is a test.</p> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| {{ template "layout_footer" . }} | ||||
							
								
								
									
										68
									
								
								views/item/create.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								views/item/create.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| {{ template "layout_header" . }} | ||||
|  | ||||
| <div class="row"> | ||||
|   <div class="twelve columns"> | ||||
|     <h1>Create new item</h1> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <div class="row"> | ||||
|   <div class="twelve columns"> | ||||
|     <form action="/item/create" method="POST" class="u-full-width"> | ||||
|       <div class="row"> | ||||
|         <div class="columns twelve"> | ||||
|           <label for="item_name">Item name:</label> | ||||
|           <input class="u-full-width" type="text" placeholder="My new item" id="item_name" name="item_name" required> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="row"> | ||||
|         <div class="six columns"> | ||||
|           <label for="item_serial">Serial number:</label> | ||||
|           <input class="u-full-width" type="text" placeholder="0123456789" id="item_serial" name="item_serial"> | ||||
|         </div> | ||||
|  | ||||
|         <div class="six columns"> | ||||
|           <label for="item_sku">SKU number:</label> | ||||
|           <input class="u-full-width" type="text" placeholder="ABC12345678" id="item_sku" name="item_sku"> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="row"> | ||||
|         <div class="six columns"> | ||||
|           <label for="item_purchase_from">Purchased from:</label> | ||||
|           <input class="u-full-width" type="text" placeholder="Newegg" id="item_purchase_from" name="item_purchase_from"> | ||||
|         </div> | ||||
|  | ||||
|         <div class="six columns"> | ||||
|           <label for="item_purchase_date">Purchased at:</label> | ||||
|           <input class="u-full-width" type="datetime-local" id="item_purchase_date" name="item_purchase_date"> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="row"> | ||||
|         <div class="six columns"> | ||||
|           <label for="item_manufacturer">Manufacturer:</label> | ||||
|           <input class="u-full-width" type="text" placeholder="Manufacturer" id="item_manufacturer" name="item_manufacturer"> | ||||
|         </div> | ||||
|  | ||||
|         <div class="six columns"> | ||||
|           <label for="item_type">Item type</label> | ||||
|           <select class="u-full-width" id="item_type" name="item_type"> | ||||
|             <option value="cpu">Processor</option> | ||||
|             <option value="motherboard">Motherboard</option> | ||||
|             <option value="memory">Memory (RAM)</option> | ||||
|             <option value="psu">Power Supply</option> | ||||
|             <option value="case">Case</option> | ||||
|             <option value="storage">Storage Device</option> | ||||
|             <option value="gpu">Graphics Card</option> | ||||
|           </select> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <input class="button-primary u-full-width" type="submit" value="Submit"> | ||||
|     </form> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| {{ template "layout_footer" . }} | ||||
							
								
								
									
										11
									
								
								views/item/list.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								views/item/list.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| {{ template "layout_header" . }} | ||||
|  | ||||
| <p><a href="/item/create">Create new item</a></p> | ||||
|  | ||||
| <ul> | ||||
|   {{ range .inventory }} | ||||
|     <li>{{ .name }}</li> | ||||
|   {{ end }} | ||||
| </ul> | ||||
|  | ||||
| {{ template "layout_footer" . }} | ||||
							
								
								
									
										5
									
								
								views/layout/footer.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								views/layout/footer.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| {{ define "layout_footer" }} | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
| {{ end }} | ||||
							
								
								
									
										17
									
								
								views/layout/header.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								views/layout/header.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| {{ define "layout_header" }} | ||||
| <!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.0"> | ||||
|   <title>{{ .title }} | Raven</title> | ||||
|   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"> | ||||
|   <link rel="stylesheet" href="/css/kraken.css"> | ||||
|   <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script> | ||||
| </head> | ||||
| <body> | ||||
|   {{ template "navbar" . }} | ||||
|  | ||||
|   <div id="main-wrapper" class="container"> | ||||
| {{ end }} | ||||
							
								
								
									
										13
									
								
								views/layout/navbar.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								views/layout/navbar.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| {{ define "navbar" }} | ||||
|  | ||||
|   <nav id="main-nav"> | ||||
|     <h3>Raven</h3> | ||||
|  | ||||
|     <ul> | ||||
|       <li><a href="/">Dashboard</a></li> | ||||
|       <li><a href="/item/list">Items</a></li> | ||||
|       <li><a href="/license/list">Licenses</a></li> | ||||
|     </ul> | ||||
|   </nav> | ||||
|  | ||||
| {{ end }} | ||||
		Reference in New Issue
	
	Block a user