Plaster
New
List
Login
text
apl
aspx
asterisk
brainfuck
c
c++hdr
c++src
cassandra
ceylon
clojure
clojurescript
cmake
cobol
coffeescript
common-lisp
crystal
csharp
css
cypher-query
cython
d
dart
diff
django
dockerfile
dylan
ebnf
ecl
ecmascript
edn
eiffel
ejs
elm
erb
erlang
ez80
factor
fcl
feature
forth
fortran
fragment
gfm
go
gql
groovy
gss
haml
handlebars-template
haskell
haxe
hive
html
http
httpd-php
httpd-php-open
hxml
ini
java
javascript
json
jsp
jsx
julia
kotlin
latex
less
literate-haskell
lua
mariadb
markdown
mbox
mirc
mscgen
msgenny
mssql
mumps
mysql
n-triples
nesc
nginx-conf
nsis
objectivec
octave
oz
pascal
perl
pgp
pgp-keys
pgp-signature
pgsql
php
pig
plsql
properties
protobuf
puppet
python
q
rpm-changes
rpm-spec
rsrc
ruby
rustsrc
sas
sass
scala
scheme
scss
sieve
slim
smarty
solr
soy
sparql-query
spreadsheet
sql
squirrel
stex
styl
swift
systemverilog
tcl
textile
tiddlywiki
tiki
tlv
tornado
ttcn-asn
ttcn-cfg
turtle
twig
typescript
typescript-jsx
vb
vbscript
velocity
verilog
vertex
vhdl
vue
webidl
xml
xml-dtd
xquery
xu
yaml
z80
default
Visibility:
public
unlisted
private
(defun generate-keys-arg (list &optional (default-val t)) "Takes in a list lie '(home login users register) and outputs '(&key (home t) (login t) (users t) (register t))" (append (list '&key) (mapcar (lambda (entry) (list entry default-val)) list))) (defun symbol-to-downcase-str (symbol) "Returns a downcase string of symbol eg home becomes 'home'" (string-downcase (symbol-name symbol))) (defun append-n-to-symbol (n symbol) "appends n to a eg (append-n-to-symbol '/' 'home) '/home'" (let ((name (symbol-to-downcase-str symbol))) (concatenate 'string n name))) (defun gen-url-from-symbol (symbol) "concatenates '/' to the start of symbol and returns as a string" (append-n-to-symbol "/" symbol)) (defun capitalize-nth-char (n string) "Capitalizes nth character in string eg (capitalize-nth-char 2 'abcdef') -> 'aBcdef'" (string-upcase string :start (1- n) :end n)) (defun capitalize-1st-char (string) (capitalize-nth-char 1 string)) ;;;;macro am try to write that when evaluated with the args '(home login users register) would gen a function like the one at the bottom (defmacro generate-navigation-bar (list-of-entries) `(defun navigation-bar `(generate-keys-arg ,list-of-entries) (flet ,@(mapcar (lambda (entry) `(entry () (when ,entry (with-html (:li :class "navigation-item" :href ,(gen-url-from-symbol entry) :data-popover "" ,(capitalize-1st-char (symbol-to-downcase-str entry))))))) `,list-of-entries))) `(with-html (:nav :class "navigation" (:section :class "container" (:a :class "navigation-title" :href "/" (:img :class "img" :src ,(get-standard-image) :height "15") (:h1 :class "title" ,(get-title))) (:ul :class "navigation-list float-right" ,(mapcar (lambda (entry) (list entry)) list-of-entries)))))) (defun navigation-for-webpages (&key (home-nav t) (login-nav t) (users-nav t) (register-nav t)) (flet ((home () (when home-nav (with-html (:li :class "navigation-item" (:a :class "navigation-link" :href "/" :data-popover "" "Home"))))) (login () (when login-nav (with-html (:li :class "navigation-item" (:a :class "navigation-link" :href "/login" :data-popover "" "Login"))))) (users () (when users-nav (with-html (:li :class "navigation-item" (:a :class "navigation-link" :href "/users" :data-popover "" "Users"))))) (register () (when register-nav (with-html (:li :class "navigation-item" (:a :class "navigation-link" :href "/register" :data-popover "" "Register")))))) (with-html (:nav :class "navigation" (:section :class "container" (:a :class "navigation-title" :href "/" (:img :class "img" :src (get-standard-image) :height "15") (:h1 :class "title" (get-title))) (:ul :class "navigation-list float-right" (home) (login) (users) (register))))))) ;;;;edit (defun generate-navigation-html (entry) `(,entry nil (when ,entry (with-html (:li :class "navigation-item" :href ,(gen-url-from-symbol entry) :data-popover "" ,(capitalize-1st-char (symbol-to-downcase-str entry))))))) (defun generate-navigations-html (entries) (mapcar #'generate-navigation-html entries)) (defmacro generate-navigation-bar (list-of-entries) `(defun navigation-bar `(generate-keys-arg ,list-of-entries) (flet ,(generate-navigations-html list-of-entries) (with-html (:nav :class "navigation" (:section :class "container" (:a :class "navigation-title" :href "/" (:img :class "img" :src ,(get-standard-image) :height "15") (:h1 :class "title" ,(get-title))) ,(append `(:ul :class "navigation-list float-right" ,@(mapcar (lambda (entry) (list entry)) list-of-entries)))))))))