From 0a681a85fe003a5fd56a8d3179833a3243b0a065 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Fri, 3 Aug 2012 12:24:04 +0530 Subject: [PATCH] Rearranging Files * Seperating standalone jQuery ULS plugin and extension related code * lib/jquery.uls can be submodule, but not now. Change-Id: I7d9cb47daa88dd1a27ceda602a08cab0073caf33 --- README.md | 4 + css/jquery.uls.css | 180 ++++++++++++++++ css/jquery.uls.grid.css | 320 +++++++++++++++++++++++++++++ css/jquery.uls.lcd.css | 54 +++++ data/jquery.uls.data.js | 5 + examples/index.html | 126 ++++++++++++ examples/resources/demo.css | 20 ++ examples/resources/jquery.js | 4 + images/clear.png | Bin 0 -> 338 bytes images/close.png | Bin 0 -> 347 bytes images/icon-language.png | Bin 0 -> 987 bytes images/search.png | Bin 0 -> 881 bytes images/world_map.png | Bin 0 -> 8803 bytes src/jquery.uls.core.js | 197 ++++++++++++++++++ src/jquery.uls.data.utils.js | 301 +++++++++++++++++++++++++++ src/jquery.uls.languagefilter.js | 338 +++++++++++++++++++++++++++++++ src/jquery.uls.lcd.js | 172 ++++++++++++++++ 17 files changed, 1721 insertions(+) create mode 100644 README.md create mode 100644 css/jquery.uls.css create mode 100644 css/jquery.uls.grid.css create mode 100644 css/jquery.uls.lcd.css create mode 100644 data/jquery.uls.data.js create mode 100644 examples/index.html create mode 100644 examples/resources/demo.css create mode 100644 examples/resources/jquery.js create mode 100644 images/clear.png create mode 100644 images/close.png create mode 100644 images/icon-language.png create mode 100644 images/search.png create mode 100644 images/world_map.png create mode 100644 src/jquery.uls.core.js create mode 100644 src/jquery.uls.data.utils.js create mode 100644 src/jquery.uls.languagefilter.js create mode 100644 src/jquery.uls.lcd.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..acd9f06 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +jQuery Universal Language Selector +================================= +Universal Language Selector + diff --git a/css/jquery.uls.css b/css/jquery.uls.css new file mode 100644 index 0000000..27d3b49 --- /dev/null +++ b/css/jquery.uls.css @@ -0,0 +1,180 @@ +.uls-trigger { + /* @embed */ + background: url('../images/icon-language.png') no-repeat scroll left center transparent; + padding-left: 30px; +} +.uls-menu { + position: fixed; + z-index: 1000; + display: none; + min-width: 715px; + margin-top: 1px; + width: 45%; + /* Styling */ + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +.uls-menu a { + color: #0088CC; +} +.uls-menu h1 { + font-weight: normal; + padding-top: 1.25em; + border: none; + padding-bottom: 3px; + font-size: 18pt; + line-height: 1.25em; + padding-left: 15px; + color: #777; +} +.uls-menu h2 { + font-size: 16pt; + line-height: 1.5em; + padding-left: 6px; + margin-top: 0px; + margin-bottom: 15px; + border-bottom: none; + color: #777; +} +.uls-menu h3 { + font-size: 14pt; + line-height: 1.5em; + padding-left: 0px; + margin-top: 0px; + margin-bottom: 10px; + border-bottom: none; +} +.uls-worldmap { + /* @embed */ + background: url('../images/world_map.png') no-repeat scroll right top transparent; + background-size: 100%; +} +.uls-region { + /* The map doesn't flip */ + /* @noflip */ + float: left; + cursor: pointer; + padding: 0px; + margin: 0px; + height: 125px; + border-bottom-color: #777; + border-bottom-style: solid; + border-bottom-width: 3px; +} +.uls-region a { + bottom: 2px; + position: absolute; + font-size: 13px; +} +.uls-region:hover { + /*Cross-browser background transparency*/ + background: #3366bb; + background: rgba(51, 102, 187, 0.1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#253366bb, endColorstr=#253366bb); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#253366bb, endColorstr=#253366bb)"; + border-bottom-color: #3366bb; + border-bottom-style: solid; +} +.regionselector.active { + /*Cross-browser background transparency*/ + background: #3366bb; + background: rgba(51, 102, 187, 0.2); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#253366bb, endColorstr=#253366bb); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#253366bb, endColorstr=#253366bb)"; + border-bottom-color: #3366bb; + border-bottom-style: solid; +} +#map-block { + top: 1px; + margin-right: 0; + padding-right: 0px; + float: right; + overflow: hidden; +} +#map-block a { + color: #444; +} +#map-block .active a { + font-weight: bold; +} +.icon-close { + /* @embed */ + background: url('../images/close.png') no-repeat scroll center center transparent; + float: right; + padding: 15px; + cursor: pointer; +} +input#languagefilter { + border: 1px solid #c9c9c9; + -moz-transition: all 0.15s linear 0s; + border-radius: 2px 2px 2px 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + color: #333; + display: block; + background-color: transparent; +} +input:focus#languagefilter { + border: 1px solid #08C; +} + +#search { + background-color: #f8f8f8; + border-top-color: #777; + border-top-style: solid; + border-top-width: 1px; + padding: 0.8em 0; +} +.search-label { + /* @embed */ + background: url('../images/search.png') no-repeat scroll right center transparent; + background-size: 30px; + height: 32px; + width: 32px; + display: inline-block; + float: right; +} +span#languagefilter-clear { + /* @embed */ + background: url('../images/clear.png') no-repeat scroll left center transparent; + cursor: pointer; + height: 32px; + position: absolute; + width: 32px; + margin-left: -32px; +} + +.filterinput { + position: absolute; + top: 0px; + left: 0px; + font-size: 14px; + height: 32px; + padding: 6px; + width: 100%; + text-align: left; +} + +#filtersuggestion { + background-color: white; + color: #888; + border: 1px transparent; + border-radius: 2px 2px 2px 2px; + box-shadow: 0 1px 2px transparent inset; + left: 1px; +} + +#search-input-block { + position: relative; +} diff --git a/css/jquery.uls.grid.css b/css/jquery.uls.grid.css new file mode 100644 index 0000000..d778325 --- /dev/null +++ b/css/jquery.uls.grid.css @@ -0,0 +1,320 @@ +/* Generated using Foundation http://foundation.zurb.com/docs/grid.php */ +/* Global Reset & Standards ---------------------- */ +.uls-menu * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Misc ---------------------- */ +.left { + float: left; +} + +.right { + float: right; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.hide { + display: none; +} + +.highlight { + background: #ffff99; +} + +/* The Grid ---------------------- */ +.row { + width: 100%; + max-width: none; + min-width: 600px; + margin: 0 auto; +} +.row .row { + width: auto; + max-width: none; + min-width: 0; + margin: 0 -5px; +} +.row.collapse .column, .row.collapse .columns { + padding: 0; +} +.row .row { + width: auto; + max-width: none; + min-width: 0; + margin: 0 -5px; +} +.row .row.collapse { + margin: 0; +} + +.column, .columns { + float: left; + min-height: 1px; + padding: 0 5px; + position: relative; +} +.column.centered, .columns.centered { + float: none; + margin: 0 auto; +} + +.row .one { + width: 8.333%; +} + +.row .two { + width: 16.667%; +} + +.row .three { + width: 25%; +} + +.row .four { + width: 33.333%; +} + +.row .five { + width: 41.667%; +} + +.row .six { + width: 50%; +} + +.row .seven { + width: 58.333%; +} + +.row .eight { + width: 66.667%; +} + +.row .nine { + width: 75%; +} + +.row .ten { + width: 83.333%; +} + +.row .eleven { + width: 91.667%; +} + +.row .twelve { + width: 100%; +} + +.row .offset-by-one { + margin-left: 8.333%; +} + +.row .offset-by-two { + margin-left: 16.667%; +} + +.row .offset-by-three { + margin-left: 25%; +} + +.row .offset-by-four { + margin-left: 33.333%; +} + +.row .offset-by-five { + margin-left: 41.667%; +} + +.row .offset-by-six { + margin-left: 50%; +} + +.row .offset-by-seven { + margin-left: 58.333%; +} + +.row .offset-by-eight { + margin-left: 66.667%; +} + +.row .offset-by-nine { + margin-left: 75%; +} + +.row .offset-by-ten { + margin-left: 83.333%; +} + +.push-two { + left: 16.667%; +} + +.pull-two { + right: 16.667%; +} + +.push-three { + left: 25%; +} + +.pull-three { + right: 25%; +} + +.push-four { + left: 33.333%; +} + +.pull-four { + right: 33.333%; +} + +.push-five { + left: 41.667%; +} + +.pull-five { + right: 41.667%; +} + +.push-six { + left: 50%; +} + +.pull-six { + right: 50%; +} + +.push-seven { + left: 58.333%; +} + +.pull-seven { + right: 58.333%; +} + +.push-eight { + left: 66.667%; +} + +.pull-eight { + right: 66.667%; +} + +.push-nine { + left: 75%; +} + +.pull-nine { + right: 75%; +} + +.push-ten { + left: 83.333%; +} + +.pull-ten { + right: 83.333%; +} + +img, object, embed { + max-width: 100%; + height: auto; +} + +img { + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, .map_canvas img { + max-width: none !important; +} + +/* Nicolas Gallagher's micro clearfix */ +.row { + *zoom: 1; +} +.row:before, .row:after { + content: ""; + display: table; +} +.row:after { + clear: both; +} + +/* Block Grids ---------------------- */ +/* These are 2-up, 3-up, 4-up and 5-up ULs, suited + for repeating blocks of content. Add 'mobile' to + them to switch them just like the layout grid + (one item per line) on phones + + For IE7/8 compatibility block-grid items need to be + the same height. You can optionally uncomment the + lines below to support arbitrary height, but know + that IE7/8 do not support :nth-child. + -------------------------------------------------- */ +.block-grid { + display: block; + overflow: hidden; + padding: 0; +} +.block-grid > li { + display: block; + height: auto; + float: left; +} + +.block-grid.two-up { + margin: 0 -15px; +} + +.block-grid.two-up > li { + width: 50%; + padding: 0 15px 15px; +} + +/* .block-grid.two-up>li:nth-child(2n+1) {clear: left;} */ +.block-grid.three-up { + margin: 0 -12px; +} + +.block-grid.three-up > li { + width: 33.33%; + padding: 0 12px 12px; +} + +/* .block-grid.three-up>li:nth-child(3n+1) {clear: left;} */ +.block-grid.four-up { + margin: 0 -10px; +} + +.block-grid.four-up > li { + width: 25%; + padding: 0 10px 10px; +} + +/* .block-grid.four-up>li:nth-child(4n+1) {clear: left;} */ +.block-grid.five-up { + margin: 0 -8px; +} + +.block-grid.five-up > li { + width: 20%; + padding: 0 8px 8px; +} + diff --git a/css/jquery.uls.lcd.css b/css/jquery.uls.lcd.css new file mode 100644 index 0000000..7a07081 --- /dev/null +++ b/css/jquery.uls.lcd.css @@ -0,0 +1,54 @@ +.uls-lcd-region-section h3 { + color: #999999; +} +.uls-lcd-region-section ul li:hover { + background-color: #eaeff7; +} +/* Language list */ +.uls-language-list { + height: 21.5em; + overflow: auto; + margin: 10px; + width: auto; +} + +.uls-language-block ul { + margin: 0px; + margin-bottom: 1.6em; +} +.uls-language-list ul li { + font-weight: normal; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.uls-language-list strong { + text-decoration: underline; +} +.uls-language-list a { + font-weight: normal; + color: #0088CC; + font-size: 14px; + line-height: 1.6em; +} + +.uls-language-block .three.columns { + width: 22%; +} + +.uls-language-block { + width: 100%; +} + +.uls-no-results-view { + color: #777; +} + +#uls-no-found-more { + font-size: 0.9em; + background: #F8F8F8; + display: inline-block; + width: 100%; + margin-top: 1.6em; + line-height: 1.6em; +} diff --git a/data/jquery.uls.data.js b/data/jquery.uls.data.js new file mode 100644 index 0000000..23a96af --- /dev/null +++ b/data/jquery.uls.data.js @@ -0,0 +1,5 @@ +( function ( $ ) { + $.uls = {}; + $.uls.data = {"languages":{"aa":["Latn",["AF"]],"ab":["Cyrl",["EU"]],"ace":["Latn",["AS","PA"]],"ady-cyrl":["Cyrl",["EU"]],"ady-latn":["Latn",["EU"]],"ady":["Cyrl",["EU"]],"aeb":["Arab",["AF"]],"af":["Latn",["AF"]],"ahr":["Deva",["AS"]],"ak":["Latn",["AF"]],"akz":["Latn",["NA"]],"aln":["Latn",["EU"]],"am":["Ethi",["AF"]],"an":["Latn",["EU"]],"ang":["Latn",["EU"]],"anp":["Deva",["AS"]],"ar":["Arab",["ME"]],"arc":["Syrc",["ME"]],"arn":["Latn",["SA"]],"aro":["Latn",["LA"]],"arq":["Latn",["AF"]],"ary":["Latn",["ME"]],"arz":["Arab",["ME"]],"as":["Beng",["AS"]],"ase":["Sgnw",["NA"]],"ast":["Latn",["EU"]],"av":["Cyrl",["EU"]],"avk":["Latn",["WW"]],"ay":["Latn",["SA"]],"az":["Latn",["EU","ME"]],"ba":["Cyrl",["EU"]],"bar":["Latn",["EU"]],"bbc-latn":["Latn",["AS"]],"bbc":["Batk",["AS"]],"bcc":["Arab",["AS","ME"]],"bcl":["Latn",["AS"]],"be-tarask":["Cyrl",["EU"]],"be-x-old":["Cyrl",["EU"]],"be":["Cyrl",["EU"]],"bew":["Latn",["AS"]],"bfq":["Taml",["AS"]],"bg":["Cyrl",["EU"]],"bh":["Deva",["AS"]],"bho":["Deva",["AS"]],"bi":["Latn",["PA"]],"bjn":["Latn",["AS"]],"bm":["Latn",["AF"]],"bn":["Beng",["AS"]],"bo":["Tibt",["AS"]],"bpy":["Beng",["AS"]],"bqi":["Arab",["ME"]],"br":["Latn",["EU"]],"brh":["Latn",["ME","AS"]],"bs":["Latn",["EU"]],"bto":["Latn",["AS"]],"bug":["Bugi",["AS"]],"bxr":["Cyrl",["AS"]],"ca":["Latn",["EU"]],"cbk-zam":["Latn",["AS"]],"cdo":["Latn",["AS"]],"ce":["Cyrl",["EU"]],"ceb":["Latn",["AS"]],"ch":["Latn",["PA"]],"cho":["Latn",["NA"]],"chr":["Cher",["NA"]],"chy":["Latn",["NA"]],"ckb":["Arab",["ME"]],"co":["Latn",["EU"]],"cps":["Latn",["AS"]],"cr":["Cans",["NA"]],"crh-cyrl":["Cyrl",["EU"]],"crh-latn":["Latn",["EU"]],"crh":["Latn",["EU"]],"cs":["Latn",["EU"]],"csb":["Latn",["EU"]],"cu":["Cyrl",["EU"]],"cv":["Cyrl",["EU"]],"cy":["Latn",["EU"]],"da":["Latn",["EU"]],"de-at":["Latn",["EU"]],"de-ch":["Latn",["EU"]],"de-formal":["Latn",["EU"]],"de":["Latn",["EU"]],"diq":["Latn",["EU","AS"]],"dsb":["Latn",["EU"]],"dtp":["Latn",["AS"]],"dv":["Thaa",["AS"]],"dz":["Tibt",["AS"]],"ee":["Latn",["AF"]],"egl":["Latn",["EU"]],"el":["Grek",["EU"]],"eml":["Latn",["EU"]],"en-ca":["Latn",["NA"]],"en-gb":["Latn",["EU","AS","AU"]],"en":["Latn",["EU","NA","AU","AF","ME","AS","PA","WW"]],"eo":["Latn",["WW"]],"es-419":["Latn",["LA"]],"es-formal":["Latn",["EU","NA","LA","SA","AF","WW"]],"es":["Latn",["EU","NA","LA","SA","AF","WW"]],"esu":["Latn",["NA"]],"et":["Latn",["EU"]],"eu":["Latn",["EU"]],"ext":["Latn",["EU"]],"fa":["Arab",["ME"]],"ff":["Latn",["AF"]],"fi":["Latn",["EU"]],"fit":["Latn",["EU"]],"fj":["Latn",["PA"]],"fo":["Latn",["EU"]],"fr":["Latn",["EU"]],"frc":["Latn",["EU"]],"frp":["Latn",["EU"]],"frr":["Latn",["EU"]],"fur":["Latn",["EU"]],"fy":["Latn",["EU"]],"ga":["Latn",["EU"]],"gag":["Latn",["EU"]],"gah":["Latn",["AS"]],"gan-hans":["Hans",["AS"]],"gan-hant":["Hant",["AS"]],"gan":["Hant",["AS"]],"gbz":["Latn",["AS"]],"gcf":["Latn",["LA"]],"gd":["Latn",["EU"]],"gl":["Latn",["EU"]],"glk":["Arab",["ME"]],"gn":["Latn",["LA"]],"gom-deva":["Deva",["AS"]],"gom-latn":["Latn",["AS"]],"gom":["Deva",["AS"]],"got":["Goth",["EU"]],"grc":["Grek",["EU"]],"gsw":["Latn",["EU"]],"gu":["Gujr",["AS"]],"guc":["Latn",["LA"]],"gur":["Latn",["AF"]],"gv":["Latn",["EU"]],"ha":["Latn",["AF"]],"hak":["Latn",["AS"]],"haw":["Latn",["NA","PA"]],"he":["Hebr",["ME"]],"hi":["Deva",["AS"]],"hif-deva":["Deva",["AS"]],"hif-latn":["Latn",["PA","AU","AS"]],"hif":["Latn",["PA","AU","AS"]],"hil":["Latn",["AS"]],"hne":["Deva",["AS"]],"ho":["Latn",["PA"]],"hr":["Latn",["EU"]],"hsb":["Latn",["EU"]],"hsn":["Hans",["AS"]],"ht":["Latn",["NA"]],"hu-formal":["Latn",["EU"]],"hu":["Latn",["EU"]],"hy":["Armn",["EU","ME"]],"hz":["Latn",["AF"]],"ia":["Latn",["WW"]],"id":["Latn",["AS"]],"ie":["Latn",["WW"]],"ig":["Latn",["AF"]],"ii":["Yiii",["AS"]],"ik":["Latn",["NA"]],"ike-cans":["Cans",["NA"]],"ike-latn":["Latn",["NA"]],"ike":["Latn",["NA"]],"ilo":["Latn",["AS"]],"inh":["Cyrl",["EU"]],"io":["Latn",["WW"]],"is":["Latn",["EU"]],"it":["Latn",["EU"]],"iu":["Cans",["NA"]],"ja":["Jpan",["AS"]],"jam":["Latn",["NA"]],"jbo":["Latn",["WW"]],"jut":["Latn",["EU"]],"jv":["Latn",["AS","PA"]],"ka":["Geor",["EU"]],"kaa":["Latn",["AS"]],"kab":["Latn",["AF","EU"]],"kbd-cyrl":["Cyrl",["EU","ME"]],"kbd-latn":["Latn",["EU"]],"kbd":["Cyrl",["EU","ME"]],"kea":["Latn",["AF"]],"kg":["Latn",["AF"]],"kgp":["Latn",["LA"]],"khw":["Arab",["ME","AS"]],"ki":["Latn",["AF"]],"kiu":["Latn",["EU","ME"]],"kj":["Latn",["AF"]],"kk-arab":["Arab",["EU","AS"]],"kk-cn":["Arab",["EU","AS","ME"]],"kk-cyrl":["Cyrl",["EU","AS"]],"kk-kz":["Cyrl",["EU","AS"]],"kk-latn":["Latn",["EU","AS","ME"]],"kk-tr":["Latn",["EU","AS","ME"]],"kk":["Cyrl",["EU","AS"]],"kl":["Latn",["NA","EU"]],"km":["Khmr",["AS"]],"kn":["Knda",["AS"]],"ko-kp":["Kore",["AS"]],"ko":["Kore",["AS"]],"koi":["Cyrl",["EU"]],"kr":["Latn",["AF"]],"krc":["Cyrl",["EU"]],"kri":["Latn",["AF"]],"krj":["Latn",["ME","EU"]],"krl":["Latn",["EU"]],"ks-arab":["Arab",["AS"]],"ks-deva":["Deva",["AS"]],"ks":["Arab",["AS"]],"ksf":["Latn",["AF"]],"ksh":["Latn",["EU"]],"ku-arab":["Arab",["EU","ME"]],"ku-latn":["Latn",["EU","ME"]],"ku":["Latn",["EU","ME"]],"kv":["Cyrl",["EU"]],"kw":["Latn",["EU"]],"ky":["Cyrl",["AS"]],"la":["Latn",["EU"]],"lad":["Latn",["ME","EU","LA"]],"lb":["Latn",["EU"]],"lbe":["Cyrl",["EU"]],"lez":["Cyrl",["EU"]],"lfn":["Latn",["WW"]],"lg":["Latn",["AF"]],"li":["Latn",["EU"]],"lij":["Latn",["EU"]],"liv":["Latn",["EU"]],"lld":["Latn",["EU"]],"lmo":["Latn",["EU"]],"ln":["Latn",["AF"]],"lo":["Laoo",["AS"]],"loz":["Latn",["AF"]],"lt":["Latn",["EU"]],"ltg":["Latn",["EU"]],"lus":["Latn",["AS"]],"lv":["Latn",["EU"]],"lzh":["Hant",["AS"]],"lzz":["Latn",["EU","ME"]],"mai":["Deva",["AS"]],"map-bms":["Latn",["AS"]],"mdf":["Cyrl",["EU"]],"mfe":["Latn",["LA"]],"mg":["Latn",["AF"]],"mh":["Latn",["PA"]],"mhr":["Cyrl",["EU"]],"mi":["Latn",["PA","AU"]],"mic":["Latn",["NA"]],"min":["Latn",["AS"]],"mk":["Cyrl",["EU"]],"ml":["Mlym",["AS","ME"]],"mn":["Cyrl",["AS"]],"mnc":["Mong",["AS"]],"mni":["Beng",["AS"]],"mnw":["Mymr",["AS"]],"mo":["Cyrl",["EU"]],"mr":["Deva",["AS","ME"]],"mrj":["Cyrl",["EU"]],"ms":["Latn",["AS"]],"mt":["Latn",["EU"]],"mui":["Latn",["AS"]],"mus":["Latn",["NA"]],"mwl":["Latn",["EU"]],"mwv":["Latn",["AS"]],"my":["Mymr",["AS"]],"myv":["Cyrl",["EU"]],"mzn":["Arab",["ME","AS"]],"na":["Latn",["PA","AU"]],"nah":["Latn",["NA","LA"]],"nan":["Latn",["AS"]],"nap":["Latn",["EU"]],"nb":["Latn",["EU"]],"nds-nl":["Latn",["EU"]],"nds":["Latn",["EU"]],"ne":["Deva",["AS"]],"new":["Deva",["AS"]],"ng":["Latn",["AF"]],"niu":["Latn",["PA"]],"njo":["Latn",["AS"]],"nl-informal":["Latn",["EU","SA"]],"nl":["Latn",["EU","SA"]],"nn":["Latn",["EU"]],"no":["Latn",["EU"]],"nov":["Latn",["WW"]],"nqo":["Nkoo",["AF"]],"nrm":["Latn",["EU"]],"nso":["Latn",["AF"]],"nv":["Latn",["NA"]],"ny":["Latn",["AF"]],"oc":["Latn",["EU"]],"om":["Latn",["AF"]],"or":["Orya",["AS"]],"os":["Cyrl",["EU"]],"pa":["Guru",["AS"]],"pag":["Latn",["AS"]],"pam":["Latn",["AS"]],"pap":["Latn",["LA"]],"pcd":["Latn",["EU"]],"pdc":["Latn",["EU","NA","SA"]],"pdt":["Latn",["EU","NA","SA"]],"pfl":["Latn",["EU"]],"pi":["Deva",["AS"]],"pih":["Latn",["PA"]],"pis":["Latn",["PA"]],"pko":["Latn",["AF"]],"pl":["Latn",["EU"]],"pms":["Latn",["EU"]],"pnb":["Arab",["AS","ME"]],"pnt":["Grek",["EU"]],"ppl":["Latn",["LA"]],"prg":["Latn",["EU"]],"pru":["Latn",["EU"]],"ps":["Arab",["AS","ME"]],"pt-br":["Latn",["SA","LA"]],"pt":["Latn",["EU","LA","AS","PA","AF"]],"qu":["Latn",["SA"]],"qug":["Latn",["SA"]],"rap":["Latn",["LA"]],"rgn":["Latn",["EU"]],"rif":["Latn",["AF"]],"rki":["Mymr",["AS"]],"rm":["Latn",["EU"]],"rmy":["Latn",["EU"]],"rn":["Latn",["AF"]],"ro":["Latn",["EU"]],"roa-rup":["Latn",["EU"]],"roa-tara":["Latn",["EU"]],"rtm":["Latn",["PA"]],"ru":["Cyrl",["EU","AS","ME"]],"rue":["Cyrl",["EU"]],"rup":["Latn",["EU"]],"ruq":["Latn",["EU"]],"ruq-cyrl":["Cyrl",["EU"]],"ruq-grek":["Grek",["EU"]],"ruq-latn":["Latn",["EU"]],"rw":["Latn",["AF"]],"ryu":["Kana",["AS"]],"sa":["Deva",["AS"]],"sah":["Cyrl",["EU","AS"]],"sat":["Latn",["AS"]],"saz":["Saur",["AS"]],"sc":["Latn",["EU"]],"scn":["Latn",["EU"]],"sco":["Latn",["EU"]],"sd":["Arab",["AS"]],"sdc":["Latn",["EU"]],"se":["Latn",["EU"]],"sei":["Latn",["NA","LA"]],"sg":["Latn",["AF"]],"sgs":["Latn",["EU"]],"sh":["Latn",["EU"]],"shi-latn":["Latn",["AF"]],"shi-tfng":["Tfng",["AF"]],"shi":["Latn",["AF"]],"shn":["Mymr",["AS"]],"si":["Sinh",["AS"]],"simple":["Latn",["WW"]],"sk":["Latn",["EU"]],"sl":["Latn",["EU"]],"sli":["Latn",["EU"]],"slr":["Latn",["AS"]],"sly":["Latn",["AS"]],"sm":["Latn",["PA"]],"sma":["Latn",["EU"]],"sn":["Latn",["AF"]],"so":["Latn",["AF"]],"sq":["Latn",["EU"]],"sr-ec":["Cyrl",["EU"]],"sr-el":["Latn",["EU"]],"sr":["Cyrl",["EU"]],"srn":["Latn",["SA","NA","EU"]],"ss":["Latn",["AF"]],"st":["Latn",["AF"]],"stq":["Latn",["EU"]],"su":["Latn",["AS"]],"sv":["Latn",["EU"]],"sw":["Latn",["AF"]],"swb":["Latn",["AF"]],"sxu":["Latn",["EU"]],"szl":["Latn",["EU"]],"ta":["Taml",["AS"]],"tcy":["Knda",["AS"]],"te":["Telu",["AS"]],"tet":["Latn",["AS","PA"]],"tg-cyrl":["Cyrl",["AS"]],"tg-latn":["Latn",["AS"]],"tg":["Cyrl",["AS"]],"th":["Thai",["AS"]],"ti":["Ethi",["AF"]],"tk":["Latn",["AS"]],"tkr":["Cyrl",["AS"]],"tl":["Latn",["AS"]],"tly":["Cyrl",["EU","AS","ME"]],"tn":["Latn",["AF"]],"to":["Latn",["PA"]],"tokipona":["Latn",["WW"]],"tpi":["Latn",["PA","AS"]],"tr":["Latn",["EU","ME"]],"trp":["Latn",["AS"]],"tru":["Latn",["AS"]],"ts":["Latn",["AF"]],"tsd":["Grek",["EU"]],"tt-cyrl":["Cyrl",["EU"]],"tt-latn":["Latn",["EU"]],"tt":["Cyrl",["EU"]],"ttt":["Cyrl",["AS"]],"tum":["Latn",["AF"]],"tw":["Latn",["AF"]],"twd":["Latn",["EU"]],"ty":["Latn",["PA"]],"tyv":["Cyrl",["AS"]],"tzm":["Tfng",["AF"]],"udm":["Cyrl",["EU"]],"ug-arab":["Arab",["AS"]],"ug-latn":["Latn",["AS"]],"ug":["Arab",["AS"]],"uk":["Cyrl",["EU"]],"ur":["Arab",["AS","ME"]],"uz":["Latn",["AS"]],"ve":["Latn",["AF"]],"vec":["Latn",["EU"]],"vep":["Latn",["EU"]],"vi":["Latn",["AS"]],"vls":["Latn",["EU"]],"vmf":["Latn",["EU"]],"vo":["Latn",["WW"]],"vot":["Latn",["EU"]],"vro":["Latn",["EU"]],"wa":["Latn",["EU"]],"war":["Latn",["AS"]],"wls":["Latn",["PA"]],"wo":["Latn",["AF"]],"wuu":["Hans",["EU"]],"xal":["Cyrl",["EU"]],"xh":["Latn",["AF"]],"xmf":["Geor",["EU"]],"ydd":["Hebr",["AS","EU"]],"yi":["Hebr",["ME","EU","NA","SA"]],"yo":["Latn",["AF"]],"yrk":["Cyrl",["AS"]],"yrl":["Latn",["LA"]],"yua":["Latn",["NA","LA"]],"yue":["Hant",["AS"]],"za":["Latn",["AS"]],"zea":["Latn",["EU"]],"zh-classical":["Hant",["AS"]],"zh-cn":["Hans",["AS"]],"zh-hans":["Hans",["AS"]],"zh-hant":["Hant",["AS"]],"zh-hk":["Hant",["AS"]],"zh-min-nan":["Latn",["AS"]],"zh-mo":["Hant",["AS"]],"zh-my":["Hans",["AS"]],"zh-sg":["Hans",["AS"]],"zh-tw":["Hant",["AS"]],"zh-yue":["Hans",["AS"]],"zh":["Hans",["AS"]],"zu":["Latn",["AF"]]},"scriptgroups":{"Cyrillic":["Cyrl"],"Arabic":["Arab"],"Greek":["Grek"],"Latin":["Latn","Goth"],"WestCaucasian":["Armn","Geor"],"MiddleEastern":["Hebr","Syrc"],"African":["Ethi","Nkoo","Tfng"],"SouthAsian":["Beng","Deva","Gujr","Guru","Knda","Mlym","Orya","Saur","Sinh","Taml","Telu","Tibt","Thaa"],"SouthEastAsian":["Batk","Bugi","Java","Khmr","Laoo","Mymr","Thai"],"Mongolian":["Mong"],"SignWriting":["Sgnw"],"CJK":["Hans","Hant","Kana","Kore","Jpan","Yiii"],"NativeAmerican":["Cher","Cans"]},"regiongroups":{"NA":1,"LA":1,"SA":1,"EU":2,"ME":2,"AF":2,"AS":3,"PA":3,"AU":3,"WW":4},"importanceInRegions":{"fi":{"FI":100,"SE":10},"ru":{"RU":100,"FI":40}}}; + $.uls.data.autonyms = {"qqq":"Message documentation","aa":"Qaf\u00e1r af","ab":"\u0410\u04a7\u0441\u0448\u04d9\u0430","ace":"Ac\u00e8h","af":"Afrikaans","ak":"Akan","aln":"Geg\u00eb","als":"Alemannisch","am":"\u12a0\u121b\u122d\u129b","an":"aragon\u00e9s","ang":"\u00c6nglisc","anp":"\u0905\u0919\u094d\u0917\u093f\u0915\u093e","ar":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","arc":"\u0710\u072a\u0721\u071d\u0710","arn":"mapudungun","ary":"Ma\u0121ribi","arz":"\u0645\u0635\u0631\u0649","as":"\u0985\u09b8\u09ae\u09c0\u09df\u09be","ast":"asturianu","av":"\u0410\u0432\u0430\u0440","avk":"Kotava","ay":"Aymar aru","az":"az\u0259rbaycanca","ba":"\u0411\u0430\u0448\u04a1\u043e\u0440\u0442\u0441\u0430","bar":"Boarisch","bat-smg":"\u017demait\u0117\u0161ka","bcc":"\u0628\u0644\u0648\u0686\u06cc \u0645\u06a9\u0631\u0627\u0646\u06cc","bcl":"Bikol Central","be":"\u0431\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f","be-tarask":"\u202a\u0431\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)\u202c","be-x-old":"\u202a\u0431\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)\u202c","bg":"\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438","bh":"\u092d\u094b\u091c\u092a\u0941\u0930\u0940","bho":"\u092d\u094b\u091c\u092a\u0941\u0930\u0940","bi":"Bislama","bjn":"Bahasa Banjar","bm":"bamanankan","bn":"\u09ac\u09be\u0982\u09b2\u09be","bo":"\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42","bpy":"\u09ac\u09bf\u09b7\u09cd\u09a3\u09c1\u09aa\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09a3\u09bf\u09aa\u09c1\u09b0\u09c0","bqi":"\u0628\u062e\u062a\u064a\u0627\u0631\u064a","br":"brezhoneg","brh":"Br\u00e1hu\u00ed","bs":"bosanski","bug":"\u1a05\u1a14 \u1a15\u1a18\u1a01\u1a17","bxr":"\u0411\u0443\u0440\u044f\u0430\u0434","ca":"catal\u00e0","cbk-zam":"Chavacano de Zamboanga","cdo":"M\u00ecng-d\u0115\u0324ng-ng\u1e73\u0304","ce":"\u041d\u043e\u0445\u0447\u0438\u0439\u043d","ceb":"Cebuano","ch":"Chamoru","cho":"Choctaw","chr":"\u13e3\u13b3\u13a9","chy":"Tsets\u00eahest\u00e2hese","ckb":"\u06a9\u0648\u0631\u062f\u06cc","co":"corsu","cps":"Capice\u00f1o","cr":"N\u0113hiyaw\u0113win \/ \u14c0\u1426\u1403\u152d\u140d\u140f\u1423","crh":"Q\u0131r\u0131mtatarca","crh-latn":"\u202aQ\u0131r\u0131mtatarca (Latin)\u202c","crh-cyrl":"\u202a\u041a\u044a\u044b\u0440\u044b\u043c\u0442\u0430\u0442\u0430\u0440\u0434\u0436\u0430 (\u041a\u0438\u0440\u0438\u043b\u043b)\u202c","cs":"\u010desky","csb":"kasz\u00ebbsczi","cu":"\u0441\u043b\u043e\u0432\u0463\u0301\u043d\u044c\u0441\u043a\u044a \/ \u2c14\u2c0e\u2c11\u2c02\u2c21\u2c10\u2c20\u2c14\u2c0d\u2c1f","cv":"\u0427\u04d1\u0432\u0430\u0448\u043b\u0430","cy":"Cymraeg","da":"dansk","de":"Deutsch","de-at":"\u00d6sterreichisches Deutsch","de-ch":"Schweizer Hochdeutsch","de-formal":"\u202aDeutsch (Sie-Form)\u202c","diq":"Zazaki","dsb":"dolnoserbski","dtp":"Dusun Bundu-liwan","dv":"\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0","dz":"\u0f47\u0f7c\u0f44\u0f0b\u0f41","ee":"e\u028begbe","egl":"Emili\u00e0n","el":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac","eml":"emili\u00e0n e rumagn\u00f2l","en":"English","en-ca":"Canadian English","en-gb":"British English","eo":"Esperanto","es":"espa\u00f1ol","et":"eesti","eu":"euskara","ext":"estreme\u00f1u","fa":"\u0641\u0627\u0631\u0633\u06cc","ff":"Fulfulde","fi":"suomi","fit":"me\u00e4nkieli","fiu-vro":"V\u00f5ro","fj":"Na Vosa Vakaviti","fo":"f\u00f8royskt","fr":"fran\u00e7ais","frc":"fran\u00e7ais cadien","frp":"arpetan","frr":"Nordfriisk","fur":"furlan","fy":"Frysk","ga":"Gaeilge","gag":"Gagauz","gan":"\u8d1b\u8a9e","gan-hans":"\u202a\u8d63\u8bed\uff08\u7b80\u4f53\uff09\u202c","gan-hant":"\u202a\u8d1b\u8a9e\uff08\u7e41\u9ad4\uff09\u202c","gd":"G\u00e0idhlig","gl":"galego","glk":"\u06af\u06cc\u0644\u06a9\u06cc","gn":"Ava\u00f1e'\u1ebd","got":"\ud800\udf32\ud800\udf3f\ud800\udf44\ud800\udf39\ud800\udf43\ud800\udf3a","grc":"\u1f08\u03c1\u03c7\u03b1\u03af\u03b1 \u1f11\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u1f74","gsw":"Alemannisch","gu":"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0","gv":"Gaelg","ha":"\u0647\u064e\u0648\u064f\u0633\u064e","hak":"Hak-k\u00e2-fa","haw":"Hawai`i","he":"\u05e2\u05d1\u05e8\u05d9\u05ea","hi":"\u0939\u093f\u0928\u094d\u0926\u0940","hif":"Fiji Hindi","hif-latn":"Fiji Hindi","hil":"Ilonggo","ho":"Hiri Motu","hr":"hrvatski","hsb":"hornjoserbsce","ht":"Krey\u00f2l ayisyen","hu":"magyar","hy":"\u0540\u0561\u0575\u0565\u0580\u0565\u0576","hz":"Otsiherero","ia":"interlingua","id":"Bahasa Indonesia","ie":"Interlingue","ig":"Igbo","ii":"\ua187\ua259","ik":"I\u00f1upiak","ike-cans":"\u1403\u14c4\u1483\u144e\u1450\u1466","ike-latn":"inuktitut","ilo":"Ilokano","inh":"\u0413\u04c0\u0430\u043b\u0433\u04c0\u0430\u0439","io":"Ido","is":"\u00edslenska","it":"italiano","iu":"\u1403\u14c4\u1483\u144e\u1450\u1466\/inuktitut","ja":"\u65e5\u672c\u8a9e","jam":"Patois","jbo":"Lojban","jut":"jysk","jv":"Basa Jawa","ka":"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8","kaa":"Qaraqalpaqsha","kab":"Taqbaylit","kbd":"\u0410\u0434\u044b\u0433\u044d\u0431\u0437\u044d","kbd-cyrl":"\u0410\u0434\u044b\u0433\u044d\u0431\u0437\u044d","kg":"Kongo","khw":"\u06a9\u06be\u0648\u0627\u0631","ki":"G\u0129k\u0169y\u0169","kiu":"K\u0131rmancki","kj":"Kwanyama","kk":"\u049a\u0430\u0437\u0430\u049b\u0448\u0430","kk-arab":"\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062a\u0674\u0648\u062a\u06d5)\u202c","kk-cyrl":"\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u043a\u0438\u0440\u0438\u043b)\u202c","kk-latn":"\u202aQazaq\u015fa (lat\u0131n)\u202c","kk-cn":"\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062c\u06c7\u0646\u06af\u0648)\u202c","kk-kz":"\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u049a\u0430\u0437\u0430\u049b\u0441\u0442\u0430\u043d)\u202c","kk-tr":"\u202aQazaq\u015fa (T\u00fcrk\u00efya)\u202c","kl":"kalaallisut","km":"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a","kn":"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1","ko":"\ud55c\uad6d\uc5b4","ko-kp":"\ud55c\uad6d\uc5b4 (\uc870\uc120)","koi":"\u041f\u0435\u0440\u0435\u043c \u041a\u043e\u043c\u0438","kr":"Kanuri","krc":"\u041a\u044a\u0430\u0440\u0430\u0447\u0430\u0439-\u041c\u0430\u043b\u043a\u044a\u0430\u0440","kri":"Krio","krj":"Kinaray-a","ks":"\u0915\u0949\u0936\u0941\u0930 \/ \u06a9\u0672\u0634\u064f\u0631","ks-arab":"\u06a9\u0672\u0634\u064f\u0631","ks-deva":"\u0915\u0949\u0936\u0941\u0930","ksh":"Ripoarisch","ku":"Kurd\u00ee","ku-latn":"\u202aKurd\u00ee (lat\u00een\u00ee)\u202c","ku-arab":"\u202b\u0643\u0648\u0631\u062f\u064a (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c","kv":"\u041a\u043e\u043c\u0438","kw":"kernowek","ky":"\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430","la":"Latina","lad":"Ladino","lb":"L\u00ebtzebuergesch","lbe":"\u041b\u0430\u043a\u043a\u0443","lez":"\u041b\u0435\u0437\u0433\u0438","lfn":"Lingua Franca Nova","lg":"Luganda","li":"Limburgs","lij":"Ligure","liv":"L\u012bv\u00f5 k\u0113\u013c","lmo":"lumbaart","ln":"ling\u00e1la","lo":"\u0ea5\u0eb2\u0ea7","loz":"Silozi","lt":"lietuvi\u0173","ltg":"latga\u013cu","lus":"Mizo \u0163awng","lv":"latvie\u0161u","lzh":"\u6587\u8a00","lzz":"Lazuri","mai":"\u092e\u0948\u0925\u093f\u0932\u0940","map-bms":"Basa Banyumasan","mdf":"\u041c\u043e\u043a\u0448\u0435\u043d\u044c","mg":"Malagasy","mh":"Ebon","mhr":"\u041e\u043b\u044b\u043a \u041c\u0430\u0440\u0438\u0439","mi":"M\u0101ori","min":"Baso Minangkabau","mk":"\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438","ml":"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","mn":"\u043c\u043e\u043d\u0433\u043e\u043b","mo":"\u043c\u043e\u043b\u0434\u043e\u0432\u0435\u043d\u044f\u0441\u043a\u044d","mr":"\u092e\u0930\u093e\u0920\u0940","mrj":"\u041a\u044b\u0440\u044b\u043a \u043c\u0430\u0440\u044b","ms":"Bahasa Melayu","mt":"Malti","mus":"Mvskoke","mwl":"Mirand\u00e9s","my":"\u1019\u103c\u1014\u103a\u1019\u102c\u1018\u102c\u101e\u102c","myv":"\u042d\u0440\u0437\u044f\u043d\u044c","mzn":"\u0645\u0627\u0632\u0650\u0631\u0648\u0646\u06cc","na":"Dorerin Naoero","nah":"N\u0101huatl","nan":"B\u00e2n-l\u00e2m-g\u00fa","nap":"Nnapulitano","nb":"\u202anorsk (bokm\u00e5l)\u202c","nds":"Plattd\u00fc\u00fctsch","nds-nl":"Nedersaksisch","ne":"\u0928\u0947\u092a\u093e\u0932\u0940","new":"\u0928\u0947\u092a\u093e\u0932 \u092d\u093e\u0937\u093e","ng":"Oshiwambo","niu":"Niu\u0113","nl":"Nederlands","nl-informal":"\u202aNederlands (informeel)\u202c","nn":"\u202anorsk (nynorsk)\u202c","no":"\u202anorsk (bokm\u00e5l)\u202c","nov":"Novial","nrm":"Nouormand","nso":"Sesotho sa Leboa","nv":"Din\u00e9 bizaad","ny":"Chi-Chewa","oc":"occitan","om":"Oromoo","or":"\u0b13\u0b5c\u0b3f\u0b06","os":"\u0418\u0440\u043e\u043d","pa":"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40","pag":"Pangasinan","pam":"Kapampangan","pap":"Papiamentu","pcd":"Picard","pdc":"Deitsch","pdt":"Plautdietsch","pfl":"P\u00e4lzisch","pi":"\u092a\u093e\u0933\u093f","pih":"Norfuk \/ Pitkern","pl":"polski","pms":"Piemont\u00e8is","pnb":"\u067e\u0646\u062c\u0627\u0628\u06cc","pnt":"\u03a0\u03bf\u03bd\u03c4\u03b9\u03b1\u03ba\u03ac","prg":"Pr\u016bsiskan","ps":"\u067e\u069a\u062a\u0648","pt":"portugu\u00eas","pt-br":"portugu\u00eas do Brasil","qu":"Runa Simi","qug":"Runa shimi","rgn":"Rumagn\u00f4l","rif":"Tarifit","rm":"rumantsch","rmy":"Romani","rn":"Kirundi","ro":"rom\u00e2n\u0103","roa-rup":"Arm\u00e3neashce","roa-tara":"tarand\u00edne","ru":"\u0440\u0443\u0441\u0441\u043a\u0438\u0439","rue":"\u0440\u0443\u0441\u0438\u043d\u044c\u0441\u043a\u044b\u0439","rup":"Arm\u00e3neashce","ruq":"Vl\u0103he\u015fte","ruq-cyrl":"\u0412\u043b\u0430\u0445\u0435\u0441\u0442\u0435","ruq-latn":"Vl\u0103he\u015fte","rw":"Kinyarwanda","sa":"\u0938\u0902\u0938\u094d\u0915\u0943\u0924\u092e\u094d","sah":"\u0441\u0430\u0445\u0430 \u0442\u044b\u043b\u0430","sat":"Santali","sc":"sardu","scn":"sicilianu","sco":"Scots","sd":"\u0633\u0646\u068c\u064a","sdc":"Sassaresu","se":"s\u00e1megiella","sei":"Cmique Itom","sg":"S\u00e4ng\u00f6","sgs":"\u017eemait\u0117\u0161ka","sh":"srpskohrvatski \/ \u0441\u0440\u043f\u0441\u043a\u043e\u0445\u0440\u0432\u0430\u0442\u0441\u043a\u0438","shi":"Ta\u0161l\u1e25iyt\/\u2d5c\u2d30\u2d5b\u2d4d\u2d43\u2d49\u2d5c","shi-tfng":"\u2d5c\u2d30\u2d5b\u2d4d\u2d43\u2d49\u2d5c","shi-latn":"Ta\u0161l\u1e25iyt","si":"\u0dc3\u0dd2\u0d82\u0dc4\u0dbd","simple":"Simple English","sk":"sloven\u010dina","sl":"sloven\u0161\u010dina","sli":"Schl\u00e4sch","sm":"Gagana Samoa","sma":"\u00c5arjelsaemien","sn":"chiShona","so":"Soomaaliga","sq":"shqip","sr":"\u0441\u0440\u043f\u0441\u043a\u0438 \/ srpski","sr-ec":"\u202a\u0441\u0440\u043f\u0441\u043a\u0438 (\u045b\u0438\u0440\u0438\u043b\u0438\u0446\u0430)\u202c","sr-el":"\u202asrpski (latinica)\u202c","srn":"Sranantongo","ss":"SiSwati","st":"Sesotho","stq":"Seeltersk","su":"Basa Sunda","sv":"svenska","sw":"Kiswahili","szl":"\u015bl\u016fnski","ta":"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd","tcy":"\u0ca4\u0cc1\u0cb3\u0cc1","te":"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41","tet":"tetun","tg":"\u0442\u043e\u04b7\u0438\u043a\u04e3","tg-cyrl":"\u0442\u043e\u04b7\u0438\u043a\u04e3","tg-latn":"tojik\u012b","th":"\u0e44\u0e17\u0e22","ti":"\u1275\u130d\u122d\u129b","tk":"T\u00fcrkmen\u00e7e","tl":"Tagalog","tly":"\u0442\u043e\u043b\u044b\u0448\u04d9 \u0437\u044b\u0432\u043e\u043d","tn":"Setswana","to":"lea faka-Tonga","tokipona":"Toki Pona","tpi":"Tok Pisin","tr":"T\u00fcrk\u00e7e","ts":"Xitsonga","tt":"\u0442\u0430\u0442\u0430\u0440\u0447\u0430\/tatar\u00e7a","tt-cyrl":"\u0442\u0430\u0442\u0430\u0440\u0447\u0430","tt-latn":"tatar\u00e7a","tum":"chiTumbuka","tw":"Twi","ty":"Reo M\u0101`ohi","tyv":"\u0422\u044b\u0432\u0430 \u0434\u044b\u043b","udm":"\u0423\u0434\u043c\u0443\u0440\u0442","ug":"\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5 \/ Uyghurche","ug-arab":"\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5","ug-latn":"Uyghurche","uk":"\u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430","ur":"\u0627\u0631\u062f\u0648","uz":"O\u02bbzbekcha","ve":"Tshivenda","vec":"v\u00e8neto","vep":"Veps\u00e4n kel\u2019","vi":"Ti\u1ebfng Vi\u1ec7t","vls":"West-Vlams","vmf":"Mainfr\u00e4nkisch","vo":"Volap\u00fck","vot":"Va\u010f\u010fa","vro":"V\u00f5ro","wa":"walon","war":"Winaray","wo":"Wolof","wuu":"\u5434\u8bed","xal":"\u0425\u0430\u043b\u044c\u043c\u0433","xh":"isiXhosa","xmf":"\u10db\u10d0\u10e0\u10d2\u10d0\u10da\u10e3\u10e0\u10d8","yi":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9","yo":"Yor\u00f9b\u00e1","yue":"\u7cb5\u8a9e","za":"Vahcuengh","zea":"Ze\u00eauws","zh":"\u4e2d\u6587","zh-classical":"\u6587\u8a00","zh-cn":"\u202a\u4e2d\u6587\uff08\u4e2d\u56fd\u5927\u9646\uff09\u202c","zh-hans":"\u202a\u4e2d\u6587\uff08\u7b80\u4f53\uff09\u202c","zh-hant":"\u202a\u4e2d\u6587\uff08\u7e41\u9ad4\uff09\u202c","zh-hk":"\u202a\u4e2d\u6587\uff08\u9999\u6e2f\uff09\u202c","zh-min-nan":"B\u00e2n-l\u00e2m-g\u00fa","zh-mo":"\u202a\u4e2d\u6587\uff08\u6fb3\u9580\uff09\u202c","zh-my":"\u202a\u4e2d\u6587\uff08\u9a6c\u6765\u897f\u4e9a\uff09\u202c","zh-sg":"\u202a\u4e2d\u6587\uff08\u65b0\u52a0\u5761\uff09\u202c","zh-tw":"\u202a\u4e2d\u6587\uff08\u53f0\u7063\uff09\u202c","zh-yue":"\u7cb5\u8a9e","zu":"isiZulu"}; +} )( jQuery ); diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..7cb4270 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,126 @@ + + + + + + + + + Universal Language Selector + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+

Select language

+
+
+ +
+ + +
+
+

No results found for "Esapnol"

+
+
+

You can search by language name, script name, ISO code of language or you can browse by region: + America, + Europe, + Middle East, + Africa, + Asia, + Pacific or + Worldwide languages. +

+
+
+
+
+
+ + diff --git a/examples/resources/demo.css b/examples/resources/demo.css new file mode 100644 index 0000000..f135057 --- /dev/null +++ b/examples/resources/demo.css @@ -0,0 +1,20 @@ +body { + padding-left: 10%; + padding-right: 10%; + font-family: Arial, Helvetica, sans-serif; +} +a { + text-decoration: none; +} +div.navbar { + background-color: #333; + color: #FFFFFF; + padding: 20px; +} +span.uls-trigger { + float: right; +} +span.uls-trigger a { + color: #FFFFFF; + font-weight: bold; +} \ No newline at end of file diff --git a/examples/resources/jquery.js b/examples/resources/jquery.js new file mode 100644 index 0000000..198b3ff --- /dev/null +++ b/examples/resources/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/images/clear.png b/images/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..b371608e4941164934b141ef22eb4dcc8976e0d1 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^{24nJ z2uuZG#tRG=wgLquOI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe0@@9E+g zqA{`c;$Gfn1A(@O)7PKik!;kGt)0<0ze8|FhhTtC8At7|5XnZ#Aeqb_5y9I#zS`cO zTN@b~x^oHRi#f&I?8|d+8yn1u)aPG+;BdUmLH2^FCLAvs%qJ{os!MqH+WKeU=@18o zY3FvjGOTQnU^#KEw71M)^Xw(n9RD6V9ALL-O%PzdQd&Fl%a;$yX-7?b*VoQ<+W*Sk zHg~S-UFYZva_{cNOt{gMB%twk#YIysw(aLV*BWNeQsWBtXYyivEZE~?aOzA|g5N=h d1377b#jV1op6PjLl?L=0gQu&X%Q~loCIIgbe%$~7 literal 0 HcmV?d00001 diff --git a/images/close.png b/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..ad16b1ef4b05d9ad36ba83647cf89e4088ccc725 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^{22?p zxPdTZMzBH?P*AeOHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprRX|E{-7@ z6Kf|QoYD-nHo4ySu)@e1o@C6q}^Y%ckA>mCO&`zMC(R{GZ|9>uCy^Y~P%!jWQaZ zoGK2#vr~1(o!Z$H4`hOf8?ToH6qZUKg=${gRdM4so8F zdR1w{e+doiJW|zInms81C6T8j;{m9_y>gTe~DWM4f0dS11 literal 0 HcmV?d00001 diff --git a/images/icon-language.png b/images/icon-language.png new file mode 100644 index 0000000000000000000000000000000000000000..80df4a94216ed30b938e7c7e0515a0b251f955e7 GIT binary patch literal 987 zcmV<110?*3P)f9K_t9VwNMLM$Ot`Ldf0qA&@WNmty6 zBgDy#AK}&zV^{*=W*0UF6H+daWEW;Sk}j^1#3f#AVB#>cxlJU4I2UNxW+SZ(7!(f3 zhtOtcr(Upjv;o3=?%wD5zvuVc$}>c|W_&I!Ews5$xvuMavBhEu0?5hL z;H011w}t?C?Qk_kr3atoEXg5+5T5|20Yq~3yKlbc+!;6L&baCIe7UbLPE1S?2n2R3 ze-sP`6-aUx-rQjL#vmD4*(gdHw|@PFf7jPArknPJjgF3Dv)M2h3`|W;A%vj1x;j=i z8;!;ffC~w*->&~mcyj~Cu{zR>MlN0Sa`WmHPMmyiM@UCU2b!iaJ3EWt@28-kfc*S? zY&KhhPS^EQz=ec1ULEKM;K$UYyRO3=g)R?{%kkXe+PDLWjGwh z?RL}H*hpSp9{v6O)YjILnVE?!%QQ4JFg!fGeM_GV@Nnh<_k4GdB#G0Xf58Do*=o@v zjn2>7`0LNR1SkExR8$(@IX*s))oP`P>jDw{*0eZx#9(?lG+?_K{RBuPS1luu*p{{TlkHj6j@g6RMN002ov JPDHLkV1nj|#=8Ij literal 0 HcmV?d00001 diff --git a/images/search.png b/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..3677a2a986ea32c5cda10ce6e8c22b48b8bb2496 GIT binary patch literal 881 zcmV-%1CIQOP)RD{Q&^S#2ku$-IQ zy)*g4!hW;gH^15WX1*CwRkCEQ-6tX^y!VqLas)UGG=Vy>s;YGnsl{>pBeR1XNftPY zqQ6As4zN2X{+0LsT#_V>-vZCg&5aKX3_Ji%X85iHBN>Bf0XH@_HvU;zS@~WRY&xKC z(ohju08Rm;aU733=SIBu2Y|D{+u$|?+!`AjONv4v^~cuQS_=9>RWCZ{YFh|Jg`!XZ z=iIW0ECzEoaJxvH5s?!i09Cyo$MK7z(6(Bw)@9(|V4kX0tEQVjfbrf>rtC+(LIIYR zmYS;iESP&6jmAVSI1~o}ZM9mj`vC(OW9sd9RXv{T&(Dek@NRi|`D?#m@BM0O5TixF z&G5dbUub8%s(vg2Zcou4*4q93QblBQtrP`sPLYWG*)JH_j8)bAeXOeKMRCnqJJ2g} zetv!umrk()*0L{%x5%Ll`D7y|wS zW{VV(N~JQ`Y&P$z>ZQ=M=A0|(R)>5i7{FS44Y(EB6}UG%JbZO=aq(MLV7XkLFvdIt zN~z{LFkPhNZi1(#rgnv+?R4t<2N8Lys&9-jYu@`2prootMC1%Gn9=7;U?va#%MB!o zqH`j0m;BpDTWi2~AYFQM;lC8~aGo9l9s{4c0P7-h#yM94rUR_4W59E3?UqF;^Ul>) zwOTceMq@%%j~in~RrO_wsT8467Mwt{AL z#Q)dhb?)U}=NZ4}JKmqq_lefgQlX<}rzRpIqC=}H>Vfxe@Onl?0)Fc*PA-8rVh=qP zd7_WspzGid3M+LLMWV}pKY7h1N#K(!uBt{JL_{=9|6asI8CloChm@XZO(n`1N=6D| zl!)k71`!dA2(2im@B3rR?1c%tN!>@{_Xr*~YlxC;XdX}JTVKW`&p-R?564?SXs>>K z`_`_2hyE(D4TMaNjmG{n=eYEl0qHG7-umY0J01P8xwBaZa|c2-@>wf=PxTwZ@z&g8 z&L^(13KE!6s*O=9yiBjG?a7#Z3XG~`Wa^L}3%}2fv9Imj`>a*c)X)I-T0Ul9Yg{<& z%TO)H6eRW_6^>r_JUu^`Vy3T--nW*{-Mukx>oY;IRldD`9-9W$UDtyv8u7ZpyFyu>lqs)!Q zUcRI~h$D$5G?)rJ7fv6w_u@;5Q7**7@6n1pd{|*n?oi7^G3?= z&%4Z6zZ`8iW0`*M&QT500hKvm>yZX6deX_=Cp@@UW%$7ur=_L!U3At?)KlUnUZ@qp zaD%Z@QI}aMu>i6Bu0C5>4pLWFC(B9likN=kXK}7|%~W>wP56pLMHaG;7XR6Ix8RPe zsj2B(jpCdIl1~=m&=o)PBE73*S7|AxFA{8~!o$O3V`*|$d1FYX?xL~CJ~BC~Fd-2U z5gC~|mI@!JD=DQx;qYta!jh5_QB8+hJ3ci;$r^%&Y-n$H8P-i zPVtsy6GcNXwZnD|rXP9e*8LkAv0oNlr8q9T9$w_1 z{~mmJ$*i03Kc8|mDAKzU z2J5TVDw+QApq3L zW8v+l#AJ{8uK5!ir7G!u71F>NjED|Yf9N7q8ROt+gYw59WykCXzkQ<$%R^9qSiiVc z!PKS3la#2c2qDA5Grj8=y;biJmA9-9DC&AjWP5mcG@8=ucm)MHR~d@3V-PVZY7wg^ zs_-vvS>U`HO`o;~)fyt>Ii%%jUpP3#!g~@E6C)xbiW6zVDjOTGluwGTvtw4;!znS! zcxz!ZltcCdmcW+Q)?5vqQ0`m#;RJEyYIpbR>8-jc$Lo>TsL7jV&2b=_5yvuWMS9KV z75aQ|^bbc=M)9MvT}WDbK!_GE zBoxVdsl0W(?M9*80D;n_V99^u8-U)3M20>e(}S;mV$(M`A}&(WYw?M zcy{2mEA*knzfGPMzY^-A$&=K#Eb;K+bEEM^*R_LFkm-?@)DiOhPxS?y5X|73aG8tV z%|pM%J|rs_vT<^hMWGo3EWCbt>*!2SK;Zj2xYyg?3wdI!Dq89- z#&-PNZJ6I#^_$x~sFUC^Fff2c1w3XF|CUNC$u$Bt1(WBt8KW^Z06PSfLyEkLl-Qp9&Xt1@&Z3AtP_ zl$4ZA*PsyP+jk6u$y)9ZX3$ts85s^LGUFX1B#V!?w}qo};Z@IMP+98m>Tt$HRkBwf z=66~``SD!Scl&Ka%97_ImyWQ~>XOPgeq=|`(7aS4fD zx0#-vE3|ZP?1q%vc6_Dvc-e?bCEL`&+8PGSn;>$_^#AxbXU~c? z6PN3i8REwMn?Fu$mJ}B!^Ad?_hHIJ&q=ALX*J(I(?5&nUp~hqQ4D&%LPqkTGVOAR3 zJkaO!3Jg3y+i893t>7AMc4Irlc6rcDfVHohiHQju9Z8z4MR}1N9UXmeaG+L15`C=| z5_^lv%FQj&^7`w4-4pDJzt%W=z?O~zKT@K7kG5ud>*a1blWUrCVY^!vjH<7%PasXb zWQ2F(hUO==qKxe9#~Gm$dHQ_diWB^bOf8C-S(MzoyspiR+~n|4s7q8U0>PH@uzt!> z(ERhzx@WtE4i=tK47yopQc9l<;Dpq_wK})^s{59OuhWA2W?=BIb{lxMpPcwLnqHir zcr=^uurlztLIs(rYmEn->nTZyvG6VLfFzfjSCw>&^wxQl>CRo9oVMmKFMI$bh_b)d z?Xs$JZ~XB2`Xa5&j>|qe)h3Pr8>QXSfP|k)?PPNhGVOnDYw}zs0bS~)NgVsC5o)lO{C_SZbX5w<}2bNTuGpysJ ziMK+t`M<-QpPwHddRIsqz6id50w3;eueYu7b9eu4Ej+gAMYZSTk;I6{ zg}?iv!Bf-P8tfr*mZsAv#SxE)@o#RawaR-cGUM@sw##kI{$RS^MSAzHQ7VAf4y*L6 zto~*9UZO1Q^~l|`zw@oZPs;Qw%$vg)#Kgp6I|^V_G&D47CdGneED8c?kJ#Te`?IG6 z6nY8H$~mj(j{f=ME|a@+7HF=*9A?$j(xQd6uJ{gCNf3$5%FQK+Z@Y>Y3?q7Xb@Xrs zps#-sa&&g4zuW)ii+q_r2+@~=*w$G&0k2qlK~(Gjo7|cCRdO#8ph3f#*hDE zTNAn)P_j@oX5T*E={93kMf=rbJSmGJm&;euzxInv@I}^ut&NcYGj;Ig*?d}RYO=CS zb+=u{;n`nMzd#X$b`if#D4v>M4$b5bw^B97XHGhzY+Ng&Q`6GG*Il7UzEYx^6ZZFS zzi;DQ**npp9-8H|dl;W>qygJbcxW?{!g&?=A@$bqpGhlL@ zt3Zue$)XBDU?t~RSzSHbEZQ{ib5Zka;y5E;&75)s3L^{_0uN)4GVg;rtAd5@vDQ0j z0Cc7EONf?hxJAD*eWO`0cB>b1)(-s&f zH&6n94{x0R-JWeS=?M>kt1UFZ(SU$IJ%)g+zOb#>hf&AJ#W^3tRn5ADX!YQgt@3mU z8#30LylH*Bv*8JNkDws>t5l`owbNVqI`o{XQTCT7e{SQ2daVEK@Be3r z3{!tYXqcTfQ{~ioPo1Jh?!Eyk`J?Iqh$06f7?rsNGJ_>{d4J#2-M#vt*S_{sQ`6b` z$)1VMoLt|wNWtUxp#Q@3>Cz2TQ?8K_)0L`3oYO?%iEWtMd;#(et_J*BLQ7f5sP|0CmzrP&{!DN z--&G@eH5hyYCmXGvX4seQazZEZ;sK%t2!T zjD8y&6iKIzwA|a<`|D-rRsPIRDhJfg8xp4$Q=|3=qobpflan?FhWM&@AhUD@(sY%W zRqxrXuvKOiOR$8&@?6QA`7}r1Xg;$-+^>^56hj;V@VQ=D2-|DIan18V81q{Vo_5{m zRfYiZaSv1nZ1+H_w9B;ih~H-)D1TA`Qyh~ZsBsb&Q1|+(`T6;Wo~s)r&20>8mW*`c z!w9|tX+X>Ox?2-*uB}gI!*f>iBN^scbZ(=+udkOO`wYsxAf;dYW3I8pb`%yCf=uWC zOWzwNqa(B6QAFn(yAK+ib9Ga~v24@%-?O8(eo%R*93!cpMOtngoSvTgn-uQEy`s6# zu9-AT`4}F~bXD4Sj*fy&^ujxM)^|S^Kw$yCs7<3NE6YZ>9VyZGM-bJ zfI1o}&lPg>`v4t9c)LZ2w?Q~fiI2j8|I6pkDaWqvTSz4>*<97@=3MpT;495&DMIu* z*Qcr7{@pb<-olsG7a=caRP(@YW59+IBW?TqxyduhgjXkP!-e$yZwTW0%5MC&3mY37 z2g&*LcCt7&<7+zI)}WUJwQ|-OJ-RJ6zN2_S->KHx>vGC~G)m=^38Z>ytMkh6#A(&o zF$!-f%ARQUpkMAwO`uT? zP5!W*!1V8MVby?}pqp295r{Qeb~%hv$>n_aRt8eEP~DTio?JK_k=-95WmG^Q_765E z^vXt0K|+B+gFWGj25Z^cP#voa~|>arG~oMQZl($_(fHCfkAnF zeLVv`eR5h)HLbwgV&lHPS3FCHo*aUoLJCUP*IzWvesjyJHr@Y5Ort^jx`H=xc!_IC zeEazLIx~<_TYD#A?G~uamzNjP?@&UtB3XGz#k&+Z;n;$P+FJ7b&ARfB8l0e0_MR#p zQ?KmxB;85d63ZwCO>Dm9<-a=B_a_bZ(9PRBwV<@4qeIMP?sMP?qt&29wpI_#_N___ z0kCEGKSKn_Y;A9IaBx^%reBkhmIem~J-YO_rcFUO!Em9HZU0f5-l4D5P4Rn6?st*M z|Lmo_o0`j-tVb9IY(=`sVhT7O1_e%iIzOCt0fhMC#T9I0Q@#8)S*6gws=>e^C2N`n zN3VICmXEaro&dVq@|HXfg47wN-oH)@zzslcaB#4VjZHv+3FMW0K9S>x_`V9}5pHho zaF!fJ5r8TA_++=dV zMoT#O;h&qIzBEyS@1(dcwo6sBrhRE#a2hW?$RXT~`gqDCK z=b<7qAuiB?-XZJ*0-DOasQ>eGlgNHjXQJn=92!6oE|+YX|9P>=XUEvY7bG!Q(K`E1 z;CtLkT&o_C_O2Pa>y{)3P*8tanB@0|p? z%(pn5RvP0#7j4|io@U|p%5%^k*e5pB96I!Gwygp7NB_5P@+&O=Nxkl{a=P(C^dLPn zn=*=G#*`uCJOBRcI)M;kOa4SvC?{v(e=@$?g(~qNhnr@EP?>a2LSQ}9c`3u?;QtpirmcfY7BdzJ+0>tvN|w(rj4CEZ*7pH4PYOE;k`7|@?Id*0D)3K+qIi=QqyB?FUl@v*?Lp|;~niB(_%kbYvaf7f#xe2@$>hmelRqc z`*5e{;rg!c&s|>=?yAR3VUp8Z-YII=Fv?rrP19S>&B83Pz`a!l4xK1Pa^!tli_o9s zkA5Ba_bpcs+r4|iZd@PA2j*R$ z;84)tE=w2@&&%*MO0D?Nc$2KSoyLofK9t_m$lQFpzdJwufyGhv5_F$ysj*~a9kgHG z%=S7|!gfE8WGmynH4F{m)jfbx-rmFn@tna`F%)X!KmuC!LuG~_e(`5nz1ck8lxVH; zX45RtihH1f$jsdbV2ds|o_1;VDhw~&^vhA{Ur?i`F1hvX+c!|CItjaJf=}y&8C_3RvHQQKL`KQ2 zhj^nDoPu93S%`Vxrb+}nebkJ9gI}bIkT=G$Aa!hf-xicw2#MdnKQ@q#m<^d+cK3?s ztMpAiU+?`vLiNkh(ee0i5Eh=Fs@^jQ#M-Sys?tLptx3;SVz<=Af1bfRy|Nq~fCi1G z99kcY%NSpXW_&B-HT#oeA#|NO!oOMj=+Uch{)>J=0Rd-Y6}Qsi{m0zhrFt-t#x=q95{s6kXZK1fur^1g12_%5w=5&l+GN~5#SOp&iAxOC&=)X z2M1m@EfCL($=O+HNy+dHF`da^CtWH^jsuAfGP&cw7d|_4W~Qc~-#CcrZlHZb;e0Hy zVpj&6X16o5(uOw)8ayLkzmmlf)O1TlcNc!&(q(3g%tvehRRGH)evMIn=HgOO#$aAi z0St&gPZUUi2y9mV5(!5S!A{SPcFOcO00R%T7M+Dm99$=gw46BHm7PZ+vae?h(w>#` zQ2Ud&tpbfKoY?l-Ln0eAt>a_y+(CupD~mY=i1IP^_^$jLC%~T$NxDDay4uObti;i9SdpZPVie7&+aZ{El%17S$I-}b>DglJbdPr3~-9H(=_Jsq|qL8;_D=)Lh#La)^k zWg>JP3aKNLGc+^XI*5|Vt#G=*2R!$(zS_o4TTo~sCaBvPC zaa~~Is7=7acIyeJdx}GK^1PO_7|_h$`uq2*$Qcu0R6w|84$!N%029tUpf#pol1+4| z)JIkx`k4VRMP_DZk2RzFofK9>oB<$dOD=%nxGPuH!>>DtL%}2j%!$f6XJsly*#~B3 zOoR8VhEv&R9M1k;vrk|-&-jjs@;e9kwJz^&sUOp9-)Du81 zCy*9?-edyDD3f0JWDZ0Q;j59FBVfiPnyppBpQ1KRZIYsP0FX|(Fw|H*rl0``p5xtT zquuDjVX814z7#~vCuG-)Qm&iHt>c0zKRaSs(>jJvBXCDM^GBjeW;|yM>B+U^|Hdps zOEAaB-N{aChN+k?0zfDu2|gZMI@dTQBV}md2BSr`0OhlL&Endp^cU~FHs7Oz4V%&s+g_fI{`k*Kt zXaS2W4Ex#KiK-QkYsKRLv_@Kz$q}J5G=xZ*1R^W*9~ zs(VW>6-Gowqd#-;v<*tyF)Vd-C{@IVP*Y6~@ul#ks3{c=OOEX@{D}Z=EZ7!CJ%3f$ z%B_X@Hv?niNEeLh_)>cB`p%^k0<$inzc$li(?80Kw@hI|=UwEHzfJ{=%DjSAiXPb) zbh^L(`?n5+EOWryC!}NVd}HH1j0y`^x^=aiol@|LIJEP^UXAEhwfZi}`b6(Fw!_^( zMC5Oo4lSewHxBEGG)qMWHxI7rEMdOia&Lt0I|BRprS?)QDy453L_HTIZxPSw zN)n@0Ldv2JQB2DqnvCo{fq$H72oHY(gEXM#H;Q`~A}`>;e0eDkBxb%2)y)BFc~0xE zxB$-N|C*YnEfp8K!usilq9vP_haS*&JNykUa2<+#{2X|!6ANH8RmVXmK^3;bJo|a@ z*Dpt=abSX5j1)30C8j@kC5qu8N3dgnX4?g-$Ks>+TaVi^uF(0px$OjoE}?!Kt_2er zS(B0xufeK>nn?>G+Wb)3*T0;9`jg3J<>a8&p|EA3>w5RPBkW&kWEjl2mQ&2Y>AenIPAEcTP zXmLxTD!h8?m!{TXm_eF(#gj&9$#u&#l&E)$x|#ZRT_T>3(u7f7$4WBx;qQpsHn0B2Z}G(uM~Oq`ozyZB{c*S zAr@9`00!AcXe>Y;idn>Op3!#iZJGBxRAKWwE&*;)*fkT1RP%~f;WKT>tCN!xlR&gl z>T_G$jJGVwbn-KM-$=^Qx{-){pa9(&>Zj?bm7};+v7*w_FO5b<>4R2G=A3k12Tmm{ zl<)5D-Z-6d5uj;9Q)TBYN`c{AW1Wh?+|@AFaBnf4as{k44C2~osx}8k%|Pf#acB#t zJEmO0!ZkHDc{h1Kl}Pq>0;c_E4{iSZ`DOE9?)0?%K@l9i;VH3}r4IR;t#s}1$zfcN zwYxYpp=ml}o`llg5Xq7(H1ZXzkUx}izaHUNc|z`-opibR^wQqJQx&_kcd||LKFI5n zJIRB%v)_y1j8JSnDUKC9Q84lESpay1e7=B@JDB!e35fDUs?IfNRJ;l&-_iB**d99} z0ZN`+>U99Yu0_}pnJ5;k+5XSSz7#c^=g*^7{gQg#X^4LEkN_3;{lq4~j7XpO_xUF;fiGi!G(`8V z?Ml|*>Z0jFaqdiY9JwT6bD{!*iJS{oS64scmp+dGCI<{%-RHs2j_CxZ03dQjT}OUH z=k#a98$cqdDnPqHP0rV;G(;Z7N^5{)Bs?C+T!qAUiKO>~#|rc&r?V)$SkD6r5FbB$ z$O{I_FVQbh+b2pq4%kp9fkC#mosK9U`Uf*tZt`aisA0)+xMDkmmuxSOMvMMlEaEA% zwZtAioIiQ9()6WjfgFf4lB z6*(0Z*jE(N;&N*LJZC%9>t^xozCQrX5r5XMt3tbKrhe7C%scb${(zHPgteqEx;2XL}(=~#gFn9VgCcTvK#0C literal 0 HcmV?d00001 diff --git a/src/jquery.uls.core.js b/src/jquery.uls.core.js new file mode 100644 index 0000000..82035ab --- /dev/null +++ b/src/jquery.uls.core.js @@ -0,0 +1,197 @@ +/** + * . + * + * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, + * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other + * contributors. See CREDITS for a list. + * + * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't + * have to do anything special to choose one license or the other and you don't + * have to notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @file + * @ingroup Extensions + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +(function ( $ ) { + "use strict"; + + var ULS = function( element, options ) { + this.$element = $( element ); + this.options = $.extend( {}, $.fn.uls.defaults, options ); + this.$menu = $( this.options.menu ); + this.languages = this.$menu.data( 'languages' ); + for ( var code in this.languages ) { + if ( $.uls.data.languages[code] === undefined ) { + window.console && console.log && console.log( "ULS: Unknown language " + code + "." ); + delete this.languages[code]; + } + } + this.shown = false; + this.$languageFilter = $( 'input#languagefilter' ); + this.$noResultsView = $( 'div.uls-no-results-view' ); + this.$resultsView = $( 'div.uls-language-list' ); + this.$noResultsView.hide(); + this.render(); + this.listen(); + this.ready(); + }; + + ULS.prototype = { + constructor: ULS, + ready: function() { + // Initialize with a full search. + this.$languageFilter.val( "" ).languagefilter( "search" ); + }, + show: function() { + var pos = $.extend( {}, this.$element.offset(), { + height: this.$element[0].offsetHeight + } ); + this.$menu.css( { + top: pos.top + pos.height, + left: '25%' + } ); + + this.$menu.show(); + this.shown = true; + + this.$languageFilter.focus(); + return this; + }, + + hide: function() { + this.$menu.hide(); + this.shown = false; + return this; + }, + + render: function() { + // Rendering stuff here + }, + + noresults: function( search ) { + this.$noResultsView.show(); + // FIXME i18n + this.$noResultsView.find( 'span#uls-no-found-search-term' ).text( search ); + this.$resultsView.hide(); + }, + + success: function() { + this.$noResultsView.hide(); + this.$resultsView.show(); + }, + + listen: function() { + var that = this, lcd; + // Register all event listeners to the ULS here. + that.$element.on( 'click', $.proxy( that.click, that ) ); + + // Handle click on close button + $( ".icon-close" ).on( 'click', $.proxy( that.click, that ) ); + + // Handle key press events on the menu + that.$menu.on('keypress', $.proxy(this.keypress, this) ) + .on('keyup', $.proxy(this.keyup, this) ); + if ( $.browser.webkit || $.browser.msie ) { + this.$menu.on( 'keydown', $.proxy( this.keypress, this ) ) + } + + lcd = that.$resultsView.lcd( { + languages: that.languages, + clickhandler: function( langCode ) { + if ( that.options.onSelect ) { + that.options.onSelect.call( this, langCode ); + } + } + } ).data( "lcd" ); + + that.$languageFilter.languagefilter( { + $target: lcd, + languages: that.languages, + success: $.proxy( that.success, that ), + noresults: $.proxy( that.noresults, that ), + searchAPI: that.options.searchAPI + } ); + + // Create region selectors, one per region + $( '.uls-region, .uls-region-link' ).regionselector( { + $target: lcd, + languages: that.languages, + success: function() { + // clear the search field. + that.$languageFilter.languagefilter( 'clear' ); + that.success(); + } + } ); + + }, + + keyup: function( e ) { + if ( !this.shown ) { + return; + } + switch( e.keyCode ) { + case 27: // escape + this.hide(); + e.preventDefault(); + break; + } + e.stopPropagation(); + }, + + keypress: function( e ) { + if ( !this.shown ) { + return; + } + switch( e.keyCode ) { + case 27: // escape + this.hide(); + e.preventDefault(); + break; + } + e.stopPropagation(); + }, + + click: function( e ) { + e.stopPropagation(); + e.preventDefault(); + if ( !this.shown ) { + this.show(); + } else { + this.hide(); + } + } + + }; + + /* ULS PLUGIN DEFINITION + * =========================== */ + + $.fn.uls = function( option ) { + return this.each( function() { + var $this = $( this ), + data = $this.data( 'uls' ), + options = typeof option === 'object' && option; + + if ( !data ) { + $this.data( 'uls', ( data = new ULS( this, options ) ) ); + } + if ( typeof option === 'string' ) { + data[option](); + } + } ); + }; + + $.fn.uls.defaults = { + menu: '.uls-menu', + onSelect: null, // Callback function to be called when a language is selected + searchAPI: null // Language search API + }; + + $.fn.uls.Constructor = ULS; + +} )( jQuery ); diff --git a/src/jquery.uls.data.utils.js b/src/jquery.uls.data.utils.js new file mode 100644 index 0000000..a6c9ab0 --- /dev/null +++ b/src/jquery.uls.data.utils.js @@ -0,0 +1,301 @@ +/** + * Utility functions for querying language data. + * + * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, + * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other + * contributors. See CREDITS for a list. + * + * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't + * have to do anything special to choose one license or the other and you don't + * have to notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @file + * @ingroup Extensions + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +(function ( $ ) { + "use strict"; + + /** + * Returns the script of the language. + * @param string language code + * @return string + */ + $.uls.data.script = function( language ) { + return $.uls.data.languages[language][0]; + }; + + /** + * Returns the regions in which a language is spoken. + * @param string language code + * @return array of strings + */ + $.uls.data.regions = function( language ) { + return ( $.uls.data.languages[language] && $.uls.data.languages[language][1] ) || 'UNKNOWN'; + }; + + /** + * Returns the autonym of the language. + * @param string language code + * @return string + */ + $.uls.data.autonym = function( language ) { + return $.uls.data.autonyms[language]; + }; + + /** + * Returns an array of all region codes. + * @return array + */ + $.uls.data.allRegions = function() { + var allRegions = []; + + for( var region in $.uls.data.regiongroups ) { + allRegions.push( region ); + } + + return allRegions; + }; + + /** + * Returns all languages written in script. + * @param script string + * @return array of strings (languages codes) + */ + $.uls.data.languagesInScript = function( script ) { + return $.uls.data.languagesInScripts( [ script ] ); + }; + + /** + * Returns all languages written in the given scripts. + * @param scripts array of strings + * @return array of strings (languages codes) + */ + $.uls.data.languagesInScripts = function( scripts ) { + var languagesInScripts = []; + + for ( var language in $.uls.data.languages ) { + for ( var i = 0; i < scripts.length; i++ ) { + if ( scripts[i] === $.uls.data.script(language) ) { + languagesInScripts.push( language ); + break; + } + } + } + + return languagesInScripts; + }; + + /** + * Returns all languages in a given region. + * @param region string + * @return array of strings (languages codes) + */ + $.uls.data.languagesInRegion = function( region ) { + return $.uls.data.languagesInRegions( [ region ] ); + }; + + /** + * Returns all languages in given regions. + * @param region array of strings. + * @return array of strings (languages codes) + */ + $.uls.data.languagesInRegions = function( regions ) { + var languagesInRegions = []; + + for ( var language in $.uls.data.languages ) { + for ( var i = 0; i < regions.length; i++ ) { + if ( $.inArray( regions[i], $.uls.data.regions( language ) ) !== -1 ) { + languagesInRegions.push( language ); + break; + } + } + } + + return languagesInRegions; + }; + + /** + * Returns all languages in a region group. + * @param groupNum number. + * @return array of strings (languages codes) + */ + $.uls.data.languagesInRegionGroup = function( groupNum ) { + return $.uls.data.languagesInRegions( $.uls.data.regionsInGroup( groupNum ) ); + }; + + /** + * Returns an associative array of languages in a region, + * grouped by script. + * @param string region code + * @return associative array + */ + $.uls.data.languagesByScriptInRegion = function( region ) { + var languagesByScriptInRegion = {}; + + for ( var language in $.uls.data.languages ) { + if ( $.inArray( region, $.uls.data.regions( language ) ) !== -1 ) { + var script = $.uls.data.script( language ); + if ( languagesByScriptInRegion[script] === undefined ) { + languagesByScriptInRegion[script] = []; + } + languagesByScriptInRegion[script].push( language ); + } + } + + return languagesByScriptInRegion; + }; + + /** + * Returns an associative array of languages in a region, + * grouped by script group. + * @param string region code + * @return associative array + */ + $.uls.data.languagesByScriptGroupInRegion = function( region ) { + return $.uls.data.languagesByScriptGroupInRegions( [ region ] ); + }; + + /** + * Returns an associative array of all languages, + * grouped by script group. + * @return associative array + */ + $.uls.data.allLanguagesByScriptGroup = function() { + return $.uls.data.languagesByScriptGroupInRegions( $.uls.data.allRegions() ); + }; + + /** + * Get the given list of languages sorted by script. + * @param languages Array of language codes + * @return {Object} Array of languages indexed by script codes + */ + $.uls.data.languagesByScriptGroup = function( languages ) { + var languagesByScriptGroup = {}, scriptGroup, language, langScriptGroup; + for ( scriptGroup in $.uls.data.scriptgroups ) { + for ( language in languages ) { + langScriptGroup = $.uls.data.scriptGroupOfLanguage( language ); + if( langScriptGroup !== scriptGroup ){ + continue; + } + if ( !languagesByScriptGroup[scriptGroup] ) { + languagesByScriptGroup[scriptGroup] = []; + } + languagesByScriptGroup[scriptGroup].push( language ); + } + } + return languagesByScriptGroup; + }; + /** + * Returns an associative array of languages in several regions, + * grouped by script group. + * @param array of strings - region codes + * @return associative array + */ + $.uls.data.languagesByScriptGroupInRegions = function( regions ) { + var languagesByScriptGroupInRegions = {}; + + for ( var language in $.uls.data.languages ) { + for ( var i = 0; i < regions.length; i++ ) { + if ( $.inArray( regions[i], $.uls.data.regions( language ) ) !== -1 ) { + var scriptGroup = $.uls.data.scriptGroupOfLanguage( language ); + if ( languagesByScriptGroupInRegions[scriptGroup] === undefined ) { + languagesByScriptGroupInRegions[scriptGroup] = []; + } + languagesByScriptGroupInRegions[scriptGroup].push( language ); + break; + } + } + } + + return languagesByScriptGroupInRegions; + }; + + /** + * Returns an array of languages grouped by region group, + * region, script group and script. + * @return associative array + */ + $.uls.data.allLanguagesByRegionAndScript = function() { + var allLanguagesByRegionAndScript = {}, + region, + regionGroup; + + for ( region in $.uls.data.regiongroups ) { + regionGroup = $.uls.data.regiongroups[region]; + if ( allLanguagesByRegionAndScript[regionGroup] === undefined ) { + allLanguagesByRegionAndScript[regionGroup] = {}; + } + allLanguagesByRegionAndScript[regionGroup][region] = {}; + } + + for ( var language in $.uls.data.languages ) { + var script = $.uls.data.script( language ); + var scriptGroup = $.uls.data.groupOfScript( script ); + var regions = $.uls.data.regions( language ); + + for ( var regionNum = 0; regionNum < regions.length; regionNum++ ) { + region = regions[regionNum]; + regionGroup = $.uls.data.regiongroups[region]; + + if ( allLanguagesByRegionAndScript[regionGroup][region][scriptGroup] === undefined ) { + allLanguagesByRegionAndScript[regionGroup][region][scriptGroup] = {}; + } + + if ( allLanguagesByRegionAndScript[regionGroup][region][scriptGroup][script] === undefined ) { + allLanguagesByRegionAndScript[regionGroup][region][scriptGroup][script] = []; + } + + allLanguagesByRegionAndScript[regionGroup][region][scriptGroup][script].push( language ); + } + } + + return allLanguagesByRegionAndScript; + }; + + /** + * Returns all regions in a region group. + * @param number groupNum + * @return array of strings + */ + $.uls.data.regionsInGroup = function( groupNum ) { + var regionsInGroup = []; + + for ( var region in $.uls.data.regiongroups ) { + if ( $.uls.data.regiongroups[region] === groupNum ) { + regionsInGroup.push( region ); + } + } + + return regionsInGroup; + }; + + /** + * Returns the script group of a script or 'Other' if it doesn't + * belong to any group. + * @param string script code + * @return string script group name + */ + $.uls.data.groupOfScript = function( script ) { + for ( var group in $.uls.data.scriptgroups ) { + if ( $.inArray( script, $.uls.data.scriptgroups[group] ) !== -1 ) { + return group; + } + } + + return 'Other'; + }; + + /** + * Returns the script group of a language. + * @param string language code + * @return string script group name + */ + $.uls.data.scriptGroupOfLanguage = function( language ) { + return $.uls.data.groupOfScript( $.uls.data.script( language ) ); + }; +} )( jQuery ); diff --git a/src/jquery.uls.languagefilter.js b/src/jquery.uls.languagefilter.js new file mode 100644 index 0000000..f375c1f --- /dev/null +++ b/src/jquery.uls.languagefilter.js @@ -0,0 +1,338 @@ +/** + * jQuery language filter plugin. + * + * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, + * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other + * contributors. See CREDITS for a list. + * + * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't + * have to do anything special to choose one license or the other and you don't + * have to notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @file + * @ingroup Extensions + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +/** + * Usage: $( 'inputbox' ).languagefilter(); + * The values for autocompletion is from the options.languages. + * The data is in the format of languagecode:languagename. + */ + +(function ( $ ) { + "use strict"; + + var LanguageFilter = function( element, options ) { + this.$element = $( element ); + this.options = $.extend( {}, $.fn.regionselector.defaults, options ); + this.$element.addClass( 'languagefilter' ); + this.resultCount = 0; + this.$suggestion = $( '#' + this.$element.data( 'suggestion' ) ); + this.$clear = $( '#'+ this.$element.data( 'clear' ) ); + this.listen(); + }; + + var delay = function() { + var timer = 0; + return ( function( callback, milliseconds ) { + clearTimeout( timer ); + timer = setTimeout( callback, milliseconds ); + } ); + }(); + + LanguageFilter.prototype = { + + listen: function() { + this.$element.on( 'keypress', $.proxy( this.keyup, this ) ) + .on( 'keyup', $.proxy( this.keyup, this ) ); + if ( $.browser.webkit || $.browser.msie ) { + this.$element.on( 'keydown', $.proxy( this.keyup, this ) ); + } + if ( this.$clear.length ) { + this.$clear.on( 'click' , $.proxy( this.clear, this ) ); + } + this.toggleClear(); + }, + + keyup: function( e ) { + switch( e.keyCode ) { + case 9: // Tab -> Autocomplete + var suggestion = this.$suggestion.val(); + if ( suggestion && suggestion !== this.$element.val() ) { + this.$element.val( suggestion ); + e.preventDefault(); + e.stopPropagation(); + } else { + this.options.$target.focus(); + } + default: + var that = this; + delay( function() { + that.options.$target.empty(); + that.search(); + }, 500 ); + this.toggleClear(); + } + }, + + clear: function() { + this.$element.val( '' ); + this.$element.focus(); + this.toggleClear(); + this.search(); + }, + + toggleClear: function() { + if ( !this.$clear.length ) return; + if ( this.$element.val() ) { + this.$clear.show(); + } else { + this.$clear.hide(); + } + }, + + search: function() { + var query = $.trim( this.$element.val() ), + languages = $.uls.data.languagesByScriptGroup( this.options.languages ), + scriptGroup, langNum, langCode; + this.resultCount = 0; + for ( scriptGroup in languages ) { + for ( langNum = 0; langNum < languages[scriptGroup].length; langNum++ ) { + langCode = languages[scriptGroup][langNum]; + if ( query === "" || this.filter( langCode, query ) ) { + if ( this.resultCount === 0 ) { + // Autofill the first result. + this.autofill( langCode ); + } + this.render( langCode ); + this.resultCount++; + } + } + } + // Also do a search by search API + if( this.options.searchAPI && query ) { + this.searchAPI( query ); + } else { + this.resultHandler( query ); + } + }, + + searchAPI: function( query ) { + var that = this; + $.get( that.options.searchAPI, { search: query }, function( result ) { + $.each( result['languagesearch'], function( code, name ) { + that.render( code, name ); + that.resultCount++; + } ); + that.resultHandler( query ); + } ); + }, + + /** + * Handler method to be called once search is over. + * Based on search result call success or noresults callbacks + * @param String query + */ + resultHandler: function( query ) { + if ( this.resultCount === 0 && this.options.noresults ) { + this.options.noresults.call( this, query ); + } else if ( this.options.success ) { + this.options.success( this, query, this.resultCount ); + } + }, + + autofill: function( langCode ) { + if ( !this.$suggestion.length ) { + return; + } + if ( !this.$element.val() ) { + this.$suggestion.val( '' ); + return; + } + var autonym, + languageName = this.options.languages[langCode], + userInput = this.$element.val(), + suggestion = userInput + languageName.substring( userInput.length, languageName.length ); + if ( suggestion !== languageName ) { + // see if it was autonym match + autonym = $.uls.data.autonym( langCode ); + suggestion = userInput + autonym.substring( userInput.length, autonym.length ); + if ( suggestion !== autonym ) { + // Give up. It may be iso/script code match. + suggestion = ""; + } + } + this.$suggestion.val( suggestion ); + }, + + render: function( langCode, languageName ) { + var $target = this.options.$target; + if ( !$target ) { + return; + } + $target.append( langCode, null, languageName ); + }, + + escapeRegex: function( value ) { + // This is a prefix search. + return value.replace( /^[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&" ); + }, + + /** + * A search match happens if any of the following passes: + * a) Language name in current user interface language + * 'starts with' search string. + * b) Language autonym 'starts with' search string. + * c) ISO 639 code match with search string. + * d) ISO 15924 code for the script match the search string. + */ + filter: function( langCode, searchTerm ) { + // FIXME script is ISO 15924 code. We might need actual name of script. + var matcher = new RegExp( this.escapeRegex( searchTerm ), 'i' ), + languageName = this.options.languages[langCode]; + return matcher.test( languageName ) || + matcher.test( $.uls.data.autonym( langCode ) ) || + matcher.test( langCode ) || + matcher.test( $.uls.data.script( langCode ) ); + } + + }; + + $.fn.languagefilter = function( option ) { + return this.each( function() { + var $this = $( this ), + data = $this.data( 'languagefilter' ), + options = typeof option === 'object' && option; + if ( !data ) { + $this.data( 'languagefilter', ( data = new LanguageFilter( this, options ) ) ); + } + if ( typeof option === 'string' ) { + data[option](); + } + } ); + }; + + $.fn.languagefilter.defaults = { + $target: null, // Where to append the results + searchAPI: null, + languages: null, // Languages as code:name format. + noresults: null, // callback for no results found case + success: null // callback if any results found. + }; + + $.fn.languagefilter.Constructor = LanguageFilter; + + /* RegionSelector plugin definition */ + + /** + * Region selector is a language selector based on regions. + * Usage: $( 'jqueryselector' ).regionselector( options ); + * The attached element should have data-regiongroup attribute + * that defines the regiongroup for the selector. + */ + var RegionSelector = function( element, options ) { + this.$element = $( element ); + this.options = $.extend( {}, $.fn.regionselector.defaults, options ); + this.$element.addClass( 'regionselector' ); + this.regions = []; + this.regionGroup = this.$element.data( 'regiongroup' ); + this.init(); + this.listen(); + }; + + RegionSelector.prototype = { + constructor: RegionSelector, + + init: function() { + var region = this.$element.data( 'region' ); + this.regions = $.uls.data.regionsInGroup( this.regionGroup ); + if ( region ) { + this.regions.push( region ); + } + }, + + test: function( langCode ) { + var langRegions = $.uls.data.regions( langCode ), + region; + for ( var i = 0; i < this.regions.length; i++ ) { + region = this.regions[i]; + if ( $.inArray( region, langRegions ) >= 0 ) { + this.render( langCode, region ); + return; + } + } + }, + + show: function() { + var i, regions, language, languagesByScriptGroup, scriptGroup, languages; + // Make the selected region (and it only) active + $( '.regionselector' ).removeClass( 'active' ); + if( this.regionGroup ) { + // if there is a region group, make it active. + this.$element.addClass( 'active' ); + } + // Re-populate the list of languages + this.options.$target.empty(); + languagesByScriptGroup = $.uls.data.languagesByScriptGroup( this.options.languages ); + for ( scriptGroup in languagesByScriptGroup ) { + languages = languagesByScriptGroup[scriptGroup]; + for ( i = 0; i < languages.length; i++) { + language = languages[i]; + this.test( language ); + } + } + + if ( this.options.success ) { + this.options.success.call(); + } + }, + + render: function( langCode, region ) { + var $target = this.options.$target; + if ( !$target ) { + return; + } + $target.append( langCode, region ); + }, + + listen: function() { + this.$element.on( 'click', $.proxy( this.click, this ) ); + }, + + click: function( e ) { + e.stopPropagation(); + e.preventDefault(); + this.show(); + } + }; + + /* RegionSelector plugin definition */ + + $.fn.regionselector = function( option ) { + return this.each( function() { + var $this = $( this ), + data = $this.data( 'regionselector' ), + options = typeof option === 'object' && option; + + if ( !data ) { + $this.data( 'regionselector', ( data = new RegionSelector( this, options ) ) ); + } + if ( typeof option === 'string' ) { + data[option](); + } + } ); + }; + + $.fn.regionselector.defaults = { + $target: null, // Where to render the results + success: null, // callback if any results found. + languages: null + }; + + $.fn.regionselector.Constructor = RegionSelector; + +} )( jQuery ); diff --git a/src/jquery.uls.lcd.js b/src/jquery.uls.lcd.js new file mode 100644 index 0000000..6c9b9a8 --- /dev/null +++ b/src/jquery.uls.lcd.js @@ -0,0 +1,172 @@ +/** + * . + * + * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, + * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other + * contributors. See CREDITS for a list. + * + * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't + * have to do anything special to choose one license or the other and you don't + * have to notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @file + * @ingroup Extensions + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +(function( $ ) { + "use strict"; + + var LanguageCategoryDisplay = function( element, options ) { + this.$element = $( element ); + this.options = $.extend( {}, $.fn.lcd.defaults, options ); + this.$element.addClass( 'lcd' ); + this.show(); + this.listen(); + }; + + LanguageCategoryDisplay.prototype = { + constructor: LanguageCategoryDisplay, + + append: function( langCode, regionCode, languageName ) { + var that = this; + this.addToRegion( langCode, regionCode, languageName ); + }, + /** + * Check whether a language code is already displayed or not. + * @param langCode + * @return boolean + */ + exists: function( langCode ) { + return this.$element.find( 'li' ).filter(function() { + return $(this).data('code') === langCode; + } ).length > 0; + }, + /** + * Add the language to a region. + * If the region parameter is given , add to that region alone + * Otherwise to all regions that this language belongs. + * @param langCode + * @param region Optional region + * @param languageName Optional languageName + */ + addToRegion: function( langCode, region, languageName) { + var that = this; + if ( that.exists( langCode ) ) { + return; + } + var language = $.uls.data.languages[langCode], + langName = languageName + || $.uls.data.autonym( langCode ) + || that.options.languages[langCode] + || langCode, + regions = []; + if ( region ) { + regions.push( region ); + } else { + regions = $.uls.data.regions( langCode ); + } + + for ( var i = 0; i < regions.length; i++ ) { + var regionCode = regions[i]; + + var $li = $( '
  • ' ) + .data( 'code', langCode ) + .append( + $( '' ).prop( 'href', '#' ).prop( 'title', language ).html( langName ) + ); + + // Append the element to the column in the list + var column = that.getColumn( regionCode ); + column.append( $li ); + + if ( that.options.clickhandler ) { + $li.click( function() { + that.options.clickhandler.call( this, langCode ); + } ); + } + } + }, + + getColumn: function( regionCode ) { + var $divRegionCode = $( 'div#' + regionCode ); + var $rowDiv = $divRegionCode.find( 'div.row:last' ); + var $ul = $divRegionCode.find( 'ul:last' ); + // Each column can have maximum 10 languages. + if ( $ul.length === 0 || $ul.find( 'li' ).length >= 10 ) { + // Each row can have 4 columns with 10 languages. + $ul = $( '
      ' ).addClass( 'three columns end' ); + if ( $rowDiv.length === 0 || $rowDiv.find( 'ul' ).length >= 4 ) { + $rowDiv = $( '
      ' ).addClass( 'row uls-language-block' ); + $divRegionCode.append( $rowDiv ); + $ul.addClass('offset-by-one'); + } + $rowDiv.append( $ul ); + } + $divRegionCode.show(); + return $ul; + }, + + show: function() { + var that = this; + $.each( $.uls.data.regiongroups, function( regionCode, regionIndex ) { + var $section = $( '
      ' ).addClass( 'twelve columns uls-lcd-region-section' ).prop( 'id', regionCode ); + $section.append( $( '

      ' ).addClass( 'eleven columns uls-lcd-region-section offset-by-one' ).html( regionCode ) ); + // FIXME this is regioncode(NA, EU etc). Should be proper localized region name. + that.$element.append( $section ); + } ); + }, + + empty: function() { + this.$element.find( 'div.row' ).remove(); + this.$element.find( 'div' ).hide(); + }, + + listen: function() { + var that = this; + // The region section need to be in sync with the map filter. + that.$element.scroll( function () { + var inviewRegion = $( 'div.uls-lcd-region-section:first' ).attr( 'id' ); + var listtop = that.$element.position().top; + $( 'div.uls-lcd-region-section' ).each( function () { + var offset = $( this ).position().top - listtop; + if ( offset < 0 ) { + inviewRegion = $( this ).attr( 'id' ); + } else { + return false; + } + } ); + + var inview = $.uls.data.regiongroups[inviewRegion]; + $( 'div.uls-region' ).removeClass( 'active' ); + $( 'div#uls-region-' + inview ).addClass( 'active' ); + } ); + } + + }; + + $.fn.lcd = function( option ) { + return this.each( function() { + var $this = $( this ), + data = $this.data( 'lcd' ), + options = typeof option === 'object' && option; + + if ( !data ) { + $this.data( 'lcd', ( data = new LanguageCategoryDisplay( this, options ) ) ); + } + if ( typeof option === 'string') { + data[option](); + } + } ); + }; + + $.fn.lcd.defaults = { + languages: null + }; + + $.fn.lcd.Constructor = LanguageCategoryDisplay; + +} )( jQuery );