├── README.md
├── config
├── autoload.php
└── theme.php
├── controllers
└── theme_example.php
├── libraries
└── theme.php
├── spark.info
├── themes
├── default
│ ├── css
│ │ ├── bootstrap-responsive.css
│ │ ├── bootstrap-responsive.min.css
│ │ ├── bootstrap.css
│ │ └── bootstrap.min.css
│ ├── functions.php
│ ├── img
│ │ ├── glyphicons-halflings-white.png
│ │ └── glyphicons-halflings.png
│ ├── index.php
│ └── js
│ │ ├── bootstrap.js
│ │ └── bootstrap.min.js
├── index.html
└── skeleton
│ ├── images
│ ├── apple-touch-icon-114x114.png
│ ├── apple-touch-icon-72x72.png
│ ├── apple-touch-icon.png
│ └── favicon.ico
│ ├── index.php
│ ├── javascripts
│ └── tabs.js
│ └── stylesheets
│ ├── base.css
│ ├── layout.css
│ └── skeleton.css
└── views
└── theme_example.php
/README.md:
--------------------------------------------------------------------------------
1 | # CodeIgniter Theme
2 |
3 | This is a Theme library, heavily inspired by the wordpress/joomla theming system.
4 | Easily developing themes with all assets at one place.
5 |
6 | ## Core Features
7 |
8 | - All themes and assets in one place
9 | - Overriding of views (by placing it in your view folder of your theme)
10 | - Automatic translating of relative URL's
11 |
12 | (for example: you've download a theme from http://www.free-css.com,
13 | just drop it in your themes folder and rename index.html to index.php, it'll work right away)
14 |
15 | ## Installing
16 |
17 | Just copy the files from this package to the correspoding folder in your
18 | application folder.
19 | Then copy the 'themes' folder to the root of your codeigniter path
20 | (usually where the 'application' and 'system' reside)
21 | Make some adjustments to the config (if needed)
22 | And also (if using .htaccess) make the neccesary changes to allow
23 | readability on the 'themes' folder.
24 |
25 | ## Example
26 |
27 | I provided an example (theme_example) in the controllers and views folder.
28 | Copy these files to your application/controllers and application/views path
29 | Then call it as you normally would e.g. http://localhost/my_ci/theme_example
30 |
31 | I provided this with theme switching (via a cookie, just so you know)
32 |
33 | ## Themes
34 |
35 | I included 2 themes.
36 |
37 | - Bootstrap, from twitter (this is the default theme) ( http://twitter.github.com/bootstrap )
38 | - Skeleton ( http://getskeleton.com/ )
39 |
40 | Both themes are excellent but if you want you can always drop-in your own themes.
--------------------------------------------------------------------------------
/config/autoload.php:
--------------------------------------------------------------------------------
1 | load->helper( array('url', 'cookie'));
11 |
12 | //load theme spark
13 | $this->load->spark('theme/1.0.0');
14 |
15 | //try to get the theme from the cookie
16 | $theme = get_cookie('theme');
17 | if (in_array($theme, array('default', 'skeleton')))
18 | {
19 | //got a valid theme... set it
20 | $this->theme->set_theme($theme);
21 | }
22 | }
23 |
24 | public function index()
25 | {
26 | //message cookie?
27 | $message = get_cookie('message');
28 | if ($message)
29 | {
30 | //yes... add message to the theme
31 | $this->theme->add_message($message, 'success');
32 |
33 | //wipe the cookie
34 | set_cookie('message', null, null);
35 | }
36 | //load the theme_example view
37 | $this->theme->view('theme_example');
38 | }
39 |
40 | public function switch_theme($theme)
41 | {
42 | //set the cookie with the theme
43 | set_cookie('theme', $theme, 60*60*24*365);
44 |
45 | //set the message cookie
46 | set_cookie('message', 'Theme switched to: '.$theme , 60*60*24*365);
47 |
48 | //and redirect to the controller
49 | redirect('theme_example');
50 | }
51 | }
52 |
53 | /* End of file welcome.php */
54 | /* Location: ./application/controllers/welcome.php */
--------------------------------------------------------------------------------
/libraries/theme.php:
--------------------------------------------------------------------------------
1 | _ci = &get_instance();
30 |
31 | //get the config
32 | $this->_config = config_item('theme');
33 |
34 | //set the theme
35 | $this->set_theme($this->_config['theme']);
36 |
37 | if (method_exists( $this->_ci->router, 'fetch_module' ))
38 | {
39 | $this->_module = $this->_ci->router->fetch_module();
40 | }
41 |
42 | // What controllers or methods are in use
43 | $this->_controller = $this->_ci->router->fetch_class();
44 | $this->_method = $this->_ci->router->fetch_method();
45 |
46 | $this->_template_locations = array( $this->config('path') . $this->config('theme') . '/views/modules/' . $this->_module .'/',
47 | $this->config('path') . $this->config('theme') . '/views/',
48 | $this->config('path') . 'default/views/modules/' . $this->_module .'/',
49 | $this->config('path') . 'default/views/',
50 | APPPATH . 'modules/' . $this->_module . '/views/'
51 | );
52 |
53 |
54 |
55 | }
56 |
57 | /**
58 | * Theme::set_theme()
59 | *
60 | * Sets the theme
61 | *
62 | * @param string $theme The theme
63 | * @return void
64 | */
65 | function set_theme($theme = 'default')
66 | {
67 | $this->set_config('theme', $theme);
68 |
69 | $functions = $this->config('path').$this->config('theme').'/functions.php';
70 | if (file_exists($functions))
71 | {
72 | include($functions);
73 | }
74 |
75 | $this->_template_locations = array( $this->config('path') . $this->config('theme') . '/views/modules/' . $this->_module .'/',
76 | $this->config('path') . $this->config('theme') . '/views/',
77 | $this->config('path') . 'default/views/modules/' . $this->_module .'/',
78 | $this->config('path') . 'default/views/',
79 | APPPATH . 'modules/' . $this->_module . '/views/'
80 | );
81 | }
82 |
83 | /**
84 | * Theme::set_layout()
85 | *
86 | * Sets the layout for the current theme (default: index => index.php)
87 | *
88 | * @param string $layout The layout for the theme
89 | * @return void
90 | */
91 | function set_layout($layout = 'index')
92 | {
93 | $path = $this->config('path').$this->config('theme').'/'.$layout.'.php';
94 | if (!file_exists($path))
95 | {
96 | $layout = 'index';
97 | }
98 | $this->set_config('layout', $layout);
99 | }
100 |
101 | /**
102 | * Theme::add_message()
103 | *
104 | * Adds a message to the queue
105 | *
106 | * @param string $message The message to display
107 | * @param string $type Can be anything: info,success,error,warning
108 | * @return void
109 | */
110 | function add_message($message, $type = 'info')
111 | {
112 | $this->_messages[] = array(
113 | 'message' => $message,
114 | 'type' => $type,
115 | );
116 | }
117 |
118 | /**
119 | * Theme::set_messages()
120 | *
121 | * Sets all messages (handy for flash ops)
122 | *
123 | * @param array $messages Messages to be set
124 | * @return void
125 | */
126 | function set_messages($messages)
127 | {
128 | $messages = is_array($messages) ? $messages : array();
129 | $this->_messages = $messages;
130 | }
131 |
132 | /**
133 | * Theme::clear_messages()
134 | *
135 | * Removes all messages
136 | *
137 | * @return void
138 | */
139 | function clear_messages()
140 | {
141 | $this->_messages = array();
142 | }
143 |
144 | /**
145 | * Theme::config()
146 | *
147 | * Returns an item from the config array
148 | *
149 | * @param string $name
150 | * @param bool $default (optional: FALSE)
151 | * @return mixed or $default if not found
152 | */
153 | function config($name, $default = FALSE)
154 | {
155 | return isset($this->_config[$name]) ? $this->_config[$name] : $default;
156 | }
157 |
158 | /**
159 | * Theme::set_config()
160 | *
161 | * Sets an item in the config array
162 | * e.g. $this->theme->set_config('theme', 'other_theme');
163 | *
164 | * @param mixed $name
165 | * @param mixed $value
166 | * @return void
167 | */
168 | function set_config($name, $value)
169 | {
170 | $this->_config[$name] = $value;
171 | }
172 |
173 | /**
174 | * Theme::get()
175 | *
176 | * Gets an item from the data array
177 | * e.g. $this->theme->get('current_user');
178 | *
179 | * @param string $name The value to get
180 | * @param bool $default (optional: FALSE)
181 | * @return mixed or $default if not found
182 | */
183 | function get($name, $default = FALSE)
184 | {
185 | return isset($this->_data[$name]) ? $this->_data[$name] : $default;
186 | }
187 |
188 | /**
189 | * Theme::set()
190 | *
191 | * Sets an item in the data array
192 | * e.g. $this->theme->set('current_user', $this->user);
193 | *
194 | * @param string $name The item to set
195 | * @param mixed $value The value to set
196 | * @return void
197 | */
198 | function set($name, $value)
199 | {
200 | $this->_data[$name] = $value;
201 | }
202 |
203 | /**
204 | * Theme::messages()
205 | *
206 | * Returns an unordered list (HTML) for the message or
207 | * the message array. depending on the $html variable
208 | *
209 | * @param bool $html Return it as html? (false=array)
210 | * @return string(html) or array
211 | */
212 | function messages($html = TRUE)
213 | {
214 | if (!$html)
215 | {
216 | return $this->_messages;
217 | }
218 |
219 | $html = '';
220 | $html .= '
';
221 | foreach($this->_messages as $message)
222 | {
223 | $html .= sprintf('%s ', $message['type'], $message['message']);
224 | }
225 | $html .= ' ';
226 | return $html;
227 | }
228 |
229 | /**
230 | * Theme::content()
231 | *
232 | * Returns the content variable (filled by the view/theme function)
233 | *
234 | * @return string
235 | */
236 | function content()
237 | {
238 | return $this->_content;
239 | }
240 |
241 | /**
242 | * Theme::view()
243 | *
244 | * Loads the view just as CI would normally do and
245 | * passed it to the theme function wrapping the view into the theme
246 | *
247 | * @param string $view The view to load
248 | * @param array $data The data array to pass to the view
249 | * @param bool $return (optional) Return the output?
250 | * @return void or the HTML
251 | */
252 | function view($view, $data = array(), $return = false)
253 | {
254 | $data = is_array($data) ? $data : array();
255 | $data = array_merge($this->_data, $data);
256 | $content = $this->partial($view, $data, true);
257 | return $this->render($content, $return);
258 | }
259 |
260 | /**
261 | * Theme::render()
262 | *
263 | * Wraps the theme around the $content
264 | *
265 | * @param string $content Raw HTML content
266 | * @param bool $return (optional) Return the output?
267 | * @return void or HTML
268 | */
269 | function render($content, $return = false)
270 | {
271 | $this->_content = $content;
272 |
273 | extract($this->_data);
274 |
275 | $theme = $this->config('path') . $this->config('theme') . '/' . $this->config('layout') . '.php';
276 | if (!file_exists($theme))
277 | {
278 | if($this->config('theme') != "default")
279 | {
280 | //save the original requested themes for the error message, if the default theme also not exist
281 | $theme_requested = $theme;
282 | $theme = $this->config('path') . 'default/index.php';
283 |
284 | if(!file_exists($theme))
285 | {
286 | show_error('Make sure you configurate your theme (did you copy the themes folder to your root?) Requested Theme: '.$theme_requested.' not found. Default Theme: '.$theme.' not found.');
287 | }
288 | else
289 | {
290 | $this->set_theme();
291 | }
292 | }
293 | else
294 | {
295 | show_error('Make sure you configurate your theme (did you copy the themes folder to your root?) Default Theme: '.$theme.' not found.');
296 | }
297 |
298 | }
299 |
300 | ob_start();
301 |
302 | include ($theme);
303 | $html = ob_get_contents();
304 |
305 | ob_end_clean();
306 |
307 | $html = preg_replace_callback('~((href|src)\s*=\s*[\"\'])([^\"\']+)~i', array($this, '_replace_url'), $html);
308 | $html = str_replace('{template_url}', $this->config('url') . $this->config('theme'), $html);
309 |
310 | if ($return)
311 | {
312 | return $html;
313 | }
314 | get_instance()->output->set_output($html);
315 | }
316 |
317 | /**
318 | * Theme::partial()
319 | *
320 | * Loads the view just as CI except this function will look
321 | * first into the theme's subdir 'views' to find the view
322 | *
323 | * @param string $view The view to load
324 | * @param array $data The data array to pass to the view
325 | * @param bool $return (optional) Return the output?
326 | * @return void or the HTML
327 | */
328 | function partial($view, $data = array(), $return = false)
329 | {
330 | $data = is_array($data) ? $data : array();
331 | $data = array_merge($this->_data, $data);
332 | $path = NULL;
333 |
334 | foreach($this->_template_locations as $location)
335 | {
336 | if(file_exists($location.$view.'.php') && $path == NULL)
337 | {
338 | $path = $location.$view.'.php';
339 | extract($data);
340 | ob_start();
341 | include ($path);
342 | $output = ob_get_contents();
343 | ob_end_clean();
344 | }
345 | }
346 |
347 | if ($path == NULL)
348 | {
349 | $output = get_instance()->load->view($view, $data, TRUE);
350 | }
351 |
352 | if ($return)
353 | {
354 | return $output;
355 | }
356 | echo $output;
357 | }
358 |
359 | /**
360 | * Theme::_replace_url()
361 | *
362 | * @param mixed $x
363 | * @return
364 | */
365 | private static function _replace_url($x)
366 | {
367 | $url = isset($x[3]) ? $x[3] : '';
368 | if (strpos($url, 'http') !== 0 &&
369 | strpos($url, 'mailto') !== 0 &&
370 | strpos($url, '/') !== 0 &&
371 | strpos($url, '#') !== 0 &&
372 | strpos($url, 'javascript') !== 0 &&
373 | strpos($url, '{') !== 0)
374 | {
375 | $url = '{template_url}/' . $url;
376 | }
377 | return isset($x[1]) ? ($x[1] . $url) : $url;
378 | }
379 |
380 |
381 | }
--------------------------------------------------------------------------------
/spark.info:
--------------------------------------------------------------------------------
1 | # This is the spark-sdk specification. It's in a magical format without a name.
2 | # Use this format while developing your own sparks!
3 |
4 | # This is the spark name. This should be the registered name of the spark.
5 | name: theme
6 |
7 | # This is the current version of this spark. All sparks should be in
8 | # x.x.x format. Validation will fail otherwise.
9 | version: 1.0.0
10 |
11 | # This is the version of CodeIgniter this spark is compatible up to. It should
12 | # be in x.x.x format
13 | compatibility: 2.0.0
14 |
15 | # These are other sparks which this spark needs in order to work correctly.
16 | # Dependencies should be in NAME: VERSION format, where NAME is an existing
17 | # spark name, and VERSION is a version in x.x.x format.
18 | #dependencies:
19 | # spark-1: 1.0.0
20 | # spark-2: 1.0.0
--------------------------------------------------------------------------------
/themes/default/css/bootstrap-responsive.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.0.3
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 | .clearfix {
12 | *zoom: 1;
13 | }
14 |
15 | .clearfix:before,
16 | .clearfix:after {
17 | display: table;
18 | content: "";
19 | }
20 |
21 | .clearfix:after {
22 | clear: both;
23 | }
24 |
25 | .hide-text {
26 | font: 0/0 a;
27 | color: transparent;
28 | text-shadow: none;
29 | background-color: transparent;
30 | border: 0;
31 | }
32 |
33 | .input-block-level {
34 | display: block;
35 | width: 100%;
36 | min-height: 28px;
37 | -webkit-box-sizing: border-box;
38 | -moz-box-sizing: border-box;
39 | -ms-box-sizing: border-box;
40 | box-sizing: border-box;
41 | }
42 |
43 | .hidden {
44 | display: none;
45 | visibility: hidden;
46 | }
47 |
48 | .visible-phone {
49 | display: none !important;
50 | }
51 |
52 | .visible-tablet {
53 | display: none !important;
54 | }
55 |
56 | .hidden-desktop {
57 | display: none !important;
58 | }
59 |
60 | @media (max-width: 767px) {
61 | .visible-phone {
62 | display: inherit !important;
63 | }
64 | .hidden-phone {
65 | display: none !important;
66 | }
67 | .hidden-desktop {
68 | display: inherit !important;
69 | }
70 | .visible-desktop {
71 | display: none !important;
72 | }
73 | }
74 |
75 | @media (min-width: 768px) and (max-width: 979px) {
76 | .visible-tablet {
77 | display: inherit !important;
78 | }
79 | .hidden-tablet {
80 | display: none !important;
81 | }
82 | .hidden-desktop {
83 | display: inherit !important;
84 | }
85 | .visible-desktop {
86 | display: none !important ;
87 | }
88 | }
89 |
90 | @media (max-width: 480px) {
91 | .nav-collapse {
92 | -webkit-transform: translate3d(0, 0, 0);
93 | }
94 | .page-header h1 small {
95 | display: block;
96 | line-height: 18px;
97 | }
98 | input[type="checkbox"],
99 | input[type="radio"] {
100 | border: 1px solid #ccc;
101 | }
102 | .form-horizontal .control-group > label {
103 | float: none;
104 | width: auto;
105 | padding-top: 0;
106 | text-align: left;
107 | }
108 | .form-horizontal .controls {
109 | margin-left: 0;
110 | }
111 | .form-horizontal .control-list {
112 | padding-top: 0;
113 | }
114 | .form-horizontal .form-actions {
115 | padding-right: 10px;
116 | padding-left: 10px;
117 | }
118 | .modal {
119 | position: absolute;
120 | top: 10px;
121 | right: 10px;
122 | left: 10px;
123 | width: auto;
124 | margin: 0;
125 | }
126 | .modal.fade.in {
127 | top: auto;
128 | }
129 | .modal-header .close {
130 | padding: 10px;
131 | margin: -10px;
132 | }
133 | .carousel-caption {
134 | position: static;
135 | }
136 | }
137 |
138 | @media (max-width: 767px) {
139 | body {
140 | padding-right: 20px;
141 | padding-left: 20px;
142 | }
143 | .navbar-fixed-top,
144 | .navbar-fixed-bottom {
145 | margin-right: -20px;
146 | margin-left: -20px;
147 | }
148 | .container-fluid {
149 | padding: 0;
150 | }
151 | .dl-horizontal dt {
152 | float: none;
153 | width: auto;
154 | clear: none;
155 | text-align: left;
156 | }
157 | .dl-horizontal dd {
158 | margin-left: 0;
159 | }
160 | .container {
161 | width: auto;
162 | }
163 | .row-fluid {
164 | width: 100%;
165 | }
166 | .row,
167 | .thumbnails {
168 | margin-left: 0;
169 | }
170 | [class*="span"],
171 | .row-fluid [class*="span"] {
172 | display: block;
173 | float: none;
174 | width: auto;
175 | margin-left: 0;
176 | }
177 | .input-large,
178 | .input-xlarge,
179 | .input-xxlarge,
180 | input[class*="span"],
181 | select[class*="span"],
182 | textarea[class*="span"],
183 | .uneditable-input {
184 | display: block;
185 | width: 100%;
186 | min-height: 28px;
187 | -webkit-box-sizing: border-box;
188 | -moz-box-sizing: border-box;
189 | -ms-box-sizing: border-box;
190 | box-sizing: border-box;
191 | }
192 | .input-prepend input,
193 | .input-append input,
194 | .input-prepend input[class*="span"],
195 | .input-append input[class*="span"] {
196 | display: inline-block;
197 | width: auto;
198 | }
199 | }
200 |
201 | @media (min-width: 768px) and (max-width: 979px) {
202 | .row {
203 | margin-left: -20px;
204 | *zoom: 1;
205 | }
206 | .row:before,
207 | .row:after {
208 | display: table;
209 | content: "";
210 | }
211 | .row:after {
212 | clear: both;
213 | }
214 | [class*="span"] {
215 | float: left;
216 | margin-left: 20px;
217 | }
218 | .container,
219 | .navbar-fixed-top .container,
220 | .navbar-fixed-bottom .container {
221 | width: 724px;
222 | }
223 | .span12 {
224 | width: 724px;
225 | }
226 | .span11 {
227 | width: 662px;
228 | }
229 | .span10 {
230 | width: 600px;
231 | }
232 | .span9 {
233 | width: 538px;
234 | }
235 | .span8 {
236 | width: 476px;
237 | }
238 | .span7 {
239 | width: 414px;
240 | }
241 | .span6 {
242 | width: 352px;
243 | }
244 | .span5 {
245 | width: 290px;
246 | }
247 | .span4 {
248 | width: 228px;
249 | }
250 | .span3 {
251 | width: 166px;
252 | }
253 | .span2 {
254 | width: 104px;
255 | }
256 | .span1 {
257 | width: 42px;
258 | }
259 | .offset12 {
260 | margin-left: 764px;
261 | }
262 | .offset11 {
263 | margin-left: 702px;
264 | }
265 | .offset10 {
266 | margin-left: 640px;
267 | }
268 | .offset9 {
269 | margin-left: 578px;
270 | }
271 | .offset8 {
272 | margin-left: 516px;
273 | }
274 | .offset7 {
275 | margin-left: 454px;
276 | }
277 | .offset6 {
278 | margin-left: 392px;
279 | }
280 | .offset5 {
281 | margin-left: 330px;
282 | }
283 | .offset4 {
284 | margin-left: 268px;
285 | }
286 | .offset3 {
287 | margin-left: 206px;
288 | }
289 | .offset2 {
290 | margin-left: 144px;
291 | }
292 | .offset1 {
293 | margin-left: 82px;
294 | }
295 | .row-fluid {
296 | width: 100%;
297 | *zoom: 1;
298 | }
299 | .row-fluid:before,
300 | .row-fluid:after {
301 | display: table;
302 | content: "";
303 | }
304 | .row-fluid:after {
305 | clear: both;
306 | }
307 | .row-fluid [class*="span"] {
308 | display: block;
309 | float: left;
310 | width: 100%;
311 | min-height: 28px;
312 | margin-left: 2.762430939%;
313 | *margin-left: 2.709239449638298%;
314 | -webkit-box-sizing: border-box;
315 | -moz-box-sizing: border-box;
316 | -ms-box-sizing: border-box;
317 | box-sizing: border-box;
318 | }
319 | .row-fluid [class*="span"]:first-child {
320 | margin-left: 0;
321 | }
322 | .row-fluid .span12 {
323 | width: 99.999999993%;
324 | *width: 99.9468085036383%;
325 | }
326 | .row-fluid .span11 {
327 | width: 91.436464082%;
328 | *width: 91.38327259263829%;
329 | }
330 | .row-fluid .span10 {
331 | width: 82.87292817100001%;
332 | *width: 82.8197366816383%;
333 | }
334 | .row-fluid .span9 {
335 | width: 74.30939226%;
336 | *width: 74.25620077063829%;
337 | }
338 | .row-fluid .span8 {
339 | width: 65.74585634900001%;
340 | *width: 65.6926648596383%;
341 | }
342 | .row-fluid .span7 {
343 | width: 57.182320438000005%;
344 | *width: 57.129128948638304%;
345 | }
346 | .row-fluid .span6 {
347 | width: 48.618784527%;
348 | *width: 48.5655930376383%;
349 | }
350 | .row-fluid .span5 {
351 | width: 40.055248616%;
352 | *width: 40.0020571266383%;
353 | }
354 | .row-fluid .span4 {
355 | width: 31.491712705%;
356 | *width: 31.4385212156383%;
357 | }
358 | .row-fluid .span3 {
359 | width: 22.928176794%;
360 | *width: 22.874985304638297%;
361 | }
362 | .row-fluid .span2 {
363 | width: 14.364640883%;
364 | *width: 14.311449393638298%;
365 | }
366 | .row-fluid .span1 {
367 | width: 5.801104972%;
368 | *width: 5.747913482638298%;
369 | }
370 | input,
371 | textarea,
372 | .uneditable-input {
373 | margin-left: 0;
374 | }
375 | input.span12,
376 | textarea.span12,
377 | .uneditable-input.span12 {
378 | width: 714px;
379 | }
380 | input.span11,
381 | textarea.span11,
382 | .uneditable-input.span11 {
383 | width: 652px;
384 | }
385 | input.span10,
386 | textarea.span10,
387 | .uneditable-input.span10 {
388 | width: 590px;
389 | }
390 | input.span9,
391 | textarea.span9,
392 | .uneditable-input.span9 {
393 | width: 528px;
394 | }
395 | input.span8,
396 | textarea.span8,
397 | .uneditable-input.span8 {
398 | width: 466px;
399 | }
400 | input.span7,
401 | textarea.span7,
402 | .uneditable-input.span7 {
403 | width: 404px;
404 | }
405 | input.span6,
406 | textarea.span6,
407 | .uneditable-input.span6 {
408 | width: 342px;
409 | }
410 | input.span5,
411 | textarea.span5,
412 | .uneditable-input.span5 {
413 | width: 280px;
414 | }
415 | input.span4,
416 | textarea.span4,
417 | .uneditable-input.span4 {
418 | width: 218px;
419 | }
420 | input.span3,
421 | textarea.span3,
422 | .uneditable-input.span3 {
423 | width: 156px;
424 | }
425 | input.span2,
426 | textarea.span2,
427 | .uneditable-input.span2 {
428 | width: 94px;
429 | }
430 | input.span1,
431 | textarea.span1,
432 | .uneditable-input.span1 {
433 | width: 32px;
434 | }
435 | }
436 |
437 | @media (min-width: 1200px) {
438 | .row {
439 | margin-left: -30px;
440 | *zoom: 1;
441 | }
442 | .row:before,
443 | .row:after {
444 | display: table;
445 | content: "";
446 | }
447 | .row:after {
448 | clear: both;
449 | }
450 | [class*="span"] {
451 | float: left;
452 | margin-left: 30px;
453 | }
454 | .container,
455 | .navbar-fixed-top .container,
456 | .navbar-fixed-bottom .container {
457 | width: 1170px;
458 | }
459 | .span12 {
460 | width: 1170px;
461 | }
462 | .span11 {
463 | width: 1070px;
464 | }
465 | .span10 {
466 | width: 970px;
467 | }
468 | .span9 {
469 | width: 870px;
470 | }
471 | .span8 {
472 | width: 770px;
473 | }
474 | .span7 {
475 | width: 670px;
476 | }
477 | .span6 {
478 | width: 570px;
479 | }
480 | .span5 {
481 | width: 470px;
482 | }
483 | .span4 {
484 | width: 370px;
485 | }
486 | .span3 {
487 | width: 270px;
488 | }
489 | .span2 {
490 | width: 170px;
491 | }
492 | .span1 {
493 | width: 70px;
494 | }
495 | .offset12 {
496 | margin-left: 1230px;
497 | }
498 | .offset11 {
499 | margin-left: 1130px;
500 | }
501 | .offset10 {
502 | margin-left: 1030px;
503 | }
504 | .offset9 {
505 | margin-left: 930px;
506 | }
507 | .offset8 {
508 | margin-left: 830px;
509 | }
510 | .offset7 {
511 | margin-left: 730px;
512 | }
513 | .offset6 {
514 | margin-left: 630px;
515 | }
516 | .offset5 {
517 | margin-left: 530px;
518 | }
519 | .offset4 {
520 | margin-left: 430px;
521 | }
522 | .offset3 {
523 | margin-left: 330px;
524 | }
525 | .offset2 {
526 | margin-left: 230px;
527 | }
528 | .offset1 {
529 | margin-left: 130px;
530 | }
531 | .row-fluid {
532 | width: 100%;
533 | *zoom: 1;
534 | }
535 | .row-fluid:before,
536 | .row-fluid:after {
537 | display: table;
538 | content: "";
539 | }
540 | .row-fluid:after {
541 | clear: both;
542 | }
543 | .row-fluid [class*="span"] {
544 | display: block;
545 | float: left;
546 | width: 100%;
547 | min-height: 28px;
548 | margin-left: 2.564102564%;
549 | *margin-left: 2.510911074638298%;
550 | -webkit-box-sizing: border-box;
551 | -moz-box-sizing: border-box;
552 | -ms-box-sizing: border-box;
553 | box-sizing: border-box;
554 | }
555 | .row-fluid [class*="span"]:first-child {
556 | margin-left: 0;
557 | }
558 | .row-fluid .span12 {
559 | width: 100%;
560 | *width: 99.94680851063829%;
561 | }
562 | .row-fluid .span11 {
563 | width: 91.45299145300001%;
564 | *width: 91.3997999636383%;
565 | }
566 | .row-fluid .span10 {
567 | width: 82.905982906%;
568 | *width: 82.8527914166383%;
569 | }
570 | .row-fluid .span9 {
571 | width: 74.358974359%;
572 | *width: 74.30578286963829%;
573 | }
574 | .row-fluid .span8 {
575 | width: 65.81196581200001%;
576 | *width: 65.7587743226383%;
577 | }
578 | .row-fluid .span7 {
579 | width: 57.264957265%;
580 | *width: 57.2117657756383%;
581 | }
582 | .row-fluid .span6 {
583 | width: 48.717948718%;
584 | *width: 48.6647572286383%;
585 | }
586 | .row-fluid .span5 {
587 | width: 40.170940171000005%;
588 | *width: 40.117748681638304%;
589 | }
590 | .row-fluid .span4 {
591 | width: 31.623931624%;
592 | *width: 31.5707401346383%;
593 | }
594 | .row-fluid .span3 {
595 | width: 23.076923077%;
596 | *width: 23.0237315876383%;
597 | }
598 | .row-fluid .span2 {
599 | width: 14.529914530000001%;
600 | *width: 14.4767230406383%;
601 | }
602 | .row-fluid .span1 {
603 | width: 5.982905983%;
604 | *width: 5.929714493638298%;
605 | }
606 | input,
607 | textarea,
608 | .uneditable-input {
609 | margin-left: 0;
610 | }
611 | input.span12,
612 | textarea.span12,
613 | .uneditable-input.span12 {
614 | width: 1160px;
615 | }
616 | input.span11,
617 | textarea.span11,
618 | .uneditable-input.span11 {
619 | width: 1060px;
620 | }
621 | input.span10,
622 | textarea.span10,
623 | .uneditable-input.span10 {
624 | width: 960px;
625 | }
626 | input.span9,
627 | textarea.span9,
628 | .uneditable-input.span9 {
629 | width: 860px;
630 | }
631 | input.span8,
632 | textarea.span8,
633 | .uneditable-input.span8 {
634 | width: 760px;
635 | }
636 | input.span7,
637 | textarea.span7,
638 | .uneditable-input.span7 {
639 | width: 660px;
640 | }
641 | input.span6,
642 | textarea.span6,
643 | .uneditable-input.span6 {
644 | width: 560px;
645 | }
646 | input.span5,
647 | textarea.span5,
648 | .uneditable-input.span5 {
649 | width: 460px;
650 | }
651 | input.span4,
652 | textarea.span4,
653 | .uneditable-input.span4 {
654 | width: 360px;
655 | }
656 | input.span3,
657 | textarea.span3,
658 | .uneditable-input.span3 {
659 | width: 260px;
660 | }
661 | input.span2,
662 | textarea.span2,
663 | .uneditable-input.span2 {
664 | width: 160px;
665 | }
666 | input.span1,
667 | textarea.span1,
668 | .uneditable-input.span1 {
669 | width: 60px;
670 | }
671 | .thumbnails {
672 | margin-left: -30px;
673 | }
674 | .thumbnails > li {
675 | margin-left: 30px;
676 | }
677 | .row-fluid .thumbnails {
678 | margin-left: 0;
679 | }
680 | }
681 |
682 | @media (max-width: 979px) {
683 | body {
684 | padding-top: 0;
685 | }
686 | .navbar-fixed-top {
687 | position: static;
688 | margin-bottom: 18px;
689 | }
690 | .navbar-fixed-top .navbar-inner {
691 | padding: 5px;
692 | }
693 | .navbar .container {
694 | width: auto;
695 | padding: 0;
696 | }
697 | .navbar .brand {
698 | padding-right: 10px;
699 | padding-left: 10px;
700 | margin: 0 0 0 -5px;
701 | }
702 | .nav-collapse {
703 | clear: both;
704 | }
705 | .nav-collapse .nav {
706 | float: none;
707 | margin: 0 0 9px;
708 | }
709 | .nav-collapse .nav > li {
710 | float: none;
711 | }
712 | .nav-collapse .nav > li > a {
713 | margin-bottom: 2px;
714 | }
715 | .nav-collapse .nav > .divider-vertical {
716 | display: none;
717 | }
718 | .nav-collapse .nav .nav-header {
719 | color: #999999;
720 | text-shadow: none;
721 | }
722 | .nav-collapse .nav > li > a,
723 | .nav-collapse .dropdown-menu a {
724 | padding: 6px 15px;
725 | font-weight: bold;
726 | color: #999999;
727 | -webkit-border-radius: 3px;
728 | -moz-border-radius: 3px;
729 | border-radius: 3px;
730 | }
731 | .nav-collapse .btn {
732 | padding: 4px 10px 4px;
733 | font-weight: normal;
734 | -webkit-border-radius: 4px;
735 | -moz-border-radius: 4px;
736 | border-radius: 4px;
737 | }
738 | .nav-collapse .dropdown-menu li + li a {
739 | margin-bottom: 2px;
740 | }
741 | .nav-collapse .nav > li > a:hover,
742 | .nav-collapse .dropdown-menu a:hover {
743 | background-color: #222222;
744 | }
745 | .nav-collapse.in .btn-group {
746 | padding: 0;
747 | margin-top: 5px;
748 | }
749 | .nav-collapse .dropdown-menu {
750 | position: static;
751 | top: auto;
752 | left: auto;
753 | display: block;
754 | float: none;
755 | max-width: none;
756 | padding: 0;
757 | margin: 0 15px;
758 | background-color: transparent;
759 | border: none;
760 | -webkit-border-radius: 0;
761 | -moz-border-radius: 0;
762 | border-radius: 0;
763 | -webkit-box-shadow: none;
764 | -moz-box-shadow: none;
765 | box-shadow: none;
766 | }
767 | .nav-collapse .dropdown-menu:before,
768 | .nav-collapse .dropdown-menu:after {
769 | display: none;
770 | }
771 | .nav-collapse .dropdown-menu .divider {
772 | display: none;
773 | }
774 | .nav-collapse .navbar-form,
775 | .nav-collapse .navbar-search {
776 | float: none;
777 | padding: 9px 15px;
778 | margin: 9px 0;
779 | border-top: 1px solid #222222;
780 | border-bottom: 1px solid #222222;
781 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
782 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
783 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
784 | }
785 | .navbar .nav-collapse .nav.pull-right {
786 | float: none;
787 | margin-left: 0;
788 | }
789 | .nav-collapse,
790 | .nav-collapse.collapse {
791 | height: 0;
792 | overflow: hidden;
793 | }
794 | .navbar .btn-navbar {
795 | display: block;
796 | }
797 | .navbar-static .navbar-inner {
798 | padding-right: 10px;
799 | padding-left: 10px;
800 | }
801 | }
802 |
803 | @media (min-width: 980px) {
804 | .nav-collapse.collapse {
805 | height: auto !important;
806 | overflow: visible !important;
807 | }
808 | }
809 |
--------------------------------------------------------------------------------
/themes/default/css/bootstrap-responsive.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.0.3
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top{position:static;margin-bottom:18px}.navbar-fixed-top .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 9px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
10 |
--------------------------------------------------------------------------------
/themes/default/functions.php:
--------------------------------------------------------------------------------
1 | ';
16 | echo htmlspecialchars($message['message']);
17 | echo '';
18 | }
19 | }
20 | }
21 |
22 | ?>
--------------------------------------------------------------------------------
/themes/default/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/default/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/themes/default/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/default/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/themes/default/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | get('page_title', 'Codeigniter Theme default title');?>
6 |
7 |
8 |
9 |
10 |
11 |
12 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
28 |
29 |
30 |
31 |
32 |
33 |
52 |
53 |
54 |
55 |
56 |
57 |
Codeigniter Theme
58 | By Atomicon
59 |
60 |
This is an example theme (currently the default) this theme utilizes
61 | Bootstrap, from Twitter a simple and flexible HTML, CSS, and Javascript for popular user interface components and interactions.
62 |
63 |
Learn more »
64 |
65 |
66 |
67 |
68 |
69 |
70 | messages(FALSE) ); ?>
71 |
72 |
73 | content(); ?>
74 |
75 |
76 |
77 |
78 |
Heading
79 |
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.
80 |
View details »
81 |
82 |
83 |
Heading
84 |
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.
85 |
View details »
86 |
87 |
88 |
Heading
89 |
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.
90 |
View details »
91 |
92 |
93 |
94 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/themes/default/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.0.3
3 | * http://twitter.github.com/bootstrap/javascript.html#transitions
4 | * ===================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | $(function () {
24 |
25 | "use strict"; // jshint ;_;
26 |
27 |
28 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
29 | * ======================================================= */
30 |
31 | $.support.transition = (function () {
32 |
33 | var transitionEnd = (function () {
34 |
35 | var el = document.createElement('bootstrap')
36 | , transEndEventNames = {
37 | 'WebkitTransition' : 'webkitTransitionEnd'
38 | , 'MozTransition' : 'transitionend'
39 | , 'OTransition' : 'oTransitionEnd'
40 | , 'msTransition' : 'MSTransitionEnd'
41 | , 'transition' : 'transitionend'
42 | }
43 | , name
44 |
45 | for (name in transEndEventNames){
46 | if (el.style[name] !== undefined) {
47 | return transEndEventNames[name]
48 | }
49 | }
50 |
51 | }())
52 |
53 | return transitionEnd && {
54 | end: transitionEnd
55 | }
56 |
57 | })()
58 |
59 | })
60 |
61 | }(window.jQuery);/* ==========================================================
62 | * bootstrap-alert.js v2.0.3
63 | * http://twitter.github.com/bootstrap/javascript.html#alerts
64 | * ==========================================================
65 | * Copyright 2012 Twitter, Inc.
66 | *
67 | * Licensed under the Apache License, Version 2.0 (the "License");
68 | * you may not use this file except in compliance with the License.
69 | * You may obtain a copy of the License at
70 | *
71 | * http://www.apache.org/licenses/LICENSE-2.0
72 | *
73 | * Unless required by applicable law or agreed to in writing, software
74 | * distributed under the License is distributed on an "AS IS" BASIS,
75 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
76 | * See the License for the specific language governing permissions and
77 | * limitations under the License.
78 | * ========================================================== */
79 |
80 |
81 | !function ($) {
82 |
83 | "use strict"; // jshint ;_;
84 |
85 |
86 | /* ALERT CLASS DEFINITION
87 | * ====================== */
88 |
89 | var dismiss = '[data-dismiss="alert"]'
90 | , Alert = function (el) {
91 | $(el).on('click', dismiss, this.close)
92 | }
93 |
94 | Alert.prototype.close = function (e) {
95 | var $this = $(this)
96 | , selector = $this.attr('data-target')
97 | , $parent
98 |
99 | if (!selector) {
100 | selector = $this.attr('href')
101 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
102 | }
103 |
104 | $parent = $(selector)
105 |
106 | e && e.preventDefault()
107 |
108 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
109 |
110 | $parent.trigger(e = $.Event('close'))
111 |
112 | if (e.isDefaultPrevented()) return
113 |
114 | $parent.removeClass('in')
115 |
116 | function removeElement() {
117 | $parent
118 | .trigger('closed')
119 | .remove()
120 | }
121 |
122 | $.support.transition && $parent.hasClass('fade') ?
123 | $parent.on($.support.transition.end, removeElement) :
124 | removeElement()
125 | }
126 |
127 |
128 | /* ALERT PLUGIN DEFINITION
129 | * ======================= */
130 |
131 | $.fn.alert = function (option) {
132 | return this.each(function () {
133 | var $this = $(this)
134 | , data = $this.data('alert')
135 | if (!data) $this.data('alert', (data = new Alert(this)))
136 | if (typeof option == 'string') data[option].call($this)
137 | })
138 | }
139 |
140 | $.fn.alert.Constructor = Alert
141 |
142 |
143 | /* ALERT DATA-API
144 | * ============== */
145 |
146 | $(function () {
147 | $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
148 | })
149 |
150 | }(window.jQuery);/* ============================================================
151 | * bootstrap-button.js v2.0.3
152 | * http://twitter.github.com/bootstrap/javascript.html#buttons
153 | * ============================================================
154 | * Copyright 2012 Twitter, Inc.
155 | *
156 | * Licensed under the Apache License, Version 2.0 (the "License");
157 | * you may not use this file except in compliance with the License.
158 | * You may obtain a copy of the License at
159 | *
160 | * http://www.apache.org/licenses/LICENSE-2.0
161 | *
162 | * Unless required by applicable law or agreed to in writing, software
163 | * distributed under the License is distributed on an "AS IS" BASIS,
164 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
165 | * See the License for the specific language governing permissions and
166 | * limitations under the License.
167 | * ============================================================ */
168 |
169 |
170 | !function ($) {
171 |
172 | "use strict"; // jshint ;_;
173 |
174 |
175 | /* BUTTON PUBLIC CLASS DEFINITION
176 | * ============================== */
177 |
178 | var Button = function (element, options) {
179 | this.$element = $(element)
180 | this.options = $.extend({}, $.fn.button.defaults, options)
181 | }
182 |
183 | Button.prototype.setState = function (state) {
184 | var d = 'disabled'
185 | , $el = this.$element
186 | , data = $el.data()
187 | , val = $el.is('input') ? 'val' : 'html'
188 |
189 | state = state + 'Text'
190 | data.resetText || $el.data('resetText', $el[val]())
191 |
192 | $el[val](data[state] || this.options[state])
193 |
194 | // push to event loop to allow forms to submit
195 | setTimeout(function () {
196 | state == 'loadingText' ?
197 | $el.addClass(d).attr(d, d) :
198 | $el.removeClass(d).removeAttr(d)
199 | }, 0)
200 | }
201 |
202 | Button.prototype.toggle = function () {
203 | var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
204 |
205 | $parent && $parent
206 | .find('.active')
207 | .removeClass('active')
208 |
209 | this.$element.toggleClass('active')
210 | }
211 |
212 |
213 | /* BUTTON PLUGIN DEFINITION
214 | * ======================== */
215 |
216 | $.fn.button = function (option) {
217 | return this.each(function () {
218 | var $this = $(this)
219 | , data = $this.data('button')
220 | , options = typeof option == 'object' && option
221 | if (!data) $this.data('button', (data = new Button(this, options)))
222 | if (option == 'toggle') data.toggle()
223 | else if (option) data.setState(option)
224 | })
225 | }
226 |
227 | $.fn.button.defaults = {
228 | loadingText: 'loading...'
229 | }
230 |
231 | $.fn.button.Constructor = Button
232 |
233 |
234 | /* BUTTON DATA-API
235 | * =============== */
236 |
237 | $(function () {
238 | $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
239 | var $btn = $(e.target)
240 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
241 | $btn.button('toggle')
242 | })
243 | })
244 |
245 | }(window.jQuery);/* ==========================================================
246 | * bootstrap-carousel.js v2.0.3
247 | * http://twitter.github.com/bootstrap/javascript.html#carousel
248 | * ==========================================================
249 | * Copyright 2012 Twitter, Inc.
250 | *
251 | * Licensed under the Apache License, Version 2.0 (the "License");
252 | * you may not use this file except in compliance with the License.
253 | * You may obtain a copy of the License at
254 | *
255 | * http://www.apache.org/licenses/LICENSE-2.0
256 | *
257 | * Unless required by applicable law or agreed to in writing, software
258 | * distributed under the License is distributed on an "AS IS" BASIS,
259 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
260 | * See the License for the specific language governing permissions and
261 | * limitations under the License.
262 | * ========================================================== */
263 |
264 |
265 | !function ($) {
266 |
267 | "use strict"; // jshint ;_;
268 |
269 |
270 | /* CAROUSEL CLASS DEFINITION
271 | * ========================= */
272 |
273 | var Carousel = function (element, options) {
274 | this.$element = $(element)
275 | this.options = options
276 | this.options.slide && this.slide(this.options.slide)
277 | this.options.pause == 'hover' && this.$element
278 | .on('mouseenter', $.proxy(this.pause, this))
279 | .on('mouseleave', $.proxy(this.cycle, this))
280 | }
281 |
282 | Carousel.prototype = {
283 |
284 | cycle: function (e) {
285 | if (!e) this.paused = false
286 | this.options.interval
287 | && !this.paused
288 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
289 | return this
290 | }
291 |
292 | , to: function (pos) {
293 | var $active = this.$element.find('.active')
294 | , children = $active.parent().children()
295 | , activePos = children.index($active)
296 | , that = this
297 |
298 | if (pos > (children.length - 1) || pos < 0) return
299 |
300 | if (this.sliding) {
301 | return this.$element.one('slid', function () {
302 | that.to(pos)
303 | })
304 | }
305 |
306 | if (activePos == pos) {
307 | return this.pause().cycle()
308 | }
309 |
310 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
311 | }
312 |
313 | , pause: function (e) {
314 | if (!e) this.paused = true
315 | clearInterval(this.interval)
316 | this.interval = null
317 | return this
318 | }
319 |
320 | , next: function () {
321 | if (this.sliding) return
322 | return this.slide('next')
323 | }
324 |
325 | , prev: function () {
326 | if (this.sliding) return
327 | return this.slide('prev')
328 | }
329 |
330 | , slide: function (type, next) {
331 | var $active = this.$element.find('.active')
332 | , $next = next || $active[type]()
333 | , isCycling = this.interval
334 | , direction = type == 'next' ? 'left' : 'right'
335 | , fallback = type == 'next' ? 'first' : 'last'
336 | , that = this
337 | , e = $.Event('slide')
338 |
339 | this.sliding = true
340 |
341 | isCycling && this.pause()
342 |
343 | $next = $next.length ? $next : this.$element.find('.item')[fallback]()
344 |
345 | if ($next.hasClass('active')) return
346 |
347 | if ($.support.transition && this.$element.hasClass('slide')) {
348 | this.$element.trigger(e)
349 | if (e.isDefaultPrevented()) return
350 | $next.addClass(type)
351 | $next[0].offsetWidth // force reflow
352 | $active.addClass(direction)
353 | $next.addClass(direction)
354 | this.$element.one($.support.transition.end, function () {
355 | $next.removeClass([type, direction].join(' ')).addClass('active')
356 | $active.removeClass(['active', direction].join(' '))
357 | that.sliding = false
358 | setTimeout(function () { that.$element.trigger('slid') }, 0)
359 | })
360 | } else {
361 | this.$element.trigger(e)
362 | if (e.isDefaultPrevented()) return
363 | $active.removeClass('active')
364 | $next.addClass('active')
365 | this.sliding = false
366 | this.$element.trigger('slid')
367 | }
368 |
369 | isCycling && this.cycle()
370 |
371 | return this
372 | }
373 |
374 | }
375 |
376 |
377 | /* CAROUSEL PLUGIN DEFINITION
378 | * ========================== */
379 |
380 | $.fn.carousel = function (option) {
381 | return this.each(function () {
382 | var $this = $(this)
383 | , data = $this.data('carousel')
384 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
385 | if (!data) $this.data('carousel', (data = new Carousel(this, options)))
386 | if (typeof option == 'number') data.to(option)
387 | else if (typeof option == 'string' || (option = options.slide)) data[option]()
388 | else if (options.interval) data.cycle()
389 | })
390 | }
391 |
392 | $.fn.carousel.defaults = {
393 | interval: 5000
394 | , pause: 'hover'
395 | }
396 |
397 | $.fn.carousel.Constructor = Carousel
398 |
399 |
400 | /* CAROUSEL DATA-API
401 | * ================= */
402 |
403 | $(function () {
404 | $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
405 | var $this = $(this), href
406 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
407 | , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
408 | $target.carousel(options)
409 | e.preventDefault()
410 | })
411 | })
412 |
413 | }(window.jQuery);/* =============================================================
414 | * bootstrap-collapse.js v2.0.3
415 | * http://twitter.github.com/bootstrap/javascript.html#collapse
416 | * =============================================================
417 | * Copyright 2012 Twitter, Inc.
418 | *
419 | * Licensed under the Apache License, Version 2.0 (the "License");
420 | * you may not use this file except in compliance with the License.
421 | * You may obtain a copy of the License at
422 | *
423 | * http://www.apache.org/licenses/LICENSE-2.0
424 | *
425 | * Unless required by applicable law or agreed to in writing, software
426 | * distributed under the License is distributed on an "AS IS" BASIS,
427 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
428 | * See the License for the specific language governing permissions and
429 | * limitations under the License.
430 | * ============================================================ */
431 |
432 |
433 | !function ($) {
434 |
435 | "use strict"; // jshint ;_;
436 |
437 |
438 | /* COLLAPSE PUBLIC CLASS DEFINITION
439 | * ================================ */
440 |
441 | var Collapse = function (element, options) {
442 | this.$element = $(element)
443 | this.options = $.extend({}, $.fn.collapse.defaults, options)
444 |
445 | if (this.options.parent) {
446 | this.$parent = $(this.options.parent)
447 | }
448 |
449 | this.options.toggle && this.toggle()
450 | }
451 |
452 | Collapse.prototype = {
453 |
454 | constructor: Collapse
455 |
456 | , dimension: function () {
457 | var hasWidth = this.$element.hasClass('width')
458 | return hasWidth ? 'width' : 'height'
459 | }
460 |
461 | , show: function () {
462 | var dimension
463 | , scroll
464 | , actives
465 | , hasData
466 |
467 | if (this.transitioning) return
468 |
469 | dimension = this.dimension()
470 | scroll = $.camelCase(['scroll', dimension].join('-'))
471 | actives = this.$parent && this.$parent.find('> .accordion-group > .in')
472 |
473 | if (actives && actives.length) {
474 | hasData = actives.data('collapse')
475 | if (hasData && hasData.transitioning) return
476 | actives.collapse('hide')
477 | hasData || actives.data('collapse', null)
478 | }
479 |
480 | this.$element[dimension](0)
481 | this.transition('addClass', $.Event('show'), 'shown')
482 | this.$element[dimension](this.$element[0][scroll])
483 | }
484 |
485 | , hide: function () {
486 | var dimension
487 | if (this.transitioning) return
488 | dimension = this.dimension()
489 | this.reset(this.$element[dimension]())
490 | this.transition('removeClass', $.Event('hide'), 'hidden')
491 | this.$element[dimension](0)
492 | }
493 |
494 | , reset: function (size) {
495 | var dimension = this.dimension()
496 |
497 | this.$element
498 | .removeClass('collapse')
499 | [dimension](size || 'auto')
500 | [0].offsetWidth
501 |
502 | this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
503 |
504 | return this
505 | }
506 |
507 | , transition: function (method, startEvent, completeEvent) {
508 | var that = this
509 | , complete = function () {
510 | if (startEvent.type == 'show') that.reset()
511 | that.transitioning = 0
512 | that.$element.trigger(completeEvent)
513 | }
514 |
515 | this.$element.trigger(startEvent)
516 |
517 | if (startEvent.isDefaultPrevented()) return
518 |
519 | this.transitioning = 1
520 |
521 | this.$element[method]('in')
522 |
523 | $.support.transition && this.$element.hasClass('collapse') ?
524 | this.$element.one($.support.transition.end, complete) :
525 | complete()
526 | }
527 |
528 | , toggle: function () {
529 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
530 | }
531 |
532 | }
533 |
534 |
535 | /* COLLAPSIBLE PLUGIN DEFINITION
536 | * ============================== */
537 |
538 | $.fn.collapse = function (option) {
539 | return this.each(function () {
540 | var $this = $(this)
541 | , data = $this.data('collapse')
542 | , options = typeof option == 'object' && option
543 | if (!data) $this.data('collapse', (data = new Collapse(this, options)))
544 | if (typeof option == 'string') data[option]()
545 | })
546 | }
547 |
548 | $.fn.collapse.defaults = {
549 | toggle: true
550 | }
551 |
552 | $.fn.collapse.Constructor = Collapse
553 |
554 |
555 | /* COLLAPSIBLE DATA-API
556 | * ==================== */
557 |
558 | $(function () {
559 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
560 | var $this = $(this), href
561 | , target = $this.attr('data-target')
562 | || e.preventDefault()
563 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
564 | , option = $(target).data('collapse') ? 'toggle' : $this.data()
565 | $(target).collapse(option)
566 | })
567 | })
568 |
569 | }(window.jQuery);/* ============================================================
570 | * bootstrap-dropdown.js v2.0.3
571 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns
572 | * ============================================================
573 | * Copyright 2012 Twitter, Inc.
574 | *
575 | * Licensed under the Apache License, Version 2.0 (the "License");
576 | * you may not use this file except in compliance with the License.
577 | * You may obtain a copy of the License at
578 | *
579 | * http://www.apache.org/licenses/LICENSE-2.0
580 | *
581 | * Unless required by applicable law or agreed to in writing, software
582 | * distributed under the License is distributed on an "AS IS" BASIS,
583 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
584 | * See the License for the specific language governing permissions and
585 | * limitations under the License.
586 | * ============================================================ */
587 |
588 |
589 | !function ($) {
590 |
591 | "use strict"; // jshint ;_;
592 |
593 |
594 | /* DROPDOWN CLASS DEFINITION
595 | * ========================= */
596 |
597 | var toggle = '[data-toggle="dropdown"]'
598 | , Dropdown = function (element) {
599 | var $el = $(element).on('click.dropdown.data-api', this.toggle)
600 | $('html').on('click.dropdown.data-api', function () {
601 | $el.parent().removeClass('open')
602 | })
603 | }
604 |
605 | Dropdown.prototype = {
606 |
607 | constructor: Dropdown
608 |
609 | , toggle: function (e) {
610 | var $this = $(this)
611 | , $parent
612 | , selector
613 | , isActive
614 |
615 | if ($this.is('.disabled, :disabled')) return
616 |
617 | selector = $this.attr('data-target')
618 |
619 | if (!selector) {
620 | selector = $this.attr('href')
621 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
622 | }
623 |
624 | $parent = $(selector)
625 | $parent.length || ($parent = $this.parent())
626 |
627 | isActive = $parent.hasClass('open')
628 |
629 | clearMenus()
630 |
631 | if (!isActive) $parent.toggleClass('open')
632 |
633 | return false
634 | }
635 |
636 | }
637 |
638 | function clearMenus() {
639 | $(toggle).parent().removeClass('open')
640 | }
641 |
642 |
643 | /* DROPDOWN PLUGIN DEFINITION
644 | * ========================== */
645 |
646 | $.fn.dropdown = function (option) {
647 | return this.each(function () {
648 | var $this = $(this)
649 | , data = $this.data('dropdown')
650 | if (!data) $this.data('dropdown', (data = new Dropdown(this)))
651 | if (typeof option == 'string') data[option].call($this)
652 | })
653 | }
654 |
655 | $.fn.dropdown.Constructor = Dropdown
656 |
657 |
658 | /* APPLY TO STANDARD DROPDOWN ELEMENTS
659 | * =================================== */
660 |
661 | $(function () {
662 | $('html').on('click.dropdown.data-api', clearMenus)
663 | $('body')
664 | .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
665 | .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
666 | })
667 |
668 | }(window.jQuery);/* =========================================================
669 | * bootstrap-modal.js v2.0.3
670 | * http://twitter.github.com/bootstrap/javascript.html#modals
671 | * =========================================================
672 | * Copyright 2012 Twitter, Inc.
673 | *
674 | * Licensed under the Apache License, Version 2.0 (the "License");
675 | * you may not use this file except in compliance with the License.
676 | * You may obtain a copy of the License at
677 | *
678 | * http://www.apache.org/licenses/LICENSE-2.0
679 | *
680 | * Unless required by applicable law or agreed to in writing, software
681 | * distributed under the License is distributed on an "AS IS" BASIS,
682 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
683 | * See the License for the specific language governing permissions and
684 | * limitations under the License.
685 | * ========================================================= */
686 |
687 |
688 | !function ($) {
689 |
690 | "use strict"; // jshint ;_;
691 |
692 |
693 | /* MODAL CLASS DEFINITION
694 | * ====================== */
695 |
696 | var Modal = function (content, options) {
697 | this.options = options
698 | this.$element = $(content)
699 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
700 | }
701 |
702 | Modal.prototype = {
703 |
704 | constructor: Modal
705 |
706 | , toggle: function () {
707 | return this[!this.isShown ? 'show' : 'hide']()
708 | }
709 |
710 | , show: function () {
711 | var that = this
712 | , e = $.Event('show')
713 |
714 | this.$element.trigger(e)
715 |
716 | if (this.isShown || e.isDefaultPrevented()) return
717 |
718 | $('body').addClass('modal-open')
719 |
720 | this.isShown = true
721 |
722 | escape.call(this)
723 | backdrop.call(this, function () {
724 | var transition = $.support.transition && that.$element.hasClass('fade')
725 |
726 | if (!that.$element.parent().length) {
727 | that.$element.appendTo(document.body) //don't move modals dom position
728 | }
729 |
730 | that.$element
731 | .show()
732 |
733 | if (transition) {
734 | that.$element[0].offsetWidth // force reflow
735 | }
736 |
737 | that.$element.addClass('in')
738 |
739 | transition ?
740 | that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
741 | that.$element.trigger('shown')
742 |
743 | })
744 | }
745 |
746 | , hide: function (e) {
747 | e && e.preventDefault()
748 |
749 | var that = this
750 |
751 | e = $.Event('hide')
752 |
753 | this.$element.trigger(e)
754 |
755 | if (!this.isShown || e.isDefaultPrevented()) return
756 |
757 | this.isShown = false
758 |
759 | $('body').removeClass('modal-open')
760 |
761 | escape.call(this)
762 |
763 | this.$element.removeClass('in')
764 |
765 | $.support.transition && this.$element.hasClass('fade') ?
766 | hideWithTransition.call(this) :
767 | hideModal.call(this)
768 | }
769 |
770 | }
771 |
772 |
773 | /* MODAL PRIVATE METHODS
774 | * ===================== */
775 |
776 | function hideWithTransition() {
777 | var that = this
778 | , timeout = setTimeout(function () {
779 | that.$element.off($.support.transition.end)
780 | hideModal.call(that)
781 | }, 500)
782 |
783 | this.$element.one($.support.transition.end, function () {
784 | clearTimeout(timeout)
785 | hideModal.call(that)
786 | })
787 | }
788 |
789 | function hideModal(that) {
790 | this.$element
791 | .hide()
792 | .trigger('hidden')
793 |
794 | backdrop.call(this)
795 | }
796 |
797 | function backdrop(callback) {
798 | var that = this
799 | , animate = this.$element.hasClass('fade') ? 'fade' : ''
800 |
801 | if (this.isShown && this.options.backdrop) {
802 | var doAnimate = $.support.transition && animate
803 |
804 | this.$backdrop = $('
')
805 | .appendTo(document.body)
806 |
807 | if (this.options.backdrop != 'static') {
808 | this.$backdrop.click($.proxy(this.hide, this))
809 | }
810 |
811 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
812 |
813 | this.$backdrop.addClass('in')
814 |
815 | doAnimate ?
816 | this.$backdrop.one($.support.transition.end, callback) :
817 | callback()
818 |
819 | } else if (!this.isShown && this.$backdrop) {
820 | this.$backdrop.removeClass('in')
821 |
822 | $.support.transition && this.$element.hasClass('fade')?
823 | this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
824 | removeBackdrop.call(this)
825 |
826 | } else if (callback) {
827 | callback()
828 | }
829 | }
830 |
831 | function removeBackdrop() {
832 | this.$backdrop.remove()
833 | this.$backdrop = null
834 | }
835 |
836 | function escape() {
837 | var that = this
838 | if (this.isShown && this.options.keyboard) {
839 | $(document).on('keyup.dismiss.modal', function ( e ) {
840 | e.which == 27 && that.hide()
841 | })
842 | } else if (!this.isShown) {
843 | $(document).off('keyup.dismiss.modal')
844 | }
845 | }
846 |
847 |
848 | /* MODAL PLUGIN DEFINITION
849 | * ======================= */
850 |
851 | $.fn.modal = function (option) {
852 | return this.each(function () {
853 | var $this = $(this)
854 | , data = $this.data('modal')
855 | , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
856 | if (!data) $this.data('modal', (data = new Modal(this, options)))
857 | if (typeof option == 'string') data[option]()
858 | else if (options.show) data.show()
859 | })
860 | }
861 |
862 | $.fn.modal.defaults = {
863 | backdrop: true
864 | , keyboard: true
865 | , show: true
866 | }
867 |
868 | $.fn.modal.Constructor = Modal
869 |
870 |
871 | /* MODAL DATA-API
872 | * ============== */
873 |
874 | $(function () {
875 | $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
876 | var $this = $(this), href
877 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
878 | , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
879 |
880 | e.preventDefault()
881 | $target.modal(option)
882 | })
883 | })
884 |
885 | }(window.jQuery);/* ===========================================================
886 | * bootstrap-tooltip.js v2.0.3
887 | * http://twitter.github.com/bootstrap/javascript.html#tooltips
888 | * Inspired by the original jQuery.tipsy by Jason Frame
889 | * ===========================================================
890 | * Copyright 2012 Twitter, Inc.
891 | *
892 | * Licensed under the Apache License, Version 2.0 (the "License");
893 | * you may not use this file except in compliance with the License.
894 | * You may obtain a copy of the License at
895 | *
896 | * http://www.apache.org/licenses/LICENSE-2.0
897 | *
898 | * Unless required by applicable law or agreed to in writing, software
899 | * distributed under the License is distributed on an "AS IS" BASIS,
900 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
901 | * See the License for the specific language governing permissions and
902 | * limitations under the License.
903 | * ========================================================== */
904 |
905 |
906 | !function ($) {
907 |
908 | "use strict"; // jshint ;_;
909 |
910 |
911 | /* TOOLTIP PUBLIC CLASS DEFINITION
912 | * =============================== */
913 |
914 | var Tooltip = function (element, options) {
915 | this.init('tooltip', element, options)
916 | }
917 |
918 | Tooltip.prototype = {
919 |
920 | constructor: Tooltip
921 |
922 | , init: function (type, element, options) {
923 | var eventIn
924 | , eventOut
925 |
926 | this.type = type
927 | this.$element = $(element)
928 | this.options = this.getOptions(options)
929 | this.enabled = true
930 |
931 | if (this.options.trigger != 'manual') {
932 | eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
933 | eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
934 | this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
935 | this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
936 | }
937 |
938 | this.options.selector ?
939 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
940 | this.fixTitle()
941 | }
942 |
943 | , getOptions: function (options) {
944 | options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
945 |
946 | if (options.delay && typeof options.delay == 'number') {
947 | options.delay = {
948 | show: options.delay
949 | , hide: options.delay
950 | }
951 | }
952 |
953 | return options
954 | }
955 |
956 | , enter: function (e) {
957 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
958 |
959 | if (!self.options.delay || !self.options.delay.show) return self.show()
960 |
961 | clearTimeout(this.timeout)
962 | self.hoverState = 'in'
963 | this.timeout = setTimeout(function() {
964 | if (self.hoverState == 'in') self.show()
965 | }, self.options.delay.show)
966 | }
967 |
968 | , leave: function (e) {
969 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
970 |
971 | if (!self.options.delay || !self.options.delay.hide) return self.hide()
972 |
973 | clearTimeout(this.timeout)
974 | self.hoverState = 'out'
975 | this.timeout = setTimeout(function() {
976 | if (self.hoverState == 'out') self.hide()
977 | }, self.options.delay.hide)
978 | }
979 |
980 | , show: function () {
981 | var $tip
982 | , inside
983 | , pos
984 | , actualWidth
985 | , actualHeight
986 | , placement
987 | , tp
988 |
989 | if (this.hasContent() && this.enabled) {
990 | $tip = this.tip()
991 | this.setContent()
992 |
993 | if (this.options.animation) {
994 | $tip.addClass('fade')
995 | }
996 |
997 | placement = typeof this.options.placement == 'function' ?
998 | this.options.placement.call(this, $tip[0], this.$element[0]) :
999 | this.options.placement
1000 |
1001 | inside = /in/.test(placement)
1002 |
1003 | $tip
1004 | .remove()
1005 | .css({ top: 0, left: 0, display: 'block' })
1006 | .appendTo(inside ? this.$element : document.body)
1007 |
1008 | pos = this.getPosition(inside)
1009 |
1010 | actualWidth = $tip[0].offsetWidth
1011 | actualHeight = $tip[0].offsetHeight
1012 |
1013 | switch (inside ? placement.split(' ')[1] : placement) {
1014 | case 'bottom':
1015 | tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1016 | break
1017 | case 'top':
1018 | tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1019 | break
1020 | case 'left':
1021 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1022 | break
1023 | case 'right':
1024 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1025 | break
1026 | }
1027 |
1028 | $tip
1029 | .css(tp)
1030 | .addClass(placement)
1031 | .addClass('in')
1032 | }
1033 | }
1034 |
1035 | , isHTML: function(text) {
1036 | // html string detection logic adapted from jQuery
1037 | return typeof text != 'string'
1038 | || ( text.charAt(0) === "<"
1039 | && text.charAt( text.length - 1 ) === ">"
1040 | && text.length >= 3
1041 | ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text)
1042 | }
1043 |
1044 | , setContent: function () {
1045 | var $tip = this.tip()
1046 | , title = this.getTitle()
1047 |
1048 | $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title)
1049 | $tip.removeClass('fade in top bottom left right')
1050 | }
1051 |
1052 | , hide: function () {
1053 | var that = this
1054 | , $tip = this.tip()
1055 |
1056 | $tip.removeClass('in')
1057 |
1058 | function removeWithAnimation() {
1059 | var timeout = setTimeout(function () {
1060 | $tip.off($.support.transition.end).remove()
1061 | }, 500)
1062 |
1063 | $tip.one($.support.transition.end, function () {
1064 | clearTimeout(timeout)
1065 | $tip.remove()
1066 | })
1067 | }
1068 |
1069 | $.support.transition && this.$tip.hasClass('fade') ?
1070 | removeWithAnimation() :
1071 | $tip.remove()
1072 | }
1073 |
1074 | , fixTitle: function () {
1075 | var $e = this.$element
1076 | if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1077 | $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
1078 | }
1079 | }
1080 |
1081 | , hasContent: function () {
1082 | return this.getTitle()
1083 | }
1084 |
1085 | , getPosition: function (inside) {
1086 | return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
1087 | width: this.$element[0].offsetWidth
1088 | , height: this.$element[0].offsetHeight
1089 | })
1090 | }
1091 |
1092 | , getTitle: function () {
1093 | var title
1094 | , $e = this.$element
1095 | , o = this.options
1096 |
1097 | title = $e.attr('data-original-title')
1098 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1099 |
1100 | return title
1101 | }
1102 |
1103 | , tip: function () {
1104 | return this.$tip = this.$tip || $(this.options.template)
1105 | }
1106 |
1107 | , validate: function () {
1108 | if (!this.$element[0].parentNode) {
1109 | this.hide()
1110 | this.$element = null
1111 | this.options = null
1112 | }
1113 | }
1114 |
1115 | , enable: function () {
1116 | this.enabled = true
1117 | }
1118 |
1119 | , disable: function () {
1120 | this.enabled = false
1121 | }
1122 |
1123 | , toggleEnabled: function () {
1124 | this.enabled = !this.enabled
1125 | }
1126 |
1127 | , toggle: function () {
1128 | this[this.tip().hasClass('in') ? 'hide' : 'show']()
1129 | }
1130 |
1131 | }
1132 |
1133 |
1134 | /* TOOLTIP PLUGIN DEFINITION
1135 | * ========================= */
1136 |
1137 | $.fn.tooltip = function ( option ) {
1138 | return this.each(function () {
1139 | var $this = $(this)
1140 | , data = $this.data('tooltip')
1141 | , options = typeof option == 'object' && option
1142 | if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1143 | if (typeof option == 'string') data[option]()
1144 | })
1145 | }
1146 |
1147 | $.fn.tooltip.Constructor = Tooltip
1148 |
1149 | $.fn.tooltip.defaults = {
1150 | animation: true
1151 | , placement: 'top'
1152 | , selector: false
1153 | , template: ''
1154 | , trigger: 'hover'
1155 | , title: ''
1156 | , delay: 0
1157 | }
1158 |
1159 | }(window.jQuery);/* ===========================================================
1160 | * bootstrap-popover.js v2.0.3
1161 | * http://twitter.github.com/bootstrap/javascript.html#popovers
1162 | * ===========================================================
1163 | * Copyright 2012 Twitter, Inc.
1164 | *
1165 | * Licensed under the Apache License, Version 2.0 (the "License");
1166 | * you may not use this file except in compliance with the License.
1167 | * You may obtain a copy of the License at
1168 | *
1169 | * http://www.apache.org/licenses/LICENSE-2.0
1170 | *
1171 | * Unless required by applicable law or agreed to in writing, software
1172 | * distributed under the License is distributed on an "AS IS" BASIS,
1173 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1174 | * See the License for the specific language governing permissions and
1175 | * limitations under the License.
1176 | * =========================================================== */
1177 |
1178 |
1179 | !function ($) {
1180 |
1181 | "use strict"; // jshint ;_;
1182 |
1183 |
1184 | /* POPOVER PUBLIC CLASS DEFINITION
1185 | * =============================== */
1186 |
1187 | var Popover = function ( element, options ) {
1188 | this.init('popover', element, options)
1189 | }
1190 |
1191 |
1192 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1193 | ========================================== */
1194 |
1195 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1196 |
1197 | constructor: Popover
1198 |
1199 | , setContent: function () {
1200 | var $tip = this.tip()
1201 | , title = this.getTitle()
1202 | , content = this.getContent()
1203 |
1204 | $tip.find('.popover-title')[this.isHTML(title) ? 'html' : 'text'](title)
1205 | $tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](content)
1206 |
1207 | $tip.removeClass('fade top bottom left right in')
1208 | }
1209 |
1210 | , hasContent: function () {
1211 | return this.getTitle() || this.getContent()
1212 | }
1213 |
1214 | , getContent: function () {
1215 | var content
1216 | , $e = this.$element
1217 | , o = this.options
1218 |
1219 | content = $e.attr('data-content')
1220 | || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1221 |
1222 | return content
1223 | }
1224 |
1225 | , tip: function () {
1226 | if (!this.$tip) {
1227 | this.$tip = $(this.options.template)
1228 | }
1229 | return this.$tip
1230 | }
1231 |
1232 | })
1233 |
1234 |
1235 | /* POPOVER PLUGIN DEFINITION
1236 | * ======================= */
1237 |
1238 | $.fn.popover = function (option) {
1239 | return this.each(function () {
1240 | var $this = $(this)
1241 | , data = $this.data('popover')
1242 | , options = typeof option == 'object' && option
1243 | if (!data) $this.data('popover', (data = new Popover(this, options)))
1244 | if (typeof option == 'string') data[option]()
1245 | })
1246 | }
1247 |
1248 | $.fn.popover.Constructor = Popover
1249 |
1250 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1251 | placement: 'right'
1252 | , content: ''
1253 | , template: ''
1254 | })
1255 |
1256 | }(window.jQuery);/* =============================================================
1257 | * bootstrap-scrollspy.js v2.0.3
1258 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1259 | * =============================================================
1260 | * Copyright 2012 Twitter, Inc.
1261 | *
1262 | * Licensed under the Apache License, Version 2.0 (the "License");
1263 | * you may not use this file except in compliance with the License.
1264 | * You may obtain a copy of the License at
1265 | *
1266 | * http://www.apache.org/licenses/LICENSE-2.0
1267 | *
1268 | * Unless required by applicable law or agreed to in writing, software
1269 | * distributed under the License is distributed on an "AS IS" BASIS,
1270 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1271 | * See the License for the specific language governing permissions and
1272 | * limitations under the License.
1273 | * ============================================================== */
1274 |
1275 |
1276 | !function ($) {
1277 |
1278 | "use strict"; // jshint ;_;
1279 |
1280 |
1281 | /* SCROLLSPY CLASS DEFINITION
1282 | * ========================== */
1283 |
1284 | function ScrollSpy( element, options) {
1285 | var process = $.proxy(this.process, this)
1286 | , $element = $(element).is('body') ? $(window) : $(element)
1287 | , href
1288 | this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1289 | this.$scrollElement = $element.on('scroll.scroll.data-api', process)
1290 | this.selector = (this.options.target
1291 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1292 | || '') + ' .nav li > a'
1293 | this.$body = $('body')
1294 | this.refresh()
1295 | this.process()
1296 | }
1297 |
1298 | ScrollSpy.prototype = {
1299 |
1300 | constructor: ScrollSpy
1301 |
1302 | , refresh: function () {
1303 | var self = this
1304 | , $targets
1305 |
1306 | this.offsets = $([])
1307 | this.targets = $([])
1308 |
1309 | $targets = this.$body
1310 | .find(this.selector)
1311 | .map(function () {
1312 | var $el = $(this)
1313 | , href = $el.data('target') || $el.attr('href')
1314 | , $href = /^#\w/.test(href) && $(href)
1315 | return ( $href
1316 | && href.length
1317 | && [[ $href.position().top, href ]] ) || null
1318 | })
1319 | .sort(function (a, b) { return a[0] - b[0] })
1320 | .each(function () {
1321 | self.offsets.push(this[0])
1322 | self.targets.push(this[1])
1323 | })
1324 | }
1325 |
1326 | , process: function () {
1327 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1328 | , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1329 | , maxScroll = scrollHeight - this.$scrollElement.height()
1330 | , offsets = this.offsets
1331 | , targets = this.targets
1332 | , activeTarget = this.activeTarget
1333 | , i
1334 |
1335 | if (scrollTop >= maxScroll) {
1336 | return activeTarget != (i = targets.last()[0])
1337 | && this.activate ( i )
1338 | }
1339 |
1340 | for (i = offsets.length; i--;) {
1341 | activeTarget != targets[i]
1342 | && scrollTop >= offsets[i]
1343 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1344 | && this.activate( targets[i] )
1345 | }
1346 | }
1347 |
1348 | , activate: function (target) {
1349 | var active
1350 | , selector
1351 |
1352 | this.activeTarget = target
1353 |
1354 | $(this.selector)
1355 | .parent('.active')
1356 | .removeClass('active')
1357 |
1358 | selector = this.selector
1359 | + '[data-target="' + target + '"],'
1360 | + this.selector + '[href="' + target + '"]'
1361 |
1362 | active = $(selector)
1363 | .parent('li')
1364 | .addClass('active')
1365 |
1366 | if (active.parent('.dropdown-menu')) {
1367 | active = active.closest('li.dropdown').addClass('active')
1368 | }
1369 |
1370 | active.trigger('activate')
1371 | }
1372 |
1373 | }
1374 |
1375 |
1376 | /* SCROLLSPY PLUGIN DEFINITION
1377 | * =========================== */
1378 |
1379 | $.fn.scrollspy = function ( option ) {
1380 | return this.each(function () {
1381 | var $this = $(this)
1382 | , data = $this.data('scrollspy')
1383 | , options = typeof option == 'object' && option
1384 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1385 | if (typeof option == 'string') data[option]()
1386 | })
1387 | }
1388 |
1389 | $.fn.scrollspy.Constructor = ScrollSpy
1390 |
1391 | $.fn.scrollspy.defaults = {
1392 | offset: 10
1393 | }
1394 |
1395 |
1396 | /* SCROLLSPY DATA-API
1397 | * ================== */
1398 |
1399 | $(function () {
1400 | $('[data-spy="scroll"]').each(function () {
1401 | var $spy = $(this)
1402 | $spy.scrollspy($spy.data())
1403 | })
1404 | })
1405 |
1406 | }(window.jQuery);/* ========================================================
1407 | * bootstrap-tab.js v2.0.3
1408 | * http://twitter.github.com/bootstrap/javascript.html#tabs
1409 | * ========================================================
1410 | * Copyright 2012 Twitter, Inc.
1411 | *
1412 | * Licensed under the Apache License, Version 2.0 (the "License");
1413 | * you may not use this file except in compliance with the License.
1414 | * You may obtain a copy of the License at
1415 | *
1416 | * http://www.apache.org/licenses/LICENSE-2.0
1417 | *
1418 | * Unless required by applicable law or agreed to in writing, software
1419 | * distributed under the License is distributed on an "AS IS" BASIS,
1420 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1421 | * See the License for the specific language governing permissions and
1422 | * limitations under the License.
1423 | * ======================================================== */
1424 |
1425 |
1426 | !function ($) {
1427 |
1428 | "use strict"; // jshint ;_;
1429 |
1430 |
1431 | /* TAB CLASS DEFINITION
1432 | * ==================== */
1433 |
1434 | var Tab = function ( element ) {
1435 | this.element = $(element)
1436 | }
1437 |
1438 | Tab.prototype = {
1439 |
1440 | constructor: Tab
1441 |
1442 | , show: function () {
1443 | var $this = this.element
1444 | , $ul = $this.closest('ul:not(.dropdown-menu)')
1445 | , selector = $this.attr('data-target')
1446 | , previous
1447 | , $target
1448 | , e
1449 |
1450 | if (!selector) {
1451 | selector = $this.attr('href')
1452 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1453 | }
1454 |
1455 | if ( $this.parent('li').hasClass('active') ) return
1456 |
1457 | previous = $ul.find('.active a').last()[0]
1458 |
1459 | e = $.Event('show', {
1460 | relatedTarget: previous
1461 | })
1462 |
1463 | $this.trigger(e)
1464 |
1465 | if (e.isDefaultPrevented()) return
1466 |
1467 | $target = $(selector)
1468 |
1469 | this.activate($this.parent('li'), $ul)
1470 | this.activate($target, $target.parent(), function () {
1471 | $this.trigger({
1472 | type: 'shown'
1473 | , relatedTarget: previous
1474 | })
1475 | })
1476 | }
1477 |
1478 | , activate: function ( element, container, callback) {
1479 | var $active = container.find('> .active')
1480 | , transition = callback
1481 | && $.support.transition
1482 | && $active.hasClass('fade')
1483 |
1484 | function next() {
1485 | $active
1486 | .removeClass('active')
1487 | .find('> .dropdown-menu > .active')
1488 | .removeClass('active')
1489 |
1490 | element.addClass('active')
1491 |
1492 | if (transition) {
1493 | element[0].offsetWidth // reflow for transition
1494 | element.addClass('in')
1495 | } else {
1496 | element.removeClass('fade')
1497 | }
1498 |
1499 | if ( element.parent('.dropdown-menu') ) {
1500 | element.closest('li.dropdown').addClass('active')
1501 | }
1502 |
1503 | callback && callback()
1504 | }
1505 |
1506 | transition ?
1507 | $active.one($.support.transition.end, next) :
1508 | next()
1509 |
1510 | $active.removeClass('in')
1511 | }
1512 | }
1513 |
1514 |
1515 | /* TAB PLUGIN DEFINITION
1516 | * ===================== */
1517 |
1518 | $.fn.tab = function ( option ) {
1519 | return this.each(function () {
1520 | var $this = $(this)
1521 | , data = $this.data('tab')
1522 | if (!data) $this.data('tab', (data = new Tab(this)))
1523 | if (typeof option == 'string') data[option]()
1524 | })
1525 | }
1526 |
1527 | $.fn.tab.Constructor = Tab
1528 |
1529 |
1530 | /* TAB DATA-API
1531 | * ============ */
1532 |
1533 | $(function () {
1534 | $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1535 | e.preventDefault()
1536 | $(this).tab('show')
1537 | })
1538 | })
1539 |
1540 | }(window.jQuery);/* =============================================================
1541 | * bootstrap-typeahead.js v2.0.3
1542 | * http://twitter.github.com/bootstrap/javascript.html#typeahead
1543 | * =============================================================
1544 | * Copyright 2012 Twitter, Inc.
1545 | *
1546 | * Licensed under the Apache License, Version 2.0 (the "License");
1547 | * you may not use this file except in compliance with the License.
1548 | * You may obtain a copy of the License at
1549 | *
1550 | * http://www.apache.org/licenses/LICENSE-2.0
1551 | *
1552 | * Unless required by applicable law or agreed to in writing, software
1553 | * distributed under the License is distributed on an "AS IS" BASIS,
1554 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1555 | * See the License for the specific language governing permissions and
1556 | * limitations under the License.
1557 | * ============================================================ */
1558 |
1559 |
1560 | !function($){
1561 |
1562 | "use strict"; // jshint ;_;
1563 |
1564 |
1565 | /* TYPEAHEAD PUBLIC CLASS DEFINITION
1566 | * ================================= */
1567 |
1568 | var Typeahead = function (element, options) {
1569 | this.$element = $(element)
1570 | this.options = $.extend({}, $.fn.typeahead.defaults, options)
1571 | this.matcher = this.options.matcher || this.matcher
1572 | this.sorter = this.options.sorter || this.sorter
1573 | this.highlighter = this.options.highlighter || this.highlighter
1574 | this.updater = this.options.updater || this.updater
1575 | this.$menu = $(this.options.menu).appendTo('body')
1576 | this.source = this.options.source
1577 | this.shown = false
1578 | this.listen()
1579 | }
1580 |
1581 | Typeahead.prototype = {
1582 |
1583 | constructor: Typeahead
1584 |
1585 | , select: function () {
1586 | var val = this.$menu.find('.active').attr('data-value')
1587 | this.$element
1588 | .val(this.updater(val))
1589 | .change()
1590 | return this.hide()
1591 | }
1592 |
1593 | , updater: function (item) {
1594 | return item
1595 | }
1596 |
1597 | , show: function () {
1598 | var pos = $.extend({}, this.$element.offset(), {
1599 | height: this.$element[0].offsetHeight
1600 | })
1601 |
1602 | this.$menu.css({
1603 | top: pos.top + pos.height
1604 | , left: pos.left
1605 | })
1606 |
1607 | this.$menu.show()
1608 | this.shown = true
1609 | return this
1610 | }
1611 |
1612 | , hide: function () {
1613 | this.$menu.hide()
1614 | this.shown = false
1615 | return this
1616 | }
1617 |
1618 | , lookup: function (event) {
1619 | var that = this
1620 | , items
1621 | , q
1622 |
1623 | this.query = this.$element.val()
1624 |
1625 | if (!this.query) {
1626 | return this.shown ? this.hide() : this
1627 | }
1628 |
1629 | items = $.grep(this.source, function (item) {
1630 | return that.matcher(item)
1631 | })
1632 |
1633 | items = this.sorter(items)
1634 |
1635 | if (!items.length) {
1636 | return this.shown ? this.hide() : this
1637 | }
1638 |
1639 | return this.render(items.slice(0, this.options.items)).show()
1640 | }
1641 |
1642 | , matcher: function (item) {
1643 | return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1644 | }
1645 |
1646 | , sorter: function (items) {
1647 | var beginswith = []
1648 | , caseSensitive = []
1649 | , caseInsensitive = []
1650 | , item
1651 |
1652 | while (item = items.shift()) {
1653 | if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1654 | else if (~item.indexOf(this.query)) caseSensitive.push(item)
1655 | else caseInsensitive.push(item)
1656 | }
1657 |
1658 | return beginswith.concat(caseSensitive, caseInsensitive)
1659 | }
1660 |
1661 | , highlighter: function (item) {
1662 | var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1663 | return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1664 | return '' + match + ' '
1665 | })
1666 | }
1667 |
1668 | , render: function (items) {
1669 | var that = this
1670 |
1671 | items = $(items).map(function (i, item) {
1672 | i = $(that.options.item).attr('data-value', item)
1673 | i.find('a').html(that.highlighter(item))
1674 | return i[0]
1675 | })
1676 |
1677 | items.first().addClass('active')
1678 | this.$menu.html(items)
1679 | return this
1680 | }
1681 |
1682 | , next: function (event) {
1683 | var active = this.$menu.find('.active').removeClass('active')
1684 | , next = active.next()
1685 |
1686 | if (!next.length) {
1687 | next = $(this.$menu.find('li')[0])
1688 | }
1689 |
1690 | next.addClass('active')
1691 | }
1692 |
1693 | , prev: function (event) {
1694 | var active = this.$menu.find('.active').removeClass('active')
1695 | , prev = active.prev()
1696 |
1697 | if (!prev.length) {
1698 | prev = this.$menu.find('li').last()
1699 | }
1700 |
1701 | prev.addClass('active')
1702 | }
1703 |
1704 | , listen: function () {
1705 | this.$element
1706 | .on('blur', $.proxy(this.blur, this))
1707 | .on('keypress', $.proxy(this.keypress, this))
1708 | .on('keyup', $.proxy(this.keyup, this))
1709 |
1710 | if ($.browser.webkit || $.browser.msie) {
1711 | this.$element.on('keydown', $.proxy(this.keypress, this))
1712 | }
1713 |
1714 | this.$menu
1715 | .on('click', $.proxy(this.click, this))
1716 | .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1717 | }
1718 |
1719 | , keyup: function (e) {
1720 | switch(e.keyCode) {
1721 | case 40: // down arrow
1722 | case 38: // up arrow
1723 | break
1724 |
1725 | case 9: // tab
1726 | case 13: // enter
1727 | if (!this.shown) return
1728 | this.select()
1729 | break
1730 |
1731 | case 27: // escape
1732 | if (!this.shown) return
1733 | this.hide()
1734 | break
1735 |
1736 | default:
1737 | this.lookup()
1738 | }
1739 |
1740 | e.stopPropagation()
1741 | e.preventDefault()
1742 | }
1743 |
1744 | , keypress: function (e) {
1745 | if (!this.shown) return
1746 |
1747 | switch(e.keyCode) {
1748 | case 9: // tab
1749 | case 13: // enter
1750 | case 27: // escape
1751 | e.preventDefault()
1752 | break
1753 |
1754 | case 38: // up arrow
1755 | if (e.type != 'keydown') break
1756 | e.preventDefault()
1757 | this.prev()
1758 | break
1759 |
1760 | case 40: // down arrow
1761 | if (e.type != 'keydown') break
1762 | e.preventDefault()
1763 | this.next()
1764 | break
1765 | }
1766 |
1767 | e.stopPropagation()
1768 | }
1769 |
1770 | , blur: function (e) {
1771 | var that = this
1772 | setTimeout(function () { that.hide() }, 150)
1773 | }
1774 |
1775 | , click: function (e) {
1776 | e.stopPropagation()
1777 | e.preventDefault()
1778 | this.select()
1779 | }
1780 |
1781 | , mouseenter: function (e) {
1782 | this.$menu.find('.active').removeClass('active')
1783 | $(e.currentTarget).addClass('active')
1784 | }
1785 |
1786 | }
1787 |
1788 |
1789 | /* TYPEAHEAD PLUGIN DEFINITION
1790 | * =========================== */
1791 |
1792 | $.fn.typeahead = function (option) {
1793 | return this.each(function () {
1794 | var $this = $(this)
1795 | , data = $this.data('typeahead')
1796 | , options = typeof option == 'object' && option
1797 | if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1798 | if (typeof option == 'string') data[option]()
1799 | })
1800 | }
1801 |
1802 | $.fn.typeahead.defaults = {
1803 | source: []
1804 | , items: 8
1805 | , menu: ''
1806 | , item: ' '
1807 | }
1808 |
1809 | $.fn.typeahead.Constructor = Typeahead
1810 |
1811 |
1812 | /* TYPEAHEAD DATA-API
1813 | * ================== */
1814 |
1815 | $(function () {
1816 | $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1817 | var $this = $(this)
1818 | if ($this.data('typeahead')) return
1819 | e.preventDefault()
1820 | $this.typeahead($this.data())
1821 | })
1822 | })
1823 |
1824 | }(window.jQuery);
--------------------------------------------------------------------------------
/themes/default/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap.js by @fat & @mdo
3 | * Copyright 2012 Twitter, Inc.
4 | * http://www.apache.org/licenses/LICENSE-2.0.txt
5 | */
6 | !function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('
').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.hide)return c.hide();clearTimeout(this.timeout),c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:''})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return""+b+" "})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'',item:' '},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
--------------------------------------------------------------------------------
/themes/index.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/index.html
--------------------------------------------------------------------------------
/themes/skeleton/images/apple-touch-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/skeleton/images/apple-touch-icon-114x114.png
--------------------------------------------------------------------------------
/themes/skeleton/images/apple-touch-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/skeleton/images/apple-touch-icon-72x72.png
--------------------------------------------------------------------------------
/themes/skeleton/images/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/skeleton/images/apple-touch-icon.png
--------------------------------------------------------------------------------
/themes/skeleton/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atomicon/codeigniter-theme/4aef08f2c21c1870a224e6ab5282b31032f51a5e/themes/skeleton/images/favicon.ico
--------------------------------------------------------------------------------
/themes/skeleton/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 | get('page_title', 'Codeigniter Theme default title');?>
12 |
13 |
14 |
15 |
17 |
18 |
19 |
21 |
22 |
23 |
24 |
25 |
28 |
29 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
43 |
44 |
45 |
46 |
47 |
48 |
Codeigniter theme Based on Skeleton
49 |
Version 1.1
50 |
51 |
52 |
53 |
54 | messages(); ?>
55 | content(); ?>
56 |
57 |
58 |
About Skeleton?
59 |
Skeleton is a small collection of well-organized CSS & JS files that can help you rapidly develop sites that look beautiful at any size, be it a 17" laptop screen or an iPhone. It's based on a responsive grid, but also provides very basic CSS for typography, buttons, tabs, forms and media queries. Go ahead, resize this super basic page to see the grid in action.
60 |
61 |
62 |
Three Core Principles
63 |
Skeleton is built on three core principles:
64 |
65 | A Responsive Grid Down To Mobile : Elegant scaling from a browser to tablets to mobile.
66 | Fast to Start : It's a tool for rapid development with best practices
67 | Style Agnostic : It provides the most basic, beautiful styles, but is meant to be overwritten.
68 |
69 |
70 |
71 |
Docs & Support
72 |
The easiest way to really get started with Skeleton is to check out the full docs and info at www.getskeleton.com. . Skeleton is also open-source and has a project on git , so check that out if you want to report bugs or create a pull request. If you have any questions, thoughts, concerns or feedback, please don't hesitate to email me at hi@getskeleton.com .
73 |
74 |
75 |
76 |
77 |
78 |
79 |
81 |
82 |
83 |
84 |
86 |
87 |
--------------------------------------------------------------------------------
/themes/skeleton/javascripts/tabs.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Skeleton V1.1
4 | * Copyright 2011, Dave Gamache
5 | * www.getskeleton.com
6 | * Free to use under the MIT license.
7 | * http://www.opensource.org/licenses/mit-license.php
8 | * 8/17/2011
9 | */
10 |
11 | (function ($) {
12 | // hash change handler
13 | function hashchange () {
14 | var hash = window.location.hash
15 | , el = $('ul.tabs [href*="' + hash + '"]')
16 | , content = $(hash)
17 |
18 | if (el.length && !el.hasClass('active') && content.length) {
19 | el.closest('.tabs').find('.active').removeClass('active');
20 | el.addClass('active');
21 | content.show().addClass('active').siblings().hide().removeClass('active');
22 | }
23 | }
24 |
25 | // listen on event and fire right away
26 | $(window).on('hashchange.skeleton', hashchange);
27 | hashchange();
28 | $(hashchange);
29 | })(jQuery);
30 |
--------------------------------------------------------------------------------
/themes/skeleton/stylesheets/base.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Skeleton V1.1
3 | * Copyright 2011, Dave Gamache
4 | * www.getskeleton.com
5 | * Free to use under the MIT license.
6 | * http://www.opensource.org/licenses/mit-license.php
7 | * 8/17/2011
8 | */
9 |
10 |
11 | /* Table of Content
12 | ==================================================
13 | #Reset & Basics
14 | #Basic Styles
15 | #Site Styles
16 | #Typography
17 | #Links
18 | #Lists
19 | #Images
20 | #Buttons
21 | #Tabs
22 | #Forms
23 | #Misc */
24 |
25 |
26 | /* #Reset & Basics (Inspired by E. Meyers)
27 | ================================================== */
28 | html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
29 | margin: 0;
30 | padding: 0;
31 | border: 0;
32 | font-size: 100%;
33 | font: inherit;
34 | vertical-align: baseline; }
35 | article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
36 | display: block; }
37 | body {
38 | line-height: 1; }
39 | ol, ul {
40 | list-style: none; }
41 | blockquote, q {
42 | quotes: none; }
43 | blockquote:before, blockquote:after,
44 | q:before, q:after {
45 | content: '';
46 | content: none; }
47 | table {
48 | border-collapse: collapse;
49 | border-spacing: 0; }
50 |
51 |
52 | /* #Basic Styles
53 | ================================================== */
54 | body {
55 | background: #fff;
56 | font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
57 | color: #444;
58 | -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
59 | -webkit-text-size-adjust: 100%;
60 | }
61 |
62 |
63 | /* #Typography
64 | ================================================== */
65 | h1, h2, h3, h4, h5, h6 {
66 | color: #181818;
67 | font-family: "Georgia", "Times New Roman", serif;
68 | font-weight: normal; }
69 | h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
70 | h1 { font-size: 46px; line-height: 50px; margin-bottom: 14px;}
71 | h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; }
72 | h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; }
73 | h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; }
74 | h5 { font-size: 17px; line-height: 24px; }
75 | h6 { font-size: 14px; line-height: 21px; }
76 | .subheader { color: #777; }
77 |
78 | p { margin: 0 0 20px 0; }
79 | p img { margin: 0; }
80 | p.lead { font-size: 21px; line-height: 27px; color: #777; }
81 |
82 | em { font-style: italic; }
83 | strong { font-weight: bold; color: #333; }
84 | small { font-size: 80%; }
85 |
86 | /* Blockquotes */
87 | blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; }
88 | blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
89 | blockquote cite { display: block; font-size: 12px; color: #555; }
90 | blockquote cite:before { content: "\2014 \0020"; }
91 | blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; }
92 |
93 | hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; }
94 |
95 |
96 | /* #Links
97 | ================================================== */
98 | a, a:visited { color: #333; text-decoration: underline; outline: 0; }
99 | a:hover, a:focus { color: #000; }
100 | p a, p a:visited { line-height: inherit; }
101 |
102 |
103 | /* #Lists
104 | ================================================== */
105 | ul, ol { margin-bottom: 20px; }
106 | ul { list-style: none outside; }
107 | ol { list-style: decimal; }
108 | ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
109 | ul.square { list-style: square outside; }
110 | ul.circle { list-style: circle outside; }
111 | ul.disc { list-style: disc outside; }
112 | ul ul, ul ol,
113 | ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; }
114 | ul ul li, ul ol li,
115 | ol ol li, ol ul li { margin-bottom: 6px; }
116 | li { line-height: 18px; margin-bottom: 12px; }
117 | ul.large li { line-height: 21px; }
118 | li p { line-height: 21px; }
119 |
120 | /* #Images
121 | ================================================== */
122 |
123 | img.scale-with-grid {
124 | max-width: 100%;
125 | height: auto; }
126 |
127 |
128 | /* #Buttons
129 | ================================================== */
130 |
131 | .button,
132 | button,
133 | input[type="submit"],
134 | input[type="reset"],
135 | input[type="button"] {
136 | background: #eee; /* Old browsers */
137 | background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */
138 | background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */
139 | background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */
140 | background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */
141 | background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */
142 | background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */
143 | border: 1px solid #aaa;
144 | border-top: 1px solid #ccc;
145 | border-left: 1px solid #ccc;
146 | padding: 4px 12px;
147 | -moz-border-radius: 3px;
148 | -webkit-border-radius: 3px;
149 | border-radius: 3px;
150 | color: #444;
151 | display: inline-block;
152 | font-size: 11px;
153 | font-weight: bold;
154 | text-decoration: none;
155 | text-shadow: 0 1px rgba(255, 255, 255, .75);
156 | cursor: pointer;
157 | margin-bottom: 20px;
158 | line-height: normal;
159 | padding: 8px 10px;
160 | font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; }
161 |
162 | .button:hover,
163 | button:hover,
164 | input[type="submit"]:hover,
165 | input[type="reset"]:hover,
166 | input[type="button"]:hover {
167 | color: #222;
168 | background: #ddd; /* Old browsers */
169 | background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */
170 | background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */
171 | background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */
172 | background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */
173 | background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */
174 | background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */
175 | border: 1px solid #888;
176 | border-top: 1px solid #aaa;
177 | border-left: 1px solid #aaa; }
178 |
179 | .button:active,
180 | button:active,
181 | input[type="submit"]:active,
182 | input[type="reset"]:active,
183 | input[type="button"]:active {
184 | border: 1px solid #666;
185 | background: #ccc; /* Old browsers */
186 | background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */
187 | background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */
188 | background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */
189 | background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */
190 | background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */
191 | background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ }
192 |
193 | .button.full-width,
194 | button.full-width,
195 | input[type="submit"].full-width,
196 | input[type="reset"].full-width,
197 | input[type="button"].full-width {
198 | width: 100%;
199 | padding-left: 0 !important;
200 | padding-right: 0 !important;
201 | text-align: center; }
202 |
203 | /* Fix for odd Mozilla border & padding issues */
204 | button::-moz-focus-inner,
205 | input::-moz-focus-inner {
206 | border: 0;
207 | padding: 0;
208 | }
209 |
210 |
211 | /* #Tabs (activate in tabs.js)
212 | ================================================== */
213 | ul.tabs {
214 | display: block;
215 | margin: 0 0 20px 0;
216 | padding: 0;
217 | border-bottom: solid 1px #ddd; }
218 | ul.tabs li {
219 | display: block;
220 | width: auto;
221 | height: 30px;
222 | padding: 0;
223 | float: left;
224 | margin-bottom: 0; }
225 | ul.tabs li a {
226 | display: block;
227 | text-decoration: none;
228 | width: auto;
229 | height: 29px;
230 | padding: 0px 20px;
231 | line-height: 30px;
232 | border: solid 1px #ddd;
233 | border-width: 1px 1px 0 0;
234 | margin: 0;
235 | background: #f5f5f5;
236 | font-size: 13px; }
237 | ul.tabs li a.active {
238 | background: #fff;
239 | height: 30px;
240 | position: relative;
241 | top: -4px;
242 | padding-top: 4px;
243 | border-left-width: 1px;
244 | margin: 0 0 0 -1px;
245 | color: #111;
246 | -moz-border-radius-topleft: 2px;
247 | -webkit-border-top-left-radius: 2px;
248 | border-top-left-radius: 2px;
249 | -moz-border-radius-topright: 2px;
250 | -webkit-border-top-right-radius: 2px;
251 | border-top-right-radius: 2px; }
252 | ul.tabs li:first-child a.active {
253 | margin-left: 0; }
254 | ul.tabs li:first-child a {
255 | border-width: 1px 1px 0 1px;
256 | -moz-border-radius-topleft: 2px;
257 | -webkit-border-top-left-radius: 2px;
258 | border-top-left-radius: 2px; }
259 | ul.tabs li:last-child a {
260 | -moz-border-radius-topright: 2px;
261 | -webkit-border-top-right-radius: 2px;
262 | border-top-right-radius: 2px; }
263 |
264 | ul.tabs-content { margin: 0; display: block; }
265 | ul.tabs-content > li { display:none; }
266 | ul.tabs-content > li.active { display: block; }
267 |
268 | /* Clearfixing tabs for beautiful stacking */
269 | ul.tabs:before,
270 | ul.tabs:after {
271 | content: '\0020';
272 | display: block;
273 | overflow: hidden;
274 | visibility: hidden;
275 | width: 0;
276 | height: 0; }
277 | ul.tabs:after {
278 | clear: both; }
279 | ul.tabs {
280 | zoom: 1; }
281 |
282 |
283 | /* #Forms
284 | ================================================== */
285 |
286 | form {
287 | margin-bottom: 20px; }
288 | fieldset {
289 | margin-bottom: 20px; }
290 | input[type="text"],
291 | input[type="password"],
292 | input[type="email"],
293 | textarea,
294 | select {
295 | border: 1px solid #ccc;
296 | padding: 6px 4px;
297 | outline: none;
298 | -moz-border-radius: 2px;
299 | -webkit-border-radius: 2px;
300 | border-radius: 2px;
301 | font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
302 | color: #777;
303 | margin: 0;
304 | width: 210px;
305 | max-width: 100%;
306 | display: block;
307 | margin-bottom: 20px;
308 | background: #fff; }
309 | select {
310 | padding: 0; }
311 | input[type="text"]:focus,
312 | input[type="password"]:focus,
313 | input[type="email"]:focus,
314 | textarea:focus {
315 | border: 1px solid #aaa;
316 | color: #444;
317 | -moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
318 | -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
319 | box-shadow: 0 0 3px rgba(0,0,0,.2); }
320 | textarea {
321 | min-height: 60px; }
322 | label,
323 | legend {
324 | display: block;
325 | font-weight: bold;
326 | font-size: 13px; }
327 | select {
328 | width: 220px; }
329 | input[type="checkbox"] {
330 | display: inline; }
331 | label span,
332 | legend span {
333 | font-weight: normal;
334 | font-size: 13px;
335 | color: #444; }
336 |
337 | /* #Misc
338 | ================================================== */
339 | .remove-bottom { margin-bottom: 0 !important; }
340 | .half-bottom { margin-bottom: 10px !important; }
341 | .add-bottom { margin-bottom: 20px !important; }
342 |
343 |
344 |
--------------------------------------------------------------------------------
/themes/skeleton/stylesheets/layout.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Skeleton V1.1
3 | * Copyright 2011, Dave Gamache
4 | * www.getskeleton.com
5 | * Free to use under the MIT license.
6 | * http://www.opensource.org/licenses/mit-license.php
7 | * 8/17/2011
8 | */
9 |
10 | /* Table of Content
11 | ==================================================
12 | #Site Styles
13 | #Page Styles
14 | #Media Queries
15 | #Font-Face */
16 |
17 | /* #Site Styles
18 | ================================================== */
19 |
20 | /* #Page Styles
21 | ================================================== */
22 |
23 | /* #Media Queries
24 | ================================================== */
25 |
26 | /* Smaller than standard 960 (devices and browsers) */
27 | @media only screen and (max-width: 959px) {}
28 |
29 | /* Tablet Portrait size to standard 960 (devices and browsers) */
30 | @media only screen and (min-width: 768px) and (max-width: 959px) {}
31 |
32 | /* All Mobile Sizes (devices and browser) */
33 | @media only screen and (max-width: 767px) {}
34 |
35 | /* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
36 | @media only screen and (min-width: 480px) and (max-width: 767px) {}
37 |
38 | /* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
39 | @media only screen and (max-width: 479px) {}
40 |
41 |
42 | /* #Font-Face
43 | ================================================== */
44 | /* This is the proper syntax for an @font-face file
45 | Just create a "fonts" folder at the root,
46 | copy your FontName into code below and remove
47 | comment brackets */
48 |
49 | /* @font-face {
50 | font-family: 'FontName';
51 | src: url('../fonts/FontName.eot');
52 | src: url('../fonts/FontName.eot?iefix') format('eot'),
53 | url('../fonts/FontName.woff') format('woff'),
54 | url('../fonts/FontName.ttf') format('truetype'),
55 | url('../fonts/FontName.svg#webfontZam02nTh') format('svg');
56 | font-weight: normal;
57 | font-style: normal; }
58 | */
--------------------------------------------------------------------------------
/themes/skeleton/stylesheets/skeleton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Skeleton V1.1
3 | * Copyright 2011, Dave Gamache
4 | * www.getskeleton.com
5 | * Free to use under the MIT license.
6 | * http://www.opensource.org/licenses/mit-license.php
7 | * 8/17/2011
8 | */
9 |
10 |
11 | /* Table of Contents
12 | ==================================================
13 | #Base 960 Grid
14 | #Tablet (Portrait)
15 | #Mobile (Portrait)
16 | #Mobile (Landscape)
17 | #Clearing */
18 |
19 |
20 |
21 | /* #Base 960 Grid
22 | ================================================== */
23 |
24 | .container { position: relative; width: 960px; margin: 0 auto; padding: 0; }
25 | .container .column,
26 | .container .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; }
27 | .row { margin-bottom: 20px; }
28 |
29 | /* Nested Column Classes */
30 | .column.alpha, .columns.alpha { margin-left: 0; }
31 | .column.omega, .columns.omega { margin-right: 0; }
32 |
33 | /* Base Grid */
34 | .container .one.column,
35 | .container .one.columns { width: 40px; }
36 | .container .two.columns { width: 100px; }
37 | .container .three.columns { width: 160px; }
38 | .container .four.columns { width: 220px; }
39 | .container .five.columns { width: 280px; }
40 | .container .six.columns { width: 340px; }
41 | .container .seven.columns { width: 400px; }
42 | .container .eight.columns { width: 460px; }
43 | .container .nine.columns { width: 520px; }
44 | .container .ten.columns { width: 580px; }
45 | .container .eleven.columns { width: 640px; }
46 | .container .twelve.columns { width: 700px; }
47 | .container .thirteen.columns { width: 760px; }
48 | .container .fourteen.columns { width: 820px; }
49 | .container .fifteen.columns { width: 880px; }
50 | .container .sixteen.columns { width: 940px; }
51 |
52 | .container .one-third.column { width: 300px; }
53 | .container .two-thirds.column { width: 620px; }
54 |
55 | /* Offsets */
56 | .container .offset-by-one { padding-left: 60px; }
57 | .container .offset-by-two { padding-left: 120px; }
58 | .container .offset-by-three { padding-left: 180px; }
59 | .container .offset-by-four { padding-left: 240px; }
60 | .container .offset-by-five { padding-left: 300px; }
61 | .container .offset-by-six { padding-left: 360px; }
62 | .container .offset-by-seven { padding-left: 420px; }
63 | .container .offset-by-eight { padding-left: 480px; }
64 | .container .offset-by-nine { padding-left: 540px; }
65 | .container .offset-by-ten { padding-left: 600px; }
66 | .container .offset-by-eleven { padding-left: 660px; }
67 | .container .offset-by-twelve { padding-left: 720px; }
68 | .container .offset-by-thirteen { padding-left: 780px; }
69 | .container .offset-by-fourteen { padding-left: 840px; }
70 | .container .offset-by-fifteen { padding-left: 900px; }
71 |
72 |
73 |
74 | /* #Tablet (Portrait)
75 | ================================================== */
76 |
77 | /* Note: Design for a width of 768px */
78 |
79 | @media only screen and (min-width: 768px) and (max-width: 959px) {
80 | .container { width: 768px; }
81 | .container .column,
82 | .container .columns { margin-left: 10px; margin-right: 10px; }
83 | .column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; }
84 | .column.omega, .columns.omega { margin-right: 0; margin-left: 10px; }
85 | .alpha.omega { margin-left: 0; margin-right: 0; }
86 |
87 | .container .one.column,
88 | .container .one.columns { width: 28px; }
89 | .container .two.columns { width: 76px; }
90 | .container .three.columns { width: 124px; }
91 | .container .four.columns { width: 172px; }
92 | .container .five.columns { width: 220px; }
93 | .container .six.columns { width: 268px; }
94 | .container .seven.columns { width: 316px; }
95 | .container .eight.columns { width: 364px; }
96 | .container .nine.columns { width: 412px; }
97 | .container .ten.columns { width: 460px; }
98 | .container .eleven.columns { width: 508px; }
99 | .container .twelve.columns { width: 556px; }
100 | .container .thirteen.columns { width: 604px; }
101 | .container .fourteen.columns { width: 652px; }
102 | .container .fifteen.columns { width: 700px; }
103 | .container .sixteen.columns { width: 748px; }
104 |
105 | .container .one-third.column { width: 236px; }
106 | .container .two-thirds.column { width: 492px; }
107 |
108 | /* Offsets */
109 | .container .offset-by-one { padding-left: 48px; }
110 | .container .offset-by-two { padding-left: 96px; }
111 | .container .offset-by-three { padding-left: 144px; }
112 | .container .offset-by-four { padding-left: 192px; }
113 | .container .offset-by-five { padding-left: 240px; }
114 | .container .offset-by-six { padding-left: 288px; }
115 | .container .offset-by-seven { padding-left: 336px; }
116 | .container .offset-by-eight { padding-left: 384px; }
117 | .container .offset-by-nine { padding-left: 432px; }
118 | .container .offset-by-ten { padding-left: 480px; }
119 | .container .offset-by-eleven { padding-left: 528px; }
120 | .container .offset-by-twelve { padding-left: 576px; }
121 | .container .offset-by-thirteen { padding-left: 624px; }
122 | .container .offset-by-fourteen { padding-left: 672px; }
123 | .container .offset-by-fifteen { padding-left: 720px; }
124 | }
125 |
126 |
127 | /* #Mobile (Portrait)
128 | ================================================== */
129 |
130 | /* Note: Design for a width of 320px */
131 |
132 | @media only screen and (max-width: 767px) {
133 | .container { width: 300px; }
134 | .container .columns,
135 | .container .column { margin: 0; }
136 |
137 | .container .one.column,
138 | .container .one.columns,
139 | .container .two.columns,
140 | .container .three.columns,
141 | .container .four.columns,
142 | .container .five.columns,
143 | .container .six.columns,
144 | .container .seven.columns,
145 | .container .eight.columns,
146 | .container .nine.columns,
147 | .container .ten.columns,
148 | .container .eleven.columns,
149 | .container .twelve.columns,
150 | .container .thirteen.columns,
151 | .container .fourteen.columns,
152 | .container .fifteen.columns,
153 | .container .sixteen.columns,
154 | .container .one-third.column,
155 | .container .two-thirds.column { width: 300px; }
156 |
157 | /* Offsets */
158 | .container .offset-by-one,
159 | .container .offset-by-two,
160 | .container .offset-by-three,
161 | .container .offset-by-four,
162 | .container .offset-by-five,
163 | .container .offset-by-six,
164 | .container .offset-by-seven,
165 | .container .offset-by-eight,
166 | .container .offset-by-nine,
167 | .container .offset-by-ten,
168 | .container .offset-by-eleven,
169 | .container .offset-by-twelve,
170 | .container .offset-by-thirteen,
171 | .container .offset-by-fourteen,
172 | .container .offset-by-fifteen { padding-left: 0; }
173 |
174 | }
175 |
176 |
177 | /* #Mobile (Landscape)
178 | ================================================== */
179 |
180 | /* Note: Design for a width of 480px */
181 |
182 | @media only screen and (min-width: 480px) and (max-width: 767px) {
183 | .container { width: 420px; }
184 | .container .columns,
185 | .container .column { margin: 0; }
186 |
187 | .container .one.column,
188 | .container .one.columns,
189 | .container .two.columns,
190 | .container .three.columns,
191 | .container .four.columns,
192 | .container .five.columns,
193 | .container .six.columns,
194 | .container .seven.columns,
195 | .container .eight.columns,
196 | .container .nine.columns,
197 | .container .ten.columns,
198 | .container .eleven.columns,
199 | .container .twelve.columns,
200 | .container .thirteen.columns,
201 | .container .fourteen.columns,
202 | .container .fifteen.columns,
203 | .container .sixteen.columns,
204 | .container .one-third.column,
205 | .container .two-thirds.column { width: 420px; }
206 | }
207 |
208 |
209 | /* #Clearing
210 | ================================================== */
211 |
212 | /* Self Clearing Goodness */
213 | .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; }
214 |
215 | /* Use clearfix class on parent to clear nested columns,
216 | or wrap each row of columns in a */
217 | .clearfix:before,
218 | .clearfix:after,
219 | .row:before,
220 | .row:after {
221 | content: '\0020';
222 | display: block;
223 | overflow: hidden;
224 | visibility: hidden;
225 | width: 0;
226 | height: 0; }
227 | .row:after,
228 | .clearfix:after {
229 | clear: both; }
230 | .row,
231 | .clearfix {
232 | zoom: 1; }
233 |
234 | /* You can also use a
to clear columns */
235 | .clear {
236 | clear: both;
237 | display: block;
238 | overflow: hidden;
239 | visibility: hidden;
240 | width: 0;
241 | height: 0;
242 | }
243 |
--------------------------------------------------------------------------------
/views/theme_example.php:
--------------------------------------------------------------------------------
1 |
Theme example
2 |
3 |
This view is loaded from application/view/theme_example
4 |
5 |
From this theme example you can choose out of two themes:
6 |
7 |
8 | The first one (the default) is based on:
9 |
10 |
11 |
12 |
13 | The second one is based on:
14 |
15 |
16 |
--------------------------------------------------------------------------------