├── .gitignore ├── LICENSE ├── README.markdown ├── config.sample.php ├── css └── ft.css ├── ft2.php ├── hooks.php ├── js ├── filethingie.js └── jquery-1.2.1.pack.js ├── locales ├── bg.php ├── bn.php ├── bs.php ├── ca.php ├── cy.php ├── cz.php ├── da.php ├── de.php ├── es.php ├── fa.php ├── fi.php ├── fr.php ├── hu.php ├── it.php ├── ja.php ├── lv.php ├── nl.php ├── no.php ├── pl.php ├── pt-br.php ├── pt-pt.php ├── ro.php ├── ru.php ├── sk.php ├── sv.php ├── tr.php └── vn.php └── plugins ├── config.plugin.php ├── db.plugin.php ├── edit.plugin.php ├── editorck.plugin.php ├── fckeditor.plugin.php ├── fileinfo.plugin.php ├── jquery.fileinfo.js ├── log.plugin.php ├── search.plugin.php ├── tablesorter ├── .settings │ └── org.eclipse.core.resources.prefs ├── addons │ └── pager │ │ ├── icons │ │ ├── first.png │ │ ├── last.png │ │ ├── next.png │ │ └── prev.png │ │ ├── jquery.tablesorter.pager.css │ │ └── jquery.tablesorter.pager.js ├── build.xml ├── build │ ├── ParseMaster.js │ ├── js.jar │ ├── jsmin.js │ ├── min.js │ ├── pack.js │ ├── packer.js │ └── writeFile.js ├── changelog ├── docs │ ├── assets │ │ └── ajax-content.html │ ├── css │ │ └── jq.css │ ├── example-ajax.html │ ├── example-empty-table.html │ ├── example-extending-defaults.html │ ├── example-meta-headers.html │ ├── example-meta-parsers.html │ ├── example-meta-sort-list.html │ ├── example-option-debug.html │ ├── example-option-digits.html │ ├── example-option-sort-force.html │ ├── example-option-sort-key.html │ ├── example-option-sort-list.html │ ├── example-option-sort-order.html │ ├── example-option-text-extraction.html │ ├── example-options-headers.html │ ├── example-pager.html │ ├── example-parsers.html │ ├── example-trigger-sort.html │ ├── example-triggers.html │ ├── example-widgets.html │ ├── img │ │ └── external.png │ ├── index.html │ └── js │ │ ├── chili │ │ ├── chili-1.8b.js │ │ ├── chili-1.8b.pack.js │ │ ├── cplusplus.css │ │ ├── cplusplus.js │ │ ├── csharp.css │ │ ├── csharp.js │ │ ├── css.css │ │ ├── css.js │ │ ├── delphi.css │ │ ├── delphi.js │ │ ├── html.css │ │ ├── html.js │ │ ├── java.css │ │ ├── java.js │ │ ├── javascript.css │ │ ├── javascript.js │ │ ├── jquery-1.1.2.pack.js │ │ ├── js-jquery │ │ │ ├── javascript.css │ │ │ └── javascript.js │ │ ├── lotusscript.css │ │ ├── lotusscript.js │ │ ├── mysql.css │ │ ├── mysql.js │ │ ├── php.css │ │ ├── php.js │ │ ├── recipes.css │ │ └── recipes.js │ │ ├── docs.js │ │ └── examples.js ├── jquery-latest.js ├── jquery.metadata.js ├── jquery.tablesorter.js ├── jquery.tablesorter.min.js ├── tests │ ├── assets │ │ ├── ajax-content.html │ │ ├── css │ │ │ ├── default.css │ │ │ ├── jquery.tabs-ie.css │ │ │ └── jquery.tabs.css │ │ └── img │ │ │ ├── header-asc.png │ │ │ ├── header-bg.png │ │ │ ├── header-desc.png │ │ │ ├── small.gif │ │ │ ├── small_asc.gif │ │ │ ├── small_desc.gif │ │ │ └── tab.png │ ├── cell.metadata.html │ ├── checkbox.html │ ├── colspan.html │ ├── demo.html │ ├── index.html │ ├── large.html │ ├── metadata.html │ └── pager.html └── themes │ ├── blue │ ├── asc.gif │ ├── bg.gif │ ├── blue.zip │ ├── desc.gif │ └── style.css │ └── green │ ├── asc.png │ ├── bg.png │ ├── desc.png │ ├── green.zip │ └── style.css ├── tinymce.plugin.php └── zip.plugin.php /.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | data/* 3 | .svn 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2012 Andreas Haugstrup Pedersen 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # File Thingie - PHP File Manager 2 | File Thingie is a PHP file manager for managing local files. See more at [http://www.solitude.dk/filethingie/](http://www.solitude.dk/filethingie/) 3 | 4 | For bug reports use the github issue tracker. 5 | 6 | File Thingie was one of my very first PHP projects and it's going on github so I will feel motivated to writing a more modern version. 7 | -------------------------------------------------------------------------------- /config.sample.php: -------------------------------------------------------------------------------- 1 | array( 41 | "editlist" => "txt html htm css", 42 | "converttabs" => FALSE 43 | ) 44 | ); 45 | /* 46 | $ft["plugins"]["tinymce"] = array( 47 | "settings" => array( 48 | "path" => "tinymce/jscripts/tiny_mce/tiny_mce.js", 49 | "list" => "html htm" 50 | ) 51 | ); 52 | */ 53 | 54 | # Additional users - See guide at http://www.solitude.dk/filethingie/documentation/users # 55 | 56 | /* 57 | $ft['users']['REPLACE_WITH_USERNAME'] = array( 58 | 'password' => 'REPLACE_WITH_PASSWORD', 59 | 'group' => 'REPLACE_WITH_GROUPNAME' 60 | ); 61 | */ 62 | 63 | # User groups for additional users - - See guide at http://www.solitude.dk/filethingie/documentation/users # 64 | 65 | /* 66 | $ft['groups']['REPLACE_WITH_GROUPNAME'] = array( 67 | 'DIR' => 'REPLACE_WITH_CUSTOM_DIR', 68 | ); 69 | */ 70 | 71 | return $ft; 72 | } 73 | -------------------------------------------------------------------------------- /css/ft.css: -------------------------------------------------------------------------------- 1 | .safarihide { 2 | position:absolute; 3 | left:-10000px; 4 | } 5 | body { 6 | font-family:Verdana, sans-serif; 7 | font-size:12px; 8 | color:#000; 9 | background:#fff; 10 | } 11 | body, h1, h2, .navigation, #sidebar form #sidebar #files_list, #filelist .filedetails form, #filelist .filedetails ul, #logout { 12 | margin:0; 13 | padding:0; 14 | } 15 | #filelist .details span.hide { 16 | background:#ffc; 17 | color:#000; 18 | } 19 | #filelist tr.rowhover, a:hover, h1, #sidebar h2, #filelist th, #filelist tfoot td, #filelist .hover, #filelist tr.rowhover .details span.hide { 20 | background:#326532 !important; 21 | color:#fff !important; 22 | } 23 | .error {color:red;} 24 | .ok {color:#326532;} 25 | .hidden {display:none;} 26 | a { 27 | color:#326532; 28 | text-decoration:none; 29 | } 30 | a:hover { 31 | text-decoration:underline; 32 | } 33 | #logout { 34 | position:absolute; 35 | top:4px; 36 | right:4px; 37 | left:auto; 38 | bottom:auto; 39 | color:#fff; 40 | text-align:right; 41 | } 42 | #logout p { 43 | margin:0; 44 | } 45 | h1 a, #logout a { 46 | color:#fff; 47 | } 48 | h1 { 49 | font-size:2em; 50 | font-weight:bold; 51 | padding:0.2em; 52 | margin-bottom:25px; 53 | } 54 | h2 { 55 | font-size:1.5em; 56 | font-weight:normal; 57 | margin-left:265px; 58 | } 59 | #main h2, 60 | #main p { 61 | margin-left:25px; 62 | } 63 | form .description { 64 | font-size:0.8em; 65 | margin:0; 66 | } 67 | /* Normal tables */ 68 | table { 69 | border:1px solid black; 70 | border-collapse:collapse; 71 | margin:0 25px 15px 25px; 72 | text-align:left; 73 | width:300px; 74 | } 75 | th { 76 | font-weight:bold; 77 | background:#326532; 78 | color:#fff; 79 | } 80 | th, td { 81 | border:1px solid black; 82 | padding:5px 10px; 83 | } 84 | 85 | /* Sidebar */ 86 | #sidebar { 87 | width:225px; 88 | margin:0 40px 0 25px; 89 | float:left; 90 | font-size:10px; 91 | } 92 | #sidebar .section { 93 | background:#DAE3DA; 94 | margin:0 0 2.5em 0; 95 | padding-bottom:0.8em; 96 | border:1px solid black; 97 | } 98 | #sidebar .section form { 99 | padding:0.8em 0.8em 0 0.8em; 100 | } 101 | #sidebar h2 { 102 | font-size:1.2em; 103 | font-weight:bold; 104 | padding:0.4em 0 0.4em 0.4em; 105 | margin:0; 106 | border-bottom:1px solid black; 107 | } 108 | #sidebar h3 { 109 | font-weight:bold; 110 | font-size:1.2em; 111 | margin:1em 0 0.5em 0; 112 | } 113 | #sidebar ul { 114 | margin:0.8em 0 0 1.5em; 115 | padding:0; 116 | } 117 | #sidebar #files_list, #sidebar #searchlist { 118 | margin-left:1.5em; 119 | } 120 | #sidebar #uploadbutton { 121 | margin:1em 0 0 0; 122 | } 123 | #sidebar .info { 124 | float:right; 125 | } 126 | #files_list span.error { 127 | cursor:pointer; 128 | } 129 | #files_list span.error:hover { 130 | text-decoration:underline; 131 | } 132 | #uploadsection input { 133 | width:200px; 134 | } 135 | #mkdir, #q { 136 | width:140px; 137 | } 138 | #mkdirsubmit, #searchsubmit { 139 | width:40px; 140 | } 141 | #q { 142 | width:130px; 143 | } 144 | #searchsubmit { 145 | width:50px; 146 | } 147 | #sidebar p { 148 | text-align:center; 149 | } 150 | .label_highlight { 151 | font-weight:bold; 152 | } 153 | /* Search */ 154 | div#searchoptions { 155 | margin:0.5em 0 0 0.3em; 156 | } 157 | dl#searchlist dt { 158 | font-size:1.2em;; 159 | } 160 | dl#searchlist dt.dir { 161 | font-weight:bold; 162 | } 163 | dl#searchlist dd { 164 | margin:0.3em 0 0.5em 1em; 165 | padding-left:0; 166 | } 167 | dl#searchlist dd a { 168 | color:#666; 169 | } 170 | dl#searchlist dd a:hover { 171 | color:#fff; 172 | } 173 | /* Status box and auto update box */ 174 | #status p, #autoupdate p { 175 | text-align:left; 176 | } 177 | #status p, 178 | #status ul, 179 | #autoupdate div { 180 | text-align:left; 181 | margin:0px; 182 | padding:0; 183 | } 184 | #status ul { 185 | padding:0 0 0 10px; 186 | } 187 | #status, #autoupdate { 188 | background-color:#ffc; 189 | border:1px solid black; 190 | padding:10px; 191 | margin:0 0 15px 285px; 192 | width:400px; 193 | } 194 | /* File list */ 195 | #filelist td.name a { 196 | color:#000; 197 | display:block; 198 | /* width:100%;*/ 199 | /* height:100%;*/ 200 | padding:4px 2em 4px 10px; 201 | } 202 | #filelist td.name { 203 | padding:0; 204 | margin:0; 205 | } 206 | #filelist a:hover { 207 | background:inherit; 208 | text-decoration:none; 209 | } 210 | #filelist tr.rowhover a { 211 | color:#fff; 212 | } 213 | #filelist { 214 | border:1px solid black; 215 | border-collapse:collapse; 216 | margin:0 25px; 217 | } 218 | #filelist tfoot td, #filelist th { 219 | border-top:1px solid black; 220 | border-bottom:1px solid black; 221 | } 222 | #filelist th, #filelist tfoot td { 223 | font-weight:bold; 224 | } 225 | #filelist th.size a { 226 | color:white; 227 | } 228 | #filelist th { 229 | padding:0.3em 0.6em; 230 | text-align:left; 231 | } 232 | #filelist td.details { 233 | padding:0.3em 0; 234 | } 235 | #filelist .details span.show, #filelist .details span.hide { 236 | cursor:pointer; 237 | padding:4px 4px; 238 | } 239 | #filelist th.size, 240 | #filelist td.size, 241 | #filelist th.date, 242 | #filelist td.date { 243 | text-align:right; 244 | } 245 | #filelist th.size, 246 | #filelist td.size { 247 | padding-right:10px; 248 | } 249 | #filelist tfoot td { 250 | font-size:10px; 251 | text-align:right; 252 | font-weight:normal; 253 | } 254 | #filelist tr { 255 | background:#fff; 256 | } 257 | #filelist tr.odd { 258 | background:#DAE3DA; 259 | } 260 | #filelist tr.dir td.name { 261 | font-weight:bold; 262 | } 263 | #filelist tr.highlight { 264 | background:#ffc; 265 | font-style:italic; 266 | font-weight:bold; 267 | } 268 | #filelist tr.rowhover { 269 | background:#326532; 270 | color:#fff; 271 | } 272 | #filelist .hover, #filelist .filedetails ul li { 273 | cursor:pointer; 274 | } 275 | #filelist .filedetails { 276 | background:#ffc; 277 | font-size:10px; 278 | border-top:2px solid black; 279 | border-bottom:2px solid black; 280 | padding:1em 0.5em; 281 | } 282 | #filelist .filedetails td { 283 | width:275px; 284 | } 285 | #filelist .filedetails .newvalue { 286 | width:150px; 287 | } 288 | #filelist .filedetails form { 289 | padding:0.3em; 290 | } 291 | #filelist .filedetails label { 292 | display:block; 293 | font-weight:bold; 294 | margin:0 0 0.5em 0; 295 | } 296 | #filelist .filedetails ul { 297 | list-style:none; 298 | padding:0.3em 1.2em 0.3em 0.3em; 299 | width:60px; 300 | float:left; 301 | } 302 | #filelist .filedetails ul li.selected { 303 | font-weight:bold; 304 | } 305 | #filelist td.error { 306 | padding:1em 3em; 307 | } 308 | form#sort_form { 309 | margin:0; 310 | padding:0; 311 | float:right; 312 | } 313 | #sort { 314 | margin:0; 315 | padding:0; 316 | } 317 | /* Edit form */ 318 | form#edit, #main { 319 | /* margin-left:265px;*/ 320 | float:left; 321 | } 322 | form#edit textarea { 323 | margin:1.5em 0 1em 0; 324 | } 325 | #savestatus { 326 | margin-left:265px; 327 | } 328 | /* Login box */ 329 | #loginbox { 330 | margin:25px; 331 | width:350px; 332 | } 333 | #loginbox div { 334 | clear:both; 335 | } 336 | #loginbox label { 337 | display:block; 338 | height:2.4em; 339 | width:100%; 340 | } 341 | #cookie_label { 342 | text-align:left; 343 | margin-left:116px; 344 | } 345 | #ft_user, #ft_pass { 346 | float:right; 347 | width:225px; 348 | } 349 | #login_button { 350 | float:right; 351 | } 352 | /* Footer */ 353 | #footer { 354 | font-size:10px; 355 | clear:both; 356 | margin:25px; 357 | padding-bottom:50px; 358 | } 359 | .seperator { 360 | border-top:2px solid #326532; 361 | } 362 | #versioninfo { 363 | display:none; 364 | margin:1em 2em; 365 | padding:0.5em; 366 | border:2px solid #326532; 367 | background:#ffc; 368 | width:250px; 369 | } -------------------------------------------------------------------------------- /hooks.php: -------------------------------------------------------------------------------- 1 | 'Database: Enabled a database for other plugins to use.', 14 | 'settings' => array( 15 | 'path' => array( 16 | 'default' => 'data/ft_db', 17 | 'description' => t('The path to the database file.'), 18 | ), 19 | 'flushtables' => array( 20 | 'default' => FALSE, 21 | 'description' => t('Can user delete database tables?'), 22 | ), 23 | ), 24 | ); 25 | } 26 | 27 | /** 28 | * Implementation of hook_init. 29 | */ 30 | function ft_db_init() { 31 | global $ft; 32 | 33 | if (extension_loaded('pdo_sqlite')) { 34 | if ($ft['db']['link'] = new PDO('sqlite:'.$ft['plugins']['db']['settings']['path'])) { 35 | // Get a list of tables. That way other modules can determine if they need to install themselves or not. 36 | $result = $ft['db']['link']->query("SELECT name FROM SQLITE_MASTER WHERE type='table'"); 37 | if ($result) { 38 | foreach ($result as $row) { 39 | $ft['db']['tables'][] = $row['name']; 40 | } 41 | } 42 | } else { 43 | ft_set_message(t('Database module could not be enabled. Database could not be created at !db.', array('!db' => $ft['plugins']['db']['settings']['path'])), 'error'); 44 | ft_plugin_unload('db'); 45 | } 46 | } else { 47 | ft_set_message(t('Database module could not be enabled. PHP PDO is not installed.'), 'error'); 48 | ft_plugin_unload('db'); 49 | } 50 | } 51 | 52 | /** 53 | * Implementation of hook_secondary_menu. 54 | */ 55 | function ft_db_secondary_menu() { 56 | global $ft; 57 | if (isset($ft['plugins']['db']['settings']['flushtables']) && $ft['plugins']['db']['settings']['flushtables'] === TRUE) { 58 | return ft_make_link(t('[db]'), "act=db", t("Manage database")); 59 | } 60 | return ''; 61 | } 62 | 63 | /** 64 | * Implementation of hook_page. 65 | */ 66 | function ft_db_page($act) { 67 | global $ft; 68 | 69 | $str = ''; 70 | if ($act == 'db' && isset($ft['plugins']['db']['settings']['flushtables']) && $ft['plugins']['db']['settings']['flushtables'] === TRUE) { 71 | // Show all DB tables. 72 | $str .= "

".t('Database tables')."

"; 73 | // Other users. 74 | if (is_array($ft['db']) && is_array($ft['db']['tables']) && count($ft['db']['tables']) > 0) { 75 | $str .= ''; 76 | foreach($ft['db']['tables'] as $name) { 77 | $str .= ''; 78 | } 79 | $str .= '
'.t('Table name').''.t('Delete?').'
'.$name.''.ft_make_link(t('delete'), 'act=db_delete&value='.$name).'
'; 80 | } else { 81 | $str .= '

'.t('No tables present in database.').'

'; 82 | } 83 | } elseif ($act == 'db_delete') { 84 | $display_value = htmlentities($_GET['value']); 85 | $str = "

".t('Delete database table: !table', array('!table' => $display_value))."

"; 86 | $str .= "

".t('Are you sure you want to continue? This will delete the table from the database.')."

"; 87 | $str .= '
'; 88 | $str .= '
'; 89 | $str .= ''; 90 | $str .= ''; 91 | $str .= ''; 92 | $str .= ' 93 |
94 |
'; 95 | } 96 | return $str; 97 | } 98 | 99 | /** 100 | * Implementation of hook_action. 101 | */ 102 | function ft_db_action($act) { 103 | global $ft; 104 | // Delete a database table. 105 | if ($act == 'db_delete_submit' && isset($ft['plugins']['db']['settings']['flushtables']) && $ft['plugins']['db']['settings']['flushtables'] === TRUE) { 106 | // Check for cancel. 107 | if (strtolower($_REQUEST["ft_submit"]) == strtolower(t("Cancel"))) { 108 | ft_redirect("act=db"); 109 | } 110 | // Check if table exists. 111 | $display_value = htmlentities($_POST['value']); 112 | if (is_array($ft['db']) && is_array($ft['db']['tables']) && count($ft['db']['tables']) > 0) { 113 | // Drop table. 114 | $result = $ft['db']['link']->query('DROP TABLE '.$ft['db']['link']->quote($_POST['value'])); 115 | if ($result) { 116 | ft_set_message(t('Database table !table dropped.', array('!table' => $display_value))); 117 | } else { 118 | ft_set_message(t("Database table !table could not be dropped.", array('!table' => $display_value)), 'error'); 119 | } 120 | } else { 121 | ft_set_message(t("Database table !table could not be removed because it doesn't exists.", array('!table' => $display_value)), 'error'); 122 | } 123 | // Redirect. 124 | ft_redirect("act=db"); 125 | } 126 | } 127 | 128 | /** 129 | * Create database table if it doesn't exists. 130 | * 131 | * @param $table 132 | * Name of table name. 133 | * @param $sql 134 | * SQL query to run to create table. 135 | * @return TRUE if table already exists or is created successfully. 136 | */ 137 | function ft_db_install_table($table, $sql) { 138 | global $ft; 139 | if (is_array($ft['db']['tables'])) { 140 | foreach ($ft['db']['tables'] as $c) { 141 | if ($c == $table) { 142 | return TRUE; 143 | } 144 | } 145 | } 146 | return $ft['db']['link']->query($sql); 147 | } 148 | -------------------------------------------------------------------------------- /plugins/editorck.plugin.php: -------------------------------------------------------------------------------- 1 | 'ckeditor: Edit files using the ckeditor editor.', 16 | 'settings' => array( 17 | 'list' => array( 18 | 'default' => 'html htm', 19 | 'description' => t('List of file extensions to edit using ckeditor.'), 20 | ), 21 | 'path' => array( 22 | 'default' => 'ckeditor/ckeditor.js', 23 | 'description' => t('Path to ckeditor.js'), 24 | ), 25 | ), 26 | ); 27 | } 28 | 29 | /** 30 | * Implementation of hook_add_js_file. 31 | */ 32 | function ft_editorck_add_js_file() { 33 | global $ft; 34 | $return = array(); 35 | // Only add JS when we are on an edit page. 36 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['editorck']['settings']['path'])) { 37 | $return[] = $ft['plugins']['editorck']['settings']['path']; 38 | } 39 | return $return; 40 | } 41 | 42 | /** 43 | * Implementation of hook_add_js_call. 44 | */ 45 | function ft_editorck_add_js_call() { 46 | global $ft; 47 | $return = ''; 48 | // Only add JS when we're on an edit page. 49 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['editorck']['settings']['path'])) { 50 | $list = explode(" ", $ft['plugins']['editorck']['settings']['list']); 51 | if (in_array(ft_get_ext(strtolower($_REQUEST['file'])), $list)) { 52 | // Unbind save action and rebind with a ckeditor specific version. 53 | $return .= '$("#save").unbind();$("#save").click(function(){ 54 | $("#savestatus").empty().append("

'.t('Saving file…').'

"); 55 | // Get file content from ckeditor. 56 | filecontent = CKEDITOR.instances.filecontent.getData();; 57 | $.post("'.ft_get_self().'", {method:\'ajax\', act:\'saveedit\', file: $(\'#file\').val(), dir: $(\'#dir\').val(), filecontent: filecontent, convertspaces: $(\'#convertspaces\').val()}, function(data){ 58 | $("#savestatus").empty().append(data); 59 | }); 60 | });'; 61 | } 62 | } 63 | return $return; 64 | } 65 | 66 | /** 67 | * Implementation of hook_add_js_call_footer. 68 | */ 69 | function ft_editorck_add_js_call_footer() { 70 | global $ft; 71 | $return = ''; 72 | // Only add JS when we're on an edit page. 73 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit') { 74 | if (file_exists($ft['plugins']['editorck']['settings']['path'])) { 75 | $list = explode(" ", $ft['plugins']['editorck']['settings']['list']); 76 | if (in_array(ft_get_ext(strtolower($_REQUEST['file'])), $list)) { 77 | $return = 'CKEDITOR.replace("filecontent");'; 78 | } else { 79 | $return = '// File not in ckeditor edit list.'; 80 | } 81 | } else { 82 | $return = '// ckeditor file not found: ' . $ft['plugins']['editorck']['settings']['path']; 83 | } 84 | } 85 | return $return; 86 | } 87 | 88 | -------------------------------------------------------------------------------- /plugins/fckeditor.plugin.php: -------------------------------------------------------------------------------- 1 | 'FCK editor: Enables editing using FCK editor', 16 | 'settings' => array( 17 | 'list' => array( 18 | 'default' => 'html htm', 19 | 'description' => t('List of file extensions to edit using fckeditor.'), 20 | ), 21 | 'path' => array( 22 | 'default' => 'fckeditor/fckeditor.js', 23 | 'description' => t('Path to fckeditor.js'), 24 | ), 25 | 'BasePath' => array( 26 | 'default' => 'fckeditor/', 27 | 'description' => t('BasePath'), 28 | ), 29 | ), 30 | ); 31 | } 32 | 33 | /** 34 | * Implementation of hook_add_js_file. 35 | */ 36 | function ft_fckeditor_add_js_file() { 37 | global $ft; 38 | $return = array(); 39 | // Only add JS when we are on an edit page. 40 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['fckeditor']['settings']['path'])) { 41 | $return[] = $ft['plugins']['fckeditor']['settings']['path']; 42 | } 43 | return $return; 44 | } 45 | 46 | /** 47 | * Implementation of hook_add_js_call. 48 | */ 49 | function ft_fckeditor_add_js_call() { 50 | global $ft; 51 | $return = ''; 52 | // Only add JS when we're on an edit page. 53 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['fckeditor']['settings']['path'])) { 54 | $list = explode(" ", $ft['plugins']['fckeditor']['settings']['list']); 55 | if (in_array(ft_get_ext(strtolower($_REQUEST['file'])), $list)) { 56 | $return .= 'var oFCKeditor = new FCKeditor("filecontent") ; 57 | oFCKeditor.BasePath = "'.$ft['plugins']['fckeditor']['settings']['BasePath'].'" ; 58 | oFCKeditor.ReplaceTextarea() ;'; 59 | 60 | // Unbind save action and rebind with a fckeditor specific version. 61 | $return .= '$("#save").unbind();$("#save").click(function(){ 62 | $("#savestatus").empty().append("

'.t('Saving file…').'

"); 63 | // Get file content from fckeditor. 64 | oEditor = FCKeditorAPI.GetInstance("filecontent"); 65 | filecontent = oEditor.GetHTML(); 66 | $.post("'.ft_get_self().'", {method:\'ajax\', act:\'saveedit\', file: $(\'#file\').val(), dir: $(\'#dir\').val(), filecontent: filecontent, convertspaces: $(\'#convertspaces\').val()}, function(data){ 67 | $("#savestatus").empty().append(data); 68 | }); 69 | });'; 70 | } 71 | } 72 | return $return; 73 | } -------------------------------------------------------------------------------- /plugins/fileinfo.plugin.php: -------------------------------------------------------------------------------- 1 | 'Fileinfo: Add descriptions to files.', 17 | ); 18 | } 19 | 20 | /** 21 | * Implementation of hook_init. 22 | */ 23 | function ft_fileinfo_init() { 24 | // Check if DB plugin is loaded. 25 | if (!ft_plugin_exists('db')) { 26 | ft_set_message(t('!name plugin not enabled because required !required plugin was not found.', array('!name' => 'Fileinfo', '!required' => 'db')), 'error'); 27 | ft_plugin_unload('fileinfo'); 28 | } else { 29 | // Check if we need to create new table. 30 | $sql = "CREATE TABLE fileinfo ( 31 | dir TEXT NOT NULL, 32 | file TEXT NOT NULL, 33 | description TEXT 34 | )"; 35 | ft_db_install_table('fileinfo', $sql); 36 | } 37 | } 38 | 39 | /** 40 | * Implementation of hook_add_css. 41 | */ 42 | function ft_fileinfo_add_css() { 43 | return '#filelist p.fileinfo, #filelist span.addfileinfo {float:right;cursor:pointer;font-size:0.8em;color:#999;margin-top:0;margin-bottom:0;} 44 | #filelist p.fileinfo input {width:100%}'; 45 | } 46 | 47 | /** 48 | * Implementation of hook_dirlist. 49 | */ 50 | function ft_fileinfo_dirlist() { 51 | global $ft; 52 | $sql = 'SELECT name, description FROM fileinfo WHERE dir = '.sqlite_escape_string(ft_get_dir()); 53 | $result = sqlite_query($ft['db']['link'], $sql); 54 | if ($result) { 55 | while ($entry = sqlite_fetch_array($query, SQLITE_ASSOC)) { 56 | $ft['fileinfo']['descriptions'][$entry['file']] = $entry['description']; 57 | } 58 | } 59 | } 60 | 61 | /** 62 | * Implementation of hook_filename. 63 | */ 64 | function ft_fileinfo_filename($file) { 65 | global $ft; 66 | if (isset($ft['fileinfo']) && isset($ft['fileinfo']['descriptions']) && is_array($ft['fileinfo']['descriptions']) && array_key_exists($file, $ft['fileinfo']['descriptions'])) { 67 | // Found description. 68 | // return "

{$ft['fileinfo']['descriptions'][$file]}

"; 69 | } else { 70 | // No description. 71 | // return "+"; 72 | } 73 | return ''; 74 | } 75 | 76 | /** 77 | * Implementation of hook_add_js_file. 78 | */ 79 | function ft_fileinfo_add_js_file() { 80 | return array(PLUGINDIR.'/jquery.fileinfo.js'); 81 | } 82 | 83 | /** 84 | * Implementation of hook_add_js_call. 85 | */ 86 | function ft_fileinfo_add_js_call() { 87 | $return = ''; 88 | $return .= "$('#filelist').ft_fileinfo();"; 89 | return $return; 90 | } 91 | -------------------------------------------------------------------------------- /plugins/jquery.fileinfo.js: -------------------------------------------------------------------------------- 1 | ;(function($) { 2 | $.fn.ft_fileinfo = function(options) { 3 | return this.each(function() { 4 | $(this).find('span.addfileinfo').click(function(){ 5 | parent = $(this).parents('tr'); 6 | if (parent.find('p.fileinfo').length > 0) { 7 | // Description already present. Cancel. 8 | parent.find('p.fileinfo').remove(); 9 | } else { 10 | $(this).after('

'); 11 | } 12 | }); 13 | 14 | }); 15 | }; 16 | })(jQuery); -------------------------------------------------------------------------------- /plugins/search.plugin.php: -------------------------------------------------------------------------------- 1 | 'Search: Search files and folders.', 14 | ); 15 | } 16 | 17 | /** 18 | * Implementation of hook_sidebar. 19 | */ 20 | function ft_search_sidebar() { 21 | $sidebar[] = array( 22 | "id" => "search_1", 23 | "content" => '
24 |

'.t('Search files & folders').'

25 |
26 |
27 | 28 | 29 |
30 |
31 | 32 |
33 |
34 |
35 |
' 36 | ); 37 | return $sidebar; 38 | } 39 | 40 | /** 41 | * Implementation of hook_ajax. 42 | */ 43 | function ft_search_ajax($act) { 44 | if ($act == 'search') { 45 | $new = array(); 46 | $ret = ""; 47 | $q = $_POST['q']; 48 | $type = $_POST['type']; 49 | if (!empty($q)) { 50 | if ($type == "true") { 51 | $list = _ft_search_find_files(ft_get_dir(), $q); 52 | } else { 53 | $list = _ft_search_find_files(ft_get_root(), $q); 54 | } 55 | if (is_array($list)){ 56 | if (count($list) > 0) { 57 | foreach ($list as $c) { 58 | if (empty($c['dir'])) { 59 | $c['dirlink'] = "/"; 60 | } else { 61 | $c['dirlink'] = $c['dir']; 62 | } 63 | if ($c['type'] == "file") { 64 | $link = " $c['name'])). "'>{$c['shortname']}"; 65 | if (HIDEFILEPATHS == TRUE) { 66 | $link = ft_make_link($c['shortname'], 'method=getfile&dir='.rawurlencode($c['dir']).'&file='.$c['name'], t('Show !file', array('!file' => $c['name']))); 67 | } 68 | $ret .= "
{$link}
".ft_make_link($c['dirlink'], "dir=".rawurlencode($c['dir'])."&highlight=".rawurlencode($c['name'])."&q=".rawurlencode($q), t("Highlight file in directory"))."
"; 69 | } else { 70 | $ret .= "
".ft_make_link($c['shortname'], "dir=".rawurlencode("{$c['dir']}/{$c['name']}")."&q={$q}", t("Show files in !folder", array('!folder' => $c['name'])))."
".ft_make_link($c['dirlink'], "dir=".rawurlencode($c['dir'])."&highlight=".rawurlencode($c['name'])."&q=".rawurlencode($q), t("Highlight file in directory"))."
"; 71 | } 72 | } 73 | return $ret; 74 | } else { 75 | return "
".t('No files found').".
"; 76 | } 77 | } else { 78 | return "
".t('Error.')."
"; 79 | } 80 | } else { 81 | return "
".t('Enter a search string.')."
"; 82 | } 83 | } 84 | } 85 | 86 | /** 87 | * Implementation of hook_add_js_call. 88 | */ 89 | function ft_search_add_js_call() { 90 | $return = ''; 91 | $return .= "$('#searchform').ft_search({\r\n"; 92 | if (!empty($_REQUEST['dir'])) { 93 | $return .= "\tdirectory: '{$_REQUEST['dir']}',\r\n"; 94 | } else { 95 | $return .= "\tdirectory: '',\r\n"; 96 | } 97 | $return .= "\tformpost: '".ft_get_self()."',\r\n"; 98 | $return .= "\theader: '".t('Results')."',\r\n"; 99 | $return .= "\tloading: '".t('Fetching results…')."'\r\n"; 100 | $return .= '});'; 101 | return $return; 102 | } 103 | 104 | /** 105 | * Private function. Searches for file names and directories recursively. 106 | * 107 | * @param $dir 108 | * Directory to search. 109 | * @param $q 110 | * Search query. 111 | * @return An array of files. Each item is an array: 112 | * array( 113 | * 'name' => '', // File name. 114 | * 'shortname' => '', // File name. 115 | * 'type' => '', // 'file' or 'dir'. 116 | * 'dir' => '', // Directory where file is located. 117 | * ) 118 | */ 119 | function _ft_search_find_files($dir, $q){ 120 | $output = array(); 121 | if (ft_check_dir($dir) && $dirlink = @opendir($dir)) { 122 | while(($file = readdir($dirlink)) !== false){ 123 | if($file != "." && $file != ".." && ((ft_check_file($file) && ft_check_filetype($file)) || (is_dir($dir."/".$file) && ft_check_dir($file)))){ 124 | $path = $dir.'/'.$file; 125 | // Check if filename/directory name is a match. 126 | if(stristr($file, $q)) { 127 | $new['name'] = $file; 128 | $new['shortname'] = ft_get_nice_filename($file, 20); 129 | $new['dir'] = substr($dir, strlen(ft_get_root())); 130 | if (is_dir($path)) { 131 | if (ft_check_dir($path)) { 132 | $new['type'] = "dir"; 133 | $output[] = $new; 134 | } 135 | } else { 136 | $new['type'] = "file"; 137 | $output[] = $new; 138 | } 139 | } 140 | // Check subdirs for matches. 141 | if(is_dir($path)) { 142 | $dirres = _ft_search_find_files($path, $q); 143 | if (is_array($dirres) && count($dirres) > 0) { 144 | $output = array_merge($dirres, $output); 145 | unset($dirres); 146 | } 147 | } 148 | } 149 | } 150 | sort($output); 151 | closedir($dirlink); 152 | return $output; 153 | } else { 154 | return FALSE; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /plugins/tablesorter/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Mon Mar 17 22:31:28 CET 2008 2 | eclipse.preferences.version=1 3 | encoding/jquery.tablesorter.js=UTF-8 4 | -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/icons/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/addons/pager/icons/first.png -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/icons/last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/addons/pager/icons/last.png -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/icons/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/addons/pager/icons/next.png -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/icons/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/addons/pager/icons/prev.png -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/jquery.tablesorter.pager.css: -------------------------------------------------------------------------------- 1 | div.tablesorterPager { 2 | padding: 10px 0 10px 0; 3 | background-color: #D6D2C2; 4 | text-align: center; 5 | } 6 | div.tablesorterPager span { 7 | padding: 0 5px 0 5px; 8 | } 9 | div.tablesorterPager input.prev { 10 | width: auto; 11 | margin-right: 10px; 12 | } 13 | div.tablesorterPager input.next { 14 | width: auto; 15 | margin-left: 10px; 16 | } 17 | div.tablesorterPager input { 18 | font-size: 8px; 19 | width: 50px; 20 | border: 1px solid #330000; 21 | text-align: center; 22 | } 23 | 24 | 25 | -------------------------------------------------------------------------------- /plugins/tablesorter/addons/pager/jquery.tablesorter.pager.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | $.extend({ 3 | tablesorterPager: new function() { 4 | 5 | function updatePageDisplay(c) { 6 | var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages); 7 | } 8 | 9 | function setPageSize(table,size) { 10 | var c = table.config; 11 | c.size = size; 12 | c.totalPages = Math.ceil(c.totalRows / c.size); 13 | c.pagerPositionSet = false; 14 | moveToPage(table); 15 | fixPosition(table); 16 | } 17 | 18 | function fixPosition(table) { 19 | var c = table.config; 20 | if(!c.pagerPositionSet && c.positionFixed) { 21 | var c = table.config, o = $(table); 22 | if(o.offset) { 23 | c.container.css({ 24 | top: o.offset().top + o.height() + 'px', 25 | position: 'absolute' 26 | }); 27 | } 28 | c.pagerPositionSet = true; 29 | } 30 | } 31 | 32 | function moveToFirstPage(table) { 33 | var c = table.config; 34 | c.page = 0; 35 | moveToPage(table); 36 | } 37 | 38 | function moveToLastPage(table) { 39 | var c = table.config; 40 | c.page = (c.totalPages-1); 41 | moveToPage(table); 42 | } 43 | 44 | function moveToNextPage(table) { 45 | var c = table.config; 46 | c.page++; 47 | if(c.page >= (c.totalPages-1)) { 48 | c.page = (c.totalPages-1); 49 | } 50 | moveToPage(table); 51 | } 52 | 53 | function moveToPrevPage(table) { 54 | var c = table.config; 55 | c.page--; 56 | if(c.page <= 0) { 57 | c.page = 0; 58 | } 59 | moveToPage(table); 60 | } 61 | 62 | 63 | function moveToPage(table) { 64 | var c = table.config; 65 | if(c.page < 0 || c.page > (c.totalPages-1)) { 66 | c.page = 0; 67 | } 68 | 69 | renderTable(table,c.rowsCopy); 70 | } 71 | 72 | function renderTable(table,rows) { 73 | 74 | var c = table.config; 75 | var l = rows.length; 76 | var s = (c.page * c.size); 77 | var e = (s + c.size); 78 | if(e > rows.length ) { 79 | e = rows.length; 80 | } 81 | 82 | 83 | var tableBody = $(table.tBodies[0]); 84 | 85 | // clear the table body 86 | 87 | $.tablesorter.clearTableBody(table); 88 | 89 | for(var i = s; i < e; i++) { 90 | 91 | //tableBody.append(rows[i]); 92 | 93 | var o = rows[i]; 94 | var l = o.length; 95 | for(var j=0; j < l; j++) { 96 | 97 | tableBody[0].appendChild(o[j]); 98 | 99 | } 100 | } 101 | 102 | fixPosition(table,tableBody); 103 | 104 | $(table).trigger("applyWidgets"); 105 | 106 | if( c.page >= c.totalPages ) { 107 | moveToLastPage(table); 108 | } 109 | 110 | updatePageDisplay(c); 111 | } 112 | 113 | this.appender = function(table,rows) { 114 | 115 | var c = table.config; 116 | 117 | c.rowsCopy = rows; 118 | c.totalRows = rows.length; 119 | c.totalPages = Math.ceil(c.totalRows / c.size); 120 | 121 | renderTable(table,rows); 122 | }; 123 | 124 | this.defaults = { 125 | size: 10, 126 | offset: 0, 127 | page: 0, 128 | totalRows: 0, 129 | totalPages: 0, 130 | container: null, 131 | cssNext: '.next', 132 | cssPrev: '.prev', 133 | cssFirst: '.first', 134 | cssLast: '.last', 135 | cssPageDisplay: '.pagedisplay', 136 | cssPageSize: '.pagesize', 137 | seperator: "/", 138 | positionFixed: true, 139 | appender: this.appender 140 | }; 141 | 142 | this.construct = function(settings) { 143 | 144 | return this.each(function() { 145 | 146 | config = $.extend(this.config, $.tablesorterPager.defaults, settings); 147 | 148 | var table = this, pager = config.container; 149 | 150 | $(this).trigger("appendCache"); 151 | 152 | config.size = parseInt($(".pagesize",pager).val()); 153 | 154 | $(config.cssFirst,pager).click(function() { 155 | moveToFirstPage(table); 156 | return false; 157 | }); 158 | $(config.cssNext,pager).click(function() { 159 | moveToNextPage(table); 160 | return false; 161 | }); 162 | $(config.cssPrev,pager).click(function() { 163 | moveToPrevPage(table); 164 | return false; 165 | }); 166 | $(config.cssLast,pager).click(function() { 167 | moveToLastPage(table); 168 | return false; 169 | }); 170 | $(config.cssPageSize,pager).change(function() { 171 | setPageSize(table,parseInt($(this).val())); 172 | return false; 173 | }); 174 | }); 175 | }; 176 | 177 | } 178 | }); 179 | // extend plugin scope 180 | $.fn.extend({ 181 | tablesorterPager: $.tablesorterPager.construct 182 | }); 183 | 184 | })(jQuery); -------------------------------------------------------------------------------- /plugins/tablesorter/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /plugins/tablesorter/build/ParseMaster.js: -------------------------------------------------------------------------------- 1 | /* 2 | ParseMaster, version 1.0.2 (2005-08-19) 3 | Copyright 2005, Dean Edwards 4 | License: http://creativecommons.org/licenses/LGPL/2.1/ 5 | */ 6 | 7 | /* a multi-pattern parser */ 8 | 9 | // KNOWN BUG: erroneous behavior when using escapeChar with a replacement value that is a function 10 | 11 | function ParseMaster() { 12 | // constants 13 | var $EXPRESSION = 0, $REPLACEMENT = 1, $LENGTH = 2; 14 | // used to determine nesting levels 15 | var $GROUPS = /\(/g, $SUB_REPLACE = /\$\d/, $INDEXED = /^\$\d+$/, 16 | $TRIM = /(['"])\1\+(.*)\+\1\1$/, $$ESCAPE = /\\./g, $QUOTE = /'/, 17 | $$DELETED = /\x01[^\x01]*\x01/g; 18 | var self = this; 19 | // public 20 | this.add = function($expression, $replacement) { 21 | if (!$replacement) $replacement = ""; 22 | // count the number of sub-expressions 23 | // - add one because each pattern is itself a sub-expression 24 | var $length = (_internalEscape(String($expression)).match($GROUPS) || "").length + 1; 25 | // does the pattern deal with sub-expressions? 26 | if ($SUB_REPLACE.test($replacement)) { 27 | // a simple lookup? (e.g. "$2") 28 | if ($INDEXED.test($replacement)) { 29 | // store the index (used for fast retrieval of matched strings) 30 | $replacement = parseInt($replacement.slice(1)) - 1; 31 | } else { // a complicated lookup (e.g. "Hello $2 $1") 32 | // build a function to do the lookup 33 | var i = $length; 34 | var $quote = $QUOTE.test(_internalEscape($replacement)) ? '"' : "'"; 35 | while (i) $replacement = $replacement.split("$" + i--).join($quote + "+a[o+" + i + "]+" + $quote); 36 | $replacement = new Function("a,o", "return" + $quote + $replacement.replace($TRIM, "$1") + $quote); 37 | } 38 | } 39 | // pass the modified arguments 40 | _add($expression || "/^$/", $replacement, $length); 41 | }; 42 | // execute the global replacement 43 | this.exec = function($string) { 44 | _escaped.length = 0; 45 | return _unescape(_escape($string, this.escapeChar).replace( 46 | new RegExp(_patterns, this.ignoreCase ? "gi" : "g"), _replacement), this.escapeChar).replace($$DELETED, ""); 47 | }; 48 | // clear the patterns collection so that this object may be re-used 49 | this.reset = function() { 50 | _patterns.length = 0; 51 | }; 52 | 53 | // private 54 | var _escaped = []; // escaped characters 55 | var _patterns = []; // patterns stored by index 56 | var _toString = function(){return "(" + String(this[$EXPRESSION]).slice(1, -1) + ")"}; 57 | _patterns.toString = function(){return this.join("|")}; 58 | // create and add a new pattern to the patterns collection 59 | function _add() { 60 | arguments.toString = _toString; 61 | // store the pattern - as an arguments object (i think this is quicker..?) 62 | _patterns[_patterns.length] = arguments; 63 | } 64 | // this is the global replace function (it's quite complicated) 65 | function _replacement() { 66 | if (!arguments[0]) return ""; 67 | var i = 1, j = 0, $pattern; 68 | // loop through the patterns 69 | while ($pattern = _patterns[j++]) { 70 | // do we have a result? 71 | if (arguments[i]) { 72 | var $replacement = $pattern[$REPLACEMENT]; 73 | switch (typeof $replacement) { 74 | case "function": return $replacement(arguments, i); 75 | case "number": return arguments[$replacement + i]; 76 | } 77 | var $delete = (arguments[i].indexOf(self.escapeChar) == -1) ? "" : 78 | "\x01" + arguments[i] + "\x01"; 79 | return $delete + $replacement; 80 | // skip over references to sub-expressions 81 | } else i += $pattern[$LENGTH]; 82 | } 83 | }; 84 | // encode escaped characters 85 | function _escape($string, $escapeChar) { 86 | return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar + "(.)", "g"), function($match, $char) { 87 | _escaped[_escaped.length] = $char; 88 | return $escapeChar; 89 | }) : $string; 90 | }; 91 | // decode escaped characters 92 | function _unescape($string, $escapeChar) { 93 | var i = 0; 94 | return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar, "g"), function() { 95 | return $escapeChar + (_escaped[i++] || ""); 96 | }) : $string; 97 | }; 98 | function _internalEscape($string) { 99 | return $string.replace($$ESCAPE, ""); 100 | }; 101 | }; 102 | ParseMaster.prototype = { 103 | constructor: ParseMaster, 104 | ignoreCase: false, 105 | escapeChar: "" 106 | }; 107 | -------------------------------------------------------------------------------- /plugins/tablesorter/build/js.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/build/js.jar -------------------------------------------------------------------------------- /plugins/tablesorter/build/jsmin.js: -------------------------------------------------------------------------------- 1 | /* jsmin.js - 2006-08-31 2 | Author: Franck Marcia 3 | This work is an adaptation of jsminc.c published by Douglas Crockford. 4 | Permission is hereby granted to use the Javascript version under the same 5 | conditions as the jsmin.c on which it is based. 6 | 7 | jsmin.c 8 | 2006-05-04 9 | 10 | Copyright (c) 2002 Douglas Crockford (www.crockford.com) 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining a copy of 13 | this software and associated documentation files (the "Software"), to deal in 14 | the Software without restriction, including without limitation the rights to 15 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 16 | of the Software, and to permit persons to whom the Software is furnished to do 17 | so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all 20 | copies or substantial portions of the Software. 21 | 22 | The Software shall be used for Good, not Evil. 23 | 24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 26 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 27 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 28 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 29 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 | SOFTWARE. 31 | 32 | Update: 33 | add level: 34 | 1: minimal, keep linefeeds if single 35 | 2: normal, the standard algorithm 36 | 3: agressive, remove any linefeed and doesn't take care of potential 37 | missing semicolons (can be regressive) 38 | store stats 39 | jsmin.oldSize 40 | jsmin.newSize 41 | */ 42 | 43 | String.prototype.has = function(c) { 44 | return this.indexOf(c) > -1; 45 | }; 46 | 47 | function jsmin(comment, input, level) { 48 | 49 | if (input === undefined) { 50 | input = comment; 51 | comment = ''; 52 | level = 2; 53 | } else if (level === undefined || level < 1 || level > 3) { 54 | level = 2; 55 | } 56 | 57 | if (comment.length > 0) { 58 | comment += '\n'; 59 | } 60 | 61 | var a = '', 62 | b = '', 63 | EOF = -1, 64 | LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 65 | DIGITS = '0123456789', 66 | ALNUM = LETTERS + DIGITS + '_$\\', 67 | theLookahead = EOF; 68 | 69 | 70 | /* isAlphanum -- return true if the character is a letter, digit, underscore, 71 | dollar sign, or non-ASCII character. 72 | */ 73 | 74 | function isAlphanum(c) { 75 | return c != EOF && (ALNUM.has(c) || c.charCodeAt(0) > 126); 76 | } 77 | 78 | 79 | /* get -- return the next character. Watch out for lookahead. If the 80 | character is a control character, translate it to a space or 81 | linefeed. 82 | */ 83 | 84 | function get() { 85 | 86 | var c = theLookahead; 87 | if (get.i == get.l) { 88 | return EOF; 89 | } 90 | theLookahead = EOF; 91 | if (c == EOF) { 92 | c = input.charAt(get.i); 93 | ++get.i; 94 | } 95 | if (c >= ' ' || c == '\n') { 96 | return c; 97 | } 98 | if (c == '\r') { 99 | return '\n'; 100 | } 101 | return ' '; 102 | } 103 | 104 | get.i = 0; 105 | get.l = input.length; 106 | 107 | 108 | /* peek -- get the next character without getting it. 109 | */ 110 | 111 | function peek() { 112 | theLookahead = get(); 113 | return theLookahead; 114 | } 115 | 116 | 117 | /* next -- get the next character, excluding comments. peek() is used to see 118 | if a '/' is followed by a '/' or '*'. 119 | */ 120 | 121 | function next() { 122 | 123 | var c = get(); 124 | if (c == '/') { 125 | switch (peek()) { 126 | case '/': 127 | for (;;) { 128 | c = get(); 129 | if (c <= '\n') { 130 | return c; 131 | } 132 | } 133 | break; 134 | case '*': 135 | get(); 136 | for (;;) { 137 | switch (get()) { 138 | case '*': 139 | if (peek() == '/') { 140 | get(); 141 | return ' '; 142 | } 143 | break; 144 | case EOF: 145 | throw 'Error: Unterminated comment.'; 146 | } 147 | } 148 | break; 149 | default: 150 | return c; 151 | } 152 | } 153 | return c; 154 | } 155 | 156 | 157 | /* action -- do something! What you do is determined by the argument: 158 | 1 Output A. Copy B to A. Get the next B. 159 | 2 Copy B to A. Get the next B. (Delete A). 160 | 3 Get the next B. (Delete B). 161 | action treats a string as a single character. Wow! 162 | action recognizes a regular expression if it is preceded by ( or , or =. 163 | */ 164 | 165 | function action(d) { 166 | 167 | var r = []; 168 | 169 | if (d == 1) { 170 | r.push(a); 171 | } 172 | 173 | if (d < 3) { 174 | a = b; 175 | if (a == '\'' || a == '"') { 176 | for (;;) { 177 | r.push(a); 178 | a = get(); 179 | if (a == b) { 180 | break; 181 | } 182 | if (a <= '\n') { 183 | throw 'Error: unterminated string literal: ' + a; 184 | } 185 | if (a == '\\') { 186 | r.push(a); 187 | a = get(); 188 | } 189 | } 190 | } 191 | } 192 | 193 | b = next(); 194 | 195 | if (b == '/' && '(,=:[!&|'.has(a)) { 196 | r.push(a); 197 | r.push(b); 198 | for (;;) { 199 | a = get(); 200 | if (a == '/') { 201 | break; 202 | } else if (a =='\\') { 203 | r.push(a); 204 | a = get(); 205 | } else if (a <= '\n') { 206 | throw 'Error: unterminated Regular Expression literal'; 207 | } 208 | r.push(a); 209 | } 210 | b = next(); 211 | } 212 | 213 | return r.join(''); 214 | } 215 | 216 | 217 | /* m -- Copy the input to the output, deleting the characters which are 218 | insignificant to JavaScript. Comments will be removed. Tabs will be 219 | replaced with spaces. Carriage returns will be replaced with 220 | linefeeds. 221 | Most spaces and linefeeds will be removed. 222 | */ 223 | 224 | function m() { 225 | 226 | var r = []; 227 | a = '\n'; 228 | 229 | r.push(action(3)); 230 | 231 | while (a != EOF) { 232 | switch (a) { 233 | case ' ': 234 | if (isAlphanum(b)) { 235 | r.push(action(1)); 236 | } else { 237 | r.push(action(2)); 238 | } 239 | break; 240 | case '\n': 241 | switch (b) { 242 | case '{': 243 | case '[': 244 | case '(': 245 | case '+': 246 | case '-': 247 | r.push(action(1)); 248 | break; 249 | case ' ': 250 | r.push(action(3)); 251 | break; 252 | default: 253 | if (isAlphanum(b)) { 254 | r.push(action(1)); 255 | } else { 256 | if (level == 1 && b != '\n') { 257 | r.push(action(1)); 258 | } else { 259 | r.push(action(2)); 260 | } 261 | } 262 | } 263 | break; 264 | default: 265 | switch (b) { 266 | case ' ': 267 | if (isAlphanum(a)) { 268 | r.push(action(1)); 269 | break; 270 | } 271 | r.push(action(3)); 272 | break; 273 | case '\n': 274 | if (level == 1 && a != '\n') { 275 | r.push(action(1)); 276 | } else { 277 | switch (a) { 278 | case '}': 279 | case ']': 280 | case ')': 281 | case '+': 282 | case '-': 283 | case '"': 284 | case '\'': 285 | if (level == 3) { 286 | r.push(action(3)); 287 | } else { 288 | r.push(action(1)); 289 | } 290 | break; 291 | default: 292 | if (isAlphanum(a)) { 293 | r.push(action(1)); 294 | } else { 295 | r.push(action(3)); 296 | } 297 | } 298 | } 299 | break; 300 | default: 301 | r.push(action(1)); 302 | break; 303 | } 304 | } 305 | } 306 | 307 | return r.join(''); 308 | } 309 | 310 | jsmin.oldSize = input.length; 311 | ret = m(input); 312 | jsmin.newSize = ret.length; 313 | 314 | return comment + ret; 315 | 316 | } 317 | -------------------------------------------------------------------------------- /plugins/tablesorter/build/min.js: -------------------------------------------------------------------------------- 1 | load("build/jsmin.js", "build/writeFile.js"); 2 | 3 | var f = jsmin('', readFile(arguments[0]), 3); 4 | 5 | writeFile( arguments[1], f ); 6 | -------------------------------------------------------------------------------- /plugins/tablesorter/build/pack.js: -------------------------------------------------------------------------------- 1 | load("build/ParseMaster.js", "build/packer.js", "build/writeFile.js"); 2 | 3 | var out = readFile( arguments[0] ); 4 | 5 | writeFile( arguments[1], pack( out, 62, true, false ) ); 6 | -------------------------------------------------------------------------------- /plugins/tablesorter/build/writeFile.js: -------------------------------------------------------------------------------- 1 | importPackage(java.io); 2 | 3 | function writeFile( file, stream ) { 4 | var buffer = new PrintWriter( new FileWriter( file ) ); 5 | buffer.print( stream ); 6 | buffer.close(); 7 | } 8 | 9 | function read( file ) { 10 | var jq = new File(file); 11 | var reader = new BufferedReader(new FileReader(jq)); 12 | var line = null; 13 | var buffer = new java.lang.StringBuffer(jq.length()); 14 | while( (line = reader.readLine()) != null) { 15 | buffer.append(line); 16 | buffer.append("\n"); 17 | } 18 | return buffer.toString(); 19 | } -------------------------------------------------------------------------------- /plugins/tablesorter/changelog: -------------------------------------------------------------------------------- 1 | tablesorter changelog 2 | ====================== 3 | http://tablesorter.com 4 | 5 | Changes in version 2.0.3 (2008-03-17) 6 | ------------------------------------- 7 | 8 | Bug fixes 9 | * Missing semicolon, broke the minified version 10 | 11 | 12 | Changes in version 2.0.2 (2008-03-14) 13 | ------------------------------------- 14 | 15 | General 16 | * Added support for the new metadata plugin 17 | * Added support for jQuery 1.2.3 18 | * Added support for decimal numbers and negative and positive digits 19 | * Updated documenation and website with new examples 20 | * Removed packed version. 21 | 22 | Bug fixes 23 | * Sort force (Thanks to David Lynch) 24 | 25 | 26 | Changes in version 2.0.1 (2007-09-17) 27 | ------------------------------------- 28 | 29 | General 30 | * Removed the need for Dimensions plugin when using the pagnation plugin thanks to offset being included in the jQuery 1.2 core. 31 | * Added support for jQuery 1.2 32 | * Added new Minified version of tablesorter 33 | * Updated documenation and website with new examples 34 | 35 | Bug fixes 36 | * If row values are identical the original order is kept (Thanks to David hull) 37 | * If thead includes a table $('tbody:first', table) breaks (Thanks to David Hull) 38 | 39 | Speed improvements: 40 | * appendToTable, setting innerHTML to "" before appending new content to table body. 41 | * zebra widget. (Thanks to James Dempster) -------------------------------------------------------------------------------- /plugins/tablesorter/docs/assets/ajax-content.html: -------------------------------------------------------------------------------- 1 | 2 | Peter 3 | Parker 4 | 28 5 | $9.99 6 | 20% 7 | 8 | Jul 6, 2006 8:14 AM 9 | 10 | 11 | John 12 | Hood 13 | 33 14 | $19.99 15 | 25% 16 | 17 | Dec 10, 2002 5:14 AM 18 | 19 | 20 | Clark 21 | Kent 22 | 18 23 | $15.89 24 | 44% 25 | Jan 12, 2003 11:14 AM 26 | 27 | 28 | Bruce 29 | Almighty 30 | 45 31 | $153.19 32 | 44% 33 | 34 | Jan 18, 2001 9:12 AM 35 | 36 | 37 | Bruce 38 | Evans 39 | 22 40 | $13.19 41 | 11% 42 | Jan 18, 2007 9:12 AM 43 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/css/jq.css: -------------------------------------------------------------------------------- 1 | body,div,h1{font-family:'trebuchet ms', verdana, arial;margin:0;padding:0;} 2 | body{background-color:#fff;color:#333;font-size:small;margin:0;padding:0;} 3 | h1{font-size:large;font-weight:400;margin:0;} 4 | h2{color:#333;font-size:small;font-weight:400;margin:0;} 5 | pre{background-color:#eee;border:1px solid #ddd;border-left-width:5px;color:#333;font-size:small;overflow-x:auto;padding:15px;} 6 | pre.normal{background-color:transparent;border:none;border-left-width:0;overflow-x:auto;} 7 | #logo{background:url(images/jq.png);display:block;float:right;height:31px;margin-right:10px;margin-top:10px;width:110px;} 8 | #main{margin:0 20px 20px;padding:0 15px 15px 0;} 9 | #content{padding:20px;} 10 | #busy{background-color:#e95555;border:1px ridge #ccc;color:#eee;display:none;padding:3px;position:absolute;right:7px;top:7px;} 11 | hr{height:1px;} 12 | code{font-size:108%;font-style:normal;padding:0;} 13 | ul{color:#333;list-style:square;} 14 | #banner{margin:20px;padding-bottom:10px;text-align:left;} 15 | #banner *{color:#232121;font-family:Georgia, Palatino, Times New Roman;font-size:30px;font-style:normal;font-weight:400;margin:0;padding:0;} 16 | #banner h1{display:block;float:left;} 17 | #banner h1 em{color:#6cf;} 18 | #banner h2{float:right;font-size:26px;margin:10px 10px -10px -10px;} 19 | #banner h3{clear:both;display:block;font-size:12px;margin-top:-20px;} 20 | #banner a{border-top:1px solid #888;display:block;font-size:14px;margin:5px 0 0;padding:10px 0 0;text-align:right;width:auto;} 21 | a.external{background-image:url(../img/external.png);background-position:center right;background-repeat:no-repeat;padding-right:12px;} 22 | form{font-size:10pt;margin-bottom:20px;width:auto;} 23 | form fieldset{padding:10px;text-align:left;width:140px;} 24 | div#main h1{border-bottom:1px solid #CDCDCD;display:block;margin-top:20px;padding:10px 0 2px;} 25 | table#tablesorter-demo {margin: 10px 0 0 0;} 26 | table#options *{font-size:small;} 27 | p.tip em {padding: 2px; background-color: #6cf; color: #FFF;} 28 | div.digg {float: right;} -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-ajax.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Appending table data with ajax 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 31 | 32 | 33 | 39 |
40 |

Demo

41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
100 | Append new table data 101 |
102 |
103 |
104 |

Javascript

105 |
106 |

107 | 	
108 |

HTML

109 |
110 |

111 | 	
112 |
113 | 114 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-empty-table.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Initializing tablesorter on a empty table 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 31 | 32 | 33 | 39 |
40 |

Demo

41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
First NameLast NameAgeTotalDiscountDate
56 | Append new table data 57 |
58 |
59 |
60 |

Javascript

61 |
62 |

63 | 	
64 |

HTML

65 |
66 |

67 | 	
68 |
69 | 70 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-extending-defaults.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Extending default options 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 | 25 | 31 |
32 |

Demo

33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
92 |
93 |

Javascript

94 |
95 |

 96 | 	
97 |

HTML

98 |
99 |

100 | 	
101 |
102 | 103 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-meta-headers.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Disable headers using metadata 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 23 | 24 | 25 | 31 |
32 |

Demo

33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
91 |
92 |

Javascript

93 |
94 |

 95 | 	
96 |

HTML

97 |
98 |

 99 | 	
100 |
101 | 102 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-meta-parsers.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Setting column parser using metadata 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 22 | 28 |
29 |

Demo

30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
88 |
89 |

Javascript

90 |
91 |

 92 | 	
93 |

HTML

94 |
95 |

 96 | 	
97 |
98 | 99 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-meta-sort-list.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Setting initial sorting order with metadata 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 22 | 28 |
29 |

Demo

30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
90 |
91 |

Javascript

92 |
93 |

 94 | 	
95 |

HTML

96 |
97 |

 98 | 	
99 |
100 | 101 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-debug.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Enabling debug mode 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 30 |
31 | 32 |

33 | NOTE! If firebug is installed the debuging information will be displayed in the firebug console. 34 |

35 | 36 |

Demo

37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
97 | 98 |
99 | 100 |

Javascript

101 |
102 |

103 | 	
104 |

HTML

105 |
106 |

107 | 	
108 |
109 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-digits.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Enabling debug mode 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 27 |
28 | 29 |

Demo

30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
First NameLast NameAgeTotalDiscountDiff
PeterParker289.9920.3%+3
JohnHood3319.9925.1%-7
ClarkKent1815.8944.2%-15
BruceAlmighty45153.1944%+19
BruceEvans56153.1923%+9
87 | 88 |
89 | 90 |

Javascript

91 |
92 |

 93 | 	
94 |

HTML

95 |
96 |

 97 | 	
98 |
99 | 100 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-sort-force.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Force a default sorting order 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 22 | 23 | 29 |
30 |

Demo

31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
90 |
91 |

Javascript

92 |
93 |

 94 | 	
95 |

HTML

96 |
97 |

 98 | 	
99 |
100 | 101 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-sort-key.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Change multi-column sorting key 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 30 |
31 |

Demo

32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
91 |
92 |

Javascript

93 |
94 |

 95 | 	
96 |

HTML

97 |
98 |

 99 | 	
100 |
101 | 102 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-sort-list.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Set a initial sorting order 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 30 |
31 |

Demo

32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
91 |
92 |

Javascript

93 |
94 |

 95 | 	
96 |

HTML

97 |
98 |

 99 | 	
100 |
101 | 102 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-sort-order.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Set a initi 6 | <link rel="stylesheet" href="css/jq.css" type="text/css" media="print, projection, screen" /> 7 | <link rel="stylesheet" href="../themes/blue/style.css" type="text/css" id="" media="print, projection, screen" /> 8 | <script type="text/javascript" src="../jquery-latest.js"></script> 9 | 10 | <script type="text/javascript" src="../jquery.tablesorter.js"></script> 11 | <script type="text/javascript" src="../addons/pager/jquery.tablesorter.pager.js"></script> 12 | <script type="text/javascript" src="js/chili/chili-1.8b.js"></script> 13 | <script type="text/javascript" src="js/docs.js"></script> 14 | <script type="text/javascript" src="js/examples.js"></script> 15 | <script type="text/javascript" id="js">$(document).ready(function() { 16 | // call the tablesorter plugin 17 | $("table").tablesorter({ 18 | // change the default sorting order from 'asc' to 'desc' 19 | sortInitialOrder: 1 20 | }); 21 | }); </script> 22 | </head> 23 | <body> 24 | <div id="banner"> 25 | <h1>table<em>sorter</em></h1> 26 | <h2>Set a initial sorting order</h2> 27 | <h3>Flexible client-side table sorting</h3> 28 | <a href="index.html">Back to documentation</a> 29 | </div> 30 | <div id="main"> 31 | <h1>Demo</h1> 32 | <div id="demo"> 33 | <table cellspacing="1" class="tablesorter"> 34 | <thead> 35 | <tr> 36 | <th>First Name</th> 37 | <th>Last Name</th> 38 | <th>Age</th> 39 | <th>Total</th> 40 | <th>Discount</th> 41 | <th>Date</th> 42 | 43 | </tr> 44 | </thead> 45 | <tbody> 46 | <tr> 47 | <td>Peter</td> 48 | <td>Parker</td> 49 | <td>28</td> 50 | <td>$9.99</td> 51 | <td>20%</td> 52 | 53 | <td>Jul 6, 2006 8:14 AM</td> 54 | </tr> 55 | <tr> 56 | <td>John</td> 57 | <td>Hood</td> 58 | <td>33</td> 59 | <td>$19.99</td> 60 | <td>25%</td> 61 | 62 | <td>Dec 10, 2002 5:14 AM</td> 63 | </tr> 64 | <tr> 65 | <td>Clark</td> 66 | <td>Kent</td> 67 | <td>18</td> 68 | <td>$15.89</td> 69 | <td>44%</td> 70 | <td>Jan 12, 2003 11:14 AM</td> 71 | </tr> 72 | <tr> 73 | <td>Bruce</td> 74 | <td>Almighty</td> 75 | <td>45</td> 76 | <td>$153.19</td> 77 | <td>44%</td> 78 | 79 | <td>Jan 18, 2001 9:12 AM</td> 80 | </tr> 81 | <tr> 82 | <td>Bruce</td> 83 | <td>Evans</td> 84 | <td>22</td> 85 | <td>$13.19</td> 86 | <td>11%</td> 87 | <td>Jan 18, 2007 9:12 AM</td> 88 | </tr> 89 | </tbody> 90 | </table> 91 | </div> 92 | <h1>Javascript</h1> 93 | <div id="javascript"> 94 | <pre class="javascript"></pre> 95 | </div> 96 | <h1>HTML</h1> 97 | <div id="html"> 98 | <pre class="html"></pre> 99 | </div> 100 | </div> 101 | <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script> 102 | <script type="text/javascript"> 103 | _uacct = "UA-2189649-2"; 104 | urchinTracker(); 105 | </script> 106 | </body> 107 | </html> 108 | 109 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-option-text-extraction.html: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us"> 4 | <head> 5 | <title>jQuery plugin: Tablesorter 2.0 - Dealing with markup inside cells 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 26 | 27 | 28 | 34 |
35 |

Demo

36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
68 |
69 |

Javascript

70 |
71 |

72 | 	
73 |

HTML

74 |
75 |

76 | 	
77 |
78 | 79 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-options-headers.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Disable headers using options 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 32 | 33 | 34 | 40 |
41 |

Demo

42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
101 |
102 |

Javascript

103 |
104 |

105 | 	
106 |

HTML

107 |
108 |

109 | 	
110 |
111 | 112 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-parsers.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Writing custom parsers 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 42 | 43 | 44 | 50 |
51 |

Demo

52 |
53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 |
NameMajorGenderEnglishJapaneseCalculusOverall grades
Student01Languagesmale807075bad
Student02Mathematicsmale9088100good
Student03Languagesfemale859580medium
95 |
96 |

Javascript

97 |
98 |

 99 | 	
100 |

HTML

101 |
102 |

103 | 	
104 |
105 | 106 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/example-trigger-sort.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | jQuery plugin: Tablesorter 2.0 - Sort table using a link outside the table 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 26 | 27 | 28 | 34 |
35 |

Demo

36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 |
First NameLast NameAgeTotalDiscountDate
PeterParker28$9.9920%Jul 6, 2006 8:14 AM
JohnHood33$19.9925%Dec 10, 2002 5:14 AM
ClarkKent18$15.8944%Jan 12, 2003 11:14 AM
BruceAlmighty45$153.1944%Jan 18, 2001 9:12 AM
BruceEvans22$13.1911%Jan 18, 2007 9:12 AM
94 | Sort first and third columns 95 |
96 |
97 |
98 |

Javascript

99 |
100 |

101 | 	
102 |

HTML

103 |
104 |

105 | 	
106 |
107 | 108 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /plugins/tablesorter/docs/img/external.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/docs/img/external.png -------------------------------------------------------------------------------- /plugins/tablesorter/docs/js/chili/chili-1.8b.pack.js: -------------------------------------------------------------------------------- 1 | (function($){ChiliBook={version:"1.8b",automatic:true,automaticSelector:"code",codeLanguage:function(el){var recipeName=$(el).attr("class");return recipeName?recipeName:''},metadataSelector:"object.chili",recipeLoading:true,recipeFolder:"",stylesheetLoading:true,stylesheetFolder:"",defaultReplacement:'$$',replaceSpace:" ",replaceTab:"    ",replaceNewLine:" 
",recipes:{},queue:{},preFixCopy:document.selection&&document.selection.createRange,preContent:"",preElement:null};$.metaobjects=function(options){options=$.extend({context:document,clean:true,selector:'object.metaobject'},options);function jsValue(value){eval('value = '+value+";");return value}return $(options.selector,options.context).each(function(){var settings={target:this.parentNode};$('> param[@name=metaparam]',this).each(function(){$.extend(settings,jsValue(this.value))});$('> param',this).not('[@name=metaparam]').each(function(){var name=this.name,value=jsValue(this.value);$(settings.target).each(function(){this[name]=value})});if(options.clean){$(this).remove()}})};$.fn.chili=function(options){var book=$.extend({},ChiliBook,options||{});function cook(ingredients,recipe){function prepareStep(stepName,step){var exp=(typeof step.exp=="string")?step.exp:step.exp.source;steps.push({stepName:stepName,exp:"("+exp+")",length:1+(exp.replace(/\\./g,"%").replace(/\[.*?\]/g,"%").match(/\((?!\?)/g)||[]).length,replacement:(step.replacement)?step.replacement:book.defaultReplacement})}function knowHow(){var prevLength=0;var exps=new Array;for(var i=0;i1){return}var ingredients=el.childNodes[0]&&el.childNodes[0].data;if(!ingredients){return}ingredients=ingredients.replace(/\r\n?/g,"\n");var dish=cook(ingredients,recipe);if(book.replaceTab){dish=dish.replace(/\t/g,book.replaceTab)}if(book.replaceNewLine){dish=dish.replace(/\n/g,book.replaceNewLine)}$(el).html(dish);if(ChiliBook.preFixCopy){$(el).parents().filter("pre").bind("mousedown",function(){ChiliBook.preElement=this}).bind("mouseup",function(){if(ChiliBook.preElement==this){ChiliBook.preContent=document.selection.createRange().htmlText}})}}function getPath(recipeName,options){var settingsDef={recipeFolder:book.recipeFolder,recipeFile:recipeName+".js",stylesheetFolder:book.stylesheetFolder,stylesheetFile:recipeName+".css"};var settings;if(options&&typeof options=="object"){settings=$.extend(settingsDef,options)}else{settings=settingsDef}return{recipe:settings.recipeFolder+settings.recipeFile,stylesheet:settings.stylesheetFolder+settings.stylesheetFile}}if(book.metadataSelector){$.metaobjects({context:this,selector:book.metadataSelector})}$(this).each(function(){var el=this;var recipeName=book.codeLanguage(el);if(''!=recipeName){var path=getPath(recipeName,el.chili);if(book.recipeLoading||el.chili){if(!book.queue[path.recipe]){try{book.queue[path.recipe]=[el];$.getJSON(path.recipe,function(recipeLoaded){recipeLoaded.path=path.recipe;book.recipes[path.recipe]=recipeLoaded;if(book.stylesheetLoading){checkCSS(path.stylesheet)}var q=book.queue[path.recipe];for(var i=0,iTop=q.length;i-1);text=text.replace(/\]*?\>/ig,newline_flag);var el=document.createElement('
');el.innerHTML=text;text=el.innerText.replace(new RegExp(newline_flag,"g"),'\r\n');return text}$("body").bind("copy",function(){if(''!=ChiliBook.preContent){window.clipboardData.setData('Text',preformatted(ChiliBook.preContent));event.returnValue=false}}).bind("mousedown",function(){ChiliBook.preContent=""}).bind("mouseup",function(){ChiliBook.preElement=null})}})})(jQuery);


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/cplusplus.css:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | .cplusplus .mlcom    { color: #4040c2; }
13 | .cplusplus .com      { color: green; }
14 | .cplusplus .string   { color: teal; }
15 | .cplusplus .keyword  { color: navy; font-weight: bold; }
16 | .cplusplus .datatype { color: blue; }
17 | .cplusplus .preproc  { color: red; }
18 | .cplusplus .number   { color: red; }
19 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/cplusplus.js:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | {
13 | 	steps: {
14 | 		  mlcom   : { exp: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\// }
15 | 		, com     : { exp: /\/\/.*/ }
16 | 		, preproc : { exp: /[\^\n]\s*#\w+/ }
17 | 		, string  : { exp: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/ }
18 | 		, number  : { exp: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/ }
19 | 		, datatype: { exp: /\b(?:ATOM|BOOL|BOOLEAN|BYTE|CHAR|COLORREF|DWORD|DWORD32|DWORD64|DWORDLONG|DWORD_PTR|FILE|FLOAT|HACCEL|HALF_PTR|HANDLE|HBITMAP|HBRUSH|HCOLORSPACE|HCONV|HCONVLIST|HCURSOR|HDC|HDDEDATA|HDESK|HDROP|HDWP|HENHMETAFILE|HFILE|HFONT|HGDIOBJ|HGLOBAL|HHOOK|HICON|HINSTANCE|HKEY|HKL|HLOCAL|HMENU|HMETAFILE|HMODULE|HMONITOR|HPALETTE|HPEN|HRESULT|HRGN|HRSRC|HSZ|HWINSTA|HWND|INT|INT32|INT64|INT_PTR|LANGID|LCID|LCTYPE|LGRPID|LONG|LONG32|LONG64|LONGLONG|LONG_PTR|LPARAM|LPBOOL|LPBYTE|LPCOLORREF|LPCSTR|LPCTSTR|LPCVOID|LPCWSTR|LPDWORD|LPHANDLE|LPINT|LPLONG|LPSTR|LPTSTR|LPVOID|LPWORD|LPWSTR|LRESULT|PBOOL|PBOOLEAN|PBYTE|PCHAR|PCSTR|PCTSTR|PCWSTR|PDWORD32|PDWORD64|PDWORDLONG|PDWORD_PTR|PFLOAT|PHALF_PTR|PHANDLE|PHKEY|PINT|PINT32|PINT64|PINT_PTR|PLCID|PLONG|PLONG32|PLONG64|PLONGLONG|PLONG_PTR|POINTER_32|POINTER_64|PSHORT|PSIZE_T|PSSIZE_T|PSTR|PTBYTE|PTCHAR|PTSTR|PUCHAR|PUHALF_PTR|PUINT|PUINT32|PUINT64|PUINT_PTR|PULONG|PULONG32|PULONG64|PULONGLONG|PULONG_PTR|PUSHORT|PVOID|PWCHAR|PWORD|PWSTR|SC_HANDLE|SC_LOCK|SERVICE_STATUS_HANDLE|SHORT|SIZE_T|SSIZE_T|TBYTE|TCHAR|UCHAR|UHALF_PTR|UINT|UINT32|UINT64|UINT_PTR|ULONG|ULONG32|ULONG64|ULONGLONG|ULONG_PTR|USHORT|USN|VOID|WCHAR|WORD|WPARAM|_EXCEPTION_POINTERS|_FPIEEE_RECORD|_HEAPINFO|_HFILE|_PNH|__finddata64_t|__int16|__int32|__int64|__int8|__stat64|__time64_t|__timeb64|__wchar_t|__wfinddata64_t|_complex|_dev_t|_diskfree_t|_exception|_finddata_t|_finddatai64_t|_off_t|_onexit_t|_purecall_handler|_stat|_stati64|_timeb|_utimbuf|_wfinddata_t|_wfinddatai64_t|bool|char|clock_t|div_t|double|float|fpos_t|int|intptr_t|jmp_buf|lconv|ldiv_t|long|mbstate_t|ptrdiff_t|short|sig_atomic_t|signed|size_t|terminate_function|time_t|tm|uintptr_t|va_list|wchar_t|wctrans_t|wctype_t|wint_t)\b/ }
20 | 		, keyword : { exp: /\b(?:__declspec|__exception|__finally|__try|break|case|catch|class|const|const_cast|continue|default|delete|deprecated|dllexport|dllimport|do|dynamic_cast|else|enum|explicit|extern|false|for|friend|goto|if|inline|mutable|naked|namespace|new|noinline|noreturn|nothrow|private|protected|public|register|reinterpret_cast|return|selectany|sizeof|static|static_cast|struct|switch|template|this|thread|throw|true|try|typedef|typeid|typename|union|using|uuid|virtual|void|volatile|whcar_t|while)\b/ }
21 | 	}
22 | }
23 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/csharp.css:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | .csharp .mlcom    { color: #4040c2; }
13 | .csharp .com      { color: green; }
14 | .csharp .string   { color: teal; }
15 | .csharp .keyword  { color: navy; font-weight: bold; }
16 | .csharp .preproc  { color: red; }
17 | .csharp .number   { color: red; }
18 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/csharp.js:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | {
13 | 	steps: {
14 | 		  mlcom  : { exp: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\// }
15 | 		, com    : { exp: /\/\/.*/ }
16 | 		, string : { exp: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/ }
17 | 		, preproc: { exp: /^\s*#.*/ }
18 | 		, number : { exp: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/ }
19 | 		, keyword: { exp: /\b(?:abstract|as|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|get|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|set|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|while)\b/ }
20 | 	}
21 | }
22 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/css.css:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | .css .mlcom  { color: #4040c2; }
13 | .css .color  { color: green; }
14 | .css .string { color: teal; }
15 | .css .attrib { color: navy; font-weight: bold; }
16 | .css .value  { color: blue; }
17 | .css .number { color: red; }
18 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/css.js:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | {
13 | 	steps: {
14 | 		  mlcom : { exp: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\// }
15 | 		, string: { exp: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/ }
16 | 		, number: { exp: /(?:\b[+-]?(?:\d*\.?\d+|\d+\.?\d*))(?:%|(?:(?:px|pt|em|)\b))/ }
17 | 		, attrib: { exp: /\b(?:z-index|x-height|word-spacing|widths|width|widows|white-space|volume|voice-family|visibility|vertical-align|units-per-em|unicode-range|unicode-bidi|text-transform|text-shadow|text-indent|text-decoration|text-align|table-layout|stress|stemv|stemh|src|speech-rate|speak-punctuation|speak-numeral|speak-header|speak|slope|size|right|richness|quotes|position|play-during|pitch-range|pitch|pause-before|pause-after|pause|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|overflow|outline-width|outline-style|outline-color|outline|orphans|min-width|min-height|max-width|max-height|mathline|marks|marker-offset|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|height|font-weight|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-family|font|float|empty-cells|elevation|display|direction|descent|definition-src|cursor|cue-before|cue-after|cue|counter-reset|counter-increment|content|color|clip|clear|centerline|caption-side|cap-height|bottom|border-width|border-top-width|border-top-style|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-left-width|border-left-style|border-left-color|border-left|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-color|border-bottom|border|bbox|baseline|background-repeat|background-position|background-image|background-color|background-attachment|background|azimuth|ascent)\b/ }
18 | 		, value : { exp: /\b(?:xx-small|xx-large|x-soft|x-small|x-slow|x-low|x-loud|x-large|x-high|x-fast|wider|wait|w-resize|visible|url|uppercase|upper-roman|upper-latin|upper-alpha|underline|ultra-expanded|ultra-condensed|tv|tty|transparent|top|thin|thick|text-top|text-bottom|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table-caption|sw-resize|super|sub|status-bar|static|square|spell-out|speech|solid|soft|smaller|small-caption|small-caps|small|slower|slow|silent|show|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|s-resize|run-in|rtl|rightwards|right-side|right|ridge|rgb|repeat-y|repeat-x|repeat|relative|projection|print|pre|portrait|pointer|overline|outside|outset|open-quote|once|oblique|nw-resize|nowrap|normal|none|no-repeat|no-open-quote|no-close-quote|ne-resize|narrower|n-resize|move|mix|middle|message-box|medium|marker|ltr|lowercase|lower-roman|lower-latin|lower-greek|lower-alpha|lower|low|loud|local|list-item|line-through|lighter|level|leftwards|left-side|left|larger|large|landscape|justify|italic|invert|inside|inset|inline-table|inline|icon|higher|high|hide|hidden|help|hebrew|handheld|groove|format|fixed|faster|fast|far-right|far-left|fantasy|extra-expanded|extra-condensed|expanded|embossed|embed|e-resize|double|dotted|disc|digits|default|decimal-leading-zero|decimal|dashed|cursive|crosshair|cross|crop|counters|counter|continuous|condensed|compact|collapse|code|close-quote|circle|center-right|center-left|center|caption|capitalize|braille|bottom|both|bolder|bold|block|blink|bidi-override|below|behind|baseline|avoid|auto|aural|attr|armenian|always|all|absolute|above)\b/ }
19 | 		, color : { exp: /(?:\#[a-zA-Z0-9]{3,6})|(?:yellow|white|teal|silver|red|purple|olive|navy|maroon|lime|green|gray|fuchsia|blue|black|aqua)/ }
20 | 	}
21 | }
22 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/delphi.css:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | .delphi .mlcom   { color: #4040c2; }
13 | .delphi .com     { color: green; }
14 | .delphi .string  { color: teal; }
15 | .delphi .keyword { color: navy; font-weight: bold; }
16 | .delphi .direct  { color: red; }
17 | .delphi .number  { color: red; }
18 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/delphi.js:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | {
13 | 	steps: {
14 | 		  mlcom  : { exp: /(?:\(\*[\s\S]*?\*\))|(?:{(?!\$)[\s\S]*?})/ }
15 | 		, com    : { exp: /\/\/.*/ }
16 | 		, string : { exp: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')/ }
17 | 		, number : { exp: /(?:\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b)|(?:\$[a-zA-Z0-9]+\b)/ }
18 | 		, direct : { exp: /\{\$[a-zA-Z]+ .+\}/ }
19 | 		, keyword: { exp: /\b(?:abs|addr|and|ansichar|ansistring|array|as|asm|begin|boolean|byte|cardinal|case|char|class|comp|const|constructor|currency|destructor|div|do|double|downto|else|end|except|exports|extended|false|file|finalization|finally|for|function|goto|if|implementation|in|inherited|initialization|int64|integer|interface|is|label|library|longint|longword|mod|nil|not|object|of|on|or|packed|pansichar|pansistring|pchar|pcurrency|pdatetime|pextended|pint64|pointer|private|procedure|program|property|protected|pshortstring|pstring|public|published|pvariant|pwidechar|pwidestring|raise|real|real48|record|repeat|set|shl|shortint|shortstring|shr|single|smallint|string|then|threadvar|to|true|try|type|unit|until|uses|val|var|varirnt|while|widechar|widestring|with|word|write|writeln|xor)\b/ }
20 | 	}
21 | }
22 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/html.css:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | .html .php    { color: red; font-weight: bold; }
13 | .html .tag    { color: navy; font-weight: bold; }
14 | .html .aname  { color: purple; }
15 | .html .avalue { color: fuchsia; }
16 | .html .mlcom  { color: green; }
17 | .html .entity { color: teal; }
18 | 


--------------------------------------------------------------------------------
/plugins/tablesorter/docs/js/chili/html.js:
--------------------------------------------------------------------------------
 1 | /*
 2 | ===============================================================================
 3 | Chili is the jQuery code highlighter plugin
 4 | ...............................................................................
 5 |                                                Copyright 2007 / Andrea Ercolino
 6 | -------------------------------------------------------------------------------
 7 | LICENSE: http://www.opensource.org/licenses/mit-license.php
 8 | WEBSITE: http://noteslog.com/chili/
 9 | ===============================================================================
10 | */
11 | 
12 | {
13 |     steps: {
14 |           mlcom : { exp: /\/g,'-->\n');
23 | 				
24 | 		$("#html pre").text(html);
25 | 	}
26 | 	$("pre.javascript").chili();
27 | 	$("pre.html").chili();
28 | 	$("pre.css").chili();
29 | });


--------------------------------------------------------------------------------
/plugins/tablesorter/jquery.metadata.js:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Metadata - jQuery plugin for parsing metadata from elements
  3 |  *
  4 |  * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
  5 |  *
  6 |  * Dual licensed under the MIT and GPL licenses:
  7 |  *   http://www.opensource.org/licenses/mit-license.php
  8 |  *   http://www.gnu.org/licenses/gpl.html
  9 |  *
 10 |  * Revision: $Id$
 11 |  *
 12 |  */
 13 | 
 14 | /**
 15 |  * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
 16 |  * in the JSON will become a property of the element itself.
 17 |  *
 18 |  * There are three supported types of metadata storage:
 19 |  *
 20 |  *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
 21 |  *          
 22 |  *   class: Inside the class attribute, wrapped in curly braces: { }
 23 |  *   
 24 |  *   elem:  Inside a child element (e.g. a script tag). The
 25 |  *          name parameter indicates *which* element.
 26 |  *          
 27 |  * The metadata for an element is loaded the first time the element is accessed via jQuery.
 28 |  *
 29 |  * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
 30 |  * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
 31 |  * 
 32 |  * @name $.metadata.setType
 33 |  *
 34 |  * @example 

This is a p

35 | * @before $.metadata.setType("class") 36 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 37 | * @desc Reads metadata from the class attribute 38 | * 39 | * @example

This is a p

40 | * @before $.metadata.setType("attr", "data") 41 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 42 | * @desc Reads metadata from a "data" attribute 43 | * 44 | * @example

This is a p

45 | * @before $.metadata.setType("elem", "script") 46 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 47 | * @desc Reads metadata from a nested script element 48 | * 49 | * @param String type The encoding type 50 | * @param String name The name of the attribute to be used to get metadata (optional) 51 | * @cat Plugins/Metadata 52 | * @descr Sets the type of encoding to be used when loading metadata for the first time 53 | * @type undefined 54 | * @see metadata() 55 | */ 56 | 57 | (function($) { 58 | 59 | $.extend({ 60 | metadata : { 61 | defaults : { 62 | type: 'class', 63 | name: 'metadata', 64 | cre: /({.*})/, 65 | single: 'metadata' 66 | }, 67 | setType: function( type, name ){ 68 | this.defaults.type = type; 69 | this.defaults.name = name; 70 | }, 71 | get: function( elem, opts ){ 72 | var settings = $.extend({},this.defaults,opts); 73 | // check for empty string in single property 74 | if ( !settings.single.length ) settings.single = 'metadata'; 75 | 76 | var data = $.data(elem, settings.single); 77 | // returned cached data if it already exists 78 | if ( data ) return data; 79 | 80 | data = "{}"; 81 | 82 | if ( settings.type == "class" ) { 83 | var m = settings.cre.exec( elem.className ); 84 | if ( m ) 85 | data = m[1]; 86 | } else if ( settings.type == "elem" ) { 87 | if( !elem.getElementsByTagName ) 88 | return undefined; 89 | var e = elem.getElementsByTagName(settings.name); 90 | if ( e.length ) 91 | data = $.trim(e[0].innerHTML); 92 | } else if ( elem.getAttribute != undefined ) { 93 | var attr = elem.getAttribute( settings.name ); 94 | if ( attr ) 95 | data = attr; 96 | } 97 | 98 | if ( data.indexOf( '{' ) <0 ) 99 | data = "{" + data + "}"; 100 | 101 | data = eval("(" + data + ")"); 102 | 103 | $.data( elem, settings.single, data ); 104 | return data; 105 | } 106 | } 107 | }); 108 | 109 | /** 110 | * Returns the metadata object for the first member of the jQuery object. 111 | * 112 | * @name metadata 113 | * @descr Returns element's metadata object 114 | * @param Object opts An object contianing settings to override the defaults 115 | * @type jQuery 116 | * @cat Plugins/Metadata 117 | */ 118 | $.fn.metadata = function( opts ){ 119 | return $.metadata.get( this[0], opts ); 120 | }; 121 | 122 | })(jQuery); -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/ajax-content.html: -------------------------------------------------------------------------------- 1 | 2 | Student04 3 | Languages 4 | male 5 | 80 6 | 70 7 | 75 8 | 80 9 | 10 | 11 | Student05 12 | Mathematics 13 | male 14 | 90 15 | 88 16 | 100 17 | 90 18 | 19 | 20 | 21 | Student06 22 | Languages 23 | female 24 | 85 25 | 95 26 | 80 27 | 85 28 | 29 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/css/default.css: -------------------------------------------------------------------------------- 1 | * { 2 | font-family: Arial, Helvetica, sans-serif; 3 | } 4 | pre { 5 | font-family: "Courier New", Courier, monospace; 6 | 7 | font-size: 14px; 8 | width: 100%; 9 | } 10 | h1 { 11 | 12 | font-size: 20px; 13 | color: #4D4D4D; 14 | } 15 | h3 { 16 | font-size: 16px; 17 | 18 | color: #3D3D3D; 19 | } 20 | th { 21 | text-align: left; 22 | padding: 5px; 23 | background-color: #6E6E6E; 24 | } 25 | td { 26 | color: #FFF; 27 | padding: 5px; 28 | } 29 | table { 30 | font-size: 12px; 31 | background-color: #4D4D4D; 32 | width: 1024px; 33 | border: 1px solid #000; 34 | } 35 | .even { 36 | background-color: #3D3D3D; 37 | } 38 | .odd { 39 | background-color: #6E6E6E; 40 | } 41 | .highlight { 42 | background-color: #3D3D3D; 43 | font-weight: bold; 44 | } 45 | .header { 46 | background-image: url(../img/header-bg.png); 47 | background-repeat: no-repeat; 48 | border-left: 1px solid #FFF; 49 | border-right: 1px solid #000; 50 | border-top: 1px solid #FFF; 51 | padding-left: 30px; 52 | padding-top: 8px; 53 | height: auto; 54 | } 55 | .headerSortUp { 56 | background-image: url(../img/header-asc.png); 57 | background-repeat: no-repeat; 58 | border-left: 1px solid #FFF; 59 | border-right: 1px solid #000; 60 | border-top: 1px solid #FFF; 61 | padding-left: 30px; 62 | padding-top: 8px; 63 | height: auto; 64 | } 65 | .headerSortDown { 66 | background-image: url(../img/header-desc.png); 67 | background-repeat: no-repeat; 68 | border-left: 1px solid #FFF; 69 | border-right: 1px solid #000; 70 | border-top: 1px solid #FFF; 71 | padding-left: 30px; 72 | padding-top: 8px; 73 | height: auto; 74 | } -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/css/jquery.tabs-ie.css: -------------------------------------------------------------------------------- 1 | /* 2 | Tabs - additional IE specific bug fixes 3 | 4 | Recommended usage (Conditional Comments): 5 | 8 | 9 | */ 10 | .tabs-nav { /* auto clear */ 11 | display: inline-block; 12 | } 13 | .tabs-nav .tabs-disabled { 14 | position: relative; /* fixes opacity */ 15 | filter: alpha(opacity=40); 16 | } 17 | .tabs-nav .tabs-disabled a span { 18 | _height: 19px; /* for some reason the height is 1px to less with opacity... */ 19 | min-height: 19px; /* ...in both IE 6 and 7 */ 20 | } 21 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/css/jquery.tabs.css: -------------------------------------------------------------------------------- 1 | /* Caution! Ensure accessibility in print and other media types... */ 2 | @media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */ 3 | .tabs-hide { 4 | display: none; 5 | } 6 | } 7 | 8 | /* Hide useless elements in print layouts... */ 9 | @media print { 10 | .tabs-nav { 11 | display: none; 12 | } 13 | } 14 | 15 | /* Skin */ 16 | .tabs-nav { 17 | list-style: none; 18 | margin: 0; 19 | padding: 0 0 0 4px; 20 | } 21 | .tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */ 22 | display: block; 23 | clear: both; 24 | content: " "; 25 | } 26 | .tabs-nav li { 27 | float: left; 28 | margin: 0 0 0 1px; 29 | min-width: 84px; /* be nice to Opera */ 30 | } 31 | .tabs-nav a, .tabs-nav a span { 32 | display: block; 33 | padding: 0 10px; 34 | background: url(../img/tab.png) no-repeat; 35 | } 36 | .tabs-nav a { 37 | position: relative; 38 | top: 1px; 39 | z-index: 2; 40 | padding-left: 0; 41 | color: #27537a; 42 | font-size: 12px; 43 | font-weight: bold; 44 | line-height: 1.2; 45 | text-align: center; 46 | text-decoration: none; 47 | white-space: nowrap; /* required in IE 6 */ 48 | } 49 | .tabs-nav .tabs-selected a { 50 | color: #000; 51 | } 52 | .tabs-nav .tabs-selected a, .tabs-nav a:hover, .tabs-nav a:focus, .tabs-nav a:active { 53 | background-position: 100% -150px; 54 | outline: 0; /* prevent dotted border in Firefox */ 55 | } 56 | .tabs-nav a, .tabs-nav .tabs-disabled a:hover, .tabs-nav .tabs-disabled a:focus, .tabs-nav .tabs-disabled a:active { 57 | background-position: 100% -100px; 58 | } 59 | .tabs-nav a span { 60 | width: 64px; /* IE 6 treats width as min-width */ 61 | min-width: 64px; 62 | height: 18px; /* IE 6 treats height as min-height */ 63 | min-height: 18px; 64 | padding-top: 6px; 65 | padding-right: 0; 66 | } 67 | *>.tabs-nav a span { /* hide from IE 6 */ 68 | width: auto; 69 | height: auto; 70 | } 71 | .tabs-nav .tabs-selected a span { 72 | padding-top: 7px; 73 | } 74 | .tabs-nav .tabs-selected a span, .tabs-nav a:hover span, .tabs-nav a:focus span, .tabs-nav a:active span { 75 | background-position: 0 -50px; 76 | } 77 | .tabs-nav a span, .tabs-nav .tabs-disabled a:hover span, .tabs-nav .tabs-disabled a:focus span, .tabs-nav .tabs-disabled a:active span { 78 | background-position: 0 0; 79 | } 80 | .tabs-nav .tabs-selected a:link, .tabs-nav .tabs-selected a:visited, .tabs-nav .tabs-disabled a:link, .tabs-nav .tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */ 81 | cursor: text; 82 | } 83 | .tabs-nav a:hover, .tabs-nav a:focus, .tabs-nav a:active { /* @ Opera, we need to be explicit again here now... */ 84 | cursor: pointer; 85 | } 86 | .tabs-nav .tabs-disabled { 87 | opacity: .4; 88 | } 89 | .tabs-container { 90 | border-top: 1px solid #97a5b0; 91 | padding: 1em 8px; 92 | background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */ 93 | } 94 | .tabs-loading em { 95 | padding: 0 0 0 20px; 96 | background: url(loading.gif) no-repeat 0 50%; 97 | } 98 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/header-asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/header-asc.png -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/header-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/header-bg.png -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/header-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/header-desc.png -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/small.gif -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/small_asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/small_asc.gif -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/small_desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/small_desc.gif -------------------------------------------------------------------------------- /plugins/tablesorter/tests/assets/img/tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/tests/assets/img/tab.png -------------------------------------------------------------------------------- /plugins/tablesorter/tests/cell.metadata.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | tablesorter 2.0-dev demo, multi column sorting 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 |

tablesorter 2.0-dev demo, multi column sorting

24 |

25 | To select more then one column to sort by, hold down your shift key and press the "headers". 26 | Pressing a all ready sorted column while holding down shift will reverse the order. 27 |

28 |

29 | Releasing the shift key and pressing a column will result in a one column sort. 30 |

31 | 32 |

Not big enough? Add 500 random rows of data (can be clicked many times, more then a 1000 rows can be slow)

33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 |
NameMajorSexEnglishJapaneseCalculusGeometryGeometry
NameMajorSexEnglishJapaneseCalculusGeometryGeometry
Student01Languagesmale80707580
Student02Mathematicsmale908810090
Student03Languagesfemale85958085
Student04Languagesmale6055100100
110 | 112 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/checkbox.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | tablesorter 2.0-dev demo, multi column sorting 7 | 8 | 9 | 10 | 11 | 12 | 46 | 47 | 48 | 49 | 50 | fill up 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |
NameMajorSexEnglishJapaneseCalculusGeometry
NameMajorSexEnglishJapaneseCalculusGeometry
82 | 83 | 84 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/colspan.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Untitled Document 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
General informationDegree informationName
MajorGenderEnglishJapaneseCalculusGeometry
Student01Languagesmale80707580%
Student02Mathematicsmale908810090%
Student03Languagesfemale85958085%
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 |
something Group of information 1 Group of information 2
Col 1 Col 2 Col 3 Col 4 Col 5
Student01Languagesmale8070
Student02Mathematicsmale9088
Student03Languagesfemale8595
109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 |
Col 1 Col 2 Col 3 Col 4 Col 5
Student01Languagesmale8070
Student02Mathematicsmale9088
Student03Languagesfemale8595
147 | 148 | 149 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/demo.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | tablesorter 2.0-dev demo, multi column sorting 7 | 8 | 9 | 10 | 11 | 12 | 60 | 61 | 62 | 63 |

tablesorter 2.0-dev demo, multi column sorting

64 |

65 | To select more then one column to sort by, hold down your shift key and press the "headers". 66 | Pressing a all ready sorted column while holding down shift will reverse the order. 67 |

68 |

69 | Releasing the shift key and pressing a column will result in a one column sort. 70 |

71 | 72 |

Not big enough? Add 500 random rows of data (can be clicked many times, more then a 1000 rows can be slow)

73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 |
One and TwoThreeThreeThreeThreeThree
NameMajor
NameMajorSexEnglishJapaneseCalculusGeometry
Student01Languagesmale80707580
Student02Mathematicsmale908810090
Student03Languagesfemale85958085
Student04Languagesmale6055100100
Student05Languagesfemale68809580
Student06Mathematicsmale1009910090
Student07Mathematicsmale85689090
Student08Languagesmale100909085
Student09Mathematicsmale80506575
Student10Languagesmale8510010090
Student11Languagesmale8685100100
Student12Mathematicsfemale100757085
Student13Languagesfemale1008010090
Student14Languagesfemale50455590
Student15Languagesmale953510090
Student16Languagesfemale100503070
Student17Languagesfemale801005565
Student18Mathematicsmale30495575
Student19Languagesmale68908870
Student20Mathematicsmale40454080
Student21Languagesmale5045100100
Student22Mathematicsmale1009910090
Student23Languagesfemale85808080
345 | 347 | 351 | 352 | 353 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Love Peace and Nukes 8 | 9 | 10 | 11 | 12 | 13 | 15 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/large.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | tablesorter: 296 rows 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /plugins/tablesorter/tests/metadata.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | tablesorter 2.0-dev demo, multi column sorting 7 | 8 | 9 | 10 | 11 | 12 | 13 | 31 | 32 | 33 | 34 |

tablesorter 2.0-dev demo, multi column sorting

35 |

36 | To select more then one column to sort by, hold down your shift key and press the "headers". 37 | Pressing a all ready sorted column while holding down shift will reverse the order. 38 |

39 |

40 | Releasing the shift key and pressing a column will result in a one column sort. 41 |

42 | 43 |

Not big enough? Add 500 random rows of data (can be clicked many times, more then a 1000 rows can be slow)

44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 |
NameMajorSexEnglishJapaneseCalculusGeometry
NameMajorSexEnglishJapaneseCalculusGeometry
Student01Languagesmale80707580
Student02Mathematicsmale908810090
Student03Languagesfemale85958085
Student04Languagesmale6055100100
Student05Languagesfemale68809580
Student06Mathematicsmale1009910090
Student07Mathematicsmale85689090
Student08Languagesmale100909085
Student09Mathematicsmale80506575
Student10Languagesmale8510010090
Student11Languagesmale8685100100
Student12Mathematicsfemale100757085
Student13Languagesfemale1008010090
Student14Languagesfemale50455590
Student15Languagesmale953510090
Student16Languagesfemale100503070
Student17Languagesfemale801005565
Student18Mathematicsmale30495575
Student19Languagesmale68908870
Student20Mathematicsmale40454080
Student21Languagesmale5045100100
Student22Mathematicsmale1009910090
Student23Languagesfemale85808080
313 | 315 | 319 | 320 | 321 | -------------------------------------------------------------------------------- /plugins/tablesorter/themes/blue/asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/blue/asc.gif -------------------------------------------------------------------------------- /plugins/tablesorter/themes/blue/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/blue/bg.gif -------------------------------------------------------------------------------- /plugins/tablesorter/themes/blue/blue.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/blue/blue.zip -------------------------------------------------------------------------------- /plugins/tablesorter/themes/blue/desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/blue/desc.gif -------------------------------------------------------------------------------- /plugins/tablesorter/themes/blue/style.css: -------------------------------------------------------------------------------- 1 | /* tables */ 2 | table.tablesorter { 3 | font-family:arial; 4 | background-color: #CDCDCD; 5 | margin:10px 0pt 15px; 6 | font-size: 8pt; 7 | width: 100%; 8 | text-align: left; 9 | } 10 | table.tablesorter thead tr th, table.tablesorter tfoot tr th { 11 | background-color: #e6EEEE; 12 | border: 1px solid #FFF; 13 | font-size: 8pt; 14 | padding: 4px; 15 | } 16 | table.tablesorter thead tr .header { 17 | background-image: url(bg.gif); 18 | background-repeat: no-repeat; 19 | background-position: center right; 20 | cursor: pointer; 21 | } 22 | table.tablesorter tbody td { 23 | color: #3D3D3D; 24 | padding: 4px; 25 | background-color: #FFF; 26 | vertical-align: top; 27 | } 28 | table.tablesorter tbody tr.odd td { 29 | background-color:#F0F0F6; 30 | } 31 | table.tablesorter thead tr .headerSortUp { 32 | background-image: url(asc.gif); 33 | } 34 | table.tablesorter thead tr .headerSortDown { 35 | background-image: url(desc.gif); 36 | } 37 | table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { 38 | background-color: #8dbdd8; 39 | } 40 | -------------------------------------------------------------------------------- /plugins/tablesorter/themes/green/asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/green/asc.png -------------------------------------------------------------------------------- /plugins/tablesorter/themes/green/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/green/bg.png -------------------------------------------------------------------------------- /plugins/tablesorter/themes/green/desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/green/desc.png -------------------------------------------------------------------------------- /plugins/tablesorter/themes/green/green.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leefish/filethingie/4355186d2040bf74f956d2450a7871b1a10cc3ae/plugins/tablesorter/themes/green/green.zip -------------------------------------------------------------------------------- /plugins/tablesorter/themes/green/style.css: -------------------------------------------------------------------------------- 1 | table.tablesorter { 2 | font-size: 12px; 3 | background-color: #4D4D4D; 4 | width: 1024px; 5 | border: 1px solid #000; 6 | } 7 | table.tablesorter th { 8 | text-align: left; 9 | padding: 5px; 10 | background-color: #6E6E6E; 11 | } 12 | table.tablesorter td { 13 | color: #FFF; 14 | padding: 5px; 15 | } 16 | table.tablesorter .even { 17 | background-color: #3D3D3D; 18 | } 19 | table.tablesorter .odd { 20 | background-color: #6E6E6E; 21 | } 22 | table.tablesorter .header { 23 | background-image: url(bg.png); 24 | background-repeat: no-repeat; 25 | border-left: 1px solid #FFF; 26 | border-right: 1px solid #000; 27 | border-top: 1px solid #FFF; 28 | padding-left: 30px; 29 | padding-top: 8px; 30 | height: auto; 31 | } 32 | table.tablesorter .headerSortUp { 33 | background-image: url(asc.png); 34 | background-repeat: no-repeat; 35 | } 36 | table.tablesorter .headerSortDown { 37 | background-image: url(desc.png); 38 | background-repeat: no-repeat; 39 | } -------------------------------------------------------------------------------- /plugins/tinymce.plugin.php: -------------------------------------------------------------------------------- 1 | 'TinyMCE: Edit files using the TinyMCE editor.', 16 | 'settings' => array( 17 | 'list' => array( 18 | 'default' => 'html htm', 19 | 'description' => t('List of file extensions to edit using tinymce.'), 20 | ), 21 | 'path' => array( 22 | 'default' => 'tinymce/jscripts/tiny_mce/tiny_mce.js', 23 | 'description' => t('Path to tiny_mce.js'), 24 | ), 25 | ), 26 | ); 27 | } 28 | 29 | /** 30 | * Implementation of hook_add_js_file. 31 | */ 32 | function ft_tinymce_add_js_file() { 33 | global $ft; 34 | $return = array(); 35 | // Only add JS when we are on an edit page. 36 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['tinymce']['settings']['path'])) { 37 | $return[] = $ft['plugins']['tinymce']['settings']['path']; 38 | } 39 | return $return; 40 | } 41 | 42 | /** 43 | * Implementation of hook_add_js_call. 44 | */ 45 | function ft_tinymce_add_js_call() { 46 | global $ft; 47 | $return = ''; 48 | // Only add JS when we're on an edit page. 49 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit' && file_exists($ft['plugins']['tinymce']['settings']['path'])) { 50 | $list = explode(" ", $ft['plugins']['tinymce']['settings']['list']); 51 | if (in_array(ft_get_ext(strtolower($_REQUEST['file'])), $list)) { 52 | // Unbind save action and rebind with a tinymce specific version. 53 | $return .= '$("#save").unbind();$("#save").click(function(){ 54 | $("#savestatus").empty().append("

'.t('Saving file…').'

"); 55 | // Get file content from tinymce. 56 | filecontent = tinyMCE.activeEditor.getContent(); 57 | $.post("'.ft_get_self().'", {method:\'ajax\', act:\'saveedit\', file: $(\'#file\').val(), dir: $(\'#dir\').val(), filecontent: filecontent, convertspaces: $(\'#convertspaces\').val()}, function(data){ 58 | $("#savestatus").empty().append(data); 59 | }); 60 | });'; 61 | } 62 | } 63 | return $return; 64 | } 65 | 66 | /** 67 | * Implementation of hook_add_js_call_footer. 68 | */ 69 | function ft_tinymce_add_js_call_footer() { 70 | global $ft; 71 | $return = ''; 72 | // Only add JS when we're on an edit page. 73 | if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'edit') { 74 | if (file_exists($ft['plugins']['tinymce']['settings']['path'])) { 75 | $list = explode(" ", $ft['plugins']['tinymce']['settings']['list']); 76 | if (in_array(ft_get_ext(strtolower($_REQUEST['file'])), $list)) { 77 | $return = 'tinyMCE.init({ 78 | mode : "exact", 79 | elements : "filecontent", 80 | theme : "advanced", 81 | theme_advanced_toolbar_location : "top", 82 | theme_advanced_toolbar_align : "left" 83 | });'; 84 | } else { 85 | $return = '// File not in TinyMCE edit list.'; 86 | } 87 | } else { 88 | $return = '// TinyMCE file not found: ' . $ft['plugins']['tinymce']['settings']['path']; 89 | } 90 | } 91 | return $return; 92 | } 93 | 94 | --------------------------------------------------------------------------------