├── .gitignore ├── LICENSE ├── README.md ├── app.py ├── static ├── css │ ├── bootstrap.css │ └── jquery-ui.css └── js │ ├── bootstrap.js │ ├── jquery-1.8.1.min.js │ └── jquery.dataTables.min.js └── templates └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | 3 | # C extensions 4 | *.so 5 | 6 | # Packages 7 | *.egg 8 | *.egg-info 9 | dist 10 | build 11 | eggs 12 | parts 13 | bin 14 | var 15 | sdist 16 | develop-eggs 17 | .installed.cfg 18 | lib 19 | lib64 20 | 21 | # Installer logs 22 | pip-log.txt 23 | 24 | # Unit test / coverage reports 25 | .coverage 26 | .tox 27 | nosetests.xml 28 | 29 | # Translations 30 | *.mo 31 | 32 | # Mr Developer 33 | .mr.developer.cfg 34 | .project 35 | .pydevproject 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 rosickey 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Flask-DataTables 2 | ======== 3 | 4 | - - - 5 | 6 | 7 | DataTables is a great table js tool, i has used Flask for a month 8 | 9 | I want to use DataTables ajax mothed in Flask easier. 10 | 11 | It's almost a full rewrite, so this project page is no longer recent working. 12 | 13 | Datatables is here: https://datatables.net/release-datatables/examples/data_sources/ajax.html 14 | 15 | ## CAUTION!! 16 | 17 | - - - 18 | 19 | #### JavaScript Library for Objective Sound Programming #### 20 | 21 | 22 | ### System Requirements ### 23 | * Chrome 14.0- (Web Audio API) 24 | * Safari 6.0- (Web Audio API) 25 | * Firefox 4.0- (Audio Data API) 26 | 27 | 28 | ### Usage ### 29 | 30 | 31 | 32 | ### License ### 33 | 34 | MIT 35 | 36 | ### ChangeLog ### 37 | 38 | 39 | 2013 07 19 - **v0.1.0** 40 | 41 | * Initial release of Flask-DataTables 42 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | 3 | import json 4 | 5 | from flask import Flask, request, render_template 6 | app = Flask(__name__) 7 | 8 | app.debug = True 9 | 10 | class BaseDataTables: 11 | 12 | def __init__(self, request, columns, collection): 13 | 14 | self.columns = columns 15 | 16 | self.collection = collection 17 | 18 | # values specified by the datatable for filtering, sorting, paging 19 | self.request_values = request.values 20 | 21 | 22 | # results from the db 23 | self.result_data = None 24 | 25 | # total in the table after filtering 26 | self.cardinality_filtered = 0 27 | 28 | # total in the table unfiltered 29 | self.cadinality = 0 30 | 31 | self.run_queries() 32 | 33 | def output_result(self): 34 | 35 | output = {} 36 | 37 | # output['sEcho'] = str(int(self.request_values['sEcho'])) 38 | # output['iTotalRecords'] = str(self.cardinality) 39 | # output['iTotalDisplayRecords'] = str(self.cardinality_filtered) 40 | aaData_rows = [] 41 | 42 | for row in self.result_data: 43 | aaData_row = [] 44 | for i in range(len(self.columns)): 45 | print row, self.columns, self.columns[i] 46 | aaData_row.append(str(row[ self.columns[i] ]).replace('"','\\"')) 47 | aaData_rows.append(aaData_row) 48 | 49 | output['aaData'] = aaData_rows 50 | 51 | return output 52 | 53 | def run_queries(self): 54 | 55 | self.result_data = self.collection 56 | self.cardinality_filtered = len(self.result_data) 57 | self.cardinality = len(self.result_data) 58 | 59 | columns = [ 'column_1', 'column_2', 'column_3', 'column_4'] 60 | 61 | @app.route('/') 62 | def index(): 63 | return render_template('index.html', columns=columns) 64 | return 'Hello World!' 65 | 66 | @app.route('/_server_data') 67 | def get_server_data(): 68 | 69 | collection = [dict(zip(columns, [1,2,3,4])), dict(zip(columns, [5,5,5,5]))] 70 | 71 | results = BaseDataTables(request, columns, collection).output_result() 72 | 73 | # return the results as a string for the datatable 74 | return json.dumps(results) 75 | 76 | if __name__ == '__main__': 77 | app.run() -------------------------------------------------------------------------------- /static/css/jquery-ui.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Note: While Microsoft is not the author of this file, Microsoft is 3 | * offering you a license subject to the terms of the Microsoft Software 4 | * License Terms for Microsoft ASP.NET Model View Controller 3. 5 | * Microsoft reserves all other rights. The notices below are provided 6 | * for informational purposes only and are not the license terms under 7 | * which Microsoft distributed this file. 8 | * 9 | * jQuery UI CSS Framework 1.8.7 10 | * 11 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 12 | * 13 | * http://docs.jquery.com/UI/Theming/API 14 | */ 15 | 16 | /* Layout helpers 17 | ----------------------------------*/ 18 | .ui-helper-hidden { display: none; } 19 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 20 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 21 | .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 22 | .ui-helper-clearfix { display: inline-block; } 23 | /* required comment for clearfix to work in Opera \*/ 24 | * html .ui-helper-clearfix { height:1%; } 25 | .ui-helper-clearfix { display:block; } 26 | /* end clearfix */ 27 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 28 | 29 | 30 | /* Interaction Cues 31 | ----------------------------------*/ 32 | .ui-state-disabled { cursor: default !important; } 33 | 34 | 35 | /* Icons 36 | ----------------------------------*/ 37 | 38 | /* states and images */ 39 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 40 | 41 | 42 | /* Misc visuals 43 | ----------------------------------*/ 44 | 45 | /* Overlays */ 46 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 47 | /* 48 | * Note: While Microsoft is not the author of this file, Microsoft is 49 | * offering you a license subject to the terms of the Microsoft Software 50 | * License Terms for Microsoft ASP.NET Model View Controller 3. 51 | * Microsoft reserves all other rights. The notices below are provided 52 | * for informational purposes only and are not the license terms under 53 | * which Microsoft distributed this file. 54 | * 55 | * jQuery UI Accordion 1.8.7 56 | * 57 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 58 | * 59 | * http://docs.jquery.com/UI/Accordion#theming 60 | */ 61 | /* IE/Win - Fix animation bug - #4615 */ 62 | .ui-accordion { width: 100%; } 63 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 64 | .ui-accordion .ui-accordion-li-fix { display: inline; } 65 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 66 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 67 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 68 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 69 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 70 | .ui-accordion .ui-accordion-content-active { display: block; }/* 71 | * Note: While Microsoft is not the author of this file, Microsoft is 72 | * offering you a license subject to the terms of the Microsoft Software 73 | * License Terms for Microsoft ASP.NET Model View Controller 3. 74 | * Microsoft reserves all other rights. The notices below are provided 75 | * for informational purposes only and are not the license terms under 76 | * which Microsoft distributed this file. 77 | * 78 | * jQuery UI Autocomplete 1.8.7 79 | * 80 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 81 | * 82 | * http://docs.jquery.com/UI/Autocomplete#theming 83 | */ 84 | .ui-autocomplete { position: absolute; cursor: default; } 85 | 86 | /* workarounds */ 87 | * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 88 | 89 | /* 90 | * Note: While Microsoft is not the author of this file, Microsoft is 91 | * offering you a license subject to the terms of the Microsoft Software 92 | * License Terms for Microsoft ASP.NET Model View Controller 3. 93 | * Microsoft reserves all other rights. The notices below are provided 94 | * for informational purposes only and are not the license terms under 95 | * which Microsoft distributed this file. 96 | * 97 | * jQuery UI Menu 1.8.7 98 | * 99 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 100 | * 101 | * http://docs.jquery.com/UI/Menu#theming 102 | */ 103 | .ui-menu { 104 | list-style:none; 105 | padding: 2px; 106 | margin: 0; 107 | display:block; 108 | float: left; 109 | } 110 | .ui-menu .ui-menu { 111 | margin-top: -3px; 112 | } 113 | .ui-menu .ui-menu-item { 114 | margin:0; 115 | padding: 0; 116 | zoom: 1; 117 | float: left; 118 | clear: left; 119 | width: 100%; 120 | } 121 | .ui-menu .ui-menu-item a { 122 | text-decoration:none; 123 | display:block; 124 | padding:.2em .4em; 125 | line-height:1.5; 126 | zoom:1; 127 | } 128 | .ui-menu .ui-menu-item a.ui-state-hover, 129 | .ui-menu .ui-menu-item a.ui-state-active { 130 | font-weight: normal; 131 | margin: -1px; 132 | } 133 | /* 134 | * Note: While Microsoft is not the author of this file, Microsoft is 135 | * offering you a license subject to the terms of the Microsoft Software 136 | * License Terms for Microsoft ASP.NET Model View Controller 3. 137 | * Microsoft reserves all other rights. The notices below are provided 138 | * for informational purposes only and are not the license terms under 139 | * which Microsoft distributed this file. 140 | * 141 | * jQuery UI Button 1.8.7 142 | * 143 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 144 | * 145 | * http://docs.jquery.com/UI/Button#theming 146 | */ 147 | .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ 148 | .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ 149 | button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ 150 | .ui-button-icons-only { width: 3.4em; } 151 | button.ui-button-icons-only { width: 3.7em; } 152 | 153 | /*button text element */ 154 | .ui-button .ui-button-text { display: block; line-height: 1.4; } 155 | .ui-button-text-only .ui-button-text { padding: .4em 1em; } 156 | .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } 157 | .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } 158 | .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } 159 | .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } 160 | /* no icon support for input elements, provide padding by default */ 161 | input.ui-button { padding: .4em 1em; } 162 | 163 | /*button icon element(s) */ 164 | .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } 165 | .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } 166 | .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } 167 | .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 168 | .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 169 | 170 | /*button sets*/ 171 | .ui-buttonset { margin-right: 7px; } 172 | .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } 173 | 174 | /* workarounds */ 175 | button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ 176 | /* 177 | * Note: While Microsoft is not the author of this file, Microsoft is 178 | * offering you a license subject to the terms of the Microsoft Software 179 | * License Terms for Microsoft ASP.NET Model View Controller 3. 180 | * Microsoft reserves all other rights. The notices below are provided 181 | * for informational purposes only and are not the license terms under 182 | * which Microsoft distributed this file. 183 | * 184 | * jQuery UI Datepicker 1.8.7 185 | * 186 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 187 | * 188 | * http://docs.jquery.com/UI/Datepicker#theming 189 | */ 190 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 191 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 192 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 193 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 194 | .ui-datepicker .ui-datepicker-prev { left:2px; } 195 | .ui-datepicker .ui-datepicker-next { right:2px; } 196 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 197 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 198 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 199 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 200 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 201 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 202 | .ui-datepicker select.ui-datepicker-month, 203 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 204 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 205 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 206 | .ui-datepicker td { border: 0; padding: 1px; } 207 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 208 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 209 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 210 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 211 | 212 | /* with multiple calendars */ 213 | .ui-datepicker.ui-datepicker-multi { width:auto; } 214 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 215 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 216 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 217 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 218 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 219 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 220 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 221 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 222 | .ui-datepicker-row-break { clear:both; width:100%; } 223 | 224 | /* RTL support */ 225 | .ui-datepicker-rtl { direction: rtl; } 226 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 227 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 228 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 229 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 230 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 231 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 232 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 233 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 234 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 235 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 236 | 237 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 238 | .ui-datepicker-cover { 239 | display: none; /*sorry for IE5*/ 240 | display/**/: block; /*sorry for IE5*/ 241 | position: absolute; /*must have*/ 242 | z-index: -1; /*must have*/ 243 | filter: mask(); /*must have*/ 244 | top: -4px; /*must have*/ 245 | left: -4px; /*must have*/ 246 | width: 200px; /*must have*/ 247 | height: 200px; /*must have*/ 248 | }/* 249 | * Note: While Microsoft is not the author of this file, Microsoft is 250 | * offering you a license subject to the terms of the Microsoft Software 251 | * License Terms for Microsoft ASP.NET Model View Controller 3. 252 | * Microsoft reserves all other rights. The notices below are provided 253 | * for informational purposes only and are not the license terms under 254 | * which Microsoft distributed this file. 255 | * 256 | * jQuery UI Dialog 1.8.7 257 | * 258 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 259 | * 260 | * http://docs.jquery.com/UI/Dialog#theming 261 | */ 262 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 263 | .ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } 264 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 265 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 266 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 267 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 268 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 269 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 270 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 271 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 272 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 273 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 274 | /* 275 | * Note: While Microsoft is not the author of this file, Microsoft is 276 | * offering you a license subject to the terms of the Microsoft Software 277 | * License Terms for Microsoft ASP.NET Model View Controller 3. 278 | * Microsoft reserves all other rights. The notices below are provided 279 | * for informational purposes only and are not the license terms under 280 | * which Microsoft distributed this file. 281 | * 282 | * jQuery UI Progressbar 1.8.7 283 | * 284 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 285 | * 286 | * http://docs.jquery.com/UI/Progressbar#theming 287 | */ 288 | .ui-progressbar { height:2em; text-align: left; } 289 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* 290 | * Note: While Microsoft is not the author of this file, Microsoft is 291 | * offering you a license subject to the terms of the Microsoft Software 292 | * License Terms for Microsoft ASP.NET Model View Controller 3. 293 | * Microsoft reserves all other rights. The notices below are provided 294 | * for informational purposes only and are not the license terms under 295 | * which Microsoft distributed this file. 296 | * 297 | * jQuery UI Resizable 1.8.7 298 | * 299 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 300 | * 301 | * http://docs.jquery.com/UI/Resizable#theming 302 | */ 303 | .ui-resizable { position: relative;} 304 | .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} 305 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 306 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 307 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 308 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 309 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 310 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 311 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 312 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 313 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* 314 | * Note: While Microsoft is not the author of this file, Microsoft is 315 | * offering you a license subject to the terms of the Microsoft Software 316 | * License Terms for Microsoft ASP.NET Model View Controller 3. 317 | * Microsoft reserves all other rights. The notices below are provided 318 | * for informational purposes only and are not the license terms under 319 | * which Microsoft distributed this file. 320 | * 321 | * jQuery UI Selectable 1.8.7 322 | * 323 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 324 | * 325 | * http://docs.jquery.com/UI/Selectable#theming 326 | */ 327 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 328 | /* 329 | * Note: While Microsoft is not the author of this file, Microsoft is 330 | * offering you a license subject to the terms of the Microsoft Software 331 | * License Terms for Microsoft ASP.NET Model View Controller 3. 332 | * Microsoft reserves all other rights. The notices below are provided 333 | * for informational purposes only and are not the license terms under 334 | * which Microsoft distributed this file. 335 | * 336 | * jQuery UI Slider 1.8.7 337 | * 338 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 339 | * 340 | * http://docs.jquery.com/UI/Slider#theming 341 | */ 342 | .ui-slider { position: relative; text-align: left; } 343 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 344 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 345 | 346 | .ui-slider-horizontal { height: .8em; } 347 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 348 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 349 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 350 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 351 | 352 | .ui-slider-vertical { width: .8em; height: 100px; } 353 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 354 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 355 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 356 | .ui-slider-vertical .ui-slider-range-max { top: 0; }/* 357 | * Note: While Microsoft is not the author of this file, Microsoft is 358 | * offering you a license subject to the terms of the Microsoft Software 359 | * License Terms for Microsoft ASP.NET Model View Controller 3. 360 | * Microsoft reserves all other rights. The notices below are provided 361 | * for informational purposes only and are not the license terms under 362 | * which Microsoft distributed this file. 363 | * 364 | * jQuery UI Tabs 1.8.7 365 | * 366 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 367 | * 368 | * http://docs.jquery.com/UI/Tabs#theming 369 | */ 370 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 371 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 372 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 373 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 374 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 375 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 376 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 377 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 378 | .ui-tabs .ui-tabs-hide { display: none !important; } 379 | /* 380 | * Note: While Microsoft is not the author of this file, Microsoft is 381 | * offering you a license subject to the terms of the Microsoft Software 382 | * License Terms for Microsoft ASP.NET Model View Controller 3. 383 | * Microsoft reserves all other rights. The notices below are provided 384 | * for informational purposes only and are not the license terms under 385 | * which Microsoft distributed this file. 386 | * 387 | * jQuery UI CSS Framework 1.8.7 388 | * 389 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 390 | * 391 | * http://docs.jquery.com/UI/Theming/API 392 | * 393 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 394 | */ 395 | 396 | 397 | /* Component containers 398 | ----------------------------------*/ 399 | .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } 400 | .ui-widget .ui-widget { font-size: 1em; } 401 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } 402 | .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } 403 | .ui-widget-content a { color: #222222/*{fcContent}*/; } 404 | .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } 405 | .ui-widget-header a { color: #222222/*{fcHeader}*/; } 406 | 407 | /* Interaction states 408 | ----------------------------------*/ 409 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } 410 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } 411 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } 412 | .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } 413 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } 414 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } 415 | .ui-widget :active { outline: none; } 416 | 417 | /* Interaction Cues 418 | ----------------------------------*/ 419 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } 420 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } 421 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } 422 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } 423 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } 424 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 425 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 426 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 427 | 428 | /* Icons 429 | ----------------------------------*/ 430 | 431 | /* states and images */ 432 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 433 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 434 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } 435 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } 436 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } 437 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } 438 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } 439 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } 440 | 441 | /* positioning */ 442 | .ui-icon-carat-1-n { background-position: 0 0; } 443 | .ui-icon-carat-1-ne { background-position: -16px 0; } 444 | .ui-icon-carat-1-e { background-position: -32px 0; } 445 | .ui-icon-carat-1-se { background-position: -48px 0; } 446 | .ui-icon-carat-1-s { background-position: -64px 0; } 447 | .ui-icon-carat-1-sw { background-position: -80px 0; } 448 | .ui-icon-carat-1-w { background-position: -96px 0; } 449 | .ui-icon-carat-1-nw { background-position: -112px 0; } 450 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 451 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 452 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 453 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 454 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 455 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 456 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 457 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 458 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 459 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 460 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 461 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 462 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 463 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 464 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 465 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 466 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 467 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 468 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 469 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 470 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 471 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 472 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 473 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 474 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 475 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 476 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 477 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 478 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 479 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 480 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 481 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 482 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 483 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 484 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 485 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 486 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 487 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 488 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 489 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 490 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 491 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 492 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 493 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 494 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 495 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 496 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 497 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 498 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 499 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 500 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 501 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 502 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 503 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 504 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 505 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 506 | .ui-icon-arrow-4 { background-position: 0 -80px; } 507 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 508 | .ui-icon-extlink { background-position: -32px -80px; } 509 | .ui-icon-newwin { background-position: -48px -80px; } 510 | .ui-icon-refresh { background-position: -64px -80px; } 511 | .ui-icon-shuffle { background-position: -80px -80px; } 512 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 513 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 514 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 515 | .ui-icon-folder-open { background-position: -16px -96px; } 516 | .ui-icon-document { background-position: -32px -96px; } 517 | .ui-icon-document-b { background-position: -48px -96px; } 518 | .ui-icon-note { background-position: -64px -96px; } 519 | .ui-icon-mail-closed { background-position: -80px -96px; } 520 | .ui-icon-mail-open { background-position: -96px -96px; } 521 | .ui-icon-suitcase { background-position: -112px -96px; } 522 | .ui-icon-comment { background-position: -128px -96px; } 523 | .ui-icon-person { background-position: -144px -96px; } 524 | .ui-icon-print { background-position: -160px -96px; } 525 | .ui-icon-trash { background-position: -176px -96px; } 526 | .ui-icon-locked { background-position: -192px -96px; } 527 | .ui-icon-unlocked { background-position: -208px -96px; } 528 | .ui-icon-bookmark { background-position: -224px -96px; } 529 | .ui-icon-tag { background-position: -240px -96px; } 530 | .ui-icon-home { background-position: 0 -112px; } 531 | .ui-icon-flag { background-position: -16px -112px; } 532 | .ui-icon-calendar { background-position: -32px -112px; } 533 | .ui-icon-cart { background-position: -48px -112px; } 534 | .ui-icon-pencil { background-position: -64px -112px; } 535 | .ui-icon-clock { background-position: -80px -112px; } 536 | .ui-icon-disk { background-position: -96px -112px; } 537 | .ui-icon-calculator { background-position: -112px -112px; } 538 | .ui-icon-zoomin { background-position: -128px -112px; } 539 | .ui-icon-zoomout { background-position: -144px -112px; } 540 | .ui-icon-search { background-position: -160px -112px; } 541 | .ui-icon-wrench { background-position: -176px -112px; } 542 | .ui-icon-gear { background-position: -192px -112px; } 543 | .ui-icon-heart { background-position: -208px -112px; } 544 | .ui-icon-star { background-position: -224px -112px; } 545 | .ui-icon-link { background-position: -240px -112px; } 546 | .ui-icon-cancel { background-position: 0 -128px; } 547 | .ui-icon-plus { background-position: -16px -128px; } 548 | .ui-icon-plusthick { background-position: -32px -128px; } 549 | .ui-icon-minus { background-position: -48px -128px; } 550 | .ui-icon-minusthick { background-position: -64px -128px; } 551 | .ui-icon-close { background-position: -80px -128px; } 552 | .ui-icon-closethick { background-position: -96px -128px; } 553 | .ui-icon-key { background-position: -112px -128px; } 554 | .ui-icon-lightbulb { background-position: -128px -128px; } 555 | .ui-icon-scissors { background-position: -144px -128px; } 556 | .ui-icon-clipboard { background-position: -160px -128px; } 557 | .ui-icon-copy { background-position: -176px -128px; } 558 | .ui-icon-contact { background-position: -192px -128px; } 559 | .ui-icon-image { background-position: -208px -128px; } 560 | .ui-icon-video { background-position: -224px -128px; } 561 | .ui-icon-script { background-position: -240px -128px; } 562 | .ui-icon-alert { background-position: 0 -144px; } 563 | .ui-icon-info { background-position: -16px -144px; } 564 | .ui-icon-notice { background-position: -32px -144px; } 565 | .ui-icon-help { background-position: -48px -144px; } 566 | .ui-icon-check { background-position: -64px -144px; } 567 | .ui-icon-bullet { background-position: -80px -144px; } 568 | .ui-icon-radio-off { background-position: -96px -144px; } 569 | .ui-icon-radio-on { background-position: -112px -144px; } 570 | .ui-icon-pin-w { background-position: -128px -144px; } 571 | .ui-icon-pin-s { background-position: -144px -144px; } 572 | .ui-icon-play { background-position: 0 -160px; } 573 | .ui-icon-pause { background-position: -16px -160px; } 574 | .ui-icon-seek-next { background-position: -32px -160px; } 575 | .ui-icon-seek-prev { background-position: -48px -160px; } 576 | .ui-icon-seek-end { background-position: -64px -160px; } 577 | .ui-icon-seek-start { background-position: -80px -160px; } 578 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 579 | .ui-icon-seek-first { background-position: -80px -160px; } 580 | .ui-icon-stop { background-position: -96px -160px; } 581 | .ui-icon-eject { background-position: -112px -160px; } 582 | .ui-icon-volume-off { background-position: -128px -160px; } 583 | .ui-icon-volume-on { background-position: -144px -160px; } 584 | .ui-icon-power { background-position: 0 -176px; } 585 | .ui-icon-signal-diag { background-position: -16px -176px; } 586 | .ui-icon-signal { background-position: -32px -176px; } 587 | .ui-icon-battery-0 { background-position: -48px -176px; } 588 | .ui-icon-battery-1 { background-position: -64px -176px; } 589 | .ui-icon-battery-2 { background-position: -80px -176px; } 590 | .ui-icon-battery-3 { background-position: -96px -176px; } 591 | .ui-icon-circle-plus { background-position: 0 -192px; } 592 | .ui-icon-circle-minus { background-position: -16px -192px; } 593 | .ui-icon-circle-close { background-position: -32px -192px; } 594 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 595 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 596 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 597 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 598 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 599 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 600 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 601 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 602 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 603 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 604 | .ui-icon-circle-check { background-position: -208px -192px; } 605 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 606 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 607 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 608 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 609 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 610 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 611 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 612 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 613 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 614 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 615 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 616 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 617 | 618 | 619 | /* Misc visuals 620 | ----------------------------------*/ 621 | 622 | /* Corner radius */ 623 | .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } 624 | .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 625 | .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 626 | .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 627 | .ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 628 | .ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 629 | .ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 630 | .ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 631 | .ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; border-radius: 4px/*{cornerRadius}*/; } 632 | 633 | /* Overlays */ 634 | .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } 635 | .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } -------------------------------------------------------------------------------- /static/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | /* =================================================== 2 | * bootstrap-transition.js v2.2.1 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 | "use strict"; // jshint ;_; 24 | 25 | 26 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) 27 | * ======================================================= */ 28 | 29 | $(function () { 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 otransitionend' 40 | , 'transition' : 'transitionend' 41 | } 42 | , name 43 | 44 | for (name in transEndEventNames){ 45 | if (el.style[name] !== undefined) { 46 | return transEndEventNames[name] 47 | } 48 | } 49 | 50 | }()) 51 | 52 | return transitionEnd && { 53 | end: transitionEnd 54 | } 55 | 56 | })() 57 | 58 | }) 59 | 60 | }(window.jQuery);/* ========================================================== 61 | * bootstrap-alert.js v2.2.1 62 | * http://twitter.github.com/bootstrap/javascript.html#alerts 63 | * ========================================================== 64 | * Copyright 2012 Twitter, Inc. 65 | * 66 | * Licensed under the Apache License, Version 2.0 (the "License"); 67 | * you may not use this file except in compliance with the License. 68 | * You may obtain a copy of the License at 69 | * 70 | * http://www.apache.org/licenses/LICENSE-2.0 71 | * 72 | * Unless required by applicable law or agreed to in writing, software 73 | * distributed under the License is distributed on an "AS IS" BASIS, 74 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 75 | * See the License for the specific language governing permissions and 76 | * limitations under the License. 77 | * ========================================================== */ 78 | 79 | 80 | !function ($) { 81 | 82 | "use strict"; // jshint ;_; 83 | 84 | 85 | /* ALERT CLASS DEFINITION 86 | * ====================== */ 87 | 88 | var dismiss = '[data-dismiss="alert"]' 89 | , Alert = function (el) { 90 | $(el).on('click', dismiss, this.close) 91 | } 92 | 93 | Alert.prototype.close = function (e) { 94 | var $this = $(this) 95 | , selector = $this.attr('data-target') 96 | , $parent 97 | 98 | if (!selector) { 99 | selector = $this.attr('href') 100 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 101 | } 102 | 103 | $parent = $(selector) 104 | 105 | e && e.preventDefault() 106 | 107 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) 108 | 109 | $parent.trigger(e = $.Event('close')) 110 | 111 | if (e.isDefaultPrevented()) return 112 | 113 | $parent.removeClass('in') 114 | 115 | function removeElement() { 116 | $parent 117 | .trigger('closed') 118 | .remove() 119 | } 120 | 121 | $.support.transition && $parent.hasClass('fade') ? 122 | $parent.on($.support.transition.end, removeElement) : 123 | removeElement() 124 | } 125 | 126 | 127 | /* ALERT PLUGIN DEFINITION 128 | * ======================= */ 129 | 130 | $.fn.alert = function (option) { 131 | return this.each(function () { 132 | var $this = $(this) 133 | , data = $this.data('alert') 134 | if (!data) $this.data('alert', (data = new Alert(this))) 135 | if (typeof option == 'string') data[option].call($this) 136 | }) 137 | } 138 | 139 | $.fn.alert.Constructor = Alert 140 | 141 | 142 | /* ALERT DATA-API 143 | * ============== */ 144 | 145 | $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) 146 | 147 | }(window.jQuery);/* ============================================================ 148 | * bootstrap-button.js v2.2.1 149 | * http://twitter.github.com/bootstrap/javascript.html#buttons 150 | * ============================================================ 151 | * Copyright 2012 Twitter, Inc. 152 | * 153 | * Licensed under the Apache License, Version 2.0 (the "License"); 154 | * you may not use this file except in compliance with the License. 155 | * You may obtain a copy of the License at 156 | * 157 | * http://www.apache.org/licenses/LICENSE-2.0 158 | * 159 | * Unless required by applicable law or agreed to in writing, software 160 | * distributed under the License is distributed on an "AS IS" BASIS, 161 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 162 | * See the License for the specific language governing permissions and 163 | * limitations under the License. 164 | * ============================================================ */ 165 | 166 | 167 | !function ($) { 168 | 169 | "use strict"; // jshint ;_; 170 | 171 | 172 | /* BUTTON PUBLIC CLASS DEFINITION 173 | * ============================== */ 174 | 175 | var Button = function (element, options) { 176 | this.$element = $(element) 177 | this.options = $.extend({}, $.fn.button.defaults, options) 178 | } 179 | 180 | Button.prototype.setState = function (state) { 181 | var d = 'disabled' 182 | , $el = this.$element 183 | , data = $el.data() 184 | , val = $el.is('input') ? 'val' : 'html' 185 | 186 | state = state + 'Text' 187 | data.resetText || $el.data('resetText', $el[val]()) 188 | 189 | $el[val](data[state] || this.options[state]) 190 | 191 | // push to event loop to allow forms to submit 192 | setTimeout(function () { 193 | state == 'loadingText' ? 194 | $el.addClass(d).attr(d, d) : 195 | $el.removeClass(d).removeAttr(d) 196 | }, 0) 197 | } 198 | 199 | Button.prototype.toggle = function () { 200 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]') 201 | 202 | $parent && $parent 203 | .find('.active') 204 | .removeClass('active') 205 | 206 | this.$element.toggleClass('active') 207 | } 208 | 209 | 210 | /* BUTTON PLUGIN DEFINITION 211 | * ======================== */ 212 | 213 | $.fn.button = function (option) { 214 | return this.each(function () { 215 | var $this = $(this) 216 | , data = $this.data('button') 217 | , options = typeof option == 'object' && option 218 | if (!data) $this.data('button', (data = new Button(this, options))) 219 | if (option == 'toggle') data.toggle() 220 | else if (option) data.setState(option) 221 | }) 222 | } 223 | 224 | $.fn.button.defaults = { 225 | loadingText: 'loading...' 226 | } 227 | 228 | $.fn.button.Constructor = Button 229 | 230 | 231 | /* BUTTON DATA-API 232 | * =============== */ 233 | 234 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { 235 | var $btn = $(e.target) 236 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 237 | $btn.button('toggle') 238 | }) 239 | 240 | }(window.jQuery);/* ========================================================== 241 | * bootstrap-carousel.js v2.2.1 242 | * http://twitter.github.com/bootstrap/javascript.html#carousel 243 | * ========================================================== 244 | * Copyright 2012 Twitter, Inc. 245 | * 246 | * Licensed under the Apache License, Version 2.0 (the "License"); 247 | * you may not use this file except in compliance with the License. 248 | * You may obtain a copy of the License at 249 | * 250 | * http://www.apache.org/licenses/LICENSE-2.0 251 | * 252 | * Unless required by applicable law or agreed to in writing, software 253 | * distributed under the License is distributed on an "AS IS" BASIS, 254 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 255 | * See the License for the specific language governing permissions and 256 | * limitations under the License. 257 | * ========================================================== */ 258 | 259 | 260 | !function ($) { 261 | 262 | "use strict"; // jshint ;_; 263 | 264 | 265 | /* CAROUSEL CLASS DEFINITION 266 | * ========================= */ 267 | 268 | var Carousel = function (element, options) { 269 | this.$element = $(element) 270 | this.options = options 271 | this.options.slide && this.slide(this.options.slide) 272 | this.options.pause == 'hover' && this.$element 273 | .on('mouseenter', $.proxy(this.pause, this)) 274 | .on('mouseleave', $.proxy(this.cycle, this)) 275 | } 276 | 277 | Carousel.prototype = { 278 | 279 | cycle: function (e) { 280 | if (!e) this.paused = false 281 | this.options.interval 282 | && !this.paused 283 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 284 | return this 285 | } 286 | 287 | , to: function (pos) { 288 | var $active = this.$element.find('.item.active') 289 | , children = $active.parent().children() 290 | , activePos = children.index($active) 291 | , that = this 292 | 293 | if (pos > (children.length - 1) || pos < 0) return 294 | 295 | if (this.sliding) { 296 | return this.$element.one('slid', function () { 297 | that.to(pos) 298 | }) 299 | } 300 | 301 | if (activePos == pos) { 302 | return this.pause().cycle() 303 | } 304 | 305 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) 306 | } 307 | 308 | , pause: function (e) { 309 | if (!e) this.paused = true 310 | if (this.$element.find('.next, .prev').length && $.support.transition.end) { 311 | this.$element.trigger($.support.transition.end) 312 | this.cycle() 313 | } 314 | clearInterval(this.interval) 315 | this.interval = null 316 | return this 317 | } 318 | 319 | , next: function () { 320 | if (this.sliding) return 321 | return this.slide('next') 322 | } 323 | 324 | , prev: function () { 325 | if (this.sliding) return 326 | return this.slide('prev') 327 | } 328 | 329 | , slide: function (type, next) { 330 | var $active = this.$element.find('.item.active') 331 | , $next = next || $active[type]() 332 | , isCycling = this.interval 333 | , direction = type == 'next' ? 'left' : 'right' 334 | , fallback = type == 'next' ? 'first' : 'last' 335 | , that = this 336 | , e 337 | 338 | this.sliding = true 339 | 340 | isCycling && this.pause() 341 | 342 | $next = $next.length ? $next : this.$element.find('.item')[fallback]() 343 | 344 | e = $.Event('slide', { 345 | relatedTarget: $next[0] 346 | }) 347 | 348 | if ($next.hasClass('active')) return 349 | 350 | if ($.support.transition && this.$element.hasClass('slide')) { 351 | this.$element.trigger(e) 352 | if (e.isDefaultPrevented()) return 353 | $next.addClass(type) 354 | $next[0].offsetWidth // force reflow 355 | $active.addClass(direction) 356 | $next.addClass(direction) 357 | this.$element.one($.support.transition.end, function () { 358 | $next.removeClass([type, direction].join(' ')).addClass('active') 359 | $active.removeClass(['active', direction].join(' ')) 360 | that.sliding = false 361 | setTimeout(function () { that.$element.trigger('slid') }, 0) 362 | }) 363 | } else { 364 | this.$element.trigger(e) 365 | if (e.isDefaultPrevented()) return 366 | $active.removeClass('active') 367 | $next.addClass('active') 368 | this.sliding = false 369 | this.$element.trigger('slid') 370 | } 371 | 372 | isCycling && this.cycle() 373 | 374 | return this 375 | } 376 | 377 | } 378 | 379 | 380 | /* CAROUSEL PLUGIN DEFINITION 381 | * ========================== */ 382 | 383 | $.fn.carousel = function (option) { 384 | return this.each(function () { 385 | var $this = $(this) 386 | , data = $this.data('carousel') 387 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) 388 | , action = typeof option == 'string' ? option : options.slide 389 | if (!data) $this.data('carousel', (data = new Carousel(this, options))) 390 | if (typeof option == 'number') data.to(option) 391 | else if (action) data[action]() 392 | else if (options.interval) data.cycle() 393 | }) 394 | } 395 | 396 | $.fn.carousel.defaults = { 397 | interval: 5000 398 | , pause: 'hover' 399 | } 400 | 401 | $.fn.carousel.Constructor = Carousel 402 | 403 | 404 | /* CAROUSEL DATA-API 405 | * ================= */ 406 | 407 | $(document).on('click.carousel.data-api', '[data-slide]', function (e) { 408 | var $this = $(this), href 409 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 410 | , options = $.extend({}, $target.data(), $this.data()) 411 | $target.carousel(options) 412 | e.preventDefault() 413 | }) 414 | 415 | }(window.jQuery);/* ============================================================= 416 | * bootstrap-collapse.js v2.2.1 417 | * http://twitter.github.com/bootstrap/javascript.html#collapse 418 | * ============================================================= 419 | * Copyright 2012 Twitter, Inc. 420 | * 421 | * Licensed under the Apache License, Version 2.0 (the "License"); 422 | * you may not use this file except in compliance with the License. 423 | * You may obtain a copy of the License at 424 | * 425 | * http://www.apache.org/licenses/LICENSE-2.0 426 | * 427 | * Unless required by applicable law or agreed to in writing, software 428 | * distributed under the License is distributed on an "AS IS" BASIS, 429 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 430 | * See the License for the specific language governing permissions and 431 | * limitations under the License. 432 | * ============================================================ */ 433 | 434 | 435 | !function ($) { 436 | 437 | "use strict"; // jshint ;_; 438 | 439 | 440 | /* COLLAPSE PUBLIC CLASS DEFINITION 441 | * ================================ */ 442 | 443 | var Collapse = function (element, options) { 444 | this.$element = $(element) 445 | this.options = $.extend({}, $.fn.collapse.defaults, options) 446 | 447 | if (this.options.parent) { 448 | this.$parent = $(this.options.parent) 449 | } 450 | 451 | this.options.toggle && this.toggle() 452 | } 453 | 454 | Collapse.prototype = { 455 | 456 | constructor: Collapse 457 | 458 | , dimension: function () { 459 | var hasWidth = this.$element.hasClass('width') 460 | return hasWidth ? 'width' : 'height' 461 | } 462 | 463 | , show: function () { 464 | var dimension 465 | , scroll 466 | , actives 467 | , hasData 468 | 469 | if (this.transitioning) return 470 | 471 | dimension = this.dimension() 472 | scroll = $.camelCase(['scroll', dimension].join('-')) 473 | actives = this.$parent && this.$parent.find('> .accordion-group > .in') 474 | 475 | if (actives && actives.length) { 476 | hasData = actives.data('collapse') 477 | if (hasData && hasData.transitioning) return 478 | actives.collapse('hide') 479 | hasData || actives.data('collapse', null) 480 | } 481 | 482 | this.$element[dimension](0) 483 | this.transition('addClass', $.Event('show'), 'shown') 484 | $.support.transition && this.$element[dimension](this.$element[0][scroll]) 485 | } 486 | 487 | , hide: function () { 488 | var dimension 489 | if (this.transitioning) return 490 | dimension = this.dimension() 491 | this.reset(this.$element[dimension]()) 492 | this.transition('removeClass', $.Event('hide'), 'hidden') 493 | this.$element[dimension](0) 494 | } 495 | 496 | , reset: function (size) { 497 | var dimension = this.dimension() 498 | 499 | this.$element 500 | .removeClass('collapse') 501 | [dimension](size || 'auto') 502 | [0].offsetWidth 503 | 504 | this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') 505 | 506 | return this 507 | } 508 | 509 | , transition: function (method, startEvent, completeEvent) { 510 | var that = this 511 | , complete = function () { 512 | if (startEvent.type == 'show') that.reset() 513 | that.transitioning = 0 514 | that.$element.trigger(completeEvent) 515 | } 516 | 517 | this.$element.trigger(startEvent) 518 | 519 | if (startEvent.isDefaultPrevented()) return 520 | 521 | this.transitioning = 1 522 | 523 | this.$element[method]('in') 524 | 525 | $.support.transition && this.$element.hasClass('collapse') ? 526 | this.$element.one($.support.transition.end, complete) : 527 | complete() 528 | } 529 | 530 | , toggle: function () { 531 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 532 | } 533 | 534 | } 535 | 536 | 537 | /* COLLAPSIBLE PLUGIN DEFINITION 538 | * ============================== */ 539 | 540 | $.fn.collapse = function (option) { 541 | return this.each(function () { 542 | var $this = $(this) 543 | , data = $this.data('collapse') 544 | , options = typeof option == 'object' && option 545 | if (!data) $this.data('collapse', (data = new Collapse(this, options))) 546 | if (typeof option == 'string') data[option]() 547 | }) 548 | } 549 | 550 | $.fn.collapse.defaults = { 551 | toggle: true 552 | } 553 | 554 | $.fn.collapse.Constructor = Collapse 555 | 556 | 557 | /* COLLAPSIBLE DATA-API 558 | * ==================== */ 559 | 560 | $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { 561 | var $this = $(this), href 562 | , target = $this.attr('data-target') 563 | || e.preventDefault() 564 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 565 | , option = $(target).data('collapse') ? 'toggle' : $this.data() 566 | $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') 567 | $(target).collapse(option) 568 | }) 569 | 570 | }(window.jQuery);/* ============================================================ 571 | * bootstrap-dropdown.js v2.2.1 572 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns 573 | * ============================================================ 574 | * Copyright 2012 Twitter, Inc. 575 | * 576 | * Licensed under the Apache License, Version 2.0 (the "License"); 577 | * you may not use this file except in compliance with the License. 578 | * You may obtain a copy of the License at 579 | * 580 | * http://www.apache.org/licenses/LICENSE-2.0 581 | * 582 | * Unless required by applicable law or agreed to in writing, software 583 | * distributed under the License is distributed on an "AS IS" BASIS, 584 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 585 | * See the License for the specific language governing permissions and 586 | * limitations under the License. 587 | * ============================================================ */ 588 | 589 | 590 | !function ($) { 591 | 592 | "use strict"; // jshint ;_; 593 | 594 | 595 | /* DROPDOWN CLASS DEFINITION 596 | * ========================= */ 597 | 598 | var toggle = '[data-toggle=dropdown]' 599 | , Dropdown = function (element) { 600 | var $el = $(element).on('click.dropdown.data-api', this.toggle) 601 | $('html').on('click.dropdown.data-api', function () { 602 | $el.parent().removeClass('open') 603 | }) 604 | } 605 | 606 | Dropdown.prototype = { 607 | 608 | constructor: Dropdown 609 | 610 | , toggle: function (e) { 611 | var $this = $(this) 612 | , $parent 613 | , isActive 614 | 615 | if ($this.is('.disabled, :disabled')) return 616 | 617 | $parent = getParent($this) 618 | 619 | isActive = $parent.hasClass('open') 620 | 621 | clearMenus() 622 | 623 | if (!isActive) { 624 | $parent.toggleClass('open') 625 | $this.focus() 626 | } 627 | 628 | return false 629 | } 630 | 631 | , keydown: function (e) { 632 | var $this 633 | , $items 634 | , $active 635 | , $parent 636 | , isActive 637 | , index 638 | 639 | if (!/(38|40|27)/.test(e.keyCode)) return 640 | 641 | $this = $(this) 642 | 643 | e.preventDefault() 644 | e.stopPropagation() 645 | 646 | if ($this.is('.disabled, :disabled')) return 647 | 648 | $parent = getParent($this) 649 | 650 | isActive = $parent.hasClass('open') 651 | 652 | if (!isActive || (isActive && e.keyCode == 27)) return $this.click() 653 | 654 | $items = $('[role=menu] li:not(.divider) a', $parent) 655 | 656 | if (!$items.length) return 657 | 658 | index = $items.index($items.filter(':focus')) 659 | 660 | if (e.keyCode == 38 && index > 0) index-- // up 661 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down 662 | if (!~index) index = 0 663 | 664 | $items 665 | .eq(index) 666 | .focus() 667 | } 668 | 669 | } 670 | 671 | function clearMenus() { 672 | $(toggle).each(function () { 673 | getParent($(this)).removeClass('open') 674 | }) 675 | } 676 | 677 | function getParent($this) { 678 | var selector = $this.attr('data-target') 679 | , $parent 680 | 681 | if (!selector) { 682 | selector = $this.attr('href') 683 | selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 684 | } 685 | 686 | $parent = $(selector) 687 | $parent.length || ($parent = $this.parent()) 688 | 689 | return $parent 690 | } 691 | 692 | 693 | /* DROPDOWN PLUGIN DEFINITION 694 | * ========================== */ 695 | 696 | $.fn.dropdown = function (option) { 697 | return this.each(function () { 698 | var $this = $(this) 699 | , data = $this.data('dropdown') 700 | if (!data) $this.data('dropdown', (data = new Dropdown(this))) 701 | if (typeof option == 'string') data[option].call($this) 702 | }) 703 | } 704 | 705 | $.fn.dropdown.Constructor = Dropdown 706 | 707 | 708 | /* APPLY TO STANDARD DROPDOWN ELEMENTS 709 | * =================================== */ 710 | 711 | $(document) 712 | .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) 713 | .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) 714 | .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) 715 | .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) 716 | 717 | }(window.jQuery);/* ========================================================= 718 | * bootstrap-modal.js v2.2.1 719 | * http://twitter.github.com/bootstrap/javascript.html#modals 720 | * ========================================================= 721 | * Copyright 2012 Twitter, Inc. 722 | * 723 | * Licensed under the Apache License, Version 2.0 (the "License"); 724 | * you may not use this file except in compliance with the License. 725 | * You may obtain a copy of the License at 726 | * 727 | * http://www.apache.org/licenses/LICENSE-2.0 728 | * 729 | * Unless required by applicable law or agreed to in writing, software 730 | * distributed under the License is distributed on an "AS IS" BASIS, 731 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 732 | * See the License for the specific language governing permissions and 733 | * limitations under the License. 734 | * ========================================================= */ 735 | 736 | 737 | !function ($) { 738 | 739 | "use strict"; // jshint ;_; 740 | 741 | 742 | /* MODAL CLASS DEFINITION 743 | * ====================== */ 744 | 745 | var Modal = function (element, options) { 746 | this.options = options 747 | this.$element = $(element) 748 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) 749 | this.options.remote && this.$element.find('.modal-body').load(this.options.remote) 750 | } 751 | 752 | Modal.prototype = { 753 | 754 | constructor: Modal 755 | 756 | , toggle: function () { 757 | return this[!this.isShown ? 'show' : 'hide']() 758 | } 759 | 760 | , show: function () { 761 | var that = this 762 | , e = $.Event('show') 763 | 764 | this.$element.trigger(e) 765 | 766 | if (this.isShown || e.isDefaultPrevented()) return 767 | 768 | this.isShown = true 769 | 770 | this.escape() 771 | 772 | this.backdrop(function () { 773 | var transition = $.support.transition && that.$element.hasClass('fade') 774 | 775 | if (!that.$element.parent().length) { 776 | that.$element.appendTo(document.body) //don't move modals dom position 777 | } 778 | 779 | that.$element 780 | .show() 781 | 782 | if (transition) { 783 | that.$element[0].offsetWidth // force reflow 784 | } 785 | 786 | that.$element 787 | .addClass('in') 788 | .attr('aria-hidden', false) 789 | 790 | that.enforceFocus() 791 | 792 | transition ? 793 | that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : 794 | that.$element.focus().trigger('shown') 795 | 796 | }) 797 | } 798 | 799 | , hide: function (e) { 800 | e && e.preventDefault() 801 | 802 | var that = this 803 | 804 | e = $.Event('hide') 805 | 806 | this.$element.trigger(e) 807 | 808 | if (!this.isShown || e.isDefaultPrevented()) return 809 | 810 | this.isShown = false 811 | 812 | this.escape() 813 | 814 | $(document).off('focusin.modal') 815 | 816 | this.$element 817 | .removeClass('in') 818 | .attr('aria-hidden', true) 819 | 820 | $.support.transition && this.$element.hasClass('fade') ? 821 | this.hideWithTransition() : 822 | this.hideModal() 823 | } 824 | 825 | , enforceFocus: function () { 826 | var that = this 827 | $(document).on('focusin.modal', function (e) { 828 | if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { 829 | that.$element.focus() 830 | } 831 | }) 832 | } 833 | 834 | , escape: function () { 835 | var that = this 836 | if (this.isShown && this.options.keyboard) { 837 | this.$element.on('keyup.dismiss.modal', function ( e ) { 838 | e.which == 27 && that.hide() 839 | }) 840 | } else if (!this.isShown) { 841 | this.$element.off('keyup.dismiss.modal') 842 | } 843 | } 844 | 845 | , hideWithTransition: function () { 846 | var that = this 847 | , timeout = setTimeout(function () { 848 | that.$element.off($.support.transition.end) 849 | that.hideModal() 850 | }, 500) 851 | 852 | this.$element.one($.support.transition.end, function () { 853 | clearTimeout(timeout) 854 | that.hideModal() 855 | }) 856 | } 857 | 858 | , hideModal: function (that) { 859 | this.$element 860 | .hide() 861 | .trigger('hidden') 862 | 863 | this.backdrop() 864 | } 865 | 866 | , removeBackdrop: function () { 867 | this.$backdrop.remove() 868 | this.$backdrop = null 869 | } 870 | 871 | , backdrop: function (callback) { 872 | var that = this 873 | , animate = this.$element.hasClass('fade') ? 'fade' : '' 874 | 875 | if (this.isShown && this.options.backdrop) { 876 | var doAnimate = $.support.transition && animate 877 | 878 | this.$backdrop = $('")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=i('
')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),g,f,h,e,s,m,o,k=0;k")[0];s=d[k+1];if("'"==s||'"'==s){m="";for(o=2;d[k+o]!=s;)m+=d[k+o],o++;"H"==m?m=a.oClasses.sJUIHeader:"F"==m&&(m=a.oClasses.sJUIFooter); 42 | -1!=m.indexOf(".")?(s=m.split("."),e.id=s[0].substr(1,s[0].length-1),e.className=s[1]):"#"==m.charAt(0)?e.id=m.substr(1,m.length-1):e.className=m;k+=o}c.appendChild(e);c=e}else if(">"==h)c=c.parentNode;else if("l"==h&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)g=ya(a),f=1;else if("f"==h&&a.oFeatures.bFilter)g=za(a),f=1;else if("r"==h&&a.oFeatures.bProcessing)g=Aa(a),f=1;else if("t"==h)g=Ba(a),f=1;else if("i"==h&&a.oFeatures.bInfo)g=Ca(a),f=1;else if("p"==h&&a.oFeatures.bPaginate)g=Da(a),f=1; 43 | else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;o=0;for(s=e.length;o'): 49 | ""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=i('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value,h=0,e=c.length;h=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||g.sSearch.length>b.length||1==c||0!==b.indexOf(g.sSearch)){a.aiDisplay.splice(0,a.aiDisplay.length);ja(a,1);for(b=0;b/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function na(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)", 55 | "g"),"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ja,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ja(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),g=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),h;h=0===f&&f==g?b.sInfoEmpty:0===f?b.sInfoEmpty+" "+b.sInfoFiltered:f==g?b.sInfo:b.sInfo+ 56 | " "+b.sInfoFiltered;h+=b.sInfoPostFix;h=ha(a,h);null!==b.fnInfoCallback&&(h=b.fnInfoCallback.call(a.oInstance,a,c,d,g,f,h));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,g=a.aLengthMenu;if(2==g.length&&"object"===typeof g[0]&&"object"===typeof g[1]){c=0;for(d=g[0].length;c'+g[1][c]+""}else{c=0;for(d=g.length;c'+g[c]+""}b+= 60 | "";g=l.createElement("div");a.aanFeatures.l||(g.id=a.sTableId+"_length");g.className=a.oClasses.sLength;g.innerHTML="";i('select option[value="'+a._iDisplayLength+'"]',g).attr("selected",!0);i("select",g).bind("change.DT",function(){var b=i(this).val(),g=a.aanFeatures.l;c=0;for(d=g.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType; 62 | j.ext.oPagination[a.sPaginationType].fnInit(a,b,function(a){A(a);y(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){A(a);y(a)})},sName:"pagination"});return b}function pa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart- 63 | a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart=0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthi(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()=i.browser.version;i(a.nTable).children("thead, tfoot").remove();h=i(a.nTHead).clone()[0];a.nTable.insertBefore(h,a.nTable.childNodes[0]);null!==a.nTFoot&&(j=i(a.nTFoot).clone()[0],a.nTable.insertBefore(j,a.nTable.childNodes[1]));""===a.oScroll.sX&&(d.style.width="100%",b.parentNode.style.width="100%");var t=O(a,h);g=0;for(f=t.length;gd.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width=q(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width=q(a.oScroll.sXInner):g==i(d).width()&&i(d).height()g-a.oScroll.iBarWidth&& 71 | (a.nTable.style.width=q(g))):a.nTable.style.width=q(g);g=i(a.nTable).outerWidth();f=a.nTHead.getElementsByTagName("tr");h=h.getElementsByTagName("tr");N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;k=i(a).width();b.style.width=q(k);n.push(k)},h,f);i(h).height(0);null!==a.nTFoot&&(e=j.getElementsByTagName("tr"),j=a.nTFoot.getElementsByTagName("tr"),N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth= 72 | "0";m.borderBottomWidth="0";m.height=0;k=i(a).width();b.style.width=q(k);n.push(k)},e,j),i(e).height(0));N(function(a){a.innerHTML="";a.style.width=q(n.shift())},h);null!==a.nTFoot&&N(function(a){a.innerHTML="";a.style.width=q(n.shift())},e);if(i(a.nTable).outerWidth()d.offsetHeight||"scroll"==i(d).css("overflow-y")?g+a.oScroll.iBarWidth:g;if(l&&(d.scrollHeight>d.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width=q(e-a.oScroll.iBarWidth);d.style.width=q(e);b.parentNode.style.width= 73 | q(e);null!==a.nTFoot&&(r.parentNode.style.width=q(e));""===a.oScroll.sX?E(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."):""!==a.oScroll.sXInner&&E(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),b.parentNode.style.width=q("100%"),null!==a.nTFoot&&(r.parentNode.style.width= 74 | q("100%"));""===a.oScroll.sY&&l&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),l=""!==a.oScroll.sX&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==i(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+ 75 | "px":"0px";null!==a.nTFoot&&(p.style.width=q(l),r.style.width=q(l),r.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");i(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function N(a,b,c){for(var d=0,g=b.length;dtd",b));h=O(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=w(a,c,b,"");return d}return L(a,c)[b]}function Oa(a,b){for(var c= 81 | -1,d=-1,g=0;g/g,"");f.length>c&&(c=f.length,d=g)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1);return 48>b||57/g,""),g=l[c].nTh,g.removeAttribute("aria-sort"),g.removeAttribute("aria-label"),l[c].bSortable?0=h)for(b=0;be&&e++}}}function qa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b,c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart, 91 | iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:i.extend(!0,[],a.aaSorting),oSearch:i.extend(!0,{},a.oPreviousSearch),aoSearchCols:i.extend(!0,[],a.aoPreSearchCols),abVisCols:[]};b=0;for(c=a.aoColumns.length;b=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)A(d),y(d);return h};this.fnDestroy=function(a){var b=u(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,g,e,a=a===n?!1:!0;b.bDestroying=!0;C(b,"aoDestroyCallback","destroy",[b]);g=0;for(e=b.aoColumns.length;gtr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(i(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(i(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);i(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];Q(b);i(S(b)).removeClass(b.asStripeClasses.join(" ")); 103 | i("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc,b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(i("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),i("th, td",b.nTHead).each(function(){var a=i("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();i(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);g=0;for(e=b.aoData.length;g=v(d);if(!m)for(e=a;et<"F"ip>')):i.extend(h.oClasses,j.ext.oStdClasses);i(this).addClass(h.oClasses.sTable); 122 | if(""!==h.oScroll.sX||""!==h.oScroll.sY)h.oScroll.iBarWidth=Pa();h.iInitDisplayStart===n&&(h.iInitDisplayStart=e.iDisplayStart,h._iDisplayStart=e.iDisplayStart);e.bStateSave&&(h.oFeatures.bStateSave=!0,Ra(h,e),B(h,"aoDrawCallback",qa,"state_save"));null!==e.iDeferLoading&&(h.bDeferLoading=!0,a=i.isArray(e.iDeferLoading),h._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,h._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(h.oLanguage.sUrl=e.oLanguage.sUrl, 123 | i.getJSON(h.oLanguage.sUrl,null,function(a){oa(a);i.extend(true,h.oLanguage,e.oLanguage,a);aa(h)}),g=!0):i.extend(!0,h.oLanguage,e.oLanguage);null===e.asStripeClasses&&(h.asStripeClasses=[h.oClasses.sStripeOdd,h.oClasses.sStripeEven]);c=!1;d=i(this).children("tbody").children("tr");a=0;for(b=h.asStripeClasses.length;a=h.aoColumns.length&&(h.aaSorting[a][0]=0);var k=h.aoColumns[h.aaSorting[a][0]];h.aaSorting[a][2]===n&&(h.aaSorting[a][2]=0);e.aaSorting===n&&h.saved_aaSorting===n&&(h.aaSorting[a][1]=k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var i=j.settings,r=0;re)return e;for(var i=e+"",e=i.split(""),j="",i=i.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';i(j).append(k);var t=i("a",j),k=t[0],t=t[1];e.oApi._fnBindAction(k,{action:"previous"},l);e.oApi._fnBindAction(t,{action:"next"},l); 147 | e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",t.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),t.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var i=e.oClasses,j=e.aanFeatures.p,k=0,n=j.length;k'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var v=i("a",j),k=v[0],l=v[1],z=v[2],v=v[3];e.oApi._fnBindAction(k,{action:"first"},t);e.oApi._fnBindAction(l,{action:"previous"},t);e.oApi._fnBindAction(z,{action:"next"},t);e.oApi._fnBindAction(v,{action:"last"},t);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",z.id=e.sTableId+"_next",v.id=e.sTableId+"_last")},fnUpdate:function(e,o){if(e.aanFeatures.p){var l=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(l/ 150 | 2),n=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),t=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,v="",z,D=e.oClasses,x,J=e.aanFeatures.p,H=function(i){e.oApi._fnBindAction(this,{page:i+z-1},function(i){e.oApi._fnPageChange(e,i.data.page);o(e);i.preventDefault()})};-1===e._iDisplayLength?t=k=z=1:n=n-k?(z=n-l+1,k=n):(z=t-Math.ceil(l/2)+1,k=z+l-1);for(l=z;l<=k;l++)v+=t!==l?''+e.fnFormatNumber(l)+"":''+e.fnFormatNumber(l)+"";l=0;for(k=J.length;li?1:0},"string-desc":function(e,i){return ei?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,i){return ei?1:0},"html-desc":function(e,i){return ei?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00"); 153 | return e},"date-asc":function(e,i){return e-i},"date-desc":function(e,i){return i-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,i){return e-i},"numeric-desc":function(e,i){return i-e}});i.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var i,j=!1;i=e.charAt(0);if(-1=="0123456789-".indexOf(i))return null;for(var k=1;k")?"html":null}]);i.fn.DataTable=j;i.fn.dataTable=j;i.fn.dataTableSettings=j.settings;i.fn.dataTableExt=j.ext})(jQuery,window,document,void 0); -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Flask-DataTables 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | {% for col in columns %} 37 | 38 | {% endfor %} 39 | 40 | 41 |
{{ col }}
42 |
43 | 44 | 45 | 53 | 54 | --------------------------------------------------------------------------------