caveman2-widgets-bootstrap
2018-02-28
An extension to caveman2-widgets which enables the simple usage of Twitter Bootstrap.
1Caveman2-Widgets-Bootstrap
This is an extension to caveman2-widgets. It supplies widgets which are usingBootstrap. Before you start using it you may have a look at the [[https://github.com/ritschmaster/caveman2-widgets#usage][basic usagedocumentation]] to understand how to use those (extra) widgets.1.1Installation
You can load it through Quicklisp or you can use the git repository. To use thegit repository clone it into "~/quicklisp/local-projects" or (if you are usingRoswell) "~/.roswell/local-projects".To QUICKLOAD it, use:
(ql:quickload :caveman2-widgets-bootstrap)
1.2Contributions
You are very welcomed to contribute to this project! You can contribute by:- Using it and spreading the word!
- Finding flaws and submitting Issues.
- Finding flaws and removing them (as Pull-requests).
- Adding new features (as Pull-requests). Before shooting in the darkcreate either an Issues or mail me. Maybe your feature is on myagenda too.
- Showing your appreciation through a donation (please mail me for mydata).
If you add new features, please document them. Otherwise other developers will have a hard time using this framework.
1.3Usage
1.3.1A new header widget
A new header widget is added which uses specific CDN links for gettingBootstrap. Please notice, that the global variables, where you canspecify the locations, are not simple string variables! They are<FILE> objects.- BOOTSTRAP-JS
- Must be a <JS-FILE> object.
- BOOTSTRAP-CSS
- Must be a <CSS-FILE> object.
1.3.2Navigation widget
The navigation widget is fully redesigned for the use withBootstrap. The <BOOTSTRAP-MENU-NAVIGATION-WIDGET> has some specialslots:- BRAND-TEXT
- A HTML code which will be displayed in the upper leftcorner.
- NAVBAR-FIXED
- A non-nil value will fix the navbar on the upperedge.
You can use it fairly easy by just using <BOOTSTRAP-MENU-NAVIGATION-WIDGET> as KIND for the DEFNAV macro:
(defvar *first-widget*
  (make-widget :global '<string-widget>
               :text "<h1>Hello world from first</h1>"))
(defvar *second-widget*
  (make-widget :global '<string-widget>
               :text "<h1>Hello world from second</h1>"))
(defclass <proxy-widget> (<widget>)
  ()
  (:documentation "This class enables session based widgets for a
navigation."))
(defmethod render-widget ((this <proxy-widget>))
  (set-widget-for-session :string-widget
                          (make-widget :session '<string-widget>
                                       :text "hello world"))
  (render-widget (get-widget-for-session :string-widget)))
(defnav "/"
    ((make-instance '<bootstrap-header-widget>
                    :title "Navigation test")
     (list
      (list "First widget" "first" *first-widget*)
      (list "Second widget" "second" *second-widget*)
      (list "Third widget" "third" (make-widget :global
                                                '<proxy-widget>)))
     :kind '<bootstrap-menu-navigation-widget>))
If you need extra header objects, you can create them via the RENDER-WIDGET-HEADER method. This means you only have to overwrite it for your own navigation class.
(defvar *first-widget*
  (make-widget :global '<string-widget>
               :text "<h1>Hello world from first</h1>"))
(defvar *second-widget*
  (make-widget :global '<string-widget>
               :text "<h1>Hello world from second</h1>"))
(defclass <my-bootstrap-nav> (<bootstrap-menu-navigation-widget>)
  ()
  (:default-initargs
   :brand-text "<div id=\"brandlogo\"></div>"
    :navbar-fixed t))
(defmethod caveman2-widgets-bootstrap.navigation::render-widget-header
    ((this <my-bootstrap-nav>)
     (args (eql :right)))
  (with-output-to-string (ret-val)
    (format ret-val "<ul class=\"nav navbar-nav navbar-right\">
  <li><a href=\"~a\">GitHub</a></li>
</ul>"
            (let ((link (make-widget
                         :global '<link-widget>
                         :label "GitHub"
                         :callback #'(lambda ()
                                       "http://github.com/ritschmaster")
                         :target-foreign-p t)))
              (uri-path link)))))
(defnav "/"
    ((make-instance '<bootstrap-header-widget>
                    :title "Navigation test")
     (list
      (list "First widget" "first" *first-widget*)
      (list "Second widget" "second" *second-widget*))
     :kind '<my-bootstrap-nav>))
1.4Author
- Richard Paul Bäck (richard.baeck@free-your-pc.com)
1.5Copyright
Copyright (c) 2016 Richard Paul Bäck (richard.baeck@free-your-pc.com)
1.6License
Licensed under the LLGPL License.