├── LICENSE.txt ├── README.md ├── TODO ├── background.html ├── icon_128.png ├── icon_16.png ├── icon_48.png ├── images ├── back-header.png ├── favicon.ico └── logo-mongoDB.png ├── js ├── app.js ├── datatables-1.7.5 │ ├── css │ │ └── hosts_table.css │ ├── images │ │ ├── back_disabled.jpg │ │ ├── back_enabled.jpg │ │ ├── forward_disabled.jpg │ │ ├── forward_enabled.jpg │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ └── sort_desc_disabled.png │ └── js │ │ └── jquery.dataTables.min.js ├── jquery-1.4.4.min.js ├── jquery-ui-1.8.8.custom.min.js ├── jquery.base64-1.0.min.js └── smoothie.js ├── main.html ├── manifest.json ├── options.html ├── screenshot.png ├── test └── dance.js └── themes ├── dark.css └── pepper-grinder ├── images ├── ui-bg_diagonal-maze_20_6e4f1c_10x10.png ├── ui-bg_diagonal-maze_40_000000_10x10.png ├── ui-bg_fine-grain_10_eceadf_60x60.png ├── ui-bg_fine-grain_10_f8f7f6_60x60.png ├── ui-bg_fine-grain_15_eceadf_60x60.png ├── ui-bg_fine-grain_15_f7f3de_60x60.png ├── ui-bg_fine-grain_15_ffffff_60x60.png ├── ui-bg_fine-grain_65_654b24_60x60.png ├── ui-bg_fine-grain_68_b83400_60x60.png ├── ui-icons_222222_256x240.png ├── ui-icons_3572ac_256x240.png ├── ui-icons_8c291d_256x240.png ├── ui-icons_b83400_256x240.png ├── ui-icons_fbdb93_256x240.png └── ui-icons_ffffff_256x240.png └── jquery-ui-1.8.8.custom.css /LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | About 3 | ============= 4 | 5 | Mongo Live is a Chrome extension for real-time monitoring of MongoDB. 6 | 7 | You can install the extension from the Chrome Web Store: 8 | 9 | * [https://chrome.google.com/webstore/detail/apgglicbkgjcfnohdcgbcobengnkcjef](https://chrome.google.com/webstore/detail/apgglicbkgjcfnohdcgbcobengnkcjef) 10 | 11 | Thie product is not affiliated with MongoDB. 12 | 13 | This product uses/includes the following open source projects: 14 | 15 | * [Smoothie Charts](http://smoothiecharts.org/) - MIT License - Copyright (c) 2010, Joe Walnes 16 | 17 | * [jQuery](http://jquery.org) - MIT License or GPL v2 18 | 19 | * [DataTables](http://www.datatables.net/) - GPL v2 - Copyright (c) 2007-2011, Allan Jardine 20 | 21 | * Images are from [MongoDB](http://www.mongodb.org) - Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) 22 | 23 | * [jQuery Base64 Plugin](http://plugins.jquery.com/project/base64-encode-and-decode) - MIT License or GPL v2 24 | 25 | Thanks to the members of 10gen who provided feedback/suggestions. 26 | 27 | License 28 | ============= 29 | 30 | Copyright 2011, [Deft Labs](http://deftlabs.com). 31 | 32 | Licensed under the Apache License, Version 2.0 (the "License"); 33 | you may not use this file except in compliance with the License. 34 | You may obtain a copy of the License at: 35 | 36 | [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) 37 | 38 | Unless required by applicable law or agreed to in writing, software 39 | distributed under the License is distributed on an "AS IS" BASIS, 40 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 41 | See the License for the specific language governing permissions and 42 | limitations under the License. 43 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | 2 | Add options page to allow for adding remote hosts. 3 | 4 | Add drop down to allow for different host display. 5 | * Make sure to disable all interval polls when changing hosts 6 | 7 | Add a brag feature for charts. 8 | 9 | -------------------------------------------------------------------------------- /background.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mongo Live 5 | 6 | 7 | 8 | 9 | 10 | 22 | 23 | 24 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/icon_128.png -------------------------------------------------------------------------------- /icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/icon_16.png -------------------------------------------------------------------------------- /icon_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/icon_48.png -------------------------------------------------------------------------------- /images/back-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/images/back-header.png -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/images/favicon.ico -------------------------------------------------------------------------------- /images/logo-mongoDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/images/logo-mongoDB.png -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Copyright 2011, Deft Labs. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at: 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | var currentServerStatus = []; 19 | var previousServerStatus = []; 20 | var selectedHostId = null; 21 | var serverStatusInterval = null; 22 | 23 | $.base64.is_unicode = true; 24 | 25 | /** 26 | * Start the app/main. 27 | */ 28 | function runApp() { 29 | 30 | var hosts = loadHosts(); 31 | selectedHostId = getPersistedItem('selectedHost'); 32 | 33 | if (hosts.length > 1) { 34 | 35 | var hostOptions = $('#hostSelect').attr('options'); 36 | var foundSelected = false; 37 | for (var idx in hosts) { 38 | var host = hosts[idx]; 39 | var hostId = assembleHostId(host); 40 | if (selectedHostId == hostId) foundSelected = true; 41 | hostOptions[idx] = new Option(hostId, hostId); 42 | } 43 | 44 | if (foundSelected) $('#hostSelect').val(selectedHostId); 45 | 46 | $('#hostSelect').change(function() { 47 | var hostId = $('#hostSelect option:selected').val(); 48 | selectedHostId = hostId; 49 | persistItem("selectedHost", selectedHostId); 50 | startServerStatusPoll(); 51 | }); 52 | 53 | $('#hostSelectContainer').show(); 54 | 55 | } else { 56 | 57 | if (hosts.length == 1) { 58 | // Set the current to first record. 59 | selectedHostId = hosts[0][0] + ':' + hosts[0][1]; 60 | persistItem("selectedHost", selectedHostId); 61 | } else { 62 | // No hosts in the system. 63 | $('#statusMsgContainer').html('No servers configured. Add a server in options.'); 64 | $('#statusMsgContainer').show(); 65 | } 66 | } 67 | 68 | startServerStatusPoll(); 69 | 70 | createChart('opcounters', 'query', 'opcountersQueryChart', 'rgba(57, 20, 175, 1)', 'rgba(57, 20, 175, 0)', true); 71 | createChart('opcounters', 'insert', 'opcountersInsertChart', 'rgba(135, 110, 215, 1)', 'rgba(135, 110, 215, 0)', true); 72 | createChart('opcounters', 'update', 'opcountersUpdateChart', 'rgba 64, 171, 1)', 'rgba(18, 64, 171, 0)', true); 73 | createChart('opcounters', 'delete', 'opcountersDeleteChart', 'rgba(255, 231, 115, 1)', 'rgba(255, 231, 115, 0)', true); 74 | createChart('opcounters', 'command', 'opcountersCommandChart', 'rgba(255, 128, 64, 1)', 'rgba(255, 128, 64, 0)', true); 75 | createChart('opcounters', 'getmore', 'opcountersGetmoreChart', 'rgba(191, 96, 48, 1)', 'rgba(191, 96, 48, 0)', true); 76 | createChart('connections', 'current', 'connectionsCurrentChart', 'rgba(255, 255, 0, 1)', 'rgba(255, 255, 0, 0)', false); 77 | createChart('extra_info', 'page_faults', 'pageFaultsChart', 'rgba(185, 247, 62, 1)', 'rgba(185, 247, 62, 0)', true); 78 | createChart('backgroundFlushing', 'flushes', 'flushesChart', 'rgba(166, 137, 0, 1)', 'rgba(166, 137, 0, 0)', true); 79 | createPercentChart('lockedPercentChart', 'rgba(191, 191, 48, 1)', 'rgba(191, 191, 48, 0)', 'globalLock', 'totalTime', 'globalLock', 'lockTime'); 80 | createPercentChart('idxMissPercentChart', 'rgba(166, 75, 0, 1)', 'rgba(166, 75, 0, 0)', 'indexCounters', 'btree.accesses', 'indexCounters', 'btree.misses'); 81 | createChart('mem', 'mapped', 'memMappedChart', 'rgba(255, 116, 0, 1)', 'rgba(255, 116, 0, 0)', false); 82 | createChart('network', 'bytesIn', 'netInChart', 'rgba(255, 128, 64, 1)', 'rgba(255, 128, 64, 0)', true); 83 | createChart('network', 'bytesOut', 'netOutChart', 'rgba(191, 96, 48, 1)', 'rgba(191, 96, 48, 0)', true); 84 | 85 | }; 86 | 87 | /** 88 | * Setup the options page. 89 | */ 90 | function runOptions() { 91 | 92 | $("#addHost").button(); 93 | 94 | $("#addHostSubmit").button(); 95 | 96 | $('#addHostSubmit').click(function(event) { 97 | event.preventDefault(); 98 | 99 | //$('#addHostSubmit').attr('disabled', 'disabled'); 100 | $('#addHostInvalidHostnameMsg').hide(); 101 | $('#addHostInvalidHostPortMsg').hide(); 102 | $('#addHostDuplicateHostMsg').hide(); 103 | 104 | var hostname = $('#hostname').val(); 105 | var port = $('#port').val(); 106 | var username = $('#u').val(); 107 | var password = $('#p').val(); 108 | var hostId = $('#hostId').val(); 109 | 110 | var isAdd = $('#isAdd').val(); 111 | 112 | if (!hostname || hostname == '') { 113 | $('#addHostInvalidHostnameMsg').show('fast'); 114 | return; 115 | }; 116 | 117 | if (!isInt(port)) { 118 | $('#addHostInvalidHostPortMsg').show('fast'); 119 | return; 120 | } 121 | 122 | if (!username || username == null) username = ''; 123 | 124 | if (!password || password == null) password = ''; 125 | else password = $.base64.encode(password); 126 | 127 | port = parseInt(port, 10); 128 | 129 | // We are either editing or adding. 130 | if (isAdd && isAdd == 'true') { 131 | 132 | var newHost = []; 133 | newHost.push(hostname); 134 | newHost.push(port); 135 | newHost.push(username); 136 | newHost.push(password); 137 | 138 | var hosts = loadHosts(); 139 | 140 | // Look for a duplicate. 141 | for (var idx in hosts) { 142 | var host = hosts[idx]; 143 | if (host[0] == hostname && host[1] == port) { 144 | $('#addHostDuplicateHostMsg').show('fast'); 145 | return; 146 | } 147 | } 148 | 149 | hosts.push(newHost); 150 | persistItem('hosts', hosts); 151 | 152 | if (!password || password == null) newHost[3] = ''; 153 | else newHost[3] = '••••••••'; 154 | 155 | addTableEditControls(newHost); 156 | 157 | // Add the row to the table. 158 | $('#hostsTable').dataTable().fnAddData(newHost); 159 | 160 | } else { 161 | // We are dealing with an edit. 162 | var hosts = loadHosts(); 163 | 164 | for (var idx in hosts) { 165 | var host = hosts[idx]; 166 | var hid = assembleHostId(host); 167 | if (hostId == hid) { 168 | host[0] = hostname; 169 | host[1] = port; 170 | host[2] = username; 171 | host[3] = password; 172 | 173 | // Make sure the old host is not the selected value. 174 | var storedSelectedId = getPersistedItem('selectedHost'); 175 | if (storedSelectedId == hostId) { 176 | var newSelectedHostId = assembleHostId(host); 177 | persistItem("selectedHost", newSelectedHostId); 178 | selectedHostId = newSelectedHostId; 179 | startServerStatusPoll(); 180 | } 181 | 182 | break; 183 | } 184 | } 185 | 186 | persistItem('hosts', hosts); 187 | 188 | window.location.reload(false); 189 | } 190 | 191 | $("#addHostContainer").dialog("close"); 192 | }); 193 | 194 | $('#addHost').click(function() { launchEditHostContainer('127.0.0.1', 28017, '', '', 'Add Host', true, null); }); 195 | 196 | var hosts = loadHosts(); 197 | 198 | for (var idx in hosts) { 199 | var host = hosts[idx]; 200 | if (host[3] && host[3] != null && host[3] != '') { 201 | host[3] = '••••••••'; 202 | } 203 | 204 | var hostId = assembleHostId(host); 205 | 206 | addTableEditControls(host); 207 | } 208 | 209 | $('#hostsTable').dataTable( { 210 | 'bProcessing': false, 211 | 'bJQueryUI': true, 212 | "aaData": hosts, 213 | 'sPaginationType': 'full_numbers', 214 | 'iDisplayLength': 50, 215 | 'bLengthChange': false, 216 | "aoColumns": [ 217 | { "bSortable": true, "sWidth": "50%" }, 218 | { "bSortable": true, "sWidth": "10%" }, 219 | { "bSortable": true, "sWidth": "20%" }, 220 | { "bSortable": false, "sWidth": "10%" }, 221 | { "bSortable": false, "sWidth": "10%" } 222 | ] 223 | }); 224 | }; 225 | 226 | /** 227 | * Edit the host. 228 | */ 229 | function editHost(hostId) { 230 | var host = findHost(hostId); 231 | // Get out of here if the host is missing. 232 | if (host == null) { window.location.reload(false); return; } 233 | launchEditHostContainer(host[0], host[1], host[2], host[3], 'Edit Host', false, hostId); 234 | }; 235 | 236 | /** 237 | * Delete the host. 238 | */ 239 | function deleteHost(hostId) { 240 | var hosts = loadHosts(); 241 | var newHosts = []; 242 | 243 | for (var idx in hosts) { 244 | var host = hosts[idx]; 245 | var hid = assembleHostId(host); 246 | if (hostId == hid) { 247 | // Make sure the old host is not the selected value. 248 | var storedSelectedId = getPersistedItem('selectedHost'); 249 | if (storedSelectedId == hostId) { 250 | stopServerStatusPoll(); 251 | removeItem('selectedHost'); 252 | } 253 | } else { newHosts.push(host); } 254 | } 255 | 256 | persistItem('hosts', newHosts); 257 | 258 | window.location.reload(false); 259 | }; 260 | 261 | function launchEditHostContainer(hostname, port, username, password, title, isAdd, hostId) { 262 | $('#addHostInvalidHostnameMsg').hide(); 263 | $('#addHostInvalidHostPortMsg').hide(); 264 | $('#addHostDuplicateHostMsg').hide(); 265 | 266 | $('#hostname').val(hostname); 267 | $('#port').val(port); 268 | $('#u').val(username); 269 | $('#p').val(password); 270 | $('#isAdd').val(isAdd); 271 | 272 | if (hostId && hostId != null) $('#hostId').val(hostId); 273 | 274 | $("#addHostContainer").dialog({ height: 390, width: 410, modal: true, title: title, resizable: false, stack: true, show: 'fade', hide: 'fade' }); 275 | }; 276 | 277 | /** 278 | * Stop the server status poll. 279 | */ 280 | function stopServerStatusPoll() { if (serverStatusInterval) clearInterval(serverStatusInterval); }; 281 | 282 | /** 283 | * Start the interval lookup for server status. 284 | */ 285 | function startServerStatusPoll() { 286 | 287 | stopServerStatusPoll(); 288 | 289 | var hosts = loadHosts(); 290 | 291 | if (!selectedHostId) { 292 | for (var idx in hosts) { 293 | selectedHostId = assembleHostId(hosts[idx]); 294 | persistItem("selectedHost", selectedHostId); 295 | break; 296 | } 297 | } 298 | 299 | if (!selectedHostId) return; 300 | 301 | var selectedHost = parseHostId(selectedHostId); 302 | 303 | var host = null; 304 | 305 | for (var idx in hosts) { 306 | host = hosts[idx]; 307 | if (host[0] == selectedHost[0] && host[1] == selectedHost[1]) break; 308 | } 309 | 310 | if (host == null) return; 311 | 312 | serverStatusInterval = setInterval(function() { 313 | queryServerStatus(host, function(response) { 314 | previousServerStatus = currentServerStatus; 315 | currentServerStatus = response; 316 | }); 317 | }, 1000); 318 | }; 319 | 320 | /** 321 | * Returns the value or undefined if not found. 322 | */ 323 | function extractServerStatusValue(serverStatus, group, identity) { 324 | var groupObj = serverStatus[group]; 325 | 326 | if (!groupObj) return undefined; 327 | if (identity.indexOf('.') == -1) return groupObj[identity]; 328 | 329 | // We are dealing with a nested object. 330 | var nestedGroupName = identity.substring(0, identity.indexOf('.')); 331 | var nestedIdentityName = identity.substring(identity.indexOf('.')+1, identity.length); 332 | 333 | var nestedGroupObj = groupObj[nestedGroupName]; 334 | if (!nestedGroupObj) return undefined; 335 | 336 | return nestedGroupObj[nestedIdentityName]; 337 | }; 338 | 339 | /** 340 | * Add a server status value to a series for a group/identity. 341 | */ 342 | function addServerStatusValueToSeries(series, group, identity, isCounter) { 343 | var x = (new Date()).getTime(); 344 | 345 | var currentValue = extractServerStatusValue(currentServerStatus, group, identity); 346 | 347 | var y = 0; 348 | if (isCounter) { 349 | var previousValue = extractServerStatusValue(previousServerStatus, group, identity); 350 | 351 | if (currentValue && previousValue && (currentValue > previousValue)) { 352 | y = currentValue - previousValue; 353 | } 354 | } else { y = currentValue; } 355 | series.append(x, y); 356 | }; 357 | 358 | /** 359 | * Add a server status value to a series for a group/identity. 360 | */ 361 | function addPercentToTimeSeries(series, group1, identity1, group2, identity2) { 362 | var x = (new Date()).getTime(); 363 | 364 | var current1 = extractServerStatusValue(currentServerStatus, group1, identity1); 365 | var current2 = extractServerStatusValue(currentServerStatus, group2, identity2); 366 | 367 | var previous1 = extractServerStatusValue(previousServerStatus, group1, identity1); 368 | var previous2 = extractServerStatusValue(previousServerStatus, group2, identity2); 369 | 370 | var y = 0; 371 | 372 | var x1 = previous2 - current2; 373 | var y1 = previous1 - current1; 374 | 375 | if (y1 != 0) { y = (((x1 / y1) * 1000) / 10); } 376 | 377 | series.append(x, y); 378 | }; 379 | 380 | /** 381 | * Create the lock percentage chart. 382 | */ 383 | function createPercentChart(divId, lineColor, fillColor, group1, identity1, group2, identity2) { 384 | var series = new TimeSeries(); 385 | setInterval(function() { addPercentToTimeSeries(series, group1, identity1, group2, identity2); }, 1000); 386 | 387 | var chart = new SmoothieChart({ millisPerPixel: 20, grid: { strokeStyle: '#555555', fillStyle: '#402817', lineWidth: 1, millisPerLine: 1000, verticalSections: 4 }}); 388 | chart.addTimeSeries(series, { strokeStyle: lineColor, fillStyle: fillColor, lineWidth: 3 }); 389 | chart.streamTo(document.getElementById(divId), 1000); 390 | }; 391 | 392 | /** 393 | * Create a chart with a single time series. 394 | */ 395 | function createChart(group, identity, divId, lineColor, fillColor, isCounter) { 396 | var series = new TimeSeries(); 397 | 398 | setInterval(function() { addServerStatusValueToSeries(series, group, identity, isCounter); }, 1000); 399 | 400 | var chart = new SmoothieChart({ millisPerPixel: 20, grid: { strokeStyle: '#555555', fillStyle: '#402817', lineWidth: 1, millisPerLine: 1000, verticalSections: 4 }}); 401 | chart.addTimeSeries(series, { strokeStyle: lineColor, fillStyle: fillColor, lineWidth: 3 }); 402 | chart.streamTo(document.getElementById(divId), 1000); 403 | }; 404 | 405 | function queryServerStatus(host, success, failure, cmdError, notFound, serverError) { 406 | queryDb(('http://' + host[0] + ':' + host[1] + '/serverStatus'), host[2], host[3], success, failure, cmdError, notFound, serverError); 407 | }; 408 | 409 | function queryDb(commandUrl, username, password, success, failure, cmdError, notFound, serverError) { 410 | 411 | var xhr = new XMLHttpRequest(); 412 | if (username && username != null && username != '') { 413 | xhr.open("GET", commandUrl, true, username, $.base64.decode(password)); 414 | } else { xhr.open("GET", commandUrl, true); } 415 | 416 | xhr.onreadystatechange = function() { 417 | 418 | if (xhr.readyState == 4 && xhr.status == 200) { 419 | authProblem = false; 420 | $('#statusMsgContainer').hide(); 421 | 422 | var resp = JSON.parse(fixDateFields(xhr.responseText)); 423 | 424 | // TODO: Check for mongo error state in response json 425 | 426 | success(resp); 427 | } else if (xhr.readyState == 4 && xhr.status == 404) { 428 | if (notFound) notFound(); 429 | 430 | } else if (xhr.readyState == 4 && xhr.status == 0) { 431 | // The client is not able to connect to the server. Display error message. 432 | $('#statusMsgContainer').html('Unable to connect to server: ' + commandUrl); 433 | $('#statusMsgContainer').show(); 434 | 435 | } else if (xhr.readyState == 4 && xhr.status != 200) { 436 | if (serverError) serverError(xhr.readyState, xhr.status); 437 | if (failure) failure(xhr.readyState, xhr.status); 438 | } 439 | } 440 | xhr.send(); 441 | }; 442 | 443 | /** 444 | * There is a date format bug in some older versions of Mongo. Thanks to Lucas for 445 | * submitting part of the regex solution :-) 446 | * 447 | * The regex below replaces the date fields with 0 (since they are not used). 448 | * 449 | * http://jira.mongodb.org/browse/SERVER-2378 450 | * 451 | * The old format is: 452 | * "last_finished" : Date( 1295450058854 ) 453 | * The date format in newer releases is: 454 | * "localTime" : { "$date" : 1295452287356 } 455 | */ 456 | function fixDateFields(resp) { return resp.replace(/Date\( (\d+) \)/g, "0"); }; 457 | 458 | function isInt(v) { 459 | var regex = /(^-?\d\d*$)/; 460 | return regex.test(v); 461 | }; 462 | 463 | /** 464 | * Parse the host id. 465 | */ 466 | function parseHostId(hostId) { return hostId.split(":"); }; 467 | 468 | /** 469 | * Assemble the host id. 470 | */ 471 | function assembleHostId(host) { return baseAssembleHostId(host[0], host[1]); }; 472 | 473 | /** 474 | * Assemble the host based on hostname and port. 475 | */ 476 | function baseAssembleHostId(hostname, port) { return hostname + ':' + port; }; 477 | 478 | /** 479 | * Add the host edit controls (in the table). 480 | */ 481 | function addTableEditControls(host) { 482 | var hostId = assembleHostId(host); 483 | 484 | host.push('
  '); 485 | }; 486 | 487 | /** 488 | * Load the persisted hosts. Load the data from local storage and create the table (if missing). 489 | */ 490 | function loadHosts() { 491 | var hosts = getPersistedItem('hosts'); 492 | if (!hosts) { 493 | hosts = [ [ '127.0.0.1', '28017', '', '' ] ] 494 | persistItem('hosts', hosts); 495 | } 496 | 497 | return hosts; 498 | }; 499 | 500 | function findHost(hostId) { 501 | 502 | var hosts = loadHosts(); 503 | 504 | for (var idx in hosts) { 505 | var host = hosts[idx]; 506 | var hid = assembleHostId(host); 507 | if (hostId == hid) return host; 508 | } 509 | 510 | return null; 511 | }; 512 | 513 | function getPersistedItem(key) { 514 | var value; 515 | try { value = window.localStorage.getItem(key); 516 | } catch(e) { value = null; } 517 | if (value) return JSON.parse(value); 518 | return null; 519 | }; 520 | 521 | function persistItem(key, value) { 522 | window.localStorage.setItem(key, JSON.stringify(value)); 523 | }; 524 | 525 | function removeItem(key) { window.localStorage.removeItem(key); }; 526 | 527 | -------------------------------------------------------------------------------- /js/datatables-1.7.5/css/hosts_table.css: -------------------------------------------------------------------------------- 1 | /* 2 | * File: demo_table_jui.css 3 | * CVS: $Id$ 4 | * Description: CSS descriptions for DataTables demo pages 5 | * Author: Allan Jardine 6 | * Created: Tue May 12 06:47:22 BST 2009 7 | * Modified: $Date$ by $Author$ 8 | * Language: CSS 9 | * Project: DataTables 10 | * 11 | * Copyright 2009 Allan Jardine. All Rights Reserved. 12 | * 13 | * *************************************************************************** 14 | * DESCRIPTION 15 | * 16 | * The styles given here are suitable for the demos that are used with the standard DataTables 17 | * distribution (see www.datatables.net). You will most likely wish to modify these styles to 18 | * meet the layout requirements of your site. 19 | * 20 | * Common issues: 21 | * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is 22 | * no conflict between the two pagination types. If you want to use full_numbers pagination 23 | * ensure that you either have "example_alt_pagination" as a body class name, or better yet, 24 | * modify that selector. 25 | * Note that the path used for Images is relative. All images are by default located in 26 | * ../images/ - relative to this CSS file. 27 | */ 28 | 29 | 30 | /* 31 | * jQuery UI specific styling 32 | */ 33 | 34 | .paging_two_button .ui-button { float: left; cursor: pointer; * cursor: hand; } 35 | 36 | .paging_full_numbers .ui-button { padding: 2px 6px; margin: 0; cursor: pointer; * cursor: hand; } 37 | 38 | .ui-buttonset .ui-button { margin-right: -0.1em !important; } 39 | 40 | .paging_full_numbers { width: 350px !important; } 41 | 42 | .ui-toolbar { padding: 5px; } 43 | 44 | .dataTables_paginate { width: auto; } 45 | 46 | .dataTables_info { padding-top: 3px; } 47 | 48 | table.display thead th { padding: 3px 0px 3px 10px; cursor: pointer; * cursor: hand; } 49 | 50 | div.dataTables_wrapper .ui-widget-header { font-weight: normal; } 51 | 52 | /* 53 | * Sort arrow icon positioning 54 | */ 55 | table.display thead th div.DataTables_sort_wrapper { position: relative; padding-right: 20px; padding-right: 20px; } 56 | 57 | table.display thead th div.DataTables_sort_wrapper span { position: absolute; top: 50%; margin-top: -8px; right: 0; } 58 | 59 | 60 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 61 | * DataTables features 62 | */ 63 | 64 | .dataTables_wrapper { position: relative; min-height: 302px; _height: 302px; clear: both; } 65 | 66 | .dataTables_processing { 67 | position: absolute; 68 | top: 0px; 69 | left: 50%; 70 | width: 250px; 71 | margin-left: -125px; 72 | border: 1px solid #ddd; 73 | text-align: center; 74 | color: #999; 75 | font-size: 11px; 76 | padding: 2px 0; 77 | } 78 | 79 | .dataTables_length { 80 | width: 40%; 81 | float: left; 82 | } 83 | 84 | .dataTables_filter { 85 | width: 50%; 86 | float: right; 87 | text-align: right; 88 | } 89 | 90 | .dataTables_info { 91 | width: 50%; 92 | float: left; 93 | } 94 | 95 | .dataTables_paginate { 96 | float: right; 97 | text-align: right; 98 | } 99 | 100 | /* Pagination nested */ 101 | .paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { 102 | height: 19px; 103 | width: 19px; 104 | margin-left: 3px; 105 | float: left; 106 | } 107 | 108 | .paginate_disabled_previous { 109 | background-image: url('../images/back_disabled.jpg'); 110 | } 111 | 112 | .paginate_enabled_previous { 113 | background-image: url('../images/back_enabled.jpg'); 114 | } 115 | 116 | .paginate_disabled_next { 117 | background-image: url('../images/forward_disabled.jpg'); 118 | } 119 | 120 | .paginate_enabled_next { 121 | background-image: url('../images/forward_enabled.jpg'); 122 | } 123 | 124 | 125 | 126 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 127 | * DataTables display 128 | */ 129 | table.display { 130 | margin: 0 auto; 131 | width: 100%; 132 | clear: both; 133 | border-collapse: collapse; 134 | } 135 | 136 | table.display tfoot th { 137 | padding: 3px 0px 3px 10px; 138 | font-weight: bold; 139 | font-weight: normal; 140 | } 141 | 142 | table.display tr.heading2 td { 143 | border-bottom: 1px solid #aaa; 144 | } 145 | 146 | table.display td { 147 | padding: 3px 10px; 148 | } 149 | 150 | table.display td.center { 151 | text-align: center; 152 | } 153 | 154 | 155 | 156 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 157 | * DataTables sorting 158 | */ 159 | 160 | .sorting_asc { 161 | background: url('../images/sort_asc.jpg') no-repeat center right; 162 | } 163 | 164 | .sorting_desc { 165 | background: url('../images/sort_desc.jpg') no-repeat center right; 166 | } 167 | 168 | .sorting { 169 | background: url('../images/sort_both.jpg') no-repeat center right; 170 | } 171 | 172 | 173 | 174 | 175 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 176 | * DataTables row classes 177 | */ 178 | 179 | table.display tr.odd.gradeA { background-color: #ddffdd; } 180 | table.display tr.even.gradeA { background-color: #eeffee; } 181 | table.display tr.odd.gradeA { background-color: #ddffdd; } 182 | table.display tr.even.gradeA { background-color: #eeffee; } 183 | table.display tr.odd.gradeC { background-color: #ddddff; } 184 | table.display tr.even.gradeC { background-color: #eeeeff; } 185 | table.display tr.odd.gradeX { background-color: #ffdddd; } 186 | table.display tr.even.gradeX { background-color: #ffeeee; } 187 | table.display tr.odd.gradeU { background-color: #ddd; } 188 | table.display tr.even.gradeU { background-color: #eee; } 189 | tr.odd { background-color: #E5E6DC; } 190 | tr.even { background-color: white; } 191 | 192 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 193 | * Misc 194 | */ 195 | 196 | .dataTables_scroll { clear: both; } 197 | 198 | .top, .bottom { padding: 15px; background-color: #F5F5F5; border: 1px solid #CCCCCC; } 199 | 200 | .top .dataTables_info { float: none; } 201 | 202 | .clear { clear: both; } 203 | 204 | .dataTables_empty { text-align: center; } 205 | 206 | tfoot input { margin: 0.5em 0; width: 100%; color: #444; } 207 | 208 | tfoot input.search_init { 209 | color: #999; 210 | } 211 | 212 | td.group { 213 | background-color: #d1cfd0; 214 | border-bottom: 2px solid #A19B9E; 215 | border-top: 2px solid #A19B9E; 216 | } 217 | 218 | td.details { 219 | background-color: #d1cfd0; 220 | border: 2px solid #A19B9E; 221 | } 222 | 223 | .example_alt_pagination div.dataTables_info { 224 | width: 40%; 225 | } 226 | 227 | .paging_full_numbers span.paginate_button, 228 | .paging_full_numbers span.paginate_active { 229 | border: 1px solid #aaa; 230 | -webkit-border-radius: 5px; 231 | -moz-border-radius: 5px; 232 | padding: 2px 5px; 233 | margin: 0 3px; 234 | cursor: pointer; 235 | *cursor: hand; 236 | } 237 | 238 | .paging_full_numbers span.paginate_button { 239 | background-color: #ddd; 240 | } 241 | 242 | .paging_full_numbers span.paginate_button:hover { 243 | background-color: #ccc; 244 | } 245 | 246 | .paging_full_numbers span.paginate_active { 247 | background-color: #99B3FF; 248 | } 249 | 250 | table.display tr.even.row_selected td { 251 | background-color: #B0BED9; 252 | } 253 | 254 | table.display tr.odd.row_selected td { 255 | background-color: #9FAFD1; 256 | } 257 | 258 | 259 | /* 260 | * Sorting classes for columns 261 | */ 262 | /* For the standard odd/even */ 263 | tr.odd td.sorting_1 { background-color: #E5E6DC; } 264 | 265 | tr.odd td.sorting_2 { background-color: #EEEEEE; } 266 | 267 | tr.odd td.sorting_3 { background-color: #EEEEEE; } 268 | 269 | tr.even td.sorting_1 { background-color: #F9F9FF; } 270 | 271 | tr.even td.sorting_2 { background-color: #F2F3FF; } 272 | 273 | tr.even td.sorting_3 { background-color: #F9F9FF; } 274 | 275 | 276 | /* For the Conditional-CSS grading rows */ 277 | /* 278 | Colour calculations (based off the main row colours) 279 | Level 1: 280 | dd > c4 281 | ee > d5 282 | Level 2: 283 | dd > d1 284 | ee > e2 285 | */ 286 | tr.odd.gradeA td.sorting_1 { background-color: #c4ffc4; } 287 | 288 | tr.odd.gradeA td.sorting_2 { background-color: #d1ffd1; } 289 | 290 | tr.odd.gradeA td.sorting_3 { background-color: #d1ffd1; } 291 | 292 | tr.even.gradeA td.sorting_1 { 293 | background-color: #d5ffd5; 294 | } 295 | 296 | tr.even.gradeA td.sorting_2 { 297 | background-color: #e2ffe2; 298 | } 299 | 300 | tr.even.gradeA td.sorting_3 { 301 | background-color: #e2ffe2; 302 | } 303 | 304 | tr.odd.gradeC td.sorting_1 { 305 | background-color: #c4c4ff; 306 | } 307 | 308 | tr.odd.gradeC td.sorting_2 { 309 | background-color: #d1d1ff; 310 | } 311 | 312 | tr.odd.gradeC td.sorting_3 { 313 | background-color: #d1d1ff; 314 | } 315 | 316 | tr.even.gradeC td.sorting_1 { 317 | background-color: #d5d5ff; 318 | } 319 | 320 | tr.even.gradeC td.sorting_2 { 321 | background-color: #e2e2ff; 322 | } 323 | 324 | tr.even.gradeC td.sorting_3 { 325 | background-color: #e2e2ff; 326 | } 327 | 328 | tr.odd.gradeX td.sorting_1 { 329 | background-color: #ffc4c4; 330 | } 331 | 332 | tr.odd.gradeX td.sorting_2 { 333 | background-color: #ffd1d1; 334 | } 335 | 336 | tr.odd.gradeX td.sorting_3 { 337 | background-color: #ffd1d1; 338 | } 339 | 340 | tr.even.gradeX td.sorting_1 { 341 | background-color: #ffd5d5; 342 | } 343 | 344 | tr.even.gradeX td.sorting_2 { 345 | background-color: #ffe2e2; 346 | } 347 | 348 | tr.even.gradeX td.sorting_3 { 349 | background-color: #ffe2e2; 350 | } 351 | 352 | tr.odd.gradeU td.sorting_1 { 353 | background-color: #c4c4c4; 354 | } 355 | 356 | tr.odd.gradeU td.sorting_2 { 357 | background-color: #d1d1d1; 358 | } 359 | 360 | tr.odd.gradeU td.sorting_3 { 361 | background-color: #d1d1d1; 362 | } 363 | 364 | tr.even.gradeU td.sorting_1 { 365 | background-color: #d5d5d5; 366 | } 367 | 368 | tr.even.gradeU td.sorting_2 { 369 | background-color: #e2e2e2; 370 | } 371 | 372 | tr.even.gradeU td.sorting_3 { 373 | background-color: #e2e2e2; 374 | } 375 | 376 | -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/back_disabled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/back_disabled.jpg -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/back_enabled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/back_enabled.jpg -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/forward_disabled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/forward_disabled.jpg -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/forward_enabled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/forward_enabled.jpg -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/sort_asc.png -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/sort_both.png -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/sort_desc.png -------------------------------------------------------------------------------- /js/datatables-1.7.5/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/js/datatables-1.7.5/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /js/datatables-1.7.5/js/jquery.dataTables.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * File: jquery.dataTables.min.js 3 | * Version: 1.7.5 4 | * Author: Allan Jardine (www.sprymedia.co.uk) 5 | * Info: www.datatables.net 6 | * 7 | * Copyright 2008-2010 Allan Jardine, all rights reserved. 8 | * 9 | * This source file is free software, under either the GPL v2 license or a 10 | * BSD style license, as supplied with this software. 11 | * 12 | * This source file is distributed in the hope that it will be useful, but 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 | * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 15 | */ 16 | (function(j,qa,p){j.fn.dataTableSettings=[];var D=j.fn.dataTableSettings;j.fn.dataTableExt={};var n=j.fn.dataTableExt;n.sVersion="1.7.5";n.sErrMode="alert";n.iApiIndex=0;n.oApi={};n.afnFiltering=[];n.aoFeatures=[];n.ofnSearch={};n.afnSortData=[];n.oStdClasses={sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active", 17 | sPageButtonStaticDisabled:"paginate_button",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripOdd:"odd",sStripEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled", 18 | sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:""};n.oJUIClasses={sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", 19 | sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl", 20 | sPagePrevious:"previous",sPageNext:"next",sPageLast:"last ui-corner-tr ui-corner-br",sStripOdd:"odd",sStripEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortableAsc:"ui-state-default", 21 | sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortColumn:"sorting_",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollHeadInner:"dataTables_scrollHeadInner", 22 | sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot ui-state-default",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:"ui-state-default"};n.oPagination={two_button:{fnInit:function(g,m,r){var s,w,y;if(g.bJUI){s=p.createElement("a");w=p.createElement("a");y=p.createElement("span");y.className=g.oClasses.sPageJUINext;w.appendChild(y);y=p.createElement("span");y.className=g.oClasses.sPageJUIPrev;s.appendChild(y)}else{s=p.createElement("div");w=p.createElement("div")}s.className= 23 | g.oClasses.sPagePrevDisabled;w.className=g.oClasses.sPageNextDisabled;s.title=g.oLanguage.oPaginate.sPrevious;w.title=g.oLanguage.oPaginate.sNext;m.appendChild(s);m.appendChild(w);j(s).click(function(){g.oApi._fnPageChange(g,"previous")&&r(g)});j(w).click(function(){g.oApi._fnPageChange(g,"next")&&r(g)});j(s).bind("selectstart",function(){return false});j(w).bind("selectstart",function(){return false});if(g.sTableId!==""&&typeof g.aanFeatures.p=="undefined"){m.setAttribute("id",g.sTableId+"_paginate"); 24 | s.setAttribute("id",g.sTableId+"_previous");w.setAttribute("id",g.sTableId+"_next")}},fnUpdate:function(g){if(g.aanFeatures.p)for(var m=g.aanFeatures.p,r=0,s=m.length;r=w-s){s=w-r+1;x=w}else{s=y-Math.ceil(r/2)+1;x=s+r-1}for(r=s;r<= 28 | x;r++)F+=y!=r?''+r+"":''+r+"";x=g.aanFeatures.p;var z,U=function(){g._iDisplayStart=(this.innerHTML*1-1)*g._iDisplayLength;m(g);return false},C=function(){return false};r=0;for(s=x.length;rm?1:0},"string-desc":function(g,m){g=g.toLowerCase();m=m.toLowerCase();return gm?-1:0},"html-asc":function(g,m){g=g.replace(/<.*?>/g,"").toLowerCase();m=m.replace(/<.*?>/g,"").toLowerCase();return gm?1:0},"html-desc":function(g,m){g=g.replace(/<.*?>/g,"").toLowerCase();m=m.replace(/<.*?>/g,"").toLowerCase();return gm?-1:0},"date-asc":function(g,m){g=Date.parse(g);m=Date.parse(m);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(m)|| 31 | m==="")m=Date.parse("01/01/1970 00:00:00");return g-m},"date-desc":function(g,m){g=Date.parse(g);m=Date.parse(m);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(m)||m==="")m=Date.parse("01/01/1970 00:00:00");return m-g},"numeric-asc":function(g,m){return(g=="-"||g===""?0:g*1)-(m=="-"||m===""?0:m*1)},"numeric-desc":function(g,m){return(m=="-"||m===""?0:m*1)-(g=="-"||g===""?0:g*1)}};n.aTypes=[function(g){if(g.length===0)return"numeric";var m,r=false;m=g.charAt(0);if("0123456789-".indexOf(m)== 32 | -1)return null;for(var s=1;s")!=-1)return"html";return null}];n.fnVersionCheck=function(g){var m=function(x,v){for(;x.length=parseInt(w,10)};n._oExternConfig={iNextUnique:0};j.fn.dataTable=function(g){function m(){this.fnRecordsTotal=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length};this.fnRecordsDisplay=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length};this.fnDisplayEnd=function(){return this.oFeatures.bServerSide?this.oFeatures.bPaginate===false||this._iDisplayLength==-1? 34 | this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd};this.sInstance=this.oInstance=null;this.oFeatures={bPaginate:true,bLengthChange:true,bFilter:true,bSort:true,bInfo:true,bAutoWidth:true,bProcessing:false,bSortClasses:true,bStateSave:false,bServerSide:false};this.oScroll={sX:"",sXInner:"",sY:"",bCollapse:false,bInfinite:false,iLoadGap:100,iBarWidth:0,bAutoCss:true};this.aanFeatures=[];this.oLanguage={sProcessing:"Processing...", 35 | sLengthMenu:"Show _MENU_ entries",sZeroRecords:"No matching records found",sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sSearch:"Search:",sUrl:"",oPaginate:{sFirst:"First",sPrevious:"Previous",sNext:"Next",sLast:"Last"},fnInfoCallback:null};this.aoData=[];this.aiDisplay=[];this.aiDisplayMaster=[];this.aoColumns=[];this.iNextId=0;this.asDataSearch= 36 | [];this.oPreviousSearch={sSearch:"",bRegex:false,bSmart:true};this.aoPreSearchCols=[];this.aaSorting=[[0,"asc",0]];this.aaSortingFixed=null;this.asStripClasses=[];this.asDestoryStrips=[];this.sDestroyWidth=0;this.fnFooterCallback=this.fnHeaderCallback=this.fnRowCallback=null;this.aoDrawCallback=[];this.fnInitComplete=null;this.sTableId="";this.nTableWrapper=this.nTBody=this.nTFoot=this.nTHead=this.nTable=null;this.bInitialised=false;this.aoOpenRows=[];this.sDom="lfrtip";this.sPaginationType="two_button"; 37 | this.iCookieDuration=7200;this.sCookiePrefix="SpryMedia_DataTables_";this.fnCookieCallback=null;this.aoStateSave=[];this.aoStateLoad=[];this.sAjaxSource=this.oLoadedState=null;this.bAjaxDataGet=true;this.fnServerData=function(a,b,c){j.ajax({url:a,data:b,success:c,dataType:"json",cache:false,error:function(d,f){f=="parsererror"&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})};this.fnFormatNumber=function(a){if(a<1E3)return a;else{var b= 38 | a+"";a=b.split("");var c="";b=b.length;for(var d=0;d=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;E(a)}if(!(!a.bDestroying&&a.oFeatures.bServerSide&&!sa(a))){a.oFeatures.bServerSide||a.iDraw++;if(a.aiDisplay.length!==0){var i=a._iDisplayStart,h=a._iDisplayEnd;if(a.oFeatures.bServerSide){i=0;h=a.aoData.length}for(i= 55 | i;itr",a.nTHead)[0],V(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay); 57 | typeof a.fnFooterCallback=="function"&&a.fnFooterCallback.call(a.oInstance,j(">tr",a.nTFoot)[0],V(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay);f=p.createDocumentFragment();b=p.createDocumentFragment();if(a.nTBody){e=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered){c=a.nTBody.childNodes;for(b=c.length-1;b>=0;b--)c[b].parentNode.removeChild(c[b])}b=0;for(c=d.length;b=0;b--)a.aoDrawCallback[b].fn.call(a.oInstance,a);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){K(a,false);typeof a._bInitComplete=="undefined"&&w(a)}}}function W(a){if(a.oFeatures.bSort)O(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)P(a,a.oPreviousSearch);else{E(a);C(a)}}function sa(a){if(a.bAjaxDataGet){K(a,true);var b=a.aoColumns.length,c=[],d;a.iDraw++;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns", 59 | value:ca(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength:-1});if(a.oFeatures.bFilter!==false){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(d=0;d")c=c.parentNode; 64 | else if(i=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){f=va(a);e=1}else if(i=="f"&&a.oFeatures.bFilter){f=wa(a);e=1}else if(i=="r"&&a.oFeatures.bProcessing){f=xa(a);e=1}else if(i=="t"){f=ya(a);e=1}else if(i=="i"&&a.oFeatures.bInfo){f=za(a);e=1}else if(i=="p"&&a.oFeatures.bPaginate){f=Aa(a);e=1}else if(n.aoFeatures.length!==0){h=n.aoFeatures;q=0;for(k=h.length;qcaption",a.nTable);i=0;for(k=d.length;ij(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()0&&a.nTable.removeChild(i[0]);if(a.nTFoot!==null){k=a.nTable.getElementsByTagName("tfoot");k.length>0&&a.nTable.removeChild(k[0])}i=a.nTHead.cloneNode(true);a.nTable.insertBefore(i,a.nTable.childNodes[0]);if(a.nTFoot!==null){k=a.nTFoot.cloneNode(true);a.nTable.insertBefore(k,a.nTable.childNodes[1])}var J=fa(i);f=0;for(e=J.length;ff-a.oScroll.iBarWidth)a.nTable.style.width=u(f)}else a.nTable.style.width= 71 | u(f);f=j(a.nTable).outerWidth();e=a.nTHead.getElementsByTagName("tr");i=i.getElementsByTagName("tr");L(function(B,I){l=B.style;l.paddingTop="0";l.paddingBottom="0";l.borderTopWidth="0";l.borderBottomWidth="0";l.height=0;t=j(B).width();I.style.width=u(t);G.push(t)},i,e);j(i).height(0);if(a.nTFoot!==null){h=k.getElementsByTagName("tr");k=a.nTFoot.getElementsByTagName("tr");L(function(B,I){l=B.style;l.paddingTop="0";l.paddingBottom="0";l.borderTopWidth="0";l.borderBottomWidth="0";t=j(B).width();I.style.width= 72 | u(t);G.push(t)},h,k);j(h).height(0)}L(function(B){B.innerHTML="";B.style.width=u(G.shift())},i);a.nTFoot!==null&&L(function(B){B.innerHTML="";B.style.width=u(G.shift())},h);if(j(a.nTable).outerWidth()d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight';var c=j("input",b);c.val(a.oPreviousSearch.sSearch.replace('"',"""));c.keyup(function(){for(var d=a.aanFeatures.f,f=0,e=d.length;f=0;d--){f=ja(a.aoData[a.aiDisplay[d]]._aData[c],a.aoColumns[c].sType);if(!b.test(f)){a.aiDisplay.splice(d,1);e++}}}}function Ca(a,b,c,d,f){var e=ia(b,d,f);if(typeof c=="undefined"||c===null)c=0;if(n.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length||a.oPreviousSearch.sSearch.length>b.length||c==1||b.indexOf(a.oPreviousSearch.sSearch)!== 78 | 0){a.aiDisplay.splice(0,a.aiDisplay.length);ha(a,1);for(c=0;c/g,"");else if(typeof a=="string")return a.replace(/\n/g," ");return a}function O(a,b){var c,d,f,e,i,h,k=[],l=[],q=n.oSort,t=a.aoData,G=a.aoColumns;if(!a.oFeatures.bServerSide&&(a.aaSorting.length!==0||a.aaSortingFixed!==null)){k=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(f=0;f=i)for(b=0;b=0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength=0){b=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else H(a,0,"Unknown paging action: "+b);return c!=a._iDisplayStart}function za(a){var b=p.createElement("div");b.className=a.oClasses.sInfo;if(typeof a.aanFeatures.i=="undefined"){a.aoDrawCallback.push({fn:Fa,sName:"information"});a.sTableId!==""&&b.setAttribute("id",a.sTableId+"_info")}return b} 89 | function Fa(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a._iDisplayStart+1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),e=a.fnFormatNumber(b),i=a.fnFormatNumber(c),h=a.fnFormatNumber(d),k=a.fnFormatNumber(f);if(a.oScroll.bInfinite)e=a.fnFormatNumber(1);e=a.fnRecordsDisplay()===0&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()===0?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_", 90 | h)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_",e).replace("_END_",i).replace("_TOTAL_",k)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",e).replace("_END_",i).replace("_TOTAL_",k)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;if(a.oLanguage.fnInfoCallback!==null)e=a.oLanguage.fnInfoCallback(a,b,c,d,f,e);a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d;if(a.aLengthMenu.length==2&&typeof a.aLengthMenu[0]=="object"&&typeof a.aLengthMenu[1]=="object"){c=0;for(d=a.aLengthMenu[0].length;c'+a.aLengthMenu[1][c]+""}else{c=0;for(d=a.aLengthMenu.length;c'+a.aLengthMenu[c]+""}b+="";var f=p.createElement("div"); 92 | a.sTableId!==""&&typeof a.aanFeatures.l=="undefined"&&f.setAttribute("id",a.sTableId+"_length");f.className=a.oClasses.sLength;f.innerHTML=a.oLanguage.sLengthMenu.replace("_MENU_",b);j('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",true);j("select",f).change(function(){var e=j(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Ga(a,b){if(!a||a===null||a==="")return 0;if(typeof b=="undefined")b=p.getElementsByTagName("body")[0];var c=p.createElement("div");c.style.width=a;b.appendChild(c);a=c.offsetWidth; 96 | b.removeChild(c);return a}function $(a){var b=0,c,d=0,f=a.aoColumns.length,e,i=j("th",a.nTHead);for(e=0;etd",b);e.each(function(h){this.style.width="";h=ga(a,h);if(h!==null&&a.aoColumns[h].sWidthOrig!=="")this.style.width=a.aoColumns[h].sWidthOrig});for(e=0;etd",b);if(f.length===0)f=j("thead tr:eq(0)>th",b);for(e=c=0;e 99 | 0)a.aoColumns[e].sWidth=u(d);c++}a.nTable.style.width=u(j(b).outerWidth());b.parentNode.removeChild(b)}}function Ia(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){j(b).width();b.style.width=u(j(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!=="")b.style.width=u(j(b).outerWidth())}function Ha(a,b,c){if(typeof c=="undefined"||c){c=Ja(a,b);b=M(a,b);if(c<0)return null;return a.aoData[c].nTr.getElementsByTagName("td")[b]}var d=-1,f,e;c=-1;var i=p.createElement("div");i.style.visibility="hidden"; 100 | i.style.position="absolute";p.body.appendChild(i);f=0;for(e=a.aoData.length;fd){d=i.offsetWidth;c=f}}p.body.removeChild(i);if(c>=0){b=M(a,b);if(a=a.aoData[c].nTr.getElementsByTagName("td")[b])return a}return null}function Ja(a,b){for(var c=-1,d=-1,f=0;fc){c=e.length;d=f}}return d}function u(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b= 101 | a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+"px"}function Oa(a,b){if(a.length!=b.length)return 1;for(var c=0;cb&&a[d]--;c!=-1&&a.splice(c,1)}function ua(a,b){b=b.split(",");for(var c=[],d=0,f=a.aoColumns.length;d4096){a=p.cookie.split(";");for(var h=0,k=a.length;h=d.aiDisplay.length){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(typeof c=="undefined"||c){E(d);C(d)}return f};this.fnClearTable=function(a){var b=A(this[n.iApiIndex]);da(b);if(typeof a=="undefined"||a)C(b)};this.fnOpen=function(a,b,c){var d=A(this[n.iApiIndex]);this.fnClose(a);var f= 117 | p.createElement("tr"),e=p.createElement("td");f.appendChild(e);e.className=c;e.colSpan=S(d);e.innerHTML=b;b=j("tr",d.nTBody);j.inArray(a,b)!=-1&&j(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f};this.fnClose=function(a){for(var b=A(this[n.iApiIndex]),c=0;ctr",d.nTHead)[0];i=j(">tr",d.nTFoot)[0];q=[];h=[];for(f=0;f=S(d)){l.appendChild(q[a]);l=j(">tr",d.nTHead);f=1;for(e=l.length;ftr",d.nTFoot);f=1;for(e=l.length;ftr",d.nTHead);f=1;for(e=l.length;ftr",d.nTFoot);f=1;for(e=l.length;ftd:eq("+k+")",d.aoData[f].nTr)[0])}}d.aoColumns[a].bVisible=true}else{l.removeChild(q[a]);f=0;for(e=d.aoColumns[a].anThExtra.length;ftr>td."+a.oClasses.sRowEmpty,a.nTable).parent().remove();if(a.nTable!=a.nTHead.parentNode){j(">thead",a.nTable).remove();a.nTable.appendChild(a.nTHead)}if(a.nTFoot&&a.nTable!=a.nTFoot.parentNode){j(">tfoot",a.nTable).remove();a.nTable.appendChild(a.nTFoot)}a.nTable.parentNode.removeChild(a.nTable);j(a.nTableWrapper).remove();a.aaSorting=[];a.aaSortingFixed=[];T(a);j(R(a)).removeClass(a.asStripClasses.join(" "));if(a.bJUI){j("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oJUIClasses.sSortableAsc, 126 | n.oJUIClasses.sSortableDesc,n.oJUIClasses.sSortableNone].join(" "));j("th span",a.nTHead).remove()}else j("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oStdClasses.sSortableAsc,n.oStdClasses.sSortableDesc,n.oStdClasses.sSortableNone].join(" "));b.appendChild(a.nTable);d=0;for(f=a.aoData.length;dtr:even",c).addClass(a.asDestoryStrips[0]);j(">tr:odd",c).addClass(a.asDestoryStrips[1]);d=0;for(f=D.length;dt<"F"ip>'}if(e.oScroll.sX!==""||e.oScroll.sY!=="")e.oScroll.iBarWidth=Ma();if(typeof g.iDisplayStart!="undefined"&&typeof e.iInitDisplayStart=="undefined"){e.iInitDisplayStart=g.iDisplayStart;e._iDisplayStart=g.iDisplayStart}if(typeof g.bStateSave!="undefined"){e.oFeatures.bStateSave=g.bStateSave;La(e,g);e.aoDrawCallback.push({fn:na,sName:"state_save"})}if(typeof g.aaData!="undefined")h= 137 | true;if(typeof g!="undefined"&&typeof g.aoData!="undefined")g.aoColumns=g.aoData;if(typeof g.oLanguage!="undefined")if(typeof g.oLanguage.sUrl!="undefined"&&g.oLanguage.sUrl!==""){e.oLanguage.sUrl=g.oLanguage.sUrl;j.getJSON(e.oLanguage.sUrl,null,function(q){y(e,q,true)});i=true}else y(e,g.oLanguage,false)}else g={};if(typeof g.asStripClasses=="undefined"){e.asStripClasses.push(e.oClasses.sStripOdd);e.asStripClasses.push(e.oClasses.sStripEven)}c=false;d=j("tbody>tr",this);a=0;for(b=e.asStripClasses.length;a< 138 | b;a++)if(d.filter(":lt(2)").hasClass(e.asStripClasses[a])){c=true;break}if(c){e.asDestoryStrips=["",""];if(j(d[0]).hasClass(e.oClasses.sStripOdd))e.asDestoryStrips[0]+=e.oClasses.sStripOdd+" ";if(j(d[0]).hasClass(e.oClasses.sStripEven))e.asDestoryStrips[0]+=e.oClasses.sStripEven;if(j(d[1]).hasClass(e.oClasses.sStripOdd))e.asDestoryStrips[1]+=e.oClasses.sStripOdd+" ";if(j(d[1]).hasClass(e.oClasses.sStripEven))e.asDestoryStrips[1]+=e.oClasses.sStripEven;d.removeClass(e.asStripClasses.join(" "))}a=this.getElementsByTagName("thead"); 139 | c=a.length===0?[]:fa(a[0]);var k;if(typeof g.aoColumns=="undefined"){k=[];a=0;for(b=c.length;a=0;a--){var l=g.aoColumnDefs[a].aTargets;j.isArray(l)||H(e,1,"aTargets must be an array of targets, not a "+typeof l); 140 | c=0;for(d=l.length;c=0){for(;e.aoColumns.length<=l[c];)F(e);x(e,l[c],g.aoColumnDefs[a])}else if(typeof l[c]=="number"&&l[c]<0)x(e,e.aoColumns.length+l[c],g.aoColumnDefs[a]);else if(typeof l[c]=="string"){b=0;for(f=e.aoColumns.length;b=e.aoColumns.length)e.aaSorting[a][0]= 141 | 0;k=e.aoColumns[e.aaSorting[a][0]];if(typeof e.aaSorting[a][2]=="undefined")e.aaSorting[a][2]=0;if(typeof g.aaSorting=="undefined"&&typeof e.saved_aaSorting=="undefined")e.aaSorting[a][1]=k.asSorting[0];c=0;for(d=k.asSorting.length;c0)e.nTFoot=this.getElementsByTagName("tfoot")[0];if(h)for(a=0;a 0) { 129 | for (var t = time - (time % options.grid.millisPerLine); t >= time - (dimensions.width * options.millisPerPixel); t -= options.grid.millisPerLine) { 130 | canvasContext.beginPath(); 131 | var gx = Math.round(dimensions.width - ((time - t) / options.millisPerPixel)); 132 | canvasContext.moveTo(gx, 0); 133 | canvasContext.lineTo(gx, dimensions.height); 134 | canvasContext.stroke(); 135 | canvasContext.closePath(); 136 | } 137 | } 138 | 139 | // Horizontal (value) dividers. 140 | for (var v = 1; v < options.grid.verticalSections; v++) { 141 | var gy = Math.round(v * dimensions.height / options.grid.verticalSections); 142 | canvasContext.beginPath(); 143 | canvasContext.moveTo(0, gy); 144 | canvasContext.lineTo(dimensions.width, gy); 145 | canvasContext.stroke(); 146 | canvasContext.closePath(); 147 | } 148 | // Bounding rectangle. 149 | canvasContext.beginPath(); 150 | canvasContext.strokeRect(0, 0, dimensions.width, dimensions.height); 151 | canvasContext.closePath(); 152 | canvasContext.restore(); 153 | 154 | // Calculate the current scale of the chart, from all time series. 155 | var maxValue = Number.NaN; 156 | var minValue = Number.NaN; 157 | 158 | for (var d = 0; d < this.seriesSet.length; d++) { 159 | // TODO(ndunn): We could calculate / track these values as they stream in. 160 | var timeSeries = this.seriesSet[d].timeSeries; 161 | if (!isNaN(timeSeries.maxValue)) { 162 | maxValue = !isNaN(maxValue) ? Math.max(maxValue, timeSeries.maxValue) : timeSeries.maxValue; 163 | } 164 | 165 | if (!isNaN(timeSeries.minValue)) { 166 | minValue = !isNaN(minValue) ? Math.min(minValue, timeSeries.minValue) : timeSeries.minValue; 167 | } 168 | } 169 | 170 | if (isNaN(maxValue) && isNaN(minValue)) { 171 | return; 172 | } 173 | 174 | // Scale the maxValue to add padding at the top if required 175 | maxValue = maxValue * options.maxValueScale; 176 | // Set the minimum if we've specified one 177 | if (options.minValue != null) 178 | minValue = options.minValue; 179 | var valueRange = maxValue - minValue; 180 | 181 | // For each data set... 182 | for (var d = 0; d < this.seriesSet.length; d++) { 183 | canvasContext.save(); 184 | var timeSeries = this.seriesSet[d].timeSeries; 185 | var dataSet = timeSeries.data; 186 | var seriesOptions = this.seriesSet[d].options; 187 | 188 | // Delete old data that's moved off the left of the chart. 189 | // We must always keep the last expired data point as we need this to draw the 190 | // line that comes into the chart, but any points prior to that can be removed. 191 | while (dataSet.length >= 2 && dataSet[1][0] < time - (dimensions.width * options.millisPerPixel)) { 192 | dataSet.splice(0, 1); 193 | } 194 | 195 | // Set style for this dataSet. 196 | canvasContext.lineWidth = seriesOptions.lineWidth || 1; 197 | canvasContext.fillStyle = seriesOptions.fillStyle; 198 | canvasContext.strokeStyle = seriesOptions.strokeStyle || '#ffffff'; 199 | // Draw the line... 200 | canvasContext.beginPath(); 201 | // Retain lastX, lastY for calculating the control points of bezier curves. 202 | var firstX = 0, lastX = 0, lastY = 0; 203 | for (var i = 0; i < dataSet.length; i++) { 204 | // TODO: Deal with dataSet.length < 2. 205 | var x = Math.round(dimensions.width - ((time - dataSet[i][0]) / options.millisPerPixel)); 206 | var value = dataSet[i][1]; 207 | var offset = maxValue - value; 208 | var scaledValue = valueRange ? Math.round((offset / valueRange) * dimensions.height) : 0; 209 | var y = Math.max(Math.min(scaledValue, dimensions.height - 1), 1); // Ensure line is always on chart. 210 | 211 | if (i == 0) { 212 | firstX = x; 213 | canvasContext.moveTo(x, y); 214 | } 215 | // Great explanation of Bezier curves: http://en.wikipedia.org/wiki/B�zier_curve#Quadratic_curves 216 | // 217 | // Assuming A was the last point in the line plotted and B is the new point, 218 | // we draw a curve with control points P and Q as below. 219 | // 220 | // A---P 221 | // | 222 | // | 223 | // | 224 | // Q---B 225 | // 226 | // Importantly, A and P are at the same y coordinate, as are B and Q. This is 227 | // so adjacent curves appear to flow as one. 228 | // 229 | else { 230 | canvasContext.bezierCurveTo( // startPoint (A) is implicit from last iteration of loop 231 | Math.round((lastX + x) / 2), lastY, // controlPoint1 (P) 232 | Math.round((lastX + x)) / 2, y, // controlPoint2 (Q) 233 | x, y); // endPoint (B) 234 | } 235 | 236 | lastX = x, lastY = y; 237 | } 238 | if (dataSet.length > 0 && seriesOptions.fillStyle) { 239 | // Close up the fill region. 240 | canvasContext.lineTo(dimensions.width + seriesOptions.lineWidth + 1, lastY); 241 | canvasContext.lineTo(dimensions.width + seriesOptions.lineWidth + 1, dimensions.height + seriesOptions.lineWidth + 1); 242 | canvasContext.lineTo(firstX, dimensions.height + seriesOptions.lineWidth); 243 | canvasContext.fill(); 244 | } 245 | canvasContext.stroke(); 246 | canvasContext.closePath(); 247 | canvasContext.restore(); 248 | } 249 | 250 | // Draw the axis values on the chart. 251 | if (!options.labels.disabled) { 252 | canvasContext.fillStyle = options.labels.fillStyle; 253 | var maxValueString = maxValue.toFixed(2); 254 | var minValueString = minValue.toFixed(2); 255 | canvasContext.fillText(maxValueString, dimensions.width - canvasContext.measureText(maxValueString).width - 2, 10); 256 | canvasContext.fillText(minValueString, dimensions.width - canvasContext.measureText(minValueString).width - 2, dimensions.height - 2); 257 | } 258 | 259 | canvasContext.restore(); // See .save() above. 260 | } 261 | -------------------------------------------------------------------------------- /main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mongo Live 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 37 | 38 | 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 |
queryinsert
updatedelete
getmorecommand
connfaults
flusheslocked %
idx miss %mapped
netInnetOut
88 |
89 | 90 | 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Mongo Live", 3 | "description": "An extension that allows you to view live/real-time MongoDB stats via the REST API.", 4 | "version": "0.5.9", 5 | 6 | "app": { "launch": { "local_path": "main.html" } }, 7 | 8 | "icons": { "16": "icon_16.png", "48": "icon_48.png", "128": "icon_128.png" }, 9 | 10 | "background_page": "background.html", 11 | 12 | "options_page": "options.html", 13 | 14 | "permissions": [ "unlimitedStorage", "http://*/" ] 15 | } 16 | -------------------------------------------------------------------------------- /options.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mongo Live - Options 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 | 38 | 39 | 45 | 46 |
47 | 48 |
49 | 50 | 51 | 52 |
53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
HostnamePortUsernamePassword 
65 |
66 | 67 |
68 | 69 |
70 | 71 |
72 | 73 |
74 |
Please enter a valid hostname.
75 |
Please enter a valid host port.
76 |
Host already exists.
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 | The REST API is the Mongo port + 1,000. 107 | 108 |
109 | 110 | 117 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/screenshot.png -------------------------------------------------------------------------------- /test/dance.js: -------------------------------------------------------------------------------- 1 | 2 | db.dance.drop(); 3 | 4 | for (var idx=0; idx < 100; idx++) { 5 | db.dance.findOne(); 6 | db.dance.insert({n: 't'}); 7 | db.dance.update({x: 1}, {n: 'u'}); 8 | db.dance.remove({n: 't'}); 9 | }; 10 | 11 | for (var idx=0; idx < 30000; idx++) db.dance.findOne(); 12 | 13 | for (var idx=0; idx < 30000; idx++) db.dance.insert({n: 't'}); 14 | 15 | for (var idx=0; idx < 100; idx++) db.dance.update({x: 1}, {n: 'u'}); 16 | 17 | for (var idx=0; idx < 30000; idx++) db.dance.remove({n: 't'}); 18 | 19 | db.dance.drop(); 20 | 21 | -------------------------------------------------------------------------------- /themes/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2011, Deft Labs. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at: 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | /* body { background-color: #402817; text-align: center; font-family: helvetica,arial,sans-serif; margin: 0; padding: 0; } */ 18 | body { background-color: #402817; text-align: center; font-family: sans-serif; margin: 0; padding: 0; } 19 | 20 | .formError { display: none; color: #FF0000; } 21 | 22 | fieldset { text-align: right; } 23 | 24 | #header { background-color: #402817; background-image: url("/images/back-header.png"); background-position: center top; background-repeat: no-repeat; height: 100px; } 25 | 26 | #logo { background-image: url("/images/logo-mongoDB.png"); height: 90px; width: 217px; } 27 | 28 | #headerContent { width: 650px; margin: 0px auto; padding: 0px; padding-top: 10px; position: relative; } 29 | 30 | #mainContainer { width: 100%; margin: 0px auto; padding: 0px; } 31 | 32 | #chartContainer { padding: 10px; margin: 0px auto; text-align: center; } 33 | 34 | .chartName { vertical-align: middle; -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); color: #F6F4CD; margin: 0; padding: 0; font-weight: lighter; } 35 | 36 | .title { color: #EEE; } 37 | 38 | #footer { margin-top: 0px; color: #F6F4CD; font-size: 12px; font-weight: lighter; } 39 | 40 | #footer span { display: block; padding: 5px; } 41 | 42 | #footer a { color: #F6F4CD; text-decoration: none; } 43 | 44 | #footer a:hover { text-decoration: underline; } 45 | 46 | #footer a:visited { color: #F6F4CD; } 47 | 48 | #options { position: absolute; right: 20px; top: 10px; } 49 | 50 | #options a { color: #F6F4CD; text-decoration: underline; font-weight: lighter; font-size: 13px; } 51 | 52 | #statusMsgContainer { display: none; /* margin: 0px auto; */ background-color: #EEE; position:absolute; width: 100%; text-align: center; top: 0px; opacity: .2; } 53 | 54 | #hostSelectContainer { display: none; position: absolute; left: 40px; top: 10px; } 55 | 56 | /* Options page */ 57 | 58 | #optionsContainer { padding-top: 20px; width: 780px; margin: 0px auto; } 59 | 60 | #addHost { margin-bottom: 20px; } 61 | 62 | #addHostContainer { display: none; margin-left: auto; margin-right: auto; padding: 35px; } 63 | #addHostForm { width: 338px; margin:0px auto; } 64 | 65 | #addHostSubmit { margin-right: 7px; } 66 | 67 | #addHostFormErrorMsgs { margin-bottom: 20px; } 68 | 69 | .hostEditIcons { display: inline; } 70 | 71 | .hostEditIcons .ui-icon { float: right; cursor: pointer; } 72 | 73 | -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_3572ac_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_8c291d_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_b83400_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_b83400_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deftlabs/mongo-live/e2c3eec4e8d191ad4a92919422662263dc9b3433/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /themes/pepper-grinder/jquery-ui-1.8.8.custom.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 1.8.8 3 | * 4 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | */ 10 | 11 | /* Layout helpers 12 | ----------------------------------*/ 13 | .ui-helper-hidden { display: none; } 14 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 15 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 16 | .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 17 | .ui-helper-clearfix { display: inline-block; } 18 | /* required comment for clearfix to work in Opera \*/ 19 | * html .ui-helper-clearfix { height:1%; } 20 | .ui-helper-clearfix { display:block; } 21 | /* end clearfix */ 22 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 23 | 24 | 25 | /* Interaction Cues 26 | ----------------------------------*/ 27 | .ui-state-disabled { cursor: default !important; } 28 | 29 | 30 | /* Icons 31 | ----------------------------------*/ 32 | 33 | /* states and images */ 34 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 35 | 36 | 37 | /* Misc visuals 38 | ----------------------------------*/ 39 | 40 | /* Overlays */ 41 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 42 | 43 | 44 | /* 45 | * jQuery UI CSS Framework 1.8.8 46 | * 47 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 48 | * Dual licensed under the MIT or GPL Version 2 licenses. 49 | * http://jquery.org/license 50 | * 51 | * http://docs.jquery.com/UI/Theming/API 52 | * 53 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=ffffff&bgTextureHeader=23_fine_grain.png&bgImgOpacityHeader=15&borderColorHeader=d4d1bf&fcHeader=453821&iconColorHeader=b83400&bgColorContent=eceadf&bgTextureContent=23_fine_grain.png&bgImgOpacityContent=10&borderColorContent=d9d6c4&fcContent=1f1f1f&iconColorContent=222222&bgColorDefault=f8f7f6&bgTextureDefault=23_fine_grain.png&bgImgOpacityDefault=10&borderColorDefault=cbc7bd&fcDefault=654b24&iconColorDefault=b83400&bgColorHover=654b24&bgTextureHover=23_fine_grain.png&bgImgOpacityHover=65&borderColorHover=654b24&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=eceadf&bgTextureActive=23_fine_grain.png&bgImgOpacityActive=15&borderColorActive=d9d6c4&fcActive=140f06&iconColorActive=8c291d&bgColorHighlight=f7f3de&bgTextureHighlight=23_fine_grain.png&bgImgOpacityHighlight=15&borderColorHighlight=b2a266&fcHighlight=3a3427&iconColorHighlight=3572ac&bgColorError=b83400&bgTextureError=23_fine_grain.png&bgImgOpacityError=68&borderColorError=681818&fcError=ffffff&iconColorError=fbdb93&bgColorOverlay=6e4f1c&bgTextureOverlay=16_diagonal_maze.png&bgImgOpacityOverlay=20&opacityOverlay=60&bgColorShadow=000000&bgTextureShadow=16_diagonal_maze.png&bgImgOpacityShadow=40&opacityShadow=60&thicknessShadow=5px&offsetTopShadow=0&offsetLeftShadow=-10px&cornerRadiusShadow=18px 54 | */ 55 | 56 | 57 | /* Component containers 58 | ----------------------------------*/ 59 | .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } 60 | .ui-widget .ui-widget { font-size: 1em; } 61 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } 62 | .ui-widget-content { border: 1px solid #d9d6c4; background: #eceadf url(images/ui-bg_fine-grain_10_eceadf_60x60.png) 50% 50% repeat; color: #1f1f1f; } 63 | .ui-widget-content a { color: #1f1f1f; } 64 | .ui-widget-header { border: 1px solid #d4d1bf; background: #ffffff url(images/ui-bg_fine-grain_15_ffffff_60x60.png) 50% 50% repeat; color: #453821; font-weight: bold; } 65 | .ui-widget-header a { color: #453821; } 66 | 67 | /* Interaction states 68 | ----------------------------------*/ 69 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cbc7bd; background: #f8f7f6 url(images/ui-bg_fine-grain_10_f8f7f6_60x60.png) 50% 50% repeat; font-weight: bold; color: #654b24; } 70 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #654b24; text-decoration: none; } 71 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #654b24; background: #654b24 url(images/ui-bg_fine-grain_65_654b24_60x60.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } 72 | .ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } 73 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #d9d6c4; background: #eceadf url(images/ui-bg_fine-grain_15_eceadf_60x60.png) 50% 50% repeat; font-weight: bold; color: #140f06; } 74 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #140f06; text-decoration: none; } 75 | .ui-widget :active { outline: none; } 76 | 77 | /* Interaction Cues 78 | ----------------------------------*/ 79 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #b2a266; background: #f7f3de url(images/ui-bg_fine-grain_15_f7f3de_60x60.png) 50% 50% repeat; color: #3a3427; } 80 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #3a3427; } 81 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #681818; background: #b83400 url(images/ui-bg_fine-grain_68_b83400_60x60.png) 50% 50% repeat; color: #ffffff; } 82 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } 83 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } 84 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 85 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 86 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 87 | 88 | /* Icons 89 | ----------------------------------*/ 90 | 91 | /* states and images */ 92 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } 93 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } 94 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_b83400_256x240.png); } 95 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_b83400_256x240.png); } 96 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } 97 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_8c291d_256x240.png); } 98 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_3572ac_256x240.png); } 99 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_fbdb93_256x240.png); } 100 | 101 | /* positioning */ 102 | .ui-icon-carat-1-n { background-position: 0 0; } 103 | .ui-icon-carat-1-ne { background-position: -16px 0; } 104 | .ui-icon-carat-1-e { background-position: -32px 0; } 105 | .ui-icon-carat-1-se { background-position: -48px 0; } 106 | .ui-icon-carat-1-s { background-position: -64px 0; } 107 | .ui-icon-carat-1-sw { background-position: -80px 0; } 108 | .ui-icon-carat-1-w { background-position: -96px 0; } 109 | .ui-icon-carat-1-nw { background-position: -112px 0; } 110 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 111 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 112 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 113 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 114 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 115 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 116 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 117 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 118 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 119 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 120 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 121 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 122 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 123 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 124 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 125 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 126 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 127 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 128 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 129 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 130 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 131 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 132 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 133 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 134 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 135 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 136 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 137 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 138 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 139 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 140 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 141 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 142 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 143 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 144 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 145 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 146 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 147 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 148 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 149 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 150 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 151 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 152 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 153 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 154 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 155 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 156 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 157 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 158 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 159 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 160 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 161 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 162 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 163 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 164 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 165 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 166 | .ui-icon-arrow-4 { background-position: 0 -80px; } 167 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 168 | .ui-icon-extlink { background-position: -32px -80px; } 169 | .ui-icon-newwin { background-position: -48px -80px; } 170 | .ui-icon-refresh { background-position: -64px -80px; } 171 | .ui-icon-shuffle { background-position: -80px -80px; } 172 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 173 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 174 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 175 | .ui-icon-folder-open { background-position: -16px -96px; } 176 | .ui-icon-document { background-position: -32px -96px; } 177 | .ui-icon-document-b { background-position: -48px -96px; } 178 | .ui-icon-note { background-position: -64px -96px; } 179 | .ui-icon-mail-closed { background-position: -80px -96px; } 180 | .ui-icon-mail-open { background-position: -96px -96px; } 181 | .ui-icon-suitcase { background-position: -112px -96px; } 182 | .ui-icon-comment { background-position: -128px -96px; } 183 | .ui-icon-person { background-position: -144px -96px; } 184 | .ui-icon-print { background-position: -160px -96px; } 185 | .ui-icon-trash { background-position: -176px -96px; } 186 | .ui-icon-locked { background-position: -192px -96px; } 187 | .ui-icon-unlocked { background-position: -208px -96px; } 188 | .ui-icon-bookmark { background-position: -224px -96px; } 189 | .ui-icon-tag { background-position: -240px -96px; } 190 | .ui-icon-home { background-position: 0 -112px; } 191 | .ui-icon-flag { background-position: -16px -112px; } 192 | .ui-icon-calendar { background-position: -32px -112px; } 193 | .ui-icon-cart { background-position: -48px -112px; } 194 | .ui-icon-pencil { background-position: -64px -112px; } 195 | .ui-icon-clock { background-position: -80px -112px; } 196 | .ui-icon-disk { background-position: -96px -112px; } 197 | .ui-icon-calculator { background-position: -112px -112px; } 198 | .ui-icon-zoomin { background-position: -128px -112px; } 199 | .ui-icon-zoomout { background-position: -144px -112px; } 200 | .ui-icon-search { background-position: -160px -112px; } 201 | .ui-icon-wrench { background-position: -176px -112px; } 202 | .ui-icon-gear { background-position: -192px -112px; } 203 | .ui-icon-heart { background-position: -208px -112px; } 204 | .ui-icon-star { background-position: -224px -112px; } 205 | .ui-icon-link { background-position: -240px -112px; } 206 | .ui-icon-cancel { background-position: 0 -128px; } 207 | .ui-icon-plus { background-position: -16px -128px; } 208 | .ui-icon-plusthick { background-position: -32px -128px; } 209 | .ui-icon-minus { background-position: -48px -128px; } 210 | .ui-icon-minusthick { background-position: -64px -128px; } 211 | .ui-icon-close { background-position: -80px -128px; } 212 | .ui-icon-closethick { background-position: -96px -128px; } 213 | .ui-icon-key { background-position: -112px -128px; } 214 | .ui-icon-lightbulb { background-position: -128px -128px; } 215 | .ui-icon-scissors { background-position: -144px -128px; } 216 | .ui-icon-clipboard { background-position: -160px -128px; } 217 | .ui-icon-copy { background-position: -176px -128px; } 218 | .ui-icon-contact { background-position: -192px -128px; } 219 | .ui-icon-image { background-position: -208px -128px; } 220 | .ui-icon-video { background-position: -224px -128px; } 221 | .ui-icon-script { background-position: -240px -128px; } 222 | .ui-icon-alert { background-position: 0 -144px; } 223 | .ui-icon-info { background-position: -16px -144px; } 224 | .ui-icon-notice { background-position: -32px -144px; } 225 | .ui-icon-help { background-position: -48px -144px; } 226 | .ui-icon-check { background-position: -64px -144px; } 227 | .ui-icon-bullet { background-position: -80px -144px; } 228 | .ui-icon-radio-off { background-position: -96px -144px; } 229 | .ui-icon-radio-on { background-position: -112px -144px; } 230 | .ui-icon-pin-w { background-position: -128px -144px; } 231 | .ui-icon-pin-s { background-position: -144px -144px; } 232 | .ui-icon-play { background-position: 0 -160px; } 233 | .ui-icon-pause { background-position: -16px -160px; } 234 | .ui-icon-seek-next { background-position: -32px -160px; } 235 | .ui-icon-seek-prev { background-position: -48px -160px; } 236 | .ui-icon-seek-end { background-position: -64px -160px; } 237 | .ui-icon-seek-start { background-position: -80px -160px; } 238 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 239 | .ui-icon-seek-first { background-position: -80px -160px; } 240 | .ui-icon-stop { background-position: -96px -160px; } 241 | .ui-icon-eject { background-position: -112px -160px; } 242 | .ui-icon-volume-off { background-position: -128px -160px; } 243 | .ui-icon-volume-on { background-position: -144px -160px; } 244 | .ui-icon-power { background-position: 0 -176px; } 245 | .ui-icon-signal-diag { background-position: -16px -176px; } 246 | .ui-icon-signal { background-position: -32px -176px; } 247 | .ui-icon-battery-0 { background-position: -48px -176px; } 248 | .ui-icon-battery-1 { background-position: -64px -176px; } 249 | .ui-icon-battery-2 { background-position: -80px -176px; } 250 | .ui-icon-battery-3 { background-position: -96px -176px; } 251 | .ui-icon-circle-plus { background-position: 0 -192px; } 252 | .ui-icon-circle-minus { background-position: -16px -192px; } 253 | .ui-icon-circle-close { background-position: -32px -192px; } 254 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 255 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 256 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 257 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 258 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 259 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 260 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 261 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 262 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 263 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 264 | .ui-icon-circle-check { background-position: -208px -192px; } 265 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 266 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 267 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 268 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 269 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 270 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 271 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 272 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 273 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 274 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 275 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 276 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 277 | 278 | 279 | /* Misc visuals 280 | ----------------------------------*/ 281 | 282 | /* Corner radius */ 283 | .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; } 284 | .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; } 285 | .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } 286 | .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } 287 | .ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; } 288 | .ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } 289 | .ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } 290 | .ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } 291 | .ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; } 292 | 293 | /* Overlays */ 294 | .ui-widget-overlay { background: #6e4f1c url(images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png) 50% 50% repeat; opacity: .60;filter:Alpha(Opacity=60); } 295 | .ui-widget-shadow { margin: 0 0 0 -10px; padding: 5px; background: #000000 url(images/ui-bg_diagonal-maze_40_000000_10x10.png) 50% 50% repeat; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 18px; -webkit-border-radius: 18px; border-radius: 18px; }/* 296 | * jQuery UI Resizable 1.8.8 297 | * 298 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 299 | * Dual licensed under the MIT or GPL Version 2 licenses. 300 | * http://jquery.org/license 301 | * 302 | * http://docs.jquery.com/UI/Resizable#theming 303 | */ 304 | .ui-resizable { position: relative;} 305 | .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} 306 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 307 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 308 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 309 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 310 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 311 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 312 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 313 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 314 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* 315 | * jQuery UI Selectable 1.8.8 316 | * 317 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 318 | * Dual licensed under the MIT or GPL Version 2 licenses. 319 | * http://jquery.org/license 320 | * 321 | * http://docs.jquery.com/UI/Selectable#theming 322 | */ 323 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 324 | /* 325 | * jQuery UI Accordion 1.8.8 326 | * 327 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 328 | * Dual licensed under the MIT or GPL Version 2 licenses. 329 | * http://jquery.org/license 330 | * 331 | * http://docs.jquery.com/UI/Accordion#theming 332 | */ 333 | /* IE/Win - Fix animation bug - #4615 */ 334 | .ui-accordion { width: 100%; } 335 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 336 | .ui-accordion .ui-accordion-li-fix { display: inline; } 337 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 338 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 339 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 340 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 341 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 342 | .ui-accordion .ui-accordion-content-active { display: block; }/* 343 | * jQuery UI Autocomplete 1.8.8 344 | * 345 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 346 | * Dual licensed under the MIT or GPL Version 2 licenses. 347 | * http://jquery.org/license 348 | * 349 | * http://docs.jquery.com/UI/Autocomplete#theming 350 | */ 351 | .ui-autocomplete { position: absolute; cursor: default; } 352 | 353 | /* workarounds */ 354 | * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 355 | 356 | /* 357 | * jQuery UI Menu 1.8.8 358 | * 359 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 360 | * Dual licensed under the MIT or GPL Version 2 licenses. 361 | * http://jquery.org/license 362 | * 363 | * http://docs.jquery.com/UI/Menu#theming 364 | */ 365 | .ui-menu { 366 | list-style:none; 367 | padding: 2px; 368 | margin: 0; 369 | display:block; 370 | float: left; 371 | } 372 | .ui-menu .ui-menu { 373 | margin-top: -3px; 374 | } 375 | .ui-menu .ui-menu-item { 376 | margin:0; 377 | padding: 0; 378 | zoom: 1; 379 | float: left; 380 | clear: left; 381 | width: 100%; 382 | } 383 | .ui-menu .ui-menu-item a { 384 | text-decoration:none; 385 | display:block; 386 | padding:.2em .4em; 387 | line-height:1.5; 388 | zoom:1; 389 | } 390 | .ui-menu .ui-menu-item a.ui-state-hover, 391 | .ui-menu .ui-menu-item a.ui-state-active { 392 | font-weight: normal; 393 | margin: -1px; 394 | } 395 | /* 396 | * jQuery UI Button 1.8.8 397 | * 398 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 399 | * Dual licensed under the MIT or GPL Version 2 licenses. 400 | * http://jquery.org/license 401 | * 402 | * http://docs.jquery.com/UI/Button#theming 403 | */ 404 | .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ 405 | .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ 406 | button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ 407 | .ui-button-icons-only { width: 3.4em; } 408 | button.ui-button-icons-only { width: 3.7em; } 409 | 410 | /*button text element */ 411 | .ui-button .ui-button-text { display: block; line-height: 1.4; } 412 | .ui-button-text-only .ui-button-text { padding: .4em 1em; } 413 | .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } 414 | .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } 415 | .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } 416 | .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } 417 | /* no icon support for input elements, provide padding by default */ 418 | input.ui-button { padding: .4em 1em; } 419 | 420 | /*button icon element(s) */ 421 | .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } 422 | .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } 423 | .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } 424 | .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 425 | .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 426 | 427 | /*button sets*/ 428 | .ui-buttonset { margin-right: 7px; } 429 | .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } 430 | 431 | /* workarounds */ 432 | button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ 433 | /* 434 | * jQuery UI Dialog 1.8.8 435 | * 436 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 437 | * Dual licensed under the MIT or GPL Version 2 licenses. 438 | * http://jquery.org/license 439 | * 440 | * http://docs.jquery.com/UI/Dialog#theming 441 | */ 442 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 443 | .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } 444 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 445 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 446 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 447 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 448 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 449 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 450 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 451 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 452 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 453 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 454 | /* 455 | * jQuery UI Slider 1.8.8 456 | * 457 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 458 | * Dual licensed under the MIT or GPL Version 2 licenses. 459 | * http://jquery.org/license 460 | * 461 | * http://docs.jquery.com/UI/Slider#theming 462 | */ 463 | .ui-slider { position: relative; text-align: left; } 464 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 465 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 466 | 467 | .ui-slider-horizontal { height: .8em; } 468 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 469 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 470 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 471 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 472 | 473 | .ui-slider-vertical { width: .8em; height: 100px; } 474 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 475 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 476 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 477 | .ui-slider-vertical .ui-slider-range-max { top: 0; }/* 478 | * jQuery UI Tabs 1.8.8 479 | * 480 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 481 | * Dual licensed under the MIT or GPL Version 2 licenses. 482 | * http://jquery.org/license 483 | * 484 | * http://docs.jquery.com/UI/Tabs#theming 485 | */ 486 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 487 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 488 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 489 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 490 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 491 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 492 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 493 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 494 | .ui-tabs .ui-tabs-hide { display: none !important; } 495 | /* 496 | * jQuery UI Datepicker 1.8.8 497 | * 498 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 499 | * Dual licensed under the MIT or GPL Version 2 licenses. 500 | * http://jquery.org/license 501 | * 502 | * http://docs.jquery.com/UI/Datepicker#theming 503 | */ 504 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 505 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 506 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 507 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 508 | .ui-datepicker .ui-datepicker-prev { left:2px; } 509 | .ui-datepicker .ui-datepicker-next { right:2px; } 510 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 511 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 512 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 513 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 514 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 515 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 516 | .ui-datepicker select.ui-datepicker-month, 517 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 518 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 519 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 520 | .ui-datepicker td { border: 0; padding: 1px; } 521 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 522 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 523 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 524 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 525 | 526 | /* with multiple calendars */ 527 | .ui-datepicker.ui-datepicker-multi { width:auto; } 528 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 529 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 530 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 531 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 532 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 533 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 534 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 535 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 536 | .ui-datepicker-row-break { clear:both; width:100%; } 537 | 538 | /* RTL support */ 539 | .ui-datepicker-rtl { direction: rtl; } 540 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 541 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 542 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 543 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 544 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 545 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 546 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 547 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 548 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 549 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 550 | 551 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 552 | .ui-datepicker-cover { 553 | display: none; /*sorry for IE5*/ 554 | display/**/: block; /*sorry for IE5*/ 555 | position: absolute; /*must have*/ 556 | z-index: -1; /*must have*/ 557 | filter: mask(); /*must have*/ 558 | top: -4px; /*must have*/ 559 | left: -4px; /*must have*/ 560 | width: 200px; /*must have*/ 561 | height: 200px; /*must have*/ 562 | }/* 563 | * jQuery UI Progressbar 1.8.8 564 | * 565 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 566 | * Dual licensed under the MIT or GPL Version 2 licenses. 567 | * http://jquery.org/license 568 | * 569 | * http://docs.jquery.com/UI/Progressbar#theming 570 | */ 571 | .ui-progressbar { height:2em; text-align: left; } 572 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } --------------------------------------------------------------------------------