From 3369f0253c24bcc888f8e80d76e3203516216349 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E2=80=9Cshentao=E2=80=9D?= Date: Tue, 11 Oct 2016 21:30:46 +0800 Subject: [PATCH] modify frame page MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I0c4bfab53365c7b70c23c8ff4a2bafef6a33e2ac Signed-off-by: “shentao” --- .../src/main/webapp/common/about.html | 2 +- .../main/webapp/common/css/ZteIctIcons/Read Me.txt | 7 - .../common/css/ZteIctIcons/demo-files/demo.css | 152 - .../common/css/ZteIctIcons/demo-files/demo.js | 30 - .../main/webapp/common/css/ZteIctIcons/demo.html | 5015 -------- .../common/css/ZteIctIcons/fonts/ZteIctIcons.eot | Bin 96492 -> 0 bytes .../common/css/ZteIctIcons/fonts/ZteIctIcons.svg | 321 - .../common/css/ZteIctIcons/fonts/ZteIctIcons.ttf | Bin 96312 -> 0 bytes .../common/css/ZteIctIcons/fonts/ZteIctIcons.woff | Bin 96388 -> 0 bytes .../webapp/common/css/ZteIctIcons/selection.json | 9569 --------------- .../main/webapp/common/css/ZteIctIcons/style.css | 960 -- .../src/main/webapp/common/css/changepwd-apk.css | 84 - .../src/main/webapp/common/css/changepwd.css | 84 - .../src/main/webapp/common/default.html | 213 +- .../common/i18n/openo-nsoc-i18n-en-US.properties | 23 - .../common/i18n/openo-nsoc-i18n-zh-CN.properties | 32 - .../common/i18n/openo-roc-i18n-en-US.properties | 21 - .../common/i18n/openo-roc-i18n-zh-CN.properties | 107 - .../common/i18n/openo-umc-i18n-en-US.properties | 27 - .../common/i18n/openo-umc-i18n-zh-CN.properties | 27 - .../i18n/web-framework-i18n-en-US.properties | 7 +- .../i18n/web-framework-i18n-zh-CN.properties | 226 - ...s => web-framework-login-i18n-en-US.properties} | 0 ...> web-framework-mainPage-i18n-en-US.properties} | 0 .../i18n/web-framework-menu-i18n-en-US.properties | 41 + .../menu_link.js} | 8 +- .../src/main/webapp/common/js/core/const.js | 12 +- .../main/webapp/common/js/core/openoFrameWork.js | 44 +- .../webapp/common/js/core/openoFrameWork.min.js | 165 - .../webapp/common/js/i18n/loadi18n-openo-nsoc.js | 20 - .../webapp/common/js/i18n/loadi18n-openo-umc.js | 19 - .../common/js/international/loadi18n-login.js | 49 - .../webapp/common/js/international/loadi18n.js | 30 +- .../js/international/loadi18nApp_universal.js | 24 - .../src/main/webapp/common/js/mainpage/about.js | 2 +- .../webapp/common/js/mainpage/load_mainPage.js | 7 +- .../main/webapp/common/js/security/changepwd.js | 191 - .../src/main/webapp/common/json/main-page.json | 2 +- .../src/main/webapp/common/login.html | 5 +- .../src/main/webapp/common/main-page.html | 2 +- .../src/main/webapp/common/main_Fmegabar.html | 51 +- .../src/main/webapp/common/main_Fsiderbar.html | 267 +- .../src/main/webapp/common/main_blank.html | 15 + .../src/main/webapp/common/main_siderbar.html | 160 - .../data-tables/jquery.dataTables-1.9.4.js | 12101 ------------------- .../data-tables/jquery.dataTables-1.9.4.min.js | 155 - 46 files changed, 351 insertions(+), 29926 deletions(-) delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/Read Me.txt delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.css delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo.html delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.eot delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.svg delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.ttf delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.woff delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/selection.json delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/style.css delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/changepwd-apk.css delete mode 100644 openo-portal/portal-common/src/main/webapp/common/css/changepwd.css delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-en-US.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-zh-CN.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-en-US.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-zh-CN.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-en-US.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-zh-CN.properties delete mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-zh-CN.properties rename openo-portal/portal-common/src/main/webapp/common/i18n/{web-portal-login-integration-i18n-en-US.properties => web-framework-login-i18n-en-US.properties} (100%) rename openo-portal/portal-common/src/main/webapp/common/i18n/{web-framework-integration-i18n-en-US.properties => web-framework-mainPage-i18n-en-US.properties} (100%) create mode 100644 openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-menu-i18n-en-US.properties rename openo-portal/portal-common/src/main/webapp/common/js/{i18n/loadi18n-openo-roc.js => constants/menu_link.js} (72%) delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.min.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/i18n/loadi18n-openo-nsoc.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/i18n/loadi18n-openo-umc.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/international/loadi18n-login.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/international/loadi18nApp_universal.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/js/security/changepwd.js create mode 100644 openo-portal/portal-common/src/main/webapp/common/main_blank.html delete mode 100644 openo-portal/portal-common/src/main/webapp/common/main_siderbar.html delete mode 100644 openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.js delete mode 100644 openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.min.js diff --git a/openo-portal/portal-common/src/main/webapp/common/about.html b/openo-portal/portal-common/src/main/webapp/common/about.html index c0143021..1f273218 100644 --- a/openo-portal/portal-common/src/main/webapp/common/about.html +++ b/openo-portal/portal-common/src/main/webapp/common/about.html @@ -24,7 +24,7 @@
- +
diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/Read Me.txt b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/Read Me.txt deleted file mode 100644 index 8491652f..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/Read Me.txt +++ /dev/null @@ -1,7 +0,0 @@ -Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. - -To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts - -You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. - -You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.css b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.css deleted file mode 100644 index 8d3fb4d6..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.css +++ /dev/null @@ -1,152 +0,0 @@ -body { - padding: 0; - margin: 0; - font-family: sans-serif; - font-size: 1em; - line-height: 1.5; - color: #555; - background: #fff; -} -h1 { - font-size: 1.5em; - font-weight: normal; -} -small { - font-size: .66666667em; -} -a { - color: #e74c3c; - text-decoration: none; -} -a:hover, a:focus { - box-shadow: 0 1px #e74c3c; -} -.bshadow0, input { - box-shadow: inset 0 -2px #e7e7e7; -} -input:hover { - box-shadow: inset 0 -2px #ccc; -} -input, fieldset { - font-family: sans-serif; - font-size: 1em; - margin: 0; - padding: 0; - border: 0; -} -input { - color: inherit; - line-height: 1.5; - height: 1.5em; - padding: .25em 0; -} -input:focus { - outline: none; - box-shadow: inset 0 -2px #449fdb; -} -.glyph { - font-size: 16px; - width: 15em; - padding-bottom: 1em; - margin-right: 4em; - margin-bottom: 1em; - float: left; - overflow: hidden; -} -.liga { - width: 80%; - width: calc(100% - 2.5em); -} -.talign-right { - text-align: right; -} -.talign-center { - text-align: center; -} -.bgc1 { - background: #f1f1f1; -} -.fgc1 { - color: #999; -} -.fgc0 { - color: #000; -} -p { - margin-top: 1em; - margin-bottom: 1em; -} -.mvm { - margin-top: .75em; - margin-bottom: .75em; -} -.mtn { - margin-top: 0; -} -.mtl, .mal { - margin-top: 1.5em; -} -.mbl, .mal { - margin-bottom: 1.5em; -} -.mal, .mhl { - margin-left: 1.5em; - margin-right: 1.5em; -} -.mhmm { - margin-left: 1em; - margin-right: 1em; -} -.mls { - margin-left: .25em; -} -.ptl { - padding-top: 1.5em; -} -.pbs, .pvs { - padding-bottom: .25em; -} -.pvs, .pts { - padding-top: .25em; -} -.unit { - float: left; -} -.unitRight { - float: right; -} -.size1of2 { - width: 50%; -} -.size1of1 { - width: 100%; -} -.clearfix:before, .clearfix:after { - content: " "; - display: table; -} -.clearfix:after { - clear: both; -} -.hidden-true { - display: none; -} -.textbox0 { - width: 3em; - background: #f1f1f1; - padding: .25em .5em; - line-height: 1.5; - height: 1.5em; -} -#testDrive { - display: block; - padding-top: 24px; - line-height: 1.5; -} -.fs0 { - font-size: 16px; -} -.fs1 { - font-size: 16px; -} - diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.js b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.js deleted file mode 100644 index 6f45f1c4..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo-files/demo.js +++ /dev/null @@ -1,30 +0,0 @@ -if (!('boxShadow' in document.body.style)) { - document.body.setAttribute('class', 'noBoxShadow'); -} - -document.body.addEventListener("click", function(e) { - var target = e.target; - if (target.tagName === "INPUT" && - target.getAttribute('class').indexOf('liga') === -1) { - target.select(); - } -}); - -(function() { - var fontSize = document.getElementById('fontSize'), - testDrive = document.getElementById('testDrive'), - testText = document.getElementById('testText'); - function updateTest() { - testDrive.innerHTML = testText.value || String.fromCharCode(160); - if (window.icomoonLiga) { - window.icomoonLiga(testDrive); - } - } - function updateSize() { - testDrive.style.fontSize = fontSize.value + 'px'; - } - fontSize.addEventListener('change', updateSize, false); - testText.addEventListener('input', updateTest, false); - testText.addEventListener('change', updateTest, false); - updateSize(); -}()); diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo.html b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo.html deleted file mode 100644 index 3ca2a1fb..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/demo.html +++ /dev/null @@ -1,5015 +0,0 @@ - - - - - IcoMoon Demo - - - - - -
-

Font Name: ZteIctIcons (Glyphs: 311)

-
-
-

Grid Size: Unknown

-
-
- - - - ict-NFV -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-VNFM -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-VNF -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-VNFC -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-VIM -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-VDU -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-host -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-NS -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-moc-uca-public -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-topo-commongroup20x20 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-vapel_chgpile -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-car -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-chgpile -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-chgposition -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-chgstation -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-common_dc -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-common_ncd -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-common_ncd_break -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-common_sc -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-networkTree -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-resourceType -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-tree-icon -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-topo-group20x20 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-topo-root -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-topo-virtual20x20 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-common_ncd_stop -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-moc-root -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-uep-topo-undefinedgroup20x20 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-analysis -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-bindingRelationship -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-browsePolicy -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-businessManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-cardData -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-dailyManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-enterpriseCustomer -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-equipmentBlacklist -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-equipmentModel -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-examine -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-failureList -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-familyCustomer -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-fileTool -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-groupManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-notice -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-policy -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-portal -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-recordQuery -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-resourceManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-ruleManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-sucessRate -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-terminalManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-tools -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-track -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-userManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-versionManagment -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-workOrder -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-save -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Magnifier -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-zoomIn -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-zoomOut -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-delete -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-refresh -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-modify -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-new -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-cpu -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-memory -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-currentAlarm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-noticeAlarm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-historyAlarm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-close -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-table -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-next -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-pre -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-roleset -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-role -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-user -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-empty -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-noticeFilter -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-alarmTurn -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-advice -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-clearAlarm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-alarmBox -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-afreshDef -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-alarmFilter -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-manAnalysis -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-drill -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-gear -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-process -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-unacknownledge -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-acknownledge -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Operation -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-cloud -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-computer -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-alarm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-import -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-export -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Admin -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-allSelected -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-angleRight -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-arrowLeft -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-arrowLeftAll -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-arrowRight -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-arrowRightAll -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-autoFind -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-back -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-ball -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-bell -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-blackList -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-breakLink -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-cancle -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-circle -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-closeTree -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-configmap -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-department -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-detail -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-displaySwitch -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-file -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-filter -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-find -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-folder -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-forceOut -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-fullScreen -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Graphical -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-helpTip -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-hide -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-history -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-launchingTower -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-layout -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-legendhide -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-legendshow -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-link -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-lock -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-ltArrow -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Maintain -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-maximize -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Monitor -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-move -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-newShortcut -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-openTree -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-poNode -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-print -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-product -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-rbArrow -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-reduction -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-rename -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-select -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-selectAll -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-selectLeft -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-selectRight -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-show -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-shrink -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-start -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-stop -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-stretch -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-strikeOut -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-Synchronous -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-toRight -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-treefile -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-treeFolder -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-unlock -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-userCompare -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-userDispatch -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-xml -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-zoomOverView -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-zoomReset -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-hillstone -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-ubuntu -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-tru64 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-sever-as400 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-fileserver -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-sapccms -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-activedirectory -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-sliverstream -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-oracleas -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-freeBSD -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-exchange2007 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-exchange2003 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-dotnet -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-lenovo -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-router-alu7750 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-nds -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-php -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-glassfish -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-telnet -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-dns -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-url -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database-mysql -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-ping -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-ftp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-rest -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-soap -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-macos -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-openbsd -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-debian -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-iis -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-mailserver -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-websphere -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-apache -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-jboss -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-a10bala -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster-vcs -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-hpeva -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-zte -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-h3c -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-ibm-blade -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-secfox -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-segw -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-zteatca -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-zteips -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-sdn-controller -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-hpux -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-ops -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-sanswitch-brocade -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-bind -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-dns -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-ems -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-mediator -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-ntp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-ota -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-tomcat -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-trend -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-tsm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-weblogic -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster-hacmp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster-nec -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster-ns -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-cluster-sg -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database-mssql -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database-oracle -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database-sybase -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-database-sybaseiq -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-dellmd -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-emc -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-eternus -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-fujitsu -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-hds -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-hpaio -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-hpmsa -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-ibm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-ibmsm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-macrosan -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-netapp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-diskraid-sun -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-checkpoint -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-cisco -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-cisco2 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-juniper -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-neteye -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-zte -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-ztemf -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-firewall-zteutm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-gather -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-ibp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-ibp-ibp2000 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-net -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-alteon -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-appdirector -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-atca-lb10 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-cisco-ucs -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-dcs -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-delta -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-dp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-e9000 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-f5bigip -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-f5bigip2 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-gbe2c -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-h3c -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-hpblc -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-imm -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-secsis -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-vc -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-ztepower -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-ztesgs -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-other-zxsdr-nt -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-router -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-router-cisco -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-router-juniper -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-router-zte -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-sdn-host -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-sdn-switch -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-aix -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-klinux -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-redhat -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-solaris -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-suse -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-windows -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-server-zxve -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-cisco-mds -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-md3000 -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-netvault -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-sanswitch-zte -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch-at -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch-cisco -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch-h3c -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch-juniper -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch-zte -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-tapelib-hpmsl -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-tapelib-ibmts -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-tapelib-sunts -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-Virtualnetwork -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-app-netnumen -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-sdn-vnet -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-storage-sanswitch-hp -
-
- - -
-
- liga: - -
-
-
-
- - - - ict-it-switch -
-
- - -
-
- liga: - -
-
-
- - -
-

Font Test Drive

- - - -
  -
-
- -
-

Generated by IcoMoon

-
- - - - diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.eot b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.eot deleted file mode 100644 index 7ee2ef906a3a3aea8d36ef707d40b0a5cc60d543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96492 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�N9y@m6pT4RR{_di4z$gE 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

vEl?$Q}3({>! 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 diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.svg b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.svg deleted file mode 100644 index f8db3a1e..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.svg +++ /dev/null @@ -1,321 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.ttf b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.ttf deleted file mode 100644 index 1333d3b26d7a689c08c4951c129ffd7d5bf7f6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96312 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
Ca*Nn-H5^2+oFURS(tQ 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%0D~ z(}5IGO1pW3Ww*83dL#9qt=R6gPdXgwsp%EzCo?KDE3+h74Ov&_w9k1z+mQWHPD;+Q zoMX8Kx!3bH4Mw^dn@)=+*o+7a!=LT z>gej-)nC-~*A~_uuIpQLxM6$4*j>vOXDq(BkHQ#L6x?)S~vDO=H z*=@rshgQD7Dr!~#>aFb!?UQRhT6A<}kx?;NeyKdfB z+pXPPx%rEp=AN(r>2mMq_s85{z2(^l><{!j*zlmIucYt2herEb`p<8x-?n4hrH3~R z7zUml`1+B?9p#V826G>4eeA=XB|AHI?%Vm{j}$+myW)1W?E3P@wLjkS8`wdczxvYxp7#ErdKdynnC_GHqN7lsT&qfa@W+WpknQ#bcD@AEue z^7PC5v-a=WKmJVEGoLhF_znT2Adfb>-Bx)0Wefr`t|%KmE?>kH(V5D#v=phQ2-m$0D$VI~BIHJWFf0{)^cs!8iaePrA z9ftJFfwUOuj6hm~bax=Fzzp|l>z4I3>$cRa+uVJ>s1-)p>j8PQ4qLX~j7#rtUf+BF zJ)66YIa%4jnOhH?-~G`2u~SCKptD5T-&?}>UeLIH;{#o5dI3SP9xj&;z=dXwsP}tw zRc`LyV%)gCdwuVkE$cgsYacS=DS*$~oh7Oi?r#h3a3hNB7VdhD@NgYCwpR2I*8T@v Qge%#zKq7~?@|}PG7wu`(IsgCw diff --git a/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.woff b/openo-portal/portal-common/src/main/webapp/common/css/ZteIctIcons/fonts/ZteIctIcons.woff deleted file mode 100644 index c038d133946b70d5ecf31f05cb20118e57307545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96388 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 - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

- - -
@@ -254,76 +226,17 @@
- - - - - - - - - - - - - - - - - - - - - + + - diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-en-US.properties deleted file mode 100644 index cf4261e5..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-en-US.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -org_openo_orchestrator_nsoc_service=Service -org_openo_orchestrator_nsoc_orchestrator=Orchestrator -org_openo_orchestrator_nsoc_model_design=Model Design -org_openo_orchestrator_nsoc_node_type=Node Type -org_openo_orchestrator_nsoc_pkg=Package -org_openo_orchestrator_nsoc_template=Service Template -org_openo_orchestrator_nsoc_lifecycle=Lifecycle -org_openo_orchestrator_nsoc_hostimage=Host Image \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-zh-CN.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-zh-CN.properties deleted file mode 100644 index d78b800f..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-nsoc-i18n-zh-CN.properties +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -org_openo_orchestrator_nsoc=业务 -org_openo_orchestrator_nsoc_orchestrator=编排 -org_openo_orchestrator_nsoc_catalogue=目录管理 -org_openo_orchestrator_nsoc_lifecycle=生命周期管理 -org_openo_orchestrator_nsoc_pkg=包管理 -org_openo_orchestrator_nsoc_template=模板管理 -org_openo_orchestrator_nsoc_templateDetail=模板明细 -org_openo_orchestrator_nsoc_hostimage=主机镜像 -org_openo_orchestrator_nsoc_software_image=软件镜像 -org_openo_orchestrator_nsoc_appCenter=应用中心 -org_openo_orchestrator_nsoc_vapp=虚拟应用 -org_openo_orchestrator_nsoc_nodesApp=节点明细 -org_openo_orchestrator_nsoc_model_design=模型设计 -org_openo_orchestrator_nsoc_node_type=节点类型 - -org_openo_orchestrator_roc_vnfm=VNFM管理 \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-en-US.properties deleted file mode 100644 index 72c4e5eb..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-en-US.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -org_openo_orchestrator_roc_resource=Resource -org_openo_orchestrator_roc_managementview=Manage View -org_openo_orchestrator_roc_vim=VIM Manage -org_openo_orchestrator_roc_vnfm=VNFM -org_openo_orchestrator_roc_resourceview=Resource View -org_openo_orchestrator_roc_overview=Overview diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-zh-CN.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-zh-CN.properties deleted file mode 100644 index cdc27fd1..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-roc-i18n-zh-CN.properties +++ /dev/null @@ -1,107 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -com_zte_ums_eco_domain=分层管理 -com_zte_ums_eco_ems=网元管理 - -com_zte_ums_zenap_manager=管理 -com_zte_ums_zenap_msb=微服务 -com_zte_ums_zenap_msb_apiroute=api路由 - - -com_zte_ums_eco_roc=资源 -com_zte_ums_eco_roc_managementview=管理视图 -com_zte_ums_eco_roc_vim=VIM管理 -com_zte_ums_eco_roc_vnfm=VNFM管理 - - -com_zte_ums_eco_roc_resourceview=资源视图 -com_zte_ums_eco_roc_overview=资源概览 - -######### do ########## -com_zte_nfv_do_wireless=域管理 - vManager -com_zte_nfv_do_wired=域管理 - vBrasManager -com_zte_nfv_do_application=域管理 - iVLManage -com_zte_nfv_do_vDirector=域管理 - vDirector -com_zte_nfv_do_iRos=域管理 - iRos - -######### iRos ########## -iRos-index=首页 -iRos-resourcemanage=资源管理 -iRos-user=用户管理 -iRos-template=模板管理 -iRos-toInstanceSC=实例管理 - -######### vManager ########## -com_zte_nfv_vmanager_nsoc_overview=概况 -com_zte_nfv_vmanager_nsoc_topo=拓扑 -com_zte_nfv_vmanager_nsoc_vim_tenantmanager=VIM配置管理 -com_zte_nfv_vmanager_nsoc_catalog_pkg=版本包 -com_zte_nfv_vmanager_nsoc_catalog_template=VNF模板 -com_zte_nfv_vmanager_nsoc_catalog_neds=网元目录 -com_zte_nfv_vmanager_nsoc_catalog_nfvr=NFV实例目录 -com_zte_nfv_vmanager_nsoc_catalog_service_chain=Service Chain -com_zte_nfv_vmanager_nsoc_scalable_policy=弹性伸缩策略 - -######### vDirector ########## -vdirector-hd=硬件管理 -vdirector-hd-overview=概览 -vdirector-hd-pod=POD -vdirector-hd-rackAndChassis=机架/机框 -vdirector-hd-boards=刀片 -vdirector-hd-storages=磁盘阵列 -vdirector-hd-switches=交换机 -vdirector-hd-racks=机架 -vdirector-hd-chassis=机框 - -vdirector-cloud=云管理 -vdirector-clouddeploy=云部署 -vdirector-cloudMonitor=云环境 -vdirector-clouddeploy-summary=云部署概览 -vdirector-clouddeploy-Servers=云部署服务器 -vdirector-cloudMonitor-summary=云环境概览 -vdirector-tenant-mgr=租户管理 -vdirector-res=资源配置 - -vdirector-template=模板管理 -vdirector-image=镜像 -vdirector-app=应用软件 -vdirector-app-overview=应用概览 -vdirector-vnfm=vnfm -vdirector-addapp=创建应用 - -######### menus more opencos/openstack ########## -col-nfvroc-vim-sys-dashboard=系统面板 -nfvroc-vim-sys-dashboard-more=更多操作 - -nfvroc-vim-sys-dashboard-overview-i18n=概况 -nfvroc-vim-sys-dashboard-resource-i18n=资源使用情况 -nfvroc-vim-sys-dashboard-vm-i18n=虚拟机管理器 -nfvroc-vim-sys-dashboard-hosts-i18n=主机集合 -nfvroc-vim-sys-dashboard-instance-i18n=实例 -nfvroc-vim-sys-dashboard-cloud-harddisk-i18n=云硬盘 -nfvroc-vim-sys-dashboard-cloud-host-type-i18n=云主机类型 -nfvroc-vim-sys-dashboard-mirror-i18n=镜像 -nfvroc-vim-sys-dashboard-networks-i18n=网络 -nfvroc-vim-sys-dashboard-routers-i18n=路由 -nfvroc-vim-sys-dashboard-sys-info-i18n=系统信息 - - - - - - diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-en-US.properties deleted file mode 100644 index 63023eee..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-en-US.properties +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -org_openo_orchestrator_umc_monitor=Monitor -org_openo_orchestrator_umc_monitor_setting=Setting -org_openo_orchestrator_umc_monitor_para_setting=Monitor Para Setting -org_openo_orchestrator_umc_topo=Topology -org_openo_orchestrator_umc_physical_topo=Physical Topology -org_openo_orchestrator_umc_service_topo=Service Topology -org_openo_orchestrator_umc_fm=Alarm -org_openo_orchestrator_umc_fm_currentAlarm=Alarm Query -org_openo_orchestrator_umc_pm=Performance -org_openo_orchestrator_umc_pm_performance_query=Performance Query -org_openo_orchestrator_umc_monitor_service=Service List -org_openo_orchestrator_umc_monitor_service_overview=Overview diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-zh-CN.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-zh-CN.properties deleted file mode 100644 index 2fa26b27..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/openo-umc-i18n-zh-CN.properties +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -org_openo_orchestrator_umc_monitor=监控 -org_openo_orchestrator_umc_monitor_access=设置 -org_openo_orchestrator_umc_monitor_access_itmp=监控参数设置 -org_openo_orchestrator_umc_topo=拓扑 -org_openo_orchestrator_umc_physical_topo=物理拓扑 -org_openo_orchestrator_umc_service_topo=业务拓扑 -org_openo_orchestrator_umc_monitor_alarm=告警 -org_openo_orchestrator_umc_monitor_alarm_currentAlarm=当前告警 -org_openo_orchestrator_umc_monitor_perform=性能 -org_openo_orchestrator_umc_monitor_perform_historySearch=历史查询 -org_openo_orchestrator_umc_monitor_service=业务监控 -org_openo_orchestrator_umc_monitor_service_overview=业务概览 \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-en-US.properties index 77934d19..4e311378 100644 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-en-US.properties +++ b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-en-US.properties @@ -14,11 +14,8 @@ # limitations under the License. # -com_zte_ums_ict_framework_ui_main_title= -com_zte_ums_ict_framework_ui_page_title=ICT Management System -com_zte_ums_ict_framework_ui_page_title_1=ICT Management System-ICT Monitor -com_zte_ums_ict_framework_ui_page_title_2=ICT Management System-Base Scenarios -com_zte_ums_ict_framework_ui_page_title_3=ICT Management System-GIS Scenarios +com_zte_ums_ict_framework_ui_page_title=OPEN-O System +com_zte_ums_ict_framework_ui_main_title=OPEN-O com_zte_ums_ict_framework_ui_skin_select=Theme Color com_zte_ums_ict_framework_ui_language=Language com_zte_ums_ict_framework_ui_language_zhcn=中文 diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-zh-CN.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-zh-CN.properties deleted file mode 100644 index 6c0b4267..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-i18n-zh-CN.properties +++ /dev/null @@ -1,226 +0,0 @@ -# -# Copyright 2016, CMCC Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -com_zte_ums_ict_framework_ui_main_title= -com_zte_ums_ict_framework_ui_page_title=ICT管理系统 -com_zte_ums_ict_framework_ui_page_title_1=ICT管理系统-ICT监控 -com_zte_ums_ict_framework_ui_page_title_2=ICT管理系统-基础版本场景 -com_zte_ums_ict_framework_ui_page_title_3=ICT管理系统-GIS应用场景 -com_zte_ums_ict_framework_ui_skin_select=皮肤选择 -com_zte_ums_ict_framework_ui_language=语言 -com_zte_ums_ict_framework_ui_language_zhcn=中文 -com_zte_ums_ict_framework_ui_language_en=English -com_zte_ums_ict_framework_ui_skin_layout=布局 -com_zte_ums_ict_framework_ui_layout_fluid=流动布局 -com_zte_ums_ict_framework_ui_layout_boxed=盒子布局 -com_zte_ums_ict_framework_ui_page_head=页头 -com_zte_ums_ict_framework_ui_page_fixed=固定 -com_zte_ums_ict_framework_ui_page_default=默认 -com_zte_ums_ict_framework_ui_page_head_fixed=固定 -com_zte_ums_ict_framework_ui_page_head_default=默认 -com_zte_ums_ict_framework_ui_page_sidebar_fixed=固定 -com_zte_ums_ict_framework_ui_page_sidebar_default=默认 -com_zte_ums_ict_framework_ui_side_bar=边栏 -com_zte_ums_ict_framework_ui_sidebar_location=边栏位置 -com_zte_ums_ict_framework_ui_navbar_direction=菜单方向 -com_zte_ums_ict_framework_ui_navbar_direction_horizontal=横向 -com_zte_ums_ict_framework_ui_navbar_direction_vertical=纵向 -com_zte_ums_ict_framework_ui_navbar_direction_fmenu=分类导航 -com_zte_ums_ict_framework_ui_keep_top=靠上 -com_zte_ums_ict_framework_ui_keep_left=靠左 -com_zte_ums_ict_framework_ui_keep_right=靠右 -com_zte_ums_ict_framework_ui_page_footer=页脚 - -com_zte_ums_ict_framework_ui_basic_info=基本信息 -com_zte_ums_ict_framework_ui_search_value=搜索... -com_zte_ums_ict_framework_ui_sidebar_mainPage=主页 -com_zte_ums_ict_framework_ui_sidebar_topo=拓扑 -com_zte_ums_ict_framework_ui_sidebar_resList=资源列表 -com_zte_ums_ict_framework_ui_sidebar_physicTopo=物理拓扑 -com_zte_ums_ict_framework_ui_sidebar_linkTopo=链路拓扑 -com_zte_ums_ict_framework_ui_sidebar_alarm=告警 -com_zte_ums_ict_framework_ui_sidebar_alarm_summary=告警概览 -com_zte_ums_ict_framework_ui_sidebar_currentAlarm=当前告警 -com_zte_ums_ict_framework_ui_sidebar_historyAlarm=历史告警 -com_zte_ums_ict_framework_ui_sidebar_notice=通知 -com_zte_ums_ict_framework_ui_sidebar_alarmRule=告警规则 -com_zte_ums_ict_framework_ui_sidebar_queryAlarm=告警查询 -com_zte_ums_ict_framework_ui_sidebar_alarmStat=告警统计 -com_zte_ums_ict_framework_ui_sidebar_alarmSetup=告警设置 -com_zte_ums_ict_framework_ui_sidebar_perform=性能 - -com_zte_ums_ict_framework_ui_sidebar_pm_meatask=任务管理 -com_zte_ums_ict_framework_ui_sidebar_index=指标管理 -com_zte_ums_ict_framework_ui_sidebar_threshold=门限管理 - -com_zte_ums_ict_framework_ui_sidebar_historySearch=历史查询 -com_zte_ums_ict_framework_ui_sidebar_realTimeSearch=实时查询 -com_zte_ums_ict_framework_ui_sidebar_counterAndIndicator=计数器与指标 -com_zte_ums_ict_framework_ui_sidebar_measureTaskMang=测量任务管理 -com_zte_ums_ict_framework_ui_sidebar_generalTemplateMang=通用模板管理 -com_zte_ums_ict_framework_ui_sidebar_config=配置 -com_zte_ums_ict_framework_ui_sidebar_itDevMang=IT设备管理 -com_zte_ums_ict_framework_ui_sidebar_ipDevMang=IP设备管理 -com_zte_ums_ict_framework_ui_sidebar_autoFind=自动发现 -com_zte_ums_ict_framework_ui_sidebar_pollConfig=轮询设置 -com_zte_ums_ict_framework_ui_sidebar_security=安全 -com_zte_ums_ict_framework_ui_sidebar_smcenter=安全中心 -com_zte_ums_ict_framework_ui_sidebar_smGuide=安全入门 -com_zte_ums_ict_framework_ui_sidebar_deptMang=部门管理 -com_zte_ums_ict_framework_ui_sidebar_userMang=用户管理 -com_zte_ums_ict_framework_ui_sidebar_acccRule=帐户规则 -com_zte_ums_ict_framework_ui_sidebar_roleMang=角色管理 -com_zte_ums_ict_framework_ui_sidebar_roleAndRoleset=角色和角色集 -com_zte_ums_ict_framework_ui_sidebar_role=角色管理 -com_zte_ums_ict_framework_ui_sidebar_roleset=角色集管理 -com_zte_ums_ict_framework_ui_sidebar_log=日志 -com_zte_ums_ict_framework_ui_sidebar_operationLog=操作日志 -com_zte_ums_ict_framework_ui_sidebar_sysLog=系统日志 -com_zte_ums_ict_framework_ui_sidebar_securityLog=安全日志 -com_zte_ums_ict_framework_ui_sidebar_sysLogMultiTab=系统日志(多TAB示例) -com_zte_ums_ict_framework_ui_sidebar_operationLogMultiTab=操作日志(多TAB示例) -com_zte_ums_ict_framework_ui_sidebar_system=系统 -com_zte_ums_ict_framework_ui_sidebar_dataBackup=数据备份 -com_zte_ums_ict_framework_ui_sidebar_fileBackup=文件备份 -com_zte_ums_ict_framework_ui_sidebar_license=许可证 -com_zte_ums_ict_framework_ui_sidebar_sysState=系统状态 -com_zte_ums_ict_framework_ui_sidebar_SystemMang=系统管理 - -com_zte_ums_ict_framework_ui_sidebar_monitor=监控 -com_zte_ums_ict_framework_ui_sidebar_alarmByCell=按网元统计告警 -com_zte_ums_ict_framework_ui_sidebar_alarmByCellType=按网元类型统计告警 -com_zte_ums_ict_framework_ui_breadcrumbs_moreOper=更多操作 -com_zte_ums_ict_framework_ui_sidebar_dbStructBack=整库结构备份 -com_zte_ums_ict_framework_ui_sidebar_baseDataBack=基础数据备份 -com_zte_ums_ict_framework_ui_sidebar_logDataBackRestore=日志数据备份恢复 -com_zte_ums_ict_framework_ui_sidebar_alarmDataBackRestore=告警数据备份恢复 -com_zte_ums_ict_framework_ui_sidebar_dbBack=数据库备份 -com_zte_ums_ngict_dashboard=仪表盘 -com_zte_ums_ict_framework_ui_breadcrumbs_ruleSetup=规则设置 -com_zte_ums_ict_framework_ui_sidebar_levelRedefineSetup=级别重定义设置 -com_zte_ums_ict_framework_ui_sidebar_disposeSuggestionSetup=处理建议设置 -com_zte_ums_ict_framework_ui_sidebar_AlarmBoxSetup=告警箱设置 -com_zte_ums_ict_framework_ui_sidebar_measureObjectMang=测量对象管理 - -com_zte_ums_ict_framework_ui_sidebar_thresholdTaskMang=门限任务管理 -com_zte_ums_ict_framework_ui_sidebar_anDevMan=AN产品管理 -com_zte_ums_ict_framework_ui_sidebar_cellMang=网元管理 -com_zte_ums_ict_framework_ui_sidebar_snmpPing= SNMP Ping -com_zte_ums_ict_framework_ui_sidebar_telnet=Telnet -com_zte_ums_ict_framework_ui_sidebar_workOder=工单管理 -com_zte_ums_ict_framework_ui_sidebar_resMang=资源管理 -com_zte_ums_ict_framework_ui_sidebar_SecurityMang=安全管理 -com_zte_ums_ict_framework_ui_sidebar_operationSet=操作集管理 -com_zte_ums_ict_framework_ui_sidebar_userLockStatus=用户锁定情况 -com_zte_ums_ict_framework_ui_sidebar_loginUserMang=登录用户管理 -com_zte_ums_ict_framework_ui_sidebar_userBlackList=用户黑名单 -com_zte_ums_ict_framework_ui_sidebar_operationSet=操作集 -com_zte_ums_ict_framework_ui_sidebar_LogMang=日志管理 -com_zte_ums_ict_framework_ui_sidebar_backRestore=备份恢复 -com_zte_ums_ict_framework_ui_sidebar_dbStructBack=整库结构备份 -com_zte_ums_ict_framework_ui_sidebar_baseDataBack=基础数据备份 -com_zte_ums_ict_framework_ui_sidebar_logDataBackRestore=日志数据备份恢复 -com_zte_ums_ict_framework_ui_sidebar_alarmDataBackRestore=告警数据备份恢复 -com_zte_ums_ict_framework_ui_loading=加载中...... -com_zte_ums_ict_framework_ui_searching=搜索中...... -com_zte_ums_ict_framework_ui_clickTooFast=您点击的太快了,请稍候重新点击下该菜单,谢谢 -com_zte_ums_ict_framework_ui_loadmenuerror=菜单加载失败 -com_zte_ums_ict_framework_ui_confirmlogout=你确认要注销吗? -com_zte_ums_aos_framework_ui_heartbeat_fail=会话已经失效。 -com_zte_ums_ict_framework_ui_fixedsidedefaultheaderError=页头不支持固定边栏,先固定页头才能固定边栏. -com_zte_ums_ict_framework_ui_fixedsiderightpositionError=固定边栏不支持边栏靠右,先设置边栏为默认. -com_zte_ums_ict_framework_ui_loadchgpwdpageError=加载修改密码页面失败 -com_zte_ums_ict_framework_ui_searchmessage=关键字{0}的搜索结果如下: -com_zte_ums_ict_framework_ui_month=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月 -com_zte_ums_ict_framework_ui_customdate=自定义日期 -com_zte_ums_ict_framework_ui_from=从 -com_zte_ums_ict_framework_ui_to=到 -com_zte_ums_ict_framework_ui_apply=应用 -com_zte_ums_ict_framework_ui_today=今天 -com_zte_ums_ict_framework_ui_yestoday=昨天 -com_zte_ums_ict_framework_ui_lastdays=最近{0}天 -com_zte_ums_ict_framework_ui_thismonth=本月 -com_zte_ums_ict_framework_ui_lastmonth=上个月 -com_zte_ums_ict_framework_ui_group_about=关于 - -com_zte_ums_ict_framework_ui_group_logout=注销 -com_zte_ums_ict_framework_ui_changePwd=修改密码 -com_zte_ums_ict_framework_ui_group_fullscreen=全屏 -com_zte_ums_ict_framework_ui_group_exitfullscreen=退出全屏 -com_zte_ums_ict_framework_moudle_help = 帮助 -com_zte_ums_ict_framework_moudle_menutoggler=更多... - -com_zte_ums_ict_alarmcount_total_label = 总计:{0} -com_zte_ums_ict_alarmcount_critical_label = 严重:{0} -com_zte_ums_ict_alarmcount_critical_text = 严重告警 -com_zte_ums_ict_alarmcount_major_label = 主要:{0} -com_zte_ums_ict_alarmcount_major_text = 主要告警 -com_zte_ums_ict_alarmcount_minor_label = 次要:{0} -com_zte_ums_ict_alarmcount_minor_text = 次要告警 -com_zte_ums_ict_alarmcount_warning_label = 警告:{0} -com_zte_ums_ict_alarmcount_warning_text = 警告告警 -com_zte_ums_ict_alarmcount_none_label=当前系统无告警 -com_zte_ums_ict_alarmcount_total_before_text =当前系统共有 -com_zte_ums_ict_alarmcount_total_after_text =个告警 - -com_zte_ums_ict_framework_ui_sidebar_performMonitor=性能监视 -com_zte_ums_ict_framework_ui_sidebar_resource=资源 -com_zte_ums_ict_framework_ui_sidebar_manualAdd=手动添加 -com_zte_ums_ict_framework_ui_sidebar_gisTopo=GIS拓扑 - - -com_zte_ums_ict_framework_ui_sidebar_userDispatch=用户分发 -com_zte_ums_ict_framework_ui_sidebar_roleCollect=角色收集 - -com_zte_ums_ict_sm_user_op_ok=操作成功。 -com_zte_ums_ict_sm_user_close_button=关闭 -com_zte_ums_ict_sm_user_confirm=确定 -com_zte_ums_ict_sm_user_ok=确定 -com_zte_ums_ict_sm_user_modify_current_password_label=      å½“前用户密码设置 -com_zte_ums_ict_sm_user_modify_current_password=当前用户密码设置 -com_zte_ums_ict_sm_user_old_password=旧密码 -com_zte_ums_ict_sm_user_confirmpassword=确认新密码 -com_zte_ums_ict_sm_user_cancel_button=取消 -com_zte_ums_ict_sm_user_password=新密码 -com_zte_ums_ict_sm_password_confirm_not_consistent = 密码输入不一致 -com_zte_ums_ict_sm_user_inputoldpwd=请输入原密码 -com_zte_ums_ict_sm_user_inputnewpwd=请输入新密码 -com_zte_ums_ict_sm_user_inputnewpwdagain=请再次输入新密码 -com_zte_ums_ict_portal_chgpwd_oldpwdError=原始密码错误 -com_zte_ums_ict_login_inputname=请输入用户名 -com_zte_ums_ict_login_inputpwd=请输入密码 - -com_zte_ums_ict_framework_ui_blue=中兴蓝3 -com_zte_ums_ict_framework_ui_ztebluelight=中兴蓝1 -com_zte_ums_ict_framework_ui_zteblue=中兴蓝2 - -com_zte_ums_ict_about_ppu_field_name = 名称 -com_zte_ums_ict_about_ppu_field_version = 版本号 -com_zte_ums_ict_about_ppu_field_desc = 描述 -com_zte_ums_ict_about_ppu_field_time = 更新时间 -com_zte_ums_ict_framework_moudle_about = 关于 -com_zte_ums_ict_framework_about_detail = 详情 -com_zte_ums_ict_framework_about_version=版本号: -com_zte_ums_ict_portal_login_companyName=2014 © ZTE - 中兴通讯股份有限公司 - -com_zte_ums_ict_framework_main_page_dashboard=仪表盘 -com_zte_ums_ict_framework_main_page_monitor=监控 -com_zte_ums_ict_framework_main_page_alarm=告警 -com_zte_ums_ict_framework_main_page_performance=性能 -com_zte_ums_ict_framework_main_page_security=安全 -com_zte_ums_ict_framework_main_page_log=日志 -com_zte_ums_ict_framework_main_page_system=系统 \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/web-portal-login-integration-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-login-i18n-en-US.properties similarity index 100% rename from openo-portal/portal-common/src/main/webapp/common/i18n/web-portal-login-integration-i18n-en-US.properties rename to openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-login-i18n-en-US.properties diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-integration-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-mainPage-i18n-en-US.properties similarity index 100% rename from openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-integration-i18n-en-US.properties rename to openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-mainPage-i18n-en-US.properties diff --git a/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-menu-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-menu-i18n-en-US.properties new file mode 100644 index 00000000..7e4dd453 --- /dev/null +++ b/openo-portal/portal-common/src/main/webapp/common/i18n/web-framework-menu-i18n-en-US.properties @@ -0,0 +1,41 @@ +# +# Copyright 2016, CMCC Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +openo_menu_service=Service +openo_menu_resource=Resource +openo_menu_monitor=Monitor +openo_menu_service_list=Service List +openo_menu_service_list_overview=Overview +openo_menu_orchestrator=Orchestrator +openo_menu_orchestrator_model_design=Model Design +openo_menu_orchestrator_node_type=Node Type +openo_menu_orchestrator_package=Package +openo_menu_orchestrator_service_template=Service Template +openo_menu_orchestrator_host_image=Host Image +openo_menu_orchestrator_lifecycle=Lifecycle +openo_menu_manage_view=Manage View +openo_menu_manage_view_vim_manage=VIM Manage +openo_menu_manage_view_vnfm=VNFM +openo_menu_resource_view=Resource View +openo_menu_resource_view_overview=Overview +openo_menu_setting=Setting +openo_menu_setting_monitor_para_setting=Monitor Para Setting +openo_menu_topology=Topology +openo_menu_topology_physical_topology=Physical Topology +openo_menu_topology_service_topology=Service Topology +openo_menu_alarm=Alarm +openo_menu_alarm_alarm_query=Alarm Query +openo_menu_performance=Performance +openo_menu_performance_performance_query=Performance Query diff --git a/openo-portal/portal-common/src/main/webapp/common/js/i18n/loadi18n-openo-roc.js b/openo-portal/portal-common/src/main/webapp/common/js/constants/menu_link.js similarity index 72% rename from openo-portal/portal-common/src/main/webapp/common/js/i18n/loadi18n-openo-roc.js rename to openo-portal/portal-common/src/main/webapp/common/js/constants/menu_link.js index 64df110c..1ed9b64d 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/i18n/loadi18n-openo-roc.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/constants/menu_link.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE) + * Copyright 2016, CMCC Technologies Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,9 +13,3 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -function loadrocPropertiesSideMenu(lang){ - - loadPropertiesSideMenu(lang, 'openo-roc-i18n', './common/i18n/'); -} -loadrocPropertiesSideMenu(lang); \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/js/core/const.js b/openo-portal/portal-common/src/main/webapp/common/js/core/const.js index d8a3371e..3e36766c 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/core/const.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/core/const.js @@ -14,7 +14,7 @@ * limitations under the License. */ var fMenuSiderDivId = 'page-f-sidebar-menu'; -var ICTFRAME_CONST_SPINNER_GIF_PATH="../../openoui/common/image/loading-spinner-grey.gif"; +var ICTFRAME_CONST_SPINNER_GIF_PATH="image/loading-spinner-grey.gif"; var ICTFRAME_CONST_IFRAME_HEIGHT_AJUST = 10; var ICTFRAME_CONST_IFRAME_HEIGHT_AJUST_IE = 5; var ICTFRAME_CONST_THEME_COLOR_CSS_PREFFIX = "css/themes/"; @@ -22,7 +22,6 @@ var ICTFRAME_CONST_DEFAULTPAGE_PATH = "default.html?"; var ICTFRAME_CONST_DATABACKUP_PATH = 'menus/dataBackup-mysql.html'; var IS_V5_TESTVERSION = true; - var FrameConst={}; //ĬÈϵǼ³É¹¦Ìø×ªÒ³Ãæ FrameConst.DEFAULT_LOGINSKIP_PAGE = "common/main-page.html"; @@ -31,25 +30,16 @@ FrameConst.do_heartbeat = false; FrameConst.change_pass = false; //ÊÇ·ñ¼ÓÃÜ FrameConst.isEncypt = "false"; -//FrameConst.REST_FRAMECOMMIFO = "/web/rest/web-common/getMenuItemVisible"; FrameConst.REST_FRAMECOMMIFO = "../../api/uiframe/v1/frameCommInfo"; -//FrameConst.REST_HEARTBEAT = "/web/rest/web-common/common?action=heartbeat"; FrameConst.REST_HEARTBEAT = "../../api/uiframe/v1/heartbeat"; -//FrameConst.REST_GETLICENSEINFO = "/web/rest/web-license/getlicensevalueinfo"; FrameConst.REST_GETLICENSEINFO = "../../api/uiframe/v1/licensevalueinfo"; -//FrameConst.REST_CHECKRIGHT = "/web/rest/web-common/checkRight"; FrameConst.REST_CHECKRIGHT = "../../api/uiframe/v1/checkRight"; -//FrameConst.REST_LOGIN = "/web/res/web-common/login"; FrameConst.REST_LOGIN = "../../api/uiframe/v1/login"; -//FrameConst.REST_LOGOUT = "/web/res/web-common/loginOut?SSOAction=SSOLogout"; FrameConst.REST_LOGOUT = "../../api/uiframe/v1/loginOut?SSOAction=SSOLogout"; -//FrameConst.REST_GET_FRAME_MENUDIRECTION = "/web/rest/web-common/GetConfByKey?key=usf.mainframe.web.navigation.direction"; FrameConst.REST_GET_FRAME_MENUDIRECTION = "../../api/uiframe/v1/confByKey?key=usf.mainframe.web.navigation.direction"; -//FrameConst.REST_GET_USERNAME = "/web/rest/web-common/common?action=getUserName"; FrameConst.REST_GET_USERNAME = "../../api/uiframe/v1/userName"; -//FrameConst.REST_GET_VERSIONINFO = "/web/rest/web-common/getVersionInfo"; FrameConst.REST_GET_VERSIONINFO = "../../api/uiframe/v1/versionInfo"; var zte_http_headers=new Array(); zte_http_headers.push({"key":"ICTAuthentication","value":"icttka","store":true}); diff --git a/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.js b/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.js index e2d07527..6792084c 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.js @@ -688,34 +688,22 @@ var openoFrameWork = function () { fsiderMenu.css('display','none'); return; } - if (openoFrameWork_menu_horizontal == siderbarpos) { - sidermenu.css('display','none');// 侧边栏隐藏 - fhorMenu.css('display','none');// 侧边栏隐藏 - fsiderMenu.css('display','none');// 侧边栏隐藏 - hormenu.css("display", "block");//显示水平菜单栏 - } else if (openoFrameWork_menu_vertical == siderbarpos) { - sidermenu.css('display','block');// 侧边栏显示 - hormenu.css("display", "none");//隐藏水平菜单栏 - fhorMenu.css('display','none');// 侧边栏隐藏 - fsiderMenu.css('display','none');// 侧边栏隐藏 - } else if (openoFrameWork_menu_fmenu == siderbarpos) { - sidermenu.css('display','none'); - hormenu.css("display", "none"); - fhorMenu.css('display','block'); + + sidermenu.css('display','none'); + hormenu.css("display", "none"); + fhorMenu.css('display','block'); + fsiderMenu.css('display','block'); + //除了toggle按钮之外,是否还有其他儿子是要显示的,如果没有,那么竖菜单不显示;反之,显示。 + var lis = fsiderMenu.children(".sidebar-toggler-wrapper").siblings(); + if(lis.length > 0 && lis.css('display') != "none"){ fsiderMenu.css('display','block'); - //除了toggle按钮之外,是否还有其他儿子是要显示的,如果没有,那么竖菜单不显示;反之,显示。 - var lis = fsiderMenu.children(".sidebar-toggler-wrapper").siblings(); - if(lis.length > 0 && lis.css('display') != "none"){ - fsiderMenu.css('display','block'); - // - $("body").removeClass("page-full-width"); - if ($('body').hasClass("page-sidebar-closed")) { - $(".page-content").css("marginLeft", _sidebarCollapsedWidth); - } else { - $(".page-content").css("marginLeft", _sidebarWidth); - } + $("body").removeClass("page-full-width"); + if ($('body').hasClass("page-sidebar-closed")) { + $(".page-content").css("marginLeft", _sidebarCollapsedWidth); + } else { + $(".page-content").css("marginLeft", _sidebarWidth); } - } + } } //根据当前菜单在屏幕的位置,和一级菜单下二级菜单的排列,来决定菜单是向左展开还是向右展开 var ajustHorMenuDropDirection = function( isInit ){ @@ -3438,13 +3426,13 @@ function getFMenu( urlMega , urlSider ){ var resScriptsSriped = stripHtmlScripts(res); fpagesidebar.append(resScriptsSriped); //先全部隐藏,后面根据与hash的匹配情况来显示 - fpagesidebar.children().css('display','none'); + //fpagesidebar.children().css('display','none'); runHtmlScripts(res); dealMysqlBackupMenu(); FMenuAuthentication( fMenuMegaDivId ,fMenuSiderDivId ); ajustFMenu( fMenuMegaDivId ,fMenuSiderDivId ); openoFrameWork.stopPageLoading(); - loadi18n_WebFramework_sideMenu(); + //loadi18n_WebFramework_sideMenu(); }, error: function (xhr, ajaxOptions, thrownError) { $('.page-f-sidebar-menu').append('');//加载系统菜单失败!;//加载系统菜单失败! diff --git a/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.min.js b/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.min.js deleted file mode 100644 index 08132235..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/js/core/openoFrameWork.min.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2016, CMCC Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"")};String.prototype.format=function(){if(0==arguments.length)return this;for(var b=this,d=0;d>0;gb?this.data.seg.path.length+b:b-1;return this.data.seg.path[b]},fsegment:function(b){if("undefined"===typeof b)return this.data.seg.fragment;b=0>b?this.data.seg.fragment.length+b:b-1;return this.data.seg.fragment[b]}}} -var l={a:"href",img:"src",form:"action",base:"href",script:"src",iframe:"src",link:"href",embed:"src",object:"data"},u="source protocol authority userInfo user password host port relative path directory file query fragment".split(" "),q={anchor:"fragment"},I={strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}, -w=/^[0-9]+$/;m.jQuery=function(b){null!=b&&(b.fn.url=function(h){var g="";this.length&&(g=b(this).attr(d(this[0]))||"");return m(g,h)},b.url=m)};m.jQuery(window.jQuery);return m});openoFrameWork_conf={userName:store.get("username"),changePassItem:FrameConst.change_pass?FrameConst.change_pass:!0,helpMenuItem:!1,aboutMenuItem:!1,flightMenuItem:!1,fullscreenMenuItem:!1,logoutMenuItem:!0,defaultThemeColor:"ztebluelight2",dbType:"other",acceptLanguage:"en-US"};$("#currentUser").html(openoFrameWork_conf.userName); -$.ajax({url:FrameConst.REST_FRAMECOMMIFO,type:"GET",cache:!1,contentType:"application/json; charset=utf-8",success:function(b){b.helpMenuItem&&""!=b.helpMenuItem&&(openoFrameWork_conf.helpMenuItem=b.helpMenuItem);b.aboutMenuItem&&""!=b.aboutMenuItem&&(openoFrameWork_conf.aboutMenuItem=b.aboutMenuItem);b.flightMenuItem&&""!=b.flightMenuItem&&(openoFrameWork_conf.flightMenuItem=b.flightMenuItem);b.fullscreenMenuItem&&""!=b.fullscreenMenuItem&&(openoFrameWork_conf.fullscreenMenuItem=b.fullscreenMenuItem);b.logoutMenuItem&& -""!=b.logoutMenuItem&&(openoFrameWork_conf.logoutMenuItem=b.logoutMenuItem);b.defaultThemeColor&&""!=b.defaultThemeColor&&(openoFrameWork_conf.defaultThemeColor=b.defaultThemeColor);b.dbType&&""!=b.dbType&&(openoFrameWork_conf.dbType=b.dbType);b.acceptLanguage&&""!=b.acceptLanguage&&(openoFrameWork_conf.acceptLanguage=b.acceptLanguage);b.changePassItem&&""!=b.changePassItem&&(openoFrameWork_conf.changePassItem=b.changePassItem);setFrameWorkByConf()},error:function(b){setFrameWorkByConf()}}); -function setThemeColor(b){var d=$(".zte-theme-panel");$(".theme-colors > ul > li",d).each(function(){var d=$(this).attr("data-style");d==b&&($(this).addClass("current"),$("#style_color").attr("href","css/themes/"+d+".css"),store("style_color",d))})} -function setFrameWorkByConf(){var b=openoFrameWork_conf.helpMenuItem,d=openoFrameWork_conf.aboutMenuItem,h=openoFrameWork_conf.flightMenuItem,k=openoFrameWork_conf.fullscreenMenuItem,g=openoFrameWork_conf.logoutMenuItem,n=openoFrameWork_conf.changePassMenuItem;b&&"false"!==b||$("#uep_ict_help_url").parent("li").remove();d&&"false"!==d||$('[data-target="#aboutDlg"]').parent("li").remove();b||d||$("#uep_ict_help_div").remove();h&&"false"!==h||$("#header_notification_bar").html("
      
"); -k&&"false"!==k||$("#trigger_fullscreen_div").html("");g&&"false"!==g||$("#trigger_logout_div").html("");(!k&&!g||"false"===k&&"false"===g)&&$("#full_logout_divider").css("display","none");n||($("#changePwd_labellink").css("display","none"),$("#full_logout_divider").css("display","none"));b=openoFrameWork_conf.defaultThemeColor;d=$(".zte-theme-panel");$("ul > li",d).removeClass("current");store&&!store("style_color")?setThemeColor(b):setThemeColor(store("style_color"))} -function Hashtable(){this._hash={};this._count=0;this.add=function(b,d){if(this._hash.hasOwnProperty(b))return!1;this._hash[b]=d;this._count++;return!0};this.hash=function(){return this._hash};this.remove=function(b){delete this._hash[b];this._count--};this.count=function(){return this._count};this.items=function(b){if(this.contains(b))return this._hash[b]};this.contains=function(b){return this._hash.hasOwnProperty(b)};this.clear=function(){this._hash={};this._count=0};this.replace=function(b,d){this.contains(b)&& -this.remove(b);return this.add(b,d)}} -var fMenuSiderDivId="page-f-sidebar-menu",fMenuMegaDivId="f_hormenu",megaSiderDivId="page-megachild-sidebar-menu",megaDivId="main_hormenu",openoFrameWork_menu_horizontal="horizontal",openoFrameWork_menu_vertical="vertical",openoFrameWork_menu_fmenu="fmenu",openoFrameWork_showNav="true",openoFrameWork_smallView=960,openoFrameWork=function(){var b=getLanguage(),d=!1,h=function(){try{return document.createEvent("TouchEvent"),!0}catch(c){return!1}},k=!h,g=!1,n=!1,m=!1,l="",u=225,q=35,I=[],w=new Hashtable,x=new Hashtable, -C=new Hashtable,V=new Hashtable,y="page-mainIframe",J="",v="",D=!1,ca={blue:"#4b8df8",red:"#e02222",green:"#35aa47",purple:"#852b99",grey:"#555555","light-grey":"#fafafa",yellow:"#ffb848",ztebluelight:"#3366cc"},G=function(){var c=window,t="inner";"innerWidth"in window||(t="client",c=document.documentElement||document.body);return{width:c[t+"Width"],height:c[t+"Height"]}},va=function(){var c=getUrlParam("menu");switch(c?c:0){case "1":l=$("#com_zte_ums_ict_framework_ui_page_title_1").text().trim(); -break;case "2":l=$("#com_zte_ums_ict_framework_ui_page_title_2").text().trim();break;case "3":l=$("#com_zte_ums_ict_framework_ui_page_title_3").text().trim();break;default:l=$("#com_zte_ums_ict_framework_ui_page_title").text().trim()}"rtl"===$("body").css("direction")&&(d=!0);g=!!navigator.userAgent.match(/MSIE 8.0/);n=!!navigator.userAgent.match(/MSIE 9.0/);(m=!!navigator.userAgent.match(/MSIE 10.0/))&&$("html").addClass("ie10");(m||n||g)&&$("html").addClass("ie");navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad)/)? -($(document).on("focus","input, textarea",function(){$(".page-header").hide();$(".page-footer")&&0<$(".page-footer").length&&$(".page-footer").hide()}),$(document).on("blur","input, textarea",function(){$(".page-header").show();$(".page-footer")&&0<$(".page-footer").length&&$(".page-footer").show()})):($(document).on("focus","input, textarea",function(){$(".page-footer")&&0<$(".page-footer").length&&$(".page-footer").hide()}),$(document).on("blur","input, textarea",function(){$(".page-footer")&&0< -$(".page-footer").length&&$(".page-footer").show()}))},F=function(c){$(".page-loading").remove();$("body").append('
  '+(c?c:$.i18n.prop("com_zte_ums_ict_framework_ui_loading"))+"
")},da=function(){G().widthm&&(m=c.length,l=c)});h=h+getStringWidth(l,14)+94.5}h+H>c?(console.log("ajust class dropdown-menu-right ,id = "+b.attr("id")),d.addClass("dropdown-menu-right")):d.removeClass("dropdown-menu-right")}},B=function(c){var t=$(".page-content"),f=$(".page-content-body"),b=$(".page-sidebar"),d=$("body"),g,h=G(),l=Math.min(window.screen.availHeight,h.height)-5,z=$(".footer"), -m=$(".page-breadcrumb"),n=$("#pageableDiv");console.log("pageableDiv height:"+n.outerHeight(!0));var u=$(".header");"isc"===(x.items(y)?x.items(y).childpageType:"")&&$(".sidebar-option",panel).val("fixed");var r=openoFrameWork.getLocationURLParameter("showNav");"false"==r&&(openoFrameWork_showNav=r,ha(),ia());r=l-(!z||0>=z.length?0:z.outerHeight(!0))-u.outerHeight(!0);n=!n||0>=n.length||!1==n.is(":visible")?0:n.outerHeight(!0);f=l-u.outerHeight(!0)-(!z||0>=z.length||!1==z.is(":visible")?0:z.outerHeight(!0))- -m.outerHeight(!0)-n-(f.outerHeight(!0)-f.height());m=""==y?"page-mainIframe":y;if((n=$(".page-content .page-content-body ."+m))&&0f?b.height():f;b.attr("style",q);if(!k){q=f;try{q=n.contents().height()}catch(Ja){}f=q>f?q:f}x.items(m).setMinHeight&& -(n=Math.min(l,f),console.log("pym:parent iframe "+m+" window.screen.availHeight:"+l+" viewport.height:"+h.height+" h:"+f+" minHeight:"+n),x.items(m).setMinHeight(n))}!0===d.hasClass("page-footer-fixed")&&!0===d.hasClass("page-sidebar-fixed")?t.height()=z.length?0:z.outerHeight(!0),1024<$(window).width()&&g+b+z=openoFrameWork_smallView?(ga(),"none"!=$(".page-sidebar-menu li").css("display")&&$("body").hasClass("page-sidebar-closed")&&$(".sidebar-toggler").hasClass("close-by-viewportChange")&&(c||$(".sidebar-toggler")[1].click(),$(".sidebar-toggler").removeClass("close-by-viewportChange"))):ga(!0)},ya=function(c){var t;if(0      
")},Aa=function(c){var b=$(".zte-theme-panel"),b=$(".nav-pos-direction",b).val(),f=null,p=null;"vertical"===b?(f=$("#"+c.attr("id"),$("#main_hormenu")),p=$(".header ul")):"horizontal"===b?(f=za(c),ka(c,megaSiderDivId),p=f[0],f=f[1]):b===openoFrameWork_menu_fmenu&&ka(c,fMenuSiderDivId);p&&(p.children("li.active").removeClass("active"),p.find(".arrow.open").removeClass("open"));f&&(f.parents("li").each(function(){$(this).addClass("iframe active"); -$(this).find("a > span.arrow").addClass("open")}),f.parents("li").addClass("active"),"horizontal"===b&&f.parent().parent().parent().is("li")&&$(".arrow",f.parent().parent().parent()).addClass("open"))},za=function(c){targetsource=$("#"+c.attr("id"),$("[class='page-sidebar-menu']"));targetContainer=$("#page-sidebar-menu ul");$("li.open",targetContainer).each(function(){$("ul.sub-menu",this).attr("style")&&($("ul.sub-menu",this).removeAttr("style"),$(this).removeClass("open"))});if(0<=c.parent().parent().parent().parent().attr("class").indexOf("page-sidebar-menu")){c= -$("#"+c.attr("id"),$("#main_hormenu"));var b=$(".header ul");b.children("li.active").removeClass("active");b.find(".arrow.open").removeClass("open");c.parents("li").each(function(){$(this).addClass("iframe active");$(this).find("a > span.arrow").addClass("open")});c.parents("li").addClass("active")}return[targetContainer,targetsource]},ka=function(c,b){var f=$("#"+b);if(R)R=!1;else if($(c).parents("li").hasClass("mega-menu-dropdown")){var p=c.attr("id");$("#"+b+">li").hide();var d=$("a[hparentid= "+ -p+"]",f).parent();d.show();0li.sidebar-toggler-wrapper").show();0<$("a[hparentid= "+p+"]",f).length?la(c,b):(f.css("display","none"),$("body").addClass("page-full-width"),$(".page-content").css("marginLeft",u))}else"true"==openoFrameWork_showNav&&($("#"+b+">li").hide(),p=$(c).parents("li"),p=p.eq(p.length-1).children("a").attr("hparentid"),d=$("a[hparentid="+p+"]",f).parent(),d.show(),0li.sidebar-toggler-wrapper").show(),la(c,b))},la=function(c,b){var f=$("#"+ -b);f.css("display","block");$("ul.sub-menu",f).css("display","block");$(".arrow",f).addClass("open");$("body").removeClass("page-full-width");$("body").hasClass("page-sidebar-closed")?$(".page-content").css("marginLeft",q):$(".page-content").css("marginLeft",u);var p=c.attr("href");$("li.iframe",f).removeClass("active");f=$("a[href ='"+p+"']",f).parent();f.addClass("active");f.parent().parent().addClass("open").addClass("active");f.parent().css("display","block");f.parent().parent().children("a").children(".arrow").addClass("open")}, -Z=function(c,b,f){var p=c.attr("href");if(p&&!(2>p.length)){b.preventDefault();D||(D=!0,p=c.parents("li").last(),p.hasClass("open")||Y(p.children("a:eq(0)")));f&&0 span.arrow").addClass("open")});c.parents("li").addClass("active");Aa(c);f&&0=$(window).width()&&$("."+f).hasClass("in")&&$(".navbar-toggle").click();if(dealMultTabPage(c))return!0; -f=b.data&&b.data.breadcrumbBtnMenuItem&&0p.length||(b.preventDefault(),D||(D=!0,b=c.parents("li").last(),Y(b.children("a:eq(0)"))),f&&0 span.arrow").addClass("open")}),c.parents("li").addClass("active"),f&&0=$(window).width()&&$("."+f).hasClass("in")&&$(".navbar-toggle").click())},S=function(c,b){function f(c,b,f,t,d,p,g){c=new pym.Parent(c,b,{xdomain:p});c.iframe.id=f;c.iframe.name=t;c.iframe.setAttribute("class",d);c.iframe.setAttribute("allowfullscreen","");c.iframe.setAttribute("mozallowfullscreen","");c.iframe.setAttribute("oallowfullscreen","");c.iframe.setAttribute("msallowfullscreen",""); -c.iframe.setAttribute("webkitallowfullscreen","");c.iframe.setAttribute("onload",'openoFrameWork.SyncCSS(this,0,"'+m+'");openoFrameWork.stopPageLoading();');x.replace(f,c);c.onMessage("height",function(c){console.log("The frame "+f+" receive message height is "+c);var b=$(".page-content .page-content-body ."+f);c=Math.max(this.minHeight,c);b.height(c)});return c}v="";var p=c.attr("href");if(p&&!(2>p.length)){var p=openoFrameWork.handlBaseURL(p),d=c.attr("category");if(d&&0=$("#"+g).length&&u.append("
"),F(),pymParent=f(g,p,d,d,d,_xdomain,l),g=$(pymParent.iframe),0 a",function(c){!1==$(this).next().hasClass("sub-menu")?!1==$(".btn-navbar").hasClass("collapsed")&&$(".btn-navbar").click():$(this).next().hasClass("sub-menu always-open")||(Y($(this)),c.preventDefault())});$(".page-sidebar").on("click"," li > a.iframe",function(c){c.preventDefault();var b=$(this).attr("id");b&&0 a.iframe",function(c){2> -$(this).attr("href").length||(c.preventDefault(),L($(this),c))});$("#pageableDiv").on("click"," div > a.iframe",function(c){2>$(this).attr("href").length||(c.preventDefault(),L($(this),c))});$("#pageableDiv").on("click"," li > a.iframe",function(c){if(!(2>$(this).attr("href").length)){c.preventDefault();if(c.target){var b=$("span",c.target),b=0div>span",c.target.parentNode.parentNode.parentNode.parentNode.parentNode).replaceWith(b.outerHTML)}L($(this),c)}});$(".dropdown").on("click", -" li > a.iframe",function(c){2>$(this).attr("href").length||(c.preventDefault(),F(),S($(this),c),M($(this),!1,c))})},ma="",T=!0,U=null,aa=function(c,b){if(!(2>c.length))if(c=openoFrameWork.handlBaseURL(c),ma==c)if(!0===b)$("#pageableDiv").show();else{if(b&&b.target&&b.currentTarget){var f=$(b.target).attr("defaultDisplay");(f=f?f:$(b.currentTarget).attr("defaultDisplay"))&&"false"==f.trim()?$("#pageableDiv").hide():$("#pageableDiv").show()}}else{ma=c;clearMoreOperations();var d=b&&b.data&&b.data.breadcrumbBtnMenuItem&& -0=d.length?b&&b.breadcrumbBtnMenuItem&&0');g.children().remove();g.append(f);var h=$(".dropdown-menu",g).attr("displayType");if(h&&"pageableDiv"!=h)$(".more-botton-zone").append(f), -$("#pageableDiv").hide();else{var k=$(".dropdown-menu",g);if(0f.length)f=$(".page-content a[id='"+d+"']");if(0"+$.i18n.prop("com_zte_ums_ict_framework_ui_loadmenuerror")+"");T=!0}})}};dealMultTabPage=function(c){var b=c.attr("href");if(b&&!(2>b.length)){var f= -c.attr("redirect");if(f&&0",b),c=E.substring(0,b)+""):c=void 0,ba="";else{for(;g&&0
"+c),g.parent("ul").attr("id")==fMenuSiderDivId||g.parent("ul").attr("id")==megaSiderDivId?(g=g.children("a").attr("hparentid"),h==openoFrameWork_menu_horizontal?magaMenu=$("#"+megaDivId):h==openoFrameWork_menu_fmenu&&(magaMenu=$("#"+fMenuMegaDivId)),g=$("a[id="+g+"]",magaMenu).parent("li")):g=g.parents("li"));g[0]&&0"+c)}d.empty();$(".more-botton-zone").empty();E=c;store("globleCurrentBreadcrumb",E);d.append(c);k&&0"+f);d=d.parents("li")}d[0]&&0"+f);g&&0'+ -f);f=E+f;b.append(f)},R=!1,L=function(c,b){var f=c.attr("id");f&&0=$(".footer").length)?0:$(".footer").outerHeight());return c},X= -function(){var c=$(".page-sidebar-menu");1===c.parent(".slimScrollDiv").size()&&(c.removeAttr("style"),$(".page-sidebar").removeAttr("style"));0===$(".page-sidebar-fixed").size()?B():G().width>=openoFrameWork_smallView&&(ja(),B())},pa=function(){!1!==$("body").hasClass("page-sidebar-fixed")&&($(".page-sidebar").off("mouseenter").on("mouseenter",function(){Da()}),$(".page-sidebar").off("mouseleave").on("mouseleave",function(){Ea()}))},Da=function(){var c=$("body"),b=$(".page-sidebar");!1===c.hasClass("page-sidebar-closed")|| -!1===c.hasClass("page-sidebar-fixed")||$(this).hasClass("page-sidebar-hovering")||(c.removeClass("page-sidebar-closed").addClass("page-sidebar-hover-on"),$(".sidebar-toggler"),c.hasClass("page-sidebar-reversed")?b.width(u):(b.addClass("page-sidebar-hovering"),b.animate({width:u},350,"",function(){b.removeClass("page-sidebar-hovering")})))},Ea=function(){var c=$("body");if(!1!==c.hasClass("page-sidebar-hover-on")&&!1!==c.hasClass("page-sidebar-fixed")&&!$(this).hasClass("page-sidebar-hovering")){var b= -$(".page-sidebar"),f=$(".sidebar-toggler");c.hasClass("page-sidebar-reversed")?(c.addClass("page-sidebar-closed").removeClass("page-sidebar-hover-on"),b.width(q),f&&f.removeAttr("style")):(b.addClass("page-sidebar-hovering"),b.animate({width:q},350,"",function(){c.addClass("page-sidebar-closed").removeClass("page-sidebar-hover-on");b.removeClass("page-sidebar-hovering");f&&f.removeAttr("style")}))}},K=function(c,b,f,d){var g=c.attr("style")?c.attr("style"):"";styles=g.split(";");var h="";for(i=0;i< -styles.length;i++)if(0<=styles[i].indexOf(b)){h=styles[i];break}g=0=openoFrameWork_smallView&&$("body").addClass("page-sidebar-closed");$(".page-sidebar, .sidebar-toggler").on("click",".sidebar-toggler",function(c){c.preventDefault();c=$("body");$(".page-sidebar");c.hasClass("page-sidebar-closed")&&$(this).removeAttr("style")});$(".page-sidebar, .header").on("click", -".sidebar-toggler",function(c){var b=$("body"),d=$(".page-sidebar");b.hasClass("page-sidebar-hover-on")&&b.hasClass("page-sidebar-fixed")||d.hasClass("page-sidebar-hovering")?(b.removeClass("page-sidebar-hover-on"),d.css("width","").hide().show(),B(),A("sidebar_closed","0"),c.stopPropagation()):($(".sidebar-search",d).removeClass("open"),c=$(".zte-theme-panel"),$(".sidebar-pos-option",c).val(),c=$("[class='page-content']"),b.hasClass("page-sidebar-closed")?(b.removeClass("page-sidebar-closed"),b.hasClass("page-sidebar-fixed")&& -d.css("width",""),A("sidebar_closed","0"),c.css("marginLeft",u)):(b.addClass("page-sidebar-closed"),$(this).removeAttr("style"),A("sidebar_closed","1"),c.css("marginLeft",q)),B(!0));W()})},Ga=function(){$(".header").on("click",".hor-menu .hor-menu-search-form-toggler",function(c){$(this).hasClass("off")?($(this).removeClass("off"),$(".header .hor-menu .search-form").hide()):($(this).addClass("off"),$(".header .hor-menu .search-form").show());c.preventDefault()});$(".header").on("click"," li > a.iframe", -function(c){c.preventDefault();var b=$(this).attr("id");b&&0')})},qa=function(){var c=0;return setInterval(function(){var b;null==b&& -(b=openoFrameWork_conf.userName);b=FrameConst.REST_HEARTBEAT+"?username="+encodeURIComponent(b);$.ajax(b,{dataType:"text",cache:!1}).done(function(b){"true"==b&&(c=0)});c++;6<=c&&(disableHeartbeat(),bootbox.alert($.i18n.prop("com_zte_ums_aos_framework_ui_heartbeat_fail"),function(){window.location.replace("login.html")}))},1E4)};if(FrameConst.do_heartbeat)var O=qa();window.enableHeartbeat=function(){return O?"Already enabled!":(heartBeatTimes=0,O=qa(),"Enabled")};window.disableHeartbeat=function(){return O? -(clearInterval(O),O=null,"Disabled"):"Already disabled!"};window.doLogout=function(){window.location=FrameConst.REST_LOGOUT};$("#trigger_logout").click(function(){bootbox.confirm($.i18n.prop("com_zte_ums_ict_framework_ui_confirmlogout"),function(c){c&&doLogout()})});var P=!1,Ha=function(){function c(){if(screenfull.supportsFullScreen)screenfull.isFullScreen?screenfull.exitFullScreen():screenfull.requestFullScreen(),P=screenfull.isFullscreen;else if(isIE&&"undefined"!==typeof window.ActiveXObject){var c= -new ActiveXObject("WScript.Shell");null!==c&&(c.SendKeys("{F11}"),P=!P)}else P=screenfull.supportsFullScreen;setTimeout(function(){P?$("#fullscreen_label").text($.i18n.prop("com_zte_ums_ict_framework_ui_group_exitfullscreen")):$("#fullscreen_label").text($.i18n.prop("com_zte_ums_ict_framework_ui_group_fullscreen"))},500)}$("#trigger_fullscreen").click(function(){c()})},ra=function(c){if(0 .theme-options").show()});$(".toggler-close",c).click(function(){$(".toggler").show();$(".toggler-close").hide();$(".zte-theme-panel > .theme-options").hide()}); -$(".theme-colors > ul > li",c).click(function(){var b=$(this).attr("data-style");d(b);$("ul > li",c).removeClass("current");$(this).addClass("current")});$(".layout-option,.header-option, .sidebar-option, .footer-option, .sidebar-pos-option, .nav-pos-direction",c).change(function(){ta()});void 0!=Q("style_color")&&d(Q("style_color"));$(".language-option",c).change(function(){var b=$(".language-option",c).val();A("language-option",b);window.location.reload()})},ta=function(){var c=$(".zte-theme-panel"), -b=$(".layout-option",c).val(),f=$(".language-option",c).val(),d=$(".header-option",c).val(),g=$(".footer-option",c).val(),h=$(".nav-pos-direction",c).val();var k=$(".zte-theme-panel");if("disabled"!=$(".nav-pos-direction",k).attr("disabled")){var l=$("#page-sidebar-menu"),m=$("#main_hormenu"),l=$("#page-sidebar-menu"),m=$("#main_hormenu"),n=$("#"+megaSiderDivId),v=$("#"+fMenuMegaDivId),w=$("#"+fMenuSiderDivId),r=$("[class='page-content']");l&&0 .header-inner").removeClass("container");1===$(".page-container").parent(".container").size()&&$(".page-container").insertAfter("body > .clearfix");1===$(".footer > .container").size()?$(".footer").html($(".footer > .container").html()):1===$(".footer").parent(".container").size()&&$(".footer").insertAfter(".page-container");$("body > .container").remove();"boxed"===b&&($("body").addClass("page-boxed"),$(".header > .header-inner").addClass("container"),$("body > .clearfix").after('
'), -$(".page-container").appendTo("body > .container"),"fixed"===g?$(".footer").html('
'+$(".footer").html()+"
"):$(".footer").appendTo("body > .container"));sa!=b&&W();sa=b;"fixed"===d?($("body").addClass("page-header-fixed"),$(".header").removeClass("navbar-static-top").addClass("navbar-fixed-top")):($("body").removeClass("page-header-fixed"),$(".header").removeClass("navbar-fixed-top").addClass("navbar-static-top"));!1===$("body").hasClass("page-full-width")&&("fixed"=== -k?$("body").addClass("page-sidebar-fixed"):$("body").removeClass("page-sidebar-fixed"));"fixed"===g?$("body").addClass("page-footer-fixed"):$("body").removeClass("page-footer-fixed");openoFrameWork.isRTL()?"left"===l?($("body").addClass("page-sidebar-reversed"),$("#frontend-link").tooltip("destroy").tooltip({placement:"right"})):(c=$("[class='page-content']"),c.css("marginLeft",0),$("body").removeClass("page-sidebar-reversed"),$("#frontend-link").tooltip("destroy").tooltip({placement:"left"})):"right"=== -l?(c=$("[class='page-content']"),c.css("marginLeft",0),$("body").addClass("page-sidebar-reversed"),$("#frontend-link").tooltip("destroy").tooltip({placement:"left"})):($("body").removeClass("page-sidebar-reversed"),$("#frontend-link").tooltip("destroy").tooltip({placement:"right"}));B();X();pa();A("layout-option",b);A("language-option",f);A("header-option",d);A("sidebar-option",k);A("sidebar-pos-option",l);A("nav-pos-direction",h)},A=function(c,b){store&&store(c,b)},Q=function(c){if(store)return store(c)}, -N=function(c){location.hash="#_"+c},ua=function(c,b,f,d){var g=$.url(openoFrameWork.getCurrentScript(document)).attr("directory")+"proxy/proxy.html",g=$(''),h=$("#ifm_Proxy");h.hide();var k=$(".page-content .page-content-body"),l=[],m=[],n=[],q="";for(i=0;i=h.length?(g.appendTo(k),g.one("load",c,function(c){var b={iFrame:c.data.iFrame,cssLinktyps:c.data.cssLinktyps,cssLinksrcs:c.data.cssLinksrcs,cssLinkids:c.data.cssLinkids,flag:d};$("#ifm_Proxy")[0].contentWindow.postMessage(b, -c.data.origin)})):h.attr("oldproxyorigin")!=b?(h.attr("src",""),h.attr("oldproxyorigin",b),h.one("load",c,function(c){var b={iFrame:c.data.iFrame,cssLinktyps:c.data.cssLinktyps,cssLinksrcs:c.data.cssLinksrcs,cssLinkids:c.data.cssLinkids,flag:d};$("#ifm_Proxy")[0].contentWindow.postMessage(b,c.data.origin)}),h.attr("src",g.attr("src"))):h[0].contentWindow.postMessage({iFrame:c.iFrame,cssLinktyps:c.cssLinktyps,cssLinksrcs:c.cssLinksrcs,cssLinkids:c.cssLinkids,flag:d},c.origin)};return{init:function(){zte_http_headers&& -store("zte_http_headers",zte_http_headers);va();xa();wa();ra(!0);C.clear();X();pa();Ca();Ga();Fa();Ia();ta();$(function(){$(window).on("hashchange",function(){var c=location.hash.replace("#_","");if(c&&0f.length)f=$(".page-content a[id='"+c+"']")}else d=== -openoFrameWork_menu_horizontal?(f=$("#main_hormenu a[id='"+c+"']"),0==f.length&&(f=$("#page-megachild-sidebar-menu a[id='"+c+"']"))):d===openoFrameWork_menu_fmenu&&(f=$("#f_hormenu a[id='"+c+"']"),0==f.length&&(f=$("#page-f-sidebar-menu a[id='"+c+"']")));d=!1;if(0=b.length){var h=c;C.contains(h)&&(f="#"+C.items(h),b=$(f))}c=void 0;f&&0');var g=document.createElement("link");g.href=f[0].href;f=null;g.rel="stylesheet";g.type="text/css";g.id="ifram_csssrc";d.push({pos:"head",scope:"all",link:g})}10!=b&&(0<$("#style_color").length&&(g=document.createElement("link"),g.href=$("#style_color")[0].href.replace(".css","_ifrm.css"),g.rel="stylesheet",g.type="text/css",g.id="style_color",d.push({pos:"head",scope:"all",link:g})),0<$("#font_awesome").length&&(f=document.createElement("link"),f.href=$("#font_awesome")[0].href, -f.rel="stylesheet",f.type="text/css",f.id="font_awesome",d.push({pos:"head",scope:"all",link:f})),g=$("script[src*='/pym.']"),g=0c.indexOf("#")&&(c="#"+c),$(c).click()))},goToPortal:function(c){var b=top.location.href;console.log(b); -b=$.url(b);top.location=b.attr("directory")+"uifportal.html#"+c+"/"},goToURLByIDAndNewIPPort:function(b,d,f){V.replace(d.menuCategoryID,{ipPort:d.ipPortStr,ipTitle:d.newTitle});store&&store("menuCategoryID",d.menuCategoryID+"[menuCategoryID]"+d.ipPortStr+"[menuCategoryID]"+(d.newTitle?d.newTitle:""));var g=this.findMenuItemByMenuId(b);if(!g||0>=g.length){var h=this.getMenuItemId_From_MoreMenuRelation(b);if(h&&0div.box",h),!1==h.hasClass("moreButtonSelected")&&h.addClass("moreButtonSelected"),h=$(".item.moreButtonsTag"),0=g.length)f=b,C.contains(f)&&(h=C.items(f),g=this.findMenuItemByMenuId(h)),g&&0=g.length){var k=this.getMenuItemId_From_MoreMenuRelation(b);k&&(g=this.findMenuItemByMenuId(k))}if(store&& -store("globleCurrentBreadcrumb")){E=store("globleCurrentBreadcrumb");for(var l=$("a",$("
"+E+"
")),m,n,q=0;qq;)m=openoFrameWork.findMenuItemByMenuId(l),l=m.attr("hparentid"),b=m.attr("id"),q++;m.hasClass("active")|| -m.parent().addClass("active")}}else console.log("goToURLByIDAndNewAction():Can't find the menuitem.The menu ID is:"+b+".Please check if the ID or ID cache is correct.");b=void 0;d&&h&&0=d.length)menuItemID=b,C.contains(menuItemID)&&(f="#"+C.items(menuItemID),d=$(f));b=void 0; -f&&0f.length||(d.preventDefault(),(f=b.attr("id"))&&0b.length)){b=openoFrameWork.handlBaseURL(b);openoFrameWork.startPageLoading();var d=$("#page-sidebar-menu");d.empty();d.append("");$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(b){var k=stripHtmlScripts(b);d.append(k);runHtmlScripts(b);siderBarMenuAuthentication();dealMysqlBackupMenu();setTimeout(function(){openoFrameWork.stopPageLoading();goToHomePage()}, -1E3)},error:function(b,d,g){}})}} -var setLayoutValueByCookie=function(){var b=$(".zte-theme-panel");void 0!=store("layout-option")&&$(".layout-option",b).val(store("layout-option"));void 0!=store("language-option")&&$(".language-option",b).val(store("language-option"));void 0!=store("sidebar-option")&&$(".sidebar-option",b).val(store("sidebar-option"));void 0!=store("header-option")&&$(".header-option",b).val(store("header-option"));void 0!=store("sidebar-pos-option")&&$(".sidebar-pos-option",b).val(store("sidebar-pos-option"));$("[class='nav-load-error']", -$(".hormenu"));$("[class='nav-load-error']",$("[class='page-sidebar-menu']"));$(".nav-pos-direction",b).val("fmenu")}; -function getHorMenu(b){setLayoutValueByCookie();2>b.length||(b=openoFrameWork.handlBaseURL(b),openoFrameWork.startPageLoading(),$("#main_hormenu").empty(),$.ajax({type:"GET",async:!1,cache:!1,url:b,dataType:"html",success:function(b){var h=stripHtmlScripts(b);$("#main_hormenu").append(h);runHtmlScripts(b);"mysql"==openoFrameWork_conf.dbType&&$(".hor-menu a[id='uep-ict-backup-baseDataBack']").parent().remove();horMenuAuthentication("main_hormenu");openoFrameWork.stopPageLoading();"horizontal"===$(".nav-pos-direction", -panel).val()&&setTimeout(function(){},150)},error:function(b,h,k){$("[class='page-content']");$(".nav-pos-direction",panel).attr("disabled",!0)}}))} -function getMegaFMenu(b){if(!(2>b.length)){b=openoFrameWork.handlBaseURL(b);openoFrameWork.startPageLoading();var d=$("#"+megaSiderDivId);d.empty();d.append("");$.ajax({type:"GET",async:!1,cache:!1,url:b,dataType:"html",success:function(b){var k=stripHtmlScripts(b);d.append(k);runHtmlScripts(b);FMenuAuthentication(megaDivId,megaSiderDivId);rebuildHorMenu();ajustFMenu(megaDivId,megaSiderDivId);openoFrameWork.stopPageLoading()}, -error:function(b,d,g){}})}}function iniHorMenu(){var b=$("#main_hormenu");b&&((b=b.attr("menuSrc"))&&0b.length||2>d.length)){b=openoFrameWork.handlBaseURL(b);d=openoFrameWork.handlBaseURL(d);openoFrameWork.startPageLoading();$("#f_hormenu").empty();$("#page-f-sidebar-menu").empty();$.ajax({type:"GET",async:!1,cache:!1,url:b,dataType:"html",success:function(b){var d=stripHtmlScripts(b);$("#f_hormenu").append(d);horMenuAuthentication("f_hormenu");runHtmlScripts(b);dealMysqlBackupMenu();openoFrameWork.stopPageLoading()},error:function(b,d,h){$("#f_hormenu").append('");$("[class='page-content']");$(".nav-pos-direction",panel).attr("disabled",!0)}});var h=$("#"+fMenuSiderDivId);h.empty();h.append("");$.ajax({type:"GET",cache:!1,url:d,dataType:"html",success:function(b){var d=stripHtmlScripts(b);h.append(d);h.children().css("display","none");runHtmlScripts(b);dealMysqlBackupMenu();FMenuAuthentication(fMenuMegaDivId, -fMenuSiderDivId);ajustFMenu(fMenuMegaDivId,fMenuSiderDivId);openoFrameWork.stopPageLoading();loadi18n_WebFramework_sideMenu()},error:function(b,d,h){$(".page-f-sidebar-menu").append('")}})}}function iniSidebarMenu(){var b=$("#page-sidebar-menu");b&&(b=b.attr("menuSrc"))&&0b.length||(openoFrameWork.startPageLoading(),$(".modal-dialog .Changepasswd").empty(),$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(b){$(".modal-dialog .Changepasswd").append(b);ChangePWD.init();openoFrameWork.stopPageLoading()},error:function(b,h,k){$(".modal-dialog .Changepasswd").append("

"+$.i18n.prop("com_zte_ums_ict_framework_ui_loadchgpwdpageError")+"

")}}))} -function iniChangePWDDlg(){var b=$(".modal-dialog .Changepasswd").attr("dlgsrc");b&&0b.length||(openoFrameWork.startPageLoading(),$("#headerMenu").empty(),$.ajax({type:"GET",cache:!1,async:!1,url:b,dataType:"html",success:function(b){$("#headerMenu").append(b);openoFrameWork.stopPageLoading()},error:function(b,h,k){}}))} -function goToHomePage(){if((locationhash=openoFrameWork.getLocationHash())&&0g.length&&(g=$(".iframe.start",k)),dealStartMenu(g,h,k))}} -var dealStartMenu=function(b,d,h){var k=setInterval(function(){b&&0b.length&&$("a[operation]",h).each(function(){b=$(this);return!1}))},100);handeCtxMenuitem()}; -function handeCtxMenuitem(){$(".page-sidebar ul li a").each(function(){$(this).attr("href")&&"javascript:;"!=$(this).attr("href")&&"#"!=$(this).attr("href")&&$(this).attr("oncontextmenu","return false")});$(".hormenu li a").each(function(){$(this).attr("href")&&"javascript:;"!=$(this).attr("href")&&"#"!=$(this).attr("href")&&$(this).attr("oncontextmenu","return false")})} -function initBaseInfo(){$("#logout_label").text($.i18n.prop("com_zte_ums_ict_framework_ui_group_logout"));$("#fullscreen_label").text($.i18n.prop("com_zte_ums_ict_framework_ui_group_fullscreen"));$("#changePwd_label").text($.i18n.prop("com_zte_ums_ict_framework_ui_changePwd"));$("#com_zte_ums_ict_framework_moudle_about").text($.i18n.prop("com_zte_ums_ict_framework_moudle_about"));$("#com_zte_ums_ict_framework_moudle_help").text($.i18n.prop("com_zte_ums_ict_framework_moudle_help"));$("#zte_menu-toggler").attr("title", -$.i18n.prop("com_zte_ums_ict_framework_moudle_menutoggler"))}window.closeModal=function(b){b&&(0>b.indexOf("#")&&(b="#"+b),$(b).modal("hide"))};function getLcsRight(b){var d=[];if(b&&0 li.btn-group")).each(function(){var g=$(this).attr("licenseid");g&&(d.push(g),g=$(this).attr("id"),b.push(g))});var h=getLcsRight(d);if(h&&h.length==b.length)for(var k=0;k li.btn-group")).parent().remove()}"mysql"==openoFrameWork_conf.dbType&&$("#uep-ict-backup-baseDataBack",$(".more-botton-zone > li.btn-group")).parent().remove();var n= -[];$("a[operation]",$(".more-botton-zone > li.btn-group")).each(function(){var b=$(this).attr("operation");b&&n.push(b)});var m=getAllOperCodeRights(n);$("a[operation]",$(".more-botton-zone > li.btn-group")).each(function(){var b=$(this).attr("operation");b&&(hasRight(b,m)||$(this).parent("li").remove())});0==$("li > a",$(".more-botton-zone > li.btn-group")).length&&$(".more-botton-zone > li.btn-group").remove()} -function rebuildSiderBarMenu(){0==$("a.start").length&&$('li > a[href!="javascript:;"]',$(".page-sidebar-menu")).eq(0).addClass("start");$("ul.sub-menu",$(".page-sidebar-menu")).each(function(){0==$(this).has("li").length&&$(this).parent("li").remove()})} -function rebuildHorMenu(){0==$("a.start").length&&$('li > a[href!="#"]',$("#main_hormenu")).eq(0).addClass("start");$("ul.mega-menu-submenu",$("#main_hormenu")).each(function(){0==$(this).has("li > a").length&&$(this).remove()});$("div.zteDivWidth",$("#main_hormenu")).each(function(){0==$(this).has("ul").length&&$(this).remove()});$("ul.dropdown-menu",$("#main_hormenu")).each(function(){0==$(this).has("ul").length&&$(this).parent("li").remove()});$("li.divider",$("#main_hormenu")).each(function(){$(this).next().hasClass("divider")&& -$(this).remove()});$("li.divider",$("#main_hormenu")).each(function(){0==$(this).next().length&&$(this).remove()})} -function getAllOperCodeRights(b){var d=[];if(b&&0 0) { - itemValue = itemValue.replace(';', ''); - } - if (/[\'\"]/.test(itemValue)) { - itemValue = itemValue.replace(/\"/g,''); - itemValue = itemValue.replace(/\'/g,''); - } - if (typeof($item.attr("title")) != "undefined") { - $item.attr("title", itemValue); - } else if (typeof($item.attr("placeholder")) != "undefined") { - $item.attr("placeholder", itemValue); - } else { - $item.text(itemValue); - } - } - } - }); -} - -function loadi18n_login(lang) { - loadProperties_login(lang); -} diff --git a/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18n.js b/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18n.js index adfcbb98..2c63adff 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18n.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18n.js @@ -15,32 +15,42 @@ */ var lang = getLanguage(); -function loadProperties(lang) { +function loadProperties(propertiesFileName, propertiesFilePath , name_i18n) { jQuery.i18n.properties({ language:lang, - name:'web-framework-integration-i18n', - path:'./common/i18n/', + name:propertiesFileName, + path:propertiesFilePath, mode:'map', callback: function() { - var i18nItems = $('[name_i18n=openo_main_page_i18n]'); + var i18nItems = $('[name_i18n='+ name_i18n + ']'); for (var i = 0; i < i18nItems.length; i++) { var $item = $(i18nItems.eq(i)); var itemId = $item.attr('id'); + var itemValue = $.i18n.prop(itemId); + if (itemValue.indexOf(';') > 0) { + itemValue = itemValue.replace(';', ''); + } + if (/[\'\"]/.test(itemValue)) { + itemValue = itemValue.replace(/\"/g,''); + itemValue = itemValue.replace(/\'/g,''); + } if (typeof($item.attr("title")) != "undefined") { - $item.attr("title", $.i18n.prop(itemId)); + $item.attr("title", itemValue); + } else if (typeof($item.attr("placeholder")) != "undefined") { + $item.attr("placeholder", itemValue); } else { - $item.text($.i18n.prop(itemId)); + $item.text(itemValue); } } } }); } -function loadi18n_WebFramework() { - loadProperties(lang); +function loadi18n_WebFramework(propertiesFileName, propertiesFilePath, name_i18n) { + loadProperties(propertiesFileName, propertiesFilePath, name_i18n); } -function loadPropertiesSideMenu(lang, propertiesFileNamePrefix, propertiesFilePath , name_I18n) { +function loadPropertiesSideMenu(lang, propertiesFileNamePrefix, propertiesFilePath, name_I18n) { if(!name_I18n) name_I18n='openo_main_page_i18n'; jQuery.i18n.properties({ language:lang, @@ -64,5 +74,5 @@ function loadPropertiesSideMenu(lang, propertiesFileNamePrefix, propertiesFilePa function loadi18n_WebFramework_sideMenu() { var srcpath ="i18n/"; - loadPropertiesSideMenu(lang , 'web-framework-integration-i18n', srcpath); + loadPropertiesSideMenu(lang , 'web-framework-i18n', srcpath); } diff --git a/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18nApp_universal.js b/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18nApp_universal.js deleted file mode 100644 index 9a6cd48c..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/js/international/loadi18nApp_universal.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2016, CMCC Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -function loadAppPropertiesSideMenu(lang){ - /** - * 调用框架的国际化资源文件加载函数; - * 相应参数为当前语言(由框架从后端取得),国际化资源文件名前缀,资源文件所在路径。 - */ - loadPropertiesSideMenu(lang, 'app-universal-i18n', 'i18n/'); -} -loadAppPropertiesSideMenu(lang); \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/js/mainpage/about.js b/openo-portal/portal-common/src/main/webapp/common/js/mainpage/about.js index 5e516bde..afbdcf62 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/mainpage/about.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/mainpage/about.js @@ -75,7 +75,7 @@ function internationalization(){ //加载国际化 jQuery.i18n.properties({ language:lang, - name:'web-framework-integration-i18n', + name:'web-framework-mainPage-i18n', path:'i18n/', // 资源文件路径 mode:'map', // 用 Map 的方式使用资源文件中的值 callback: function() {// 加载成功后设置显示内容 diff --git a/openo-portal/portal-common/src/main/webapp/common/js/mainpage/load_mainPage.js b/openo-portal/portal-common/src/main/webapp/common/js/mainpage/load_mainPage.js index 05704b56..a51d9ca9 100644 --- a/openo-portal/portal-common/src/main/webapp/common/js/mainpage/load_mainPage.js +++ b/openo-portal/portal-common/src/main/webapp/common/js/mainpage/load_mainPage.js @@ -16,8 +16,7 @@ var initMainPage = function() { var modules; var resConfig; - var lang = getLanguage(); - var propertiesFileNamePrefix = ""; + var propertiesFileName = ""; $.ajax({ async : false, @@ -27,7 +26,7 @@ var initMainPage = function() { "success" : function (res, textStatus, jqXHR) { resConfig = res; modules = res.modules; - propertiesFileNamePrefix = res.propertiesFileNamePrefix; + propertiesFileName = res.propertiesFileNamePrefix; }, error : function () { } @@ -92,6 +91,6 @@ var initMainPage = function() { } }); - loadPropertiesSideMenu(lang, propertiesFileNamePrefix, "i18n/" , "openo_main_page_i18n"); + loadi18n_WebFramework(propertiesFileName, 'i18n/', 'openo_main_page_i18n'); }); } \ No newline at end of file diff --git a/openo-portal/portal-common/src/main/webapp/common/js/security/changepwd.js b/openo-portal/portal-common/src/main/webapp/common/js/security/changepwd.js deleted file mode 100644 index 29a4096d..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/js/security/changepwd.js +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2016, CMCC Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var ChangePWD = function () { - $.validator.addMethod("passwordCheck", function() { - if( $('#password').attr('type') == 'text' && $('#rpassword').attr('type') == 'text'){ - return true; - } - if( $('#password').attr('type') == 'password' && $('#rpassword').attr('type') == 'password' ){ - if($('#password').val() == $('#rpassword').val() ){ - return true; - } - } - if($('#password').val() =='' && $('#rpassword').attr('type') == 'text' || $('#rpassword').val() =='' && $('#password').attr('type')){ - return true; - } - return false; - }); - var handleLogin = function () { - $('.login-form').validate({ - errorElement : 'span', //default input error message container - errorClass : 'help-block', // default input error message class - focusInvalid : true, // do not focus the last invalid input - onfocusout : function (element) { - $(element).valid(); - }, - rules : { - oldpassword : { - required : false - }, - password : { - required : false - }, - rpassword : { - required : false, - passwordCheck : true - } - }, - - messages : { - oldpassword : { - required : $.i18n.prop('com_zte_ums_ict_sm_user_inputoldpwd') - }, - password : { - required : $.i18n.prop('com_zte_ums_ict_sm_user_inputnewpwd') - }, - rpassword : { - required : $.i18n.prop('com_zte_ums_ict_sm_user_inputnewpwdagain'), - equalTo : $.i18n.prop('com_zte_ums_ict_sm_password_confirm_not_consistent'), - passwordCheck : $.i18n.prop('com_zte_ums_ict_sm_password_confirm_not_consistent'), - } - }, - - invalidHandler : function (event, validator) { //display error alert on form submit - $('.alert-danger', $('.login-form')).show(); - }, - - highlight : function (element) { // hightlight error inputs - $(element) - .closest('.form-group').addClass('has-error'); // set error class to the control group - }, - - success : function (label) { - label.closest('.form-group').removeClass('has-error'); - label.remove(); - }, - - errorPlacement : function (error, element) { - error.insertAfter(element.closest('.input-icon')); - }, - - submitHandler : function (form) { - // form.submit(); - var params = {}; - var currentUser = httpRequest("GET", FrameConst.REST_GET_USERNAME, ""); - params["userName"] = currentUser; - params["password"] = $("#oldpassword").attr('type')=='password' ? $("#oldpassword").val() : ''; - params["newPassword"] = $("#password").attr('type')=='password' ? $("#password").val() : ''; - params["confirmPassword"] = $("#rpassword").attr('type')=='password' ? $("#rpassword").val() : ''; - - - jQuery('#submitBtn').prop("disabled", true); - $.ajax({ - type : "POST", - url : "/web/rest/sm/user/modifyCurrentPassword", - data : params, - dataType : "json", - success : function (data) { - var returnValue = data; - - if (returnValue && returnValue.result == 1) { - bootbox.alert($.i18n.prop('com_zte_ums_ict_sm_user_op_ok'), function () { - window.closeModal('changepwdDlg'); - }); - } else { - bootbox.alert(returnValue.response.data); - } - jQuery('#submitBtn').prop("disabled", false); - }, - error : function (xhr, ajaxOptions, thrownError) { - jQuery('#submitBtn').prop("disabled", false); - } - }); - - } - }); - - $('.login-form input').keypress(function (e) { - $("#nameOrpwdError").hide(); - if (e.which == 13) { - if ($('.login-form').validate().form()) { - $('.login-form').submit(); - } - return false; - } - }); - } - var handleI18n = function () { - $("#com_zte_ums_ict_sm_user_modify_current_password").text($.i18n.prop('com_zte_ums_ict_sm_user_modify_current_password')); - $("#com_zte_ums_ict_sm_user_old_password").text($.i18n.prop('com_zte_ums_ict_sm_user_old_password')); - $("#com_zte_ums_ict_sm_user_password").text($.i18n.prop('com_zte_ums_ict_sm_user_password')); - $("#com_zte_ums_ict_sm_user_confirmpassword").text($.i18n.prop('com_zte_ums_ict_sm_user_confirmpassword')); - - $("#oldpassword").attr("placeholder", $.i18n.prop('com_zte_ums_ict_sm_user_old_password')); - $("#password").attr("placeholder", $.i18n.prop('com_zte_ums_ict_sm_user_password')); - $("#rpassword").attr("placeholder", $.i18n.prop('com_zte_ums_ict_sm_user_confirmpassword')); - - $("#com_zte_ums_ict_sm_user_ok").text($.i18n.prop('com_zte_ums_ict_sm_user_ok')); - $("#com_zte_ums_ict_sm_user_cancel_button").text($.i18n.prop('com_zte_ums_ict_sm_user_cancel_button')); - - } - var handleShowModalEvent = function () { - $('#changepwdDlg').on('show.bs.modal', function (e) { - $("#oldpassword").val(""); - $("#password").val(""); - $("#rpassword").val(""); - $(".has-error", this).removeClass("has-error"); - $("span.help-block", this).hide(); - - if(!('placeholder' in document.createElement('input'))){ // �ж�������Ƿ�֧�� placeholder,ie9��֧�֣���Ҫ���⴦�� - $("#rpassword").rules("remove", "equalTo"); - $('[placeholder]').focus(function() { - var input = $(this); - input.attr('type','password'); - $("#rpassword").rules("add", { - passwordCheck :true - }); - if (input.val() == input.attr('placeholder')) { - input.val(''); - - } - }).blur(function() { - var input = $(this); - if (input.val() == '' || input.val() == input.attr('placeholder')) { - input.attr('type','text'); - $("#rpassword").rules("remove", "passwordCheck"); - - input.val(input.attr('placeholder')); - - } - }).blur(); - - - // - }; - - - }); - } - return { - //main function to initiate the module - init : function () { - handleI18n(); - handleShowModalEvent(); - handleLogin(); - } - }; -} -(); diff --git a/openo-portal/portal-common/src/main/webapp/common/json/main-page.json b/openo-portal/portal-common/src/main/webapp/common/json/main-page.json index a47832bd..6f970022 100644 --- a/openo-portal/portal-common/src/main/webapp/common/json/main-page.json +++ b/openo-portal/portal-common/src/main/webapp/common/json/main-page.json @@ -1,5 +1,5 @@ { - "propertiesFileNamePrefix":"web-framework-integration-i18n", + "propertiesFileNamePrefix":"web-framework-mainPage-i18n", "productName":"OPEN-O System", "modules":[ { diff --git a/openo-portal/portal-common/src/main/webapp/common/login.html b/openo-portal/portal-common/src/main/webapp/common/login.html index 59aaa89f..145bf3b4 100644 --- a/openo-portal/portal-common/src/main/webapp/common/login.html +++ b/openo-portal/portal-common/src/main/webapp/common/login.html @@ -46,7 +46,7 @@ - + - + \ No newline at end of file + diff --git a/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html b/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html index b7dfcb98..ffd522bc 100644 --- a/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html +++ b/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html @@ -13,108 +13,175 @@ See the License for the specific language governing permissions and limitations under the License. --> +
  • - - - - - - - - - - - + + + + + + +
  • - - - - - - - - - - - + + + + + + +
  • - - - - - - - - - - - -
  • \ No newline at end of file + + + + + + + + +
  • + + + + + + + +
  • +
  • + + + + + + + +
  • +
  • + + + + + + + +
  • +
  • + + + + + + + +
  • +
  • + + + + + + + +
  • + diff --git a/openo-portal/portal-common/src/main/webapp/common/main_blank.html b/openo-portal/portal-common/src/main/webapp/common/main_blank.html new file mode 100644 index 00000000..5897267e --- /dev/null +++ b/openo-portal/portal-common/src/main/webapp/common/main_blank.html @@ -0,0 +1,15 @@ + diff --git a/openo-portal/portal-common/src/main/webapp/common/main_siderbar.html b/openo-portal/portal-common/src/main/webapp/common/main_siderbar.html deleted file mode 100644 index 2e16a8ef..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/main_siderbar.html +++ /dev/null @@ -1,160 +0,0 @@ - -
  • - - - - - - - -
  • -
  • - - - - - - - -
  • -
  • - - - - - - - - -
  • -
  • - - - - - - - -
  • - - - diff --git a/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.js b/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.js deleted file mode 100644 index 367680da..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.js +++ /dev/null @@ -1,12101 +0,0 @@ -/** - * @summary DataTables - * @description Paginate, search and sort HTML tables - * @version 1.9.4 - * @file jquery.dataTables.js - * @author Allan Jardine (www.sprymedia.co.uk) - * @contact www.sprymedia.co.uk/contact - * - * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - * - * For details please refer to: http://www.datatables.net - */ - -/*jslint evil: true, undef: true, browser: true */ -/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/ - -(/** @lends */function( window, document, undefined ) { - -(function( factory ) { - "use strict"; - - // Define as an AMD module if possible - if ( typeof define === 'function' && define.amd ) - { - define( ['jquery'], factory ); - } - /* Define using browser globals otherwise - * Prevent multiple instantiations if the script is loaded twice - */ - else if ( jQuery && !jQuery.fn.dataTable ) - { - factory( jQuery ); - } -} -(/** @lends */function( $ ) { - "use strict"; - /** - * DataTables is a plug-in for the jQuery Javascript library. It is a - * highly flexible tool, based upon the foundations of progressive - * enhancement, which will add advanced interaction controls to any - * HTML table. For a full list of features please refer to - * DataTables.net. - * - * Note that the DataTable object is not a global variable but is - * aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which - * it may be accessed. - * - * @class - * @param {object} [oInit={}] Configuration object for DataTables. Options - * are defined by {@link DataTable.defaults} - * @requires jQuery 1.3+ - * - * @example - * // Basic initialisation - * $(document).ready( function { - * $('#example').dataTable(); - * } ); - * - * @example - * // Initialisation with configuration options - in this case, disable - * // pagination and sorting. - * $(document).ready( function { - * $('#example').dataTable( { - * "bPaginate": false, - * "bSort": false - * } ); - * } ); - */ - var DataTable = function( oInit ) - { - - - /** - * Add a column to the list used for the table with default values - * @param {object} oSettings dataTables settings object - * @param {node} nTh The th element for this column - * @memberof DataTable#oApi - */ - function _fnAddColumn( oSettings, nTh ) - { - var oDefaults = DataTable.defaults.columns; - var iCol = oSettings.aoColumns.length; - var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { - "sSortingClass": oSettings.oClasses.sSortable, - "sSortingClassJUI": oSettings.oClasses.sSortJUI, - "nTh": nTh ? nTh : document.createElement('th'), - "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', - "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], - "mData": oDefaults.mData ? oDefaults.oDefaults : iCol - } ); - oSettings.aoColumns.push( oCol ); - - /* Add a column specific filter */ - if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) - { - oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); - } - else - { - var oPre = oSettings.aoPreSearchCols[ iCol ]; - - /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ - if ( oPre.bRegex === undefined ) - { - oPre.bRegex = true; - } - - if ( oPre.bSmart === undefined ) - { - oPre.bSmart = true; - } - - if ( oPre.bCaseInsensitive === undefined ) - { - oPre.bCaseInsensitive = true; - } - } - - /* Use the column options function to initialise classes etc */ - _fnColumnOptions( oSettings, iCol, null ); - } - - - /** - * Apply options for a column - * @param {object} oSettings dataTables settings object - * @param {int} iCol column index to consider - * @param {object} oOptions object with sType, bVisible and bSearchable etc - * @memberof DataTable#oApi - */ - function _fnColumnOptions( oSettings, iCol, oOptions ) - { - var oCol = oSettings.aoColumns[ iCol ]; - - /* User specified column options */ - if ( oOptions !== undefined && oOptions !== null ) - { - /* Backwards compatibility for mDataProp */ - if ( oOptions.mDataProp && !oOptions.mData ) - { - oOptions.mData = oOptions.mDataProp; - } - - if ( oOptions.sType !== undefined ) - { - oCol.sType = oOptions.sType; - oCol._bAutoType = false; - } - - $.extend( oCol, oOptions ); - _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); - - /* iDataSort to be applied (backwards compatibility), but aDataSort will take - * priority if defined - */ - if ( oOptions.iDataSort !== undefined ) - { - oCol.aDataSort = [ oOptions.iDataSort ]; - } - _fnMap( oCol, oOptions, "aDataSort" ); - } - - /* Cache the data get and set functions for speed */ - var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; - var mData = _fnGetObjectDataFn( oCol.mData ); - - oCol.fnGetData = function (oData, sSpecific) { - var innerData = mData( oData, sSpecific ); - - if ( oCol.mRender && (sSpecific && sSpecific !== '') ) - { - return mRender( innerData, sSpecific, oData ); - } - return innerData; - }; - oCol.fnSetData = _fnSetObjectDataFn( oCol.mData ); - - /* Feature sorting overrides column specific when off */ - if ( !oSettings.oFeatures.bSort ) - { - oCol.bSortable = false; - } - - /* Check that the class assignment is correct for sorting */ - if ( !oCol.bSortable || - ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableNone; - oCol.sSortingClassJUI = ""; - } - else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortable; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; - } - else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableAsc; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; - } - else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableDesc; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; - } - } - - - /** - * Adjust the table column widths for new data. Note: you would probably want to - * do a redraw after calling this function! - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnAdjustColumnSizing ( oSettings ) - { - /* Not interested in doing column width calculation if auto-width is disabled */ - if ( oSettings.oFeatures.bAutoWidth === false ) - { - return false; - } - - _fnCalculateColumnWidths( oSettings ); - for ( var i=0 , iLen=oSettings.aoColumns.length ; i
    - */ - - /** - * State save event, fired when the table has changed state a new state save is required. - * This method allows modification of the state saving object prior to actually doing the - * save, including addition or other state properties (for plug-ins) or modification - * of a DataTables core property. - * @name DataTable#stateSaveParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The state information to be saved - */ - - /** - * State load event, fired when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state - allowing modification - * of the saved state is required or loading of state for a plug-in. - * @name DataTable#stateLoadParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * State loaded event, fired when state has been loaded from stored data and the settings - * object has been modified by the loaded data. - * @name DataTable#stateLoaded - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * Processing event, fired when DataTables is doing some kind of processing (be it, - * sort, filter or anything else). Can be used to indicate to the end user that - * there is something happening, or that something has finished. - * @name DataTable#processing - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {boolean} bShow Flag for if DataTables is doing processing or not - */ - - /** - * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to - * made to the server for new data (note that this trigger is called in fnServerData, - * if you override fnServerData and which to use this event, you need to trigger it in - * you success function). - * @name DataTable#xhr - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - * @param {object} json JSON returned from the server - */ - - /** - * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing - * the bDestroy:true parameter in the initialisation object. This can be used to remove - * bound events, added DOM nodes, etc. - * @name DataTable#destroy - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ -})); - -}(window, document)); - diff --git a/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.min.js b/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.min.js deleted file mode 100644 index 02694a4a..00000000 --- a/openo-portal/portal-common/src/main/webapp/common/thirdparty/data-tables/jquery.dataTables-1.9.4.min.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * File: jquery.dataTables.min.js - * Version: 1.9.4 - * Author: Allan Jardine (www.sprymedia.co.uk) - * Info: www.datatables.net - * - * Copyright 2008-2012 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - */ -(function(X,l,n){var L=function(h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===n||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else if(c=a.aoPreSearchCols[d], -c.bRegex===n&&(c.bRegex=!0),c.bSmart===n&&(c.bSmart=!0),c.bCaseInsensitive===n)c.bCaseInsensitive=!0;m(a,d,null)}function m(a,b,c){var d=a.aoColumns[b];c!==n&&null!==c&&(c.mDataProp&&!c.mData&&(c.mData=c.mDataProp),c.sType!==n&&(d.sType=c.sType,d._bAutoType=!1),h.extend(d,c),p(d,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(d.aDataSort=[c.iDataSort]),p(d,c,"aDataSort"));var i=d.mRender?Q(d.mRender):null,f=Q(d.mData);d.fnGetData=function(a,b){var c=f(a,b);return d.mRender&&b&&""!==b?i(c,b,a):c};d.fnSetData= -L(d.mData);a.oFeatures.bSort||(d.bSortable=!1);!d.bSortable||-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableNone,d.sSortingClassJUI=""):-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortable,d.sSortingClassJUI=a.oClasses.sSortJUI):-1!=h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableAsc,d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed):-1== -h.inArray("asc",d.asSorting)&&-1!=h.inArray("desc",d.asSorting)&&(d.sSortingClass=a.oClasses.sSortableDesc,d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed)}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;da(a);for(var b=0,c=a.aoColumns.length;bj[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;eb&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& -(c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= -a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('
    ')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m")[0];w=d[m+ -1];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= -1;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k'):""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, -g=0,e=c.length;g=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, -a.aiDisplay.length);la(a,1);for(b=0;b").html(c).text()); -return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), -"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); -null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c'+i[1][c]+""}else{c=0;for(d=i.length;c'+i[c]+""}b+="";i=l.createElement("div");a.aanFeatures.l|| -(i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, -b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= -0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthh(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= -q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= -"";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): -""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> -d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= -0,i=0,f=b.length,g,e;itd",b));j=N(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); -return 48>b||57/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b
    ')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= -100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? -"[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;itr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, -b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i=t(d);if(!m)for(e=a;et<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, -g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, -g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= -k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;me)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';h(j).append(k);var l=h("a",j), -k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, -fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= -n!==m?''+e.fnFormatNumber(m)+"":''+e.fnFormatNumber(m)+"";m=0;for(k=M.length;mh?1:0},"string-desc":function(e,h){return eh?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return eh?1:0},"html-desc":function(e,h){return e< -h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; -for(var k=1;k")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& -L(jQuery)})(window,document); -- 2.16.6
  • - * Function return: - *
      - *
    • {int} Sorting match: <0 if first parameter should be sorted lower than - * the second parameter, ===0 if the two parameters are equal and >0 if - * the first parameter should be sorted height than the second parameter.
    • - *
    - * - * - * @type object - * @default {} - * - * @example - * // Case-sensitive string sorting, with no pre-formatting method - * $.extend( $.fn.dataTableExt.oSort, { - * "string-case-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-case-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - * - * @example - * // Case-insensitive string sorting, with pre-formatting - * $.extend( $.fn.dataTableExt.oSort, { - * "string-pre": function(x) { - * return x.toLowerCase(); - * }, - * "string-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - */ - "oSort": {}, - - - /** - * Version string for plug-ins to check compatibility. Allowed format is - * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and - * e are optional - * @type string - * @default Version number - */ - "sVersion": DataTable.version, - - - /** - * How should DataTables report an error. Can take the value 'alert' or 'throw' - * @type string - * @default alert - */ - "sErrMode": "alert", - - - /** - * Store information for DataTables to access globally about other instances - * @namespace - * @private - */ - "_oExternConfig": { - /* int:iNextUnique - next unique number for an instance */ - "iNextUnique": 0 - } - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * search information for the global filter and individual column filters. - * @namespace - */ - DataTable.models.oSearch = { - /** - * Flag to indicate if the filtering should be case insensitive or not - * @type boolean - * @default true - */ - "bCaseInsensitive": true, - - /** - * Applied search term - * @type string - * @default Empty string - */ - "sSearch": "", - - /** - * Flag to indicate if the search term should be interpreted as a - * regular expression (true) or not (false) and therefore and special - * regex characters escaped. - * @type boolean - * @default false - */ - "bRegex": false, - - /** - * Flag to indicate if DataTables is to use its smart filtering or not. - * @type boolean - * @default true - */ - "bSmart": true - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * each individual row. This is the object format used for the settings - * aoData array. - * @namespace - */ - DataTable.models.oRow = { - /** - * TR element for the row - * @type node - * @default null - */ - "nTr": null, - - /** - * Data object from the original data source for the row. This is either - * an array if using the traditional form of DataTables, or an object if - * using mData options. The exact type will depend on the passed in - * data from the data source, or will be an array if using DOM a data - * source. - * @type array|object - * @default [] - */ - "_aData": [], - - /** - * Sorting data cache - this array is ostensibly the same length as the - * number of columns (although each index is generated only as it is - * needed), and holds the data that is used for sorting each column in the - * row. We do this cache generation at the start of the sort in order that - * the formatting of the sort data need be done only once for each cell - * per sort. This array should not be read from or written to by anything - * other than the master sorting methods. - * @type array - * @default [] - * @private - */ - "_aSortData": [], - - /** - * Array of TD elements that are cached for hidden rows, so they can be - * reinserted into the table if a column is made visible again (or to act - * as a store if a column is made hidden). Only hidden columns have a - * reference in the array. For non-hidden columns the value is either - * undefined or null. - * @type array nodes - * @default [] - * @private - */ - "_anHidden": [], - - /** - * Cache of the class name that DataTables has applied to the row, so we - * can quickly look at this variable rather than needing to do a DOM check - * on className for the nTr property. - * @type string - * @default Empty string - * @private - */ - "_sRowStripe": "" - }; - - - - /** - * Template object for the column information object in DataTables. This object - * is held in the settings aoColumns array and contains all the information that - * DataTables needs about each individual column. - * - * Note that this object is related to {@link DataTable.defaults.columns} - * but this one is the internal data store for DataTables's cache of columns. - * It should NOT be manipulated outside of DataTables. Any configuration should - * be done through the initialisation options. - * @namespace - */ - DataTable.models.oColumn = { - /** - * A list of the columns that sorting should occur on when this column - * is sorted. That this property is an array allows multi-column sorting - * to be defined for a column (for example first name / last name columns - * would benefit from this). The values are integers pointing to the - * columns to be sorted on (typically it will be a single integer pointing - * at itself, but that doesn't need to be the case). - * @type array - */ - "aDataSort": null, - - /** - * Define the sorting directions that are applied to the column, in sequence - * as the column is repeatedly sorted upon - i.e. the first value is used - * as the sorting direction when the column if first sorted (clicked on). - * Sort it again (click again) and it will move on to the next index. - * Repeat until loop. - * @type array - */ - "asSorting": null, - - /** - * Flag to indicate if the column is searchable, and thus should be included - * in the filtering or not. - * @type boolean - */ - "bSearchable": null, - - /** - * Flag to indicate if the column is sortable or not. - * @type boolean - */ - "bSortable": null, - - /** - * Deprecated When using fnRender, you have two options for what - * to do with the data, and this property serves as the switch. Firstly, you - * can have the sorting and filtering use the rendered value (true - default), - * or you can have the sorting and filtering us the original value (false). - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type boolean - * @deprecated - */ - "bUseRendered": null, - - /** - * Flag to indicate if the column is currently visible in the table or not - * @type boolean - */ - "bVisible": null, - - /** - * Flag to indicate to the type detection method if the automatic type - * detection should be used, or if a column type (sType) has been specified - * @type boolean - * @default true - * @private - */ - "_bAutoType": true, - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to mRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available. - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @default null - */ - "fnCreatedCell": null, - - /** - * Function to get data from a cell in a column. You should never - * access data directly through _aData internally in DataTables - always use - * the method attached to this property. It allows mData to function as - * required. This function is automatically assigned by the column - * initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {string} sSpecific The specific data type you want to get - - * 'display', 'type' 'filter' 'sort' - * @returns {*} The data for the cell from the given row's data - * @default null - */ - "fnGetData": null, - - /** - * Deprecated Custom display function that will be called for the - * display of each cell in this column. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array} o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @returns {string} The string you which to use in the display - * @default null - * @deprecated - */ - "fnRender": null, - - /** - * Function to set data for a cell in the column. You should never - * set the data directly to _aData internally in DataTables - always use - * this method. It allows mData to function as required. This function - * is automatically assigned by the column initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {*} sValue Value to set - * @default null - */ - "fnSetData": null, - - /** - * Property to read the value for the cells in the column from the data - * source array / object. If null, then the default content is used, if a - * function is given then the return from the function is used. - * @type function|int|string|null - * @default null - */ - "mData": null, - - /** - * Partner property to mData which is used (only when defined) to get - * the data - i.e. it is basically the same as mData, but without the - * 'set' option, and also the data fed to it is the result from mData. - * This is the rendering method to match the data method of mData. - * @type function|int|string|null - * @default null - */ - "mRender": null, - - /** - * Unique header TH/TD element for this column - this is what the sorting - * listener is attached to (if sorting is enabled.) - * @type node - * @default null - */ - "nTh": null, - - /** - * Unique footer TH/TD element for this column (if there is one). Not used - * in DataTables as such, but can be used for plug-ins to reference the - * footer for each column. - * @type node - * @default null - */ - "nTf": null, - - /** - * The class to apply to all TD elements in the table's TBODY for the column - * @type string - * @default null - */ - "sClass": null, - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * @type string - */ - "sContentPadding": null, - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mData - * is set to null, or because the data source itself is null). - * @type string - * @default null - */ - "sDefaultContent": null, - - /** - * Name for the column, allowing reference to the column by name as well as - * by index (needs a lookup to work by name). - * @type string - */ - "sName": null, - - /** - * Custom sorting data type - defines which of the available plug-ins in - * afnSortData the custom sorting will use - if any is defined. - * @type string - * @default std - */ - "sSortDataType": 'std', - - /** - * Class to be applied to the header element when sorting on this column - * @type string - * @default null - */ - "sSortingClass": null, - - /** - * Class to be applied to the header element when sorting on this column - - * when jQuery UI theming is used. - * @type string - * @default null - */ - "sSortingClassJUI": null, - - /** - * Title of the column - what is seen in the TH element (nTh). - * @type string - */ - "sTitle": null, - - /** - * Column sorting and filtering type - * @type string - * @default null - */ - "sType": null, - - /** - * Width of the column - * @type string - * @default null - */ - "sWidth": null, - - /** - * Width of the column when it was first "encountered" - * @type string - * @default null - */ - "sWidthOrig": null - }; - - - - /** - * Initialisation options that can be given to DataTables at initialisation - * time. - * @namespace - */ - DataTable.defaults = { - /** - * An array of data to use for the table, passed in at initialisation which - * will be used in preference to any data which is already in the DOM. This is - * particularly useful for constructing tables purely in Javascript, for - * example with a custom Ajax call. - * @type array - * @default null - * @dtopt Option - * - * @example - * // Using a 2D array data source - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'], - * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'], - * ], - * "aoColumns": [ - * { "sTitle": "Engine" }, - * { "sTitle": "Browser" }, - * { "sTitle": "Platform" }, - * { "sTitle": "Version" }, - * { "sTitle": "Grade" } - * ] - * } ); - * } ); - * - * @example - * // Using an array of objects as a data source (mData) - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * { - * "engine": "Trident", - * "browser": "Internet Explorer 4.0", - * "platform": "Win 95+", - * "version": 4, - * "grade": "X" - * }, - * { - * "engine": "Trident", - * "browser": "Internet Explorer 5.0", - * "platform": "Win 95+", - * "version": 5, - * "grade": "C" - * } - * ], - * "aoColumns": [ - * { "sTitle": "Engine", "mData": "engine" }, - * { "sTitle": "Browser", "mData": "browser" }, - * { "sTitle": "Platform", "mData": "platform" }, - * { "sTitle": "Version", "mData": "version" }, - * { "sTitle": "Grade", "mData": "grade" } - * ] - * } ); - * } ); - */ - "aaData": null, - - - /** - * If sorting is enabled, then DataTables will perform a first pass sort on - * initialisation. You can define which column(s) the sort is performed upon, - * and the sorting direction, with this variable. The aaSorting array should - * contain an array for each column to be sorted initially containing the - * column's index and a direction string ('asc' or 'desc'). - * @type array - * @default [[0,'asc']] - * @dtopt Option - * - * @example - * // Sort by 3rd column first, and then 4th column - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [[2,'asc'], [3,'desc']] - * } ); - * } ); - * - * // No initial sorting - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [] - * } ); - * } ); - */ - "aaSorting": [[0,'asc']], - - - /** - * This parameter is basically identical to the aaSorting parameter, but - * cannot be overridden by user interaction with the table. What this means - * is that you could have a column (visible or hidden) which the sorting will - * always be forced on first - any sorting after that (from the user) will - * then be performed as required. This can be useful for grouping rows - * together. - * @type array - * @default null - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSortingFixed": [[0,'asc']] - * } ); - * } ) - */ - "aaSortingFixed": null, - - - /** - * This parameter allows you to readily specify the entries in the length drop - * down menu that DataTables shows when pagination is enabled. It can be - * either a 1D array of options which will be used for both the displayed - * option and the value, or a 2D array which will use the array in the first - * position as the value, and the array in the second position as the - * displayed options (useful for language strings such as 'All'). - * @type array - * @default [ 10, 25, 50, 100 ] - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] - * } ); - * } ); - * - * @example - * // Setting the default display length as well as length menu - * // This is likely to be wanted if you remove the '10' option which - * // is the iDisplayLength default. - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayLength": 25, - * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]] - * } ); - * } ); - */ - "aLengthMenu": [ 10, 25, 50, 100 ], - - - /** - * The aoColumns option in the initialisation parameter allows you to define - * details about the way individual columns behave. For a full list of - * column options that can be set, please see - * {@link DataTable.defaults.columns}. Note that if you use aoColumns to - * define your columns, you must have an entry in the array for every single - * column that you have in your table (these can be null if you don't which - * to specify any options). - * @member - */ - "aoColumns": null, - - /** - * Very similar to aoColumns, aoColumnDefs allows you to target a specific - * column, multiple columns, or all columns, using the aTargets property of - * each object in the array. This allows great flexibility when creating - * tables, as the aoColumnDefs arrays can be of any length, targeting the - * columns you specifically want. aoColumnDefs may use any of the column - * options available: {@link DataTable.defaults.columns}, but it _must_ - * have aTargets defined in each object in the array. Values in the aTargets - * array may be: - *
      - *
    • a string - class name will be matched on the TH for the column
    • - *
    • 0 or a positive integer - column index counting from the left
    • - *
    • a negative integer - column index counting from the right
    • - *
    • the string "_all" - all columns (i.e. assign a default)
    • - *
    - * @member - */ - "aoColumnDefs": null, - - - /** - * Basically the same as oSearch, this parameter defines the individual column - * filtering state at initialisation time. The array must be of the same size - * as the number of columns, and each element be an object with the parameters - * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also - * accepted and the default will be used. - * @type array - * @default [] - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoSearchCols": [ - * null, - * { "sSearch": "My filter" }, - * null, - * { "sSearch": "^[0-9]", "bEscapeRegex": false } - * ] - * } ); - * } ) - */ - "aoSearchCols": [], - - - /** - * An array of CSS classes that should be applied to displayed rows. This - * array may be of any length, and DataTables will apply each class - * sequentially, looping when required. - * @type array - * @default null Will take the values determined by the oClasses.sStripe* - * options - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ] - * } ); - * } ) - */ - "asStripeClasses": null, - - - /** - * Enable or disable automatic column width calculation. This can be disabled - * as an optimisation (it takes some time to calculate the widths) if the - * tables widths are passed in using aoColumns. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bAutoWidth": false - * } ); - * } ); - */ - "bAutoWidth": true, - - - /** - * Deferred rendering can provide DataTables with a huge speed boost when you - * are using an Ajax or JS data source for the table. This option, when set to - * true, will cause DataTables to defer the creation of the table elements for - * each row until they are needed for a draw - saving a significant amount of - * time. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/arrays.txt", - * "bDeferRender": true - * } ); - * } ); - */ - "bDeferRender": false, - - - /** - * Replace a DataTable which matches the given selector and replace it with - * one which has the properties of the new initialisation object passed. If no - * table matches the selector, then the new DataTable will be constructed as - * per normal. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * - * // Some time later.... - * $('#example').dataTable( { - * "bFilter": false, - * "bDestroy": true - * } ); - * } ); - */ - "bDestroy": false, - - - /** - * Enable or disable filtering of data. Filtering in DataTables is "smart" in - * that it allows the end user to input multiple words (space separated) and - * will match a row containing those words, even if not in the order that was - * specified (this allow matching across multiple columns). Note that if you - * wish to use filtering in DataTables this must remain 'true' - to remove the - * default filtering input box and retain filtering abilities, please use - * {@link DataTable.defaults.sDom}. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bFilter": false - * } ); - * } ); - */ - "bFilter": true, - - - /** - * Enable or disable the table information display. This shows information - * about the data that is currently visible on the page, including information - * about filtered data if that action is being performed. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bInfo": false - * } ); - * } ); - */ - "bInfo": true, - - - /** - * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some - * slightly different and additional mark-up from what DataTables has - * traditionally used). - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bJQueryUI": true - * } ); - * } ); - */ - "bJQueryUI": false, - - - /** - * Allows the end user to select the size of a formatted page from a select - * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate). - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bLengthChange": false - * } ); - * } ); - */ - "bLengthChange": true, - - - /** - * Enable or disable pagination. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bPaginate": false - * } ); - * } ); - */ - "bPaginate": true, - - - /** - * Enable or disable the display of a 'processing' indicator when the table is - * being processed (e.g. a sort). This is particularly useful for tables with - * large amounts of data where it can take a noticeable amount of time to sort - * the entries. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bProcessing": true - * } ); - * } ); - */ - "bProcessing": false, - - - /** - * Retrieve the DataTables object for the given selector. Note that if the - * table has already been initialised, this parameter will cause DataTables - * to simply return the object that has already been set up - it will not take - * account of any changes you might have made to the initialisation object - * passed to DataTables (setting this parameter to true is an acknowledgement - * that you understand this). bDestroy can be used to reinitialise a table if - * you need. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * initTable(); - * tableActions(); - * } ); - * - * function initTable () - * { - * return $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false, - * "bRetrieve": true - * } ); - * } - * - * function tableActions () - * { - * var oTable = initTable(); - * // perform API operations with oTable - * } - */ - "bRetrieve": false, - - - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * @type boolean - * @default true - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollAutoCss": false, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollAutoCss": true, - - - /** - * When vertical (y) scrolling is enabled, DataTables will force the height of - * the table's viewport to the given height at all times (useful for layout). - * However, this can look odd when filtering data down to a small data set, - * and the footer is left "floating" further down. This parameter (when - * enabled) will cause DataTables to collapse the table's viewport down when - * the result set will fit within the given Y height. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200", - * "bScrollCollapse": true - * } ); - * } ); - */ - "bScrollCollapse": false, - - - /** - * Enable infinite scrolling for DataTables (to be used in combination with - * sScrollY). Infinite scrolling means that DataTables will continually load - * data as a user scrolls through a table, which is very useful for large - * dataset. This cannot be used with pagination, which is automatically - * disabled. Note - the Scroller extra for DataTables is recommended in - * in preference to this option. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollInfinite": false, - - - /** - * Configure DataTables to use server-side processing. Note that the - * sAjaxSource parameter must also be given in order to give DataTables a - * source to obtain the required data for each draw. - * @type boolean - * @default false - * @dtopt Features - * @dtopt Server-side - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "xhr.php" - * } ); - * } ); - */ - "bServerSide": false, - - - /** - * Enable or disable sorting of columns. Sorting of individual columns can be - * disabled by the "bSortable" option for each column. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSort": false - * } ); - * } ); - */ - "bSort": true, - - - /** - * Allows control over whether DataTables should use the top (true) unique - * cell that is found for a single column, or the bottom (false - default). - * This is useful when using complex headers. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bSortCellsTop": true - * } ); - * } ); - */ - "bSortCellsTop": false, - - - /** - * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and - * 'sorting_3' to the columns which are currently being sorted on. This is - * presented as a feature switch as it can increase processing time (while - * classes are removed and added) so for large data sets you might want to - * turn this off. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSortClasses": false - * } ); - * } ); - */ - "bSortClasses": true, - - - /** - * Enable or disable state saving. When enabled a cookie will be used to save - * table display information such as pagination information, display length, - * filtering and sorting. As such when the end user reloads the page the - * display display will match what thy had previously set up. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bStateSave": true - * } ); - * } ); - */ - "bStateSave": false, - - - /** - * Customise the cookie and / or the parameters being stored when using - * DataTables with state saving enabled. This function is called whenever - * the cookie is modified, and it expects a fully formed cookie string to be - * returned. Note that the data object passed in is a Javascript object which - * must be converted to a string (JSON.stringify for example). - * @type function - * @param {string} sName Name of the cookie defined by DataTables - * @param {object} oData Data to be stored in the cookie - * @param {string} sExpires Cookie expires string - * @param {string} sPath Path of the cookie to set - * @returns {string} Cookie formatted string (which should be encoded by - * using encodeURIComponent()) - * @dtopt Callbacks - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "fnCookieCallback": function (sName, oData, sExpires, sPath) { - * // Customise oData or sName or whatever else here - * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath; - * } - * } ); - * } ); - */ - "fnCookieCallback": null, - - - /** - * This function is called when a TR element is created (and all TD child - * elements have been inserted), or registered if using a DOM source, allowing - * manipulation of the TR element (adding classes etc). - * @type function - * @param {node} nRow "TR" element for the current row - * @param {array} aData Raw data array for this row - * @param {int} iDataIndex The index of this row in aoData - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnCreatedRow": function( nRow, aData, iDataIndex ) { - * // Bold the grade for all 'A' grade browsers - * if ( aData[4] == "A" ) - * { - * $('td:eq(4)', nRow).html( 'A' ); - * } - * } - * } ); - * } ); - */ - "fnCreatedRow": null, - - - /** - * This function is called on every 'draw' event, and allows you to - * dynamically modify any aspect you want about the created DOM. - * @type function - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnDrawCallback": function( oSettings ) { - * alert( 'DataTables has redrawn the table' ); - * } - * } ); - * } ); - */ - "fnDrawCallback": null, - - - /** - * Identical to fnHeaderCallback() but for the table footer this function - * allows you to modify the table footer on every 'draw' even. - * @type function - * @param {node} nFoot "TR" element for the footer - * @param {array} aData Full table data (as derived from the original HTML) - * @param {int} iStart Index for the current display starting point in the - * display array - * @param {int} iEnd Index for the current display ending point in the - * display array - * @param {array int} aiDisplay Index array to translate the visual position - * to the full data array - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) { - * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart; - * } - * } ); - * } ) - */ - "fnFooterCallback": null, - - - /** - * When rendering large numbers in the information element for the table - * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers - * to have a comma separator for the 'thousands' units (e.g. 1 million is - * rendered as "1,000,000") to help readability for the end user. This - * function will override the default method DataTables uses. - * @type function - * @member - * @param {int} iIn number to be formatted - * @returns {string} formatted string for DataTables to show the number - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnFormatNumber": function ( iIn ) { - * if ( iIn < 1000 ) { - * return iIn; - * } else { - * var - * s=(iIn+""), - * a=s.split(""), out="", - * iLen=s.length; - * - * for ( var i=0 ; i<iLen ; i++ ) { - * if ( i%3 === 0 && i !== 0 ) { - * out = "'"+out; - * } - * out = a[iLen-i-1]+out; - * } - * } - * return out; - * }; - * } ); - * } ); - */ - "fnFormatNumber": function ( iIn ) { - if ( iIn < 1000 ) - { - // A small optimisation for what is likely to be the majority of use cases - return iIn; - } - - var s=(iIn+""), a=s.split(""), out="", iLen=s.length; - - for ( var i=0 ; iA
    ' ); - * } - * } - * } ); - * } ); - */ - "fnRowCallback": null, - - - /** - * This parameter allows you to override the default function which obtains - * the data from the server ($.getJSON) so something more suitable for your - * application. For example you could use POST data, or pull information from - * a Gears or AIR database. - * @type function - * @member - * @param {string} sSource HTTP source to obtain the data from (sAjaxSource) - * @param {array} aoData A key/value pair object containing the data to send - * to the server - * @param {function} fnCallback to be called on completion of the data get - * process that will draw the data on the page. - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * // POST data to server - * $(document).ready( function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "xhr.php", - * "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) { - * oSettings.jqXHR = $.ajax( { - * "dataType": 'json', - * "type": "POST", - * "url": sSource, - * "data": aoData, - * "success": fnCallback - * } ); - * } - * } ); - * } ); - */ - "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) { - oSettings.jqXHR = $.ajax( { - "url": sUrl, - "data": aoData, - "success": function (json) { - if ( json.sError ) { - oSettings.oApi._fnLog( oSettings, 0, json.sError ); - } - - $(oSettings.oInstance).trigger('xhr', [oSettings, json]); - fnCallback( json ); - }, - "dataType": "json", - "cache": false, - "type": oSettings.sServerMethod, - "error": function (xhr, error, thrown) { - if ( error == "parsererror" ) { - oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+ - "server could not be parsed. This is caused by a JSON formatting error." ); - } - } - } ); - }, - - - /** - * It is often useful to send extra data to the server when making an Ajax - * request - for example custom filtering information, and this callback - * function makes it trivial to send extra information to the server. The - * passed in parameter is the data set that has been constructed by - * DataTables, and you can add to this or modify it as you require. - * @type function - * @param {array} aoData Data array (array of objects which are name/value - * pairs) that has been constructed by DataTables and will be sent to the - * server. In the case of Ajax sourced data with server-side processing - * this will be an empty array, for server-side processing there will be a - * significant number of parameters! - * @returns {undefined} Ensure that you modify the aoData array passed in, - * as this is passed by reference. - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "fnServerParams": function ( aoData ) { - * aoData.push( { "name": "more_data", "value": "my_value" } ); - * } - * } ); - * } ); - */ - "fnServerParams": null, - - - /** - * Load the table state. With this function you can define from where, and how, the - * state of a table is loaded. By default DataTables will load from its state saving - * cookie, but you might wish to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @return {object} The DataTables state object to be loaded - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoad": function (oSettings) { - * var o; - * - * // Send an Ajax request to the server to get the data. Note that - * // this is a synchronous request. - * $.ajax( { - * "url": "/state_load", - * "async": false, - * "dataType": "json", - * "success": function (json) { - * o = json; - * } - * } ); - * - * return o; - * } - * } ); - * } ); - */ - "fnStateLoad": function ( oSettings ) { - var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance ); - var oData; - - try { - oData = (typeof $.parseJSON === 'function') ? - $.parseJSON(sData) : eval( '('+sData+')' ); - } catch (e) { - oData = null; - } - - return oData; - }, - - - /** - * Callback which allows modification of the saved state prior to loading that state. - * This callback is called when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state. Note that for - * plug-in authors, you should use the 'stateLoadParams' event to load parameters for - * a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that is to be loaded - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never loaded - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } - * } ); - * } ); - * - * @example - * // Disallow state loading by returning false - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * return false; - * } - * } ); - * } ); - */ - "fnStateLoadParams": null, - - - /** - * Callback that is called when the state has been loaded from the state saving method - * and the DataTables settings object has been modified as a result of the loaded state. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that was loaded - * @dtopt Callbacks - * - * @example - * // Show an alert with the filtering value that was saved - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoaded": function (oSettings, oData) { - * alert( 'Saved filter was: '+oData.oSearch.sSearch ); - * } - * } ); - * } ); - */ - "fnStateLoaded": null, - - - /** - * Save the table state. This function allows you to define where and how the state - * information for the table is stored - by default it will use a cookie, but you - * might want to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSave": function (oSettings, oData) { - * // Send an Ajax request to the server with the state object - * $.ajax( { - * "url": "/state_save", - * "data": oData, - * "dataType": "json", - * "method": "POST" - * "success": function () {} - * } ); - * } - * } ); - * } ); - */ - "fnStateSave": function ( oSettings, oData ) { - this.oApi._fnCreateCookie( - oSettings.sCookiePrefix+oSettings.sInstance, - this.oApi._fnJsonString(oData), - oSettings.iCookieDuration, - oSettings.sCookiePrefix, - oSettings.fnCookieCallback - ); - }, - - - /** - * Callback which allows modification of the state to be saved. Called when the table - * has changed state a new state save is required. This method allows modification of - * the state saving object prior to actually doing the save, including addition or - * other state properties or modification. Note that for plug-in authors, you should - * use the 'stateSaveParams' event to save parameters for a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never saved - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSaveParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } - * } ); - * } ); - */ - "fnStateSaveParams": null, - - - /** - * Duration of the cookie which is used for storing session information. This - * value is given in seconds. - * @type int - * @default 7200 (2 hours) - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iCookieDuration": 60*60*24; // 1 day - * } ); - * } ) - */ - "iCookieDuration": 7200, - - - /** - * When enabled DataTables will not make a request to the server for the first - * page draw - rather it will use the data already on the page (no sorting etc - * will be applied to it), thus saving on an XHR at load time. iDeferLoading - * is used to indicate that deferred loading is required, but it is also used - * to tell DataTables how many records there are in the full table (allowing - * the information element and pagination to be displayed correctly). In the case - * where a filtering is applied to the table on initial load, this can be - * indicated by giving the parameter as an array, where the first element is - * the number of records available after filtering and the second element is the - * number of records without filtering (allowing the table information element - * to be shown correctly). - * @type int | array - * @default null - * @dtopt Options - * - * @example - * // 57 records available in the table, no filtering applied - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": 57 - * } ); - * } ); - * - * @example - * // 57 records after filtering, 100 without filtering (an initial filter applied) - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": [ 57, 100 ], - * "oSearch": { - * "sSearch": "my_filter" - * } - * } ); - * } ); - */ - "iDeferLoading": null, - - - /** - * Number of rows to display on a single page when using pagination. If - * feature enabled (bLengthChange) then the end user will be able to override - * this to a custom setting using a pop-up menu. - * @type int - * @default 10 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayLength": 50 - * } ); - * } ) - */ - "iDisplayLength": 10, - - - /** - * Define the starting point for data display when using DataTables with - * pagination. Note that this parameter is the number of records, rather than - * the page number, so if you have 10 records per page and want to start on - * the third page, it should be "20". - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayStart": 20 - * } ); - * } ) - */ - "iDisplayStart": 0, - - - /** - * The scroll gap is the amount of scrolling that is left to go before - * DataTables will load the next 'page' of data automatically. You typically - * want a gap which is big enough that the scrolling will be smooth for the - * user, while not so large that it will load more data than need. - * @type int - * @default 100 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px", - * "iScrollLoadGap": 50 - * } ); - * } ); - */ - "iScrollLoadGap": 100, - - - /** - * By default DataTables allows keyboard navigation of the table (sorting, paging, - * and filtering) by adding a tabindex attribute to the required elements. This - * allows you to tab through the controls and press the enter key to activate them. - * The tabindex is default 0, meaning that the tab follows the flow of the document. - * You can overrule this using this parameter if you wish. Use a value of -1 to - * disable built-in keyboard navigation. - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iTabIndex": 1 - * } ); - * } ); - */ - "iTabIndex": 0, - - - /** - * All strings that DataTables uses in the user interface that it creates - * are defined in this object, allowing you to modified them individually or - * completely replace them all as required. - * @namespace - */ - "oLanguage": { - /** - * Strings that are used for WAI-ARIA labels and controls only (these are not - * actually visible on the page, but will be read by screenreaders, and thus - * must be internationalised as well). - * @namespace - */ - "oAria": { - /** - * ARIA label that is added to the table headers when the column may be - * sorted ascending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortAscending": " - click/return to sort ascending" - * } - * } - * } ); - * } ); - */ - "sSortAscending": ": activate to sort column ascending", - - /** - * ARIA label that is added to the table headers when the column may be - * sorted descending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortDescending": " - click/return to sort descending" - * } - * } - * } ); - * } ); - */ - "sSortDescending": ": activate to sort column descending" - }, - - /** - * Pagination string used by DataTables for the two built-in pagination - * control types ("two_button" and "full_numbers") - * @namespace - */ - "oPaginate": { - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the first page. - * @type string - * @default First - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sFirst": "First page" - * } - * } - * } ); - * } ); - */ - "sFirst": "First", - - - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the last page. - * @type string - * @default Last - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sLast": "Last page" - * } - * } - * } ); - * } ); - */ - "sLast": "Last", - - - /** - * Text to use for the 'next' pagination button (to take the user to the - * next page). - * @type string - * @default Next - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sNext": "Next page" - * } - * } - * } ); - * } ); - */ - "sNext": "Next", - - - /** - * Text to use for the 'previous' pagination button (to take the user to - * the previous page). - * @type string - * @default Previous - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sPrevious": "Previous page" - * } - * } - * } ); - * } ); - */ - "sPrevious": "Previous" - }, - - /** - * This string is shown in preference to sZeroRecords when the table is - * empty of data (regardless of filtering). Note that this is an optional - * parameter - if it is not given, the value of sZeroRecords will be used - * instead (either the default or given value). - * @type string - * @default No data available in table - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sEmptyTable": "No data available in table" - * } - * } ); - * } ); - */ - "sEmptyTable": "No data available in table", - - - /** - * This string gives information to the end user about the information that - * is current on display on the page. The _START_, _END_ and _TOTAL_ - * variables are all dynamically replaced as the table display updates, and - * can be freely moved or removed as the language requirements change. - * @type string - * @default Showing _START_ to _END_ of _TOTAL_ entries - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)" - * } - * } ); - * } ); - */ - "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", - - - /** - * Display information string for when the table is empty. Typically the - * format of this string should match sInfo. - * @type string - * @default Showing 0 to 0 of 0 entries - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoEmpty": "No entries to show" - * } - * } ); - * } ); - */ - "sInfoEmpty": "Showing 0 to 0 of 0 entries", - - - /** - * When a user filters the information in a table, this string is appended - * to the information (sInfo) to give an idea of how strong the filtering - * is. The variable _MAX_ is dynamically updated. - * @type string - * @default (filtered from _MAX_ total entries) - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoFiltered": " - filtering from _MAX_ records" - * } - * } ); - * } ); - */ - "sInfoFiltered": "(filtered from _MAX_ total entries)", - - - /** - * If can be useful to append extra information to the info string at times, - * and this variable does exactly that. This information will be appended to - * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are - * being used) at all times. - * @type string - * @default Empty string - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoPostFix": "All records shown are derived from real information." - * } - * } ); - * } ); - */ - "sInfoPostFix": "", - - - /** - * DataTables has a build in number formatter (fnFormatNumber) which is used - * to format large numbers that are used in the table information. By - * default a comma is used, but this can be trivially changed to any - * character you wish with this parameter. - * @type string - * @default , - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoThousands": "'" - * } - * } ); - * } ); - */ - "sInfoThousands": ",", - - - /** - * Detail the action that will be taken when the drop down menu for the - * pagination length option is changed. The '_MENU_' variable is replaced - * with a default select list of 10, 25, 50 and 100, and can be replaced - * with a custom select box if required. - * @type string - * @default Show _MENU_ entries - * @dtopt Language - * - * @example - * // Language change only - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": "Display _MENU_ records" - * } - * } ); - * } ); - * - * @example - * // Language and options change - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": 'Display records' - * } - * } ); - * } ); - */ - "sLengthMenu": "Show _MENU_ entries", - - - /** - * When using Ajax sourced data and during the first draw when DataTables is - * gathering the data, this message is shown in an empty row in the table to - * indicate to the end user the the data is being loaded. Note that this - * parameter is not used when loading data by server-side processing, just - * Ajax sourced data with client-side processing. - * @type string - * @default Loading... - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLoadingRecords": "Please wait - loading..." - * } - * } ); - * } ); - */ - "sLoadingRecords": "Loading...", - - - /** - * Text which is displayed when the table is processing a user action - * (usually a sort command or similar). - * @type string - * @default Processing... - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sProcessing": "DataTables is currently busy" - * } - * } ); - * } ); - */ - "sProcessing": "Processing...", - - - /** - * Details the actions that will be taken when the user types into the - * filtering input text box. The variable "_INPUT_", if used in the string, - * is replaced with the HTML text box for the filtering input allowing - * control over where it appears in the string. If "_INPUT_" is not given - * then the input box is appended to the string automatically. - * @type string - * @default Search: - * @dtopt Language - * - * @example - * // Input text box will be appended at the end automatically - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Filter records:" - * } - * } ); - * } ); - * - * @example - * // Specify where the filter should appear - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Apply filter _INPUT_ to table" - * } - * } ); - * } ); - */ - "sSearch": "Search:", - - - /** - * All of the language information can be stored in a file on the - * server-side, which DataTables will look up if this parameter is passed. - * It must store the URL of the language file, which is in a JSON format, - * and the object has the same properties as the oLanguage object in the - * initialiser object (i.e. the above parameters). Please refer to one of - * the example language files to see how this works in action. - * @type string - * @default Empty string - i.e. disabled - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt" - * } - * } ); - * } ); - */ - "sUrl": "", - - - /** - * Text shown inside the table records when the is no information to be - * displayed after filtering. sEmptyTable is shown when there is simply no - * information in the table at all (regardless of filtering). - * @type string - * @default No matching records found - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sZeroRecords": "No records to display" - * } - * } ); - * } ); - */ - "sZeroRecords": "No matching records found" - }, - - - /** - * This parameter allows you to have define the global filtering state at - * initialisation time. As an object the "sSearch" parameter must be - * defined, but all other parameters are optional. When "bRegex" is true, - * the search string will be treated as a regular expression, when false - * (default) it will be treated as a straight string. When "bSmart" - * DataTables will use it's smart filtering methods (to word match at - * any point in the data), when false this will not be done. - * @namespace - * @extends DataTable.models.oSearch - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oSearch": {"sSearch": "Initial search"} - * } ); - * } ) - */ - "oSearch": $.extend( {}, DataTable.models.oSearch ), - - - /** - * By default DataTables will look for the property 'aaData' when obtaining - * data from an Ajax source or for server-side processing - this parameter - * allows that property to be changed. You can use Javascript dotted object - * notation to get a data source for multiple levels of nesting. - * @type string - * @default aaData - * @dtopt Options - * @dtopt Server-side - * - * @example - * // Get data from { "data": [...] } - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data" - * } ); - * } ); - * - * @example - * // Get data from { "data": { "inner": [...] } } - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data.inner" - * } ); - * } ); - */ - "sAjaxDataProp": "aaData", - - - /** - * You can instruct DataTables to load data from an external source using this - * parameter (use aData if you want to pass data in you already have). Simply - * provide a url a JSON object can be obtained from. This object must include - * the parameter 'aaData' which is the data source for the table. - * @type string - * @default null - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php" - * } ); - * } ) - */ - "sAjaxSource": null, - - - /** - * This parameter can be used to override the default prefix that DataTables - * assigns to a cookie when state saving is enabled. - * @type string - * @default SpryMedia_DataTables_ - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sCookiePrefix": "my_datatable_", - * } ); - * } ); - */ - "sCookiePrefix": "SpryMedia_DataTables_", - - - /** - * This initialisation variable allows you to specify exactly where in the - * DOM you want DataTables to inject the various controls it adds to the page - * (for example you might want the pagination controls at the top of the - * table). DIV elements (with or without a custom class) can also be added to - * aid styling. The follow syntax is used: - *
      - *
    • The following options are allowed: - *
        - *
      • 'l' - Length changing
      • 'f' - Filtering input - *
      • 't' - The table!
      • - *
      • 'i' - Information
      • - *
      • 'p' - Pagination
      • - *
      • 'r' - pRocessing
      • - *
      - *
    • - *
    • The following constants are allowed: - *
        - *
      • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
      • - *
      • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
      • - *
      - *
    • - *
    • The following syntax is expected: - *
        - *
      • '<' and '>' - div elements
      • - *
      • '<"class" and '>' - div with a class
      • - *
      • '<"#id" and '>' - div with an ID
      • - *
      - *
    • - *
    • Examples: - *
        - *
      • '<"wrapper"flipt>'
      • - *
      • '<lf<t>ip>'
      • - *
      - *
    • - *
    - * @type string - * @default lfrtip (when bJQueryUI is false) or - * <"H"lfr>t<"F"ip> (when bJQueryUI is true) - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sDom": '<"top"i>rt<"bottom"flp><"clear">' - * } ); - * } ); - */ - "sDom": "lfrtip", - - - /** - * DataTables features two different built-in pagination interaction methods - * ('two_button' or 'full_numbers') which present different page controls to - * the end user. Further methods can be added using the API (see below). - * @type string - * @default two_button - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sPaginationType": "full_numbers" - * } ); - * } ) - */ - "sPaginationType": "two_button", - - - /** - * Enable horizontal scrolling. When a table is too wide to fit into a certain - * layout, or you have a large number of columns in the table, you can enable - * x-scrolling to show the table in a viewport, which can be scrolled. This - * property can be any CSS unit, or a number (in which case it will be treated - * as a pixel measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "bScrollCollapse": true - * } ); - * } ); - */ - "sScrollX": "", - - - /** - * This property can be used to force a DataTable to use more width than it - * might otherwise do when x-scrolling is enabled. For example if you have a - * table which requires to be well spaced, this parameter is useful for - * "over-sizing" the table, and thus forcing scrolling. This property can by - * any CSS unit, or a number (in which case it will be treated as a pixel - * measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "sScrollXInner": "110%" - * } ); - * } ); - */ - "sScrollXInner": "", - - - /** - * Enable vertical scrolling. Vertical scrolling will constrain the DataTable - * to the given height, and enable scrolling for any data which overflows the - * current viewport. This can be used as an alternative to paging to display - * a lot of data in a small area (although paging and scrolling can both be - * enabled at the same time). This property can be any CSS unit, or a number - * (in which case it will be treated as a pixel measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * } ); - */ - "sScrollY": "", - - - /** - * Set the HTTP method that is used to make the Ajax call for server-side - * processing or Ajax sourced data. - * @type string - * @default GET - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/post.php", - * "sServerMethod": "POST" - * } ); - * } ); - */ - "sServerMethod": "GET" - }; - - - - /** - * Column options that can be given to DataTables at initialisation time. - * @namespace - */ - DataTable.defaults.columns = { - /** - * Allows a column's sorting to take multiple columns into account when - * doing a sort. For example first name / last name columns make sense to - * do a multi-column sort over the two columns. - * @type array - * @default null Takes the value of the column index automatically - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] }, - * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] }, - * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "aDataSort": [ 0, 1 ] }, - * { "aDataSort": [ 1, 0 ] }, - * { "aDataSort": [ 2, 3, 4 ] }, - * null, - * null - * ] - * } ); - * } ); - */ - "aDataSort": null, - - - /** - * You can control the default sorting direction, and even alter the behaviour - * of the sort handler (i.e. only allow ascending sorting etc) using this - * parameter. - * @type array - * @default [ 'asc', 'desc' ] - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "asSorting": [ "asc" ], "aTargets": [ 1 ] }, - * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] }, - * { "asSorting": [ "desc" ], "aTargets": [ 3 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * { "asSorting": [ "asc" ] }, - * { "asSorting": [ "desc", "asc", "asc" ] }, - * { "asSorting": [ "desc" ] }, - * null - * ] - * } ); - * } ); - */ - "asSorting": [ 'asc', 'desc' ], - - - /** - * Enable or disable filtering on the data in this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSearchable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSearchable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSearchable": true, - - - /** - * Enable or disable sorting on this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSortable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSortable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSortable": true, - - - /** - * Deprecated When using fnRender() for a column, you may wish - * to use the original data (before rendering) for sorting and filtering - * (the default is to used the rendered data that the user can see). This - * may be useful for dates etc. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type boolean - * @default true - * @dtopt Columns - * @deprecated - */ - "bUseRendered": true, - - - /** - * Enable or disable the display of this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bVisible": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bVisible": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bVisible": true, - - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to mRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available. - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @param {int} iCol The column index for aoColumns - * @dtopt Columns - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [3], - * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { - * if ( sData == "1.7" ) { - * $(nTd).css('color', 'blue') - * } - * } - * } ] - * }); - * } ); - */ - "fnCreatedCell": null, - - - /** - * Deprecated Custom display function that will be called for the - * display of each cell in this column. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array} o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @param {object} o.mDataProp The data property used for this column - * @param {*} val The current cell value - * @returns {string} The string you which to use in the display - * @dtopt Columns - * @deprecated - */ - "fnRender": null, - - - /** - * The column index (starting from 0!) that you wish a sort to be performed - * upon when this column is selected for sorting. This can be used for sorting - * on hidden columns for example. - * @type int - * @default -1 Use automatically calculated column index - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "iDataSort": 1, "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "iDataSort": 1 }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "iDataSort": -1, - - - /** - * This parameter has been replaced by mData in DataTables to ensure naming - * consistency. mDataProp can still be used, as there is backwards compatibility - * in DataTables for this option, but it is strongly recommended that you use - * mData in preference to mDataProp. - * @name DataTable.defaults.columns.mDataProp - */ - - - /** - * This property can be used to read data from any JSON data source property, - * including deeply nested objects / properties. mData can be given in a - * number of different ways which effect its behaviour: - *
      - *
    • integer - treated as an array index for the data source. This is the - * default that DataTables uses (incrementally increased for each column).
    • - *
    • string - read an object property from the data source. Note that you can - * use Javascript dotted notation to read deep properties / arrays from the - * data source.
    • - *
    • null - the sDefaultContent option will be used for the cell (null - * by default, so you will need to specify the default content you want - - * typically an empty string). This can be useful on generated columns such - * as edit / delete action columns.
    • - *
    • function - the function given will be executed whenever DataTables - * needs to set or get the data for a cell in the column. The function - * takes three parameters: - *
        - *
      • {array|object} The data source for the row
      • - *
      • {string} The type call data requested - this will be 'set' when - * setting data or 'filter', 'display', 'type', 'sort' or undefined when - * gathering data. Note that when undefined is given for the type - * DataTables expects to get the raw data for the object back
      • - *
      • {*} Data to set when the second parameter is 'set'.
      • - *
      - * The return value from the function is not required when 'set' is the type - * of call, but otherwise the return is what will be used for the data - * requested.
    • - *
    - * - * Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change - * reflects the flexibility of this property and is consistent with the naming of - * mRender. If 'mDataProp' is given, then it will still be used by DataTables, as - * it automatically maps the old name to the new if required. - * @type string|int|function|null - * @default null Use automatically calculated column index - * @dtopt Columns - * - * @example - * // Read table data from objects - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/deep.txt", - * "aoColumns": [ - * { "mData": "engine" }, - * { "mData": "browser" }, - * { "mData": "platform.inner" }, - * { "mData": "platform.details.0" }, - * { "mData": "platform.details.1" } - * ] - * } ); - * } ); - * - * @example - * // Using mData as a function to provide different information for - * // sorting, filtering and display. In this case, currency (price) - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [ 0 ], - * "mData": function ( source, type, val ) { - * if (type === 'set') { - * source.price = val; - * // Store the computed dislay and filter values for efficiency - * source.price_display = val=="" ? "" : "$"+numberFormat(val); - * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; - * return; - * } - * else if (type === 'display') { - * return source.price_display; - * } - * else if (type === 'filter') { - * return source.price_filter; - * } - * // 'sort', 'type' and undefined all just use the integer - * return source.price; - * } - * } ] - * } ); - * } ); - */ - "mData": null, - - - /** - * This property is the rendering partner to mData and it is suggested that - * when you want to manipulate data for display (including filtering, sorting etc) - * but not altering the underlying data for the table, use this property. mData - * can actually do everything this property can and more, but this parameter is - * easier to use since there is no 'set' option. Like mData is can be given - * in a number of different ways to effect its behaviour, with the addition of - * supporting array syntax for easy outputting of arrays (including arrays of - * objects): - *
      - *
    • integer - treated as an array index for the data source. This is the - * default that DataTables uses (incrementally increased for each column).
    • - *
    • string - read an object property from the data source. Note that you can - * use Javascript dotted notation to read deep properties / arrays from the - * data source and also array brackets to indicate that the data reader should - * loop over the data source array. When characters are given between the array - * brackets, these characters are used to join the data source array together. - * For example: "accounts[, ].name" would result in a comma separated list with - * the 'name' value from the 'accounts' array of objects.
    • - *
    • function - the function given will be executed whenever DataTables - * needs to set or get the data for a cell in the column. The function - * takes three parameters: - *
        - *
      • {array|object} The data source for the row (based on mData)
      • - *
      • {string} The type call data requested - this will be 'filter', 'display', - * 'type' or 'sort'.
      • - *
      • {array|object} The full data source for the row (not based on mData)
      • - *
      - * The return value from the function is what will be used for the data - * requested.
    • - *
    - * @type string|int|function|null - * @default null Use mData - * @dtopt Columns - * - * @example - * // Create a comma separated list from an array of objects - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/deep.txt", - * "aoColumns": [ - * { "mData": "engine" }, - * { "mData": "browser" }, - * { - * "mData": "platform", - * "mRender": "[, ].name" - * } - * ] - * } ); - * } ); - * - * @example - * // Use as a function to create a link from the data source - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "aTargets": [ 0 ], - * "mData": "download_link", - * "mRender": function ( data, type, full ) { - * return 'Download'; - * } - * ] - * } ); - * } ); - */ - "mRender": null, - - - /** - * Change the cell type created for the column - either TD cells or TH cells. This - * can be useful as TH cells have semantic meaning in the table body, allowing them - * to act as a header for a row (you may wish to add scope='row' to the TH elements). - * @type string - * @default td - * @dtopt Columns - * - * @example - * // Make the first column use TH cells - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [ 0 ], - * "sCellType": "th" - * } ] - * } ); - * } ); - */ - "sCellType": "td", - - - /** - * Class to give to each cell in this column. - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sClass": "my_class", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sClass": "my_class" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sClass": "", - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * Generally you shouldn't need this, and it is not documented on the - * general DataTables.net documentation - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "sContentPadding": "mmm" - * } - * ] - * } ); - * } ); - */ - "sContentPadding": "", - - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mData - * is set to null, or because the data source itself is null). - * @type string - * @default null - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "mData": null, - * "sDefaultContent": "Edit", - * "aTargets": [ -1 ] - * } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "mData": null, - * "sDefaultContent": "Edit" - * } - * ] - * } ); - * } ); - */ - "sDefaultContent": null, - - - /** - * This parameter is only used in DataTables' server-side processing. It can - * be exceptionally useful to know what columns are being displayed on the - * client side, and to map these to database fields. When defined, the names - * also allow DataTables to reorder information from the server if it comes - * back in an unexpected order (i.e. if you switch your columns around on the - * client-side, your server-side code does not also need updating). - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sName": "engine", "aTargets": [ 0 ] }, - * { "sName": "browser", "aTargets": [ 1 ] }, - * { "sName": "platform", "aTargets": [ 2 ] }, - * { "sName": "version", "aTargets": [ 3 ] }, - * { "sName": "grade", "aTargets": [ 4 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sName": "engine" }, - * { "sName": "browser" }, - * { "sName": "platform" }, - * { "sName": "version" }, - * { "sName": "grade" } - * ] - * } ); - * } ); - */ - "sName": "", - - - /** - * Defines a data source type for the sorting which can be used to read - * real-time information from the table (updating the internally cached - * version) prior to sorting. This allows sorting to occur on user editable - * elements such as form inputs. - * @type string - * @default std - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] }, - * { "sType": "numeric", "aTargets": [ 3 ] }, - * { "sSortDataType": "dom-select", "aTargets": [ 4 ] }, - * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * { "sSortDataType": "dom-text" }, - * { "sSortDataType": "dom-text", "sType": "numeric" }, - * { "sSortDataType": "dom-select" }, - * { "sSortDataType": "dom-checkbox" } - * ] - * } ); - * } ); - */ - "sSortDataType": "std", - - - /** - * The title of this column. - * @type string - * @default null Derived from the 'TH' value for this column in the - * original HTML table. - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sTitle": "My column title", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sTitle": "My column title" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sTitle": null, - - - /** - * The type allows you to specify how the data for this column will be sorted. - * Four types (string, numeric, date and html (which will strip HTML tags - * before sorting)) are currently available. Note that only date formats - * understood by Javascript's Date() object will be accepted as type date. For - * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', - * 'date' or 'html' (by default). Further types can be adding through - * plug-ins. - * @type string - * @default null Auto-detected from raw data - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sType": "html", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sType": "html" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sType": null, - - - /** - * Defining the width of the column, this parameter may take any CSS value - * (3em, 20px etc). DataTables apples 'smart' widths to columns which have not - * been given a specific width through this interface ensuring that the table - * remains readable. - * @type string - * @default null Automatic - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sWidth": "20%", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sWidth": "20%" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sWidth": null - }; - - - - /** - * DataTables settings object - this holds all the information needed for a - * given table, including configuration, data and current application of the - * table options. DataTables does not have a single instance for each DataTable - * with the settings attached to that instance, but rather instances of the - * DataTable "class" are created on-the-fly as needed (typically by a - * $().dataTable() call) and the settings object is then applied to that - * instance. - * - * Note that this object is related to {@link DataTable.defaults} but this - * one is the internal data store for DataTables's cache of columns. It should - * NOT be manipulated outside of DataTables. Any configuration should be done - * through the initialisation options. - * @namespace - * @todo Really should attach the settings object to individual instances so we - * don't need to create new instances on each $().dataTable() call (if the - * table already exists). It would also save passing oSettings around and - * into every single function. However, this is a very significant - * architecture change for DataTables and will almost certainly break - * backwards compatibility with older installations. This is something that - * will be done in 2.0. - */ - DataTable.models.oSettings = { - /** - * Primary features of DataTables and their enablement state. - * @namespace - */ - "oFeatures": { - - /** - * Flag to say if DataTables should automatically try to calculate the - * optimum table and columns widths (true) or not (false). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoWidth": null, - - /** - * Delay the creation of TR and TD elements until they are actually - * needed by a driven page draw. This can give a significant speed - * increase for Ajax source and Javascript source data, but makes no - * difference at all fro DOM and server-side processing tables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bDeferRender": null, - - /** - * Enable filtering on the table or not. Note that if this is disabled - * then there is no filtering at all on the table, including fnFilter. - * To just remove the filtering input use sDom and remove the 'f' option. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bFilter": null, - - /** - * Table information element (the 'Showing x of y records' div) enable - * flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfo": null, - - /** - * Present a user control allowing the end user to change the page size - * when pagination is enabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bLengthChange": null, - - /** - * Pagination enabled or not. Note that if this is disabled then length - * changing must also be disabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bPaginate": null, - - /** - * Processing indicator enable flag whenever DataTables is enacting a - * user request - typically an Ajax request for server-side processing. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bProcessing": null, - - /** - * Server-side processing enabled flag - when enabled DataTables will - * get all data from the server for every draw - there is no filtering, - * sorting or paging done on the client-side. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bServerSide": null, - - /** - * Sorting enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSort": null, - - /** - * Apply a class to the columns which are being sorted to provide a - * visual highlight or not. This can slow things down when enabled since - * there is a lot of DOM interaction. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortClasses": null, - - /** - * State saving enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bStateSave": null - }, - - - /** - * Scrolling settings for a table. - * @namespace - */ - "oScroll": { - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoCss": null, - - /** - * When the table is shorter in height than sScrollY, collapse the - * table container down to the height of the table (when true). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bCollapse": null, - - /** - * Infinite scrolling enablement flag. Now deprecated in favour of - * using the Scroller plug-in. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfinite": null, - - /** - * Width of the scrollbar for the web-browser's platform. Calculated - * during table initialisation. - * @type int - * @default 0 - */ - "iBarWidth": 0, - - /** - * Space (in pixels) between the bottom of the scrolling container and - * the bottom of the scrolling viewport before the next page is loaded - * when using infinite scrolling. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - */ - "iLoadGap": null, - - /** - * Viewport width for horizontal scrolling. Horizontal scrolling is - * disabled if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sX": null, - - /** - * Width to expand the table to when using x-scrolling. Typically you - * should not need to use this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @deprecated - */ - "sXInner": null, - - /** - * Viewport height for vertical scrolling. Vertical scrolling is disabled - * if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sY": null - }, - - /** - * Language information for the table. - * @namespace - * @extends DataTable.defaults.oLanguage - */ - "oLanguage": { - /** - * Information callback function. See - * {@link DataTable.defaults.fnInfoCallback} - * @type function - * @default null - */ - "fnInfoCallback": null - }, - - /** - * Browser support parameters - * @namespace - */ - "oBrowser": { - /** - * Indicate if the browser incorrectly calculates width:100% inside a - * scrolling element (IE6/7) - * @type boolean - * @default false - */ - "bScrollOversize": false - }, - - /** - * Array referencing the nodes which are used for the features. The - * parameters of this object match what is allowed by sDom - i.e. - *
      - *
    • 'l' - Length changing
    • - *
    • 'f' - Filtering input
    • - *
    • 't' - The table!
    • - *
    • 'i' - Information
    • - *
    • 'p' - Pagination
    • - *
    • 'r' - pRocessing
    • - *
    - * @type array - * @default [] - */ - "aanFeatures": [], - - /** - * Store data information - see {@link DataTable.models.oRow} for detailed - * information. - * @type array - * @default [] - */ - "aoData": [], - - /** - * Array of indexes which are in the current display (after filtering etc) - * @type array - * @default [] - */ - "aiDisplay": [], - - /** - * Array of indexes for display - no filtering - * @type array - * @default [] - */ - "aiDisplayMaster": [], - - /** - * Store information about each column that is in use - * @type array - * @default [] - */ - "aoColumns": [], - - /** - * Store information about the table's header - * @type array - * @default [] - */ - "aoHeader": [], - - /** - * Store information about the table's footer - * @type array - * @default [] - */ - "aoFooter": [], - - /** - * Search data array for regular expression searching - * @type array - * @default [] - */ - "asDataSearch": [], - - /** - * Store the applied global search information in case we want to force a - * research or compare the old search to a new one. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @namespace - * @extends DataTable.models.oSearch - */ - "oPreviousSearch": {}, - - /** - * Store the applied search for each column - see - * {@link DataTable.models.oSearch} for the format that is used for the - * filtering information for each column. - * @type array - * @default [] - */ - "aoPreSearchCols": [], - - /** - * Sorting that is applied to the table. Note that the inner arrays are - * used in the following manner: - *
      - *
    • Index 0 - column number
    • - *
    • Index 1 - current sorting direction
    • - *
    • Index 2 - index of asSorting for this column
    • - *
    - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @todo These inner arrays should really be objects - */ - "aaSorting": null, - - /** - * Sorting that is always applied to the table (i.e. prefixed in front of - * aaSorting). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array|null - * @default null - */ - "aaSortingFixed": null, - - /** - * Classes to use for the striping of a table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "asStripeClasses": null, - - /** - * If restoring a table - we should restore its striping classes as well - * @type array - * @default [] - */ - "asDestroyStripes": [], - - /** - * If restoring a table - we should restore its width - * @type int - * @default 0 - */ - "sDestroyWidth": 0, - - /** - * Callback functions array for every time a row is inserted (i.e. on a draw). - * @type array - * @default [] - */ - "aoRowCallback": [], - - /** - * Callback functions for the header on each draw. - * @type array - * @default [] - */ - "aoHeaderCallback": [], - - /** - * Callback function for the footer on each draw. - * @type array - * @default [] - */ - "aoFooterCallback": [], - - /** - * Array of callback functions for draw callback functions - * @type array - * @default [] - */ - "aoDrawCallback": [], - - /** - * Array of callback functions for row created function - * @type array - * @default [] - */ - "aoRowCreatedCallback": [], - - /** - * Callback functions for just before the table is redrawn. A return of - * false will be used to cancel the draw. - * @type array - * @default [] - */ - "aoPreDrawCallback": [], - - /** - * Callback functions for when the table has been initialised. - * @type array - * @default [] - */ - "aoInitComplete": [], - - - /** - * Callbacks for modifying the settings to be stored for state saving, prior to - * saving state. - * @type array - * @default [] - */ - "aoStateSaveParams": [], - - /** - * Callbacks for modifying the settings that have been stored for state saving - * prior to using the stored values to restore the state. - * @type array - * @default [] - */ - "aoStateLoadParams": [], - - /** - * Callbacks for operating on the settings object once the saved state has been - * loaded - * @type array - * @default [] - */ - "aoStateLoaded": [], - - /** - * Cache the table ID for quick access - * @type string - * @default Empty string - */ - "sTableId": "", - - /** - * The TABLE node for the main table - * @type node - * @default null - */ - "nTable": null, - - /** - * Permanent ref to the thead element - * @type node - * @default null - */ - "nTHead": null, - - /** - * Permanent ref to the tfoot element - if it exists - * @type node - * @default null - */ - "nTFoot": null, - - /** - * Permanent ref to the tbody element - * @type node - * @default null - */ - "nTBody": null, - - /** - * Cache the wrapper node (contains all DataTables controlled elements) - * @type node - * @default null - */ - "nTableWrapper": null, - - /** - * Indicate if when using server-side processing the loading of data - * should be deferred until the second draw. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - * @default false - */ - "bDeferLoading": false, - - /** - * Indicate if all required information has been read in - * @type boolean - * @default false - */ - "bInitialised": false, - - /** - * Information about open rows. Each object in the array has the parameters - * 'nTr' and 'nParent' - * @type array - * @default [] - */ - "aoOpenRows": [], - - /** - * Dictate the positioning of DataTables' control elements - see - * {@link DataTable.model.oInit.sDom}. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sDom": null, - - /** - * Which type of pagination should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default two_button - */ - "sPaginationType": "two_button", - - /** - * The cookie duration (for bStateSave) in seconds. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - * @default 0 - */ - "iCookieDuration": 0, - - /** - * The cookie name prefix. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default Empty string - */ - "sCookiePrefix": "", - - /** - * Callback function for cookie creation. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - * @default null - */ - "fnCookieCallback": null, - - /** - * Array of callback functions for state saving. Each array element is an - * object with the following parameters: - *
      - *
    • function:fn - function to call. Takes two parameters, oSettings - * and the JSON string to save that has been thus far created. Returns - * a JSON string to be inserted into a json object - * (i.e. '"param": [ 0, 1, 2]')
    • - *
    • string:sName - name of callback
    • - *
    - * @type array - * @default [] - */ - "aoStateSave": [], - - /** - * Array of callback functions for state loading. Each array element is an - * object with the following parameters: - *
      - *
    • function:fn - function to call. Takes two parameters, oSettings - * and the object stored. May return false to cancel state loading
    • - *
    • string:sName - name of callback
    • - *
    - * @type array - * @default [] - */ - "aoStateLoad": [], - - /** - * State that was loaded from the cookie. Useful for back reference - * @type object - * @default null - */ - "oLoadedState": null, - - /** - * Source url for AJAX data for the table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sAjaxSource": null, - - /** - * Property from a given object from which to read the table data from. This - * can be an empty string (when not server-side processing), in which case - * it is assumed an an array is given directly. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sAjaxDataProp": null, - - /** - * Note if draw should be blocked while getting data - * @type boolean - * @default true - */ - "bAjaxDataGet": true, - - /** - * The last jQuery XHR object that was used for server-side data gathering. - * This can be used for working with the XHR information in one of the - * callbacks - * @type object - * @default null - */ - "jqXHR": null, - - /** - * Function to get the server-side data. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnServerData": null, - - /** - * Functions which are called prior to sending an Ajax request so extra - * parameters can easily be sent to the server - * @type array - * @default [] - */ - "aoServerParams": [], - - /** - * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if - * required). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sServerMethod": null, - - /** - * Format numbers for display. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnFormatNumber": null, - - /** - * List of options that can be used for the user selectable length menu. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "aLengthMenu": null, - - /** - * Counter for the draws that the table does. Also used as a tracker for - * server-side processing - * @type int - * @default 0 - */ - "iDraw": 0, - - /** - * Indicate if a redraw is being done - useful for Ajax - * @type boolean - * @default false - */ - "bDrawing": false, - - /** - * Draw index (iDraw) of the last error when parsing the returned data - * @type int - * @default -1 - */ - "iDrawError": -1, - - /** - * Paging display length - * @type int - * @default 10 - */ - "_iDisplayLength": 10, - - /** - * Paging start point - aiDisplay index - * @type int - * @default 0 - */ - "_iDisplayStart": 0, - - /** - * Paging end point - aiDisplay index. Use fnDisplayEnd rather than - * this property to get the end point - * @type int - * @default 10 - * @private - */ - "_iDisplayEnd": 10, - - /** - * Server-side processing - number of records in the result set - * (i.e. before filtering), Use fnRecordsTotal rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type int - * @default 0 - * @private - */ - "_iRecordsTotal": 0, - - /** - * Server-side processing - number of records in the current display set - * (i.e. after filtering). Use fnRecordsDisplay rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type boolean - * @default 0 - * @private - */ - "_iRecordsDisplay": 0, - - /** - * Flag to indicate if jQuery UI marking and classes should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bJUI": null, - - /** - * The classes to use for the table - * @type object - * @default {} - */ - "oClasses": {}, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if filtering has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bFiltered": false, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if sorting has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bSorted": false, - - /** - * Indicate that if multiple rows are in the header and there is more than - * one unique cell per column, if the top one (true) or bottom one (false) - * should be used for sorting / title by DataTables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortCellsTop": null, - - /** - * Initialisation object that is used for the table - * @type object - * @default null - */ - "oInit": null, - - /** - * Destroy callback functions - for plug-ins to attach themselves to the - * destroy so they can clean up markup and events. - * @type array - * @default [] - */ - "aoDestroyCallback": [], - - - /** - * Get the number of records in the current record set, before filtering - * @type function - */ - "fnRecordsTotal": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsTotal, 10); - } else { - return this.aiDisplayMaster.length; - } - }, - - /** - * Get the number of records in the current record set, after filtering - * @type function - */ - "fnRecordsDisplay": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsDisplay, 10); - } else { - return this.aiDisplay.length; - } - }, - - /** - * Set the display end point - aiDisplay index - * @type function - * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here - */ - "fnDisplayEnd": function () - { - if ( this.oFeatures.bServerSide ) { - if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { - return this._iDisplayStart+this.aiDisplay.length; - } else { - return Math.min( this._iDisplayStart+this._iDisplayLength, - this._iRecordsDisplay ); - } - } else { - return this._iDisplayEnd; - } - }, - - /** - * The DataTables object for this table - * @type object - * @default null - */ - "oInstance": null, - - /** - * Unique identifier for each instance of the DataTables object. If there - * is an ID on the table node, then it takes that value, otherwise an - * incrementing internal counter is used. - * @type string - * @default null - */ - "sInstance": null, - - /** - * tabindex attribute value that is added to DataTables control elements, allowing - * keyboard navigation of the table and its controls. - */ - "iTabIndex": 0, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollHead": null, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollFoot": null - }; - - /** - * Extension object for DataTables that is used to provide all extension options. - * - * Note that the DataTable.ext object is available through - * jQuery.fn.dataTable.ext where it may be accessed and manipulated. It is - * also aliased to jQuery.fn.dataTableExt for historic reasons. - * @namespace - * @extends DataTable.models.ext - */ - DataTable.ext = $.extend( true, {}, DataTable.models.ext ); - - $.extend( DataTable.ext.oStdClasses, { - "sTable": "dataTable", - - /* Two buttons buttons */ - "sPagePrevEnabled": "paginate_enabled_previous", - "sPagePrevDisabled": "paginate_disabled_previous", - "sPageNextEnabled": "paginate_enabled_next", - "sPageNextDisabled": "paginate_disabled_next", - "sPageJUINext": "", - "sPageJUIPrev": "", - - /* Full numbers paging buttons */ - "sPageButton": "paginate_button", - "sPageButtonActive": "paginate_active", - "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", - "sPageFirst": "first", - "sPagePrevious": "previous", - "sPageNext": "next", - "sPageLast": "last", - - /* Striping classes */ - "sStripeOdd": "odd", - "sStripeEven": "even", - - /* Empty row */ - "sRowEmpty": "dataTables_empty", - - /* Features */ - "sWrapper": "dataTables_wrapper", - "sFilter": "dataTables_filter", - "sInfo": "dataTables_info", - "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ - "sLength": "dataTables_length", - "sProcessing": "dataTables_processing", - - /* Sorting */ - "sSortAsc": "sorting_asc", - "sSortDesc": "sorting_desc", - "sSortable": "sorting", /* Sortable in both directions */ - "sSortableAsc": "sorting_asc_disabled", - "sSortableDesc": "sorting_desc_disabled", - "sSortableNone": "sorting_disabled", - "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ - "sSortJUIAsc": "", - "sSortJUIDesc": "", - "sSortJUI": "", - "sSortJUIAscAllowed": "", - "sSortJUIDescAllowed": "", - "sSortJUIWrapper": "", - "sSortIcon": "", - - /* Scrolling */ - "sScrollWrapper": "dataTables_scroll", - "sScrollHead": "dataTables_scrollHead", - "sScrollHeadInner": "dataTables_scrollHeadInner", - "sScrollBody": "dataTables_scrollBody", - "sScrollFoot": "dataTables_scrollFoot", - "sScrollFootInner": "dataTables_scrollFootInner", - - /* Misc */ - "sFooterTH": "", - "sJUIHeader": "", - "sJUIFooter": "" - } ); - - - $.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { - /* Two buttons buttons */ - "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", - "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", - - /* Full numbers paging buttons */ - "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", - "sPageLast": "last ui-corner-tr ui-corner-br", - - /* Features */ - "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ - "ui-buttonset-multi paging_", /* Note that the type is postfixed */ - - /* Sorting */ - "sSortAsc": "ui-state-default", - "sSortDesc": "ui-state-default", - "sSortable": "ui-state-default", - "sSortableAsc": "ui-state-default", - "sSortableDesc": "ui-state-default", - "sSortableNone": "ui-state-default", - "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", - "sSortIcon": "DataTables_sort_icon", - - /* Scrolling */ - "sScrollHead": "dataTables_scrollHead ui-state-default", - "sScrollFoot": "dataTables_scrollFoot ui-state-default", - - /* Misc */ - "sFooterTH": "ui-state-default", - "sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix", - "sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix" - } ); - - /* - * Variable: oPagination - * Purpose: - * Scope: jQuery.fn.dataTableExt - */ - $.extend( DataTable.ext.oPagination, { - /* - * Variable: two_button - * Purpose: Standard two button (forward/back) pagination - * Scope: jQuery.fn.dataTableExt.oPagination - */ - "two_button": { - /* - * Function: oPagination.two_button.fnInit - * Purpose: Initialise dom elements required for pagination with forward/back buttons only - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * node:nPaging - the DIV which contains this pagination control - * function:fnCallbackDraw - draw function which must be called on update - */ - "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) - { - var oLang = oSettings.oLanguage.oPaginate; - var oClasses = oSettings.oClasses; - var fnClickHandler = function ( e ) { - if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) - { - fnCallbackDraw( oSettings ); - } - }; - - var sAppend = (!oSettings.bJUI) ? - ''+oLang.sPrevious+''+ - ''+oLang.sNext+'' - : - ''+ - ''; - $(nPaging).append( sAppend ); - - var els = $('a', nPaging); - var nPrevious = els[0], - nNext = els[1]; - - oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nPrevious.id = oSettings.sTableId+'_previous'; - nNext.id = oSettings.sTableId+'_next'; - - nPrevious.setAttribute('aria-controls', oSettings.sTableId); - nNext.setAttribute('aria-controls', oSettings.sTableId); - } - }, - - /* - * Function: oPagination.two_button.fnUpdate - * Purpose: Update the two button pagination at the end of the draw - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var oClasses = oSettings.oClasses; - var an = oSettings.aanFeatures.p; - var nNode; - - /* Loop over each instance of the pager */ - for ( var i=0, iLen=an.length ; i'+oLang.sFirst+''+ - ''+oLang.sPrevious+''+ - ''+ - ''+oLang.sNext+''+ - ''+oLang.sLast+'' - ); - var els = $('a', nPaging); - var nFirst = els[0], - nPrev = els[1], - nNext = els[2], - nLast = els[3]; - - oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nFirst.id =oSettings.sTableId+'_first'; - nPrev.id =oSettings.sTableId+'_previous'; - nNext.id =oSettings.sTableId+'_next'; - nLast.id =oSettings.sTableId+'_last'; - } - }, - - /* - * Function: oPagination.full_numbers.fnUpdate - * Purpose: Update the list of page buttons shows - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; - var iPageCountHalf = Math.floor(iPageCount / 2); - var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); - var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; - var sList = ""; - var iStartButton, iEndButton, i, iLen; - var oClasses = oSettings.oClasses; - var anButtons, anStatic, nPaginateList, nNode; - var an = oSettings.aanFeatures.p; - var fnBind = function (j) { - oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) { - /* Use the information in the element to jump to the required page */ - oSettings.oApi._fnPageChange( oSettings, e.data.page ); - fnCallbackDraw( oSettings ); - e.preventDefault(); - } ); - }; - - /* Pages calculation */ - if ( oSettings._iDisplayLength === -1 ) - { - iStartButton = 1; - iEndButton = 1; - iCurrentPage = 1; - } - else if (iPages < iPageCount) - { - iStartButton = 1; - iEndButton = iPages; - } - else if (iCurrentPage <= iPageCountHalf) - { - iStartButton = 1; - iEndButton = iPageCount; - } - else if (iCurrentPage >= (iPages - iPageCountHalf)) - { - iStartButton = iPages - iPageCount + 1; - iEndButton = iPages; - } - else - { - iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; - iEndButton = iStartButton + iPageCount - 1; - } - - - /* Build the dynamic list */ - for ( i=iStartButton ; i<=iEndButton ; i++ ) - { - sList += (iCurrentPage !== i) ? - ''+oSettings.fnFormatNumber(i)+'' : - ''+oSettings.fnFormatNumber(i)+''; - } - - /* Loop over each instance of the pager */ - for ( i=0, iLen=an.length ; i y) ? 1 : 0)); - }, - - "string-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * html sorting (ignore html tags) - */ - "html-pre": function ( a ) - { - return a.replace( /<.*?>/g, "" ).toLowerCase(); - }, - - "html-asc": function ( x, y ) - { - return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - }, - - "html-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * date sorting - */ - "date-pre": function ( a ) - { - var x = Date.parse( a ); - - if ( isNaN(x) || x==="" ) - { - x = Date.parse( "01/01/1970 00:00:00" ); - } - return x; - }, - - "date-asc": function ( x, y ) - { - return x - y; - }, - - "date-desc": function ( x, y ) - { - return y - x; - }, - - - /* - * numerical sorting - */ - "numeric-pre": function ( a ) - { - return (a=="-" || a==="") ? 0 : a*1; - }, - - "numeric-asc": function ( x, y ) - { - return x - y; - }, - - "numeric-desc": function ( x, y ) - { - return y - x; - } - } ); - - - $.extend( DataTable.ext.aTypes, [ - /* - * Function: - - * Purpose: Check to see if a string is numeric - * Returns: string:'numeric' or null - * Inputs: mixed:sText - string to check - */ - function ( sData ) - { - /* Allow zero length strings as a number */ - if ( typeof sData === 'number' ) - { - return 'numeric'; - } - else if ( typeof sData !== 'string' ) - { - return null; - } - - var sValidFirstChars = "0123456789-"; - var sValidChars = "0123456789."; - var Char; - var bDecimal = false; - - /* Check for a valid first char (no period and allow negatives) */ - Char = sData.charAt(0); - if (sValidFirstChars.indexOf(Char) == -1) - { - return null; - } - - /* Check all the other characters are valid */ - for ( var i=1 ; i') != -1 ) - { - return 'html'; - } - return null; - } - ] ); - - - // jQuery aliases - $.fn.DataTable = DataTable; - $.fn.dataTable = DataTable; - $.fn.dataTableSettings = DataTable.settings; - $.fn.dataTableExt = DataTable.ext; - - - // Information about events fired by DataTables - for documentation. - /** - * Draw event, fired whenever the table is redrawn on the page, at the same point as - * fnDrawCallback. This may be useful for binding events or performing calculations when - * the table is altered at all. - * @name DataTable#draw - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Filter event, fired when the filtering applied to the table (using the build in global - * global filter, or column filters) is altered. - * @name DataTable#filter - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Page change event, fired when the paging of the table is altered. - * @name DataTable#page - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Sort event, fired when the sorting applied to the table is altered. - * @name DataTable#sort - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * DataTables initialisation complete event, fired when the table is fully drawn, - * including Ajax data loaded, if Ajax data is required. - * @name DataTable#init - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The JSON object request from the server - only - * present if client-side Ajax sourced data is used